Merge pull request !55 from 杨敏/openkylin/nile
This commit is contained in:
杨敏 2023-12-27 05:45:24 +00:00 committed by Gitee
commit 409d97d40b
No known key found for this signature in database
GPG Key ID: 173E9B9CA92EEF8F
51 changed files with 2150 additions and 1405 deletions

View File

@ -12,163 +12,169 @@
<context>
<name>AuthDialog</name>
<message>
<location filename="../src/widgets/authdialog.cpp" line="931"/>
<location filename="../src/widgets/authdialog.cpp" line="936"/>
<location filename="../src/widgets/authdialog.cpp" line="963"/>
<location filename="../src/widgets/authdialog.cpp" line="968"/>
<source>Authentication failure, Please try again</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/widgets/authdialog.cpp" line="703"/>
<location filename="../src/widgets/authdialog.cpp" line="704"/>
<location filename="../src/widgets/authdialog.cpp" line="730"/>
<location filename="../src/widgets/authdialog.cpp" line="731"/>
<source>Password cannot be empty</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/widgets/authdialog.cpp" line="522"/>
<location filename="../src/widgets/authdialog.cpp" line="565"/>
<location filename="../src/widgets/authdialog.cpp" line="549"/>
<location filename="../src/widgets/authdialog.cpp" line="592"/>
<source>Verify face recognition or enter password to unlock</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/widgets/authdialog.cpp" line="527"/>
<location filename="../src/widgets/authdialog.cpp" line="554"/>
<source>Press fingerprint or enter password to unlock</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/widgets/authdialog.cpp" line="532"/>
<location filename="../src/widgets/authdialog.cpp" line="559"/>
<source>Verify voiceprint or enter password to unlock</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/widgets/authdialog.cpp" line="537"/>
<location filename="../src/widgets/authdialog.cpp" line="564"/>
<source>Verify finger vein or enter password to unlock</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/widgets/authdialog.cpp" line="542"/>
<location filename="../src/widgets/authdialog.cpp" line="569"/>
<source>Verify iris or enter password to unlock</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/widgets/authdialog.cpp" line="547"/>
<location filename="../src/widgets/authdialog.cpp" line="574"/>
<source>Use the bound wechat scanning code or enter the password to unlock</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/widgets/authdialog.cpp" line="857"/>
<location filename="../src/widgets/authdialog.cpp" line="884"/>
<source>Password </source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/widgets/authdialog.cpp" line="860"/>
<location filename="../src/widgets/authdialog.cpp" line="887"/>
<source>Input Password</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/widgets/authdialog.cpp" line="865"/>
<location filename="../src/widgets/authdialog.cpp" line="892"/>
<source>Username</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/widgets/authdialog.cpp" line="928"/>
<location filename="../src/widgets/authdialog.cpp" line="960"/>
<source>User name input error!</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/widgets/authdialog.cpp" line="1005"/>
<location filename="../src/widgets/authdialog.cpp" line="1037"/>
<source>login</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/widgets/authdialog.cpp" line="1076"/>
<location filename="../src/widgets/authdialog.cpp" line="346"/>
<location filename="../src/widgets/authdialog.cpp" line="1108"/>
<source>Login</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/widgets/authdialog.cpp" line="1085"/>
<location filename="../src/widgets/authdialog.cpp" line="348"/>
<source>Guest</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/widgets/authdialog.cpp" line="1117"/>
<source>Retry</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/widgets/authdialog.cpp" line="1148"/>
<location filename="../src/widgets/authdialog.cpp" line="1186"/>
<source>Please try again in %1 minutes.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/widgets/authdialog.cpp" line="1155"/>
<location filename="../src/widgets/authdialog.cpp" line="1193"/>
<source>Please try again in %1 seconds.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/widgets/authdialog.cpp" line="1162"/>
<location filename="../src/widgets/authdialog.cpp" line="1200"/>
<source>Account locked permanently.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/widgets/authdialog.cpp" line="1382"/>
<location filename="../src/widgets/authdialog.cpp" line="1534"/>
<location filename="../src/widgets/authdialog.cpp" line="1675"/>
<location filename="../src/widgets/authdialog.cpp" line="1852"/>
<location filename="../src/widgets/authdialog.cpp" line="1420"/>
<location filename="../src/widgets/authdialog.cpp" line="1572"/>
<location filename="../src/widgets/authdialog.cpp" line="1713"/>
<location filename="../src/widgets/authdialog.cpp" line="1890"/>
<source>Failed to verify %1, please enter password to unlock</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/widgets/authdialog.cpp" line="1384"/>
<location filename="../src/widgets/authdialog.cpp" line="1536"/>
<location filename="../src/widgets/authdialog.cpp" line="1679"/>
<location filename="../src/widgets/authdialog.cpp" line="1681"/>
<location filename="../src/widgets/authdialog.cpp" line="1854"/>
<location filename="../src/widgets/authdialog.cpp" line="1422"/>
<location filename="../src/widgets/authdialog.cpp" line="1574"/>
<location filename="../src/widgets/authdialog.cpp" line="1717"/>
<location filename="../src/widgets/authdialog.cpp" line="1719"/>
<location filename="../src/widgets/authdialog.cpp" line="1892"/>
<source>Unable to verify %1, please enter password to unlock</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/widgets/authdialog.cpp" line="1694"/>
<location filename="../src/widgets/authdialog.cpp" line="1698"/>
<location filename="../src/widgets/authdialog.cpp" line="1732"/>
<location filename="../src/widgets/authdialog.cpp" line="1736"/>
<source>Failed to verify %1, you still have %2 verification opportunities</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/widgets/authdialog.cpp" line="1709"/>
<location filename="../src/widgets/authdialog.cpp" line="1747"/>
<source>Abnormal network</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/widgets/authdialog.cpp" line="1716"/>
<location filename="../src/widgets/authdialog.cpp" line="1754"/>
<source>Face recognition waiting time out, please click refresh or enter the password to unlock.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/widgets/authdialog.cpp" line="1982"/>
<location filename="../src/widgets/authdialog.cpp" line="2020"/>
<source>FingerPrint</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/widgets/authdialog.cpp" line="1984"/>
<location filename="../src/widgets/authdialog.cpp" line="2022"/>
<source>FingerVein</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/widgets/authdialog.cpp" line="1986"/>
<location filename="../src/widgets/authdialog.cpp" line="2024"/>
<source>Iris</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/widgets/authdialog.cpp" line="1988"/>
<location filename="../src/widgets/authdialog.cpp" line="2026"/>
<source>Face</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/widgets/authdialog.cpp" line="1990"/>
<location filename="../src/widgets/authdialog.cpp" line="2028"/>
<source>VoicePrint</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/widgets/authdialog.cpp" line="1992"/>
<location filename="../src/widgets/authdialog.cpp" line="2030"/>
<source>Ukey</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/widgets/authdialog.cpp" line="1994"/>
<location filename="../src/widgets/authdialog.cpp" line="2032"/>
<source>QRCode</source>
<translation type="unfinished"></translation>
</message>
@ -200,31 +206,35 @@
<name>BlockWidget</name>
<message>
<location filename="../src/widgets/blockwidget.cpp" line="40"/>
<location filename="../src/widgets/blockwidget.cpp" line="82"/>
<location filename="../src/widgets/blockwidget.cpp" line="135"/>
<source>Cancel</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/widgets/blockwidget.cpp" line="44"/>
<location filename="../src/widgets/blockwidget.cpp" line="83"/>
<location filename="../src/widgets/blockwidget.cpp" line="136"/>
<source>Confrim</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/widgets/blockwidget.cpp" line="89"/>
<location filename="../src/widgets/blockwidget.cpp" line="91"/>
<source>The following program is running to prevent the system from reboot!</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/widgets/blockwidget.cpp" line="92"/>
<location filename="../src/widgets/blockwidget.cpp" line="94"/>
<source>The following program is running to prevent the system from shutting down!</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/widgets/blockwidget.cpp" line="95"/>
<location filename="../src/widgets/blockwidget.cpp" line="97"/>
<source>The following program is running to prevent the system from suspend!</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/widgets/blockwidget.cpp" line="98"/>
<location filename="../src/widgets/blockwidget.cpp" line="100"/>
<source>The following program is running to prevent the system from hibernate!</source>
<translation type="unfinished"></translation>
</message>
@ -240,17 +250,18 @@
<context>
<name>CharsWidget</name>
<message>
<location filename="../src/VirtualKeyboard/src/charswidget.cpp" line="114"/>
<location filename="../src/VirtualKeyboard/src/charswidget.cpp" line="115"/>
<location filename="../src/VirtualKeyboard/src/charswidget.cpp" line="273"/>
<source>More</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/VirtualKeyboard/src/charswidget.cpp" line="128"/>
<location filename="../src/VirtualKeyboard/src/charswidget.cpp" line="129"/>
<source>ABC</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/VirtualKeyboard/src/charswidget.cpp" line="141"/>
<location filename="../src/VirtualKeyboard/src/charswidget.cpp" line="142"/>
<source>123</source>
<translation type="unfinished"></translation>
</message>
@ -389,17 +400,17 @@
<context>
<name>LightDMHelper</name>
<message>
<location filename="../src/lock-backend/lightdmhelper.cpp" line="99"/>
<location filename="../src/lock-backend/lightdmhelper.cpp" line="105"/>
<source>failed to start session.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/lock-backend/lightdmhelper.cpp" line="234"/>
<location filename="../src/lock-backend/lightdmhelper.cpp" line="204"/>
<source>Login</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/lock-backend/lightdmhelper.cpp" line="242"/>
<location filename="../src/lock-backend/lightdmhelper.cpp" line="213"/>
<source>Guest</source>
<translation type="unfinished"></translation>
</message>
@ -407,7 +418,7 @@
<context>
<name>LockWidget</name>
<message>
<location filename="../src/widgets/lockwidget.cpp" line="923"/>
<location filename="../src/widgets/lockwidget.cpp" line="944"/>
<source>Multiple users are logged in at the same time.Are you sure you want to %1 this system?</source>
<translation type="unfinished"></translation>
</message>
@ -474,12 +485,12 @@
<context>
<name>MyNetworkWidget</name>
<message>
<location filename="../src/widgets/mynetworkwidget.cpp" line="36"/>
<location filename="../src/widgets/mynetworkwidget.cpp" line="35"/>
<source>LAN</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/widgets/mynetworkwidget.cpp" line="38"/>
<location filename="../src/widgets/mynetworkwidget.cpp" line="37"/>
<source>WLAN</source>
<translation type="unfinished"></translation>
</message>
@ -487,12 +498,13 @@
<context>
<name>NumbersWidget</name>
<message>
<location filename="../src/VirtualKeyboard/src/numberswidget.cpp" line="160"/>
<location filename="../src/VirtualKeyboard/src/numberswidget.cpp" line="161"/>
<source>&amp;&amp;?!</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/VirtualKeyboard/src/numberswidget.cpp" line="174"/>
<location filename="../src/VirtualKeyboard/src/numberswidget.cpp" line="175"/>
<location filename="../src/VirtualKeyboard/src/numberswidget.cpp" line="310"/>
<source>Return</source>
<translation type="unfinished"></translation>
</message>
@ -614,6 +626,21 @@
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>UserListWidget</name>
<message>
<location filename="../src/widgets/userlistwidget.cpp" line="46"/>
<location filename="../src/widgets/userlistwidget.cpp" line="99"/>
<source>Login</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/widgets/userlistwidget.cpp" line="48"/>
<location filename="../src/widgets/userlistwidget.cpp" line="101"/>
<source>Guest</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>Widget</name>
<message>
@ -729,12 +756,12 @@
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/lock-backend/main.cpp" line="48"/>
<location filename="../src/lock-backend/main.cpp" line="49"/>
<source>Backend for the ukui ScreenSaver.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/lock-backend/main.cpp" line="54"/>
<location filename="../src/lock-backend/main.cpp" line="55"/>
<source>lock the screen by startup</source>
<translation type="unfinished"></translation>
</message>

View File

@ -24,7 +24,7 @@
<translation type="obsolete">使</translation>
</message>
<message>
<location filename="../src/widgets/authdialog.cpp" line="1085"/>
<location filename="../src/widgets/authdialog.cpp" line="1117"/>
<source>Retry</source>
<translation></translation>
</message>
@ -53,125 +53,130 @@
<translation type="vanished">%1%2</translation>
</message>
<message>
<location filename="../src/widgets/authdialog.cpp" line="1148"/>
<location filename="../src/widgets/authdialog.cpp" line="1186"/>
<source>Please try again in %1 minutes.</source>
<translation></translation>
</message>
<message>
<location filename="../src/widgets/authdialog.cpp" line="1155"/>
<location filename="../src/widgets/authdialog.cpp" line="1193"/>
<source>Please try again in %1 seconds.</source>
<translation></translation>
</message>
<message>
<location filename="../src/widgets/authdialog.cpp" line="1162"/>
<location filename="../src/widgets/authdialog.cpp" line="1200"/>
<source>Account locked permanently.</source>
<translation></translation>
</message>
<message>
<location filename="../src/widgets/authdialog.cpp" line="522"/>
<location filename="../src/widgets/authdialog.cpp" line="565"/>
<location filename="../src/widgets/authdialog.cpp" line="549"/>
<location filename="../src/widgets/authdialog.cpp" line="592"/>
<source>Verify face recognition or enter password to unlock</source>
<translation></translation>
</message>
<message>
<location filename="../src/widgets/authdialog.cpp" line="527"/>
<location filename="../src/widgets/authdialog.cpp" line="348"/>
<source>Guest</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/widgets/authdialog.cpp" line="554"/>
<source>Press fingerprint or enter password to unlock</source>
<translation></translation>
</message>
<message>
<location filename="../src/widgets/authdialog.cpp" line="532"/>
<location filename="../src/widgets/authdialog.cpp" line="559"/>
<source>Verify voiceprint or enter password to unlock</source>
<translation></translation>
</message>
<message>
<location filename="../src/widgets/authdialog.cpp" line="537"/>
<location filename="../src/widgets/authdialog.cpp" line="564"/>
<source>Verify finger vein or enter password to unlock</source>
<translation></translation>
</message>
<message>
<location filename="../src/widgets/authdialog.cpp" line="542"/>
<location filename="../src/widgets/authdialog.cpp" line="569"/>
<source>Verify iris or enter password to unlock</source>
<translation>iris </translation>
</message>
<message>
<location filename="../src/widgets/authdialog.cpp" line="860"/>
<location filename="../src/widgets/authdialog.cpp" line="887"/>
<source>Input Password</source>
<translation></translation>
</message>
<message>
<location filename="../src/widgets/authdialog.cpp" line="865"/>
<location filename="../src/widgets/authdialog.cpp" line="892"/>
<source>Username</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/widgets/authdialog.cpp" line="928"/>
<location filename="../src/widgets/authdialog.cpp" line="960"/>
<source>User name input error!</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/widgets/authdialog.cpp" line="1005"/>
<location filename="../src/widgets/authdialog.cpp" line="1037"/>
<source>login</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/widgets/authdialog.cpp" line="1382"/>
<location filename="../src/widgets/authdialog.cpp" line="1534"/>
<location filename="../src/widgets/authdialog.cpp" line="1675"/>
<location filename="../src/widgets/authdialog.cpp" line="1852"/>
<location filename="../src/widgets/authdialog.cpp" line="1420"/>
<location filename="../src/widgets/authdialog.cpp" line="1572"/>
<location filename="../src/widgets/authdialog.cpp" line="1713"/>
<location filename="../src/widgets/authdialog.cpp" line="1890"/>
<source>Failed to verify %1, please enter password to unlock</source>
<translation>%1 </translation>
</message>
<message>
<location filename="../src/widgets/authdialog.cpp" line="1384"/>
<location filename="../src/widgets/authdialog.cpp" line="1536"/>
<location filename="../src/widgets/authdialog.cpp" line="1679"/>
<location filename="../src/widgets/authdialog.cpp" line="1681"/>
<location filename="../src/widgets/authdialog.cpp" line="1854"/>
<location filename="../src/widgets/authdialog.cpp" line="1422"/>
<location filename="../src/widgets/authdialog.cpp" line="1574"/>
<location filename="../src/widgets/authdialog.cpp" line="1717"/>
<location filename="../src/widgets/authdialog.cpp" line="1719"/>
<location filename="../src/widgets/authdialog.cpp" line="1892"/>
<source>Unable to verify %1, please enter password to unlock</source>
<translation>%1 </translation>
</message>
<message>
<location filename="../src/widgets/authdialog.cpp" line="1709"/>
<location filename="../src/widgets/authdialog.cpp" line="1747"/>
<source>Abnormal network</source>
<translation></translation>
</message>
<message>
<location filename="../src/widgets/authdialog.cpp" line="1716"/>
<location filename="../src/widgets/authdialog.cpp" line="1754"/>
<source>Face recognition waiting time out, please click refresh or enter the password to unlock.</source>
<translation></translation>
</message>
<message>
<location filename="../src/widgets/authdialog.cpp" line="1982"/>
<location filename="../src/widgets/authdialog.cpp" line="2020"/>
<source>FingerPrint</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/widgets/authdialog.cpp" line="1984"/>
<location filename="../src/widgets/authdialog.cpp" line="2022"/>
<source>FingerVein</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/widgets/authdialog.cpp" line="1986"/>
<location filename="../src/widgets/authdialog.cpp" line="2024"/>
<source>Iris</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/widgets/authdialog.cpp" line="1988"/>
<location filename="../src/widgets/authdialog.cpp" line="2026"/>
<source>Face</source>
<translation></translation>
</message>
<message>
<location filename="../src/widgets/authdialog.cpp" line="1990"/>
<location filename="../src/widgets/authdialog.cpp" line="2028"/>
<source>VoicePrint</source>
<translation></translation>
</message>
<message>
<location filename="../src/widgets/authdialog.cpp" line="1992"/>
<location filename="../src/widgets/authdialog.cpp" line="2030"/>
<source>Ukey</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/widgets/authdialog.cpp" line="1994"/>
<location filename="../src/widgets/authdialog.cpp" line="2032"/>
<source>QRCode</source>
<translation type="unfinished"></translation>
</message>
@ -180,8 +185,8 @@
<translation type="vanished">使</translation>
</message>
<message>
<location filename="../src/widgets/authdialog.cpp" line="703"/>
<location filename="../src/widgets/authdialog.cpp" line="704"/>
<location filename="../src/widgets/authdialog.cpp" line="730"/>
<location filename="../src/widgets/authdialog.cpp" line="731"/>
<source>Password cannot be empty</source>
<translation></translation>
</message>
@ -194,8 +199,8 @@
<translation type="vanished">%1.</translation>
</message>
<message>
<location filename="../src/widgets/authdialog.cpp" line="1694"/>
<location filename="../src/widgets/authdialog.cpp" line="1698"/>
<location filename="../src/widgets/authdialog.cpp" line="1732"/>
<location filename="../src/widgets/authdialog.cpp" line="1736"/>
<source>Failed to verify %1, you still have %2 verification opportunities</source>
<translation>%1 %2</translation>
</message>
@ -224,13 +229,13 @@
<translation type="vanished"></translation>
</message>
<message>
<location filename="../src/widgets/authdialog.cpp" line="931"/>
<location filename="../src/widgets/authdialog.cpp" line="936"/>
<location filename="../src/widgets/authdialog.cpp" line="963"/>
<location filename="../src/widgets/authdialog.cpp" line="968"/>
<source>Authentication failure, Please try again</source>
<translation> </translation>
</message>
<message>
<location filename="../src/widgets/authdialog.cpp" line="547"/>
<location filename="../src/widgets/authdialog.cpp" line="574"/>
<source>Use the bound wechat scanning code or enter the password to unlock</source>
<translation></translation>
</message>
@ -243,12 +248,13 @@
<translation type="vanished">USBཡི</translation>
</message>
<message>
<location filename="../src/widgets/authdialog.cpp" line="857"/>
<location filename="../src/widgets/authdialog.cpp" line="884"/>
<source>Password </source>
<translation> </translation>
</message>
<message>
<location filename="../src/widgets/authdialog.cpp" line="1076"/>
<location filename="../src/widgets/authdialog.cpp" line="346"/>
<location filename="../src/widgets/authdialog.cpp" line="1108"/>
<source>Login</source>
<translation></translation>
</message>
@ -368,31 +374,35 @@
<name>BlockWidget</name>
<message>
<location filename="../src/widgets/blockwidget.cpp" line="40"/>
<location filename="../src/widgets/blockwidget.cpp" line="82"/>
<location filename="../src/widgets/blockwidget.cpp" line="135"/>
<source>Cancel</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/widgets/blockwidget.cpp" line="44"/>
<location filename="../src/widgets/blockwidget.cpp" line="83"/>
<location filename="../src/widgets/blockwidget.cpp" line="136"/>
<source>Confrim</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/widgets/blockwidget.cpp" line="89"/>
<location filename="../src/widgets/blockwidget.cpp" line="91"/>
<source>The following program is running to prevent the system from reboot!</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/widgets/blockwidget.cpp" line="92"/>
<location filename="../src/widgets/blockwidget.cpp" line="94"/>
<source>The following program is running to prevent the system from shutting down!</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/widgets/blockwidget.cpp" line="95"/>
<location filename="../src/widgets/blockwidget.cpp" line="97"/>
<source>The following program is running to prevent the system from suspend!</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/widgets/blockwidget.cpp" line="98"/>
<location filename="../src/widgets/blockwidget.cpp" line="100"/>
<source>The following program is running to prevent the system from hibernate!</source>
<translation type="unfinished"></translation>
</message>
@ -413,17 +423,18 @@
<translation></translation>
</message>
<message>
<location filename="../src/VirtualKeyboard/src/charswidget.cpp" line="114"/>
<location filename="../src/VirtualKeyboard/src/charswidget.cpp" line="115"/>
<location filename="../src/VirtualKeyboard/src/charswidget.cpp" line="273"/>
<source>More</source>
<translation></translation>
</message>
<message>
<location filename="../src/VirtualKeyboard/src/charswidget.cpp" line="128"/>
<location filename="../src/VirtualKeyboard/src/charswidget.cpp" line="129"/>
<source>ABC</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/VirtualKeyboard/src/charswidget.cpp" line="141"/>
<location filename="../src/VirtualKeyboard/src/charswidget.cpp" line="142"/>
<source>123</source>
<translation type="unfinished"></translation>
</message>
@ -1887,17 +1898,17 @@
<context>
<name>LightDMHelper</name>
<message>
<location filename="../src/lock-backend/lightdmhelper.cpp" line="99"/>
<location filename="../src/lock-backend/lightdmhelper.cpp" line="105"/>
<source>failed to start session.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/lock-backend/lightdmhelper.cpp" line="234"/>
<location filename="../src/lock-backend/lightdmhelper.cpp" line="204"/>
<source>Login</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/lock-backend/lightdmhelper.cpp" line="242"/>
<location filename="../src/lock-backend/lightdmhelper.cpp" line="213"/>
<source>Guest</source>
<translation type="unfinished"></translation>
</message>
@ -1941,7 +1952,7 @@
<translation type="vanished"></translation>
</message>
<message>
<location filename="../src/widgets/lockwidget.cpp" line="923"/>
<location filename="../src/widgets/lockwidget.cpp" line="944"/>
<source>Multiple users are logged in at the same time.Are you sure you want to %1 this system?</source>
<translation type="unfinished"></translation>
</message>
@ -2019,12 +2030,12 @@
<context>
<name>MyNetworkWidget</name>
<message>
<location filename="../src/widgets/mynetworkwidget.cpp" line="36"/>
<location filename="../src/widgets/mynetworkwidget.cpp" line="35"/>
<source>LAN</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/widgets/mynetworkwidget.cpp" line="38"/>
<location filename="../src/widgets/mynetworkwidget.cpp" line="37"/>
<source>WLAN</source>
<translation type="unfinished"></translation>
</message>
@ -2032,12 +2043,13 @@
<context>
<name>NumbersWidget</name>
<message>
<location filename="../src/VirtualKeyboard/src/numberswidget.cpp" line="160"/>
<location filename="../src/VirtualKeyboard/src/numberswidget.cpp" line="161"/>
<source>&amp;&amp;?!</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/VirtualKeyboard/src/numberswidget.cpp" line="174"/>
<location filename="../src/VirtualKeyboard/src/numberswidget.cpp" line="175"/>
<location filename="../src/VirtualKeyboard/src/numberswidget.cpp" line="310"/>
<source>Return</source>
<translation></translation>
</message>
@ -2511,6 +2523,21 @@
<translation type="vanished"></translation>
</message>
</context>
<context>
<name>UserListWidget</name>
<message>
<location filename="../src/widgets/userlistwidget.cpp" line="46"/>
<location filename="../src/widgets/userlistwidget.cpp" line="99"/>
<source>Login</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/widgets/userlistwidget.cpp" line="48"/>
<location filename="../src/widgets/userlistwidget.cpp" line="101"/>
<source>Guest</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>Utils</name>
<message>
@ -2682,12 +2709,12 @@
<translation></translation>
</message>
<message>
<location filename="../src/lock-backend/main.cpp" line="48"/>
<location filename="../src/lock-backend/main.cpp" line="49"/>
<source>Backend for the ukui ScreenSaver.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/lock-backend/main.cpp" line="54"/>
<location filename="../src/lock-backend/main.cpp" line="55"/>
<source>lock the screen by startup</source>
<translation type="unfinished"></translation>
</message>

View File

@ -24,7 +24,7 @@
<translation type="obsolete">使</translation>
</message>
<message>
<location filename="../src/widgets/authdialog.cpp" line="1085"/>
<location filename="../src/widgets/authdialog.cpp" line="1117"/>
<source>Retry</source>
<translation>Wiederholen</translation>
</message>
@ -53,125 +53,130 @@
<translation type="vanished">%1%2</translation>
</message>
<message>
<location filename="../src/widgets/authdialog.cpp" line="1148"/>
<location filename="../src/widgets/authdialog.cpp" line="1186"/>
<source>Please try again in %1 minutes.</source>
<translation>Versuchen Sie es in %1 Minuten erneut.</translation>
</message>
<message>
<location filename="../src/widgets/authdialog.cpp" line="1155"/>
<location filename="../src/widgets/authdialog.cpp" line="1193"/>
<source>Please try again in %1 seconds.</source>
<translation>Bitte versuchen Sie es in %1 Sekunden erneut.</translation>
</message>
<message>
<location filename="../src/widgets/authdialog.cpp" line="1162"/>
<location filename="../src/widgets/authdialog.cpp" line="1200"/>
<source>Account locked permanently.</source>
<translation>Das Konto wurde dauerhaft gesperrt.</translation>
</message>
<message>
<location filename="../src/widgets/authdialog.cpp" line="522"/>
<location filename="../src/widgets/authdialog.cpp" line="565"/>
<location filename="../src/widgets/authdialog.cpp" line="549"/>
<location filename="../src/widgets/authdialog.cpp" line="592"/>
<source>Verify face recognition or enter password to unlock</source>
<translation>Überprüfen Sie die Gesichtserkennung oder geben Sie das Passwort ein, um zu entsperren</translation>
</message>
<message>
<location filename="../src/widgets/authdialog.cpp" line="527"/>
<location filename="../src/widgets/authdialog.cpp" line="348"/>
<source>Guest</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/widgets/authdialog.cpp" line="554"/>
<source>Press fingerprint or enter password to unlock</source>
<translation>Drücken Sie den Fingerabdruck oder geben Sie das Passwort ein, um zu entsperren</translation>
</message>
<message>
<location filename="../src/widgets/authdialog.cpp" line="532"/>
<location filename="../src/widgets/authdialog.cpp" line="559"/>
<source>Verify voiceprint or enter password to unlock</source>
<translation>Überprüfen Sie den Stimmabdruck oder geben Sie das Passwort ein, um zu entsperren</translation>
</message>
<message>
<location filename="../src/widgets/authdialog.cpp" line="537"/>
<location filename="../src/widgets/authdialog.cpp" line="564"/>
<source>Verify finger vein or enter password to unlock</source>
<translation>Überprüfen Sie die Fingervene oder geben Sie das Passwort ein, um zu entsperren</translation>
</message>
<message>
<location filename="../src/widgets/authdialog.cpp" line="542"/>
<location filename="../src/widgets/authdialog.cpp" line="569"/>
<source>Verify iris or enter password to unlock</source>
<translation>Überprüfen Sie die Iris oder geben Sie das Passwort ein, um zu entsperren</translation>
</message>
<message>
<location filename="../src/widgets/authdialog.cpp" line="860"/>
<location filename="../src/widgets/authdialog.cpp" line="887"/>
<source>Input Password</source>
<translation>Passwort eingeben</translation>
</message>
<message>
<location filename="../src/widgets/authdialog.cpp" line="865"/>
<location filename="../src/widgets/authdialog.cpp" line="892"/>
<source>Username</source>
<translation type="unfinished">Nutzername</translation>
</message>
<message>
<location filename="../src/widgets/authdialog.cpp" line="928"/>
<location filename="../src/widgets/authdialog.cpp" line="960"/>
<source>User name input error!</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/widgets/authdialog.cpp" line="1005"/>
<location filename="../src/widgets/authdialog.cpp" line="1037"/>
<source>login</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/widgets/authdialog.cpp" line="1382"/>
<location filename="../src/widgets/authdialog.cpp" line="1534"/>
<location filename="../src/widgets/authdialog.cpp" line="1675"/>
<location filename="../src/widgets/authdialog.cpp" line="1852"/>
<location filename="../src/widgets/authdialog.cpp" line="1420"/>
<location filename="../src/widgets/authdialog.cpp" line="1572"/>
<location filename="../src/widgets/authdialog.cpp" line="1713"/>
<location filename="../src/widgets/authdialog.cpp" line="1890"/>
<source>Failed to verify %1, please enter password to unlock</source>
<translation>%1 konnte nicht verifiziert werden, bitte geben Sie das Kennwort zum Entsperren ein</translation>
</message>
<message>
<location filename="../src/widgets/authdialog.cpp" line="1384"/>
<location filename="../src/widgets/authdialog.cpp" line="1536"/>
<location filename="../src/widgets/authdialog.cpp" line="1679"/>
<location filename="../src/widgets/authdialog.cpp" line="1681"/>
<location filename="../src/widgets/authdialog.cpp" line="1854"/>
<location filename="../src/widgets/authdialog.cpp" line="1422"/>
<location filename="../src/widgets/authdialog.cpp" line="1574"/>
<location filename="../src/widgets/authdialog.cpp" line="1717"/>
<location filename="../src/widgets/authdialog.cpp" line="1719"/>
<location filename="../src/widgets/authdialog.cpp" line="1892"/>
<source>Unable to verify %1, please enter password to unlock</source>
<translation>%1 kann nicht verifiziert werden, bitte geben Sie das Kennwort zum Entsperren ein</translation>
</message>
<message>
<location filename="../src/widgets/authdialog.cpp" line="1709"/>
<location filename="../src/widgets/authdialog.cpp" line="1747"/>
<source>Abnormal network</source>
<translation>Ungewöhnliches Netzwerk</translation>
</message>
<message>
<location filename="../src/widgets/authdialog.cpp" line="1716"/>
<location filename="../src/widgets/authdialog.cpp" line="1754"/>
<source>Face recognition waiting time out, please click refresh or enter the password to unlock.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/widgets/authdialog.cpp" line="1982"/>
<location filename="../src/widgets/authdialog.cpp" line="2020"/>
<source>FingerPrint</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/widgets/authdialog.cpp" line="1984"/>
<location filename="../src/widgets/authdialog.cpp" line="2022"/>
<source>FingerVein</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/widgets/authdialog.cpp" line="1986"/>
<location filename="../src/widgets/authdialog.cpp" line="2024"/>
<source>Iris</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/widgets/authdialog.cpp" line="1988"/>
<location filename="../src/widgets/authdialog.cpp" line="2026"/>
<source>Face</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/widgets/authdialog.cpp" line="1990"/>
<location filename="../src/widgets/authdialog.cpp" line="2028"/>
<source>VoicePrint</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/widgets/authdialog.cpp" line="1992"/>
<location filename="../src/widgets/authdialog.cpp" line="2030"/>
<source>Ukey</source>
<translation type="unfinished">Ukey</translation>
</message>
<message>
<location filename="../src/widgets/authdialog.cpp" line="1994"/>
<location filename="../src/widgets/authdialog.cpp" line="2032"/>
<source>QRCode</source>
<translation type="unfinished">QRCode</translation>
</message>
@ -180,8 +185,8 @@
<translation type="vanished">使</translation>
</message>
<message>
<location filename="../src/widgets/authdialog.cpp" line="703"/>
<location filename="../src/widgets/authdialog.cpp" line="704"/>
<location filename="../src/widgets/authdialog.cpp" line="730"/>
<location filename="../src/widgets/authdialog.cpp" line="731"/>
<source>Password cannot be empty</source>
<translation>Das Kennwort darf nicht leer sein.</translation>
</message>
@ -194,8 +199,8 @@
<translation type="vanished">%1.</translation>
</message>
<message>
<location filename="../src/widgets/authdialog.cpp" line="1694"/>
<location filename="../src/widgets/authdialog.cpp" line="1698"/>
<location filename="../src/widgets/authdialog.cpp" line="1732"/>
<location filename="../src/widgets/authdialog.cpp" line="1736"/>
<source>Failed to verify %1, you still have %2 verification opportunities</source>
<translation>%1 konnte nicht verifiziert werden, Sie haben immer noch %2 Überprüfungsmöglichkeiten</translation>
</message>
@ -224,13 +229,13 @@
<translation type="vanished"></translation>
</message>
<message>
<location filename="../src/widgets/authdialog.cpp" line="931"/>
<location filename="../src/widgets/authdialog.cpp" line="936"/>
<location filename="../src/widgets/authdialog.cpp" line="963"/>
<location filename="../src/widgets/authdialog.cpp" line="968"/>
<source>Authentication failure, Please try again</source>
<translation>Authentifizierungsfehler, Bitte versuchen Sie es erneut</translation>
</message>
<message>
<location filename="../src/widgets/authdialog.cpp" line="547"/>
<location filename="../src/widgets/authdialog.cpp" line="574"/>
<source>Use the bound wechat scanning code or enter the password to unlock</source>
<translation>Verwenden Sie den gebundenen Wechat-Scan-Code oder geben Sie das Passwort zum Entsperren ein</translation>
</message>
@ -243,12 +248,13 @@
<translation type="vanished">Stecken Sie den Ukey in den USB-Anschluss</translation>
</message>
<message>
<location filename="../src/widgets/authdialog.cpp" line="857"/>
<location filename="../src/widgets/authdialog.cpp" line="884"/>
<source>Password </source>
<translation>Passwort </translation>
</message>
<message>
<location filename="../src/widgets/authdialog.cpp" line="1076"/>
<location filename="../src/widgets/authdialog.cpp" line="346"/>
<location filename="../src/widgets/authdialog.cpp" line="1108"/>
<source>Login</source>
<translation>Einloggen</translation>
</message>
@ -368,31 +374,35 @@
<name>BlockWidget</name>
<message>
<location filename="../src/widgets/blockwidget.cpp" line="40"/>
<location filename="../src/widgets/blockwidget.cpp" line="82"/>
<location filename="../src/widgets/blockwidget.cpp" line="135"/>
<source>Cancel</source>
<translation type="unfinished">Abbrechen</translation>
</message>
<message>
<location filename="../src/widgets/blockwidget.cpp" line="44"/>
<location filename="../src/widgets/blockwidget.cpp" line="83"/>
<location filename="../src/widgets/blockwidget.cpp" line="136"/>
<source>Confrim</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/widgets/blockwidget.cpp" line="89"/>
<location filename="../src/widgets/blockwidget.cpp" line="91"/>
<source>The following program is running to prevent the system from reboot!</source>
<translation type="unfinished">Das folgende Programm wird ausgeführt, um einen Neustart des Systems zu verhindern!</translation>
</message>
<message>
<location filename="../src/widgets/blockwidget.cpp" line="92"/>
<location filename="../src/widgets/blockwidget.cpp" line="94"/>
<source>The following program is running to prevent the system from shutting down!</source>
<translation type="unfinished">Das folgende Programm wird ausgeführt, um das Herunterfahren des Systems zu verhindern!</translation>
</message>
<message>
<location filename="../src/widgets/blockwidget.cpp" line="95"/>
<location filename="../src/widgets/blockwidget.cpp" line="97"/>
<source>The following program is running to prevent the system from suspend!</source>
<translation type="unfinished">Das folgende Programm wird ausgeführt, um zu verhindern, dass das System angehalten wird!</translation>
</message>
<message>
<location filename="../src/widgets/blockwidget.cpp" line="98"/>
<location filename="../src/widgets/blockwidget.cpp" line="100"/>
<source>The following program is running to prevent the system from hibernate!</source>
<translation type="unfinished">Das folgende Programm wird ausgeführt, um zu verhindern, dass das System in den Ruhezustand versetzt wird!</translation>
</message>
@ -408,17 +418,18 @@
<context>
<name>CharsWidget</name>
<message>
<location filename="../src/VirtualKeyboard/src/charswidget.cpp" line="114"/>
<location filename="../src/VirtualKeyboard/src/charswidget.cpp" line="115"/>
<location filename="../src/VirtualKeyboard/src/charswidget.cpp" line="273"/>
<source>More</source>
<translation>Mehr</translation>
</message>
<message>
<location filename="../src/VirtualKeyboard/src/charswidget.cpp" line="128"/>
<location filename="../src/VirtualKeyboard/src/charswidget.cpp" line="129"/>
<source>ABC</source>
<translation>ABC</translation>
</message>
<message>
<location filename="../src/VirtualKeyboard/src/charswidget.cpp" line="141"/>
<location filename="../src/VirtualKeyboard/src/charswidget.cpp" line="142"/>
<source>123</source>
<translation>123</translation>
</message>
@ -1883,17 +1894,17 @@
<context>
<name>LightDMHelper</name>
<message>
<location filename="../src/lock-backend/lightdmhelper.cpp" line="99"/>
<location filename="../src/lock-backend/lightdmhelper.cpp" line="105"/>
<source>failed to start session.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/lock-backend/lightdmhelper.cpp" line="234"/>
<location filename="../src/lock-backend/lightdmhelper.cpp" line="204"/>
<source>Login</source>
<translation type="unfinished">Einloggen</translation>
</message>
<message>
<location filename="../src/lock-backend/lightdmhelper.cpp" line="242"/>
<location filename="../src/lock-backend/lightdmhelper.cpp" line="213"/>
<source>Guest</source>
<translation type="unfinished"></translation>
</message>
@ -1937,7 +1948,7 @@
<translation type="vanished">WLAN</translation>
</message>
<message>
<location filename="../src/widgets/lockwidget.cpp" line="923"/>
<location filename="../src/widgets/lockwidget.cpp" line="944"/>
<source>Multiple users are logged in at the same time.Are you sure you want to %1 this system?</source>
<translation type="unfinished"></translation>
</message>
@ -2015,12 +2026,12 @@
<context>
<name>MyNetworkWidget</name>
<message>
<location filename="../src/widgets/mynetworkwidget.cpp" line="36"/>
<location filename="../src/widgets/mynetworkwidget.cpp" line="35"/>
<source>LAN</source>
<translation type="unfinished">LAN</translation>
</message>
<message>
<location filename="../src/widgets/mynetworkwidget.cpp" line="38"/>
<location filename="../src/widgets/mynetworkwidget.cpp" line="37"/>
<source>WLAN</source>
<translation type="unfinished">WLAN</translation>
</message>
@ -2028,12 +2039,13 @@
<context>
<name>NumbersWidget</name>
<message>
<location filename="../src/VirtualKeyboard/src/numberswidget.cpp" line="160"/>
<location filename="../src/VirtualKeyboard/src/numberswidget.cpp" line="161"/>
<source>&amp;&amp;?!</source>
<translation>&amp;&amp;?!</translation>
</message>
<message>
<location filename="../src/VirtualKeyboard/src/numberswidget.cpp" line="174"/>
<location filename="../src/VirtualKeyboard/src/numberswidget.cpp" line="175"/>
<location filename="../src/VirtualKeyboard/src/numberswidget.cpp" line="310"/>
<source>Return</source>
<translation>Rückgabe</translation>
</message>
@ -2358,72 +2370,6 @@
<message>
<location filename="../src/dbusifs/enginedevice.cpp" line="308"/>
<source></source>
<comment>this is only shown for laptops with multiple batteries</comment>
<translation></translation>
</message>
<message>
<location filename="../src/dbusifs/enginedevice.cpp" line="313"/>
<source></source>
<comment>this is only shown for laptops with multiple batteries</comment>
<translation></translation>
</message>
<message>
<location filename="../src/dbusifs/enginedevice.cpp" line="337"/>
<source></source>
<comment>laptop primary battery</comment>
<translation></translation>
</message>
<message>
<location filename="../src/dbusifs/enginedevice.cpp" line="341"/>
<source></source>
<comment>battery-backed AC power source</comment>
<translation></translation>
</message>
<message>
<location filename="../src/dbusifs/enginedevice.cpp" line="345"/>
<source></source>
<comment>a monitor is a device to measure voltage and current</comment>
<translation></translation>
</message>
<message>
<location filename="../src/dbusifs/enginedevice.cpp" line="349"/>
<source></source>
<comment>wireless mice with internal batteries</comment>
<translation></translation>
</message>
<message>
<location filename="../src/dbusifs/enginedevice.cpp" line="353"/>
<source></source>
<comment>wireless keyboard with internal battery</comment>
<translation></translation>
</message>
<message>
<location filename="../src/dbusifs/enginedevice.cpp" line="357"/>
<source></source>
<comment>portable device</comment>
<translation></translation>
</message>
<message>
<location filename="../src/dbusifs/enginedevice.cpp" line="361"/>
<source></source>
<comment>cell phone (mobile...)</comment>
<translation></translation>
</message>
<message>
<location filename="../src/dbusifs/enginedevice.cpp" line="365"/>
<source></source>
<comment>media player, mp3 etc</comment>
<translation></translation>
</message>
<message>
<location filename="../src/dbusifs/enginedevice.cpp" line="369"/>
<source></source>
<comment>tablet device</comment>
<translation></translation>
</message>
<message>
<location filename="../src/dbusifs/enginedevice.cpp" line="373"/>
<source></source>
<comment>tablet device</comment>
<translation></translation>
</message>
@ -2573,6 +2519,21 @@
<translation type="vanished">Hüpfen</translation>
</message>
</context>
<context>
<name>UserListWidget</name>
<message>
<location filename="../src/widgets/userlistwidget.cpp" line="46"/>
<location filename="../src/widgets/userlistwidget.cpp" line="99"/>
<source>Login</source>
<translation type="unfinished">Einloggen</translation>
</message>
<message>
<location filename="../src/widgets/userlistwidget.cpp" line="48"/>
<location filename="../src/widgets/userlistwidget.cpp" line="101"/>
<source>Guest</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>Utils</name>
<message>
@ -2744,12 +2705,12 @@
<translation>Fenster-ID</translation>
</message>
<message>
<location filename="../src/lock-backend/main.cpp" line="48"/>
<location filename="../src/lock-backend/main.cpp" line="49"/>
<source>Backend for the ukui ScreenSaver.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/lock-backend/main.cpp" line="54"/>
<location filename="../src/lock-backend/main.cpp" line="55"/>
<source>lock the screen by startup</source>
<translation type="unfinished"></translation>
</message>

View File

@ -24,7 +24,7 @@
<translation type="obsolete">使</translation>
</message>
<message>
<location filename="../src/widgets/authdialog.cpp" line="1085"/>
<location filename="../src/widgets/authdialog.cpp" line="1117"/>
<source>Retry</source>
<translation>Reintentar</translation>
</message>
@ -53,125 +53,130 @@
<translation type="vanished">%1%2</translation>
</message>
<message>
<location filename="../src/widgets/authdialog.cpp" line="1148"/>
<location filename="../src/widgets/authdialog.cpp" line="1186"/>
<source>Please try again in %1 minutes.</source>
<translation>Inténtelo de nuevo en %1 minutos.</translation>
</message>
<message>
<location filename="../src/widgets/authdialog.cpp" line="1155"/>
<location filename="../src/widgets/authdialog.cpp" line="1193"/>
<source>Please try again in %1 seconds.</source>
<translation>Inténtelo de nuevo en %1 segundos.</translation>
</message>
<message>
<location filename="../src/widgets/authdialog.cpp" line="1162"/>
<location filename="../src/widgets/authdialog.cpp" line="1200"/>
<source>Account locked permanently.</source>
<translation>Cuenta bloqueada permanentemente.</translation>
</message>
<message>
<location filename="../src/widgets/authdialog.cpp" line="522"/>
<location filename="../src/widgets/authdialog.cpp" line="565"/>
<location filename="../src/widgets/authdialog.cpp" line="549"/>
<location filename="../src/widgets/authdialog.cpp" line="592"/>
<source>Verify face recognition or enter password to unlock</source>
<translation>Verifique el reconocimiento facial o ingrese la contraseña para desbloquear</translation>
</message>
<message>
<location filename="../src/widgets/authdialog.cpp" line="527"/>
<location filename="../src/widgets/authdialog.cpp" line="348"/>
<source>Guest</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/widgets/authdialog.cpp" line="554"/>
<source>Press fingerprint or enter password to unlock</source>
<translation>Presione la huella dactilar o ingrese la contraseña para desbloquear</translation>
</message>
<message>
<location filename="../src/widgets/authdialog.cpp" line="532"/>
<location filename="../src/widgets/authdialog.cpp" line="559"/>
<source>Verify voiceprint or enter password to unlock</source>
<translation>Verifica la huella de voz o ingresa la contraseña para desbloquear</translation>
</message>
<message>
<location filename="../src/widgets/authdialog.cpp" line="537"/>
<location filename="../src/widgets/authdialog.cpp" line="564"/>
<source>Verify finger vein or enter password to unlock</source>
<translation>Verifique la vena del dedo o ingrese la contraseña para desbloquear</translation>
</message>
<message>
<location filename="../src/widgets/authdialog.cpp" line="542"/>
<location filename="../src/widgets/authdialog.cpp" line="569"/>
<source>Verify iris or enter password to unlock</source>
<translation>Verifique el iris o ingrese la contraseña para desbloquear</translation>
</message>
<message>
<location filename="../src/widgets/authdialog.cpp" line="860"/>
<location filename="../src/widgets/authdialog.cpp" line="887"/>
<source>Input Password</source>
<translation>Contraseña de entrada</translation>
</message>
<message>
<location filename="../src/widgets/authdialog.cpp" line="865"/>
<location filename="../src/widgets/authdialog.cpp" line="892"/>
<source>Username</source>
<translation type="unfinished">Nombre de usuario</translation>
</message>
<message>
<location filename="../src/widgets/authdialog.cpp" line="928"/>
<location filename="../src/widgets/authdialog.cpp" line="960"/>
<source>User name input error!</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/widgets/authdialog.cpp" line="1005"/>
<location filename="../src/widgets/authdialog.cpp" line="1037"/>
<source>login</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/widgets/authdialog.cpp" line="1382"/>
<location filename="../src/widgets/authdialog.cpp" line="1534"/>
<location filename="../src/widgets/authdialog.cpp" line="1675"/>
<location filename="../src/widgets/authdialog.cpp" line="1852"/>
<location filename="../src/widgets/authdialog.cpp" line="1420"/>
<location filename="../src/widgets/authdialog.cpp" line="1572"/>
<location filename="../src/widgets/authdialog.cpp" line="1713"/>
<location filename="../src/widgets/authdialog.cpp" line="1890"/>
<source>Failed to verify %1, please enter password to unlock</source>
<translation>No se pudo verificar %1, ingrese la contraseña para desbloquear</translation>
</message>
<message>
<location filename="../src/widgets/authdialog.cpp" line="1384"/>
<location filename="../src/widgets/authdialog.cpp" line="1536"/>
<location filename="../src/widgets/authdialog.cpp" line="1679"/>
<location filename="../src/widgets/authdialog.cpp" line="1681"/>
<location filename="../src/widgets/authdialog.cpp" line="1854"/>
<location filename="../src/widgets/authdialog.cpp" line="1422"/>
<location filename="../src/widgets/authdialog.cpp" line="1574"/>
<location filename="../src/widgets/authdialog.cpp" line="1717"/>
<location filename="../src/widgets/authdialog.cpp" line="1719"/>
<location filename="../src/widgets/authdialog.cpp" line="1892"/>
<source>Unable to verify %1, please enter password to unlock</source>
<translation>No se puede verificar %1, ingrese la contraseña para desbloquear</translation>
</message>
<message>
<location filename="../src/widgets/authdialog.cpp" line="1709"/>
<location filename="../src/widgets/authdialog.cpp" line="1747"/>
<source>Abnormal network</source>
<translation>Red anormal</translation>
</message>
<message>
<location filename="../src/widgets/authdialog.cpp" line="1716"/>
<location filename="../src/widgets/authdialog.cpp" line="1754"/>
<source>Face recognition waiting time out, please click refresh or enter the password to unlock.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/widgets/authdialog.cpp" line="1982"/>
<location filename="../src/widgets/authdialog.cpp" line="2020"/>
<source>FingerPrint</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/widgets/authdialog.cpp" line="1984"/>
<location filename="../src/widgets/authdialog.cpp" line="2022"/>
<source>FingerVein</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/widgets/authdialog.cpp" line="1986"/>
<location filename="../src/widgets/authdialog.cpp" line="2024"/>
<source>Iris</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/widgets/authdialog.cpp" line="1988"/>
<location filename="../src/widgets/authdialog.cpp" line="2026"/>
<source>Face</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/widgets/authdialog.cpp" line="1990"/>
<location filename="../src/widgets/authdialog.cpp" line="2028"/>
<source>VoicePrint</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/widgets/authdialog.cpp" line="1992"/>
<location filename="../src/widgets/authdialog.cpp" line="2030"/>
<source>Ukey</source>
<translation type="unfinished">Ukey</translation>
</message>
<message>
<location filename="../src/widgets/authdialog.cpp" line="1994"/>
<location filename="../src/widgets/authdialog.cpp" line="2032"/>
<source>QRCode</source>
<translation type="unfinished">QRCode</translation>
</message>
@ -180,8 +185,8 @@
<translation type="vanished">使</translation>
</message>
<message>
<location filename="../src/widgets/authdialog.cpp" line="703"/>
<location filename="../src/widgets/authdialog.cpp" line="704"/>
<location filename="../src/widgets/authdialog.cpp" line="730"/>
<location filename="../src/widgets/authdialog.cpp" line="731"/>
<source>Password cannot be empty</source>
<translation>La contraseña no puede estar vacía</translation>
</message>
@ -194,8 +199,8 @@
<translation type="vanished">%1.</translation>
</message>
<message>
<location filename="../src/widgets/authdialog.cpp" line="1694"/>
<location filename="../src/widgets/authdialog.cpp" line="1698"/>
<location filename="../src/widgets/authdialog.cpp" line="1732"/>
<location filename="../src/widgets/authdialog.cpp" line="1736"/>
<source>Failed to verify %1, you still have %2 verification opportunities</source>
<translation>No se pudo verificar %1, todavía tiene %2 oportunidades de verificación</translation>
</message>
@ -224,13 +229,13 @@
<translation type="vanished"></translation>
</message>
<message>
<location filename="../src/widgets/authdialog.cpp" line="931"/>
<location filename="../src/widgets/authdialog.cpp" line="936"/>
<location filename="../src/widgets/authdialog.cpp" line="963"/>
<location filename="../src/widgets/authdialog.cpp" line="968"/>
<source>Authentication failure, Please try again</source>
<translation>Error de autenticación, inténtelo de nuevo</translation>
</message>
<message>
<location filename="../src/widgets/authdialog.cpp" line="547"/>
<location filename="../src/widgets/authdialog.cpp" line="574"/>
<source>Use the bound wechat scanning code or enter the password to unlock</source>
<translation>Use el código de escaneo de wechat vinculado o ingrese la contraseña para desbloquear</translation>
</message>
@ -243,12 +248,13 @@
<translation type="vanished">Inserte la ukey en el puerto USB</translation>
</message>
<message>
<location filename="../src/widgets/authdialog.cpp" line="857"/>
<location filename="../src/widgets/authdialog.cpp" line="884"/>
<source>Password </source>
<translation>Contraseña </translation>
</message>
<message>
<location filename="../src/widgets/authdialog.cpp" line="1076"/>
<location filename="../src/widgets/authdialog.cpp" line="346"/>
<location filename="../src/widgets/authdialog.cpp" line="1108"/>
<source>Login</source>
<translation>Iniciar sesión</translation>
</message>
@ -368,31 +374,35 @@
<name>BlockWidget</name>
<message>
<location filename="../src/widgets/blockwidget.cpp" line="40"/>
<location filename="../src/widgets/blockwidget.cpp" line="82"/>
<location filename="../src/widgets/blockwidget.cpp" line="135"/>
<source>Cancel</source>
<translation type="unfinished">Cancelar</translation>
</message>
<message>
<location filename="../src/widgets/blockwidget.cpp" line="44"/>
<location filename="../src/widgets/blockwidget.cpp" line="83"/>
<location filename="../src/widgets/blockwidget.cpp" line="136"/>
<source>Confrim</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/widgets/blockwidget.cpp" line="89"/>
<location filename="../src/widgets/blockwidget.cpp" line="91"/>
<source>The following program is running to prevent the system from reboot!</source>
<translation type="unfinished">¡El siguiente programa se está ejecutando para evitar que el sistema se reinicie!</translation>
</message>
<message>
<location filename="../src/widgets/blockwidget.cpp" line="92"/>
<location filename="../src/widgets/blockwidget.cpp" line="94"/>
<source>The following program is running to prevent the system from shutting down!</source>
<translation type="unfinished">¡El siguiente programa se está ejecutando para evitar que el sistema se apague!</translation>
</message>
<message>
<location filename="../src/widgets/blockwidget.cpp" line="95"/>
<location filename="../src/widgets/blockwidget.cpp" line="97"/>
<source>The following program is running to prevent the system from suspend!</source>
<translation type="unfinished">¡El siguiente programa se está ejecutando para evitar que el sistema se suspenda!</translation>
</message>
<message>
<location filename="../src/widgets/blockwidget.cpp" line="98"/>
<location filename="../src/widgets/blockwidget.cpp" line="100"/>
<source>The following program is running to prevent the system from hibernate!</source>
<translation type="unfinished">¡El siguiente programa se está ejecutando para evitar que el sistema hiberne!</translation>
</message>
@ -408,17 +418,18 @@
<context>
<name>CharsWidget</name>
<message>
<location filename="../src/VirtualKeyboard/src/charswidget.cpp" line="114"/>
<location filename="../src/VirtualKeyboard/src/charswidget.cpp" line="115"/>
<location filename="../src/VirtualKeyboard/src/charswidget.cpp" line="273"/>
<source>More</source>
<translation>Más</translation>
</message>
<message>
<location filename="../src/VirtualKeyboard/src/charswidget.cpp" line="128"/>
<location filename="../src/VirtualKeyboard/src/charswidget.cpp" line="129"/>
<source>ABC</source>
<translation>ABECEDARIO</translation>
</message>
<message>
<location filename="../src/VirtualKeyboard/src/charswidget.cpp" line="141"/>
<location filename="../src/VirtualKeyboard/src/charswidget.cpp" line="142"/>
<source>123</source>
<translation>123</translation>
</message>
@ -1883,17 +1894,17 @@
<context>
<name>LightDMHelper</name>
<message>
<location filename="../src/lock-backend/lightdmhelper.cpp" line="99"/>
<location filename="../src/lock-backend/lightdmhelper.cpp" line="105"/>
<source>failed to start session.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/lock-backend/lightdmhelper.cpp" line="234"/>
<location filename="../src/lock-backend/lightdmhelper.cpp" line="204"/>
<source>Login</source>
<translation type="unfinished">Iniciar sesión</translation>
</message>
<message>
<location filename="../src/lock-backend/lightdmhelper.cpp" line="242"/>
<location filename="../src/lock-backend/lightdmhelper.cpp" line="213"/>
<source>Guest</source>
<translation type="unfinished"></translation>
</message>
@ -1941,7 +1952,7 @@
<translation type="vanished">WLAN</translation>
</message>
<message>
<location filename="../src/widgets/lockwidget.cpp" line="923"/>
<location filename="../src/widgets/lockwidget.cpp" line="944"/>
<source>Multiple users are logged in at the same time.Are you sure you want to %1 this system?</source>
<translation type="unfinished"></translation>
</message>
@ -2019,12 +2030,12 @@
<context>
<name>MyNetworkWidget</name>
<message>
<location filename="../src/widgets/mynetworkwidget.cpp" line="36"/>
<location filename="../src/widgets/mynetworkwidget.cpp" line="35"/>
<source>LAN</source>
<translation type="unfinished">LAN</translation>
</message>
<message>
<location filename="../src/widgets/mynetworkwidget.cpp" line="38"/>
<location filename="../src/widgets/mynetworkwidget.cpp" line="37"/>
<source>WLAN</source>
<translation type="unfinished">WLAN</translation>
</message>
@ -2032,12 +2043,13 @@
<context>
<name>NumbersWidget</name>
<message>
<location filename="../src/VirtualKeyboard/src/numberswidget.cpp" line="160"/>
<location filename="../src/VirtualKeyboard/src/numberswidget.cpp" line="161"/>
<source>&amp;&amp;?!</source>
<translation>&amp;&amp;?!</translation>
</message>
<message>
<location filename="../src/VirtualKeyboard/src/numberswidget.cpp" line="174"/>
<location filename="../src/VirtualKeyboard/src/numberswidget.cpp" line="175"/>
<location filename="../src/VirtualKeyboard/src/numberswidget.cpp" line="310"/>
<source>Return</source>
<translation>Devolución</translation>
</message>
@ -2362,72 +2374,6 @@
<message>
<location filename="../src/dbusifs/enginedevice.cpp" line="308"/>
<source></source>
<comment>this is only shown for laptops with multiple batteries</comment>
<translation></translation>
</message>
<message>
<location filename="../src/dbusifs/enginedevice.cpp" line="313"/>
<source></source>
<comment>this is only shown for laptops with multiple batteries</comment>
<translation></translation>
</message>
<message>
<location filename="../src/dbusifs/enginedevice.cpp" line="337"/>
<source></source>
<comment>laptop primary battery</comment>
<translation></translation>
</message>
<message>
<location filename="../src/dbusifs/enginedevice.cpp" line="341"/>
<source></source>
<comment>battery-backed AC power source</comment>
<translation></translation>
</message>
<message>
<location filename="../src/dbusifs/enginedevice.cpp" line="345"/>
<source></source>
<comment>a monitor is a device to measure voltage and current</comment>
<translation></translation>
</message>
<message>
<location filename="../src/dbusifs/enginedevice.cpp" line="349"/>
<source></source>
<comment>wireless mice with internal batteries</comment>
<translation></translation>
</message>
<message>
<location filename="../src/dbusifs/enginedevice.cpp" line="353"/>
<source></source>
<comment>wireless keyboard with internal battery</comment>
<translation></translation>
</message>
<message>
<location filename="../src/dbusifs/enginedevice.cpp" line="357"/>
<source></source>
<comment>portable device</comment>
<translation></translation>
</message>
<message>
<location filename="../src/dbusifs/enginedevice.cpp" line="361"/>
<source></source>
<comment>cell phone (mobile...)</comment>
<translation></translation>
</message>
<message>
<location filename="../src/dbusifs/enginedevice.cpp" line="365"/>
<source></source>
<comment>media player, mp3 etc</comment>
<translation></translation>
</message>
<message>
<location filename="../src/dbusifs/enginedevice.cpp" line="369"/>
<source></source>
<comment>tablet device</comment>
<translation></translation>
</message>
<message>
<location filename="../src/dbusifs/enginedevice.cpp" line="373"/>
<source></source>
<comment>tablet device</comment>
<translation></translation>
</message>
@ -2577,6 +2523,21 @@
<translation type="vanished">Saltarse</translation>
</message>
</context>
<context>
<name>UserListWidget</name>
<message>
<location filename="../src/widgets/userlistwidget.cpp" line="46"/>
<location filename="../src/widgets/userlistwidget.cpp" line="99"/>
<source>Login</source>
<translation type="unfinished">Iniciar sesión</translation>
</message>
<message>
<location filename="../src/widgets/userlistwidget.cpp" line="48"/>
<location filename="../src/widgets/userlistwidget.cpp" line="101"/>
<source>Guest</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>Utils</name>
<message>
@ -2748,12 +2709,12 @@
<translation>ID de ventana</translation>
</message>
<message>
<location filename="../src/lock-backend/main.cpp" line="48"/>
<location filename="../src/lock-backend/main.cpp" line="49"/>
<source>Backend for the ukui ScreenSaver.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/lock-backend/main.cpp" line="54"/>
<location filename="../src/lock-backend/main.cpp" line="55"/>
<source>lock the screen by startup</source>
<translation type="unfinished"></translation>
</message>

View File

@ -24,7 +24,7 @@
<translation type="obsolete">使</translation>
</message>
<message>
<location filename="../src/widgets/authdialog.cpp" line="1085"/>
<location filename="../src/widgets/authdialog.cpp" line="1117"/>
<source>Retry</source>
<translation>Réessayer</translation>
</message>
@ -53,125 +53,130 @@
<translation type="vanished">%1%2</translation>
</message>
<message>
<location filename="../src/widgets/authdialog.cpp" line="1148"/>
<location filename="../src/widgets/authdialog.cpp" line="1186"/>
<source>Please try again in %1 minutes.</source>
<translation>Veuillez réessayer dans %1 minutes.</translation>
</message>
<message>
<location filename="../src/widgets/authdialog.cpp" line="1155"/>
<location filename="../src/widgets/authdialog.cpp" line="1193"/>
<source>Please try again in %1 seconds.</source>
<translation>Veuillez réessayer dans %1 secondes.</translation>
</message>
<message>
<location filename="../src/widgets/authdialog.cpp" line="1162"/>
<location filename="../src/widgets/authdialog.cpp" line="1200"/>
<source>Account locked permanently.</source>
<translation>Compte verrouillé définitivement.</translation>
</message>
<message>
<location filename="../src/widgets/authdialog.cpp" line="522"/>
<location filename="../src/widgets/authdialog.cpp" line="565"/>
<location filename="../src/widgets/authdialog.cpp" line="549"/>
<location filename="../src/widgets/authdialog.cpp" line="592"/>
<source>Verify face recognition or enter password to unlock</source>
<translation>Vérifier la reconnaissance faciale ou saisir le mot de passe pour déverrouiller</translation>
</message>
<message>
<location filename="../src/widgets/authdialog.cpp" line="527"/>
<location filename="../src/widgets/authdialog.cpp" line="348"/>
<source>Guest</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/widgets/authdialog.cpp" line="554"/>
<source>Press fingerprint or enter password to unlock</source>
<translation>Appuyez sur lempreinte digitale ou entrez le mot de passe pour déverrouiller</translation>
</message>
<message>
<location filename="../src/widgets/authdialog.cpp" line="532"/>
<location filename="../src/widgets/authdialog.cpp" line="559"/>
<source>Verify voiceprint or enter password to unlock</source>
<translation>Vérifier lempreinte vocale ou saisir le mot de passe pour déverrouiller</translation>
</message>
<message>
<location filename="../src/widgets/authdialog.cpp" line="537"/>
<location filename="../src/widgets/authdialog.cpp" line="564"/>
<source>Verify finger vein or enter password to unlock</source>
<translation>Vérifiez la veine du doigt ou entrez le mot de passe pour déverrouiller</translation>
</message>
<message>
<location filename="../src/widgets/authdialog.cpp" line="542"/>
<location filename="../src/widgets/authdialog.cpp" line="569"/>
<source>Verify iris or enter password to unlock</source>
<translation>Vérifiez liris ou entrez le mot de passe pour déverrouiller</translation>
</message>
<message>
<location filename="../src/widgets/authdialog.cpp" line="860"/>
<location filename="../src/widgets/authdialog.cpp" line="887"/>
<source>Input Password</source>
<translation>Mot de passe dentrée</translation>
</message>
<message>
<location filename="../src/widgets/authdialog.cpp" line="865"/>
<location filename="../src/widgets/authdialog.cpp" line="892"/>
<source>Username</source>
<translation type="unfinished">Nom dutilisateur</translation>
</message>
<message>
<location filename="../src/widgets/authdialog.cpp" line="928"/>
<location filename="../src/widgets/authdialog.cpp" line="960"/>
<source>User name input error!</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/widgets/authdialog.cpp" line="1005"/>
<location filename="../src/widgets/authdialog.cpp" line="1037"/>
<source>login</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/widgets/authdialog.cpp" line="1382"/>
<location filename="../src/widgets/authdialog.cpp" line="1534"/>
<location filename="../src/widgets/authdialog.cpp" line="1675"/>
<location filename="../src/widgets/authdialog.cpp" line="1852"/>
<location filename="../src/widgets/authdialog.cpp" line="1420"/>
<location filename="../src/widgets/authdialog.cpp" line="1572"/>
<location filename="../src/widgets/authdialog.cpp" line="1713"/>
<location filename="../src/widgets/authdialog.cpp" line="1890"/>
<source>Failed to verify %1, please enter password to unlock</source>
<translation>Impossible de vérifier %1, veuillez entrer le mot de passe pour déverrouiller</translation>
</message>
<message>
<location filename="../src/widgets/authdialog.cpp" line="1384"/>
<location filename="../src/widgets/authdialog.cpp" line="1536"/>
<location filename="../src/widgets/authdialog.cpp" line="1679"/>
<location filename="../src/widgets/authdialog.cpp" line="1681"/>
<location filename="../src/widgets/authdialog.cpp" line="1854"/>
<location filename="../src/widgets/authdialog.cpp" line="1422"/>
<location filename="../src/widgets/authdialog.cpp" line="1574"/>
<location filename="../src/widgets/authdialog.cpp" line="1717"/>
<location filename="../src/widgets/authdialog.cpp" line="1719"/>
<location filename="../src/widgets/authdialog.cpp" line="1892"/>
<source>Unable to verify %1, please enter password to unlock</source>
<translation>Impossible de vérifier %1, veuillez entrer le mot de passe pour déverrouiller</translation>
</message>
<message>
<location filename="../src/widgets/authdialog.cpp" line="1709"/>
<location filename="../src/widgets/authdialog.cpp" line="1747"/>
<source>Abnormal network</source>
<translation>Réseau anormal</translation>
</message>
<message>
<location filename="../src/widgets/authdialog.cpp" line="1716"/>
<location filename="../src/widgets/authdialog.cpp" line="1754"/>
<source>Face recognition waiting time out, please click refresh or enter the password to unlock.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/widgets/authdialog.cpp" line="1982"/>
<location filename="../src/widgets/authdialog.cpp" line="2020"/>
<source>FingerPrint</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/widgets/authdialog.cpp" line="1984"/>
<location filename="../src/widgets/authdialog.cpp" line="2022"/>
<source>FingerVein</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/widgets/authdialog.cpp" line="1986"/>
<location filename="../src/widgets/authdialog.cpp" line="2024"/>
<source>Iris</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/widgets/authdialog.cpp" line="1988"/>
<location filename="../src/widgets/authdialog.cpp" line="2026"/>
<source>Face</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/widgets/authdialog.cpp" line="1990"/>
<location filename="../src/widgets/authdialog.cpp" line="2028"/>
<source>VoicePrint</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/widgets/authdialog.cpp" line="1992"/>
<location filename="../src/widgets/authdialog.cpp" line="2030"/>
<source>Ukey</source>
<translation type="unfinished">Ukey (en anglais seulement)</translation>
</message>
<message>
<location filename="../src/widgets/authdialog.cpp" line="1994"/>
<location filename="../src/widgets/authdialog.cpp" line="2032"/>
<source>QRCode</source>
<translation type="unfinished">QRCode</translation>
</message>
@ -180,8 +185,8 @@
<translation type="vanished">使</translation>
</message>
<message>
<location filename="../src/widgets/authdialog.cpp" line="703"/>
<location filename="../src/widgets/authdialog.cpp" line="704"/>
<location filename="../src/widgets/authdialog.cpp" line="730"/>
<location filename="../src/widgets/authdialog.cpp" line="731"/>
<source>Password cannot be empty</source>
<translation>Le mot de passe ne peut pas être vide</translation>
</message>
@ -194,8 +199,8 @@
<translation type="vanished">%1.</translation>
</message>
<message>
<location filename="../src/widgets/authdialog.cpp" line="1694"/>
<location filename="../src/widgets/authdialog.cpp" line="1698"/>
<location filename="../src/widgets/authdialog.cpp" line="1732"/>
<location filename="../src/widgets/authdialog.cpp" line="1736"/>
<source>Failed to verify %1, you still have %2 verification opportunities</source>
<translation>Échec de la vérification %1, vous avez encore %2 possibilités de vérification</translation>
</message>
@ -224,13 +229,13 @@
<translation type="vanished"></translation>
</message>
<message>
<location filename="../src/widgets/authdialog.cpp" line="931"/>
<location filename="../src/widgets/authdialog.cpp" line="936"/>
<location filename="../src/widgets/authdialog.cpp" line="963"/>
<location filename="../src/widgets/authdialog.cpp" line="968"/>
<source>Authentication failure, Please try again</source>
<translation>Échec de lauthentification, veuillez réessayer</translation>
</message>
<message>
<location filename="../src/widgets/authdialog.cpp" line="547"/>
<location filename="../src/widgets/authdialog.cpp" line="574"/>
<source>Use the bound wechat scanning code or enter the password to unlock</source>
<translation>Utilisez le code danalyse wechat lié ou entrez le mot de passe pour déverrouiller</translation>
</message>
@ -243,12 +248,13 @@
<translation type="vanished">Insérez lukey dans le port USB</translation>
</message>
<message>
<location filename="../src/widgets/authdialog.cpp" line="857"/>
<location filename="../src/widgets/authdialog.cpp" line="884"/>
<source>Password </source>
<translation>Mot de passe </translation>
</message>
<message>
<location filename="../src/widgets/authdialog.cpp" line="1076"/>
<location filename="../src/widgets/authdialog.cpp" line="346"/>
<location filename="../src/widgets/authdialog.cpp" line="1108"/>
<source>Login</source>
<translation>Connectez-vous</translation>
</message>
@ -368,31 +374,35 @@
<name>BlockWidget</name>
<message>
<location filename="../src/widgets/blockwidget.cpp" line="40"/>
<location filename="../src/widgets/blockwidget.cpp" line="82"/>
<location filename="../src/widgets/blockwidget.cpp" line="135"/>
<source>Cancel</source>
<translation type="unfinished">Annuler</translation>
</message>
<message>
<location filename="../src/widgets/blockwidget.cpp" line="44"/>
<location filename="../src/widgets/blockwidget.cpp" line="83"/>
<location filename="../src/widgets/blockwidget.cpp" line="136"/>
<source>Confrim</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/widgets/blockwidget.cpp" line="89"/>
<location filename="../src/widgets/blockwidget.cpp" line="91"/>
<source>The following program is running to prevent the system from reboot!</source>
<translation type="unfinished">Le programme suivant est en cours dexécution pour empêcher le système de redémarrer !</translation>
</message>
<message>
<location filename="../src/widgets/blockwidget.cpp" line="92"/>
<location filename="../src/widgets/blockwidget.cpp" line="94"/>
<source>The following program is running to prevent the system from shutting down!</source>
<translation type="unfinished">Le programme suivant est en cours dexécution pour empêcher le système de sarrêter !</translation>
</message>
<message>
<location filename="../src/widgets/blockwidget.cpp" line="95"/>
<location filename="../src/widgets/blockwidget.cpp" line="97"/>
<source>The following program is running to prevent the system from suspend!</source>
<translation type="unfinished">Le programme suivant est en cours dexécution pour empêcher le système de se suspendre !</translation>
</message>
<message>
<location filename="../src/widgets/blockwidget.cpp" line="98"/>
<location filename="../src/widgets/blockwidget.cpp" line="100"/>
<source>The following program is running to prevent the system from hibernate!</source>
<translation type="unfinished">Le programme suivant est en cours dexécution pour empêcher le système de hiberner !</translation>
</message>
@ -408,17 +418,18 @@
<context>
<name>CharsWidget</name>
<message>
<location filename="../src/VirtualKeyboard/src/charswidget.cpp" line="114"/>
<location filename="../src/VirtualKeyboard/src/charswidget.cpp" line="115"/>
<location filename="../src/VirtualKeyboard/src/charswidget.cpp" line="273"/>
<source>More</source>
<translation>Plus</translation>
</message>
<message>
<location filename="../src/VirtualKeyboard/src/charswidget.cpp" line="128"/>
<location filename="../src/VirtualKeyboard/src/charswidget.cpp" line="129"/>
<source>ABC</source>
<translation>ABC</translation>
</message>
<message>
<location filename="../src/VirtualKeyboard/src/charswidget.cpp" line="141"/>
<location filename="../src/VirtualKeyboard/src/charswidget.cpp" line="142"/>
<source>123</source>
<translation>123</translation>
</message>
@ -1883,17 +1894,17 @@
<context>
<name>LightDMHelper</name>
<message>
<location filename="../src/lock-backend/lightdmhelper.cpp" line="99"/>
<location filename="../src/lock-backend/lightdmhelper.cpp" line="105"/>
<source>failed to start session.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/lock-backend/lightdmhelper.cpp" line="234"/>
<location filename="../src/lock-backend/lightdmhelper.cpp" line="204"/>
<source>Login</source>
<translation type="unfinished">Connectez-vous</translation>
</message>
<message>
<location filename="../src/lock-backend/lightdmhelper.cpp" line="242"/>
<location filename="../src/lock-backend/lightdmhelper.cpp" line="213"/>
<source>Guest</source>
<translation type="unfinished"></translation>
</message>
@ -1937,7 +1948,7 @@
<translation type="vanished">Réseau local sans fil (WLAN)</translation>
</message>
<message>
<location filename="../src/widgets/lockwidget.cpp" line="923"/>
<location filename="../src/widgets/lockwidget.cpp" line="944"/>
<source>Multiple users are logged in at the same time.Are you sure you want to %1 this system?</source>
<translation type="unfinished"></translation>
</message>
@ -2015,12 +2026,12 @@
<context>
<name>MyNetworkWidget</name>
<message>
<location filename="../src/widgets/mynetworkwidget.cpp" line="36"/>
<location filename="../src/widgets/mynetworkwidget.cpp" line="35"/>
<source>LAN</source>
<translation type="unfinished">LAN</translation>
</message>
<message>
<location filename="../src/widgets/mynetworkwidget.cpp" line="38"/>
<location filename="../src/widgets/mynetworkwidget.cpp" line="37"/>
<source>WLAN</source>
<translation type="unfinished">Réseau local sans fil (WLAN)</translation>
</message>
@ -2028,12 +2039,13 @@
<context>
<name>NumbersWidget</name>
<message>
<location filename="../src/VirtualKeyboard/src/numberswidget.cpp" line="160"/>
<location filename="../src/VirtualKeyboard/src/numberswidget.cpp" line="161"/>
<source>&amp;&amp;?!</source>
<translation>&amp;&amp;?!</translation>
</message>
<message>
<location filename="../src/VirtualKeyboard/src/numberswidget.cpp" line="174"/>
<location filename="../src/VirtualKeyboard/src/numberswidget.cpp" line="175"/>
<location filename="../src/VirtualKeyboard/src/numberswidget.cpp" line="310"/>
<source>Return</source>
<translation>Rendre</translation>
</message>
@ -2358,72 +2370,6 @@
<message>
<location filename="../src/dbusifs/enginedevice.cpp" line="308"/>
<source></source>
<comment>this is only shown for laptops with multiple batteries</comment>
<translation></translation>
</message>
<message>
<location filename="../src/dbusifs/enginedevice.cpp" line="313"/>
<source></source>
<comment>this is only shown for laptops with multiple batteries</comment>
<translation></translation>
</message>
<message>
<location filename="../src/dbusifs/enginedevice.cpp" line="337"/>
<source></source>
<comment>laptop primary battery</comment>
<translation></translation>
</message>
<message>
<location filename="../src/dbusifs/enginedevice.cpp" line="341"/>
<source></source>
<comment>battery-backed AC power source</comment>
<translation></translation>
</message>
<message>
<location filename="../src/dbusifs/enginedevice.cpp" line="345"/>
<source></source>
<comment>a monitor is a device to measure voltage and current</comment>
<translation></translation>
</message>
<message>
<location filename="../src/dbusifs/enginedevice.cpp" line="349"/>
<source></source>
<comment>wireless mice with internal batteries</comment>
<translation></translation>
</message>
<message>
<location filename="../src/dbusifs/enginedevice.cpp" line="353"/>
<source></source>
<comment>wireless keyboard with internal battery</comment>
<translation></translation>
</message>
<message>
<location filename="../src/dbusifs/enginedevice.cpp" line="357"/>
<source></source>
<comment>portable device</comment>
<translation></translation>
</message>
<message>
<location filename="../src/dbusifs/enginedevice.cpp" line="361"/>
<source></source>
<comment>cell phone (mobile...)</comment>
<translation></translation>
</message>
<message>
<location filename="../src/dbusifs/enginedevice.cpp" line="365"/>
<source></source>
<comment>media player, mp3 etc</comment>
<translation></translation>
</message>
<message>
<location filename="../src/dbusifs/enginedevice.cpp" line="369"/>
<source></source>
<comment>tablet device</comment>
<translation></translation>
</message>
<message>
<location filename="../src/dbusifs/enginedevice.cpp" line="373"/>
<source></source>
<comment>tablet device</comment>
<translation></translation>
</message>
@ -2573,6 +2519,21 @@
<translation type="vanished">Sautiller</translation>
</message>
</context>
<context>
<name>UserListWidget</name>
<message>
<location filename="../src/widgets/userlistwidget.cpp" line="46"/>
<location filename="../src/widgets/userlistwidget.cpp" line="99"/>
<source>Login</source>
<translation type="unfinished">Connectez-vous</translation>
</message>
<message>
<location filename="../src/widgets/userlistwidget.cpp" line="48"/>
<location filename="../src/widgets/userlistwidget.cpp" line="101"/>
<source>Guest</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>Utils</name>
<message>
@ -2744,12 +2705,12 @@
<translation>ID de la fenêtre</translation>
</message>
<message>
<location filename="../src/lock-backend/main.cpp" line="48"/>
<location filename="../src/lock-backend/main.cpp" line="49"/>
<source>Backend for the ukui ScreenSaver.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/lock-backend/main.cpp" line="54"/>
<location filename="../src/lock-backend/main.cpp" line="55"/>
<source>lock the screen by startup</source>
<translation type="unfinished"></translation>
</message>

View File

@ -24,7 +24,7 @@
<translation type="obsolete">使</translation>
</message>
<message>
<location filename="../src/widgets/authdialog.cpp" line="1085"/>
<location filename="../src/widgets/authdialog.cpp" line="1117"/>
<source>Retry</source>
<translation>Ретри</translation>
</message>
@ -53,125 +53,130 @@
<translation type="vanished">%1%2</translation>
</message>
<message>
<location filename="../src/widgets/authdialog.cpp" line="1148"/>
<location filename="../src/widgets/authdialog.cpp" line="1186"/>
<source>Please try again in %1 minutes.</source>
<translation>% 1 минутта қайталап көріңіз.</translation>
</message>
<message>
<location filename="../src/widgets/authdialog.cpp" line="1155"/>
<location filename="../src/widgets/authdialog.cpp" line="1193"/>
<source>Please try again in %1 seconds.</source>
<translation>% 1 секундта қайталап көріңіз.</translation>
</message>
<message>
<location filename="../src/widgets/authdialog.cpp" line="1162"/>
<location filename="../src/widgets/authdialog.cpp" line="1200"/>
<source>Account locked permanently.</source>
<translation>Тіркелгі біржолата құлыпталады.</translation>
</message>
<message>
<location filename="../src/widgets/authdialog.cpp" line="522"/>
<location filename="../src/widgets/authdialog.cpp" line="565"/>
<location filename="../src/widgets/authdialog.cpp" line="549"/>
<location filename="../src/widgets/authdialog.cpp" line="592"/>
<source>Verify face recognition or enter password to unlock</source>
<translation>Бет тануды тексеру немесе құлыптан босату үшін құпия сөзді енгізу</translation>
</message>
<message>
<location filename="../src/widgets/authdialog.cpp" line="527"/>
<location filename="../src/widgets/authdialog.cpp" line="348"/>
<source>Guest</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/widgets/authdialog.cpp" line="554"/>
<source>Press fingerprint or enter password to unlock</source>
<translation>Құлыптан босату үшін дактилоскопияны басу немесе құпия сөзді енгізу</translation>
</message>
<message>
<location filename="../src/widgets/authdialog.cpp" line="532"/>
<location filename="../src/widgets/authdialog.cpp" line="559"/>
<source>Verify voiceprint or enter password to unlock</source>
<translation>Құлыптан босату үшін дауыстық ізді тексеру немесе құпия сөзді енгізу</translation>
</message>
<message>
<location filename="../src/widgets/authdialog.cpp" line="537"/>
<location filename="../src/widgets/authdialog.cpp" line="564"/>
<source>Verify finger vein or enter password to unlock</source>
<translation>Құлыптан босату үшін саусақ көктамырын тексеру немесе құпия сөзді енгізу</translation>
</message>
<message>
<location filename="../src/widgets/authdialog.cpp" line="542"/>
<location filename="../src/widgets/authdialog.cpp" line="569"/>
<source>Verify iris or enter password to unlock</source>
<translation>Құлыптан босату үшін IRIS тексеру немесе құпиясөзді енгізу</translation>
</message>
<message>
<location filename="../src/widgets/authdialog.cpp" line="860"/>
<location filename="../src/widgets/authdialog.cpp" line="887"/>
<source>Input Password</source>
<translation>Құпиясөзді енгізу</translation>
</message>
<message>
<location filename="../src/widgets/authdialog.cpp" line="865"/>
<location filename="../src/widgets/authdialog.cpp" line="892"/>
<source>Username</source>
<translation type="unfinished">Пайдаланушы аты</translation>
</message>
<message>
<location filename="../src/widgets/authdialog.cpp" line="928"/>
<location filename="../src/widgets/authdialog.cpp" line="960"/>
<source>User name input error!</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/widgets/authdialog.cpp" line="1005"/>
<location filename="../src/widgets/authdialog.cpp" line="1037"/>
<source>login</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/widgets/authdialog.cpp" line="1382"/>
<location filename="../src/widgets/authdialog.cpp" line="1534"/>
<location filename="../src/widgets/authdialog.cpp" line="1675"/>
<location filename="../src/widgets/authdialog.cpp" line="1852"/>
<location filename="../src/widgets/authdialog.cpp" line="1420"/>
<location filename="../src/widgets/authdialog.cpp" line="1572"/>
<location filename="../src/widgets/authdialog.cpp" line="1713"/>
<location filename="../src/widgets/authdialog.cpp" line="1890"/>
<source>Failed to verify %1, please enter password to unlock</source>
<translation>% 1 дегенді тексеру мүмкін болмады, құлыптан босату үшін құпия сөзді енгізіңіз</translation>
</message>
<message>
<location filename="../src/widgets/authdialog.cpp" line="1384"/>
<location filename="../src/widgets/authdialog.cpp" line="1536"/>
<location filename="../src/widgets/authdialog.cpp" line="1679"/>
<location filename="../src/widgets/authdialog.cpp" line="1681"/>
<location filename="../src/widgets/authdialog.cpp" line="1854"/>
<location filename="../src/widgets/authdialog.cpp" line="1422"/>
<location filename="../src/widgets/authdialog.cpp" line="1574"/>
<location filename="../src/widgets/authdialog.cpp" line="1717"/>
<location filename="../src/widgets/authdialog.cpp" line="1719"/>
<location filename="../src/widgets/authdialog.cpp" line="1892"/>
<source>Unable to verify %1, please enter password to unlock</source>
<translation>% 1 дегенді тексеру мүмкін болмады, құлыптан босату үшін құпия сөзді енгізіңіз</translation>
</message>
<message>
<location filename="../src/widgets/authdialog.cpp" line="1709"/>
<location filename="../src/widgets/authdialog.cpp" line="1747"/>
<source>Abnormal network</source>
<translation>Аномальды желі</translation>
</message>
<message>
<location filename="../src/widgets/authdialog.cpp" line="1716"/>
<location filename="../src/widgets/authdialog.cpp" line="1754"/>
<source>Face recognition waiting time out, please click refresh or enter the password to unlock.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/widgets/authdialog.cpp" line="1982"/>
<location filename="../src/widgets/authdialog.cpp" line="2020"/>
<source>FingerPrint</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/widgets/authdialog.cpp" line="1984"/>
<location filename="../src/widgets/authdialog.cpp" line="2022"/>
<source>FingerVein</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/widgets/authdialog.cpp" line="1986"/>
<location filename="../src/widgets/authdialog.cpp" line="2024"/>
<source>Iris</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/widgets/authdialog.cpp" line="1988"/>
<location filename="../src/widgets/authdialog.cpp" line="2026"/>
<source>Face</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/widgets/authdialog.cpp" line="1990"/>
<location filename="../src/widgets/authdialog.cpp" line="2028"/>
<source>VoicePrint</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/widgets/authdialog.cpp" line="1992"/>
<location filename="../src/widgets/authdialog.cpp" line="2030"/>
<source>Ukey</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/widgets/authdialog.cpp" line="1994"/>
<location filename="../src/widgets/authdialog.cpp" line="2032"/>
<source>QRCode</source>
<translation type="unfinished">QRCode</translation>
</message>
@ -180,8 +185,8 @@
<translation type="vanished">使</translation>
</message>
<message>
<location filename="../src/widgets/authdialog.cpp" line="703"/>
<location filename="../src/widgets/authdialog.cpp" line="704"/>
<location filename="../src/widgets/authdialog.cpp" line="730"/>
<location filename="../src/widgets/authdialog.cpp" line="731"/>
<source>Password cannot be empty</source>
<translation>Құпия сөз бос болмады</translation>
</message>
@ -194,8 +199,8 @@
<translation type="vanished">%1.</translation>
</message>
<message>
<location filename="../src/widgets/authdialog.cpp" line="1694"/>
<location filename="../src/widgets/authdialog.cpp" line="1698"/>
<location filename="../src/widgets/authdialog.cpp" line="1732"/>
<location filename="../src/widgets/authdialog.cpp" line="1736"/>
<source>Failed to verify %1, you still have %2 verification opportunities</source>
<translation>% 1 дегенді тексеру мүмкін болмады, сізде әлі де% 2 тексеру мүмкіндіктері бар</translation>
</message>
@ -224,23 +229,24 @@
<translation type="vanished"></translation>
</message>
<message>
<location filename="../src/widgets/authdialog.cpp" line="931"/>
<location filename="../src/widgets/authdialog.cpp" line="936"/>
<location filename="../src/widgets/authdialog.cpp" line="963"/>
<location filename="../src/widgets/authdialog.cpp" line="968"/>
<source>Authentication failure, Please try again</source>
<translation>Аутентификация сәтсіздігі, қайталап көріңіз</translation>
</message>
<message>
<location filename="../src/widgets/authdialog.cpp" line="547"/>
<location filename="../src/widgets/authdialog.cpp" line="574"/>
<source>Use the bound wechat scanning code or enter the password to unlock</source>
<translation>Байланыстыратын wechat сканерлеу кодын пайдаланыңыз немесе құлыптан босату үшін құпия сөзді енгізіңіз</translation>
</message>
<message>
<location filename="../src/widgets/authdialog.cpp" line="857"/>
<location filename="../src/widgets/authdialog.cpp" line="884"/>
<source>Password </source>
<translation>Пароль </translation>
</message>
<message>
<location filename="../src/widgets/authdialog.cpp" line="1076"/>
<location filename="../src/widgets/authdialog.cpp" line="346"/>
<location filename="../src/widgets/authdialog.cpp" line="1108"/>
<source>Login</source>
<translation>Кіру</translation>
</message>
@ -360,31 +366,35 @@
<name>BlockWidget</name>
<message>
<location filename="../src/widgets/blockwidget.cpp" line="40"/>
<location filename="../src/widgets/blockwidget.cpp" line="82"/>
<location filename="../src/widgets/blockwidget.cpp" line="135"/>
<source>Cancel</source>
<translation type="unfinished">Болдырмау</translation>
</message>
<message>
<location filename="../src/widgets/blockwidget.cpp" line="44"/>
<location filename="../src/widgets/blockwidget.cpp" line="83"/>
<location filename="../src/widgets/blockwidget.cpp" line="136"/>
<source>Confrim</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/widgets/blockwidget.cpp" line="89"/>
<location filename="../src/widgets/blockwidget.cpp" line="91"/>
<source>The following program is running to prevent the system from reboot!</source>
<translation type="unfinished">Жүйені қайта жүктеуге жол бермеу үшін келесі бағдарлама іске асырылуда!</translation>
</message>
<message>
<location filename="../src/widgets/blockwidget.cpp" line="92"/>
<location filename="../src/widgets/blockwidget.cpp" line="94"/>
<source>The following program is running to prevent the system from shutting down!</source>
<translation type="unfinished">Жүйенің тоқтап қалуына жол бермеу үшін келесі бағдарлама іске асырылуда!</translation>
</message>
<message>
<location filename="../src/widgets/blockwidget.cpp" line="95"/>
<location filename="../src/widgets/blockwidget.cpp" line="97"/>
<source>The following program is running to prevent the system from suspend!</source>
<translation type="unfinished">Жүйенің тоқтатылуына жол бермеу үшін келесі бағдарлама іске асырылуда!</translation>
</message>
<message>
<location filename="../src/widgets/blockwidget.cpp" line="98"/>
<location filename="../src/widgets/blockwidget.cpp" line="100"/>
<source>The following program is running to prevent the system from hibernate!</source>
<translation type="unfinished">Жүйенің жорыққа шығуына жол бермеу үшін келесі бағдарлама іске асырылуда!</translation>
</message>
@ -400,17 +410,18 @@
<context>
<name>CharsWidget</name>
<message>
<location filename="../src/VirtualKeyboard/src/charswidget.cpp" line="114"/>
<location filename="../src/VirtualKeyboard/src/charswidget.cpp" line="115"/>
<location filename="../src/VirtualKeyboard/src/charswidget.cpp" line="273"/>
<source>More</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/VirtualKeyboard/src/charswidget.cpp" line="128"/>
<location filename="../src/VirtualKeyboard/src/charswidget.cpp" line="129"/>
<source>ABC</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/VirtualKeyboard/src/charswidget.cpp" line="141"/>
<location filename="../src/VirtualKeyboard/src/charswidget.cpp" line="142"/>
<source>123</source>
<translation type="unfinished"></translation>
</message>
@ -1863,17 +1874,17 @@
<context>
<name>LightDMHelper</name>
<message>
<location filename="../src/lock-backend/lightdmhelper.cpp" line="99"/>
<location filename="../src/lock-backend/lightdmhelper.cpp" line="105"/>
<source>failed to start session.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/lock-backend/lightdmhelper.cpp" line="234"/>
<location filename="../src/lock-backend/lightdmhelper.cpp" line="204"/>
<source>Login</source>
<translation type="unfinished">Кіру</translation>
</message>
<message>
<location filename="../src/lock-backend/lightdmhelper.cpp" line="242"/>
<location filename="../src/lock-backend/lightdmhelper.cpp" line="213"/>
<source>Guest</source>
<translation type="unfinished"></translation>
</message>
@ -1901,7 +1912,7 @@
<translation type="vanished">Бірнеше пайдаланушы бір уақытта кіргізіледі. Бұл жүйені қайта жүктеу керек пе?</translation>
</message>
<message>
<location filename="../src/widgets/lockwidget.cpp" line="923"/>
<location filename="../src/widgets/lockwidget.cpp" line="944"/>
<source>Multiple users are logged in at the same time.Are you sure you want to %1 this system?</source>
<translation type="unfinished"></translation>
</message>
@ -1979,12 +1990,12 @@
<context>
<name>MyNetworkWidget</name>
<message>
<location filename="../src/widgets/mynetworkwidget.cpp" line="36"/>
<location filename="../src/widgets/mynetworkwidget.cpp" line="35"/>
<source>LAN</source>
<translation type="unfinished">ЛАН</translation>
</message>
<message>
<location filename="../src/widgets/mynetworkwidget.cpp" line="38"/>
<location filename="../src/widgets/mynetworkwidget.cpp" line="37"/>
<source>WLAN</source>
<translation type="unfinished">WLAN</translation>
</message>
@ -1992,12 +2003,13 @@
<context>
<name>NumbersWidget</name>
<message>
<location filename="../src/VirtualKeyboard/src/numberswidget.cpp" line="160"/>
<location filename="../src/VirtualKeyboard/src/numberswidget.cpp" line="161"/>
<source>&amp;&amp;?!</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/VirtualKeyboard/src/numberswidget.cpp" line="174"/>
<location filename="../src/VirtualKeyboard/src/numberswidget.cpp" line="175"/>
<location filename="../src/VirtualKeyboard/src/numberswidget.cpp" line="310"/>
<source>Return</source>
<translation type="unfinished"></translation>
</message>
@ -2306,72 +2318,6 @@
<message>
<location filename="../src/dbusifs/enginedevice.cpp" line="308"/>
<source></source>
<comment>this is only shown for laptops with multiple batteries</comment>
<translation></translation>
</message>
<message>
<location filename="../src/dbusifs/enginedevice.cpp" line="313"/>
<source></source>
<comment>this is only shown for laptops with multiple batteries</comment>
<translation></translation>
</message>
<message>
<location filename="../src/dbusifs/enginedevice.cpp" line="337"/>
<source></source>
<comment>laptop primary battery</comment>
<translation></translation>
</message>
<message>
<location filename="../src/dbusifs/enginedevice.cpp" line="341"/>
<source></source>
<comment>battery-backed AC power source</comment>
<translation></translation>
</message>
<message>
<location filename="../src/dbusifs/enginedevice.cpp" line="345"/>
<source></source>
<comment>a monitor is a device to measure voltage and current</comment>
<translation></translation>
</message>
<message>
<location filename="../src/dbusifs/enginedevice.cpp" line="349"/>
<source></source>
<comment>wireless mice with internal batteries</comment>
<translation></translation>
</message>
<message>
<location filename="../src/dbusifs/enginedevice.cpp" line="353"/>
<source></source>
<comment>wireless keyboard with internal battery</comment>
<translation></translation>
</message>
<message>
<location filename="../src/dbusifs/enginedevice.cpp" line="357"/>
<source></source>
<comment>portable device</comment>
<translation></translation>
</message>
<message>
<location filename="../src/dbusifs/enginedevice.cpp" line="361"/>
<source></source>
<comment>cell phone (mobile...)</comment>
<translation></translation>
</message>
<message>
<location filename="../src/dbusifs/enginedevice.cpp" line="365"/>
<source></source>
<comment>media player, mp3 etc</comment>
<translation></translation>
</message>
<message>
<location filename="../src/dbusifs/enginedevice.cpp" line="369"/>
<source></source>
<comment>tablet device</comment>
<translation></translation>
</message>
<message>
<location filename="../src/dbusifs/enginedevice.cpp" line="373"/>
<source></source>
<comment>tablet device</comment>
<translation></translation>
</message>
@ -2521,6 +2467,21 @@
<translation type="vanished">Өткізіп жіберу</translation>
</message>
</context>
<context>
<name>UserListWidget</name>
<message>
<location filename="../src/widgets/userlistwidget.cpp" line="46"/>
<location filename="../src/widgets/userlistwidget.cpp" line="99"/>
<source>Login</source>
<translation type="unfinished">Кіру</translation>
</message>
<message>
<location filename="../src/widgets/userlistwidget.cpp" line="48"/>
<location filename="../src/widgets/userlistwidget.cpp" line="101"/>
<source>Guest</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>Utils</name>
<message>
@ -2692,12 +2653,12 @@
<translation>терезе идентифика- ты</translation>
</message>
<message>
<location filename="../src/lock-backend/main.cpp" line="48"/>
<location filename="../src/lock-backend/main.cpp" line="49"/>
<source>Backend for the ukui ScreenSaver.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/lock-backend/main.cpp" line="54"/>
<location filename="../src/lock-backend/main.cpp" line="55"/>
<source>lock the screen by startup</source>
<translation type="unfinished"></translation>
</message>

View File

@ -24,7 +24,7 @@
<translation type="obsolete">使</translation>
</message>
<message>
<location filename="../src/widgets/authdialog.cpp" line="1085"/>
<location filename="../src/widgets/authdialog.cpp" line="1117"/>
<source>Retry</source>
<translation>Ретри</translation>
</message>
@ -53,125 +53,130 @@
<translation type="vanished">%1%2</translation>
</message>
<message>
<location filename="../src/widgets/authdialog.cpp" line="1148"/>
<location filename="../src/widgets/authdialog.cpp" line="1186"/>
<source>Please try again in %1 minutes.</source>
<translation>%1 мүнөттө кайра аракет кылыңыз.</translation>
</message>
<message>
<location filename="../src/widgets/authdialog.cpp" line="1155"/>
<location filename="../src/widgets/authdialog.cpp" line="1193"/>
<source>Please try again in %1 seconds.</source>
<translation>%1 секунданын ичинде кайра аракет кылыңыз.</translation>
</message>
<message>
<location filename="../src/widgets/authdialog.cpp" line="1162"/>
<location filename="../src/widgets/authdialog.cpp" line="1200"/>
<source>Account locked permanently.</source>
<translation>Эсеп биротоло кулпуланган.</translation>
</message>
<message>
<location filename="../src/widgets/authdialog.cpp" line="522"/>
<location filename="../src/widgets/authdialog.cpp" line="565"/>
<location filename="../src/widgets/authdialog.cpp" line="549"/>
<location filename="../src/widgets/authdialog.cpp" line="592"/>
<source>Verify face recognition or enter password to unlock</source>
<translation>Беттин таанылышын текшерүү же кулпуну ачуу үчүн сырсөз киргизүү</translation>
</message>
<message>
<location filename="../src/widgets/authdialog.cpp" line="527"/>
<location filename="../src/widgets/authdialog.cpp" line="348"/>
<source>Guest</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/widgets/authdialog.cpp" line="554"/>
<source>Press fingerprint or enter password to unlock</source>
<translation>Манжа изин басуу же кулпуну ачуу үчүн сырсөз киргизүү</translation>
</message>
<message>
<location filename="../src/widgets/authdialog.cpp" line="532"/>
<location filename="../src/widgets/authdialog.cpp" line="559"/>
<source>Verify voiceprint or enter password to unlock</source>
<translation>Үн изин текшерүү же сырсөз киргизүү</translation>
</message>
<message>
<location filename="../src/widgets/authdialog.cpp" line="537"/>
<location filename="../src/widgets/authdialog.cpp" line="564"/>
<source>Verify finger vein or enter password to unlock</source>
<translation>Манжа тамырын текшерүү же кулпуну ачуу үчүн сырсөз киргизүү</translation>
</message>
<message>
<location filename="../src/widgets/authdialog.cpp" line="542"/>
<location filename="../src/widgets/authdialog.cpp" line="569"/>
<source>Verify iris or enter password to unlock</source>
<translation>Ирис текшерүү же кулпусун ачуу үчүн сырсөз киргизүү</translation>
</message>
<message>
<location filename="../src/widgets/authdialog.cpp" line="860"/>
<location filename="../src/widgets/authdialog.cpp" line="887"/>
<source>Input Password</source>
<translation>Сырсөз киргизүү</translation>
</message>
<message>
<location filename="../src/widgets/authdialog.cpp" line="865"/>
<location filename="../src/widgets/authdialog.cpp" line="892"/>
<source>Username</source>
<translation type="unfinished">Колдонуучунун аты</translation>
</message>
<message>
<location filename="../src/widgets/authdialog.cpp" line="928"/>
<location filename="../src/widgets/authdialog.cpp" line="960"/>
<source>User name input error!</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/widgets/authdialog.cpp" line="1005"/>
<location filename="../src/widgets/authdialog.cpp" line="1037"/>
<source>login</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/widgets/authdialog.cpp" line="1382"/>
<location filename="../src/widgets/authdialog.cpp" line="1534"/>
<location filename="../src/widgets/authdialog.cpp" line="1675"/>
<location filename="../src/widgets/authdialog.cpp" line="1852"/>
<location filename="../src/widgets/authdialog.cpp" line="1420"/>
<location filename="../src/widgets/authdialog.cpp" line="1572"/>
<location filename="../src/widgets/authdialog.cpp" line="1713"/>
<location filename="../src/widgets/authdialog.cpp" line="1890"/>
<source>Failed to verify %1, please enter password to unlock</source>
<translation>%1 текшерүүгө болбоду, кулпусун ачуу үчүн сырсөздү киргизиңиз</translation>
</message>
<message>
<location filename="../src/widgets/authdialog.cpp" line="1384"/>
<location filename="../src/widgets/authdialog.cpp" line="1536"/>
<location filename="../src/widgets/authdialog.cpp" line="1679"/>
<location filename="../src/widgets/authdialog.cpp" line="1681"/>
<location filename="../src/widgets/authdialog.cpp" line="1854"/>
<location filename="../src/widgets/authdialog.cpp" line="1422"/>
<location filename="../src/widgets/authdialog.cpp" line="1574"/>
<location filename="../src/widgets/authdialog.cpp" line="1717"/>
<location filename="../src/widgets/authdialog.cpp" line="1719"/>
<location filename="../src/widgets/authdialog.cpp" line="1892"/>
<source>Unable to verify %1, please enter password to unlock</source>
<translation>%1 текшерүүгө болбоду, кулпусун ачуу үчүн сырсөздү киргизиңиз</translation>
</message>
<message>
<location filename="../src/widgets/authdialog.cpp" line="1709"/>
<location filename="../src/widgets/authdialog.cpp" line="1747"/>
<source>Abnormal network</source>
<translation>Аномалдуу тармак</translation>
</message>
<message>
<location filename="../src/widgets/authdialog.cpp" line="1716"/>
<location filename="../src/widgets/authdialog.cpp" line="1754"/>
<source>Face recognition waiting time out, please click refresh or enter the password to unlock.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/widgets/authdialog.cpp" line="1982"/>
<location filename="../src/widgets/authdialog.cpp" line="2020"/>
<source>FingerPrint</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/widgets/authdialog.cpp" line="1984"/>
<location filename="../src/widgets/authdialog.cpp" line="2022"/>
<source>FingerVein</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/widgets/authdialog.cpp" line="1986"/>
<location filename="../src/widgets/authdialog.cpp" line="2024"/>
<source>Iris</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/widgets/authdialog.cpp" line="1988"/>
<location filename="../src/widgets/authdialog.cpp" line="2026"/>
<source>Face</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/widgets/authdialog.cpp" line="1990"/>
<location filename="../src/widgets/authdialog.cpp" line="2028"/>
<source>VoicePrint</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/widgets/authdialog.cpp" line="1992"/>
<location filename="../src/widgets/authdialog.cpp" line="2030"/>
<source>Ukey</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/widgets/authdialog.cpp" line="1994"/>
<location filename="../src/widgets/authdialog.cpp" line="2032"/>
<source>QRCode</source>
<translation type="unfinished">QRCode</translation>
</message>
@ -180,8 +185,8 @@
<translation type="vanished">使</translation>
</message>
<message>
<location filename="../src/widgets/authdialog.cpp" line="703"/>
<location filename="../src/widgets/authdialog.cpp" line="704"/>
<location filename="../src/widgets/authdialog.cpp" line="730"/>
<location filename="../src/widgets/authdialog.cpp" line="731"/>
<source>Password cannot be empty</source>
<translation>Сырсөз бош болушу мүмкүн эмес</translation>
</message>
@ -194,8 +199,8 @@
<translation type="vanished">%1.</translation>
</message>
<message>
<location filename="../src/widgets/authdialog.cpp" line="1694"/>
<location filename="../src/widgets/authdialog.cpp" line="1698"/>
<location filename="../src/widgets/authdialog.cpp" line="1732"/>
<location filename="../src/widgets/authdialog.cpp" line="1736"/>
<source>Failed to verify %1, you still have %2 verification opportunities</source>
<translation>%1 текшерүүгө болбоду, сизде дагы эле %2 текшерүү мүмкүнчүлүктөрү бар</translation>
</message>
@ -224,23 +229,24 @@
<translation type="vanished"></translation>
</message>
<message>
<location filename="../src/widgets/authdialog.cpp" line="931"/>
<location filename="../src/widgets/authdialog.cpp" line="936"/>
<location filename="../src/widgets/authdialog.cpp" line="963"/>
<location filename="../src/widgets/authdialog.cpp" line="968"/>
<source>Authentication failure, Please try again</source>
<translation>Аутентификациянын жетишсиздиги, сураныч, кайрадан аракет кылыңыз</translation>
</message>
<message>
<location filename="../src/widgets/authdialog.cpp" line="547"/>
<location filename="../src/widgets/authdialog.cpp" line="574"/>
<source>Use the bound wechat scanning code or enter the password to unlock</source>
<translation>Чектелген вечат сканерлеу кодын колдонуңуз же сырсөздү ачуу үчүн киргизиңиз</translation>
</message>
<message>
<location filename="../src/widgets/authdialog.cpp" line="857"/>
<location filename="../src/widgets/authdialog.cpp" line="884"/>
<source>Password </source>
<translation>Сырсөз </translation>
</message>
<message>
<location filename="../src/widgets/authdialog.cpp" line="1076"/>
<location filename="../src/widgets/authdialog.cpp" line="346"/>
<location filename="../src/widgets/authdialog.cpp" line="1108"/>
<source>Login</source>
<translation>Кирүү</translation>
</message>
@ -360,31 +366,35 @@
<name>BlockWidget</name>
<message>
<location filename="../src/widgets/blockwidget.cpp" line="40"/>
<location filename="../src/widgets/blockwidget.cpp" line="82"/>
<location filename="../src/widgets/blockwidget.cpp" line="135"/>
<source>Cancel</source>
<translation type="unfinished">Жокко чыгаруу</translation>
</message>
<message>
<location filename="../src/widgets/blockwidget.cpp" line="44"/>
<location filename="../src/widgets/blockwidget.cpp" line="83"/>
<location filename="../src/widgets/blockwidget.cpp" line="136"/>
<source>Confrim</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/widgets/blockwidget.cpp" line="89"/>
<location filename="../src/widgets/blockwidget.cpp" line="91"/>
<source>The following program is running to prevent the system from reboot!</source>
<translation type="unfinished">Системаны кайра жүктөөдөн алдын алуу үчүн төмөнкү программа иштеп жатат!</translation>
</message>
<message>
<location filename="../src/widgets/blockwidget.cpp" line="92"/>
<location filename="../src/widgets/blockwidget.cpp" line="94"/>
<source>The following program is running to prevent the system from shutting down!</source>
<translation type="unfinished">Системанын жабылышына жол бербөө үчүн төмөнкү программа иштеп жатат!</translation>
</message>
<message>
<location filename="../src/widgets/blockwidget.cpp" line="95"/>
<location filename="../src/widgets/blockwidget.cpp" line="97"/>
<source>The following program is running to prevent the system from suspend!</source>
<translation type="unfinished">Системанын токтотулушуна жол бербөө үчүн төмөнкү программа иштеп жатат!</translation>
</message>
<message>
<location filename="../src/widgets/blockwidget.cpp" line="98"/>
<location filename="../src/widgets/blockwidget.cpp" line="100"/>
<source>The following program is running to prevent the system from hibernate!</source>
<translation type="unfinished">Системанын уктап кетишине жол бербөө үчүн төмөнкү программа иштеп жатат!</translation>
</message>
@ -400,17 +410,18 @@
<context>
<name>CharsWidget</name>
<message>
<location filename="../src/VirtualKeyboard/src/charswidget.cpp" line="114"/>
<location filename="../src/VirtualKeyboard/src/charswidget.cpp" line="115"/>
<location filename="../src/VirtualKeyboard/src/charswidget.cpp" line="273"/>
<source>More</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/VirtualKeyboard/src/charswidget.cpp" line="128"/>
<location filename="../src/VirtualKeyboard/src/charswidget.cpp" line="129"/>
<source>ABC</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/VirtualKeyboard/src/charswidget.cpp" line="141"/>
<location filename="../src/VirtualKeyboard/src/charswidget.cpp" line="142"/>
<source>123</source>
<translation type="unfinished"></translation>
</message>
@ -1863,17 +1874,17 @@
<context>
<name>LightDMHelper</name>
<message>
<location filename="../src/lock-backend/lightdmhelper.cpp" line="99"/>
<location filename="../src/lock-backend/lightdmhelper.cpp" line="105"/>
<source>failed to start session.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/lock-backend/lightdmhelper.cpp" line="234"/>
<location filename="../src/lock-backend/lightdmhelper.cpp" line="204"/>
<source>Login</source>
<translation type="unfinished">Кирүү</translation>
</message>
<message>
<location filename="../src/lock-backend/lightdmhelper.cpp" line="242"/>
<location filename="../src/lock-backend/lightdmhelper.cpp" line="213"/>
<source>Guest</source>
<translation type="unfinished"></translation>
</message>
@ -1901,7 +1912,7 @@
<translation type="vanished">Бир эле учурда бир нече колдонуучулар катталган. Сиз бул системаны кайра жүктөп келет деп ишенесизби?</translation>
</message>
<message>
<location filename="../src/widgets/lockwidget.cpp" line="923"/>
<location filename="../src/widgets/lockwidget.cpp" line="944"/>
<source>Multiple users are logged in at the same time.Are you sure you want to %1 this system?</source>
<translation type="unfinished"></translation>
</message>
@ -1979,12 +1990,12 @@
<context>
<name>MyNetworkWidget</name>
<message>
<location filename="../src/widgets/mynetworkwidget.cpp" line="36"/>
<location filename="../src/widgets/mynetworkwidget.cpp" line="35"/>
<source>LAN</source>
<translation type="unfinished">ЛАН</translation>
</message>
<message>
<location filename="../src/widgets/mynetworkwidget.cpp" line="38"/>
<location filename="../src/widgets/mynetworkwidget.cpp" line="37"/>
<source>WLAN</source>
<translation type="unfinished">ВЛАН</translation>
</message>
@ -1992,12 +2003,13 @@
<context>
<name>NumbersWidget</name>
<message>
<location filename="../src/VirtualKeyboard/src/numberswidget.cpp" line="160"/>
<location filename="../src/VirtualKeyboard/src/numberswidget.cpp" line="161"/>
<source>&amp;&amp;?!</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/VirtualKeyboard/src/numberswidget.cpp" line="174"/>
<location filename="../src/VirtualKeyboard/src/numberswidget.cpp" line="175"/>
<location filename="../src/VirtualKeyboard/src/numberswidget.cpp" line="310"/>
<source>Return</source>
<translation type="unfinished"></translation>
</message>
@ -2306,72 +2318,6 @@
<message>
<location filename="../src/dbusifs/enginedevice.cpp" line="308"/>
<source></source>
<comment>this is only shown for laptops with multiple batteries</comment>
<translation></translation>
</message>
<message>
<location filename="../src/dbusifs/enginedevice.cpp" line="313"/>
<source></source>
<comment>this is only shown for laptops with multiple batteries</comment>
<translation></translation>
</message>
<message>
<location filename="../src/dbusifs/enginedevice.cpp" line="337"/>
<source></source>
<comment>laptop primary battery</comment>
<translation></translation>
</message>
<message>
<location filename="../src/dbusifs/enginedevice.cpp" line="341"/>
<source></source>
<comment>battery-backed AC power source</comment>
<translation></translation>
</message>
<message>
<location filename="../src/dbusifs/enginedevice.cpp" line="345"/>
<source></source>
<comment>a monitor is a device to measure voltage and current</comment>
<translation></translation>
</message>
<message>
<location filename="../src/dbusifs/enginedevice.cpp" line="349"/>
<source></source>
<comment>wireless mice with internal batteries</comment>
<translation></translation>
</message>
<message>
<location filename="../src/dbusifs/enginedevice.cpp" line="353"/>
<source></source>
<comment>wireless keyboard with internal battery</comment>
<translation></translation>
</message>
<message>
<location filename="../src/dbusifs/enginedevice.cpp" line="357"/>
<source></source>
<comment>portable device</comment>
<translation></translation>
</message>
<message>
<location filename="../src/dbusifs/enginedevice.cpp" line="361"/>
<source></source>
<comment>cell phone (mobile...)</comment>
<translation></translation>
</message>
<message>
<location filename="../src/dbusifs/enginedevice.cpp" line="365"/>
<source></source>
<comment>media player, mp3 etc</comment>
<translation></translation>
</message>
<message>
<location filename="../src/dbusifs/enginedevice.cpp" line="369"/>
<source></source>
<comment>tablet device</comment>
<translation></translation>
</message>
<message>
<location filename="../src/dbusifs/enginedevice.cpp" line="373"/>
<source></source>
<comment>tablet device</comment>
<translation></translation>
</message>
@ -2521,6 +2467,21 @@
<translation type="vanished">Өтүү</translation>
</message>
</context>
<context>
<name>UserListWidget</name>
<message>
<location filename="../src/widgets/userlistwidget.cpp" line="46"/>
<location filename="../src/widgets/userlistwidget.cpp" line="99"/>
<source>Login</source>
<translation type="unfinished">Кирүү</translation>
</message>
<message>
<location filename="../src/widgets/userlistwidget.cpp" line="48"/>
<location filename="../src/widgets/userlistwidget.cpp" line="101"/>
<source>Guest</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>Utils</name>
<message>
@ -2692,12 +2653,12 @@
<translation>терезе идентификату</translation>
</message>
<message>
<location filename="../src/lock-backend/main.cpp" line="48"/>
<location filename="../src/lock-backend/main.cpp" line="49"/>
<source>Backend for the ukui ScreenSaver.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/lock-backend/main.cpp" line="54"/>
<location filename="../src/lock-backend/main.cpp" line="55"/>
<source>lock the screen by startup</source>
<translation type="unfinished"></translation>
</message>

View File

@ -24,7 +24,7 @@
<translation type="obsolete">使</translation>
</message>
<message>
<location filename="../src/widgets/authdialog.cpp" line="1085"/>
<location filename="../src/widgets/authdialog.cpp" line="1117"/>
<source>Retry</source>
<translation> </translation>
</message>
@ -53,125 +53,130 @@
<translation type="vanished">%1%2</translation>
</message>
<message>
<location filename="../src/widgets/authdialog.cpp" line="1148"/>
<location filename="../src/widgets/authdialog.cpp" line="1186"/>
<source>Please try again in %1 minutes.</source>
<translation>%1 </translation>
</message>
<message>
<location filename="../src/widgets/authdialog.cpp" line="1155"/>
<location filename="../src/widgets/authdialog.cpp" line="1193"/>
<source>Please try again in %1 seconds.</source>
<translation>%1 </translation>
</message>
<message>
<location filename="../src/widgets/authdialog.cpp" line="1162"/>
<location filename="../src/widgets/authdialog.cpp" line="1200"/>
<source>Account locked permanently.</source>
<translation> </translation>
</message>
<message>
<location filename="../src/widgets/authdialog.cpp" line="522"/>
<location filename="../src/widgets/authdialog.cpp" line="565"/>
<location filename="../src/widgets/authdialog.cpp" line="549"/>
<location filename="../src/widgets/authdialog.cpp" line="592"/>
<source>Verify face recognition or enter password to unlock</source>
<translation> </translation>
</message>
<message>
<location filename="../src/widgets/authdialog.cpp" line="527"/>
<location filename="../src/widgets/authdialog.cpp" line="348"/>
<source>Guest</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/widgets/authdialog.cpp" line="554"/>
<source>Press fingerprint or enter password to unlock</source>
<translation> </translation>
</message>
<message>
<location filename="../src/widgets/authdialog.cpp" line="532"/>
<location filename="../src/widgets/authdialog.cpp" line="559"/>
<source>Verify voiceprint or enter password to unlock</source>
<translation> </translation>
</message>
<message>
<location filename="../src/widgets/authdialog.cpp" line="537"/>
<location filename="../src/widgets/authdialog.cpp" line="564"/>
<source>Verify finger vein or enter password to unlock</source>
<translation> </translation>
</message>
<message>
<location filename="../src/widgets/authdialog.cpp" line="542"/>
<location filename="../src/widgets/authdialog.cpp" line="569"/>
<source>Verify iris or enter password to unlock</source>
<translation> </translation>
</message>
<message>
<location filename="../src/widgets/authdialog.cpp" line="860"/>
<location filename="../src/widgets/authdialog.cpp" line="887"/>
<source>Input Password</source>
<translation> </translation>
</message>
<message>
<location filename="../src/widgets/authdialog.cpp" line="865"/>
<location filename="../src/widgets/authdialog.cpp" line="892"/>
<source>Username</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/widgets/authdialog.cpp" line="928"/>
<location filename="../src/widgets/authdialog.cpp" line="960"/>
<source>User name input error!</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/widgets/authdialog.cpp" line="1005"/>
<location filename="../src/widgets/authdialog.cpp" line="1037"/>
<source>login</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/widgets/authdialog.cpp" line="1382"/>
<location filename="../src/widgets/authdialog.cpp" line="1534"/>
<location filename="../src/widgets/authdialog.cpp" line="1675"/>
<location filename="../src/widgets/authdialog.cpp" line="1852"/>
<location filename="../src/widgets/authdialog.cpp" line="1420"/>
<location filename="../src/widgets/authdialog.cpp" line="1572"/>
<location filename="../src/widgets/authdialog.cpp" line="1713"/>
<location filename="../src/widgets/authdialog.cpp" line="1890"/>
<source>Failed to verify %1, please enter password to unlock</source>
<translation>%1 </translation>
</message>
<message>
<location filename="../src/widgets/authdialog.cpp" line="1384"/>
<location filename="../src/widgets/authdialog.cpp" line="1536"/>
<location filename="../src/widgets/authdialog.cpp" line="1679"/>
<location filename="../src/widgets/authdialog.cpp" line="1681"/>
<location filename="../src/widgets/authdialog.cpp" line="1854"/>
<location filename="../src/widgets/authdialog.cpp" line="1422"/>
<location filename="../src/widgets/authdialog.cpp" line="1574"/>
<location filename="../src/widgets/authdialog.cpp" line="1717"/>
<location filename="../src/widgets/authdialog.cpp" line="1719"/>
<location filename="../src/widgets/authdialog.cpp" line="1892"/>
<source>Unable to verify %1, please enter password to unlock</source>
<translation>%1/ </translation>
</message>
<message>
<location filename="../src/widgets/authdialog.cpp" line="1709"/>
<location filename="../src/widgets/authdialog.cpp" line="1747"/>
<source>Abnormal network</source>
<translation> </translation>
</message>
<message>
<location filename="../src/widgets/authdialog.cpp" line="1716"/>
<location filename="../src/widgets/authdialog.cpp" line="1754"/>
<source>Face recognition waiting time out, please click refresh or enter the password to unlock.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/widgets/authdialog.cpp" line="1982"/>
<location filename="../src/widgets/authdialog.cpp" line="2020"/>
<source>FingerPrint</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/widgets/authdialog.cpp" line="1984"/>
<location filename="../src/widgets/authdialog.cpp" line="2022"/>
<source>FingerVein</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/widgets/authdialog.cpp" line="1986"/>
<location filename="../src/widgets/authdialog.cpp" line="2024"/>
<source>Iris</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/widgets/authdialog.cpp" line="1988"/>
<location filename="../src/widgets/authdialog.cpp" line="2026"/>
<source>Face</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/widgets/authdialog.cpp" line="1990"/>
<location filename="../src/widgets/authdialog.cpp" line="2028"/>
<source>VoicePrint</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/widgets/authdialog.cpp" line="1992"/>
<location filename="../src/widgets/authdialog.cpp" line="2030"/>
<source>Ukey</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/widgets/authdialog.cpp" line="1994"/>
<location filename="../src/widgets/authdialog.cpp" line="2032"/>
<source>QRCode</source>
<translation type="unfinished"> </translation>
</message>
@ -180,8 +185,8 @@
<translation type="vanished">使</translation>
</message>
<message>
<location filename="../src/widgets/authdialog.cpp" line="703"/>
<location filename="../src/widgets/authdialog.cpp" line="704"/>
<location filename="../src/widgets/authdialog.cpp" line="730"/>
<location filename="../src/widgets/authdialog.cpp" line="731"/>
<source>Password cannot be empty</source>
<translation> </translation>
</message>
@ -194,8 +199,8 @@
<translation type="vanished">%1.</translation>
</message>
<message>
<location filename="../src/widgets/authdialog.cpp" line="1694"/>
<location filename="../src/widgets/authdialog.cpp" line="1698"/>
<location filename="../src/widgets/authdialog.cpp" line="1732"/>
<location filename="../src/widgets/authdialog.cpp" line="1736"/>
<source>Failed to verify %1, you still have %2 verification opportunities</source>
<translation>%1/ %2 </translation>
</message>
@ -224,13 +229,13 @@
<translation type="vanished"></translation>
</message>
<message>
<location filename="../src/widgets/authdialog.cpp" line="931"/>
<location filename="../src/widgets/authdialog.cpp" line="936"/>
<location filename="../src/widgets/authdialog.cpp" line="963"/>
<location filename="../src/widgets/authdialog.cpp" line="968"/>
<source>Authentication failure, Please try again</source>
<translation> </translation>
</message>
<message>
<location filename="../src/widgets/authdialog.cpp" line="547"/>
<location filename="../src/widgets/authdialog.cpp" line="574"/>
<source>Use the bound wechat scanning code or enter the password to unlock</source>
<translation> </translation>
</message>
@ -243,12 +248,13 @@
<translation type="vanished"> USB </translation>
</message>
<message>
<location filename="../src/widgets/authdialog.cpp" line="857"/>
<location filename="../src/widgets/authdialog.cpp" line="884"/>
<source>Password </source>
<translation> </translation>
</message>
<message>
<location filename="../src/widgets/authdialog.cpp" line="1076"/>
<location filename="../src/widgets/authdialog.cpp" line="346"/>
<location filename="../src/widgets/authdialog.cpp" line="1108"/>
<source>Login</source>
<translation> </translation>
</message>
@ -368,31 +374,35 @@
<name>BlockWidget</name>
<message>
<location filename="../src/widgets/blockwidget.cpp" line="40"/>
<location filename="../src/widgets/blockwidget.cpp" line="82"/>
<location filename="../src/widgets/blockwidget.cpp" line="135"/>
<source>Cancel</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/widgets/blockwidget.cpp" line="44"/>
<location filename="../src/widgets/blockwidget.cpp" line="83"/>
<location filename="../src/widgets/blockwidget.cpp" line="136"/>
<source>Confrim</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/widgets/blockwidget.cpp" line="89"/>
<location filename="../src/widgets/blockwidget.cpp" line="91"/>
<source>The following program is running to prevent the system from reboot!</source>
<translation type="unfinished"> !</translation>
</message>
<message>
<location filename="../src/widgets/blockwidget.cpp" line="92"/>
<location filename="../src/widgets/blockwidget.cpp" line="94"/>
<source>The following program is running to prevent the system from shutting down!</source>
<translation type="unfinished"> !</translation>
</message>
<message>
<location filename="../src/widgets/blockwidget.cpp" line="95"/>
<location filename="../src/widgets/blockwidget.cpp" line="97"/>
<source>The following program is running to prevent the system from suspend!</source>
<translation type="unfinished"> !</translation>
</message>
<message>
<location filename="../src/widgets/blockwidget.cpp" line="98"/>
<location filename="../src/widgets/blockwidget.cpp" line="100"/>
<source>The following program is running to prevent the system from hibernate!</source>
<translation type="unfinished"> !</translation>
</message>
@ -408,17 +418,18 @@
<context>
<name>CharsWidget</name>
<message>
<location filename="../src/VirtualKeyboard/src/charswidget.cpp" line="114"/>
<location filename="../src/VirtualKeyboard/src/charswidget.cpp" line="115"/>
<location filename="../src/VirtualKeyboard/src/charswidget.cpp" line="273"/>
<source>More</source>
<translation> </translation>
</message>
<message>
<location filename="../src/VirtualKeyboard/src/charswidget.cpp" line="128"/>
<location filename="../src/VirtualKeyboard/src/charswidget.cpp" line="129"/>
<source>ABC</source>
<translation>ABC</translation>
</message>
<message>
<location filename="../src/VirtualKeyboard/src/charswidget.cpp" line="141"/>
<location filename="../src/VirtualKeyboard/src/charswidget.cpp" line="142"/>
<source>123</source>
<translation>123</translation>
</message>
@ -1890,17 +1901,17 @@
<context>
<name>LightDMHelper</name>
<message>
<location filename="../src/lock-backend/lightdmhelper.cpp" line="99"/>
<location filename="../src/lock-backend/lightdmhelper.cpp" line="105"/>
<source>failed to start session.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/lock-backend/lightdmhelper.cpp" line="234"/>
<location filename="../src/lock-backend/lightdmhelper.cpp" line="204"/>
<source>Login</source>
<translation type="unfinished"> </translation>
</message>
<message>
<location filename="../src/lock-backend/lightdmhelper.cpp" line="242"/>
<location filename="../src/lock-backend/lightdmhelper.cpp" line="213"/>
<source>Guest</source>
<translation type="unfinished"></translation>
</message>
@ -1944,7 +1955,7 @@
<translation type="vanished"> </translation>
</message>
<message>
<location filename="../src/widgets/lockwidget.cpp" line="923"/>
<location filename="../src/widgets/lockwidget.cpp" line="944"/>
<source>Multiple users are logged in at the same time.Are you sure you want to %1 this system?</source>
<translation type="unfinished"></translation>
</message>
@ -2022,12 +2033,12 @@
<context>
<name>MyNetworkWidget</name>
<message>
<location filename="../src/widgets/mynetworkwidget.cpp" line="36"/>
<location filename="../src/widgets/mynetworkwidget.cpp" line="35"/>
<source>LAN</source>
<translation type="unfinished"> </translation>
</message>
<message>
<location filename="../src/widgets/mynetworkwidget.cpp" line="38"/>
<location filename="../src/widgets/mynetworkwidget.cpp" line="37"/>
<source>WLAN</source>
<translation type="unfinished"> </translation>
</message>
@ -2035,12 +2046,13 @@
<context>
<name>NumbersWidget</name>
<message>
<location filename="../src/VirtualKeyboard/src/numberswidget.cpp" line="160"/>
<location filename="../src/VirtualKeyboard/src/numberswidget.cpp" line="161"/>
<source>&amp;&amp;?!</source>
<translation>&amp;&amp;?!</translation>
</message>
<message>
<location filename="../src/VirtualKeyboard/src/numberswidget.cpp" line="174"/>
<location filename="../src/VirtualKeyboard/src/numberswidget.cpp" line="175"/>
<location filename="../src/VirtualKeyboard/src/numberswidget.cpp" line="310"/>
<source>Return</source>
<translation> </translation>
</message>
@ -2514,6 +2526,21 @@
<translation type="vanished"> </translation>
</message>
</context>
<context>
<name>UserListWidget</name>
<message>
<location filename="../src/widgets/userlistwidget.cpp" line="46"/>
<location filename="../src/widgets/userlistwidget.cpp" line="99"/>
<source>Login</source>
<translation type="unfinished"> </translation>
</message>
<message>
<location filename="../src/widgets/userlistwidget.cpp" line="48"/>
<location filename="../src/widgets/userlistwidget.cpp" line="101"/>
<source>Guest</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>Utils</name>
<message>
@ -2685,12 +2712,12 @@
<translation> id</translation>
</message>
<message>
<location filename="../src/lock-backend/main.cpp" line="48"/>
<location filename="../src/lock-backend/main.cpp" line="49"/>
<source>Backend for the ukui ScreenSaver.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/lock-backend/main.cpp" line="54"/>
<location filename="../src/lock-backend/main.cpp" line="55"/>
<source>lock the screen by startup</source>
<translation type="unfinished"></translation>
</message>

View File

@ -158,6 +158,10 @@
<source>QRCode</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Guest</source>
<translation type="unfinished">Convidado</translation>
</message>
</context>
<context>
<name>BatteryWidget</name>
@ -723,6 +727,17 @@
<translation type="obsolete">TextLabel</translation>
</message>
</context>
<context>
<name>UserListWidget</name>
<message>
<source>Login</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Guest</source>
<translation type="unfinished">Convidado</translation>
</message>
</context>
<context>
<name>Widget</name>
<message>

View File

@ -158,6 +158,10 @@
<source>QRCode</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Guest</source>
<translation type="unfinished">гость</translation>
</message>
</context>
<context>
<name>BatteryWidget</name>
@ -723,6 +727,17 @@
<translation type="obsolete">TextLabel</translation>
</message>
</context>
<context>
<name>UserListWidget</name>
<message>
<source>Login</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Guest</source>
<translation type="unfinished">гость</translation>
</message>
</context>
<context>
<name>Widget</name>
<message>

View File

@ -24,7 +24,7 @@
<translation type="obsolete">Parola</translation>
</message>
<message>
<location filename="../src/widgets/authdialog.cpp" line="1085"/>
<location filename="../src/widgets/authdialog.cpp" line="1117"/>
<source>Retry</source>
<translation type="unfinished">Yeniden Dene</translation>
</message>
@ -49,158 +49,164 @@
<translation type="vanished">Kimlik doğrulama hatası, hala %1 kalan denemen var</translation>
</message>
<message>
<location filename="../src/widgets/authdialog.cpp" line="931"/>
<location filename="../src/widgets/authdialog.cpp" line="936"/>
<location filename="../src/widgets/authdialog.cpp" line="963"/>
<location filename="../src/widgets/authdialog.cpp" line="968"/>
<source>Authentication failure, Please try again</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/widgets/authdialog.cpp" line="1148"/>
<location filename="../src/widgets/authdialog.cpp" line="1186"/>
<source>Please try again in %1 minutes.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/widgets/authdialog.cpp" line="1155"/>
<location filename="../src/widgets/authdialog.cpp" line="1193"/>
<source>Please try again in %1 seconds.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/widgets/authdialog.cpp" line="1162"/>
<location filename="../src/widgets/authdialog.cpp" line="1200"/>
<source>Account locked permanently.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/widgets/authdialog.cpp" line="522"/>
<location filename="../src/widgets/authdialog.cpp" line="565"/>
<location filename="../src/widgets/authdialog.cpp" line="549"/>
<location filename="../src/widgets/authdialog.cpp" line="592"/>
<source>Verify face recognition or enter password to unlock</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/widgets/authdialog.cpp" line="527"/>
<location filename="../src/widgets/authdialog.cpp" line="554"/>
<source>Press fingerprint or enter password to unlock</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/widgets/authdialog.cpp" line="532"/>
<location filename="../src/widgets/authdialog.cpp" line="559"/>
<source>Verify voiceprint or enter password to unlock</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/widgets/authdialog.cpp" line="537"/>
<location filename="../src/widgets/authdialog.cpp" line="564"/>
<source>Verify finger vein or enter password to unlock</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/widgets/authdialog.cpp" line="542"/>
<location filename="../src/widgets/authdialog.cpp" line="569"/>
<source>Verify iris or enter password to unlock</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/widgets/authdialog.cpp" line="547"/>
<location filename="../src/widgets/authdialog.cpp" line="574"/>
<source>Use the bound wechat scanning code or enter the password to unlock</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/widgets/authdialog.cpp" line="703"/>
<location filename="../src/widgets/authdialog.cpp" line="704"/>
<location filename="../src/widgets/authdialog.cpp" line="730"/>
<location filename="../src/widgets/authdialog.cpp" line="731"/>
<source>Password cannot be empty</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/widgets/authdialog.cpp" line="857"/>
<location filename="../src/widgets/authdialog.cpp" line="884"/>
<source>Password </source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/widgets/authdialog.cpp" line="860"/>
<location filename="../src/widgets/authdialog.cpp" line="887"/>
<source>Input Password</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/widgets/authdialog.cpp" line="865"/>
<location filename="../src/widgets/authdialog.cpp" line="892"/>
<source>Username</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/widgets/authdialog.cpp" line="928"/>
<location filename="../src/widgets/authdialog.cpp" line="960"/>
<source>User name input error!</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/widgets/authdialog.cpp" line="1005"/>
<location filename="../src/widgets/authdialog.cpp" line="1037"/>
<source>login</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/widgets/authdialog.cpp" line="1076"/>
<location filename="../src/widgets/authdialog.cpp" line="346"/>
<location filename="../src/widgets/authdialog.cpp" line="1108"/>
<source>Login</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/widgets/authdialog.cpp" line="1382"/>
<location filename="../src/widgets/authdialog.cpp" line="1534"/>
<location filename="../src/widgets/authdialog.cpp" line="1675"/>
<location filename="../src/widgets/authdialog.cpp" line="1852"/>
<location filename="../src/widgets/authdialog.cpp" line="348"/>
<source>Guest</source>
<translation type="unfinished">Misafir</translation>
</message>
<message>
<location filename="../src/widgets/authdialog.cpp" line="1420"/>
<location filename="../src/widgets/authdialog.cpp" line="1572"/>
<location filename="../src/widgets/authdialog.cpp" line="1713"/>
<location filename="../src/widgets/authdialog.cpp" line="1890"/>
<source>Failed to verify %1, please enter password to unlock</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/widgets/authdialog.cpp" line="1384"/>
<location filename="../src/widgets/authdialog.cpp" line="1536"/>
<location filename="../src/widgets/authdialog.cpp" line="1679"/>
<location filename="../src/widgets/authdialog.cpp" line="1681"/>
<location filename="../src/widgets/authdialog.cpp" line="1854"/>
<location filename="../src/widgets/authdialog.cpp" line="1422"/>
<location filename="../src/widgets/authdialog.cpp" line="1574"/>
<location filename="../src/widgets/authdialog.cpp" line="1717"/>
<location filename="../src/widgets/authdialog.cpp" line="1719"/>
<location filename="../src/widgets/authdialog.cpp" line="1892"/>
<source>Unable to verify %1, please enter password to unlock</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/widgets/authdialog.cpp" line="1694"/>
<location filename="../src/widgets/authdialog.cpp" line="1698"/>
<location filename="../src/widgets/authdialog.cpp" line="1732"/>
<location filename="../src/widgets/authdialog.cpp" line="1736"/>
<source>Failed to verify %1, you still have %2 verification opportunities</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/widgets/authdialog.cpp" line="1709"/>
<location filename="../src/widgets/authdialog.cpp" line="1747"/>
<source>Abnormal network</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/widgets/authdialog.cpp" line="1716"/>
<location filename="../src/widgets/authdialog.cpp" line="1754"/>
<source>Face recognition waiting time out, please click refresh or enter the password to unlock.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/widgets/authdialog.cpp" line="1982"/>
<location filename="../src/widgets/authdialog.cpp" line="2020"/>
<source>FingerPrint</source>
<translation type="unfinished">Parmak İzi</translation>
</message>
<message>
<location filename="../src/widgets/authdialog.cpp" line="1984"/>
<location filename="../src/widgets/authdialog.cpp" line="2022"/>
<source>FingerVein</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/widgets/authdialog.cpp" line="1986"/>
<location filename="../src/widgets/authdialog.cpp" line="2024"/>
<source>Iris</source>
<translation type="unfinished">Göz</translation>
</message>
<message>
<location filename="../src/widgets/authdialog.cpp" line="1988"/>
<location filename="../src/widgets/authdialog.cpp" line="2026"/>
<source>Face</source>
<translation type="unfinished">Yüz</translation>
</message>
<message>
<location filename="../src/widgets/authdialog.cpp" line="1990"/>
<location filename="../src/widgets/authdialog.cpp" line="2028"/>
<source>VoicePrint</source>
<translation type="unfinished">Ses İzi</translation>
</message>
<message>
<location filename="../src/widgets/authdialog.cpp" line="1992"/>
<location filename="../src/widgets/authdialog.cpp" line="2030"/>
<source>Ukey</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/widgets/authdialog.cpp" line="1994"/>
<location filename="../src/widgets/authdialog.cpp" line="2032"/>
<source>QRCode</source>
<translation type="unfinished"></translation>
</message>
@ -312,31 +318,35 @@
<name>BlockWidget</name>
<message>
<location filename="../src/widgets/blockwidget.cpp" line="40"/>
<location filename="../src/widgets/blockwidget.cpp" line="82"/>
<location filename="../src/widgets/blockwidget.cpp" line="135"/>
<source>Cancel</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/widgets/blockwidget.cpp" line="44"/>
<location filename="../src/widgets/blockwidget.cpp" line="83"/>
<location filename="../src/widgets/blockwidget.cpp" line="136"/>
<source>Confrim</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/widgets/blockwidget.cpp" line="89"/>
<location filename="../src/widgets/blockwidget.cpp" line="91"/>
<source>The following program is running to prevent the system from reboot!</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/widgets/blockwidget.cpp" line="92"/>
<location filename="../src/widgets/blockwidget.cpp" line="94"/>
<source>The following program is running to prevent the system from shutting down!</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/widgets/blockwidget.cpp" line="95"/>
<location filename="../src/widgets/blockwidget.cpp" line="97"/>
<source>The following program is running to prevent the system from suspend!</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/widgets/blockwidget.cpp" line="98"/>
<location filename="../src/widgets/blockwidget.cpp" line="100"/>
<source>The following program is running to prevent the system from hibernate!</source>
<translation type="unfinished"></translation>
</message>
@ -352,17 +362,18 @@
<context>
<name>CharsWidget</name>
<message>
<location filename="../src/VirtualKeyboard/src/charswidget.cpp" line="114"/>
<location filename="../src/VirtualKeyboard/src/charswidget.cpp" line="115"/>
<location filename="../src/VirtualKeyboard/src/charswidget.cpp" line="273"/>
<source>More</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/VirtualKeyboard/src/charswidget.cpp" line="128"/>
<location filename="../src/VirtualKeyboard/src/charswidget.cpp" line="129"/>
<source>ABC</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/VirtualKeyboard/src/charswidget.cpp" line="141"/>
<location filename="../src/VirtualKeyboard/src/charswidget.cpp" line="142"/>
<source>123</source>
<translation type="unfinished"></translation>
</message>
@ -587,17 +598,17 @@
<context>
<name>LightDMHelper</name>
<message>
<location filename="../src/lock-backend/lightdmhelper.cpp" line="99"/>
<location filename="../src/lock-backend/lightdmhelper.cpp" line="105"/>
<source>failed to start session.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/lock-backend/lightdmhelper.cpp" line="234"/>
<location filename="../src/lock-backend/lightdmhelper.cpp" line="204"/>
<source>Login</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/lock-backend/lightdmhelper.cpp" line="242"/>
<location filename="../src/lock-backend/lightdmhelper.cpp" line="213"/>
<source>Guest</source>
<translation type="unfinished">Misafir</translation>
</message>
@ -621,7 +632,7 @@
<translation type="vanished">Kullanıcı Değiştir</translation>
</message>
<message>
<location filename="../src/widgets/lockwidget.cpp" line="923"/>
<location filename="../src/widgets/lockwidget.cpp" line="944"/>
<source>Multiple users are logged in at the same time.Are you sure you want to %1 this system?</source>
<translation type="unfinished"></translation>
</message>
@ -688,12 +699,12 @@
<context>
<name>MyNetworkWidget</name>
<message>
<location filename="../src/widgets/mynetworkwidget.cpp" line="36"/>
<location filename="../src/widgets/mynetworkwidget.cpp" line="35"/>
<source>LAN</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/widgets/mynetworkwidget.cpp" line="38"/>
<location filename="../src/widgets/mynetworkwidget.cpp" line="37"/>
<source>WLAN</source>
<translation type="unfinished"></translation>
</message>
@ -701,12 +712,13 @@
<context>
<name>NumbersWidget</name>
<message>
<location filename="../src/VirtualKeyboard/src/numberswidget.cpp" line="160"/>
<location filename="../src/VirtualKeyboard/src/numberswidget.cpp" line="161"/>
<source>&amp;&amp;?!</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/VirtualKeyboard/src/numberswidget.cpp" line="174"/>
<location filename="../src/VirtualKeyboard/src/numberswidget.cpp" line="175"/>
<location filename="../src/VirtualKeyboard/src/numberswidget.cpp" line="310"/>
<source>Return</source>
<translation type="unfinished"></translation>
</message>
@ -887,6 +899,21 @@
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>UserListWidget</name>
<message>
<location filename="../src/widgets/userlistwidget.cpp" line="46"/>
<location filename="../src/widgets/userlistwidget.cpp" line="99"/>
<source>Login</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/widgets/userlistwidget.cpp" line="48"/>
<location filename="../src/widgets/userlistwidget.cpp" line="101"/>
<source>Guest</source>
<translation type="unfinished">Misafir</translation>
</message>
</context>
<context>
<name>Widget</name>
<message>
@ -1002,12 +1029,12 @@
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/lock-backend/main.cpp" line="48"/>
<location filename="../src/lock-backend/main.cpp" line="49"/>
<source>Backend for the ukui ScreenSaver.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/lock-backend/main.cpp" line="54"/>
<location filename="../src/lock-backend/main.cpp" line="55"/>
<source>lock the screen by startup</source>
<translation type="unfinished"></translation>
</message>

View File

@ -24,7 +24,7 @@
<translation type="obsolete">使</translation>
</message>
<message>
<location filename="../src/widgets/authdialog.cpp" line="1085"/>
<location filename="../src/widgets/authdialog.cpp" line="1117"/>
<source>Retry</source>
<translation>قايتا قايتا تىرشىش</translation>
</message>
@ -53,125 +53,130 @@
<translation type="vanished">%1%2</translation>
</message>
<message>
<location filename="../src/widgets/authdialog.cpp" line="1148"/>
<location filename="../src/widgets/authdialog.cpp" line="1186"/>
<source>Please try again in %1 minutes.</source>
<translation>٪1 مىنۇت ئىچىدە قايتا سىناپ بېقىڭ.</translation>
</message>
<message>
<location filename="../src/widgets/authdialog.cpp" line="1155"/>
<location filename="../src/widgets/authdialog.cpp" line="1193"/>
<source>Please try again in %1 seconds.</source>
<translation>٪1 سېكۇنت ئىچىدە قايتا سىناپ بېقىڭ.</translation>
</message>
<message>
<location filename="../src/widgets/authdialog.cpp" line="1162"/>
<location filename="../src/widgets/authdialog.cpp" line="1200"/>
<source>Account locked permanently.</source>
<translation>ھېسابات مەڭگۈلۈك قۇلۇپلىنىدۇ.</translation>
</message>
<message>
<location filename="../src/widgets/authdialog.cpp" line="522"/>
<location filename="../src/widgets/authdialog.cpp" line="565"/>
<location filename="../src/widgets/authdialog.cpp" line="549"/>
<location filename="../src/widgets/authdialog.cpp" line="592"/>
<source>Verify face recognition or enter password to unlock</source>
<translation>چىراي تونۇشنى دەلىللەش ياكى مەخپىي نومۇر كىرگۈزۈش ئارقىلىق قۇلۇپ ئېچىش</translation>
</message>
<message>
<location filename="../src/widgets/authdialog.cpp" line="527"/>
<location filename="../src/widgets/authdialog.cpp" line="348"/>
<source>Guest</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/widgets/authdialog.cpp" line="554"/>
<source>Press fingerprint or enter password to unlock</source>
<translation>بارماق ئىزىنى بېسىش ياكى مەخپىي نومۇر كىرگۈزۈش ئارقىلىق قۇلۇپ ئېچىش</translation>
</message>
<message>
<location filename="../src/widgets/authdialog.cpp" line="532"/>
<location filename="../src/widgets/authdialog.cpp" line="559"/>
<source>Verify voiceprint or enter password to unlock</source>
<translation>ئاۋاز ئىزىنى دەلىللەش ياكى مەخپىي نومۇر كىرگۈزۈش ئارقىلىق قۇلۇپ ئېچىش</translation>
</message>
<message>
<location filename="../src/widgets/authdialog.cpp" line="537"/>
<location filename="../src/widgets/authdialog.cpp" line="564"/>
<source>Verify finger vein or enter password to unlock</source>
<translation>بارماق تومۇرىنى ئېنىقلاش ياكى مەخپىي نومۇر كىرگۈزۈش ئارقىلىق قۇلۇپ ئېچىش</translation>
</message>
<message>
<location filename="../src/widgets/authdialog.cpp" line="542"/>
<location filename="../src/widgets/authdialog.cpp" line="569"/>
<source>Verify iris or enter password to unlock</source>
<translation>Iris نى ئېنىقلاش ياكى مەخپىي نومۇر كىرگۈزۈش ئارقىلىق قۇلۇپ ئېچىش</translation>
</message>
<message>
<location filename="../src/widgets/authdialog.cpp" line="860"/>
<location filename="../src/widgets/authdialog.cpp" line="887"/>
<source>Input Password</source>
<translation>ئىم كىرگۈزۈش</translation>
</message>
<message>
<location filename="../src/widgets/authdialog.cpp" line="865"/>
<location filename="../src/widgets/authdialog.cpp" line="892"/>
<source>Username</source>
<translation type="unfinished">ئىشلەتكۈچى نامى</translation>
</message>
<message>
<location filename="../src/widgets/authdialog.cpp" line="928"/>
<location filename="../src/widgets/authdialog.cpp" line="960"/>
<source>User name input error!</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/widgets/authdialog.cpp" line="1005"/>
<location filename="../src/widgets/authdialog.cpp" line="1037"/>
<source>login</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/widgets/authdialog.cpp" line="1382"/>
<location filename="../src/widgets/authdialog.cpp" line="1534"/>
<location filename="../src/widgets/authdialog.cpp" line="1675"/>
<location filename="../src/widgets/authdialog.cpp" line="1852"/>
<location filename="../src/widgets/authdialog.cpp" line="1420"/>
<location filename="../src/widgets/authdialog.cpp" line="1572"/>
<location filename="../src/widgets/authdialog.cpp" line="1713"/>
<location filename="../src/widgets/authdialog.cpp" line="1890"/>
<source>Failed to verify %1, please enter password to unlock</source>
<translation>٪1 نى دەلىللەش مەغلۇپ بولدى، مەخپى نۇمۇر كىرگۈزۈڭ</translation>
</message>
<message>
<location filename="../src/widgets/authdialog.cpp" line="1384"/>
<location filename="../src/widgets/authdialog.cpp" line="1536"/>
<location filename="../src/widgets/authdialog.cpp" line="1679"/>
<location filename="../src/widgets/authdialog.cpp" line="1681"/>
<location filename="../src/widgets/authdialog.cpp" line="1854"/>
<location filename="../src/widgets/authdialog.cpp" line="1422"/>
<location filename="../src/widgets/authdialog.cpp" line="1574"/>
<location filename="../src/widgets/authdialog.cpp" line="1717"/>
<location filename="../src/widgets/authdialog.cpp" line="1719"/>
<location filename="../src/widgets/authdialog.cpp" line="1892"/>
<source>Unable to verify %1, please enter password to unlock</source>
<translation>٪1 نى دەلىللەشكە ئامالسىز، مەخپىي نومۇرنى كىرگۈزۈپ قۇلۇپنى ئاچ</translation>
</message>
<message>
<location filename="../src/widgets/authdialog.cpp" line="1709"/>
<location filename="../src/widgets/authdialog.cpp" line="1747"/>
<source>Abnormal network</source>
<translation>بىنورمال تور</translation>
</message>
<message>
<location filename="../src/widgets/authdialog.cpp" line="1716"/>
<location filename="../src/widgets/authdialog.cpp" line="1754"/>
<source>Face recognition waiting time out, please click refresh or enter the password to unlock.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/widgets/authdialog.cpp" line="1982"/>
<location filename="../src/widgets/authdialog.cpp" line="2020"/>
<source>FingerPrint</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/widgets/authdialog.cpp" line="1984"/>
<location filename="../src/widgets/authdialog.cpp" line="2022"/>
<source>FingerVein</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/widgets/authdialog.cpp" line="1986"/>
<location filename="../src/widgets/authdialog.cpp" line="2024"/>
<source>Iris</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/widgets/authdialog.cpp" line="1988"/>
<location filename="../src/widgets/authdialog.cpp" line="2026"/>
<source>Face</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/widgets/authdialog.cpp" line="1990"/>
<location filename="../src/widgets/authdialog.cpp" line="2028"/>
<source>VoicePrint</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/widgets/authdialog.cpp" line="1992"/>
<location filename="../src/widgets/authdialog.cpp" line="2030"/>
<source>Ukey</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/widgets/authdialog.cpp" line="1994"/>
<location filename="../src/widgets/authdialog.cpp" line="2032"/>
<source>QRCode</source>
<translation type="unfinished">QRCode</translation>
</message>
@ -180,8 +185,8 @@
<translation type="vanished">使</translation>
</message>
<message>
<location filename="../src/widgets/authdialog.cpp" line="703"/>
<location filename="../src/widgets/authdialog.cpp" line="704"/>
<location filename="../src/widgets/authdialog.cpp" line="730"/>
<location filename="../src/widgets/authdialog.cpp" line="731"/>
<source>Password cannot be empty</source>
<translation>مەخپىي نومۇرنى بوش قويۇشقا بولمايدۇ</translation>
</message>
@ -194,8 +199,8 @@
<translation type="vanished">%1.</translation>
</message>
<message>
<location filename="../src/widgets/authdialog.cpp" line="1694"/>
<location filename="../src/widgets/authdialog.cpp" line="1698"/>
<location filename="../src/widgets/authdialog.cpp" line="1732"/>
<location filename="../src/widgets/authdialog.cpp" line="1736"/>
<source>Failed to verify %1, you still have %2 verification opportunities</source>
<translation>٪1 نى دەلىللەش مەغلۇپ بولدى، سىزدە يەنىلا ٪2 دەلىللەش پۇرسىتى بار</translation>
</message>
@ -224,23 +229,24 @@
<translation type="vanished"></translation>
</message>
<message>
<location filename="../src/widgets/authdialog.cpp" line="931"/>
<location filename="../src/widgets/authdialog.cpp" line="936"/>
<location filename="../src/widgets/authdialog.cpp" line="963"/>
<location filename="../src/widgets/authdialog.cpp" line="968"/>
<source>Authentication failure, Please try again</source>
<translation>دەلىللەش مەغلۇپ بولدى، قايتا سىناپ بېقىڭ</translation>
</message>
<message>
<location filename="../src/widgets/authdialog.cpp" line="547"/>
<location filename="../src/widgets/authdialog.cpp" line="574"/>
<source>Use the bound wechat scanning code or enter the password to unlock</source>
<translation>باغلانغان ئۈندىدارنى سىكاننېرلاش كودى ياكى مەخپىي نومۇرىنى كىرگۈزۈپ قۇلۇپ ئېچىش</translation>
</message>
<message>
<location filename="../src/widgets/authdialog.cpp" line="857"/>
<location filename="../src/widgets/authdialog.cpp" line="884"/>
<source>Password </source>
<translation>ئىم </translation>
</message>
<message>
<location filename="../src/widgets/authdialog.cpp" line="1076"/>
<location filename="../src/widgets/authdialog.cpp" line="346"/>
<location filename="../src/widgets/authdialog.cpp" line="1108"/>
<source>Login</source>
<translation>كىرىش</translation>
</message>
@ -360,31 +366,35 @@
<name>BlockWidget</name>
<message>
<location filename="../src/widgets/blockwidget.cpp" line="40"/>
<location filename="../src/widgets/blockwidget.cpp" line="82"/>
<location filename="../src/widgets/blockwidget.cpp" line="135"/>
<source>Cancel</source>
<translation type="unfinished">ئەمەلدىن قالدۇرۇش</translation>
</message>
<message>
<location filename="../src/widgets/blockwidget.cpp" line="44"/>
<location filename="../src/widgets/blockwidget.cpp" line="83"/>
<location filename="../src/widgets/blockwidget.cpp" line="136"/>
<source>Confrim</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/widgets/blockwidget.cpp" line="89"/>
<location filename="../src/widgets/blockwidget.cpp" line="91"/>
<source>The following program is running to prevent the system from reboot!</source>
<translation type="unfinished">سېستىمىنىڭ قايتا قوزغىلىشىنىڭ ئالدىنى ئېلىش ئۈچۈن تۆۋەندىكى پروگرامما ئىجرا بولىۋاتىدۇ!</translation>
</message>
<message>
<location filename="../src/widgets/blockwidget.cpp" line="92"/>
<location filename="../src/widgets/blockwidget.cpp" line="94"/>
<source>The following program is running to prevent the system from shutting down!</source>
<translation type="unfinished">تۆۋەندىكى پروگرامما سىستېمىنىڭ تاقىلىپ قېلىشىنىڭ ئالدىنى ئېلىش ئۈچۈن يۈگۈرۈۋاتىدۇ!</translation>
</message>
<message>
<location filename="../src/widgets/blockwidget.cpp" line="95"/>
<location filename="../src/widgets/blockwidget.cpp" line="97"/>
<source>The following program is running to prevent the system from suspend!</source>
<translation type="unfinished">سېستىمىنىڭ توختىشىنىڭ ئالدىنى ئېلىش ئۈچۈن تۆۋەندىكى پروگرامما ئىجرا قىلىنىۋاتىدۇ!</translation>
</message>
<message>
<location filename="../src/widgets/blockwidget.cpp" line="98"/>
<location filename="../src/widgets/blockwidget.cpp" line="100"/>
<source>The following program is running to prevent the system from hibernate!</source>
<translation type="unfinished">سېستىمىنىڭ تىزگىنلەپ قېلىشىنىڭ ئالدىنى ئېلىش ئۈچۈن تۆۋەندىكى پروگرامما ئىجرا بولىۋاتىدۇ!</translation>
</message>
@ -400,17 +410,18 @@
<context>
<name>CharsWidget</name>
<message>
<location filename="../src/VirtualKeyboard/src/charswidget.cpp" line="114"/>
<location filename="../src/VirtualKeyboard/src/charswidget.cpp" line="115"/>
<location filename="../src/VirtualKeyboard/src/charswidget.cpp" line="273"/>
<source>More</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/VirtualKeyboard/src/charswidget.cpp" line="128"/>
<location filename="../src/VirtualKeyboard/src/charswidget.cpp" line="129"/>
<source>ABC</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/VirtualKeyboard/src/charswidget.cpp" line="141"/>
<location filename="../src/VirtualKeyboard/src/charswidget.cpp" line="142"/>
<source>123</source>
<translation type="unfinished"></translation>
</message>
@ -1863,17 +1874,17 @@
<context>
<name>LightDMHelper</name>
<message>
<location filename="../src/lock-backend/lightdmhelper.cpp" line="99"/>
<location filename="../src/lock-backend/lightdmhelper.cpp" line="105"/>
<source>failed to start session.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/lock-backend/lightdmhelper.cpp" line="234"/>
<location filename="../src/lock-backend/lightdmhelper.cpp" line="204"/>
<source>Login</source>
<translation type="unfinished">كىرىش</translation>
</message>
<message>
<location filename="../src/lock-backend/lightdmhelper.cpp" line="242"/>
<location filename="../src/lock-backend/lightdmhelper.cpp" line="213"/>
<source>Guest</source>
<translation type="unfinished"></translation>
</message>
@ -1901,7 +1912,7 @@
<translation type="vanished">بىرلا ۋاقىتتا كۆپ ئابونت تىزىملىتىپ كىرىدۇ. سىز بۇ سىستېمىنى قايتىدىن قوزغىماقچى ئىكەنلىكىڭىزنى جەزىملەشتۈرەلەمسىز؟</translation>
</message>
<message>
<location filename="../src/widgets/lockwidget.cpp" line="923"/>
<location filename="../src/widgets/lockwidget.cpp" line="944"/>
<source>Multiple users are logged in at the same time.Are you sure you want to %1 this system?</source>
<translation type="unfinished"></translation>
</message>
@ -1979,12 +1990,12 @@
<context>
<name>MyNetworkWidget</name>
<message>
<location filename="../src/widgets/mynetworkwidget.cpp" line="36"/>
<location filename="../src/widgets/mynetworkwidget.cpp" line="35"/>
<source>LAN</source>
<translation type="unfinished">LAN</translation>
</message>
<message>
<location filename="../src/widgets/mynetworkwidget.cpp" line="38"/>
<location filename="../src/widgets/mynetworkwidget.cpp" line="37"/>
<source>WLAN</source>
<translation type="unfinished">WLAN</translation>
</message>
@ -1992,12 +2003,13 @@
<context>
<name>NumbersWidget</name>
<message>
<location filename="../src/VirtualKeyboard/src/numberswidget.cpp" line="160"/>
<location filename="../src/VirtualKeyboard/src/numberswidget.cpp" line="161"/>
<source>&amp;&amp;?!</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/VirtualKeyboard/src/numberswidget.cpp" line="174"/>
<location filename="../src/VirtualKeyboard/src/numberswidget.cpp" line="175"/>
<location filename="../src/VirtualKeyboard/src/numberswidget.cpp" line="310"/>
<source>Return</source>
<translation type="unfinished"></translation>
</message>
@ -2306,72 +2318,6 @@
<message>
<location filename="../src/dbusifs/enginedevice.cpp" line="308"/>
<source></source>
<comment>this is only shown for laptops with multiple batteries</comment>
<translation></translation>
</message>
<message>
<location filename="../src/dbusifs/enginedevice.cpp" line="313"/>
<source></source>
<comment>this is only shown for laptops with multiple batteries</comment>
<translation></translation>
</message>
<message>
<location filename="../src/dbusifs/enginedevice.cpp" line="337"/>
<source></source>
<comment>laptop primary battery</comment>
<translation></translation>
</message>
<message>
<location filename="../src/dbusifs/enginedevice.cpp" line="341"/>
<source></source>
<comment>battery-backed AC power source</comment>
<translation></translation>
</message>
<message>
<location filename="../src/dbusifs/enginedevice.cpp" line="345"/>
<source></source>
<comment>a monitor is a device to measure voltage and current</comment>
<translation></translation>
</message>
<message>
<location filename="../src/dbusifs/enginedevice.cpp" line="349"/>
<source></source>
<comment>wireless mice with internal batteries</comment>
<translation></translation>
</message>
<message>
<location filename="../src/dbusifs/enginedevice.cpp" line="353"/>
<source></source>
<comment>wireless keyboard with internal battery</comment>
<translation></translation>
</message>
<message>
<location filename="../src/dbusifs/enginedevice.cpp" line="357"/>
<source></source>
<comment>portable device</comment>
<translation></translation>
</message>
<message>
<location filename="../src/dbusifs/enginedevice.cpp" line="361"/>
<source></source>
<comment>cell phone (mobile...)</comment>
<translation></translation>
</message>
<message>
<location filename="../src/dbusifs/enginedevice.cpp" line="365"/>
<source></source>
<comment>media player, mp3 etc</comment>
<translation></translation>
</message>
<message>
<location filename="../src/dbusifs/enginedevice.cpp" line="369"/>
<source></source>
<comment>tablet device</comment>
<translation></translation>
</message>
<message>
<location filename="../src/dbusifs/enginedevice.cpp" line="373"/>
<source></source>
<comment>tablet device</comment>
<translation></translation>
</message>
@ -2521,6 +2467,21 @@
<translation type="vanished">ئاتلاندۇق</translation>
</message>
</context>
<context>
<name>UserListWidget</name>
<message>
<location filename="../src/widgets/userlistwidget.cpp" line="46"/>
<location filename="../src/widgets/userlistwidget.cpp" line="99"/>
<source>Login</source>
<translation type="unfinished">كىرىش</translation>
</message>
<message>
<location filename="../src/widgets/userlistwidget.cpp" line="48"/>
<location filename="../src/widgets/userlistwidget.cpp" line="101"/>
<source>Guest</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>Utils</name>
<message>
@ -2692,12 +2653,12 @@
<translation>كۆزنەك id</translation>
</message>
<message>
<location filename="../src/lock-backend/main.cpp" line="48"/>
<location filename="../src/lock-backend/main.cpp" line="49"/>
<source>Backend for the ukui ScreenSaver.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/lock-backend/main.cpp" line="54"/>
<location filename="../src/lock-backend/main.cpp" line="55"/>
<source>lock the screen by startup</source>
<translation type="unfinished"></translation>
</message>

View File

@ -24,7 +24,7 @@
<translation type="obsolete">使</translation>
</message>
<message>
<location filename="../src/widgets/authdialog.cpp" line="1085"/>
<location filename="../src/widgets/authdialog.cpp" line="1117"/>
<source>Retry</source>
<translation></translation>
</message>
@ -46,132 +46,137 @@
</message>
<message>
<source>Password: </source>
<translation></translation>
<translation type="vanished"></translation>
</message>
<message>
<source>Account locked %1 minutes due to %2 fail attempts</source>
<translation type="vanished">%1%2</translation>
</message>
<message>
<location filename="../src/widgets/authdialog.cpp" line="1148"/>
<location filename="../src/widgets/authdialog.cpp" line="1186"/>
<source>Please try again in %1 minutes.</source>
<translation>%1</translation>
</message>
<message>
<location filename="../src/widgets/authdialog.cpp" line="1155"/>
<location filename="../src/widgets/authdialog.cpp" line="1193"/>
<source>Please try again in %1 seconds.</source>
<translation>%1</translation>
</message>
<message>
<location filename="../src/widgets/authdialog.cpp" line="1162"/>
<location filename="../src/widgets/authdialog.cpp" line="1200"/>
<source>Account locked permanently.</source>
<translation></translation>
</message>
<message>
<location filename="../src/widgets/authdialog.cpp" line="522"/>
<location filename="../src/widgets/authdialog.cpp" line="565"/>
<location filename="../src/widgets/authdialog.cpp" line="549"/>
<location filename="../src/widgets/authdialog.cpp" line="592"/>
<source>Verify face recognition or enter password to unlock</source>
<translation></translation>
</message>
<message>
<location filename="../src/widgets/authdialog.cpp" line="527"/>
<location filename="../src/widgets/authdialog.cpp" line="348"/>
<source>Guest</source>
<translation></translation>
</message>
<message>
<location filename="../src/widgets/authdialog.cpp" line="554"/>
<source>Press fingerprint or enter password to unlock</source>
<translation></translation>
</message>
<message>
<location filename="../src/widgets/authdialog.cpp" line="532"/>
<location filename="../src/widgets/authdialog.cpp" line="559"/>
<source>Verify voiceprint or enter password to unlock</source>
<translation></translation>
</message>
<message>
<location filename="../src/widgets/authdialog.cpp" line="537"/>
<location filename="../src/widgets/authdialog.cpp" line="564"/>
<source>Verify finger vein or enter password to unlock</source>
<translation></translation>
</message>
<message>
<location filename="../src/widgets/authdialog.cpp" line="542"/>
<location filename="../src/widgets/authdialog.cpp" line="569"/>
<source>Verify iris or enter password to unlock</source>
<translation></translation>
</message>
<message>
<location filename="../src/widgets/authdialog.cpp" line="860"/>
<location filename="../src/widgets/authdialog.cpp" line="887"/>
<source>Input Password</source>
<translation></translation>
</message>
<message>
<location filename="../src/widgets/authdialog.cpp" line="865"/>
<location filename="../src/widgets/authdialog.cpp" line="892"/>
<source>Username</source>
<translation>:</translation>
</message>
<message>
<location filename="../src/widgets/authdialog.cpp" line="928"/>
<location filename="../src/widgets/authdialog.cpp" line="960"/>
<source>User name input error!</source>
<translation></translation>
</message>
<message>
<location filename="../src/widgets/authdialog.cpp" line="1005"/>
<location filename="../src/widgets/authdialog.cpp" line="1037"/>
<source>login</source>
<translation></translation>
</message>
<message>
<location filename="../src/widgets/authdialog.cpp" line="1382"/>
<location filename="../src/widgets/authdialog.cpp" line="1534"/>
<location filename="../src/widgets/authdialog.cpp" line="1675"/>
<location filename="../src/widgets/authdialog.cpp" line="1852"/>
<location filename="../src/widgets/authdialog.cpp" line="1420"/>
<location filename="../src/widgets/authdialog.cpp" line="1572"/>
<location filename="../src/widgets/authdialog.cpp" line="1713"/>
<location filename="../src/widgets/authdialog.cpp" line="1890"/>
<source>Failed to verify %1, please enter password to unlock</source>
<translation>%1</translation>
</message>
<message>
<location filename="../src/widgets/authdialog.cpp" line="1384"/>
<location filename="../src/widgets/authdialog.cpp" line="1536"/>
<location filename="../src/widgets/authdialog.cpp" line="1679"/>
<location filename="../src/widgets/authdialog.cpp" line="1681"/>
<location filename="../src/widgets/authdialog.cpp" line="1854"/>
<location filename="../src/widgets/authdialog.cpp" line="1422"/>
<location filename="../src/widgets/authdialog.cpp" line="1574"/>
<location filename="../src/widgets/authdialog.cpp" line="1717"/>
<location filename="../src/widgets/authdialog.cpp" line="1719"/>
<location filename="../src/widgets/authdialog.cpp" line="1892"/>
<source>Unable to verify %1, please enter password to unlock</source>
<translation>%1</translation>
</message>
<message>
<location filename="../src/widgets/authdialog.cpp" line="1709"/>
<location filename="../src/widgets/authdialog.cpp" line="1747"/>
<source>Abnormal network</source>
<translation></translation>
</message>
<message>
<location filename="../src/widgets/authdialog.cpp" line="1716"/>
<location filename="../src/widgets/authdialog.cpp" line="1754"/>
<source>Face recognition waiting time out, please click refresh or enter the password to unlock.</source>
<translation></translation>
</message>
<message>
<location filename="../src/widgets/authdialog.cpp" line="1982"/>
<location filename="../src/widgets/authdialog.cpp" line="2020"/>
<source>FingerPrint</source>
<translation></translation>
</message>
<message>
<location filename="../src/widgets/authdialog.cpp" line="1984"/>
<location filename="../src/widgets/authdialog.cpp" line="2022"/>
<source>FingerVein</source>
<translation></translation>
</message>
<message>
<location filename="../src/widgets/authdialog.cpp" line="1986"/>
<location filename="../src/widgets/authdialog.cpp" line="2024"/>
<source>Iris</source>
<translation></translation>
</message>
<message>
<location filename="../src/widgets/authdialog.cpp" line="1988"/>
<location filename="../src/widgets/authdialog.cpp" line="2026"/>
<source>Face</source>
<translation></translation>
</message>
<message>
<location filename="../src/widgets/authdialog.cpp" line="1990"/>
<location filename="../src/widgets/authdialog.cpp" line="2028"/>
<source>VoicePrint</source>
<translation></translation>
</message>
<message>
<location filename="../src/widgets/authdialog.cpp" line="1992"/>
<location filename="../src/widgets/authdialog.cpp" line="2030"/>
<source>Ukey</source>
<translation></translation>
</message>
<message>
<location filename="../src/widgets/authdialog.cpp" line="1994"/>
<location filename="../src/widgets/authdialog.cpp" line="2032"/>
<source>QRCode</source>
<translation></translation>
</message>
@ -180,8 +185,8 @@
<translation type="vanished">使</translation>
</message>
<message>
<location filename="../src/widgets/authdialog.cpp" line="703"/>
<location filename="../src/widgets/authdialog.cpp" line="704"/>
<location filename="../src/widgets/authdialog.cpp" line="730"/>
<location filename="../src/widgets/authdialog.cpp" line="731"/>
<source>Password cannot be empty</source>
<translation></translation>
</message>
@ -194,8 +199,8 @@
<translation type="vanished">%1.</translation>
</message>
<message>
<location filename="../src/widgets/authdialog.cpp" line="1694"/>
<location filename="../src/widgets/authdialog.cpp" line="1698"/>
<location filename="../src/widgets/authdialog.cpp" line="1732"/>
<location filename="../src/widgets/authdialog.cpp" line="1736"/>
<source>Failed to verify %1, you still have %2 verification opportunities</source>
<translation>%1%2</translation>
</message>
@ -224,13 +229,13 @@
<translation type="vanished"></translation>
</message>
<message>
<location filename="../src/widgets/authdialog.cpp" line="931"/>
<location filename="../src/widgets/authdialog.cpp" line="936"/>
<location filename="../src/widgets/authdialog.cpp" line="963"/>
<location filename="../src/widgets/authdialog.cpp" line="968"/>
<source>Authentication failure, Please try again</source>
<translation></translation>
</message>
<message>
<location filename="../src/widgets/authdialog.cpp" line="547"/>
<location filename="../src/widgets/authdialog.cpp" line="574"/>
<source>Use the bound wechat scanning code or enter the password to unlock</source>
<translation>使</translation>
</message>
@ -243,12 +248,13 @@
<translation type="vanished">USB端口</translation>
</message>
<message>
<location filename="../src/widgets/authdialog.cpp" line="857"/>
<location filename="../src/widgets/authdialog.cpp" line="884"/>
<source>Password </source>
<translation> </translation>
</message>
<message>
<location filename="../src/widgets/authdialog.cpp" line="1076"/>
<location filename="../src/widgets/authdialog.cpp" line="346"/>
<location filename="../src/widgets/authdialog.cpp" line="1108"/>
<source>Login</source>
<translation></translation>
</message>
@ -368,31 +374,35 @@
<name>BlockWidget</name>
<message>
<location filename="../src/widgets/blockwidget.cpp" line="40"/>
<location filename="../src/widgets/blockwidget.cpp" line="82"/>
<location filename="../src/widgets/blockwidget.cpp" line="135"/>
<source>Cancel</source>
<translation></translation>
</message>
<message>
<location filename="../src/widgets/blockwidget.cpp" line="44"/>
<location filename="../src/widgets/blockwidget.cpp" line="83"/>
<location filename="../src/widgets/blockwidget.cpp" line="136"/>
<source>Confrim</source>
<translation></translation>
</message>
<message>
<location filename="../src/widgets/blockwidget.cpp" line="89"/>
<location filename="../src/widgets/blockwidget.cpp" line="91"/>
<source>The following program is running to prevent the system from reboot!</source>
<translation></translation>
</message>
<message>
<location filename="../src/widgets/blockwidget.cpp" line="92"/>
<location filename="../src/widgets/blockwidget.cpp" line="94"/>
<source>The following program is running to prevent the system from shutting down!</source>
<translation></translation>
</message>
<message>
<location filename="../src/widgets/blockwidget.cpp" line="95"/>
<location filename="../src/widgets/blockwidget.cpp" line="97"/>
<source>The following program is running to prevent the system from suspend!</source>
<translation></translation>
</message>
<message>
<location filename="../src/widgets/blockwidget.cpp" line="98"/>
<location filename="../src/widgets/blockwidget.cpp" line="100"/>
<source>The following program is running to prevent the system from hibernate!</source>
<translation></translation>
</message>
@ -408,17 +418,18 @@
<context>
<name>CharsWidget</name>
<message>
<location filename="../src/VirtualKeyboard/src/charswidget.cpp" line="114"/>
<location filename="../src/VirtualKeyboard/src/charswidget.cpp" line="115"/>
<location filename="../src/VirtualKeyboard/src/charswidget.cpp" line="273"/>
<source>More</source>
<translation></translation>
</message>
<message>
<location filename="../src/VirtualKeyboard/src/charswidget.cpp" line="128"/>
<location filename="../src/VirtualKeyboard/src/charswidget.cpp" line="129"/>
<source>ABC</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/VirtualKeyboard/src/charswidget.cpp" line="141"/>
<location filename="../src/VirtualKeyboard/src/charswidget.cpp" line="142"/>
<source>123</source>
<translation type="unfinished"></translation>
</message>
@ -1867,19 +1878,19 @@
<context>
<name>LightDMHelper</name>
<message>
<location filename="../src/lock-backend/lightdmhelper.cpp" line="99"/>
<location filename="../src/lock-backend/lightdmhelper.cpp" line="105"/>
<source>failed to start session.</source>
<translation type="unfinished"></translation>
<translation></translation>
</message>
<message>
<location filename="../src/lock-backend/lightdmhelper.cpp" line="234"/>
<location filename="../src/lock-backend/lightdmhelper.cpp" line="204"/>
<source>Login</source>
<translation type="unfinished"></translation>
<translation></translation>
</message>
<message>
<location filename="../src/lock-backend/lightdmhelper.cpp" line="242"/>
<location filename="../src/lock-backend/lightdmhelper.cpp" line="213"/>
<source>Guest</source>
<translation type="unfinished"></translation>
<translation></translation>
</message>
</context>
<context>
@ -1910,7 +1921,7 @@
</message>
<message>
<source>Multiple users are logged in at the same time.Are you sure you want to reboot this system?</source>
<translation>退</translation>
<translation type="vanished">退</translation>
</message>
<message>
<source>LAN</source>
@ -1921,9 +1932,9 @@
<translation type="vanished">线</translation>
</message>
<message>
<location filename="../src/widgets/lockwidget.cpp" line="931"/>
<location filename="../src/widgets/lockwidget.cpp" line="944"/>
<source>Multiple users are logged in at the same time.Are you sure you want to %1 this system?</source>
<translation type="unfinished"></translation>
<translation>%1?</translation>
</message>
</context>
<context>
@ -1947,37 +1958,37 @@
<message>
<location filename="../src/widgets/loginoptionswidget.cpp" line="1023"/>
<source>FingerPrint</source>
<translation type="unfinished"></translation>
<translation></translation>
</message>
<message>
<location filename="../src/widgets/loginoptionswidget.cpp" line="1025"/>
<source>FingerVein</source>
<translation type="unfinished"></translation>
<translation></translation>
</message>
<message>
<location filename="../src/widgets/loginoptionswidget.cpp" line="1027"/>
<source>Iris</source>
<translation type="unfinished"></translation>
<translation></translation>
</message>
<message>
<location filename="../src/widgets/loginoptionswidget.cpp" line="1029"/>
<source>Face</source>
<translation type="unfinished"></translation>
<translation></translation>
</message>
<message>
<location filename="../src/widgets/loginoptionswidget.cpp" line="1031"/>
<source>VoicePrint</source>
<translation type="unfinished"></translation>
<translation></translation>
</message>
<message>
<location filename="../src/widgets/loginoptionswidget.cpp" line="1033"/>
<source>Ukey</source>
<translation type="unfinished"></translation>
<translation></translation>
</message>
<message>
<location filename="../src/widgets/loginoptionswidget.cpp" line="1035"/>
<source>QRCode</source>
<translation type="unfinished"></translation>
<translation></translation>
</message>
<message>
<source>Wechat</source>
@ -1999,25 +2010,26 @@
<context>
<name>MyNetworkWidget</name>
<message>
<location filename="../src/widgets/mynetworkwidget.cpp" line="36"/>
<location filename="../src/widgets/mynetworkwidget.cpp" line="35"/>
<source>LAN</source>
<translation type="unfinished">线</translation>
<translation>线</translation>
</message>
<message>
<location filename="../src/widgets/mynetworkwidget.cpp" line="38"/>
<location filename="../src/widgets/mynetworkwidget.cpp" line="37"/>
<source>WLAN</source>
<translation type="unfinished">线</translation>
<translation>线</translation>
</message>
</context>
<context>
<name>NumbersWidget</name>
<message>
<location filename="../src/VirtualKeyboard/src/numberswidget.cpp" line="160"/>
<location filename="../src/VirtualKeyboard/src/numberswidget.cpp" line="161"/>
<source>&amp;&amp;?!</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/VirtualKeyboard/src/numberswidget.cpp" line="174"/>
<location filename="../src/VirtualKeyboard/src/numberswidget.cpp" line="175"/>
<location filename="../src/VirtualKeyboard/src/numberswidget.cpp" line="310"/>
<source>Return</source>
<translation></translation>
</message>
@ -2176,7 +2188,7 @@
<message>
<location filename="../src/widgets/powerlistwidget.h" line="64"/>
<source>Hibernate</source>
<translation type="unfinished"></translation>
<translation></translation>
</message>
<message>
<location filename="../src/widgets/powerlistwidget.h" line="65"/>
@ -2186,7 +2198,7 @@
<message>
<location filename="../src/widgets/powerlistwidget.h" line="78"/>
<source>Suspend</source>
<translation type="unfinished"></translation>
<translation></translation>
</message>
<message>
<location filename="../src/widgets/powerlistwidget.h" line="79"/>
@ -2197,12 +2209,12 @@
<message>
<location filename="../src/widgets/powerlistwidget.h" line="92"/>
<source>Restart</source>
<translation type="unfinished"></translation>
<translation></translation>
</message>
<message>
<location filename="../src/widgets/powerlistwidget.h" line="106"/>
<source>Power Off</source>
<translation type="unfinished"></translation>
<translation></translation>
</message>
<message>
<location filename="../src/widgets/powerlistwidget.h" line="107"/>
@ -2315,7 +2327,7 @@
<message>
<location filename="../src/common/biodefines.cpp" line="35"/>
<source>Face</source>
<translation type="unfinished"></translation>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/common/biodefines.cpp" line="37"/>
@ -2483,6 +2495,21 @@
<translation type="vanished"></translation>
</message>
</context>
<context>
<name>UserListWidget</name>
<message>
<location filename="../src/widgets/userlistwidget.cpp" line="46"/>
<location filename="../src/widgets/userlistwidget.cpp" line="99"/>
<source>Login</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/widgets/userlistwidget.cpp" line="48"/>
<location filename="../src/widgets/userlistwidget.cpp" line="101"/>
<source>Guest</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>Utils</name>
<message>
@ -2557,7 +2584,7 @@
<message>
<location filename="../src/lock-dialog/lockdialogmodel.cpp" line="59"/>
<source>how long to show lock</source>
<translation type="unfinished"></translation>
<translation type="unfinished"></translation>
</message>
</context>
<context>
@ -2565,7 +2592,7 @@
<message>
<location filename="../src/lock-dialog/lockdialogmodel.cpp" line="62"/>
<source>if show lock</source>
<translation type="unfinished"></translation>
<translation type="unfinished"></translation>
</message>
</context>
<context>
@ -2654,12 +2681,12 @@
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/lock-backend/main.cpp" line="48"/>
<location filename="../src/lock-backend/main.cpp" line="49"/>
<source>Backend for the ukui ScreenSaver.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/lock-backend/main.cpp" line="54"/>
<location filename="../src/lock-backend/main.cpp" line="55"/>
<source>lock the screen by startup</source>
<translation type="unfinished"></translation>
</message>

View File

@ -24,7 +24,7 @@
<translation type="obsolete">使</translation>
</message>
<message>
<location filename="../src/widgets/authdialog.cpp" line="1085"/>
<location filename="../src/widgets/authdialog.cpp" line="1117"/>
<source>Retry</source>
<translation></translation>
</message>
@ -53,125 +53,130 @@
<translation type="vanished">%1%2</translation>
</message>
<message>
<location filename="../src/widgets/authdialog.cpp" line="1148"/>
<location filename="../src/widgets/authdialog.cpp" line="1186"/>
<source>Please try again in %1 minutes.</source>
<translation> %1 </translation>
</message>
<message>
<location filename="../src/widgets/authdialog.cpp" line="1155"/>
<location filename="../src/widgets/authdialog.cpp" line="1193"/>
<source>Please try again in %1 seconds.</source>
<translation> %1 </translation>
</message>
<message>
<location filename="../src/widgets/authdialog.cpp" line="1162"/>
<location filename="../src/widgets/authdialog.cpp" line="1200"/>
<source>Account locked permanently.</source>
<translation></translation>
</message>
<message>
<location filename="../src/widgets/authdialog.cpp" line="522"/>
<location filename="../src/widgets/authdialog.cpp" line="565"/>
<location filename="../src/widgets/authdialog.cpp" line="549"/>
<location filename="../src/widgets/authdialog.cpp" line="592"/>
<source>Verify face recognition or enter password to unlock</source>
<translation></translation>
</message>
<message>
<location filename="../src/widgets/authdialog.cpp" line="527"/>
<location filename="../src/widgets/authdialog.cpp" line="348"/>
<source>Guest</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/widgets/authdialog.cpp" line="554"/>
<source>Press fingerprint or enter password to unlock</source>
<translation></translation>
</message>
<message>
<location filename="../src/widgets/authdialog.cpp" line="532"/>
<location filename="../src/widgets/authdialog.cpp" line="559"/>
<source>Verify voiceprint or enter password to unlock</source>
<translation></translation>
</message>
<message>
<location filename="../src/widgets/authdialog.cpp" line="537"/>
<location filename="../src/widgets/authdialog.cpp" line="564"/>
<source>Verify finger vein or enter password to unlock</source>
<translation></translation>
</message>
<message>
<location filename="../src/widgets/authdialog.cpp" line="542"/>
<location filename="../src/widgets/authdialog.cpp" line="569"/>
<source>Verify iris or enter password to unlock</source>
<translation></translation>
</message>
<message>
<location filename="../src/widgets/authdialog.cpp" line="860"/>
<location filename="../src/widgets/authdialog.cpp" line="887"/>
<source>Input Password</source>
<translation></translation>
</message>
<message>
<location filename="../src/widgets/authdialog.cpp" line="865"/>
<location filename="../src/widgets/authdialog.cpp" line="892"/>
<source>Username</source>
<translation type="unfinished">使</translation>
</message>
<message>
<location filename="../src/widgets/authdialog.cpp" line="928"/>
<location filename="../src/widgets/authdialog.cpp" line="960"/>
<source>User name input error!</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/widgets/authdialog.cpp" line="1005"/>
<location filename="../src/widgets/authdialog.cpp" line="1037"/>
<source>login</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/widgets/authdialog.cpp" line="1382"/>
<location filename="../src/widgets/authdialog.cpp" line="1534"/>
<location filename="../src/widgets/authdialog.cpp" line="1675"/>
<location filename="../src/widgets/authdialog.cpp" line="1852"/>
<location filename="../src/widgets/authdialog.cpp" line="1420"/>
<location filename="../src/widgets/authdialog.cpp" line="1572"/>
<location filename="../src/widgets/authdialog.cpp" line="1713"/>
<location filename="../src/widgets/authdialog.cpp" line="1890"/>
<source>Failed to verify %1, please enter password to unlock</source>
<translation> %1 </translation>
</message>
<message>
<location filename="../src/widgets/authdialog.cpp" line="1384"/>
<location filename="../src/widgets/authdialog.cpp" line="1536"/>
<location filename="../src/widgets/authdialog.cpp" line="1679"/>
<location filename="../src/widgets/authdialog.cpp" line="1681"/>
<location filename="../src/widgets/authdialog.cpp" line="1854"/>
<location filename="../src/widgets/authdialog.cpp" line="1422"/>
<location filename="../src/widgets/authdialog.cpp" line="1574"/>
<location filename="../src/widgets/authdialog.cpp" line="1717"/>
<location filename="../src/widgets/authdialog.cpp" line="1719"/>
<location filename="../src/widgets/authdialog.cpp" line="1892"/>
<source>Unable to verify %1, please enter password to unlock</source>
<translation> %1</translation>
</message>
<message>
<location filename="../src/widgets/authdialog.cpp" line="1709"/>
<location filename="../src/widgets/authdialog.cpp" line="1747"/>
<source>Abnormal network</source>
<translation></translation>
</message>
<message>
<location filename="../src/widgets/authdialog.cpp" line="1716"/>
<location filename="../src/widgets/authdialog.cpp" line="1754"/>
<source>Face recognition waiting time out, please click refresh or enter the password to unlock.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/widgets/authdialog.cpp" line="1982"/>
<location filename="../src/widgets/authdialog.cpp" line="2020"/>
<source>FingerPrint</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/widgets/authdialog.cpp" line="1984"/>
<location filename="../src/widgets/authdialog.cpp" line="2022"/>
<source>FingerVein</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/widgets/authdialog.cpp" line="1986"/>
<location filename="../src/widgets/authdialog.cpp" line="2024"/>
<source>Iris</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/widgets/authdialog.cpp" line="1988"/>
<location filename="../src/widgets/authdialog.cpp" line="2026"/>
<source>Face</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/widgets/authdialog.cpp" line="1990"/>
<location filename="../src/widgets/authdialog.cpp" line="2028"/>
<source>VoicePrint</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/widgets/authdialog.cpp" line="1992"/>
<location filename="../src/widgets/authdialog.cpp" line="2030"/>
<source>Ukey</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/widgets/authdialog.cpp" line="1994"/>
<location filename="../src/widgets/authdialog.cpp" line="2032"/>
<source>QRCode</source>
<translation type="unfinished"></translation>
</message>
@ -180,8 +185,8 @@
<translation type="vanished">使</translation>
</message>
<message>
<location filename="../src/widgets/authdialog.cpp" line="703"/>
<location filename="../src/widgets/authdialog.cpp" line="704"/>
<location filename="../src/widgets/authdialog.cpp" line="730"/>
<location filename="../src/widgets/authdialog.cpp" line="731"/>
<source>Password cannot be empty</source>
<translation></translation>
</message>
@ -194,8 +199,8 @@
<translation type="vanished">%1.</translation>
</message>
<message>
<location filename="../src/widgets/authdialog.cpp" line="1694"/>
<location filename="../src/widgets/authdialog.cpp" line="1698"/>
<location filename="../src/widgets/authdialog.cpp" line="1732"/>
<location filename="../src/widgets/authdialog.cpp" line="1736"/>
<source>Failed to verify %1, you still have %2 verification opportunities</source>
<translation> %1 %2 </translation>
</message>
@ -224,13 +229,13 @@
<translation type="vanished"></translation>
</message>
<message>
<location filename="../src/widgets/authdialog.cpp" line="931"/>
<location filename="../src/widgets/authdialog.cpp" line="936"/>
<location filename="../src/widgets/authdialog.cpp" line="963"/>
<location filename="../src/widgets/authdialog.cpp" line="968"/>
<source>Authentication failure, Please try again</source>
<translation></translation>
</message>
<message>
<location filename="../src/widgets/authdialog.cpp" line="547"/>
<location filename="../src/widgets/authdialog.cpp" line="574"/>
<source>Use the bound wechat scanning code or enter the password to unlock</source>
<translation>使</translation>
</message>
@ -243,12 +248,13 @@
<translation type="vanished"> Ukey USB </translation>
</message>
<message>
<location filename="../src/widgets/authdialog.cpp" line="857"/>
<location filename="../src/widgets/authdialog.cpp" line="884"/>
<source>Password </source>
<translation> </translation>
</message>
<message>
<location filename="../src/widgets/authdialog.cpp" line="1076"/>
<location filename="../src/widgets/authdialog.cpp" line="346"/>
<location filename="../src/widgets/authdialog.cpp" line="1108"/>
<source>Login</source>
<translation></translation>
</message>
@ -368,31 +374,35 @@
<name>BlockWidget</name>
<message>
<location filename="../src/widgets/blockwidget.cpp" line="40"/>
<location filename="../src/widgets/blockwidget.cpp" line="82"/>
<location filename="../src/widgets/blockwidget.cpp" line="135"/>
<source>Cancel</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/widgets/blockwidget.cpp" line="44"/>
<location filename="../src/widgets/blockwidget.cpp" line="83"/>
<location filename="../src/widgets/blockwidget.cpp" line="136"/>
<source>Confrim</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/widgets/blockwidget.cpp" line="89"/>
<location filename="../src/widgets/blockwidget.cpp" line="91"/>
<source>The following program is running to prevent the system from reboot!</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/widgets/blockwidget.cpp" line="92"/>
<location filename="../src/widgets/blockwidget.cpp" line="94"/>
<source>The following program is running to prevent the system from shutting down!</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/widgets/blockwidget.cpp" line="95"/>
<location filename="../src/widgets/blockwidget.cpp" line="97"/>
<source>The following program is running to prevent the system from suspend!</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/widgets/blockwidget.cpp" line="98"/>
<location filename="../src/widgets/blockwidget.cpp" line="100"/>
<source>The following program is running to prevent the system from hibernate!</source>
<translation type="unfinished"></translation>
</message>
@ -408,17 +418,18 @@
<context>
<name>CharsWidget</name>
<message>
<location filename="../src/VirtualKeyboard/src/charswidget.cpp" line="114"/>
<location filename="../src/VirtualKeyboard/src/charswidget.cpp" line="115"/>
<location filename="../src/VirtualKeyboard/src/charswidget.cpp" line="273"/>
<source>More</source>
<translation></translation>
</message>
<message>
<location filename="../src/VirtualKeyboard/src/charswidget.cpp" line="128"/>
<location filename="../src/VirtualKeyboard/src/charswidget.cpp" line="129"/>
<source>ABC</source>
<translation></translation>
</message>
<message>
<location filename="../src/VirtualKeyboard/src/charswidget.cpp" line="141"/>
<location filename="../src/VirtualKeyboard/src/charswidget.cpp" line="142"/>
<source>123</source>
<translation>123</translation>
</message>
@ -1883,17 +1894,17 @@
<context>
<name>LightDMHelper</name>
<message>
<location filename="../src/lock-backend/lightdmhelper.cpp" line="99"/>
<location filename="../src/lock-backend/lightdmhelper.cpp" line="105"/>
<source>failed to start session.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/lock-backend/lightdmhelper.cpp" line="234"/>
<location filename="../src/lock-backend/lightdmhelper.cpp" line="204"/>
<source>Login</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/lock-backend/lightdmhelper.cpp" line="242"/>
<location filename="../src/lock-backend/lightdmhelper.cpp" line="213"/>
<source>Guest</source>
<translation type="unfinished"></translation>
</message>
@ -1937,7 +1948,7 @@
<translation type="vanished"></translation>
</message>
<message>
<location filename="../src/widgets/lockwidget.cpp" line="923"/>
<location filename="../src/widgets/lockwidget.cpp" line="944"/>
<source>Multiple users are logged in at the same time.Are you sure you want to %1 this system?</source>
<translation type="unfinished"></translation>
</message>
@ -2015,12 +2026,12 @@
<context>
<name>MyNetworkWidget</name>
<message>
<location filename="../src/widgets/mynetworkwidget.cpp" line="36"/>
<location filename="../src/widgets/mynetworkwidget.cpp" line="35"/>
<source>LAN</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/widgets/mynetworkwidget.cpp" line="38"/>
<location filename="../src/widgets/mynetworkwidget.cpp" line="37"/>
<source>WLAN</source>
<translation type="unfinished"></translation>
</message>
@ -2028,12 +2039,13 @@
<context>
<name>NumbersWidget</name>
<message>
<location filename="../src/VirtualKeyboard/src/numberswidget.cpp" line="160"/>
<location filename="../src/VirtualKeyboard/src/numberswidget.cpp" line="161"/>
<source>&amp;&amp;?!</source>
<translation>&amp;&amp;?!</translation>
</message>
<message>
<location filename="../src/VirtualKeyboard/src/numberswidget.cpp" line="174"/>
<location filename="../src/VirtualKeyboard/src/numberswidget.cpp" line="175"/>
<location filename="../src/VirtualKeyboard/src/numberswidget.cpp" line="310"/>
<source>Return</source>
<translation></translation>
</message>
@ -2507,6 +2519,21 @@
<translation type="vanished"></translation>
</message>
</context>
<context>
<name>UserListWidget</name>
<message>
<location filename="../src/widgets/userlistwidget.cpp" line="46"/>
<location filename="../src/widgets/userlistwidget.cpp" line="99"/>
<source>Login</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/widgets/userlistwidget.cpp" line="48"/>
<location filename="../src/widgets/userlistwidget.cpp" line="101"/>
<source>Guest</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>Utils</name>
<message>
@ -2678,12 +2705,12 @@
<translation></translation>
</message>
<message>
<location filename="../src/lock-backend/main.cpp" line="48"/>
<location filename="../src/lock-backend/main.cpp" line="49"/>
<source>Backend for the ukui ScreenSaver.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/lock-backend/main.cpp" line="54"/>
<location filename="../src/lock-backend/main.cpp" line="55"/>
<source>lock the screen by startup</source>
<translation type="unfinished"></translation>
</message>

View File

@ -153,7 +153,7 @@ set(backend_SRC
dbusifs/upowerhelper.cpp
dbusifs/enginedevice.cpp
dbusifs/device.cpp
dbusifs/accountservicehelper.cpp
dbusifs/accountshelper.cpp
dbusifs/sessionhelper.cpp
dbusifs/uniauthservice.cpp
dbusifs/biometrichelper.cpp

View File

@ -18,6 +18,7 @@
#include "charswidget.h"
#include "commondef.h"
#include <QEvent>
#include <QDebug>
CharsWidget::CharsWidget(QWidget *parent/* = nullptr*/)
@ -253,3 +254,25 @@ void CharsWidget::onBtnClicked(QChar charId)
Q_EMIT specialBtnClicked(keyName);
}
}
void CharsWidget::changeEvent(QEvent *event)
{
if(event->type() == QEvent::LanguageChange){
refreshTranslate();
}
}
void CharsWidget::refreshTranslate()
{
QMap<KBButton*, QRect>::iterator itGeometry = m_mapBtnGeometrys.begin();
for (; itGeometry != m_mapBtnGeometrys.end(); itGeometry ++) {
KBButton *button = itGeometry.key();
if (button) {
if (button->objectName() == "btn_more") {
button->setText(tr("More"));
}
}
}
}

View File

@ -39,8 +39,12 @@ Q_SIGNALS:
void specialBtnClicked(QString keyName);
void normalBtnClicked(QChar c);
protected:
void changeEvent(QEvent *event);
private:
void initUI();
void refreshTranslate();
private:
QMap<KBButton*, QRect> m_mapBtnGeometrys;

View File

@ -24,6 +24,7 @@
#include <QScrollBar>
#include <QVBoxLayout>
#include <QVariant>
#include <QEvent>
#include <QDebug>
NumbersWidget::NumbersWidget(QWidget *parent)
@ -291,3 +292,23 @@ void NumbersWidget::onBtnClicked(QChar charId)
Q_EMIT specialBtnClicked(keyName);
}
}
void NumbersWidget::changeEvent(QEvent *event)
{
if(event->type() == QEvent::LanguageChange){
refreshTranslate();
}
}
void NumbersWidget::refreshTranslate()
{
QMap<QWidget*, QRect>::iterator itGeometry = m_mapBtnGeometrys.begin();
for (; itGeometry != m_mapBtnGeometrys.end(); itGeometry ++) {
KBButton *button = qobject_cast<KBButton *>(itGeometry.key());
if (button) {
if (button->objectName() == "btn_return") {
button->setText(tr("Return"));
}
}
}
}

View File

@ -42,8 +42,12 @@ Q_SIGNALS:
void specialBtnClicked(QString keyName);
void narmalBtnClicked(QChar charId);
protected:
void changeEvent(QEvent *event);
private:
void initUI();
void refreshTranslate();
private:
QMap<QWidget*, QRect> m_mapBtnGeometrys;

View File

@ -41,7 +41,7 @@ VirtualKeyboardWidget::VirtualKeyboardWidget(QWidget *parent)
, m_isVertical(false)
{
Q_INIT_RESOURCE(keyboard);
setAttribute(Qt::WA_TranslucentBackground);//背景透明
//setAttribute(Qt::WA_TranslucentBackground);//背景透明
//setAutoFillBackground(true);
setWindowFlags(Qt::FramelessWindowHint |
Qt::WindowStaysOnTopHint |

View File

@ -21,7 +21,6 @@
#include <QObject>
#include <QSettings>
#include <QTranslator>
#include <QPixmap>
#include <QGSettings>

View File

@ -203,6 +203,7 @@ enum SessionStatus
#define DM_DBUS_PATH "/org/freedesktop/DisplayManager"
#define DM_DBUS_INTERFACE "org.freedesktop.DisplayManager"
#define DM_SEAT_INTERFACE "org.freedesktop.DisplayManager.Seat"
#define DM_SESSION_INTERFACE "org.freedesktop.DisplayManager.Session"
#define SSWND_DBUS_SERVICE "org.ukui.ScreenSaverWnd"
#define SSWND_DBUS_PATH "/"
@ -310,5 +311,13 @@ typedef enum {
#define FD_DBUS_SERVICE "org.freedesktop.DBus"
#define FD_DBUS_PATH "/org/freedesktop/DBus"
#define FD_DBUS_INTERFACE "org.freedesktop.DBus"
#define FD_PROPERTIES_INTERFACE "org.freedesktop.DBus.Properties"
#define ACCOUNTS_DBUS_SERVICE "org.freedesktop.Accounts"
#define ACCOUNTS_DBUS_PATH "/org/freedesktop/Accounts"
#define ACCOUNTS_DBUS_INTERFACE "org.freedesktop.Accounts"
#define ACCOUNTS_USER_DBUS_INTERFACE "org.freedesktop.Accounts.User"
#define ACCOUNTS_USER_LDM_SERVICE_INTERFACE "org.freedesktop.DisplayManager.AccountsService"
#endif // DEFINETYPES_H

View File

@ -15,34 +15,27 @@
* along with this program; if not, see <http://www.gnu.org/licenses/>.
*
**/
#include "accountservicehelper.h"
#include "accountshelper.h"
#include "definetypes.h"
#include <QDBusConnection>
#include <QDBusInterface>
#include <QDBusConnectionInterface>
#include <QDebug>
#include "userinfo.h"
const static QString accountsService = QStringLiteral("org.freedesktop.Accounts");
const static QString accountsPath = QStringLiteral("/org/freedesktop/Accounts");
const static QString accountsInterface = QStringLiteral("org.freedesktop.Accounts");
const static QString propertiesInterface = QStringLiteral("org.freedesktop.DBus.Properties");
const static QString accountsUserInterface = QStringLiteral("org.freedesktop.Accounts.User");
AccountServiceHelper::AccountServiceHelper(QObject *parent)
AccountsHelper::AccountsHelper(QObject *parent)
: QObject(parent)
{
m_accountsInterface = new QDBusInterface(accountsService,
accountsPath,
accountsInterface,
QDBusConnection::systemBus(),
this);
initData();
initConnections();
}
AccountServiceHelper::~AccountServiceHelper()
AccountsHelper::~AccountsHelper()
{
}
QString AccountServiceHelper::getUserLanguageByName(QString strUserName)
QString AccountsHelper::getUserLanguageByName(QString strUserName)
{
QString strLanguage = "";
if(!m_accountsInterface)
@ -51,9 +44,9 @@ QString AccountServiceHelper::getUserLanguageByName(QString strUserName)
if(!userPath.isValid())
qWarning() << "Get UserPath error:" << userPath.error();
else {
QDBusInterface userIface(accountsService, userPath.value().path(),
propertiesInterface, QDBusConnection::systemBus());
QDBusReply<QDBusVariant> languageReply = userIface.call("Get", accountsUserInterface, "Language");
QDBusInterface userIface(ACCOUNTS_DBUS_SERVICE, userPath.value().path(),
FD_PROPERTIES_INTERFACE, QDBusConnection::systemBus());
QDBusReply<QDBusVariant> languageReply = userIface.call("Get", ACCOUNTS_USER_DBUS_INTERFACE, "Language");
if(!languageReply.isValid())
qWarning() << "Get User's language error" << languageReply.error();
else {
@ -63,7 +56,7 @@ QString AccountServiceHelper::getUserLanguageByName(QString strUserName)
return strLanguage;
}
QString AccountServiceHelper::getUserBackgroundByName(QString strUserName)
QString AccountsHelper::getUserBackgroundByName(QString strUserName)
{
QString strBackground = "";
if(!m_accountsInterface)
@ -72,9 +65,9 @@ QString AccountServiceHelper::getUserBackgroundByName(QString strUserName)
if(!userPath.isValid())
qWarning() << "Get UserPath error:" << userPath.error();
else {
QDBusInterface userIface(accountsService, userPath.value().path(),
propertiesInterface, QDBusConnection::systemBus());
QDBusReply<QDBusVariant> backgroundReply = userIface.call("Get", accountsUserInterface, "BackgroundFile");
QDBusInterface userIface(ACCOUNTS_DBUS_SERVICE, userPath.value().path(),
FD_PROPERTIES_INTERFACE, QDBusConnection::systemBus());
QDBusReply<QDBusVariant> backgroundReply = userIface.call("Get", ACCOUNTS_USER_DBUS_INTERFACE, "BackgroundFile");
if(!backgroundReply.isValid())
qWarning() << "Get User's background error" << backgroundReply.error();
else {
@ -84,7 +77,7 @@ QString AccountServiceHelper::getUserBackgroundByName(QString strUserName)
return strBackground;
}
QString AccountServiceHelper::getUserSessionByName(QString strUserName)
QString AccountsHelper::getUserSessionByName(QString strUserName)
{
QString strSession = "";
if(!m_accountsInterface)
@ -93,9 +86,9 @@ QString AccountServiceHelper::getUserSessionByName(QString strUserName)
if(!userPath.isValid())
qWarning() << "Get UserPath error:" << userPath.error();
else {
QDBusInterface userIface(accountsService, userPath.value().path(),
propertiesInterface, QDBusConnection::systemBus());
QDBusReply<QDBusVariant> sessionReply = userIface.call("Get", accountsUserInterface, "XSession");
QDBusInterface userIface(ACCOUNTS_DBUS_SERVICE, userPath.value().path(),
FD_PROPERTIES_INTERFACE, QDBusConnection::systemBus());
QDBusReply<QDBusVariant> sessionReply = userIface.call("Get", ACCOUNTS_USER_DBUS_INTERFACE, "XSession");
if(!sessionReply.isValid())
qWarning() << "Get User's xsession error" << sessionReply.error();
else {
@ -105,7 +98,7 @@ QString AccountServiceHelper::getUserSessionByName(QString strUserName)
return strSession;
}
QString AccountServiceHelper::getAccountBackground(uid_t uid)
QString AccountsHelper::getAccountBackground(uid_t uid)
{
QString strBackground = "";
if(!m_accountsInterface)
@ -114,9 +107,9 @@ QString AccountServiceHelper::getAccountBackground(uid_t uid)
if(!userPath.isValid())
qWarning() << "Get UserPath error:" << userPath.error();
else {
QDBusInterface userIface(accountsService, userPath.value().path(),
propertiesInterface, QDBusConnection::systemBus());
QDBusReply<QDBusVariant> backgroundReply = userIface.call("Get", accountsUserInterface, "BackgroundFile");
QDBusInterface userIface(ACCOUNTS_DBUS_SERVICE, userPath.value().path(),
FD_PROPERTIES_INTERFACE, QDBusConnection::systemBus());
QDBusReply<QDBusVariant> backgroundReply = userIface.call("Get", ACCOUNTS_USER_DBUS_INTERFACE, "BackgroundFile");
if(!backgroundReply.isValid())
qWarning() << "Get User's BackgroundFile error" << backgroundReply.error();
else {
@ -125,3 +118,39 @@ QString AccountServiceHelper::getAccountBackground(uid_t uid)
}
return strBackground;
}
void AccountsHelper::initData()
{
if (!m_accountsInterface) {
m_accountsInterface = new QDBusInterface(ACCOUNTS_DBUS_SERVICE,
ACCOUNTS_DBUS_PATH,
ACCOUNTS_DBUS_INTERFACE,
QDBusConnection::systemBus(),
this);
}
}
void AccountsHelper::initConnections()
{
connect(m_accountsInterface, SIGNAL(UserAdded(QDBusObjectPath)), this, SIGNAL(UserAdded(QDBusObjectPath)));
connect(m_accountsInterface, SIGNAL(UserDeleted(QDBusObjectPath)), this, SIGNAL(UserRemoved(QDBusObjectPath)));
}
QStringList AccountsHelper::getUserList()
{
QStringList listUsers;
if (!m_accountsInterface)
return listUsers;
QDBusMessage ret = m_accountsInterface->call("ListCachedUsers");
QList<QVariant> outArgs = ret.arguments();
QVariant first = outArgs.at(0);
const QDBusArgument &dbusArgs = first.value<QDBusArgument>();
QDBusObjectPath path;
dbusArgs.beginArray();
while (!dbusArgs.atEnd()) {
dbusArgs >> path;
listUsers << path.path();
}
dbusArgs.endArray();
return listUsers;
}

View File

@ -20,14 +20,16 @@
#include <QObject>
#include <QDBusInterface>
#include <QMap>
#include <QDBusObjectPath>
class AccountServiceHelper : public QObject
class AccountsHelper : public QObject
{
Q_OBJECT
public:
explicit AccountServiceHelper(QObject *parent = nullptr);
explicit AccountsHelper(QObject *parent = nullptr);
virtual ~AccountServiceHelper();
virtual ~AccountsHelper();
QString getUserLanguageByName(QString strUserName);
@ -37,6 +39,16 @@ public:
QString getAccountBackground(uid_t uid);
QStringList getUserList();
Q_SIGNALS:
void UserAdded(const QDBusObjectPath &path);
void UserRemoved(const QDBusObjectPath &path);
private:
void initData();
void initConnections();
private:
QDBusInterface *m_accountsInterface = nullptr;
};

View File

@ -33,7 +33,7 @@
#include "switchuserutils.h"
#include "pamauthenticate.h"
#include "upowerhelper.h"
#include "accountservicehelper.h"
#include "accountshelper.h"
#include "sessionhelper.h"
#include "sessionwatcher.h"
#include "freedesktophelper.h"
@ -56,7 +56,7 @@ void DbusUpperInterface::initData()
{
m_bLockState = false;
m_bSlpState = false;
m_accountsHelper = new AccountServiceHelper(this);
m_accountsHelper = new AccountsHelper(this);
m_lightDmHelper = new LightDMHelper(m_accountsHelper, this);
m_login1Helper = new Login1Helper(this);
m_config = new Configuration(this);

View File

@ -37,7 +37,7 @@ class QJsonObject;
class PamAuthenticate;
class UsdHelper;
class UpowerHelper;
class AccountServiceHelper;
class AccountsHelper;
class SessionHelper;
class SessionWatcher;
class BioAuthenticate;
@ -381,7 +381,7 @@ private:
PamAuthenticate *m_pamAuth = nullptr;
UsdHelper *m_usdHelper = nullptr;
UpowerHelper *m_upowerHelper = nullptr;
AccountServiceHelper *m_accountsHelper = nullptr;
AccountsHelper *m_accountsHelper = nullptr;
bool lockState = false;
SessionHelper *m_sessionHelper = nullptr;
SessionWatcher *m_sessionWatcher = nullptr;

View File

@ -22,14 +22,21 @@
#include "securityuser.h"
#include <pwd.h>
#include "proxymodel.h"
#include "accountservicehelper.h"
#include "accountshelper.h"
#include "definetypes.h"
#include <QDBusArgument>
#include <QDBusMessage>
#include <QVariantMap>
LightDMHelper::LightDMHelper(AccountServiceHelper *accountHelper, QObject *parent)
LightDMHelper::LightDMHelper(AccountsHelper *accountHelper, QObject *parent)
: QLightDM::Greeter(parent)
, m_sessionsModel(nullptr)
, m_secUser(SecurityUser::instance())
, m_strCurUserName("")
, m_accountServiceHelper(accountHelper)
, m_ldmSessions(new QMap<QString, std::shared_ptr<LightDMSessionInfo>>())
, m_mapUsers(new QMap<QString, UserInfoPtr>())
, m_dbusIfsLDM(nullptr)
{
//连接到lightdm
if(!connectToDaemonSync()){
@ -46,11 +53,10 @@ void LightDMHelper::initData()
updateSessionsInfo();
setSession(defaultSessionHint());
// 获取用户信息
initLDMSessionsInfo();
m_isShowManualLogin = showManualLoginHint();
if(!hideUsersHint()){
m_modelUsers = new UsersModel(this);
m_modelUsers->setSourceModel(new QLightDM::UsersModel(this));
connect(m_modelUsers, &UsersModel::userInfoChanged, this, &LightDMHelper::onUsersChanged);
initAccountsUsersInfo();
if(hasValidUsers() == 0) {
m_isShowManualLogin = true;
}
@ -127,7 +133,7 @@ bool LightDMHelper::setCurrentUser(QString strUserName)
UserInfoPtr LightDMHelper::findUserByUid(uid_t id)
{
for (auto userInfoPtr : m_listUsers) {
for (auto userInfoPtr : m_mapUsers->values()) {
if (userInfoPtr->uid() == id) {
return userInfoPtr;
}
@ -137,7 +143,7 @@ UserInfoPtr LightDMHelper::findUserByUid(uid_t id)
UserInfoPtr LightDMHelper::findUserByName(QString strName)
{
for (auto userInfoPtr : m_listUsers) {
for (auto userInfoPtr : m_mapUsers->values()) {
if (userInfoPtr->name() == strName) {
return userInfoPtr;
}
@ -147,7 +153,7 @@ UserInfoPtr LightDMHelper::findUserByName(QString strName)
bool LightDMHelper::hasSameUser(const UserInfoPtr userInfoPtr)
{
for (auto user : m_listUsers) {
for (auto user : m_mapUsers->values()) {
if (user->uid() == userInfoPtr->uid()
&& user->name() == userInfoPtr->name()) {
return true;
@ -158,12 +164,9 @@ bool LightDMHelper::hasSameUser(const UserInfoPtr userInfoPtr)
bool LightDMHelper::hasValidUsers()
{
if (!m_modelUsers)
return false;
int count = 0;
for(int i = 0; i < m_modelUsers->rowCount(QModelIndex()); i++){
QString name = m_modelUsers->index(i).data(QLightDM::UsersModel::NameRole).toString();
if(m_secUser->isSecrityUser(name))
for (auto user : m_mapUsers->values()) {
if(m_secUser->isSecrityUser(user->name()))
count++;
}
return (bool)(count>0);
@ -182,51 +185,18 @@ bool LightDMHelper::isSameUser(UserInfoPtr userA, UserInfoPtr userB)
void LightDMHelper::onUsersChanged()
{
if (!m_modelUsers)
return ;
updateUsersInfo();
Q_EMIT usersInfoChanged();
}
void LightDMHelper::updateUsersInfo()
{
m_listUsers.clear();
if (m_modelUsers) {
for(int i = 0; i < m_modelUsers->rowCount(QModelIndex()); i++){
QString name = m_modelUsers->index(i).data(QLightDM::UsersModel::NameRole).toString();
if(m_secUser->isSecrityUser(name)) {
std::shared_ptr<UserInfo> userInfoPtr = std::make_shared<UserInfo>();
userInfoPtr->updateName(name);
uid_t uid = m_modelUsers->index(i).data(QLightDM::UsersModel::UidRole).toUInt();
userInfoPtr->updateUid(uid);
QString strRealName = m_modelUsers->index(i).data(QLightDM::UsersModel::RealNameRole).toString();
if (strRealName.isEmpty()) {
strRealName = name;
}
userInfoPtr->updateFullName(strRealName);
QString strBackGround = m_modelUsers->index(i).data(QLightDM::UsersModel::BackgroundPathRole).toString();
if (!strBackGround.isEmpty() && QFileInfo(strBackGround).exists()){
userInfoPtr->updateBackground(strBackGround);
QList<UserInfoPtr> userInfos = m_mapUsers->values();
for (auto user : userInfos) {
if (isUserLoggined(user->name())) {
user->updateLoggedIn(true);
} else {
if (m_accountServiceHelper) {
strBackGround = m_accountServiceHelper->getAccountBackground(uid);
if (!strBackGround.isEmpty() && QFileInfo(strBackGround).exists()){
userInfoPtr->updateBackground(strBackGround);
}
}
}
QString strImgHead = m_modelUsers->index(i).data(QLightDM::UsersModel::ImagePathRole).toString();
if (!strImgHead.isEmpty() && QFileInfo(strImgHead).exists()){
userInfoPtr->updateHeadImage(strImgHead);
}
bool isLoggedIn = m_modelUsers->index(i).data(QLightDM::UsersModel::LoggedInRole).toBool();
userInfoPtr->updateLoggedIn(isLoggedIn);
if (!hasSameUser(userInfoPtr)) {
m_listUsers.append(userInfoPtr);
}
}
user->updateLoggedIn(false);
}
}
if (m_isShowManualLogin) {
@ -234,7 +204,8 @@ void LightDMHelper::updateUsersInfo()
userInfoPtr->updateFullName(tr("Login"));
userInfoPtr->updateName("*login");
if (!hasSameUser(userInfoPtr)) {
m_listUsers.append(userInfoPtr);
const QString path = userInfoPtr->path().isEmpty() ? userInfoPtr->name() : userInfoPtr->path();
m_mapUsers->insert(path, userInfoPtr);
}
}
if (hasGuestAccountHint()) {
@ -242,7 +213,8 @@ void LightDMHelper::updateUsersInfo()
userInfoPtr->updateFullName(tr("Guest"));
userInfoPtr->updateName("*guest");
if (!hasSameUser(userInfoPtr)) {
m_listUsers.append(userInfoPtr);
const QString path = userInfoPtr->path().isEmpty() ? userInfoPtr->name() : userInfoPtr->path();
m_mapUsers->insert(path, userInfoPtr);
}
}
}
@ -261,5 +233,201 @@ void LightDMHelper::updateSessionsInfo()
QList<UserInfoPtr> LightDMHelper::getUsersInfo()
{
return m_listUsers;
return m_mapUsers->values();
}
bool LightDMHelper::isUserLoggined(const QString &strUserName)
{
QList<std::shared_ptr<LightDMSessionInfo>> sessionList = m_ldmSessions->values();
auto it = std::find_if(sessionList.begin(), sessionList.end(), [strUserName](std::shared_ptr<LightDMSessionInfo> &session) {
return session->userName() == strUserName;
});
if (it != sessionList.end()) {
return true;
}
return false;
}
void LightDMHelper::initLDMSessionsInfo()
{
if (!m_dbusIfsLDM) {
m_dbusIfsLDM = new QDBusInterface(DM_DBUS_SERVICE, DM_DBUS_PATH, DM_DBUS_INTERFACE, QDBusConnection::systemBus(), this);
connect(m_dbusIfsLDM, SIGNAL(SessionAdded(QDBusObjectPath)), this, SLOT(onLDMSessionAdded(QDBusObjectPath)));
connect(m_dbusIfsLDM, SIGNAL(SessionRemoved(QDBusObjectPath)), this, SLOT(onLDMSessionRemoved(QDBusObjectPath)));
QStringList listSessions;
QDBusInterface ifLDMProp(DM_DBUS_SERVICE, DM_DBUS_PATH, FD_PROPERTIES_INTERFACE, QDBusConnection::systemBus());
QDBusMessage ret = ifLDMProp.call("GetAll", DM_DBUS_INTERFACE);
QList<QVariant> outArgs = ret.arguments();
QVariant first = outArgs.at(0);
const QDBusArgument &dbusArgs = first.value<QDBusArgument>();
dbusArgs.beginMap();
while(!dbusArgs.atEnd()) {
QString key;
QVariant value;
dbusArgs.beginMapEntry();
dbusArgs >> key >> value;
if (key == "Sessions") {
const QDBusArgument &dbusObjPaths = value.value<QDBusArgument>();
QDBusObjectPath path;
dbusObjPaths.beginArray();
while (!dbusObjPaths.atEnd()) {
dbusObjPaths >> path;
listSessions << path.path();
}
dbusObjPaths.endArray();
}
dbusArgs.endMapEntry();
}
dbusArgs.endMap();
for (auto session : listSessions) {
std::shared_ptr<LightDMSessionInfo> ldmSessionInfo(new LightDMSessionInfo(session, this));
m_ldmSessions->insert(session, ldmSessionInfo);
}
}
}
void LightDMHelper::onLDMSessionAdded(QDBusObjectPath objPath)
{
qDebug()<< "Add LDM Session, path:"<<objPath.path();
if (m_ldmSessions->contains(objPath.path())) {
return;
}
std::shared_ptr<LightDMSessionInfo> ldmSessionInfo(new LightDMSessionInfo(objPath.path(), this));
m_ldmSessions->insert(objPath.path(), ldmSessionInfo);
onUsersChanged();
}
void LightDMHelper::onLDMSessionRemoved(QDBusObjectPath objPath)
{
if (!m_ldmSessions->contains(objPath.path())) {
return;
}
const std::shared_ptr<LightDMSessionInfo> session = m_ldmSessions->value(objPath.path());
m_ldmSessions->remove(objPath.path());
onUsersChanged();
}
void LightDMHelper::initAccountsUsersInfo()
{
if (m_accountServiceHelper) {
QStringList listUsers = m_accountServiceHelper->getUserList();
for (auto user : listUsers) {
LocalUserInfoPtr userInfo(new LocalUserInfo(user, this));
connect(userInfo.get(), &UserInfo::userPropChanged, this, &LightDMHelper::onUsersChanged);
m_mapUsers->insert(user, userInfo);
}
connect(m_accountServiceHelper, SIGNAL(UserAdded(QDBusObjectPath)), this, SLOT(onUserAdded(QDBusObjectPath)));
connect(m_accountServiceHelper, SIGNAL(UserRemoved(QDBusObjectPath)), this, SLOT(onUserRemoved(QDBusObjectPath)));
}
}
void LightDMHelper::onUserAdded(QDBusObjectPath objPath)
{
qDebug()<< "Add Accounts User, path:"<<objPath.path();
if (m_mapUsers->contains(objPath.path())) {
return;
}
LocalUserInfoPtr userInfo(new LocalUserInfo(objPath.path(), this));
connect(userInfo.get(), &UserInfo::userPropChanged, this, &LightDMHelper::onUsersChanged);
m_mapUsers->insert(objPath.path(), userInfo);
onUsersChanged();
}
void LightDMHelper::onUserRemoved(QDBusObjectPath objPath)
{
if (!m_mapUsers->contains(objPath.path())) {
return;
}
const UserInfoPtr userInfo = m_mapUsers->value(objPath.path());
qDebug()<< "Remove Accounts User, name:"<<userInfo->name();
m_mapUsers->remove(objPath.path());
onUsersChanged();
}
LightDMSessionInfo::LightDMSessionInfo(const QString &strPath, QObject* parent)
: QObject(parent)
, m_strPath(strPath)
{
initData();
initConnections();
}
LightDMSessionInfo::~LightDMSessionInfo()
{
if (m_propertiesChangedConnected) {
QDBusConnection::systemBus().disconnect(DM_DBUS_SERVICE,
m_strPath,
FD_PROPERTIES_INTERFACE,
"PropertiesChanged",
this,
SLOT(onPropertiesChanged(QString, QVariantMap, QStringList)));
m_propertiesChangedConnected = false;
}
}
void LightDMSessionInfo::initData()
{
QDBusInterface ifaceExtra(DM_DBUS_SERVICE, m_strPath, FD_PROPERTIES_INTERFACE, QDBusConnection::systemBus());
QDBusMessage ret = ifaceExtra.call("GetAll", DM_SESSION_INTERFACE);
QList<QVariant> outArgs = ret.arguments();
QVariant first = outArgs.at(0);
const QDBusArgument &dbusArgs = first.value<QDBusArgument>();
dbusArgs.beginMap();
while(!dbusArgs.atEnd()) {
QString key;
QVariant value;
dbusArgs.beginMapEntry();
dbusArgs >> key >> value;
if (key == "Seat") {
m_strSeatPath = value.toString();
} else if (key == "UserName") {
m_strUserName = value.toString();
}
dbusArgs.endMapEntry();
}
dbusArgs.endMap();
}
void LightDMSessionInfo::initConnections()
{
if (!m_propertiesChangedConnected) {
QDBusConnection::systemBus().connect(DM_DBUS_SERVICE,
m_strPath,
FD_PROPERTIES_INTERFACE,
"PropertiesChanged",
this,
SLOT(onPropertiesChanged(QString, QVariantMap, QStringList)));
m_propertiesChangedConnected = true;
}
}
void LightDMSessionInfo::onPropertiesChanged(const QString& interfaceName,
const QVariantMap& changedProperties,
const QStringList& invalidatedProperties)
{
Q_UNUSED(invalidatedProperties);
if (interfaceName == DM_SESSION_INTERFACE) {
QVariantMap::const_iterator itVar = changedProperties.constBegin();
for ( ; itVar != changedProperties.constEnd(); itVar++) {
QVariant varValue = itVar.value();
if(itVar.key() == "Seat") {
m_strSeatPath = varValue.toString();
} else if(itVar.key() == "UserName") {
m_strUserName = varValue.toString();
}
}
}
}
QDebug operator <<(QDebug stream, const LightDMSessionInfo &sessionInfo)
{
stream << "["
<< sessionInfo.path()
<< sessionInfo.userName()
<< sessionInfo.seatPath()
<< "]";
return stream;
}

View File

@ -24,11 +24,13 @@
#include <QLightDM/UsersModel>
#include <QList>
#include <QModelIndex>
#include <QDBusInterface>
#include "userinfo.h"
class SecurityUser;
class UsersModel;
class AccountServiceHelper;
class AccountsHelper;
class LightDMSessionInfo;
/**
* @brief lightdm工具类
*
@ -42,7 +44,7 @@ public:
*
* @param parent
*/
explicit LightDMHelper(AccountServiceHelper *accountHelper, QObject *parent = nullptr);
explicit LightDMHelper(AccountsHelper *accountHelper, QObject *parent = nullptr);
public:
/**
@ -103,6 +105,14 @@ public Q_SLOTS:
*/
void onUsersChanged();
void onLDMSessionAdded(QDBusObjectPath objPath);
void onLDMSessionRemoved(QDBusObjectPath objPath);
void onUserAdded(QDBusObjectPath objPath);
void onUserRemoved(QDBusObjectPath objPath);
Q_SIGNALS:
/**
* @brief
@ -153,16 +163,51 @@ private:
void updateSessionsInfo();
void initLDMSessionsInfo();
bool isUserLoggined(const QString &strUserName);
void initAccountsUsersInfo();
private:
bool m_isShowManualLogin; /**< 是否显示手动登录 */
QString m_strSession; /**< 当前会话 */
QString m_strCurUserName; /**< 当前选择用户 */
QList<UserInfoPtr> m_listUsers; /**< 用户信息列表 */
SecurityUser *m_secUser = nullptr; /**< 安全用户信息指针 */
QLightDM::SessionsModel *m_sessionsModel; /**< lightdm 会话数据指针 */
QList<QString> m_listSessions; /**< 会话列表 */
UsersModel *m_modelUsers = nullptr; /**< lightdm 用户数据指针 */
AccountServiceHelper *m_accountServiceHelper = nullptr;
QMap<QString, UserInfoPtr> *m_mapUsers; /**< accounts 用户信息列表指针 */
AccountsHelper *m_accountServiceHelper = nullptr;
QMap<QString, std::shared_ptr<LightDMSessionInfo>> *m_ldmSessions;
QDBusInterface *m_dbusIfsLDM;
};
class LightDMSessionInfo : public QObject
{
Q_OBJECT
public:
explicit LightDMSessionInfo(const QString &strPath, QObject* parent = nullptr);
virtual ~LightDMSessionInfo();
inline QString path() const { return m_strPath; }
inline QString userName() const { return m_strUserName; }
inline QString seatPath() const { return m_strSeatPath; }
private:
void initData();
void initConnections();
private Q_SLOTS:
void onPropertiesChanged(const QString&, const QVariantMap&, const QStringList&);
private:
QString m_strPath;
bool m_propertiesChangedConnected = false;
QString m_strSeatPath;
QString m_strUserName;
};
QDebug operator <<(QDebug stream, const LightDMSessionInfo &userInfo);
#endif // LIGHTDMHELPER_H

View File

@ -0,0 +1,71 @@
#include "languagesetting.h"
#include <QApplication>
#include "definetypes.h"
#include <QDebug>
LanguageSetting* LanguageSetting::m_singleInstance = nullptr;
LanguageSetting::LanguageSetting(QObject *parent)
: QObject(parent)
{
}
LanguageSetting::~LanguageSetting()
{
}
LanguageSetting* LanguageSetting::instance(QObject *parent)
{
if(m_singleInstance == nullptr)
m_singleInstance = new LanguageSetting(parent);
return m_singleInstance;
}
void LanguageSetting::onLanguageChanged(QString languageCode)
{
if(languageCode == "")
return ;
if(m_strLanguageCode == languageCode) {
return;
}
qDebug()<<"onLanguageChanged "<<languageCode;
Q_EMIT languageChanged(false);
if (m_translator) {
qApp->removeTranslator(m_translator);
delete m_translator;
m_translator = nullptr;
}
m_translator = new QTranslator(this);
QString qmFile;
if (languageCode.startsWith("zh_CN")) { /*这里写的有问题忘记之前为什么写了会导致繁体也会加载zh_CN*/
qmFile = QString(WORKING_DIRECTORY"/i18n_qm/%1.qm").arg("zh_CN");
setenv("LANGUAGE","zh_CN",1);
setenv("LANG","zh_CN",1);
setlocale(LC_ALL,"zh_CN.utf8");
QLocale lang("zh_CN");
/*这里设置一个QLocale的默认值用来影响插件的语言。插件加载翻译文件时不使用QLocale::system().name()来获取语言,
* 使QLocale local; local.name() ,*/
QLocale::setDefault(lang);
} else {
qmFile = QString(WORKING_DIRECTORY"/i18n_qm/%1.qm").arg(languageCode);
setenv("LANGUAGE",languageCode.toLatin1().data(),1);
setenv("LANG",languageCode.toLatin1().data(),1);
setlocale(LC_ALL,"");
QLocale lang(languageCode);
/*这里设置一个QLocale的默认值用来影响插件的语言。插件加载翻译文件时不使用QLocale::system().name()来获取语言,
* 使QLocale local; local.name() ,*/
QLocale::setDefault(languageCode);
}
m_translator->load(qmFile);
qApp->installTranslator(m_translator);
qDebug() << "load translation file " << qmFile;
m_strLanguageCode = languageCode;
Q_EMIT languageChanged(true);
}

View File

@ -0,0 +1,29 @@
#ifndef LANGUAGESETTING_H
#define LANGUAGESETTING_H
#include <QObject>
#include <QTranslator>
class LanguageSetting : public QObject
{
Q_OBJECT
public:
static LanguageSetting *instance(QObject *parent = nullptr);
void onLanguageChanged(QString languageCode);
Q_SIGNALS:
void languageChanged(bool isCompleted);
private:
LanguageSetting(QObject *parent = nullptr);
virtual ~LanguageSetting();
private:
static LanguageSetting *m_singleInstance;
QTranslator *m_translator = nullptr;
QString m_strLanguageCode;
};
#endif // LANGUAGESETTING_H

View File

@ -178,7 +178,26 @@ void LockDialogModel::updateSessionsInfo(QStringList list)
void LockDialogModel::updateUsersInfo(QList<UserInfoPtr> list)
{
m_listUsersInfo = list;
for (auto userinfo : list) {
if (m_listUsersInfo.contains(userinfo)) {
UserInfoPtr changedUserInfo = findUserByName(userinfo->name());
if (changedUserInfo) {
changedUserInfo->updateUid(userinfo->uid());
changedUserInfo->updateFullName(userinfo->fullName());
changedUserInfo->updateHeadImage(userinfo->headImage());
changedUserInfo->updateLang(userinfo->lang());
changedUserInfo->updateLoggedIn(userinfo->isLoggedIn());
changedUserInfo->updateBackground(userinfo->backGround());
}
} else {
m_listUsersInfo.append(userinfo);
}
}
foreach (auto userinfo, m_listUsersInfo) {
if (!list.contains(userinfo)) {
m_listUsersInfo.removeOne(userinfo);
}
}
Q_EMIT usersInfoChanged();
}
@ -190,7 +209,26 @@ void LockDialogModel::updateAgreementInfo(AgreementInfoPtr agreementInfo)
void LockDialogModel::onUsersInfoChanged(QList<UserInfoPtr> list)
{
m_listUsersInfo = list;
for (auto userinfo : list) {
if (m_listUsersInfo.contains(userinfo)) {
UserInfoPtr changedUserInfo = findUserByName(userinfo->name());
if (changedUserInfo) {
changedUserInfo->updateUid(userinfo->uid());
changedUserInfo->updateFullName(userinfo->fullName());
changedUserInfo->updateHeadImage(userinfo->headImage());
changedUserInfo->updateLang(userinfo->lang());
changedUserInfo->updateLoggedIn(userinfo->isLoggedIn());
changedUserInfo->updateBackground(userinfo->backGround());
}
} else {
m_listUsersInfo.append(userinfo);
}
}
foreach (auto userinfo, m_listUsersInfo) {
if (!list.contains(userinfo)) {
m_listUsersInfo.removeOne(userinfo);
}
}
Q_EMIT usersInfoChanged();
}

View File

@ -42,6 +42,7 @@
#include "screensaverwndadaptor.h"
#include "pluginsloader.h"
#include "msysdbus.h"
#include "languagesetting.h"
FullBackgroundWidget *window = nullptr;
@ -122,12 +123,7 @@ int main(int argc, char *argv[])
qInfo()<<"Start "<<app.arguments();
//加载翻译文件
QString locale = QLocale::system().name();
QTranslator translator;
QString qmFile = QString(WORKING_DIRECTORY"/i18n_qm/%1.qm").arg(locale);
translator.load(qmFile);
app.installTranslator(&translator);
qDebug() << "load translation file " << qmFile;
LanguageSetting::instance()->onLanguageChanged(QLocale::system().name());
window = new FullBackgroundWidget(lockDialogModel);

View File

@ -17,9 +17,16 @@
**/
#include "userinfo.h"
#include "global_utils.h"
#include "definetypes.h"
#include <QDBusConnection>
#include <QDBusMessage>
#include <QDBusInterface>
#include <QDBusArgument>
#include <QFile>
UserInfo::UserInfo()
: m_isLoggedIn(false)
UserInfo::UserInfo(QObject *parent)
: QObject(parent)
, m_isLoggedIn(false)
, m_uId(-1)
, m_strBackground(DEFAULT_BACKGROUND_PATH)
, m_strLang(qgetenv("LANG"))
@ -29,7 +36,8 @@ UserInfo::UserInfo()
}
UserInfo::UserInfo(const UserInfo &userInfo)
: m_isLoggedIn(userInfo.m_isLoggedIn)
: QObject(userInfo.parent())
, m_isLoggedIn(userInfo.m_isLoggedIn)
, m_uId(userInfo.m_uId)
, m_strHeadImage(userInfo.m_strHeadImage)
, m_strFullName(userInfo.m_strFullName)
@ -50,22 +58,11 @@ bool UserInfo::operator==(const UserInfo &userInfo) const
return userInfo.uid() == m_uId && userInfo.name() == m_strName;
}
UserInfo& UserInfo::operator=(const UserInfo &userInfo)
{
if (this == &userInfo) return *this;
updateLoggedIn(userInfo.isLoggedIn());
updateUid(userInfo.uid());
updateHeadImage(userInfo.headImage());
updateFullName(userInfo.fullName());
updateBackground(userInfo.backGround());
updateLang(userInfo.lang());
updateName(userInfo.name());
return *this;
}
void UserInfo::updateLoggedIn(const bool &isLoggedIn)
{
if (isLoggedIn == m_isLoggedIn) {
return ;
}
m_isLoggedIn = isLoggedIn;
}
@ -112,3 +109,182 @@ QDebug operator <<(QDebug stream, const UserInfo &userInfo)
<< "]";
return stream;
}
LocalUserInfo::LocalUserInfo(const uid_t &uId, QObject* parent)
: UserInfo(parent)
, m_strPath("/org/freedesktop/Accounts/User" + QString::number(uId))
{
initData();
initConnections();
}
LocalUserInfo::LocalUserInfo(const QString &strPath, QObject* parent)
: UserInfo(parent)
, m_strPath(strPath)
{
initData();
initConnections();
}
LocalUserInfo::LocalUserInfo(const LocalUserInfo &localUser)
: UserInfo(localUser)
, m_strPath(localUser.path())
{
if (m_strPath.isEmpty()) {
m_strPath = QString("/org/freedesktop/Accounts/User" + QString::number(localUser.uid()));
}
initConnections();
}
LocalUserInfo::~LocalUserInfo()
{
if (m_propertiesChangedConnected) {
QDBusConnection::systemBus().disconnect(ACCOUNTS_DBUS_SERVICE,
m_strPath,
FD_PROPERTIES_INTERFACE,
"PropertiesChanged",
this,
SLOT(onPropertiesChanged(QString, QVariantMap, QStringList)));
m_propertiesChangedConnected = false;
}
}
void LocalUserInfo::initData()
{
QDBusInterface ifaceExtra(ACCOUNTS_DBUS_SERVICE, m_strPath, FD_PROPERTIES_INTERFACE, QDBusConnection::systemBus());
QDBusMessage ret = ifaceExtra.call("GetAll", ACCOUNTS_USER_LDM_SERVICE_INTERFACE);
QList<QVariant> outArgs = ret.arguments();
QVariant first = outArgs.at(0);
const QDBusArgument &dbusArgsExtra = first.value<QDBusArgument>();
dbusArgsExtra.beginMap();
while(!dbusArgsExtra.atEnd()) {
QString key;
QVariant value;
dbusArgsExtra.beginMapEntry();
dbusArgsExtra >> key >> value;
if(key == "BackgroundFile") {
QString strBackground = value.toString();
if(strBackground.isEmpty() || !QFile(strBackground).exists() || !QFile(strBackground).size()) {
m_strBackground = DEFAULT_BACKGROUND_PATH;
} else {
m_strBackground = strBackground;
}
}
dbusArgsExtra.endMapEntry();
}
dbusArgsExtra.endMap();
QDBusInterface iface(ACCOUNTS_DBUS_SERVICE, m_strPath, FD_PROPERTIES_INTERFACE, QDBusConnection::systemBus());
ret = iface.call("GetAll", ACCOUNTS_USER_DBUS_INTERFACE);
outArgs = ret.arguments();
first = outArgs.at(0);
const QDBusArgument &dbusArgs = first.value<QDBusArgument>();
dbusArgs.beginMap();
while(!dbusArgs.atEnd()) {
QString key;
QVariant value;
dbusArgs.beginMapEntry();
dbusArgs >> key >> value;
if(key == "UserName") {
m_strName = value.toString();
} else if(key == "RealName") {
m_strFullName = value.toString();
} else if(key == "IconFile") {
QString strHeadImage = value.toString();
if(strHeadImage.isEmpty() || !QFile(strHeadImage).exists() || !QFile(strHeadImage).size()) {
m_strHeadImage = getDefaultFace();
} else {
m_strHeadImage = strHeadImage;
}
} else if(key == "Uid") {
m_uId = value.toUInt();
} else if(key == "Language") {
m_strLang = value.toString();
} else if (key == "BackgroundFile") {
QString strBackground = value.toString();
if(!strBackground.isEmpty() && QFile(strBackground).exists() && QFile(strBackground).size()) {
m_strBackground = strBackground;
}
}
dbusArgs.endMapEntry();
}
dbusArgs.endMap();
if(m_strFullName.isEmpty()) {
m_strFullName = m_strName;
}
}
void LocalUserInfo::initConnections()
{
if (!m_propertiesChangedConnected) {
QDBusConnection::systemBus().connect(ACCOUNTS_DBUS_SERVICE,
m_strPath,
FD_PROPERTIES_INTERFACE,
"PropertiesChanged",
this,
SLOT(onPropertiesChanged(QString, QVariantMap, QStringList)));
m_propertiesChangedConnected = true;
}
}
void LocalUserInfo::onPropertiesChanged(const QString& interfaceName,
const QVariantMap& changedProperties,
const QStringList& invalidatedProperties)
{
Q_UNUSED(invalidatedProperties);
if (interfaceName == ACCOUNTS_USER_DBUS_INTERFACE) {
QVariantMap::const_iterator itVar = changedProperties.constBegin();
bool isChanged = false;
for ( ; itVar != changedProperties.constEnd(); itVar++) {
QVariant varValue = itVar.value();
if(itVar.key() == "UserName") {
m_strName = varValue.toString();
isChanged = true;
} else if(itVar.key() == "RealName") {
m_strFullName = varValue.toString();
isChanged = true;
} else if(itVar.key() == "IconFile") {
QString strHeadImage = varValue.toString();
if(strHeadImage.isEmpty() || !QFile(strHeadImage).exists() || !QFile(strHeadImage).size()) {
m_strHeadImage = getDefaultFace();
} else {
m_strHeadImage = strHeadImage;
}
isChanged = true;
} else if(itVar.key() == "Uid") {
m_uId = varValue.toUInt();
isChanged = true;
} else if(itVar.key() == "Language") {
m_strLang = varValue.toString();
isChanged = true;
} else if (itVar.key() == "BackgroundFile") {
QString strBackground = varValue.toString();
if(!strBackground.isEmpty() && QFile(strBackground).exists() && QFile(strBackground).size()) {
m_strBackground = strBackground;
isChanged = true;
}
}
}
if(m_strFullName.isEmpty()) {
m_strFullName = m_strName;
}
if (isChanged)
Q_EMIT userPropChanged(m_strName);
}
}
QDebug operator <<(QDebug stream, const LocalUserInfo &userInfo)
{
stream << "["
<< userInfo.path()
<< userInfo.uid()
<< userInfo.name()
<< userInfo.fullName()
<< userInfo.headImage()
<< userInfo.backGround()
<< userInfo.isLoggedIn()
<< userInfo.lang()
<< "]";
return stream;
}

View File

@ -22,15 +22,15 @@
#include <memory>
#include <QDebug>
class UserInfo
class UserInfo : public QObject
{
Q_OBJECT
public:
UserInfo();
UserInfo(const UserInfo &userInfo);
explicit UserInfo(QObject *parent = nullptr);
explicit UserInfo(const UserInfo &userInfo);
virtual ~UserInfo();
bool operator==(const UserInfo &userInfo) const;
UserInfo& operator=(const UserInfo &userInfo);
public:
inline bool isLoggedIn() const { return m_isLoggedIn; }
@ -41,6 +41,9 @@ public:
inline QString lang() const { return m_strLang; }
inline QString name() const { return m_strName; }
virtual inline QString path() const { return QString(); }
public:
void updateLoggedIn(const bool &isLoggedIn);
void updateUid(const uid_t &id);
void updateHeadImage(const QString &path);
@ -49,6 +52,9 @@ public:
void updateLang(const QString &lang);
void updateName(const QString &name);
Q_SIGNALS:
void userPropChanged(const QString &userName);
protected:
bool m_isLoggedIn; // 是否已登录
uid_t m_uId; // 用户 uid
@ -63,4 +69,32 @@ typedef std::shared_ptr<UserInfo> UserInfoPtr;
QDebug operator <<(QDebug stream, const UserInfo &userInfo);
class LocalUserInfo : public UserInfo
{
Q_OBJECT
public:
explicit LocalUserInfo(const uid_t &uId, QObject* parent = nullptr);
explicit LocalUserInfo(const QString &strPath, QObject* parent = nullptr);
explicit LocalUserInfo(const LocalUserInfo &localUser);
virtual ~LocalUserInfo();
inline QString path() const override { return m_strPath; }
private:
void initData();
void initConnections();
private Q_SLOTS:
void onPropertiesChanged(const QString&, const QVariantMap&, const QStringList&);
private:
QString m_strPath;
bool m_propertiesChangedConnected = false;
};
typedef std::shared_ptr<LocalUserInfo> LocalUserInfoPtr;
QDebug operator <<(QDebug stream, const LocalUserInfo &userInfo);
#endif // USERINFO_H

View File

@ -17,8 +17,17 @@
#include <sys/types.h>
#include <pwd.h>
#include "../lock-dialog/pam-tally.h"
#include "global_utils.h"
AuthDialog::AuthDialog(LockDialogModel *model, UserInfo userInfo, QWidget *parent)
#define WIDGET_HEIGHT_HEADTIP (40*scale)
#define WIDGET_HEIGHT_HEADIMAGE (154*scale)
#define WIDGET_HEIGHT_USERNAME (40*scale)
#define WIDGET_HEIGHT_PASSWDEDIT (80*scale)
#define WIDGET_HEIGHT_SPACING (16*scale)
#define WIDGET_HEIGHT_CUSTOM (WIDGET_HEIGHT_HEADIMAGE+WIDGET_HEIGHT_USERNAME+WIDGET_HEIGHT_PASSWDEDIT+WIDGET_HEIGHT_SPACING*2)
#define WIDGET_HEIGHT_LOGINOPTS (104*scale)
AuthDialog::AuthDialog(LockDialogModel *model, UserInfoPtr userInfo, QWidget *parent)
: QWidget(parent)
, m_modelLockDialog(model)
, m_isLockingFlg(false)
@ -33,7 +42,7 @@ void AuthDialog::initUI()
{
QVBoxLayout *mainLayout = new QVBoxLayout(this);
mainLayout->setAlignment(Qt::AlignCenter);
mainLayout->setSpacing(16);
mainLayout->setSpacing(WIDGET_HEIGHT_SPACING);
mainLayout->setContentsMargins(0, 0, 0, 0);
m_curFontSize = m_modelLockDialog->getCurFontSize();
m_ptToPx = m_modelLockDialog->getPtToPx();
@ -50,12 +59,12 @@ void AuthDialog::initUI()
// 密码输入框
m_editWidget = new QWidget(this);
//错误信息提示
m_messageWidget = new QWidget(this);
// ukey
m_ukeyPasswdWidget = new QWidget(this);
// custom widget
m_customWidget = new QWidget(this);
// login option
m_widgetLoginOpts = new QWidget(this);
@ -65,6 +74,7 @@ void AuthDialog::initUI()
mainLayout->addWidget(m_nameWidget);
mainLayout->addWidget(m_editWidget);
mainLayout->addWidget(m_ukeyPasswdWidget);
mainLayout->addWidget(m_customWidget);
mainLayout->addWidget(m_widgetLoginOpts);
mainLayout->addStretch();
@ -73,6 +83,7 @@ void AuthDialog::initUI()
initNameWidget();
initEditWidget();
initUkeyPasswordWidget();
initCustomAuthWidget();
initLoginoptionWidget();
initConnections();
@ -116,31 +127,29 @@ void AuthDialog::resizeEvent(QResizeEvent *event)
void AuthDialog::updateAuthSize()
{
this->layout()->setSpacing(16*scale);
this->layout()->setSpacing(WIDGET_HEIGHT_SPACING);
if (m_tipWidget)
m_tipWidget->setFixedSize(this->width(), 40*scale);
m_tipWidget->setFixedSize(this->width(), WIDGET_HEIGHT_HEADTIP);
if (m_headerWidget)
m_headerWidget->setFixedSize(this->width(), 154*scale);
m_headerWidget->setFixedSize(this->width(), WIDGET_HEIGHT_HEADIMAGE);
if (m_nameWidget)
m_nameWidget->setFixedSize(this->width(), 40*scale);
m_nameWidget->setFixedSize(this->width(), WIDGET_HEIGHT_USERNAME);
if (m_editWidget)
m_editWidget->setFixedSize(this->width(), 80*scale);
if (m_messageWidget)
m_messageWidget->setFixedSize(this->width(), 40*scale);
m_editWidget->setFixedSize(this->width(), WIDGET_HEIGHT_PASSWDEDIT);
if (m_ukeyPasswdWidget)
m_ukeyPasswdWidget->setFixedSize(this->width(), 80*scale);
m_ukeyPasswdWidget->setFixedSize(this->width(), WIDGET_HEIGHT_PASSWDEDIT);
if (m_widgetLoginOpts)
m_widgetLoginOpts->setFixedSize(this->width(), 104*scale);
m_widgetLoginOpts->setFixedSize(this->width(), WIDGET_HEIGHT_LOGINOPTS);
if (m_labelLoginTypeTip) {
m_labelLoginTypeTip->setFixedSize(m_tipWidget->size());
m_labelLoginTypeTip->setFontSize((14 + m_curFontSize)*m_ptToPx);
}
if (m_labelHeadImg)
m_labelHeadImg->setFixedSize(154*scale, 154*scale);
m_labelHeadImg->setFixedSize(WIDGET_HEIGHT_HEADIMAGE, WIDGET_HEIGHT_HEADIMAGE);
if (m_labelFace)
m_labelFace->setFixedSize(154*scale, 154*scale);
m_labelFace->setFixedSize(WIDGET_HEIGHT_HEADIMAGE, WIDGET_HEIGHT_HEADIMAGE);
if (m_labelQRCode)
m_labelQRCode->setFixedSize(154*scale, 154*scale);
m_labelQRCode->setFixedSize(WIDGET_HEIGHT_HEADIMAGE, WIDGET_HEIGHT_HEADIMAGE);
if (m_labelQRCodeTip)
m_labelQRCodeTip->setFixedSize(22*scale, 22*scale);
if (m_labelQRCodeMsg) {
@ -148,7 +157,7 @@ void AuthDialog::updateAuthSize()
m_labelQRCodeMsg->setFontSize((14 + m_curFontSize)*m_ptToPx);
}
if (m_nameLabel) {
m_nameLabel->setFixedSize(this->width(), 40*scale);
m_nameLabel->setFixedSize(this->width(), WIDGET_HEIGHT_USERNAME);
m_nameLabel->setFontSize((24 + m_curFontSize)*m_ptToPx);
}
if (m_passwordEdit) {
@ -179,8 +188,9 @@ void AuthDialog::updateAuthSize()
}
if (m_tipWidget && bottomListWidget)
m_optionTip->setFixedSize(bottomListWidget->width(), 32*scale);
if (m_customWidget)
m_customWidget->setFixedSize(width(), WIDGET_HEIGHT_CUSTOM);
updateUI();
}
void AuthDialog::initTipWidget()
@ -324,30 +334,60 @@ void AuthDialog::initLoginoptionWidget()
// btnsLayout->addWidget(bottomListWidget);
// loginoptionLayout->addLayout(btnsLayout);
m_customWidget = new QWidget(this);
m_layoutCustom = new QHBoxLayout();
}
void AuthDialog::initCustomAuthWidget()
{
if (m_customWidget) {
m_layoutCustom = new QHBoxLayout(m_customWidget);
m_layoutCustom->setSpacing(0);
m_layoutCustom->setContentsMargins(0,0,0,0);
m_customWidget->setLayout(m_layoutCustom);
m_layoutCustom->setAlignment(Qt::AlignVCenter);
m_customWidget->hide();
m_customWidget->setFixedSize(width(), 376+100);
}
}
void AuthDialog::updateUI()
{
QPixmap p(m_curUserInfo.headImage());
QPixmap p(m_curUserInfo->headImage());
QPixmap userIcon = scaledPixmap(p);
userIcon = userIcon.scaled(154*scale, 154*scale, Qt::IgnoreAspectRatio, Qt::SmoothTransformation);
userIcon = PixmapToRound(userIcon, 77*scale);
m_labelHeadImg->setPixmap(userIcon);
m_nameLabel->setText(m_curUserInfo.fullName());
if (m_curUserInfo->name() == "*login") {
m_nameLabel->setText(tr("Login"));
} else if (m_curUserInfo->name() == "*guest") {
m_nameLabel->setText(tr("Guest"));
} else {
m_nameLabel->setText(m_curUserInfo->fullName());
}
m_fRetryButton->setStyleSheet(QString("QPushButton{border-radius: %1px; border:0px solid white;background-color: rgba(255,255,255,10%);}"
"QPushButton::hover{background-color: rgb(255,255,255,30%);}"
"QPushButton::pressed {background-color: rgba(255,255,255,40%);}").arg((int)(77*scale)));
m_fRetryButton->setFixedSize(154*scale, 154*scale);
m_fRetryButton->setIconSize(QSize(48*scale, 48*scale));
qDebug()<<"AuthDialog updateUI:"<<isGreeterMode() << ","<<m_curUserInfo->isLoggedIn();
if (!isGreeterMode() && m_curUserInfo->isLoggedIn()) {
QPixmap iconLogin = QIcon::fromTheme("system-lock-screen-symbolic").pixmap(12,12);
iconLogin = drawSymbolicColoredPixmap(iconLogin, "white");
if (m_passwordEdit) {
m_passwordEdit->setIcon(iconLogin, iconLogin.size());
}
if (m_ukeyPasswordEdit) {
m_ukeyPasswordEdit->setIcon(iconLogin, iconLogin.size());
}
} else {
QPixmap iconLogin = QIcon::fromTheme("go-next-symbolic").pixmap(20,20);
iconLogin = drawSymbolicColoredPixmap(iconLogin, "white");
if (m_passwordEdit) {
m_passwordEdit->setIcon(iconLogin, iconLogin.size());
}
if (m_ukeyPasswordEdit) {
m_ukeyPasswordEdit->setIcon(iconLogin, iconLogin.size());
}
}
}
void AuthDialog::startLoadingUkey()
@ -397,11 +437,12 @@ void AuthDialog::switchLoginOptType(unsigned uLoginOptType, bool faceBtnClicked)
case LOGINOPT_TYPE_PASSWORD:
{
m_editWidget->show();
m_headerWidget->show();
m_nameWidget->show();
m_labelHeadImg->show();
m_labelQRCode->hide();
m_labelFace->hide();
m_fRetryButton->hide();
m_nameWidget->show();
m_ukeyPasswdWidget->hide();
m_ukeyPasswordEdit->clearFocus();
m_customWidget->hide();
@ -411,11 +452,12 @@ void AuthDialog::switchLoginOptType(unsigned uLoginOptType, bool faceBtnClicked)
case LOGINOPT_TYPE_FACE:
{
m_editWidget->show();
m_headerWidget->show();
m_nameWidget->show();
m_labelHeadImg->hide();
m_labelQRCode->hide();
m_labelFace->show();
m_fRetryButton->hide();
m_nameWidget->show();
m_ukeyPasswdWidget->hide();
m_ukeyPasswordEdit->clearFocus();
m_customWidget->hide();
@ -431,8 +473,9 @@ void AuthDialog::switchLoginOptType(unsigned uLoginOptType, bool faceBtnClicked)
case LOGINOPT_TYPE_IRIS:
{
m_editWidget->show();
m_labelHeadImg->show();
m_headerWidget->show();
m_nameWidget->show();
m_labelHeadImg->show();
m_labelQRCode->hide();
m_labelFace->hide();
m_fRetryButton->hide();
@ -445,11 +488,12 @@ void AuthDialog::switchLoginOptType(unsigned uLoginOptType, bool faceBtnClicked)
case LOGINOPT_TYPE_QRCODE:
{
m_editWidget->show();
m_headerWidget->show();
m_nameWidget->show();
m_labelHeadImg->hide();
setQRCodeMsg("");
m_labelQRCode->show();
m_labelFace->hide();
m_nameWidget->show();
m_fRetryButton->hide();
m_ukeyPasswdWidget->hide();
m_ukeyPasswordEdit->clearFocus();
@ -460,8 +504,9 @@ void AuthDialog::switchLoginOptType(unsigned uLoginOptType, bool faceBtnClicked)
case LOGINOPT_TYPE_GENERAL_UKEY:
{
m_editWidget->show();
m_labelHeadImg->show();
m_headerWidget->show();
m_nameWidget->show();
m_labelHeadImg->show();
m_labelQRCode->hide();
m_labelFace->hide();
m_fRetryButton->hide();
@ -476,12 +521,9 @@ void AuthDialog::switchLoginOptType(unsigned uLoginOptType, bool faceBtnClicked)
case LOGINOPT_TYPE_CUSTOM:
{
m_editWidget->hide();
m_labelHeadImg->hide();
setQRCodeMsg("");
m_labelQRCode->hide();
m_headerWidget->hide();
m_nameWidget->hide();
m_labelFace->hide();
m_fRetryButton->hide();
setQRCodeMsg("");
m_ukeyPasswdWidget->hide();
m_ukeyPasswordEdit->clearFocus();
LoginAuthInterface* plugin = m_loginOpts->getCustomLoginAuth();
@ -509,7 +551,7 @@ void AuthDialog::switchLoginOptType(unsigned uLoginOptType, bool faceBtnClicked)
return;
}
if (uLoginOptType != m_uCurLoginOptType || (m_deviceInfo && m_deviceInfo->id != m_nLastDeviceId) || m_curUserInfo.name() != m_lastUserName) {
if (uLoginOptType != m_uCurLoginOptType || (m_deviceInfo && m_deviceInfo->id != m_nLastDeviceId) || m_curUserInfo->name() != m_lastUserName) {
clearMessage();
switch(uLoginOptType) {
case LOGINOPT_TYPE_PASSWORD:
@ -570,37 +612,10 @@ void AuthDialog::switchLoginOptType(unsigned uLoginOptType, bool faceBtnClicked)
m_nLastDeviceId = -1;
}
m_lastUserName = m_curUserInfo.name();
m_lastUserName = m_curUserInfo->name();
m_uCurLoginOptType = uLoginOptType;
}
/**
* @brief LoginWindow::setFace
* @param faceFile
*
*
*/
void AuthDialog::setFace(const QString& facePath)
{
QFile faceFile(facePath);
QPixmap faceImage;
m_labelHeadImg->setFixedSize(154,154);
//如果头像文件不存在,则使用默认头像
if(faceFile.exists()){
faceImage.load(facePath);
}
else{
faceImage.load(m_strDefaultFace);
}
//faceImage = cutPixmap(faceImage);
faceImage = faceImage.scaled(154,154, Qt::IgnoreAspectRatio, Qt::SmoothTransformation);
faceImage = PixmapToRound(faceImage,77);
m_labelHeadImg->setAlignment(Qt::AlignCenter);
m_labelHeadImg->setPixmap(faceImage);
m_face = facePath;
}
void AuthDialog::setQRCode(QImage& imgQRCode)
{
if (imgQRCode.isNull()) {
@ -674,7 +689,7 @@ void AuthDialog::onRespondUkey(const QString &text)
{
if (m_loginOpts && m_deviceInfo){
m_loginOpts->SetExtraInfo(text,"pincode");
m_loginOpts->startAuth(m_deviceInfo, m_curUserInfo.uid());
m_loginOpts->startAuth(m_deviceInfo, m_curUserInfo->uid());
}
}
@ -892,11 +907,11 @@ void AuthDialog::onPamShowPrompt(QString strPrompt, int nType)
void AuthDialog::onPamAuthCompleted()
{
if (m_curUserInfo.name().isEmpty())
if (m_curUserInfo->name().isEmpty())
return ;
m_passwordEdit->stopWaiting();
bool isAuthenticated = (Q_EMIT m_modelLockDialog->pamIsAuthenticated());
qDebug()<<"onPamAuthCompleted:"<<isAuthenticated<<m_curUserInfo.name();
qDebug()<<"onPamAuthCompleted:"<<isAuthenticated<<m_curUserInfo->name();
if(isAuthenticated) {
if((m_bRecvPrompt && !m_bHasUnacknowledgedMsg ) || m_bDirectLogin) {
m_bDirectLogin = false;
@ -905,12 +920,12 @@ void AuthDialog::onPamAuthCompleted()
m_passwordEdit->readOnly(false);
m_passwordEdit->clear();
clearMessage();
m_failMap.remove(m_curUserInfo.uid());
m_failMap.remove(m_curUserInfo->uid());
setLoginTypeTip("");
setUkeyTypeTip("");
authMode = UNKNOWN;
m_uCurLoginOptType = LOGINOPT_TYPE_PASSWORD;
Q_EMIT authSucceed(m_curUserInfo.name());
Q_EMIT authSucceed(m_curUserInfo->name());
} else {
qDebug()<<"m_bRecvPrompt = "<<m_bRecvPrompt<<" m_bHasUnacknowledgedMsg = "<<m_bHasUnacknowledgedMsg;
@ -968,17 +983,17 @@ void AuthDialog::onRespond(const QString &strRes)
qInfo()<<"Wait for input passwd!";
return;
}
if (m_curUserInfo.name().isEmpty()) {
if (m_curUserInfo->name().isEmpty()) {
qInfo()<<"No user be selected!!";
return ;
}
m_bHasUnacknowledgedMsg = false;
clearMessage();
qDebug()<<"onRespond:"<<m_curUserInfo.name();
if(m_curUserInfo.name() == "*guest"){
Q_EMIT m_modelLockDialog->pamAuthenticate(m_curUserInfo.name());
} else if(m_curUserInfo.name() == "*login") { //用户输入用户名
qDebug()<<"onRespond:"<<m_curUserInfo->name();
if(m_curUserInfo->name() == "*guest"){
Q_EMIT m_modelLockDialog->pamAuthenticate(m_curUserInfo->name());
} else if(m_curUserInfo->name() == "*login") { //用户输入用户名
m_isManual = true;
m_isNameLogin = true;
@ -1000,19 +1015,19 @@ void AuthDialog::onRespond(const QString &strRes)
void AuthDialog::startAuth()
{
if (!m_curUserInfo.name().isEmpty()) {
if (!m_curUserInfo->name().isEmpty()) {
m_bRecvPrompt = false;
m_bHasUnacknowledgedMsg = false;
//用户认证
if(m_curUserInfo.name() == "*guest") { //游客登录
if(m_curUserInfo->name() == "*guest") { //游客登录
qDebug() << "guest login";
m_passwordEdit->show();
m_passwordEdit->setPrompt(tr("login"));
} else if(m_curUserInfo.name() == "*login") { //手动输入用户名
} else if(m_curUserInfo->name() == "*login") { //手动输入用户名
Q_EMIT m_modelLockDialog->pamAuthenticate("");
} else {
qDebug() << "login: " << m_curUserInfo.name();
Q_EMIT m_modelLockDialog->pamAuthenticate(m_curUserInfo.name());
qDebug() << "login: " << m_curUserInfo->name();
Q_EMIT m_modelLockDialog->pamAuthenticate(m_curUserInfo->name());
m_passwordEdit->clear();
m_passwordEdit->readOnly(true);
}
@ -1032,15 +1047,15 @@ void AuthDialog::stopAuth()
clearMessage();
}
void AuthDialog::onCurUserInfoChanged(const UserInfo &userInfo)
void AuthDialog::onCurUserInfoChanged(UserInfoPtr userInfo)
{
if (m_curUserInfo.uid() > -1 && userInfo.uid() == m_curUserInfo.uid()) {
if (m_curUserInfo->uid() > -1 && userInfo->uid() == m_curUserInfo->uid()) {
m_curUserInfo = userInfo;
updateUI();
}
}
void AuthDialog::onCurUserChanged(const UserInfo &userInfo)
void AuthDialog::onCurUserChanged(UserInfoPtr userInfo)
{
if(m_loginOpts){
m_loginOpts->stopAuth();
@ -1100,13 +1115,13 @@ void AuthDialog::onMessageButtonClicked()
m_passwordEdit->clear();
clearMessage();
m_failMap.remove(m_curUserInfo.uid());
m_failMap.remove(m_curUserInfo->uid());
setLoginTypeTip("");
setUkeyTypeTip("");
authMode = UNKNOWN;
m_uCurLoginOptType = LOGINOPT_TYPE_PASSWORD;
Q_EMIT authSucceed(m_curUserInfo.name());
Q_EMIT authSucceed(m_curUserInfo->name());
} else {
m_messageButton->hide();
m_messageLabel->setText("");
@ -1124,14 +1139,14 @@ void AuthDialog::clearMessage()
bool AuthDialog::unlockUserTimer()
{
if (m_curUserInfo.name().isEmpty())
if (m_curUserInfo->name().isEmpty())
return false;
int failed_count = 0;
int time_left = 0;
int deny = 0;
int fail_time =0;
int unlock_time = 0;
QString curUserName = m_curUserInfo.name();
QString curUserName = m_curUserInfo->name();
if (NULL == curUserName.toLatin1().data()) {
qDebug() << "get user info failed." ;
@ -1236,7 +1251,7 @@ void AuthDialog::pamBioSuccess()
if(m_deviceInfo && m_deviceInfo->deviceType == LOGINOPT_TYPE_GENERAL_UKEY){
//ukey时不调用ukey认证
}else{
m_loginOpts->startAuth(m_deviceInfo, m_curUserInfo.uid());
m_loginOpts->startAuth(m_deviceInfo, m_curUserInfo->uid());
}
if (m_deviceInfo) {
@ -1349,10 +1364,10 @@ void AuthDialog::performBiometricAuth()
//获取默认设备
if (m_loginOpts) {
if(m_curUserInfo.name() == "*login")
if(m_curUserInfo->name() == "*login")
m_deviceName = m_loginOpts->getDefaultDevice(m_strManualLoginName);
else
m_deviceName = m_loginOpts->getDefaultDevice(m_curUserInfo.name());
m_deviceName = m_loginOpts->getDefaultDevice(m_curUserInfo->name());
if (m_isCustomDefault) { // 认证插件配置默认插件认证
if (m_loginOpts) {
@ -1387,7 +1402,7 @@ void AuthDialog::performBiometricAuth()
}
//已经错误超过3次
if(m_failMap.contains(m_curUserInfo.uid()) && m_failMap[m_curUserInfo.uid()][m_deviceInfo->id] >= maxFailedTimes)
if(m_failMap.contains(m_curUserInfo->uid()) && m_failMap[m_curUserInfo->uid()][m_deviceInfo->id] >= maxFailedTimes)
{
if (m_deviceInfo->deviceType == UniT_Remote) {
setLoginTypeTip(tr("Failed to verify %1, please enter password to unlock").arg(getDeviceType_tr(m_deviceInfo->deviceType)));
@ -1424,11 +1439,11 @@ void AuthDialog::skipBiometricAuth()
void AuthDialog::initBiometricWidget()
{
if(m_loginOpts) {
m_loginOpts->setUser(m_curUserInfo.uid());
m_loginOpts->setUser(m_curUserInfo->uid());
} else {
QHBoxLayout *optsLayout = new QHBoxLayout(m_widgetLoginOpts);
optsLayout->setContentsMargins(0,0,0,0);
m_loginOpts = new LoginOptionsWidget(m_biometricProxy, m_curUserInfo.uid(), m_uniauthService, m_widgetLoginOpts);
m_loginOpts = new LoginOptionsWidget(m_biometricProxy, m_curUserInfo->uid(), m_uniauthService, m_widgetLoginOpts);
optsLayout->addWidget(m_loginOpts);
connect(m_loginOpts, &LoginOptionsWidget::authComplete,
this, &AuthDialog::onBiometricAuthComplete);
@ -1442,7 +1457,7 @@ void AuthDialog::initBiometricWidget()
this, &AuthDialog::onLoginOptsCount);
connect(m_loginOpts, &LoginOptionsWidget::updateAuthMsg,
this, &AuthDialog::setLoginMsg);
m_loginOpts->setUser(m_curUserInfo.uid());
m_loginOpts->setUser(m_curUserInfo->uid());
}
qDebug()<<"OptsCount:"<<m_loginOpts->getLoginOptCount();
@ -1503,7 +1518,7 @@ void AuthDialog::onLoginOptsCount(unsigned uCount)
}
//获取默认设备
if(m_curUserInfo.name() == "*login"){
if(m_curUserInfo->name() == "*login"){
if(isLoadingUkey){
m_deviceName = m_loginOpts->getDefaultDevice(m_strManualLoginName,UniT_General_Ukey);
}else{
@ -1511,9 +1526,9 @@ void AuthDialog::onLoginOptsCount(unsigned uCount)
}
} else{
if(isLoadingUkey){
m_deviceName = m_loginOpts->getDefaultDevice(m_curUserInfo.name(),UniT_General_Ukey);
m_deviceName = m_loginOpts->getDefaultDevice(m_curUserInfo->name(),UniT_General_Ukey);
}else{
m_deviceName = m_loginOpts->getDefaultDevice(m_curUserInfo.name());
m_deviceName = m_loginOpts->getDefaultDevice(m_curUserInfo->name());
}
}
@ -1539,7 +1554,7 @@ void AuthDialog::onLoginOptsCount(unsigned uCount)
}
//已经错误超过3次
if(m_failMap.contains(m_curUserInfo.uid()) && m_failMap[m_curUserInfo.uid()][m_deviceInfo->id] >= maxFailedTimes)
if(m_failMap.contains(m_curUserInfo->uid()) && m_failMap[m_curUserInfo->uid()][m_deviceInfo->id] >= maxFailedTimes)
{
if (m_deviceInfo->deviceType == UniT_Remote) {
setLoginTypeTip(tr("Failed to verify %1, please enter password to unlock").arg(getDeviceType_tr(m_deviceInfo->deviceType)));
@ -1620,7 +1635,7 @@ void AuthDialog::onDeviceChanged(unsigned uCurLoginOptType, const DeviceInfoPtr
if(deviceInfo)
qDebug() << "device changed: " << *deviceInfo;
if(deviceInfo && m_failMap[m_curUserInfo.uid()][deviceInfo->id] >= maxFailedTimes){
if(deviceInfo && m_failMap[m_curUserInfo->uid()][deviceInfo->id] >= maxFailedTimes){
qDebug() << "Failed MAX!!";
return ;
}
@ -1670,18 +1685,18 @@ void AuthDialog::onBiometricAuthComplete(bool result, int nStatus)
return;
} else if (nStatus >= 2 && nStatus != 5){
if (m_deviceInfo) {
if(m_failMap.contains(m_curUserInfo.uid()) && m_failMap[m_curUserInfo.uid()].contains(m_deviceInfo->id)){
m_failMap[m_curUserInfo.uid()][m_deviceInfo->id] = m_failMap[m_curUserInfo.uid()][m_deviceInfo->id] + 1;
if(m_failMap.contains(m_curUserInfo->uid()) && m_failMap[m_curUserInfo->uid()].contains(m_deviceInfo->id)){
m_failMap[m_curUserInfo->uid()][m_deviceInfo->id] = m_failMap[m_curUserInfo->uid()][m_deviceInfo->id] + 1;
}else{
m_failMap[m_curUserInfo.uid()][m_deviceInfo->id] = 1;
m_failMap[m_curUserInfo->uid()][m_deviceInfo->id] = 1;
}
qDebug()<<"Failed count:"<<m_failMap[m_curUserInfo.uid()][m_deviceInfo->id]<<",Max:"<<maxFailedTimes;
qDebug()<<"Failed count:"<<m_failMap[m_curUserInfo->uid()][m_deviceInfo->id]<<",Max:"<<maxFailedTimes;
if (m_deviceInfo->deviceType == BioT_Face) {
QImage imgFailed;
setFaceImg(imgFailed, 1);
m_fTimeoutTimes = 0;
}
if(m_failMap[m_curUserInfo.uid()][m_deviceInfo->id] >= maxFailedTimes){
if(m_failMap[m_curUserInfo->uid()][m_deviceInfo->id] >= maxFailedTimes){
if (m_deviceInfo->deviceType == UniT_Remote) {
setLoginTypeTip(tr("Failed to verify %1, please enter password to unlock").arg(getDeviceType_tr(m_deviceInfo->deviceType)));
QImage nullImage;
@ -1704,11 +1719,11 @@ void AuthDialog::onBiometricAuthComplete(bool result, int nStatus)
if(m_deviceInfo->deviceType == LOGINOPT_TYPE_GENERAL_UKEY){
setUkeyTypeTip(tr("Failed to verify %1, you still have %2 verification opportunities")
.arg(getDeviceType_tr(m_deviceInfo->deviceType))
.arg(maxFailedTimes-m_failMap[m_curUserInfo.uid()][m_deviceInfo->id]));
.arg(maxFailedTimes-m_failMap[m_curUserInfo->uid()][m_deviceInfo->id]));
}else {
setLoginTypeTip(tr("Failed to verify %1, you still have %2 verification opportunities")
.arg(getDeviceType_tr(m_deviceInfo->deviceType))
.arg(maxFailedTimes-m_failMap[m_curUserInfo.uid()][m_deviceInfo->id]));
.arg(maxFailedTimes-m_failMap[m_curUserInfo->uid()][m_deviceInfo->id]));
}
}
}
@ -1831,10 +1846,10 @@ void AuthDialog::onBiometricDbusChanged(bool bActive)
//获取默认设备
if (m_loginOpts) {
if(m_curUserInfo.name() == "*login")
if(m_curUserInfo->name() == "*login")
m_deviceName = m_loginOpts->getDefaultDevice(m_strManualLoginName);
else
m_deviceName = m_loginOpts->getDefaultDevice(m_curUserInfo.name());
m_deviceName = m_loginOpts->getDefaultDevice(m_curUserInfo->name());
}
qDebug() << m_deviceName;
if (m_deviceInfo) {
@ -1858,7 +1873,7 @@ void AuthDialog::onBiometricDbusChanged(bool bActive)
}
//已经错误超过3次
if(m_failMap.contains(m_curUserInfo.uid()) && m_failMap[m_curUserInfo.uid()][m_deviceInfo->id] >= maxFailedTimes) {
if(m_failMap.contains(m_curUserInfo->uid()) && m_failMap[m_curUserInfo->uid()][m_deviceInfo->id] >= maxFailedTimes) {
if (m_deviceInfo->deviceType == UniT_Remote) {
setLoginTypeTip(tr("Failed to verify %1, please enter password to unlock").arg(getDeviceType_tr(m_deviceInfo->deviceType)));
} else {
@ -1951,17 +1966,12 @@ QString AuthDialog::onCustomRequest(QString strReqJson)
if (reqType == "GetInformations") { // 请求信息
QString strType = rootObj.value("Type").toString();
if (strType.contains("CurrentUser")) { // 当前用户信息
if (m_curUserInfo.uid() >= 0 && !m_curUserInfo.name().isEmpty() && !m_curUserInfo.name().startsWith("*")) {
if (m_curUserInfo->uid() >= 0 && !m_curUserInfo->name().isEmpty() && !m_curUserInfo->name().startsWith("*")) {
QJsonObject user;
user["Name"] = m_curUserInfo.name();
user["Id"] = (double)(m_curUserInfo.uid());
QFile faceFile(m_face);
if (!faceFile.exists()) {
user["HeadImg"] = m_strDefaultFace;
} else {
user["HeadImg"] = m_face;
}
user["RealName"] = m_curUserInfo.fullName();
user["Name"] = m_curUserInfo->name();
user["Id"] = (double)(m_curUserInfo->uid());
user["HeadImg"] = m_curUserInfo->headImage();
user["RealName"] = m_curUserInfo->fullName();
contentObj["CurrentUser"] = user;
} else {
retObj["Ret"] = -1;

View File

@ -25,7 +25,7 @@ class AuthDialog : public QWidget
Q_OBJECT
public:
explicit AuthDialog(LockDialogModel *model, UserInfo userInfo, QWidget *parent = nullptr);
explicit AuthDialog(LockDialogModel *model, UserInfoPtr userInfo, QWidget *parent = nullptr);
void initUI();
void switchLoginOptType(unsigned uLoginOptType,bool faceBtnClicked = false);
@ -33,8 +33,8 @@ public:
public:
void startAuth();
void stopAuth();
void onCurUserChanged(const UserInfo &userInfo);
void onCurUserInfoChanged(const UserInfo &userInfo);
void onCurUserChanged(UserInfoPtr userInfo);
void onCurUserInfoChanged(UserInfoPtr userInfo);
void updateUI();
void updateAuthSize();
@ -125,6 +125,7 @@ private:
void initMessagerWidget();
void initUkeyPasswordWidget();
void initLoginoptionWidget();
void initCustomAuthWidget();
void showAuthenticated(bool successful = true);
void initConnections();
@ -140,7 +141,6 @@ private:
void restartBioAuth();
void waitBiometricServiceStatus();
QString getDeviceType_tr(int deviceType);
void setFace(const QString& facePath);
void updatePixmap();
@ -157,7 +157,6 @@ private:
KLabel *m_nameLabel = nullptr; //用户名
QWidget *m_editWidget = nullptr;
QWidget *m_messageWidget = nullptr;
IconEdit *m_passwordEdit = nullptr; //密码输入框
KLabel *m_messageLabel = nullptr; //PAM消息显示
QPushButton *m_messageButton = nullptr; //免密登录按钮
@ -184,7 +183,7 @@ private:
BioButtonListWidget *bottomListWidget = nullptr;
UserInfo m_curUserInfo;
UserInfoPtr m_curUserInfo;
bool m_bRecvPrompt = false;
bool m_bHasUnacknowledgedMsg = false;
bool m_bDirectLogin = false;

View File

@ -21,6 +21,7 @@
#include <QDebug>
#include <QStyleOption>
#include <QPainter>
#include <QEvent>
BatteryWidget::BatteryWidget(LockDialogModel *model, QWidget *parent) :
QWidget(parent),
@ -107,14 +108,14 @@ void BatteryWidget::paintEvent(QPaintEvent *event)
void BatteryWidget::onBatteryChanged(QStringList args)
{
int battery = args.at(0).toInt();
int batteryState = args.at(1).toInt();
if (batteryState == 1 || batteryState == 5) {
m_nCurBatteryValue = args.at(0).toInt();
m_nCurBatteryState = args.at(1).toInt();
if (m_nCurBatteryState == 1 || m_nCurBatteryState == 5) {
mStatusLabel->setText(tr("Charging..."));
} else if (batteryState == 4) {
} else if (m_nCurBatteryState == 4) {
mStatusLabel->setText(tr("fully charged"));
}
if (batteryState == 4 || batteryState == 1 || batteryState == 5) {
if (m_nCurBatteryState == 4 || m_nCurBatteryState == 1 || m_nCurBatteryState == 5) {
mStatusLabel->setVisible(true);
mModeLabel->setText(tr("PowerMode"));
} else {
@ -122,10 +123,35 @@ void BatteryWidget::onBatteryChanged(QStringList args)
mModeLabel->setText(tr("BatteryMode"));
}
mValueLabel->setText(QString("<font size='5';font color=#262626>%1</font>%").arg(battery));
mValueLabel->setText(QString("<font size='5';font color=#262626>%1</font>%").arg(m_nCurBatteryValue));
}
void BatteryWidget::onBatteryStatusChanged(QString iconName)
{
mIconBtn->setIcon(QIcon::fromTheme(iconName));
}
void BatteryWidget::changeEvent(QEvent *event)
{
if(event->type() == QEvent::LanguageChange){
refreshTranslate();
}
}
void BatteryWidget::refreshTranslate()
{
if (m_nCurBatteryState == 1 || m_nCurBatteryState == 5) {
mStatusLabel->setText(tr("Charging..."));
} else if (m_nCurBatteryState == 4) {
mStatusLabel->setText(tr("fully charged"));
}
if (m_nCurBatteryState == 4 || m_nCurBatteryState == 1 || m_nCurBatteryState == 5) {
mStatusLabel->setVisible(true);
mModeLabel->setText(tr("PowerMode"));
} else {
mStatusLabel->setVisible(false);
mModeLabel->setText(tr("BatteryMode"));
}
mValueLabel->setText(QString("<font size='5';font color=#262626>%1</font>%").arg(m_nCurBatteryValue));
}

View File

@ -38,6 +38,7 @@ public:
protected:
void paintEvent(QPaintEvent *event);
void changeEvent(QEvent *event);
private:
LockDialogModel *m_modelLockDialog = nullptr;
@ -46,11 +47,13 @@ private:
QLabel *mValueLabel;
QLabel *mStatusLabel;
QPoint mPoint;
int m_nCurBatteryValue;
int m_nCurBatteryState;
private Q_SLOTS:
void onBatteryChanged(QStringList args);
void onBatteryStatusChanged(QString iconName);
void refreshTranslate();
};
#endif // BATTERYWIDGET_H

View File

@ -79,6 +79,8 @@ void BlockWidget::setTips(const QString tips)
m_tipLabel->show();
m_listView->hide();
m_tipLabel->setText(tips);
m_cancelButton->setText(tr("Cancel"));
m_confirmButton->setText(tr("Confrim"));
}
void BlockWidget::setWarning(QStringList list, int type)
@ -130,5 +132,7 @@ void BlockWidget::setWarning(QStringList list, int type)
"QPushButton:pressed {background: rgba(255, 255, 255, 0.3);border-radius: 8px;}");
sysFont.setPointSize((16 + m_curFontSize) *m_ptToPx);
m_cancelButton->setFont(sysFont);
m_cancelButton->setText(tr("Cancel"));
m_confirmButton->setText(tr("Confrim"));
}

View File

@ -545,6 +545,7 @@ void FullBackgroundWidget::showEvent(QShowEvent *event)
{
if(QX11Info::isPlatformX11())
tryGrabKeyboard();
KWindowSystem::setType(this->winId(), NET::ScreenLock);
}
void FullBackgroundWidget::tryGrabKeyboard()

View File

@ -63,12 +63,9 @@ IconEdit::IconEdit(LockDialogModel *model, QWidget *parent)
m_iconButton = new QPushButton(this);
m_iconButton->installEventFilter(this);
m_iconButton->setFixedSize(24, 24);
m_iconButton->setIconSize(QSize(24, 24));
m_iconButton->setFixedSize(24*scale, 24*scale);
m_iconButton->setProperty("isRoundButton", true);
m_iconButton->setProperty("isImportant", true);
setIcon(QIcon::fromTheme("go-next-symbolic"));
QHBoxLayout *layout = new QHBoxLayout(this);
layout->setContentsMargins(1, 1, 8, 1);
@ -141,11 +138,12 @@ bool IconEdit::eventFilter(QObject *obj, QEvent *event)
return false;
}
void IconEdit::setIcon(const QIcon &icon)
void IconEdit::setIcon(const QIcon &icon, const QSize &size)
{
m_iconButton->setIcon(icon);
m_iconButton->setText("");
m_iconButton->setIconSize(QSize(24, 24));
m_sizeIconBtn = size;
m_iconButton->setIconSize(QSize(m_sizeIconBtn.width()*scale, m_sizeIconBtn.height()*scale));
m_icon = icon;
m_iconText = "";
}
@ -230,7 +228,7 @@ void IconEdit::stopWaiting()
m_edit->setReadOnly(false);
if (!m_icon.isNull()) {
m_iconButton->setIcon(m_icon);
m_iconButton->setIconSize(QSize(24*scale, 24*scale));
m_iconButton->setIconSize(QSize(m_sizeIconBtn.width()*scale, m_sizeIconBtn.height()*scale));
} else {
m_iconButton->setText(m_iconText);
}

View File

@ -38,7 +38,7 @@ class IconEdit : public QWidget
public:
IconEdit(LockDialogModel *model,QWidget *parent = 0);
void setIcon(const QIcon &icon);
void setIcon(const QIcon &icon, const QSize &size);
void clear();
void clearText();
void setPrompt(const QString &);
@ -79,6 +79,7 @@ private:
QTimer *m_timer = nullptr;
QPixmap m_waitingPixmap;
bool m_capsState = false;
QSize m_sizeIconBtn;
};
#endif // ICONEDIT_H

View File

@ -32,6 +32,7 @@
#include "blockwidget.h"
#include "pluginsloader.h"
#include "global_utils.h"
#include "../lock-dialog/languagesetting.h"
#define BLUR_RADIUS 300
#define RIGHT_MARGIN 24
@ -45,10 +46,7 @@ LockWidget::LockWidget(LockDialogModel *model, QWidget *parent)
, m_modelLockDialog(model)
{
scale = 1.0;
UserInfoPtr ptrUser = m_modelLockDialog->findUserByName(m_modelLockDialog->defaultUserName());
if (ptrUser) {
m_curUserInfo = *ptrUser;
}
m_curUserInfo = m_modelLockDialog->findUserByName(m_modelLockDialog->defaultUserName());
initUI();
initConnections();
initUsdMediaKeys();
@ -193,7 +191,7 @@ void LockWidget::resizeEvent(QResizeEvent *event)
m_powerListWidget->move((width() - m_powerListWidget->width())/2, (height() - m_powerListWidget->height())/2 - BOTTOM_MARGIN*scale);
updateBottomButton();
if (m_curUserInfo.isLoggedIn() && m_sessionButton) {
if (m_curUserInfo->isLoggedIn() && m_sessionButton) {
buttonListWidget->setFixedSize(QSize(48*(buttonListWidget->count() - 1) + buttonListWidget->spacing()*2*(buttonListWidget->count() - 1), 64));
} else {
buttonListWidget->setFixedSize(QSize(48*buttonListWidget->count() + buttonListWidget->spacing()*2*buttonListWidget->count(), 64));
@ -311,6 +309,7 @@ void LockWidget::initConnections()
connect(authDialog, &AuthDialog::customRequestAccount,
this, &LockWidget::onCustomRequestAccount);
}
connect(LanguageSetting::instance(this), &LanguageSetting::languageChanged, this, &LockWidget::onLanguageChanged);
}
void LockWidget::initTimeWidget()
{
@ -329,6 +328,10 @@ void LockWidget::initUserWidget()
connect(m_userListWidget, &UserListWidget::userSelected, m_modelLockDialog, [=](QString strUserName){
SwitchToUser(strUserName);
});
connect(m_userListWidget, &UserListWidget::widgetSizeChanged, m_modelLockDialog, [=](){
m_userListWidget->move(width() - m_userListWidget->width() - RIGHT_MARGIN,
height()- BOTTOM_MARGIN*scale - buttonListWidget->height() - buttonListWidget->spacing()*scale - m_userListWidget->height());
});
m_userListWidget->clearFocus();
m_userListWidget->move(width() - m_userListWidget->width() - RIGHT_MARGIN,
height()- BOTTOM_MARGIN*scale - buttonListWidget->height() - buttonListWidget->spacing()*scale - m_userListWidget->height());
@ -385,7 +388,7 @@ void LockWidget::initButtonWidget()
buttonListWidget->setItemWidget(m_btnItemSession, m_sessionButton);
buttonListWidget->addItem(m_btnItemSession);
m_sessionButton->setObjectName("BtnSession");
if (m_curUserInfo.isLoggedIn()) {
if (m_curUserInfo->isLoggedIn()) {
buttonListWidget->setItemHidden(m_btnItemSession, true);
} else {
buttonListWidget->setItemHidden(m_btnItemSession, false);
@ -494,7 +497,7 @@ void LockWidget::initButtonWidget()
});
}
if (m_curUserInfo.isLoggedIn() && m_sessionButton) {
if (m_curUserInfo->isLoggedIn() && m_sessionButton) {
buttonListWidget->setFixedSize(QSize(48*(buttonListWidget->count() - 1) + buttonListWidget->spacing()*2*(buttonListWidget->count() - 1), 64));
} else {
buttonListWidget->setFixedSize(QSize(48*buttonListWidget->count() + buttonListWidget->spacing()*2*buttonListWidget->count(), 64));
@ -642,9 +645,9 @@ void LockWidget::onUsersInfoChanged()
height()- BOTTOM_MARGIN*scale - buttonListWidget->height() - buttonListWidget->spacing()*scale - m_userListWidget->height());
}
}
UserInfoPtr ptrUser = m_modelLockDialog->findUserByName(m_curUserInfo.name());
UserInfoPtr ptrUser = m_modelLockDialog->findUserByName(m_curUserInfo->name());
if (ptrUser) {
m_curUserInfo = *ptrUser;
m_curUserInfo = ptrUser;
if (authDialog) {
authDialog->onCurUserInfoChanged(m_curUserInfo);
}
@ -654,11 +657,16 @@ void LockWidget::onUsersInfoChanged()
void LockWidget::onCurUserChanged(const QString &strUserName)
{
UserInfoPtr ptrUser = m_modelLockDialog->findUserByName(strUserName);
if (ptrUser && authDialog) {
m_curUserInfo = *ptrUser;
if (ptrUser) {
m_curUserInfo = ptrUser;
qDebug()<<"CurUserInfo:"<<*m_curUserInfo;
if (m_curUserInfo->name() != "*login" && m_curUserInfo->name() != "*guest") {
LanguageSetting::instance()->onLanguageChanged(m_curUserInfo->lang());
}
if (authDialog)
authDialog->onCurUserChanged(m_curUserInfo);
}
if (m_btnItemSession && m_curUserInfo.isLoggedIn()) {
if (m_btnItemSession && m_curUserInfo->isLoggedIn()) {
buttonListWidget->setItemHidden(m_btnItemSession, true);
} else {
buttonListWidget->setItemHidden(m_btnItemSession, false);
@ -795,6 +803,7 @@ void LockWidget::onShowNetworkWidget()
m_networkWidget = new MyNetworkWidget(this);
m_networkWidget->installEventFilter(this);
}
m_networkWidget->loadNetPlugin();
m_networkWidget->setGeometry(this->width() - m_networkWidget->width() - RIGHT_MARGIN*scale,
this->height() - m_networkWidget->height() - BOTTOM_MARGIN*scale - buttonListWidget->spacing()*scale - buttonListWidget->height(),
m_networkWidget->width(),
@ -1053,3 +1062,12 @@ void LockWidget::SwitchToUser(QString strUserName)
}
}
}
void LockWidget::onLanguageChanged(bool isCompleted)
{
if (isCompleted) {
if (m_networkWidget) {
m_networkWidget->unloadNetPlugin();
}
}
}

View File

@ -119,6 +119,8 @@ private Q_SLOTS:
void onSessionActiveChanged(bool isActive);
void onLanguageChanged(bool isCompleted);
Q_SIGNALS:
void authSucceed(QString strUserName);
@ -138,7 +140,7 @@ private:
LockDialogModel *m_modelLockDialog = nullptr;
UserInfo m_curUserInfo;
UserInfoPtr m_curUserInfo;
AuthDialog *authDialog = nullptr;
QTimer *m_timerChkActive = nullptr;

View File

@ -16,7 +16,6 @@ MyNetworkWidget::MyNetworkWidget(QWidget *parent) : QWidget(parent)
{
setObjectName("m_networkWidget");
setStyleSheet("#m_networkWidget{background-color: white; border-radius:12px;}");
loadNetPlugin();
}
void MyNetworkWidget::loadNetPlugin()

View File

@ -12,6 +12,9 @@ class MyNetworkWidget : public QWidget
public:
explicit MyNetworkWidget(QWidget *parent = nullptr);
void loadNetPlugin();
void unloadNetPlugin();
private Q_SLOTS:
/**
* @brief 线线
@ -25,8 +28,6 @@ private Q_SLOTS:
void paintEvent(QPaintEvent *p1);
private:
void loadNetPlugin();
void unloadNetPlugin();
void sendNetPluginVisible(bool visible);
QPluginLoader netloader;

View File

@ -143,3 +143,32 @@ void PowerListWidget::setSystemPowerStatus(QString statusName)
qWarning() << __LINE__ << __FUNCTION__ << statusName;
}
void PowerListWidget::changeEvent(QEvent *event)
{
if(event->type() == QEvent::LanguageChange){
refreshTranslate();
}
}
void PowerListWidget::refreshTranslate()
{
for (int i = 0; i < sizeof(powerBtnList)/sizeof(powerBtnList[0]) ; i++)
{
if (powerBtnList[i].setFuncName == "Hibernate") {
powerBtnList[i].m_strName = tr("Hibernate");
powerBtnList[i].m_strToolTip = tr("Turn off your computer, but the app stays open. When the computer is turned on, it can be restored to the state you left");
} else if (powerBtnList[i].setFuncName == "Suspend") {
powerBtnList[i].m_strName = tr("Suspend");
powerBtnList[i].m_strToolTip = tr("The computer stays on, but consumes less power. The app stays open and can quickly wake up and revert to where you left off");
} else if (powerBtnList[i].setFuncName == "Reboot") {
powerBtnList[i].m_strName = tr("Restart");
powerBtnList[i].m_strToolTip = tr("The computer stays on, but consumes less power. The app stays open and can quickly wake up and revert to where you left off");
} else if (powerBtnList[i].setFuncName == "PowerOff") {
powerBtnList[i].m_strName = tr("Power Off");
powerBtnList[i].m_strToolTip = tr("Close all apps, and then shut down your computer");
}
}
onUpdateListInfo();
}

View File

@ -121,6 +121,7 @@ public:
protected:
bool eventFilter(QObject *obj, QEvent *event);
void changeEvent(QEvent *event);
Q_SIGNALS:
void mulUsersLogined(QString inhibitType);
@ -143,6 +144,7 @@ private:
void initUI();
void initBtnShowFlag();
void initConnections();
void refreshTranslate();
// void initDBusInterface();
};

View File

@ -44,8 +44,6 @@ void SessionListWidget::initConnections()
{
// 响应点击事件
connect(this, &SessionListWidget::itemClicked, this, &SessionListWidget::onListItemClicked);
connect(m_modelLockDialog, &LockDialogModel::usersInfoChanged, this, &SessionListWidget::onUpdateListInfo);
}
void SessionListWidget::onUpdateListInfo()
@ -66,6 +64,7 @@ void SessionListWidget::onListItemClicked(QListWidgetItem *item)
QWidget *widget = itemWidget(item);
SessionItemWidget *currentItem = qobject_cast<SessionItemWidget *>(widget);
if (currentItem) {
this->hide();
Q_EMIT sessionSelected(currentItem->sessionName());
}
}

View File

@ -42,7 +42,13 @@ void UserListWidget::onUpdateListInfo()
UserItemWidget *itemWidget = new UserItemWidget(this);
QPixmap p(user->headImage());
itemWidget->setUserPixmap(p);
if (user->name() == "*login") {
itemWidget->setUserNickName(tr("Login"));
} else if (user->name() == "*guest") {
itemWidget->setUserNickName(tr("Guest"));
} else {
itemWidget->setUserNickName(user->fullName());
}
itemWidget->setUserStatus(user->isLoggedIn());
if (user->fullName() == m_modelLockDialog->currentUserName()) {
setCurrentItem(userItem, QItemSelectionModel::SelectionFlag::SelectCurrent);
@ -71,4 +77,30 @@ void UserListWidget::updateWidgetSize()
setFixedHeight(count() * 40 + 10);
}
adjustSize();
Q_EMIT widgetSizeChanged();
}
void UserListWidget::changeEvent(QEvent *event)
{
if(event->type() == QEvent::LanguageChange){
refreshTranslate();
}
}
void UserListWidget::refreshTranslate()
{
for (int n = 0; n < count(); n++) {
QListWidgetItem *widgetItem = item(n);
if (widgetItem) {
QWidget *widget = itemWidget(widgetItem);
UserItemWidget *item = qobject_cast<UserItemWidget *>(widget);
if (item) {
if (item->getUserName() == "*login") {
item->setUserNickName(tr("Login"));
} else if (item->getUserName() == "*guest") {
item->setUserNickName(tr("Guest"));
}
}
}
}
}

View File

@ -22,10 +22,15 @@ public Q_SLOTS:
Q_SIGNALS:
void userSelected(QString strUserName);
void widgetSizeChanged();
protected:
void changeEvent(QEvent *event);
private:
void initUI();
void initConnections();
void refreshTranslate();
private:
LockDialogModel *m_modelLockDialog = nullptr;