From 1eab654ddf9ee53fe8420db0fd13b4dfb6158982 Mon Sep 17 00:00:00 2001 From: Emil Bohleber Date: Thu, 21 Nov 2024 14:14:11 +0100 Subject: [PATCH 001/371] add vscode configuration --- .gitignore | 6 ++- .vscode/launch.json | 54 +++++++++++++++++++++++ .vscode/nc-desktop-snippets.code-snippets | 30 +++++++++++++ .vscode/settings.json | 8 ++++ .vscode/tasks.json | 37 ++++++++++++++++ 5 files changed, 134 insertions(+), 1 deletion(-) create mode 100644 .vscode/launch.json create mode 100644 .vscode/nc-desktop-snippets.code-snippets create mode 100644 .vscode/settings.json create mode 100644 .vscode/tasks.json diff --git a/.gitignore b/.gitignore index ed0e17987fed5..579bacd987648 100644 --- a/.gitignore +++ b/.gitignore @@ -19,7 +19,7 @@ t1.cfg ## Ignore Visual Studio Code config & environment files .vs/ -.vscode/ +# .vscode/ ## Ignore Visual Studio temporary files, build results, and ## files generated by popular Visual Studio add-ons. @@ -192,3 +192,7 @@ convert.exe *state-*.png theme.qrc *.AppImage + +.idea/ + +shell_integration/MacOSX/NextcloudIntegration/NextcloudIntegration.xcodeproj/project.xcworkspace/xcshareddata/swiftpm/ diff --git a/.vscode/launch.json b/.vscode/launch.json new file mode 100644 index 0000000000000..3fe60132e26b1 --- /dev/null +++ b/.vscode/launch.json @@ -0,0 +1,54 @@ +{ + // Use IntelliSense to learn about possible attributes. + // Hover to view descriptions of existing attributes. + // For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387 + "version": "0.2.0", + "configurations": [ + + { + "name": "(RelWithDebInfo) Launch HiDriveNext", + "type": "cppvsdbg", + "request": "launch", + "program": "${workspaceFolder}/build/win32-MSVC-x64/RelWithDebInfo/bin/HiDriveNext.exe", + "args": [], + "stopAtEntry": false, + "cwd": "${workspaceFolder}", + "environment": [ + { + "name": "PATH", + "value": "C:/Craft64/bin;%PATH%" + }, + ], + }, + { + "name": "(RelWithDebInfo) Launch NextCloud", + "type": "cppvsdbg", + "request": "launch", + "program": "${workspaceFolder}/build/win32-MSVC-x64/RelWithDebInfo/bin/nextcloud.exe", + "args": [], + "stopAtEntry": false, + "cwd": "${workspaceFolder}", + "environment": [ + { + "name": "PATH", + "value": "C:/Craft64/bin;%PATH%" + }, + ], + }, + { + "name": "(Release) Launch NextCloud", + "type": "cppvsdbg", + "request": "launch", + "program": "${workspaceFolder}/build/win32-MSVC-x64/Release/bin/nextcloud.exe", + "args": [], + "stopAtEntry": false, + "cwd": "${workspaceFolder}", + "environment": [ + { + "name": "PATH", + "value": "C:/Craft64/bin;%PATH%" + }, + ], + }, + ] +} \ No newline at end of file diff --git a/.vscode/nc-desktop-snippets.code-snippets b/.vscode/nc-desktop-snippets.code-snippets new file mode 100644 index 0000000000000..920dea7cb70f6 --- /dev/null +++ b/.vscode/nc-desktop-snippets.code-snippets @@ -0,0 +1,30 @@ +{ + // Place your nc-desktop workspace snippets here. Each snippet is defined under a snippet name and has a scope, prefix, body and + // description. Add comma separated ids of the languages where the snippet is applicable in the scope field. If scope + // is left empty or omitted, the snippet gets applied to all languages. The prefix is what is + // used to trigger the snippet and the body will be expanded and inserted. Possible variables are: + // $1, $2 for tab stops, $0 for the final cursor position, and ${1:label}, ${2:another} for placeholders. + // Placeholders with the same ids are connected. + // Example: + // "Print to console": { + // "scope": "javascript,typescript", + // "prefix": "log", + // "body": [ + // "console.log('$1');", + // "$2" + // ], + // "description": "Log output to console" + // } + + "DebugLog": { + "scope": "cpp", + "prefix": "dlog", + "body": [ + "char buffer$1[256];", + "sprintf(buffer$1, \"$2\\n\", $3);", + "OutputDebugStringA(buffer$1);" + ], + "description": "Debug log output" + } + +} \ No newline at end of file diff --git a/.vscode/settings.json b/.vscode/settings.json new file mode 100644 index 0000000000000..0d75aa43d4575 --- /dev/null +++ b/.vscode/settings.json @@ -0,0 +1,8 @@ +{ + "cmake.generator": "Ninja", + "cmake.configureSettings": { + "CMAKE_PREFIX_PATH": "C:/Craft64", + "BUILD_TESTING":"OFF", + }, + "cmake.buildDirectory": "${workspaceFolder}/build/${buildKitTargetOs}-${buildKitVendor}-${buildKitTargetArch}/${buildType}", +} \ No newline at end of file diff --git a/.vscode/tasks.json b/.vscode/tasks.json new file mode 100644 index 0000000000000..988cc883ce738 --- /dev/null +++ b/.vscode/tasks.json @@ -0,0 +1,37 @@ +{ + "version": "2.0.0", + "tasks": [ + { + "label": "clean RelWithDebInfo", + "type": "shell", + "command": "powershell", + "args": [ + "-NoProfile", + "-Command", + "Remove-Item -Recurse -Force .\\build\\win32-MSVC-x64\\RelWithDebInfo" + ], + "problemMatcher": [], + "group": { + "kind": "build", + "isDefault": true + }, + "detail": "A task to clean the build directory using PowerShell" + }, + { + "label": "clean Release", + "type": "shell", + "command": "powershell", + "args": [ + "-NoProfile", + "-Command", + "Remove-Item -Recurse -Force .\\build\\win32-MSVC-x64\\Release" + ], + "problemMatcher": [], + "group": { + "kind": "build", + "isDefault": true + }, + "detail": "A task to clean the build directory using PowerShell" + }, + ] +} \ No newline at end of file From f6f0a486a22f3797f980d0a6af36931a1b81291f Mon Sep 17 00:00:00 2001 From: Emil Bohleber Date: Thu, 21 Nov 2024 14:15:05 +0100 Subject: [PATCH 002/371] add licence and notice --- LICENSE | 73 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++ NOTICE | 18 ++++++++++++++ 2 files changed, 91 insertions(+) create mode 100644 LICENSE create mode 100644 NOTICE diff --git a/LICENSE b/LICENSE new file mode 100644 index 0000000000000..eda7bae4c9726 --- /dev/null +++ b/LICENSE @@ -0,0 +1,73 @@ +Apache License, Version 2.0 Apache License Version 2.0, January 2004 http://www.apache.org/licenses/ + +TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + +1. Definitions. + +"License" shall mean the terms and conditions for use, reproduction, and distribution as defined by Sections 1 through 9 of this document. + +"Licensor" shall mean the copyright owner or entity authorized by the copyright owner that is granting the License. + +"Legal Entity" shall mean the union of the acting entity and all other entities that control, are controlled by, or are under common control with that entity. For the purposes of this definition, "control" means (i) the power, direct or indirect, to cause the direction or management of such entity, whether by contract or otherwise, or (ii) ownership of fifty percent (50%) or more of the outstanding shares, or (iii) beneficial ownership of such entity. + +"You" (or "Your") shall mean an individual or Legal Entity exercising permissions granted by this License. + +"Source" form shall mean the preferred form for making modifications, including but not limited to software source code, documentation source, and configuration files. + +"Object" form shall mean any form resulting from mechanical transformation or translation of a Source form, including but not limited to compiled object code, generated documentation, and conversions to other media types. + +"Work" shall mean the work of authorship, whether in Source or Object form, made available under the License, as indicated by a copyright notice that is included in or attached to the work (an example is provided in the Appendix below). + +"Derivative Works" shall mean any work, whether in Source or Object form, that is based on (or derived from) the Work and for which the editorial revisions, annotations, elaborations, or other modifications represent, as a whole, an original work of authorship. For the purposes of this License, Derivative Works shall not include works that remain separable from, or merely link (or bind by name) to the interfaces of, the Work and Derivative Works thereof. + +"Contribution" shall mean any work of authorship, including the original version of the Work and any modifications or additions to that Work or Derivative Works thereof, that is intentionally submitted to Licensor for inclusion in the Work by the copyright owner or by an individual or Legal Entity authorized to submit on behalf of the copyright owner. For the purposes of this definition, "submitted" means any form of electronic, verbal, or written communication sent to the Licensor or its representatives, including but not limited to communication on electronic mailing lists, source code control systems, and issue tracking systems that are managed by, or on behalf of, the Licensor for the purpose of discussing and improving the Work, but excluding communication that is conspicuously marked or otherwise designated in writing by the copyright owner as "Not a Contribution." + +"Contributor" shall mean Licensor and any individual or Legal Entity on behalf of whom a Contribution has been received by Licensor and subsequently incorporated within the Work. + +2. Grant of Copyright License. + +Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable copyright license to reproduce, prepare Derivative Works of, publicly display, publicly perform, sublicense, and distribute the Work and such Derivative Works in Source or Object form. + +3. Grant of Patent License. + +Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable (except as stated in this section) patent license to make, have made, use, offer to sell, sell, import, and otherwise transfer the Work, where such license applies only to those patent claims licensable by such Contributor that are necessarily infringed by their Contribution(s) alone or by combination of their Contribution(s) with the Work to which such Contribution(s) was submitted. If You institute patent litigation against any entity (including a cross-claim or counterclaim in a lawsuit) alleging that the Work or a Contribution incorporated within the Work constitutes direct or contributory patent infringement, then any patent licenses granted to You under this License for that Work shall terminate as of the date such litigation is filed. + +4. Redistribution. + +You may reproduce and distribute copies of the Work or Derivative Works thereof in any medium, with or without modifications, and in Source or Object form, provided that You meet the following conditions: + +You must give any other recipients of the Work or Derivative Works a copy of this License; and You must cause any modified files to carry prominent notices stating that You changed the files; and You must retain, in the Source form of any Derivative Works that You distribute, all copyright, patent, trademark, and attribution notices from the Source form of the Work, excluding those notices that do not pertain to any part of the Derivative Works; and If the Work includes a "NOTICE" text file as part of its distribution, then any Derivative Works that You distribute must include a readable copy of the attribution notices contained within such NOTICE file, excluding those notices that do not pertain to any part of the Derivative Works, in at least one of the following places: within a NOTICE text file distributed as part of the Derivative Works; within the Source form or documentation, if provided along with the Derivative Works; or, within a display generated by the Derivative Works, if and wherever such third-party notices normally appear. The contents of the NOTICE file are for informational purposes only and do not modify the License. You may add Your own attribution notices within Derivative Works that You distribute, alongside or as an addendum to the NOTICE text from the Work, provided that such additional attribution notices cannot be construed as modifying the License. You may add Your own copyright statement to Your modifications and may provide additional or different license terms and conditions for use, reproduction, or distribution of Your modifications, or for any such Derivative Works as a whole, provided Your use, reproduction, and distribution of the Work otherwise complies with the conditions stated in this License. + +5. Submission of Contributions. + +Unless You explicitly state otherwise, any Contribution intentionally submitted for inclusion in the Work by You to the Licensor shall be under the terms and conditions of this License, without any additional terms or conditions. Notwithstanding the above, nothing herein shall supersede or modify the terms of any separate license agreement you may have executed with Licensor regarding such Contributions. + +6. Trademarks. + +This License does not grant permission to use the trade names, trademarks, service marks, or product names of the Licensor, except as required for reasonable and customary use in describing the origin of the Work and reproducing the content of the NOTICE file. + +7. Disclaimer of Warranty. + +Unless required by applicable law or agreed to in writing, Licensor provides the Work (and each Contributor provides its Contributions) on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied, including, without limitation, any warranties or conditions of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A PARTICULAR PURPOSE. You are solely responsible for determining the appropriateness of using or redistributing the Work and assume any risks associated with Your exercise of permissions under this License. + +8. Limitation of Liability. + +In no event and under no legal theory, whether in tort (including negligence), contract, or otherwise, unless required by applicable law (such as deliberate and grossly negligent acts) or agreed to in writing, shall any Contributor be liable to You for damages, including any direct, indirect, special, incidental, or consequential damages of any character arising as a result of this License or out of the use or inability to use the Work (including but not limited to damages for loss of goodwill, work stoppage, computer failure or malfunction, or any and all other commercial damages or losses), even if such Contributor has been advised of the possibility of such damages. + +9. Accepting Warranty or Additional Liability. + +While redistributing the Work or Derivative Works thereof, You may choose to offer, and charge a fee for, acceptance of support, warranty, indemnity, or other liability obligations and/or rights consistent with this License. However, in accepting such obligations, You may act only on Your own behalf and on Your sole responsibility, not on behalf of any other Contributor, and only if You agree to indemnify, defend, and hold each Contributor harmless for any liability incurred by, or claims asserted against, such Contributor by reason of your accepting any such warranty or additional liability. + +END OF TERMS AND CONDITIONS + +APPENDIX: How to apply the Apache License to your work + +To apply the Apache License to your work, attach the following boilerplate notice, with the fields enclosed by brackets "[]" replaced with your own identifying information. (Don't include the brackets!) The text should be enclosed in the appropriate comment syntax for the file format. We also recommend that a file or class name and description of purpose be included on the same "printed page" as the copyright notice for easier identification within third-party archives. + +Copyright 2022-2024 chinchilla + +Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at + +http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. \ No newline at end of file diff --git a/NOTICE b/NOTICE new file mode 100644 index 0000000000000..59ff260650176 --- /dev/null +++ b/NOTICE @@ -0,0 +1,18 @@ +Nextcloud Desktop - Ionos HiDrive Next + +This project includes software developed by chinchilla, available at: +[https://github.com/564398053/Qt-GoogleAnalytics4]. + +Bundled Components: + Qt-GoogleAnalytics4 + ga4/ganalytics.cpp + ga4/ganalytics_worker.cpp + Copyright 2022 chinchilla + Licensed under the Apache License, Version 2.0. + You may obtain a copy of the license at: + [http://www.apache.org/licenses/LICENSE-2.0]. + + +Important Note: +The rest of this project is not licensed under the Apache License, Version 2.0. It remains under the original license as specified in the original repository: +[https://github.com/IONOS-Productivity/nc-desktop]. \ No newline at end of file From 695e8bbd76e419c2f6c7bfa842153b46c495c471 Mon Sep 17 00:00:00 2001 From: Emil Bohleber Date: Thu, 21 Nov 2024 14:16:22 +0100 Subject: [PATCH 003/371] add ionos fonts --- fonts/OpenSans-Bold.ttf | Bin 0 -> 104120 bytes fonts/OpenSans-BoldItalic.ttf | Bin 0 -> 92628 bytes fonts/OpenSans-ExtraBold.ttf | Bin 0 -> 102076 bytes fonts/OpenSans-ExtraBoldItalic.ttf | Bin 0 -> 92772 bytes fonts/OpenSans-Italic.ttf | Bin 0 -> 92240 bytes fonts/OpenSans-Light.ttf | Bin 0 -> 101696 bytes fonts/OpenSans-LightItalic.ttf | Bin 0 -> 92488 bytes fonts/OpenSans-Regular.ttf | Bin 0 -> 96932 bytes fonts/OpenSans-SemiBold.ttf | Bin 0 -> 100820 bytes fonts/OpenSans-SemiBoldItalic.ttf | Bin 0 -> 92180 bytes 10 files changed, 0 insertions(+), 0 deletions(-) create mode 100644 fonts/OpenSans-Bold.ttf create mode 100644 fonts/OpenSans-BoldItalic.ttf create mode 100644 fonts/OpenSans-ExtraBold.ttf create mode 100644 fonts/OpenSans-ExtraBoldItalic.ttf create mode 100644 fonts/OpenSans-Italic.ttf create mode 100644 fonts/OpenSans-Light.ttf create mode 100644 fonts/OpenSans-LightItalic.ttf create mode 100644 fonts/OpenSans-Regular.ttf create mode 100644 fonts/OpenSans-SemiBold.ttf create mode 100644 fonts/OpenSans-SemiBoldItalic.ttf diff --git a/fonts/OpenSans-Bold.ttf b/fonts/OpenSans-Bold.ttf new file mode 100644 index 0000000000000000000000000000000000000000..efdd5e84a0397ecada7b9cfde51db87db08766bd GIT binary patch literal 104120 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

n{#NV($fZ=b2Ttd7 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 -Ui0>vvum!cQP#SwwX988o3plLZOz)* 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 literal 0 HcmV?d00001 diff --git a/fonts/OpenSans-BoldItalic.ttf b/fonts/OpenSans-BoldItalic.ttf new file mode 100644 index 0000000000000000000000000000000000000000..9bf9b4e97b6576c8cc3d4527073731fd9cc57493 GIT binary patch literal 92628 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

4J;+I{;ffTJG!iGMcG*?Vwl&%p(3b?*`L@59ZU z8kaRLvg?K|2O+dpv+w(t=N7Xt@4Z$eu*0A+GM#4Z7Zi_@B`=yB)|YZ;2*abTrp(<& z8}EnPI}U3i@dH4QpI>~kCf;rVLlx4<#E57(zVywOcpl^-Zi(K} zVw^1s#s$!a)IcyEClcFvVLX;3AAHeUI=;X>7Hnn%__4;-0`NmS>BF5PRa6g8<@?)# z!-x{{l}OP!_o<5dLH9QCOjxMygdG;+ykTVox^ac7!g;GOE;%Xz7$&bEV#{6GbStbY0i(?Z~_%qTbK{fg1fv;HIR-&4m zbnhpjjy=RRi5@y|o~Xt}M-{QErXi3!bcEcYzW?vId%)N5^5@|hD5k(Zgchi4!0BiM z4@*aPtdv|)Ym%ZR$t*)iBqqWTNQ93l6RNbX7#RI-5-5 z7lP)c$02Cey-HjfNg?&^mS5QFFHS1iwnN>Q_hJU_&IhU#en8xjS#_Ys!mj~-^fmYZb){* zvn}le3A&c30tIv~qJM6SHC!XxgThU6xZS@y@~nb=WogKaB*1rsWhwq){foXK(kZ0s zjG_Gd%2Q41mdYYVYF0Au%xaZin{+LeOH8O(I4KmXIib6VEO}y(*6Y9#44;`dSzQo% z(~Od_GP{VGC!>l%Lq!eRZ7j!g=tdd*H>#$dtzD=-L#N1gkY?2?Dz%ZwzaV3PT#51? zUj8-#&K!2L5P4+d3S|h(pwj?PZp+G7O)+Tg1>Tkq^GW3@6P0Fl;=~uj)r{G0sy@E; z3HP%T>JxmJPq#b)E5-`c6>Gv_Ri8nXuN}pjj)fanji_h(Dqp=%LF8XU{h+A(Ec)D7vJ2e_QhX3#%DK((a_$|Yl?5u32(|?#+)Xzt@0*m1@siu zpHV3slw2g^BxlIg8Eor!-{IHjGy2(o_ZfYP`Wf`a`x)fe$iiZ2$1|nvH;-wOP$?Oy znTNKEZhm+3eoguorjbAy^=60cGV!&2n)vEACM1{rLt+wpUx$k&cyM;`;FOdUWKT2A zBzccihaI3pjhJSJj7>w-4b~*ejg}h>qnX;=OyIds3PW6!VG>kt})U$bK01uO0IXPC} zOh~8wM!a}7G_&42C63da=Qpq-n)%&0<={+#EuG}H`0E*w^=Xh44FwwIBor{g9j`Jd zh?GwB7~vR(3=ACF1obu%tK^KA#oKtD_o=j+{906>7cu>}ML1X_(oOP~RNz%MAM%mwl^+#$rm<4q)OeoZ~lQ%DGX z$i-jL5q*MP8o)|A@PlFe+-$z91ByoL_`6vwH=ISxW+hqtBPlKNN+bf0Q}E^7G3ws^ z{Be9iy{2X~syDYO$%upmyZ!tN!5Z{Dn5_ViO1oC2iBXA8M)!Mm%mdT5ubMnt+BA0a zut%r9@zJ9=OU|3;wWnFWCK2&s4Ng$7grprvyI%wQL zugZ5vMPz4ZrdP7c%5ZIA5DN+l3)h8(YV7*Bf`XK8pl72wfOm)%fhvwwQVYxg(Xxr8 zKZjSrRmnjUn2V_uA%FA3mTGV7Uz2o&x94>oa&_YF2j?xEu%lt_)6(f12QDjaIXbDl zeQwc^s}puUuxRnv-Baf-z4230S^M1Nva~<$-c_%D?`h>azxnh~rdu?0+&cdCl9!)( zg+(q}J@0x20x^vfKN>uYel+4`{?8{@E!x6jpI+5r;{IX7#(y}BzIp1YRg2zWuBTRE z9uLavqy$l!<1g+~yq9-~_lUk@oxtcMEfxOS2$PbsV_GxYW1(cnjs3qUgI}CCI0}eNl>Zm zAAC%UzhT@T8my?4dIDuRQKzZ*Sq(f!QN-&Np++N)scX zOH<=cH^;f+s%isGu4q@9>v@;rC%atHiY+QSs;U-s2A~l2>s_np!$O?SkY2S;q6!rH zxi95O^a$%D>JEI}12TLQE`w0og;9cz;s;*-J2ojS`M383i(uIuwosOm#7{U`asoe| z@{F{Ys08mE=X^imednGedE2ZHJ_Va#&)e_WJZa1FZlDv49Y1Kxq|I2@d}yhAu)-_Z}EG5yM zGP>d6C6+D|LRL0x%(~M4*CJheS@+~4J^DP&`8m%u?Y7TvTnMoq%btE;S`BlKopko+ zqx^7~GrkR-7Rqfqjrbw(Fx_o*;Su3gwX!K9Isy^f2!}fW1u<2%28Y8M6Qk)}8>6=d z^{Tb{#-`d(Vm&~pdk9-c{Rb$=pMHFET;DAZG!$}P$o|+; zoW8k{g}2W?lM#vYNSPG7aI#4HCZTo`9z2Ui6W%5vK?vLcojxs^q^(!flBA`uqA>k@ zo5*YNU;!9O*%npws$dOKy*(RdEc$r;xZ%0|3Nm}9-51kFvP;w5S$}T$Z~6s1Z;Z!wY~S246lBD_lhmORo&-FJ-q>fIyz zr^lN2hefbw-`f1zvdLQ)^}DHgN8U59vXCF?jrny#;8Df18UC3#O`4{IJEEO4F~;PK zc0TWvoiWZBKTEJBKw>5Y`YFb*CJK?ort;EJAT1U|TsjHacd#k26QEx}t+h6BN0FdY z@d~gKnCl!R8d#u;uDxY8{~eL}RH&(r)H%$!I!Wr4v~=(*lV&Wu-%W=<4O6}BpY1th;p21v?mCkD$ zF(N&D%<1ls5PyGjP+*`9d{c@uI4Fqn!WB~D)G`;$wP1P^>IyavNWQ@E1`+RafbJ{H zY9(IGT$jvFtUn-i_)v1M(`(mWdw#>^^@?tjbYAN8^wXaGQt$*mL^{eP#yx3ldA;Ws z*aQ32T2N%r+>hIY;?bwUTwI2o98FbNQO+PaBEn#|p&rW|$N~cmP(ac$(@0aGdkcTO z1PsV?CxHlX<=9}=Er(opn52ow3=5W~uevg8`t@g)|2C)bK*qYNN8YL`8-DW1%ohi| z_Mq!Yrd{>I&7})CYL8ZCmyUio`Pr$`JZ8@>n#?bdjW+D&4?4^#SgYLf2+y046%Aj* zcJVS~1;7H*7?Jdlt+HYb!lzGR7bj{aV?@Mwl?*|n$M0^%?*?pDWGScl(8J4N`Qp=s_!vGdedzu4NZ+R^{epUexvYe2n*^;4nW7qp z+aKTpipj1I6_HZmOduK1D!QxA7N*g{GA(Ls7n@O;w1J;`@59d){ z{o8+gW{qB(Wb2zR` z{W(iN{n||Wtp@y7HGV4q8DmDtpfJF80|ZU%eA@Elet18Ju(KNbupYbE6b9OZ{xphW~GPOg;PP&+2fvr+Plf4KbtjZD-{={ zQxtq;(0a@kt?Y=6jYbBmeY$~xsV_O&VsRD*-5xYO2$X%QqD{woaMpez(IrzvOg+i{ zBvqhxz(#P;nPQo_I7Z?gj?;&TdmvF;x$Uvd4V{eU3XExJOf-PuB@JM4+lrmRl;-yT;puz395o#Se1wYIXZHZf`}SZJc7?|$CnttR>1L?p*Cz0Ffc*M(-4Wd{I<3xaG?nQz zX(`}}$jT!6Yr4uaGc*4?6E#G3sBzQ%^|dpdQdSJBRTqSKBIq1~ies3d5e(7dwT z5ypT3Gn~2p(C4Ao2ZP2t4Fuk2Fb){C#C8FBh`;+YGlR467rS3h%Eivfjm7S9=(Frl z5$#gO^nSwSB@nf)^B;GmOyZ*LR@uHipdzjtcGN#?BCcXGoiA&YThleC>lv)9Dp z#A^Ng4E_c^fk?p25K@=~u-AUb!hW{mp0YDW+q$s~tQym#S*K1h1KYNU{qhUn%YUHN z!BZ2wPmM-aq(Q4yz{lf{(=Hy01jbg+^pohBcw}RlG|MxMzT%nJknq&y7aqKbSKyiV z;F+Vfdmvl8A;TeVrvxoV+D%xb4-Dv2r19#^=jF`a+9L+YNWz<XZ#Pk_G-6yQCbJXXA8{ zXUH%EelXQD)Px3f>9%AR9yQy&Rr!8PgDwB9ZbBv&NEYO%`N8+(Hv@wZt}WOUD%4qn zv#*tf#ZK$CmDgnL$+vZR1r9vMjsr1h9BOD={T3*!^|3^4pCym8^|$cz(KCzR(&^fK zTwpKQMC&$O%9azneuJR5H1=q1kjlb}h58RJ0Cu(TcCy&V?0M+nXU6QDF?VURbw1(^ ze&Lzt7i?!SOOR)$Ndv!ZDsCKbeq#RygAUoxWR5mVX0u+73DifCnkFP5b}<@sfx-#5 z4x(tN{zK1Y!<3jyv3y=MJH?dxDSTzekibrFNoSWW+a#rW4u4-^tEAZU5HQQaD~uQ! z;+DY^H8aq%Mi*+2GGaPZMG!(3&lfp5A|R%UP)b=R(^8+qF5I*5pKrb}IBRNt?H#iU zODm^H=4Ad{O1v_C_Fd2J%-I(0>Qy@4R?ODCJCXMr$OqG*Ox% z!PGa{P0>z6>y}A|tNtA|i;Jue3iVihDMVypRra}WO#KHhtXTH=zc<8>w58 z#38|4on;4Rne->ja+JvwZJKUcXi`ijCDb16ue6?JwUpNz6UHqHE0!i6){`$fohUmV zy|JM-KVneKgU=?`O&VSQ!RjZU=O1_Mk=eFWc{^qCHhyW5bw@zp_=dWM@vA;~A)vNf zdQOkZ^v<{+tNBd*9_=N_xBy5PvhjoMp%Ll%18GMI7OH6>BGz3zi0%76f=EUei~) zXz2Ud^nLsjWWc`3hUG*F5((;#2Z6KL_;4htTis>1i&rkD2Bx#|c$==8rM<8Hl%K>%x?wfnqu+o#0G!8& zfoHfwB6I-`ox>It)uv6H#byhN!ykyOv@{ioCX4`XIZqM^4GaiUR&~VOe<>cRArS2o8nEDOTj=P^g6dAYw%- zK^rVHZ(Id29zA{{X(q!DvK5)G{x}a{vy}}w$>~UpGNngS9$KV1GCdNJ{>VsEdOFhT z(wPYyZa(6+W(T166&aYSN{qZdb?{6QIqN9n#y23pvsKAT`6sZMtU!07BM(Gl;FL-i zADgNxD=g|NS#oyp-`;rh)9BFrl+^pijhx^LoBH79f){_Ddil_yFQlh4l-0F&%9#cA z(+6=2|AxQ*{EA1r4elA0?>v!u=fLv&Z)-Oa+?+PUxNZ0DJjJhGOK_dXy@QyYwoJQ^ za*9w%Vb*9&sN=FIem!dyr73*@S`TiXTw){?GGDKg;nM^t#XZHVjy`f*@4V>50{3J8 zp3ILNkqJcni#_4E4m&_*1PH5u+uyPwOY@iT_&{Q!#M zXG)IN0KLTm3FRwa7A0($y3nQ~<_;FzthfkVlsQA95f%nR4YRkf89z~HP)c66t+t&1 z61iVDChhm&MHd&}{a94d8tDg}$FOi>x7(sn)f{aZaqpw3Xr95WV}QIcV8RFdwbzD? z88=wAm8bLXPi>qqZ|>ZFnUh!w+3qle^)~%vL@j}q#whl=i&ay+u?Y* zM)8Tm>Mm1rDxe3>_N;Hov?UE>NLj+O>+pTbrB4*O^m=?BS0VQ8CG5gR;Zw{Uf#$({ z{uu4fn=3r)*+OVmgj{KU%LGUjfm*5Bcr6`nEnzF!!oPy1F24m26>Bt787*hwuF^vf z3EmbUh3aP@?pYXidcO!|3++ws0_Y-TnBzY3(Tygu=Q>w0-2;z2!#`TOrdw|dO7`<| z@_Q@u>bKfneeCWb_k~piCnp948Un&16WbxIE0bPqNQM5J2b|>Y@CPTkOUrBBnvRg> zW+W>`nKgcGbDTM)wFOB=*=fqu60&eAE-c>$aR{F&6{&hNwUN*us{$EnEgZk($?@ta za0Ik`M-E}&i;8>=a-jh$3I7)ttO@ce zjtV4vnBRAzr}m^EgyBQ`msbuLv|MmF^r@2%EUs?C5pH^MzA=c;M}p1<`2f9Q7ZJ|a z^{?&HvCkb?XPTb^@B9?HV+;OfW{gRHH!oSY&ddMLw6NI!zqw%LuqkX9gfZIm(22=>ux)6ul=lQU_-eL@(|(G=?VKo&BrIe zgG80n*hl@qG9RB9!_xfIb}qAe{y~fn_4OZ4eAr89Of@(VneSdYQgJBs`J)}H539@% zn^>0*7CcM6M4puPq*e#16-T|)YTW)3WGE0J09JvtFtabItz|Fa4e|9&%>abfVTott zWES!(Cr8?NYEnsc2ut!$e`iAwaXRk106s_7eqoO(J(l)(pjer-B>eFip<54h%IZaI zjz8@qCP&`wz=Id3z0*LRAYicTDPJv86XQ1dF&3z}Bdu~Euq^}O+M}QfBI{n60fJeY zD|l-qjS9Mp!=QF0*Q#BSR9S7q9ChNCKB~`0MJ)gPH`9KWu{ZeLhD9;pJ9;~G+RV^H zX9GQZ`Bi@9+}^Sx`Ps%X62>zGHh(XQp{*oR2PL~1sy5yFbl>2mCEKhsW(~+1vv%9De{JWV zoVzxne9ern|6~(c$*|`-%#JT98~yr-eYN8wvRQhPwY;Ifx=B?#CIQm{N0(Oyn+fu(YwyrEkm_Q!e`LI9cH(>6=wx> z#Q-Y0MH(DI8Ho&6#Kl`AU;`ocOh(Nt$~vSR z?3#<|zoamL7e@1|-dt?C{;ZlK`SR+L$!z}lg9lsZV^c-vSZGi2$RCN;g@hAnkTD$5 z`|$8kryOdDMvZB-5{$amV6QwR$wQ8u7O{KmPIy+l8_x@dg7_3dZ*rDJ-K2@yUGq-m zN|tQTW&OOV6{}|L{3qu>DIfSsJa<*GnarQ?QPwM;Y+21+SxcXfN#%__Sqk&7@z!@b zSpiT|hS9F03~q!t}*T23nB`JfOH-eAkM%%VL&Qpq~!ZKZtLU z!wuz!&X9=ftEUHgn-clam&zyJOz!uJm}~D_O9o|+F6uKoiH%CKHoAm3Fl^w3FG`rDxz33xHRQDm}Ei0NE_}M53@xh3tha zrxFh}T2CU8wjpAc)Hzo!A<`p=_x+qSMB;bL$!zj2{#{8%NVqsa0qQCZ((qt zjO-f30fM0$7dnLd54*>FKx8I}v8rv;aK&z+VKWeQ>$FEoGN$t%Fzjs{XiEJ0Y<>dX z?&Js95Rjxy-sO4gSh%4r&4BM8>a+Jr#Q<*}@y}(j#F68V-j!i4tk?ypkg^Auwakw) z{X>F+%(5QPYyhgmgk+&-n18W1=qiOQ@J$Fhh3UaR{69&rTyfU$E2ASgKg3M@+8zAL z&n$Ql8^qbzclm|7==-Sr%lD7=1C@kHo4-R2rF0WQ0hw@wz!Qadc9_-S7ojK)vL1DI z;QAZ1Q950e7rt32K~Ow=+X4;(U{(V~ESF-~sNZs+KiILNo7lE8W3e@jB^&3TiBMLD z^RoJTjIsQJ!~rABTz4MV@JN-`SAz$hsa;q`Ez}$Yzf? zv2mkE^M%omJBta7&=nZ+NTdm$b%t?x+Nv$%aDiFpbUTPy%A) zV2dRLfaMMcfNmVvdE{VlpquJ4tLuzKrV~cR-AECzLa$TzpP1k%$v45;TyQFlo6bL( z<(JXTWl@hB!djCV&Wil3PA_Gt#1#v7GVL(joHjUAj&=oMXCY0eV| zE`C6rbnpHI(j@$faWsn1aK%r7exv%Cud36(e5yfHp= zfw!qh zHn}~6M?dA9*rm2dQt;FM#ruZJEgd7+n(U(3pa&ChoptTFBW2S z^{A}uQBhl2**OaJ$F$6y(@SeRd#8znBzbkz*)o6LdX{{#1gM37Gj?(q+Q}Cy{Dwjw zgf1Z_F-}z{nrD$6pFd75TAn{Sxf*lO_x3w;yR=Dg#rNv+32K<9{P@Gfe%-rtTiCUv z$P`@Jq2{H*Yu6n)^TebM0|vCHY3^X{(|`%6D^D^n4an$H_^w*veE+fmp~lpdlvsbe z?R;>k;n~NQZFHJl1(_W>9wV>L7RW`Qr6VI{vhebFu>{;#Z4 zMq+)?W=JsA(dYrisVAAG>Rr@k%O-WANr#?&7}IHP(a47C9(ipOU7b_;SpM$gED4FY zEW7q0=A1jNAncMgy~+~|Q((^I0@^QPgjDk&&A@>5^8LycZ|y`%Q|$yS5@nt6WY6?| zrV@LJYA2dG(;B$Ve}L*W#Lx7aLCEK$=cBUP@IBU4;3?Ag71UKhS~uLBr9Gm{z|5vX zn+S;rYv%^%`gvT27*5qLe0Wm#; zhl6}AN%&!saK1Qlv`1d#|J)x~g#5kFQF@)YH>kL4fm{0YJCC_{+_E>S`(#zsL@(V^ z*C$(^beT`N5S~}iIj;>X{Np^E{X=9UvZybAULtGKY zPIi}V$W2GX~XMYoOr`&Z}PIh~~Sdsy(V5yJ-AU)jfx)}&NdM^xWA#F5vw zXH@??rN#UgzAEX?+;rEKZAh>llTcY1bN$^F*;TzV&dyoZAv&fo`71hM!e%zihYm+| zFvHyDP=}*yd;lWgVB5f56M#w*cTAwUj2K#i`t~Zz?btP`tZP}%+SIN}zg``CRn~Us z_*bJ^*wqwvNr6x$-Or5cN4OF6E+0D(4Jb;=qU#7Tby_7a1iCn?EsSyUuDjx3jl-LE zt2vGbsFwJ`CuOa^_&-<-ckD6j($%nAleiEkqoBW;K{P@Is2K3K-pA9%jcD%~b zTCJ}_Y}gIdf>G|EZY3oFeezPC?SaZ+zJhX$)@=>@23ll=DgL60|S)yl^Q8mozPy7S_ncrn0AWWV<|)^!}>oh z4?d?PZ5uOZ_3ndWg3{6>Ivr(+dgRQE>Zj(|(V;BVLp1j*W8cwKy0RNQ~?DA7Eqv+y50ORUu}|C^sluCU%)8v01L($HC@rAgNR=62G4 zKS1sM0J?2)hY0LgSW51ofN(2ZC01a>1ELKr<>zy(3(yKs(s%_$Vxl~E&gWC- zEgHXM4L>sS2hXQ$(6>H>*!6tZj%QcIdo=8yK`ikm-0Qo(7YMOv7k89E8h22;EZolo zU}dueuZPsa-+^{jL}hBt>);S4D_0uHkKMI$)6*>IHMP>X-`t*?M~nf}#aFg3UIPip zyHsU7UkU_%O0JM|fool@KvPbvft z9N5os!$B9ZS*?K+P<$mRGr-LU4!BG;*)fx@FH(41xrikoT@1iI)9+ijpziLehV62% zwzU)I4@pVZuI$w5fe9H2(S72QHLfk>}$nW;_LX0OBb&ZHpTQU6beY zP31l4Vwl#wM*HC(!CuK?j3UWm&?FuKG+dxQ~aUaq-A}aN&n~ygp7vH z5{!4qXKeWz-!s!UF4X3KpSAuq`NH6P^u4v6y7kJ` z_6RsIXp+wNMms`!6>s}!JC)#PmD)RReAnu&@g(scba z?J-QV2@&XM(z$RKbV2@qXpAd8D>TX+l3UOwC8Z!FDhr%G#vsZn#SXnC#Ru+6SaB}O z>Vx8*g_q<2vculh!nKl(mkiaONl+>oOhJcUC+CWo0Mp~gxzN&-qTtf_VcEg+j#|s3 zhjp;blXi9gsO#yOH|mPs>wS8ra2%5X0mIEn1FkoU7q!Zz(hu$!E$5c!sPh}R?I^^doVg&+f7dUHQ$@+$BJyi@lcjM{H{dOC^>sTgF#6A^*r%h^6E5}T0vkvfQ=Zb&HjKVHzW2)k9~0F z#)m-biRxS=P-@f}1T!8^ZaBQP;V_ToaI>s4YW@BE%)pHFGX_|U;RF`1EzM63YKe+13HP48=l;jQ@GII7+ zD8_{+i)L0Wa!@VZah{;Nr)o^$?EnCm1UC(_oj4#%P<0UFijza5b$)=34GaMiX}Aib zV>S6BqV9t@5<8QQ68vjTofFzL^-m9r&P5(jFwJKXEf@AGpf0JW=&GE$9?-ALAQ!6&v3B z{o!Ay)z#EjjqdTq-J3~^h=ff}HC=%k!r(-eD9~XI@ZwthfecH<@N|Oc+9BhUj(y8= zP|3lv^Y|yz__68Ba-W_lx6k1kAML#~!dC$*UxhbSJYVM@;9pvcpn0Id9w>pF%GF>kms=y;bG9hV`StHey=KzM!OWRq~XTY)_ zCcVtR-2KXfGv~kf(PAmh=s8Vz=c8;38`q!V%iqahN*41!_R_1=n*{DJMhosSAml^; z3k$PZp@DQq>_zb_t5v*^I^IboNZ97)$(V&zg|UltXi_+iFX30WK3z3*+WeKZ{nK21 zkeefYi#f^8>htEuZy)9FuS#L2oG*9X^I#C4iK+Rw<#+fuXYm?=YHo)|B-CFCWM-{i zuL%k;$hLm64glw1Z6wTJtf&ez3`>v@&IKYN#5w*#DANB)hu0P~BbrNh-HLd=|0v-R z`;g6BBc5|B0XAb^ZeHXQya<-X?)bPwEue?|wAy&RDc&9tXUW!NV=rjTl%5!w+#b~2 zs=k~?(CCGk?vsNcm?XT7De(im|GNxl30$7mGv&GIF~5C&jQ0d z1CsmB2Is<>`Uzez_a!|RMPCG-`?Cxt|Eg-wRVWPA@34{cS(qmcqXHg_)+yqO5pJk4 zT7wQQPXqIlOhF9V0M(+ZO<@ewMlQg#p}(NrBsPa1yUbE2)RfG2?qq#g$|ARO&kE%hn& zTvamooH?9-DDC!i6w(H=`!a5Dilc@Cp)I6GEkFq*|Da%tVlzruRI^Qt9ITZN)V2A9 zxRu%@K@RjTG)t2}UD>ocmZiFoNWqVkhM}rzAAm`NSR~)P{ecS9;I7tAdf|l+`Ih>j z>?AjMRlAqD2=rMT3Lh6kVN+^q%GsSj_Re?`c38Qra zum6{2{0Qf}vZX1Dr3kF>PTH^pDDK1T*PuvFi)gpng4QTWdVdXJs`?{r?C-rqnp+TK z5}Os_L#3bm9lr=1ZWFkNNC{Jz*NuB_)iFz0*JAh*1gnF9*UG{g3i?RZ242)ca zacTm*r6JBAIb{TO+H~&4-9-(^B$Y*jO^~PWeDgT}aR>+NQVZPE#+7s&RqRu=MOgvh zUcgP<&K>GUsO5ebpP!#D0C{sdi?}yt(mOU;JC5^DTaQZ`nN7^aBI`kn zi*p(oT8s7G`&NcqpCRQZ&}1;$Wu%0_P8S1H8=^~@S`n%R&7q3qD$UB^8{WMI%=LWZ zoaPa6js8iDh-#!mBzq;W5~G}vmMAEIQL;Zm&;Bhge-X4tL!_tPdg+T>7rO?3lCS|0BHh>vXwvDALpVWaR zHN&UQUpcU*J*fjb_>NsF&~32g_v6h9!M*iR2;}<4Ip_v-{f3(xwX@;LNx?4YOs9~zs~^h)dfgY3`+^s z6mxLJsrjqk#AT7Wn&ovPhk#U!3I?FeYG`9vZ{q8EQk=`xjF$M{nY9y}R&* z2i|;(S)SVNSyai)(?JOSm4%9^)cPuB?IU6t}Y1;34i~k zxy$&1obFC%TE0ojc<{%LI{Q&)UE<|0jSS{c{& z;r{UhpnZ5fpvZYlRJ9DLz!yamc*cpE(q^rMBsi}j4iV%h#kkG>{Qwq*91R)V>0V8d zENN(qD7bfBs`t=#kXsys=0qenP&10dJBf6B#REa)!p0YPZEj zwSf-WhEj~%o9qZt*nLutng|vesp?|Lboik4^{TNh9JQ2khiUX>h%~(-OG&Ogm7*(o zXUt;@9R(_I?Tm%~#5E0b^EC_x`+(P;QBN10< zjAo-`43c5hYW$c9w-L1>ly=lqs`>fSy`e>l^pss;9%D5@Z?K}E znkh2KePl~eKTSaM#-pJM#f?-X+H}G?!Mr**^85G($$g2rpJ8`FZ#c7s8H6gKTe^P*l0Yd#0F5~_)VzX5kNqzp)V9Q`!5 z7EA8E6#tgLht}ioID9-TQY`+hOg=Z<-u2h4#rhw_3`O8xw#xxpEf{IFT1`lRDLhX2 zXnZ?BG*6i!B<`AAhS=&PxXH7Lm!yPAvwe8tSuJtKg*Gak(ANi%6GA}W{#u#16dj0Z)qnjr2edhB|*6F zk>mpoF zHZ03_qn1x0b|()^ZlR$nq@jjV8&(JatJN5Y#B>Z*&4?wll%5Qyj83nIRF!eVs1Yjp zC_mOYSjCkW^->tyjF*5b&s?P$K$SlZaC?3fsPa#jEGGR6S?9U}=wILjpe)nKq)?52 zQj&kq+N30#EXU&%D3mH`^Tj8!oNY^G_3zy2;LfPCX6#_a9HbR!zmy|{& zJgs0;8^C5T^G7H7{rsV^()`714!m&zg{0?{bsH-hvr|*06EjYx4?1+$VLPa0E zdF5J2_{(d0aNd(8GEW&tS++FRYgx-0$nQz9`B>L8?LfaAfL|7PQx_6RqJSZmJe+YYs8Cx#Oqi@&n zqeEVP1Iwa(qE0kl=biX=taFQH>1^a9+2%|Zatv!jJIV%WPpe_jq|vC7Se ztznFbGlIU{XpW7Ff=i7!0d5^t)1owO8uoX~AqLZG)#Ul=)O!Z}WmRUc?gJ;t9nPL;4&Yn#A?1iS4Lv85+B)ZHLnpHc}Qz>6wzf|x7l9L+znQW+9^%EkJ z$?yrmi9;+b>>u7w)I%pjMQaxy1~@#!f;kXaaBiF4-yeQ7l|4|gSdgP=@!E!@NMV_U zb6fQc(_K#_;7z6&N_M14xAjz`0+}kS;PLxkAHI&C-oL)#!KYsQNQ!k*SU~tIs_b*m zE>ML@AdFH}iHE8_LR zr7nDKKL2C;yurg8=B}PPp|qfv5JlsmVEq_zYWp63d@Xs0KYHuFN1S{qzI#n*c{N%> z+5%>V+oog4Y_}-=Lg6kCl>?E%=_{@iUI&u0m<#de7B)of3Xt1*BYMDP)9}l;Fe3td zO@#6Oju{aPcJl!CuL1ivR)gG8IZmr7t<~D23{*E898y+G=-1Q--#@rnC`jk}kNh?Y zOp(io%>DjfNN&zhQ0_l6-Ozqnix|Og`i1o%! z`Vm7x5-J0* z)68Kg)QhC zGks-p=hm(v>=67tNMYY*_mH|T#0`u+;E(o&_e(F8g4{*pr!^_|pg7_J_r-99twUEn z?R?)q+6~fXufGeF4ubjTJ#`PL4kD`aP~))F*4r2%X z5FzV8?`HQNexY{?h1{oWQh&0LNzkl{l5*8dYx7+-zp(tbKtrTXWw-IFS6+G>K0%t7 zn>yJnIBtY?h4>I5w}-;+vM`6gtT!5DD>AmN8oec$))}UrSZLMm^5HdFG3jERT~i#w)iJs&FL5S;Ae831vxQ|YEIy|k4XU%T-n zt%`$B&`rk7fce^O^<%+M@r+>8ush>g2JxGH_f)TfDxkz9u|UK$C6J1+7ZlgVzag6% zkU?BiySND2{~h1dCj;1db(8$fEi@Zi`VhK>kQ*UxA4Rf?EQfcf6-4i&^xujkljk>TPNE-j<@D--v#esr~#@^fOVtD+lK;qW^3osnZ~gagp~+9J zYfRX>Wy<(Y-Js`WVRpiWo+ECG5QQ=n%zl3GrTT%?qoQ?*x~MWBFjUb2CgSOc?m|aK z=TKolnmls4*scL9ozNed@v{pr@bhoI@d4`z$FMAv%TaF~ST%XrZA0Wu=MEp@8@Io> zV8vjAiQ1kXVB6DPA21Pf>Lod7&nr*%I8m{B%Z!JgNo5T@BUi3Vkt?mc*8a#ny_vpk z{*3#E)gESpm}Wn^e{&r-E8t0jJb)bgHisktxGJRY7Q*Cg}kR}VbPzu9?WP3e2R*X(|5>YP-0@`e4p(0q9H>-_h{eVBin zoR^;%Gx>yio=`8zF<+>HL6EQ~C_DulMH9cfs43TOgk+$EQyuFG5OC<8VPZmkPY|mj zo`5~#tA=Pk_i9}_R>fPFJ{Ac7R149zX>CP~jgTIh-nHH3l^$tLYb$D9g!HJQo@mDY zsP44X)=we6Xz3xJ^q}e(yq_-KH?=}P7duF8MUk6XFPd7R-)U+EpJ-|&96M;87%}QK z#8WiheVE?VSK^p@TI|E`)z94Q?cL8AP0zt+w6n$Bze}HCJ%M8><~~e31}8`Gs))HC zM15gB54E0q@dVKm@dV6$hPNkeeLYd1A!bcHLo@b;TjySV3dQNwe%z)x;C)J)R!>ne zbJU*P1~l5%)hxo#Bl@z(J1cWWi8I3mL6c7LM`UvysbIqF<<4%$R3Zp!bco6Sm6{WNm6ZVMW-G&V2RNW@t5>Yo*(fO>Mu_o$vLDv76khrSIw;O8L zA2!ctAO(}O%>DuJJEI@s>FMU}hL1EiKW}`Lcx#n)*gh&NUqjL%?H}$qxJV4BYXgab z6-MK?4f$!qbH@4k*iQD$Q7RPEmPXL%@~G!*KEdDjo;Z0tE45+Dl5MLE-Sg5H{|0jH zKiho7Y#yDmJdHAM_zmF|55z!TZ@#GyNY_79{v%~_f|JpBx}H-u*3Z{=Qp{`;6MMAD zPGK~vDC&7ZS?Q$lVy+WrJ>6$pdXP6K_6;^4;WrOLe=>lduAzGRc`I%h0Cn^96M7*D za_Yt5GbKgqP6}T(1dIMU`qS7Wbd(?jEV}o14)txEMK9Y{-k!bPdjAoJ(97lB%HI>DIopj!wgUtWgUo!l3I{tqqdVSL^e_e@NhW2* zdE4IvN9c(QDVL7OQ3hMquPJQy)jJty#%voa5~B=zZJZD2?QuQ`yhd+d)r0a^mn&nw zIC#Q~f76N`(XYX)VMN_A2}GkI@TG*;_sgM%TV78%`nv5|jSq(|(EWU*!8Yas<{a^1 z26(rCb2sYB*8yPXO$FAY@KF>O*p1_ub?)H6MuW*D3}#KSLk`vYXGuvTsFj*$cHkrJ zi0z5*F0tFkuGu_m>KMB10^Yg_m&Tl=dt2sCo(OB_Z-7hU{HxKhV9le+dCYfOMxPmT>u7OK8Thne*tzH#aOT%)cMhf_mdd%#^W^1bpEJ1QYDtgZ;T;_yUc< z0c^nN3Nv4$A*tofDc1@tsEFXC%0*B~*jn9*Qa&6YDxw|v&HI+T5=!)jW6wUf;X>E0 zDi@RIL>l|OTV_&WQE&=P$ca7kLfc;l+deB;ke5?nU068w&RwV9c#+n>xT8LHOx!^RQ3oU_MjbOX(jHf?j$^i2tBL z5#uTbss3>tv0z-l2(UQj!m$^QO5Up9Q0!5qFO?G?wkNOuU-7E%{1XFzR^p@GGeqWEVtPA^ykUT=uMTCyIySCeEF^= zuQi=MyzYLtU>b}WeA8&tsMwv~zmZ?E_p3~_60~TXtyY$)_cId24 ztpRIa{>V4%8h<60lV8KueLG_3-0SdJf-b(>&+~ZW^@rEM-;4I;?#g~jfA4<1{oV2_ z{N+%P=GT(+;NwuI$UmShqeGj8;N6&fQS0^P$rlwad zKr?ylmE8}d4zoxvCjXLo2wn_v>L=+3r!6ty&@nJeHDD^Z;kwol(#3Zw36neSITqt# z$F4AV5W?7xtlN@{gN%;Bd-V4Y>9Wh;?QN^uJm&U`>uK=%?l9YJO3HrQL$)InJE-D2 zWbfBCms7(Zx4reW?S)6SbE)xn=6-0Jqz4{NK@X-H_!w}qu0gWL(egRy5icBV%`$(f z$aXM{En{isbo5Sb=dL_L6OT5%lH0Vh>#;ZLr#5uhgQ*10L*|s(vqehQMqJ^zY@5i3r}@+C22iYncDQ(D+w9h+#9NRVC&^ zMGu|~F10-yr@WA0+gIhT+Yl`NA!|Ebap3}d47|?p(x_L^l1HI;5{NgAr_VT?&eRW{ zG^mBz4;Iw#I(5*-`{6T^i!wRi(I?Xd;A;#E$LM8hS_*e3DVAj)-?TAn&&=72H{G@Y zr_&x;zhwIH;%9BYeP{dr!;gQYgAGSUjz1TdSy_a=NIF`l6{W=3exCHk-tM=|YX13y zr_ra10*!I}OPsDmpNh}G@i82QoWkM#=;MR286UrJXm7X@2we{JH)2wZ(fLz@w^F(HMN{JfeRK@#&0zFk-WafB9&iLw`PQ<73DWZ*M5Qte6|}*zv^D!nTB9|*TSoNjn{XZaR*9pkFAN#RPmjE zz2Dc^-*nsoLs=kT@DrK)JG=+Hbuer*E^|Op7O41sz?Z+mhB&+-f|ln@Cv-Rq{}>MZ z$18L=3srn1{vM9u8J96SoJBgEA=l6|*7%zaXOX&F!Wnf9J>R*^(BUlB;b7Gx!Kt9~ zOJSSIM~Aam#dIh^PhJlk@cx82Ar*dc5=9G18@vZ5CS=1o*;|0)(72Su?vCI!iKK=9 z<{THY;^iD?w+c=jck$OLTVmioJI+nbX{S?WJg8H)M97Vo8PG!+zNbERf^(xG@IS)2 zQN`L0f$Lg0$8k8H96L~!{uw;dveaK3Qj_)UKbr-$P=>5_Az2Ymd%v{a)9 z94{i%uI0GjwH%Mpr~=1}jMs47B3K2kOXHssN8k~iH49BoaSf&PNkq)QFi^f}uSYeqOoJBgEOo!eIdJYIZ(cmoB z;UqZMOPwJsQ-iZuhcmhd4wtI1Ou!MAnIZKA(uFLjr!Fm&%yaC!$}RJAO;2Q7=+F~w zZikRN=5`3F`dugY2sjkJ6mrMjwY-FKr-sW#N)59GO2qt-NPPVYol@XOL|c8vRw7PS zkHlVHTK-a@YfEe;e0M5v9^GfIn}+eaZgStZ+(igFdt56I4&NPmbmVkjazg}pT!lIoeVAw7+OF)5UZ3BJ01=1Qau34Ht zo@>~>G)sfCNQX1@8hVBc&C=j3(&5OlAqPD|votu1bvRkh zaMXE1votu1bvXLF19Q?L6QNmvBQy)+4B)kp4Y%?zXU!@TngwWFvwq<+5whatLY+8n zGKxK?`1ZqmS9>o_YJ+u1kn1V2<5U$&7|DDnJ|O6=0eF24gdDO!gP;wLAX}m`TpM8bE1vb^nD{_vDLua?sRaN%OFA6K?`ge^FWbbuH~!e zMLu@pHf$C4f%3vWpA>d2wYl%21rZRBm7zjTw0t4E-hIP z$C$phGr5qKfB^~)X;kPZ&1?1G(h~KcC15T%5vEfCX<=`3jS463&$g8qvCp{noRF5r z{bwO9tO)>bhfAq!;8M{>v4pgyNhzKa(h}}~9vGrw0^eT1?AKn@#Fw(*ve|n(QXkbPp&bVRQ>VM3?vL!wLNaM_Nzk=URi_=}Ae` zr-MhBiGkDW;UWzbe*Yxyk&cRt#9qg`kOF&OJslD5-s!(+!pM2PgJUfbKC4o8MP#Lp zi2i9|^zkEEn}^ep11bj_TjDH>7ACm%iHiNnC%C_xZFW`k`oQ7K#+57{9!S_#6;eBF zJV?Ayi(XG-B7v97a;&8RVIL>HI5Dm+lO{ZHD*k244sL zCL`z%g9pbG2kZ3e<viVZwG4L$INXLnR)bf?E%9*=n_{=s2kAwHV}9tdFk z=g9yiATzLUet`EDm+dah!R1e;C%%o7CAst=d}kW90f~t4KU9U>@VD>1^OGfKE0C~pEzX-Q zSD1Q-Df_Nq6U(MUYlf#}-Cnu5@s|55_8;Ez)G>PL$feackBLhgQ~1W@qCvawTk&S| zQkCO;()PIWgSt-hyD5Qv`UFnETu1kah|uDSh)8$e;tKZ&Ia=;mAfU~6ltWa#jM{D- zyirI=4#ViE+))>UQ@piMet6-rRh_rnzJ1}Jx0k*;ecLXZt!qfZV=qrCT6@p38&7q; z_@OfNzW4g8eIH!3=I#_BU-i)o8(4KgsB&S~INPc5SNA5cUunj(yKD*O z$Wg}J5w^F2aTre9H%il$yY77Q-MLoVcFvjew#U_Y-5cyb9^PP6U|`>(ia;NeXK{t; zI<`QKgc$hrHL*L17`nk2op8~nvb3k)+id&pV8@XWyZ3J0-G=kD>W{IX(rkg{`E2q# z2OhiBImALeYc?&ZtPCq+pJ4UJX>YAJs;+{M+(?2Ls3O$%lG?6zAl)a^oeVHAMPWr1 zijS@zc(sTLU6itOS2v_9$D*(L;F-NtedV$Tw~$fzGHMnOgI&0VSZ%x2Bz##0X*%HL z6X+8*9{cL6sBCdXV5I6=T%lf9S?PP#4$%-(nf1A@{Ln6bdZ2Vlb1tY!ui5s0w|s6( z`=Y{Tw*OHYxc*mG zx@E%Tih^Y~lybi~KcUEYn>e8;J+uGyr#AgJXA_|*;q3=h^nZI^)BpWYqW{fdM3BZd z_KD#*&V&soNn~VZNJ2zJ%pi+jf8yTXJs4a1#aR?(;J`sC!M%IO4#MjHBrIO#1BQWG z$oH(^Y4K{oD6(iSHH(bG%UYcCrn$@EEytc_zdH(@)o$o$E^nJ08$Tc-aYo+qc{j{W zN*_LO!jQaKqv<;5^U;;Pwew=Oq()hSqkQ`&)a6WXOB!~?=6OpqeTW;`VI89VC9#^ zrym(z(J#Que{_Y{b>3@Ud&~pCN%VXGT8{BM=KOOlm*FE5Xe z?+>%Dy#J-TTm1vVT=F+f-0)E6xvm>F4R^`-^5@z!>%Mi2?q5yGran_@isv*{j(z{7 zw`kp=F;g~Q?zF|BE`nzMO{BmFg6ke3hGGAu zF`Vn79RI#kZU?0%l4JWt`(iLSzO7I~IpS1ezWq6^goks9$9qc9LVJN$!p*tFU3}J= z#4_7H0VVi+xj<1w`sS2(`4^g2hL+fiH7JhnA5N=s6Q5-$ON_JEX(dd~c%J0`Qdy$N zo~)HH$`bYiIGq@L(Mn*qv)c72Wjcmi}t&S=hM`fh^@ZqND||l;=sW%8#!$n=av70CxY7lkI(!L#xVY!sqqMY zyRWpmx;S|B1N?J6Jc6HrYaw)sC_70PzSbt=99M=foH*?}l-vg`!(B|M)BY8bdh#OH zmETUUFl>RqCSVWv9qc)Flzqi)O1e^^+@XA{Qx;*0YuFJ2k!LDOnXSqJ$`i`5YTc+E3x7Xdh+=sYVxvz6S=6=Z| z)MJdtOpnDLcX)Jryz21}&jFruJs(QA~~TCXeKsovAQZ}mRp{k~76&lI0qd`|mD z`D>TGRTr@8Eu(tskbb&thd}_*=2do^19^%%a@ja z56BvD`+!FV>>u#@fDZ?JHQ-W&F~T<@JR&6`D`H$kWkgHFl8Cht`yviUydQBc;$nmi z^Tz@r!y`*0mql)g+#dNvhP)T&9cPIf9G4Y0DQ-^Ovbfvh9*=uI?$x-r z<35l3F7DSjTf8y8BECAlA$~*rZSnWUACEs3|L+8vkd!biAt&L!gdGXrCZ;78Bu-77 zlei>tL*jjjyOTVU>XYtH`YJg+c}?=ODTb86Dak3TQZ}UQN$s85KXpp#_S6e$1JcUV zI@3N#k4SGwKal=b`sws<(l2LtWQ1hQ&RCN1YR20c?`3?R@!inep&N$2IrO8U-wX>F z7BZ}2SoN@mVUG^mJ?xv|BZfB*Up9Q_@Uz3e9RB_A-$sxTE+c$K^cgW>M8$~e5gSLm zIO6M(=8+X6?;QE&D8EsSqjrtjo2h0_%iNLq?<~ws%z8QNjjRu|S@x*x8?ztH-krTa z`^D_nvfs&mKW7N$ZY<4tI@gd}m-|HSuht~%eCxqHzdTD`SKijV(|PCfzR9~f+Aw@Ik( z;PRO8F{NW38FP5d$-;)hd4-D#?=5`2@I>L4WBZM*9Q*3H#Bq0w`>n`Yw7clXqD#fO z#Z!x0i`N%#FaBbD!1#pmQ^(IAf5-SAC-j@Ja>C0KzA5Qll36mgq`YKl$%7@&mAqf_ z!$kAMi4!+Ye1GEirJ1FjfBvuR;YnnY@1&qfnQCr_JPKl#qdZspV52n|gWLGji} ztW+z@Di7Qcc*EmW!>V$s3ajp^`n0-V^~CDB>IK!SsyA2vFk?&&so7aOwDz9blXV_- zBkE?z?&Qp!v*Kp0n{}anaQ)i);|*~QH#BT+cz<@#>>0C9&;DZePjjN@RL;45 z&XGpX#tDrp8}~JS*EFDMYSYH1Q_bPc_qOzHiEK%1scbpiaFu|d0)3Cwk~dcqV?0Z+_vrQ?(MDZi`zG}-`9S=BdTLg$G(n#%}<=)H2>lG=N3dS zXkPHQ1urakXTd)fe7}$`bY1AXFnnR+!etBJSoqPxZx&u%|tQR1Tci=J8Z)}oIV zeY@!DV(-P~#RC_|FV0>(adF+^1&h}$zI*Ym#m_B1y7(W9zh6R^L@gP+q;kpJB`@6Q zdgFu}@44~hQtzcXOAD7ibd!2h)ps;5`Ix$5+)i>vIbeOFsn zr>`Enx_ou*>WW*Z8lASd+G9?3$`I^VY0fvuVxNHIJ^@ zyXMfE_tt#A=C`$OYx}JovNm&V$=ceri`H&jyKU|6wJ)tbw)X7WA39m5UuQ_?pw86J z?9PduwVfTEYdY`je6;iF&Nn(wb$-?P%R0Kwb6wE7LFBwYg^Y#U9Wdt+0cK( zRcX-a?IU!OzYtgS6Y=+EO+g3`PsY4`^74hNJKf50s)GXW20jk?pL&!W6k#v) z0{JzD1S#9en}!$?t=5wy<0;Z+*hO-g8+nuMCu7)tdy_hiJb`;nEW^GPeVb^Ok7p|F zk0LJ{*M7C$ehi@(!Y>d8<0{8hgewi#Bwn87+qWX#V>IJgI zFdN|{T%$;eVGYt-Ns8iQKg=Gry{LYH{0NeQed1D#xC|eVCF%|tp258lpnnwEY3L*y z)dS>!DT*9`hiikniae{1u^(cO+D|K$JRc+Sc+UPje+F372%Krmxc2Mx>g`v%Vptw30ZKN<=Hg8 zbADfU883mKTo#an^QFl_$Y21EV>~inmjjoD^TqXSH;ECl;PP->kcE&LLZNrSeSOI5 zF7W?JD0GxRhx!ZJIe$2<{~_f1%ysHdL+CoM57&7f3cW`?|2VYobL1QL+Yf_|2yP?L z(@VlmpsQS8xxENpiO_z(b6Q!1`|wCIj8}6xa-7$PhBkbl%6r1zz~k#fQwmvP@ z|IQ)%#O?;0J11nnpG@I8&-IS$tk4?=tt~VScC|>&rz;TdW>qv>-Nt&+NA0CZ55pCx zwy+e0lQ=AHcUYSeZj2@2IKLqr^o%q-i?EiAWZ#p~0^hITwGr0`_9H@PKpU62;d|&E zY)r`SsC|v2ol|4%CppgzoAC^6M=iIX9!(8eL$YdC^B^5=QIPeC5omx9X_ zc&pU!$O4h~tNlf^O~WuNDUIJ(_Msfgpw6|T9M_rK>^pcnf^(*3;{G&lSB3*<*ACfV z6y<+}ecF%)Ok;mMKihW2xB&6ZXg3|WxGnPg$m4ZH-FAvP^LB;vR<L-t`DmhpT0D)lhhLHQm)+nr+A3>f^K!1?IRD~^xz3NRhK zGJJwEGspo8b1IYj_U#mcJV;?1#s|oX*b%DJ5k@0XpfH}4LdjOhIbUF zQ-N<Q(+aBaaHH-{n=SjVB7YTBG zk+kvt0q-}kyGcGSqAn#tlwAE*2_kFI{uBOA!}~o0@o0EtmtZU*+H{fx8EmLCbXEPC zG|BhTG=wv8-L5`L#&Wwbd`Au%Jn#%}$7{(9!%nhB!F(W*=6Q~57nx_sw@2^`HaJ4G ze}sMqT);<9;{7)RR~)WNTvKo@!BxWJC_{LU$q_QlY2;lbIth7;5YI=P&sIB%Oa7sJ zDZe-#&MU(P(t#Om2cW-|T>rSNh2BDUjM!wG?LvQvkeM#T9>FiP3rh?UxR-?YVmH>Y zk}Llt74G`d&g7@?e`zli{ z(%ndZVBe)aWZ!B!hcwrR!}e}9!M=mH4ctEUb~_3EqDsJ%q3d^KiOW*ZO7qN(trv)s(9jF;^6ZDj`x$obpiRKy_6!~XPauERp#zT4 z@qQ8QJ>-fyowHyl9y@P09-fM*+i&kqM*{{IRceEq+MTxPs&)k6Cj2VeiU zp>E#}JO7jL`aX@LJ@`+dqwW4(c#x!`?Wn@FlaR|7w2;TIqIq*%S8V9FP0upOTHP2$Tnjq8?(;!@Eo{ z&n*d$gleI3oXq6yHgk6|Dwt};)U$;BGn1I7B6A>rI3a6d4(3^y?N^PVm_4xCWg{y$ z6N+hnXz45AwBf)eaWt|~Voe2px}C~6+&`WBFz$Psc3E6x&WHLan`=&kfY z+D*Twb{5Ri*z@dl_9pv;{iIMu!HKipibYwkbSXD0cPsZO4=RrN*t^L~WG|_<7oe8Jey44XZMAK_z2079pJAU)X4!MEzDs&zfB1KZ>FPUIkJ|rr z^{8#74PV7qx7zw%y@wE+ht2(Jz0KA38LszjuAh~E*5~}<&oKA+v!&;~K3j6$^V95e z|2+5Ixr^t%K6mci*>k7QeRS@`xg+P^ICsyv`RCdRIoIc$`#IN78_(L#UOxNt**DHc zoDDzQ_iWHvzq8(Fl`~(QdH2lGk8yOYQp_d_E#stWf0&tf-QSDXrT^z7dSBx2i9apo zDDkHSHaqe`Cgn9{-eDH~WaOJUPlW#;IqQ!2{KN+*^~ z7++j84#zeZyuCc# z-CSKvMuVy_N(P&|X_d8Gi7@--Ra>l<>ipQjW^14N+}OcZOI}sCx!T-~K#jEI;|{Vc z)!pVQb9W?yYNza~?o5=Nd0oj&tz@QNlKPm3li?hN#oT=~*J3_Er%WhEd}FSq!rXmP z#K(!a8YvQI%fhf_|q%rQpz{6hH6ZkE$cOUlFeUogfKs=B)J zEatqfs;=q-_T@7yW*ipm6;;nGDeU&2 zFtxm!MdX?5tHBKXA7u$k4-WIy%K*S1-zH!Sm;(-ng>g1)IFLzZAkn>iLb;YUlNrH# zNoHJ3MK`PBcV2ef>0QR}EO*?|AFr}NwuKYRySmkgf?A6e9N$pgy?h3=Yc>~*#i!fr z*WfTqm!GdWBMvm8tQkZX)HayA4UyeO{*?0r&`JJC7k(fTuV1y`VlWUy`udqOEC9pd zSS{8n`G0VmnB=% zB4lu~tPK;(#Uom-wYyhNH>s+TPj$yx@hnu|+Ql{PzZKRw@ZYJxts+n6)5O~409eL zmh9p9?KVZY;PQcRL@rnI?BV8e8cZCeK}L79*;|lo5W{DV&yKn*I^LzXjnl#*YfiCCpJdN*txPh3UEDWrv^*|CGs3})}K&~+2`WYTpLr<6Z~8Q11@rR94WWjR&Z6?+EYUimX-LNY}z zXN<^Mk2ziv$9AH|Wk0`e%QXtBNGoj{y zs@=(SKv0qAqU9|Yc@_L`58)imbTeeSWV&X0Fi#e|2ULSH^lFjo+@%&L*zLDpfEZN;Ofa3Axu)Fcy z6u+fY%fn!j=Du$Rclli8lBz%h)a7#_HuF~3uzYiwnJQ(W`AS)cVh3z(b#d}k93d(2_DQh9i$dlxsMD-zb zc>p!g19Z!t(upxKg$GP_yhmKePwl4bx+5m?-^>Y9x{d3)N!gUC<$EaIRIz5`Mv~pX zusd;LdAGTLMPYX>B0l~11d!~CwzilUe&IK!t+K71$HWhhh`&CS1pfA3B#;#0%Oj9< zV1A2}hY2_FO@e(=m!Kbu*}l%dHtg4puOIAZd*ycfH?|i07q*w|Uy**c=XtsR{hy2W z$OZB%CXL3B6XbQu5XVI>k~8Q}6IyD6Hw?4u9^zj{DwcJSR$N+~V&Yho4LE{y*m^}9dJ^TXlV zD5b!4Zh(Kp1UI@XaU<^Vn|Q(^y)paG7j1(-&U)yLb|DaUA4K|M{$D@rDicCNQJ*jp zPAp^qi6D_A3SOFMv=cFyiW-Z0#RSxYvN4di~b3p=Pvx~PGyBDawr$xmb>xeI&r9wPrBKag!?7x{(!jP~&% z@>lXEd7bQrrq_@y(10V5;~V5H%;z;x98pNV0{2dkcgb z@+@`39=yCu;6=U3Rbrz))EBES{fQlIc`w=X&)Ly`_f?AkM^e_G?bdLAznDv z&-|NO_!l}(hKPbED4GtUF?2AEr9)^O_P$Agmn(^UK$9^cIF+VhQg8+xN{3OL4?suK zQ8bfgVGI0E$$6SXbE%c)(a|(teDxR7vDjO+2y>Fh(+Q-T?7@2AiL{iK(MfbNEvFT9 z3Y|(WlPlyiashk9PN$Xh2Al*?4PR6Zyis*@CY?p=X#JQ~^hUar-b6km=g3FoH2Ii(Le7#?>dvf*ln1NdIxqgzKh;X@1a}iy*+*lc=;ac@mtWH z^l_YH{TKQK{VUxKzgaikL-*3B=sx;4x}QEx?nPJP8Tu@Jjy_Lczd7wLEOpYYuMK!2n^(Vyur+@nH&qyMIt=w*6^ zUZpm8Ckgt$IKYyr%z*u2P3YaaGB@VVcrVinGjM&FFY{ymtQYIe0$3otfI+M;e471O ze-^?*(KQZZ;mpDYun4STjbZ~?G#kWX&^vgF4Q8=qKY5zG%7&1A$&2JAmO!3oiR51_N%(iL$c3eoo5=$#gAHZF*l?VgcsEX)+)D02f9w%*E9MJ7 zMmCe%$sObwHj<5EnJkNCvmBPotSpa>X8EjujbVjsEE~s)STP%q8N?-QA}eKOY!aKy z%2@@Q!ltrm+?T{|U{$P|&0saGmesMDY!<7B?`bxh!x~u=Yi2EME}O?%SsQC-9c(^Z zz!qXY@?y4x-N=@*o3KICa<+o4WUJU}wuY@`oopRj&$`$Kb~D?^HnGiY3%iBg%5Gz~ zvpd+G>@IdUyN7LM_pSJ)x;Dm%-go_)qHu+P~S>`TnE z{+fNmzGWBLckG|+d-emi#rlc;%zk0NvVXDP*uU8&b{U6lU1c_AhaZ?K48CAhF(^iy zDvC4Fa2l#RPA>CQyx`~dQG69Y#b3dZ21{A8Lv!GN|cF8sZyp)QYI_qm_a^8nW{`vrYn`o z4N8?#t;|qrlv<@unW@ZD>Xim%wlYU)RGO4#rA3*m%u`yGHlv~s;^VV&U0deYwYJr?wAQ&5%xbNkU&n8{6;#)Bw2P>BK}|zzO-Iwr#=3?4mM5G> zb**)64Q&ESR#SCNYfH1KS__R?Gg|BB*BPrtV9IKl)zVxy$5gF_?m0cM+-rK`YEErS zyIO-EV{T0~z!__`AQ!N!+f7!9q)sBSYDnrt;AX{h)ipJB&FyY=demfRzBxE?Cx}#oY=7`8>E$&sIS4osC7{deBFx!1h4{G<>J#mjh zCt5w`T$7m9T36THSlwLPP-7e`By4OHfyY?qa*a+2<5-PvjUrITa{e^p$5^C2->f}f zp*NOQ~y~Wh$1^ZIRL~)}-4a0?*?5j^)hLV;vS_=06f~A z62?*uOuGowQZDs&{20rGsEr*WFqO$#b;w$kX|?JQfuXFmp?Q{}ga3M#IoHXv!#QOt zlUm%Nh3=DkD0E-o6t8fKFY1XKr)YIuECRPFx-Pjb)}w~TmgZS)Zdsfbtyr}lHDy^v zmI)Ked4u3y+}2p#R5+ZI_|?LCT{8hC3XGCazh9&jses+*-1^liW+*Wfb< zd}?-Gd$nP7HAoX}Us6W0N#aze;FbcMhSGY(TsTsW&rn!BcWyOIrD;ZOH5=E#iaJ<% z0~A(J!NxZzCG{)?t4$J?x)?VUezTodQRTo4 zb42wTMfEg7vvXK;2V2-+YSHSbwAQy6+js>N3?fk4QBR3qnTtBs-~u^@7A^n}4%R`I z_jP1?NSK=Ram`?$)56wloZZZJ(bE+digXx zmafM#9I@1RJ*MMIb>K=!PI25#(4i#gP!e<~i8_=-9ZI4DN_=9n14^O}FELfm(;+A7 zkP~&tNjl^t9deQmIZ5Y5l8z%u$C0GtNYZg6={S;f9LYM4WF1Gcjw4yek*wqB;Y+fP zBU#6htm8=5air>0rRqQAKVPo(Nkr0G

9nNjw4~{@r0I~;bjWEs}nhrT# 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

!GC&_!#ZtN*Mh&_?3T(2tal^%sA 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 tF{6TqYG~a+&=^Ld*=$fFp9q2yx(>MC>Dm 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�?uC|3&0+ngjt%GBCAB^%e& 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

_T_kl)Xoan=RX{3lY#VQTZ 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 literal 0 HcmV?d00001 diff --git a/fonts/OpenSans-SemiBold.ttf b/fonts/OpenSans-SemiBold.ttf new file mode 100644 index 0000000000000000000000000000000000000000..54e7059cf36359cb5a3860085714a95306af0dea GIT binary patch literal 100820 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 DEZ%x^ literal 0 HcmV?d00001 diff --git a/fonts/OpenSans-SemiBoldItalic.ttf b/fonts/OpenSans-SemiBoldItalic.ttf new file mode 100644 index 0000000000000000000000000000000000000000..aebcf1421226d045b8043d26433d780fa365b7de GIT binary patch literal 92180 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 OmxABnc!Ht?`Tqc{BF`NF literal 0 HcmV?d00001 From bd8631a4b8bba4572a8d506eedf00eeda3ebd38f Mon Sep 17 00:00:00 2001 From: Emil Bohleber Date: Thu, 21 Nov 2024 14:20:14 +0100 Subject: [PATCH 004/371] add ionos logos and icons --- admin/win/msi/gui/banner.bmp | Bin 85894 -> 114514 bytes admin/win/msi/gui/dialog.bmp | Bin 464774 -> 619346 bytes theme.qrc.in | 5 +++ theme/black/hidrivenext-icon.svg | 4 ++ .../colored/IONOS_logo_w_suffix_frontend.png | Bin 0 -> 3814 bytes .../colored/IONOS_logo_w_suffix_frontend.svg | 35 ++++++++++++++++++ .../IONOS_logo_w_suffix_frontend@2x.png | Bin 0 -> 7455 bytes theme/colored/hidrivenext-icon.svg | 4 ++ theme/hidrivenext.VisualElementsManifest.xml | 7 ++++ theme/white/hidrivenext-icon.svg | 4 ++ 10 files changed, 59 insertions(+) create mode 100644 theme/black/hidrivenext-icon.svg create mode 100644 theme/colored/IONOS_logo_w_suffix_frontend.png create mode 100644 theme/colored/IONOS_logo_w_suffix_frontend.svg create mode 100644 theme/colored/IONOS_logo_w_suffix_frontend@2x.png create mode 100644 theme/colored/hidrivenext-icon.svg create mode 100644 theme/hidrivenext.VisualElementsManifest.xml create mode 100644 theme/white/hidrivenext-icon.svg diff --git a/admin/win/msi/gui/banner.bmp b/admin/win/msi/gui/banner.bmp index 7eba2ce1a7700f2010105784749f73ba19ef0247..fa483161f4a6ed96708261f7aeb1524da2cf73c2 100644 GIT binary patch literal 114514 zcmeI)JBVCm9ER~(B7)io!8W9llwvv|5YmW+5Cd8XYO|dZuu=qV*1~4hLP!yl!p5Xf zQbe~gAr`UP*aX1@5(pTGh(r<6jq{wzJO1~}ncd0m$nJ*c;COD|?feGjJ-6(Umycao z7%+V@`g}0@{4rX6VKiSD>>unI&42n~VX*h9LH8N0-k*kp!T3McheuvK_U`hfe-6Cz z{k~`RE&aZ5@ZiC{i;IiTjy{i{IC0{MLr?y)=fLaB&!;x?$Lh*xdFZ5o0tzUgfC36A zpnw7jD4>7>3Mim}0tzUgfC36Apnw7jD4>7>3Mim}0tzUgfC36Apnw7jD4>7>3Mim} z0tzUgfC36Apnw7jD4>7>3Mim}0tzUgfC36Apnw7jD4>7>3Mim}0tzUgfC36Apnw7j zD4>7>3Mim}0tzUgfC36Apnw7jD4>7>3Mim}0tzUgfC36Apnw7jD4>7>3Mim}0tzUg zfC36Apnw7jD4>7>3Mim}0tzUgfC36Apnw7jD4>7>yISDxZ#Rbb{`zw+$FP~UsNtzi0+=tY@tG z&Nv>nCzn(2-rwVM1lFnZ)mzWi=3Q1m0Ru z>>MY#$oOLzYuc}$zIz7LOJ-9aQ?}v2bp2Asb*i_mde4Ay)QNU-JaxOv3Mim}0^2K) zjOntY+`G-Fl7aO;>78ri>p|*}4eeCh%sw)R@_g8zoXURY$u`Q+N2Z)3oO|zRHcjST z?vCzX*K+{2(MG+7om40b$!x}wPjWNGDAV2>ubE9b#+R|>*i)Z*jw|Ox^pW!x>QaX( zbx*#wf0z%)(e_8#II_%fc4HWwuP|pyW~UwI)TvpV`zKuA*QqU6_qnWq0tzUweFDh| zey5Wubu@kXSFdkt2BcnXGuy~C`XH;wh~!lEGf%d)W9b`1t=BH+dOkVY?$3JKrN8!5 z%WRa{w3G9L9D6+{$#KP(vT2ifo3p8#^PJSnn3ywO`l|P~Yg;+5N*?FFd-6Z^=sROi z`?THny=K321r$&~f$b4U#_&7cmkr6a`n&$HnN0>I6X}oVsLb0b+18GwZwzhStk*XB z`batEw9B<-_pF!ay`xX=SEn3hlCQa+oZL$p&O=fro@~R6?8}(&O%A7xWNX&RP(B#- z=qmU>1r$&~fgK@`jA?T+ zgX_!7{LWLS?|Q7ZNjqc)!pE>1|*_2_Ox_!2(7f-S`$Ju5!+w)EUZ88=n z#>{#q#+r5Jw9P#V>N+W)fC38a9D)2sw>g;+_T}ZQnVmdIzK|*DFBy@3m?tmWvGk3h z)@$q1Z}O=vSJyY2*||@UbCEXpYac9gUCX~$o97hMoKMhpo7tP~kG9u4U)XHB)>A+M z1r*qtKr*z=$+X&+m$POz_iWd;f1|tSN?-HLY_46&Y1(DZ`YaRg*O7B|;@vIY*UH58 zdY+4Oon7DQ!e*9h(VUCSIl9Q1?DfXHdAjt(7{$R zn`gDj(&P&nIM2-9Y+gTbpi?&FzVnpbGjE<(J2Q8<#e%zSyjwh6t1F;@0=q)s|H^DK zy0)F?we!yGyfgJM*Vnt^i*b+&D4>7>3N!*WSLgZO_^m7Bzlq8*+>cIH_C5E^yVEI?Yi#PTm)ZF{Ak?eRe)G3K@?1IN zV4gneb7kJkqHJxW)^S+@1r$&~f!!#uQD*1;DYB9Gq{+tQF5CK^d$KLhvFkN9KB-H; z?Nr}wqa1zb-E8`*xtzLr-cEn~8)M3(?>s|KS?3BUpnw7j>}G+DGMi&d&gPmn^S<1r zJh_=N^%}djHLY$PPugJ482Zi+YR=d4KHo;$NdW~EP~cG#$h+OsGLd5?E4gOP_3QW= z`1Di;?oCs+y~d_O{?1sN<+ZWyTK@ju$EF?nUhm&qa}2rOCbwB$uYB#xWd#&aKmi35 zP(T3%6i`3`1r$&~0R@~ literal 85894 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 Apa1{> diff --git a/admin/win/msi/gui/dialog.bmp b/admin/win/msi/gui/dialog.bmp index f548941594d7772eb466a98a2a3b3e6e037548a0..b870b472556dfb47177bd600b204c1453d492fd6 100644 GIT binary patch literal 619346 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 F{C`t&OI82? literal 464774 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 diff --git a/theme.qrc.in b/theme.qrc.in index 5f0b5b417582d..52e027b769ff6 100644 --- a/theme.qrc.in +++ b/theme.qrc.in @@ -242,5 +242,10 @@ theme/call-notification.wav theme/talk-app.svg theme/chevron-double-up.svg + theme/colored/IONOS_logo_w_suffix_frontend.png + theme/colored/IONOS_logo_w_suffix_frontend@2x.png + theme/colored/IONOS_logo_w_suffix_frontend.svg + fonts/OpenSans-SemiBold.ttf + fonts/OpenSans-Regular.ttf diff --git a/theme/black/hidrivenext-icon.svg b/theme/black/hidrivenext-icon.svg new file mode 100644 index 0000000000000..8da01eec16cf2 --- /dev/null +++ b/theme/black/hidrivenext-icon.svg @@ -0,0 +1,4 @@ + + + + diff --git a/theme/colored/IONOS_logo_w_suffix_frontend.png b/theme/colored/IONOS_logo_w_suffix_frontend.png new file mode 100644 index 0000000000000000000000000000000000000000..796fa1d7815f6f0713bcd04f52c5e2009d3e86b3 GIT binary patch literal 3814 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 literal 0 HcmV?d00001 diff --git a/theme/colored/IONOS_logo_w_suffix_frontend.svg b/theme/colored/IONOS_logo_w_suffix_frontend.svg new file mode 100644 index 0000000000000..e65d8b2190ed7 --- /dev/null +++ b/theme/colored/IONOS_logo_w_suffix_frontend.svg @@ -0,0 +1,35 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/theme/colored/IONOS_logo_w_suffix_frontend@2x.png b/theme/colored/IONOS_logo_w_suffix_frontend@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..921840999cd9a36c4dd5223a04e10fb32d1038f3 GIT binary patch literal 7455 zcmV+)9pK`LP)?l@&Buft5HjXWrtjAnXdp zeVdb*#NYywWyu5xKp+WG_jiuc+N3NIAc;TkCxg2jz8C={PsRT|6t4j=xB@O-U*I|X zXPiN-Jf02#_;M@i{w9uRqS=}W;eA|-U@_0X5KYM$yg!X+tX6Y> z1}kxAOPq7R2_EAOe=0=Y3Fxm&9Vl?mg}{wltP=!55RIV(-{JHEsuz`OAqtM85Pe54 zPZz?-b+O+B7sg2xi@#ayEyj=T;xQHGk-$B#hg3kcmj@!DpOr))eKF(a`AhhsGt@q?b z9fHdY&OK){=<3`fDE4~t{7#`h2J#v@dgbzfM-T)-bOaQ9ZVPFC^9?i!E{1BsZ-RCg zep{Gu`?d4Ab&9V09RBm9^K-uvd(Dh3FV5v>5(GgIdqn~?Ot7c3 zR=(EfejqGh^?rvY&n+EYw-OTsK@hjZDfqUt@L)Z)88H4zzPO{Sbe&9e(w1hFy>yr@TS0dpFn6Bo>R^T zX>M_MI30<9@mxs31r)V06rCmrf*@)oJ`11B&h+RV`UM_o7sL5DgAe105L1spSxD?* z4aQmF!pl9Zd|k=7#JOjVbs-sC$#!$bxqo)%H}^?RbI*PPH_YcZf*}DtI0iRs-!+Ln zf*^?fAU?t8(se>%-!=;S0CRW(ZVVa~RQ&|ornxP`2OWvU%8Mbmk-=v%pEjb!Z|>9J zZe8WhOPe}1F5Rie-K{CNWeK@h}V5TD@V$B@8I5sD>HICrz6CC);`jk|Gp zepbFwvvmXOf(>2v_L_U(ZrRXz;%bdEU9fy7Eu(RLXyLRs2H;*7BjHNESi-(Q3;0n5T zd8L^9#YspK1VIoxO@tOcmtwp8Pw+vx05j|T8T%UQhQTUc%*V=ywc~c*%9mR2$+^1_ zLR69K%zA&8xQI}Tzvm!oG0WID#tvgvQPgp`y7xD^aQmt1VIo1Ai)w-;XT+YFTZp89+82*>T&JSrW34$Pq5Rl-D zjZMMEol9p7;7c(AB2L_54+l{2pMf9D(~Ac$=s!51gnTlqK}0TCZ6 zQ+Dq179sc_LJm_P2!bF8Pe|~^3fpkYx?B0yyLS-rz`a_Ujo@(lI}ijx5QGOL_~K=- z=9cxb@-g@gi1={r_OXIQA3+cV;ROl4nBn*8@VT{HBP(Cb_*nUnk$4awAx{tlK{!Ez zFK*H`!FD-*1Fn`Kvhu}=>Sa3zAMindL?1yA1mOS)zS!9mY(+s0wScb4{i~UWq zC-?Uk7DRnuZ06w<=f*Ds7e(LUi@)LW*K^oqzMrPrZU2#drQ`SvycU_9t5p7+i`UW1 z3A}%1mxzNm?f-$FzzH=DZG($e5B>n(F(mvjoqM6qttLKW-@q{~_^G%~&LEKnAGeN8 z3&_H^D{OD&8_`pA#Hb{WEd+Tog`-!y-CgBCh^PbjRQfUrHMh^W(0s;))%%Cyd$2n~ zWr-5qXI6hB=jYnvta=?zxp@6oye?#k9xUAyYHXSU$FL{IJ6-#|%NP=VU_pQFxfN*a zO`k#WPke4yy#;BVpJ#cbzAU+m<3 z0@|ByV?C_#^M`;Bah%N-Lhz5BSxj#@-iLH!NZ|>sA;zAJ0`U+~=q(|^w@WZsE#^K} zzRe!JM0|W0Pqr3)6t7t$>|4Xew8iV|MBE=Pq~$Mmiyvd(8MY2~&SKde20~y^VfPq7 zD|kSmw}b@WZZTTB8M<5f1|?R$42ZbcR`j8}j6`2un6Ee0E4fXE(&86)B9D2D{sC=| z;XZRhZrAQYf^XO8^OazeRzCh3T-dboZ6hp*`q)nN4M_CW1TX$HY@I7v3Ccu@O1$n zw=CNzAwgEYxIxj!z<0qWOJ5g3>pr^ud+-3v$yey!kI%JB#7;`3yt)MmzOLXd*aos_ z>k^9Pi=PCJw-$XAjNLs@`1NE@=FG6ykX&?xGfY~CDfz1-kW05Kc)4X6KE2(I4|@&d z){Pf*tqg^0wh+RNgU?MkgNy`a}r7kJ^2d>vs+z!3T(3+%tG_=X^}& zw{0Nzk=rrh--;*kZ*G6jl1yB;+0KoPvJM|ZOz6k>O8h>HE_@*pNbq$DwDK_r!G@yY zZjWA!sX3hDqL2a+Crb1^5jVB_t*Pu73Cr#r-aqqA1leyeZZ6lgVdH1Q_5K#x0vEZ* zFP=-QOgZa4xlLdJ=koJwF76ZRf#K*S_V%0rdJEW^v*V=nhq&BJaG~Zhc8A#>^_x31Yr#SS>FeL#IeC~#H{Y! zh^rmS#Gkf%b)(3;;ZMc5o*2it2YzFW-D*JlAiX;8ZNQR9oQ<^GF+u5WY~-QLreDS3 z=b#6}u@0x@@!Y2C2gs${Excm+HUhqj!nX_v(G+$rJUyJ9lWTV?($ZIc$I{RimBrY( zZE{yy`r-=_h<$vyED1Hxz8~AZ9lre8>F$hysho3{0Rz~7!s;Dn5_N-A)eZ4 zyC%=K9$Md0@Ilq1{8%ZhQQ%|ABQ2JqSL*=)RahJoty+QvU)NApz6@NrYvuFl(Mz<$ zHlmOEDtDK@d}z~=ZY3@lEUg!IC0o% z-}{>k2SMv;$T3!;uiCwv02Wr)jlods+FiMF%PHEA*`%b6E~1hzFbLHC!n~WohgQDF zFJ2jfzloT@1s=0^bD5!OKj*y!pVnuv3-qOB3J6;;-i@WDn-Wjgm@EDzg!G{GGS@BI z(ycoO8*j&Th}f&m7zPAm2dl8yfePH;HO$Kjh0m| z+;-)H;*AtCg|Ou5$|@<5@d(-kg~{O*t)Iiv?KYxmTXH@TV_d%W;Df|xVTCKVmf;vr zj8zP5$`hH#VCmXDzWt4KJ!^%0b&qJ(YH)P>vl6_YO83P$L)FvU8FJ}%6(6@OgVh2- zv3$FSya7A)-5pR-)sB*w+;TxId>MQZ!UO}*?=HOP!bK0m<@fH2}iILh7$z|zAnO(OuH=!V731O)xDYP zvH%?zl2YzIwCXUqa}#62%c9nvRxppP7IwTh7bcgeN5*kzP&5@r!Jb;h!};*V5L=Ar zolS3F6~{U@e8vcD{)TZ3ga-|UV_}TFoWc83mxu6LA;H&We5`zZzH*7k3yVi{vJw`k zMb>`Kn~LWm;(>21_-3tIEYyNO*K9qhwB9g7c5YHs6wXfci5{2ZH(-mYW@@6bJ~oYt zIh$*@E7$H2LX&9582DSK^G?l2`MoeoPu8K8%C8d&BGn z%|s)bfO{5XCiVliWo%sz?T32k>y27upKArx%))w9zPJ}vLa_v{i527#J%m-cb`uDj zNu}1FVd*y3^T=Z6nt5U0fi0#nFtxah$d$W<1Yg&2xALtQ-VUlyyv%1yRJQY{lU+( zb2qULWDny_{XjOJPi52ZFBbK`Y(SSCgKoi-GhoHvusv?&igp!VJlyDSyMl55ab%HL zkInbBhf@0NEuaQuugQY+$Fm$__ir8fM#>sMKP9}oG*R0EU{wC(#kiHKViIy zDuqxt4uX%R;7@A3C+8tV#yYDyUL*PQa$&}@BS$Z>;k^INLjCQB*8B4vu?F50Z-Xo- zhf@qR@4nzOT_4-H{EL{*7ujm9?7lWw1m&NXyhqnsZVr_nXAmQJEwg|Qv%b7XWe^KF zjK!hrteE%9l=xDxRO@$?;y&P$?EmC_!2Wzj*RD;iQ|Zb*%^*Tzbm_Xd3r@fXOrvHl zi(GP2mR$cO-_T5&qAyCrT6521H!t;zd@=GreJEHHl)VHlCD`e5uBQQdMb zCS31*xPI`8PA;L7SOOED;OkXnO5F$J2QI7@N7eSnHMKj7A}cKf?rvE>3#u>fbDv80 zsLkBt#mXG#o&`#xSfaXGq?UWzpV!FIbn4M)d=5khF=VOA9=jdFSkLZ`Th|ooklWsO zjNu(w(APgAjjhG;=G-KZF_zK4j-WZLCkyuCj(wi-fq{Wts13F>jkJSNd`TPl6rt;t zs3(<+qY8Mx??0E-u=(jiox7Tx=g<{a$rnTG_b3t3OiY5$+~X6K-P}*WmAnXh-0mF? z@Vx#ckL@#iT`E3N$YL!l?%_({4b3aj9I6NBP`ll$mRaOr4ZI{7mTVcy2PS#lXo~sT zv{GA=_cCqHMh;IpV;HES&#+f5j%TXbV+g*OS_0a1cc}~2RV20Ezc0N{$JSZE4H0LS zu3s6DRK}?tPBG44E?mQZiJ!lgzn58yo&mR!rdNC8KDH`Wt~oalijX0=v7Gw}VA9X} z+z-7oyK-lXqnW;VvdqC96x|0fS%~3m@!MsA(t(&$A1H3Ai>RjYI*Ct{Jr__Gl#7ezm2or`huish@RXJQ#W(6_^>CWZTR?@Rc( z-@b_T5Y%zuOP_IQ1C|aTx9*b$Zp>Yz z+O_M4x<_ixQNujeg{qKN1{(%#_{C5k)5zUxJ91sCE{h(%U8670w+zBlZYkYNB5VRx z)gjev&EWFc$S8bW6ANo5UcsjtAJ3sJaAEFh2BVJ!wMi@A<#+~NoqIL*VO_lM$)bl2`+;lgtxmKJJ0RA=q_q3=sPaL#~5 zvE?hcWVXAZs>7E>p=l+2b?08{bzam&+`V*F)8Y)82jiP2&~4(i@*!1CyXyiobL*b_ z_RebzJ|0skmK_HdFuWFzUY;*1{|_tP(f#|G^bBy9_{7Z1%58dBMi<`EE4!)&IEPqZ z{VVumr!9kZJis2vxXSW-ze@%zJ`7*LzhuYFr|7>ir* zp+7&D)`%t-{_Iw{cNt|xa~#(OV<==*^TsVv8GLTwGw}w|ljm5of);O5*b|b77tA<6 zoPILCa`>+dm{+l?RbpX3?q`Twarrs;qkmZD#cUBvsRtK-CDccY;Qou97JZ=~&ZXth zP#Y0jyj2yZS7Us!s9rF1?p{>o%H4c`k{(GzJfEv;*Bonma?dg>A0UK9vf?-~OV_@C zDUu`^Gzq4E8SB=Um?7b~Drh#mSG;=dwIhD6p$X4rnb+%XdhoVvJA4n7$R`tz!N-|5|*92jXXZ z-{v_m5_5J9@5j~g;kK^aO?vE1eCMAu-#PWj+SQ%QgT;g4)$KmA8bvawN~A#x-xavf zMg?%Zz;bv5^}4~@6MM|zxZGOLnNh8B9QxO`&|*$mBI~yDwlnwmFrzGe8Po}hy?q4F z=|_808*T}=>KVR$Nus3ko|J+tLd@_U`@4LhMOI%g^F$U;-&K_7U=E?Miw{f}R&F)E zIMybsH@a4JT7Icdrli1rk-n4p7w+gGi zmvX0Azj9RhkdV~`u7xpWw=?HMyLM5O7eU8ZJOov&wXUw*O{&V(xVUz?$9h{~lt~;i zBHK^v$BXQ8`~Vr+YLWmVHC3tmp6vLW^Ybb+)xMr!WW4IqPU!3z6I z44t)Jn@k?tvk`b*IeVB|_<;C%JG>*|3+c=5Msvr5|N$&+?&*e{DJ76dP} zZG<0}$NEJ6jaU}M56{jjL|;9@*Q*4AOuJ7^E!QD3;2h7QJ*V4%7pCC(u>G->_rcdfzj`q1it9bJYj^oK@t)=Vf5$DZvm)fKfBT0)oU|Bd%HgTFC>}1p7{2+f*y~)J*zqkM>IrKm)3g(; zbS|?#6zjz((LWrUd12NSc3>Ux6q;;*%Ilw2g;q;LZlq2!E z%lW@vh>lm$Eh5UDG6R>n2Y4sDc4l{z8|Uaot17Y0$pS1+RZgqEZ@&i zWBfo0B{jy_%UACjRcqHf>oJz?R}Dhd)!>2m;vc7DVN(09bbBJ#t9jL*k$-16eISI~ z?}nDBtF^k~e!zer2!bGpaL5NyAxPMo@I!CPoGkBwz%lNvJ>a8oyOKSRyEw+m0I>eh d|HaK>{eQh+Iv?Ql=63)9002ovPDHLkV1fhgi8=rP literal 0 HcmV?d00001 diff --git a/theme/colored/hidrivenext-icon.svg b/theme/colored/hidrivenext-icon.svg new file mode 100644 index 0000000000000..8da01eec16cf2 --- /dev/null +++ b/theme/colored/hidrivenext-icon.svg @@ -0,0 +1,4 @@ + + + + diff --git a/theme/hidrivenext.VisualElementsManifest.xml b/theme/hidrivenext.VisualElementsManifest.xml new file mode 100644 index 0000000000000..424d569fc64d2 --- /dev/null +++ b/theme/hidrivenext.VisualElementsManifest.xml @@ -0,0 +1,7 @@ + + + \ No newline at end of file diff --git a/theme/white/hidrivenext-icon.svg b/theme/white/hidrivenext-icon.svg new file mode 100644 index 0000000000000..8da01eec16cf2 --- /dev/null +++ b/theme/white/hidrivenext-icon.svg @@ -0,0 +1,4 @@ + + + + From 4848f4aeda1a3a652b92f8384c88474f737afad2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Christopher=20H=C3=A4tty?= Date: Tue, 14 Jan 2025 13:11:42 +0100 Subject: [PATCH 005/371] add style sizes and colors cherry-pick 205b5055302a65b375efb6f6751402dab2eea290 --- theme/Style/Style.qml | 81 ++++++++++++++++++++++++++++++++++++++++--- 1 file changed, 76 insertions(+), 5 deletions(-) diff --git a/theme/Style/Style.qml b/theme/Style/Style.qml index 11c49a52aa66d..9d5f6f6788dbb 100644 --- a/theme/Style/Style.qml +++ b/theme/Style/Style.qml @@ -2,19 +2,28 @@ pragma Singleton import QtQuick -import com.nextcloud.desktopclient +import com.ionos.hidrivenext.desktopclient 1.0 QtObject { readonly property int pixelSize: fontMetrics.font.pixelSize readonly property bool darkMode: Theme.darkMode // Colors - readonly property color ncBlue: Theme.wizardHeaderBackgroundColor - readonly property color ncHeaderTextColor: Theme.wizardHeaderTitleColor + readonly property color ncBlue: Theme.wizardHeaderBackgroundColor + readonly property color ncHeaderTextColor: sesTrayFontColor + readonly property color ncTextColor: sesTrayFontColor + readonly property color ncTextBrightColor: "white" + readonly property color ncSecondaryTextColor: sesTrayFontColor//"#808080" + readonly property color lightHover: Theme.darkMode ? Qt.lighter(backgroundColor, 2) : Qt.darker(backgroundColor, 1.05) + readonly property color darkerHover: Theme.darkMode ? Qt.lighter(backgroundColor, 2.35) : Qt.darker(backgroundColor, 1.25) + readonly property color menuBorder: Theme.darkMode ? Qt.lighter(backgroundColor, 2.5) : Qt.darker(backgroundColor, 1.5) + readonly property color backgroundColor: "#FFFFFF" + readonly property color buttonBackgroundColor: Theme.systemPalette.button + readonly property color positiveColor: Qt.rgba(0.38, 0.74, 0.38, 1) readonly property color accentColor: UserModel.currentUser ? UserModel.currentUser.accentColor : ncBlue readonly property color currentUserHeaderColor: UserModel.currentUser ? UserModel.currentUser.headerColor : ncBlue - readonly property color currentUserHeaderTextColor: UserModel.currentUser ? UserModel.currentUser.headerTextColor : ncHeaderTextColor + readonly property color currentUserHeaderTextColor: sesTrayFontColor readonly property color adjustedCurrentUserHeaderColor: Theme.darkMode ? Qt.lighter(currentUserHeaderColor, 2) : Qt.darker(currentUserHeaderColor, 1.5) @@ -93,10 +102,13 @@ QtObject { property double trayFoldersMenuButtonDropDownCaretIconSizeFraction: 0.3 property double trayFoldersMenuButtonMainIconSizeFraction: 1.0 - trayFoldersMenuButtonDropDownCaretIconSizeFraction + property int addAccountButtonHeight: 50 + + property int headerButtonIconSize: sesIconSize + property int dismissButtonSize: 26 property int activityListButtonWidth: 42 property int activityListButtonHeight: 32 property int activityListButtonIconSize: 18 - property int headerButtonIconSize: 48 property int minimumActivityItemHeight: 24 property int accountIconsMenuMargin: 7 @@ -205,4 +217,63 @@ QtObject { function colorWithoutTransparency(color) { return Qt.rgba(color.r, color.g, color.b, 1) } + + readonly property color sesIconDarkColor: "#001B41" + readonly property color sesIconColor: "#1474C4" + + readonly property color sesBorderColor: "#D7D7D7" + readonly property color sesWhite: "#FFFFFF" + readonly property color sesGray: "#465A75" + readonly property color sesTrayInputField: "#718095" + readonly property color sesHover: "#F2F5F8" + readonly property color sesActionHover: "#1474C4" + readonly property color sesActionPressed: "#0B2A63" + readonly property color sesSelectedColor: "#F4F7FA" + readonly property color sesButtonPressed: "#95CAEB" + readonly property color sesAccountMenuHover: "#DBEDF8" + readonly property color sesDarkGreen: "#096B35" + readonly property color sesDarkBlue: "#001B41" + readonly property color sesTrayFontColor: "#001B41" + readonly property color sesErrorBoxBorder: "#F50C00" + readonly property color sesErrorBoxText: "#C80A00" + readonly property color sesMenuBorder: "#2E4360" + readonly property color sesSearchFieldContent: "#97A3B4" + + property int sesAccountMenuHeight: variableSize(40) + property int sesHeaderLogoHeigth: variableSize(40) + property int sesHeaderLogoTopMargin: variableSize(12) + property int sesHeaderLogoLeftMargin: variableSize(24) + property int sesCornerRadius: 8 + property int sesHeaderTopMargin: variableSize(10) + property int sesSmallMargin: 8 + property int sesAccountMenuItemPadding: 12 + property int sesMediumMargin: 16 + + readonly property string sesOpenSansRegular: "qrc:///client/fonts/OpenSans-Regular.ttf" + property int sesFontPointSize: 9 + property int sesFontPixelSizeTitle: 20 + property int sesFontPixelSize: 16 + property int sesFontErrortextPixelSize: 14 + property int sesFontHintPixelSize: 12 + property int sesFontBoldWeight: 400 + property int sesFontNormalWeight: sesFontBoldWeight + + property int sesIconSize: 24 + property int sesActivityItemDistanceToFrame: 24 + property int sesActivityItemWidthModifier: 26 + property int sesFileDetailsIconSize: 58 + property int sesFileDetailsHeaderModifier: 100 + property int sesSearchFieldHeight: 40 + + //Tray Account Menu Values + property int sesAccountButtonWidth: 256 + property int sesAccountButtonHeight: 68 + property int sesAccountButtonRightMargin: 33 + property int sesAccountButtonLeftMargin: 19 + property int sesHeaderButtonWidth: 84 + property int sesHeaderButtonHeight: 68 + property int sesAccountMenuWidth: sesAccountButtonWidth - 8 + property int sesAccountLabelWidth: 157 + property int sesTrayHeaderMargin: 11 + property int sesTrayWindowWidth: 464 } From 47318314f57b23d92fd861c9afd19368e13d0dc1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Christopher=20H=C3=A4tty?= Date: Tue, 14 Jan 2025 13:47:30 +0100 Subject: [PATCH 006/371] add custom components and themes cherry-pick a969cadf461a1e29ba9217adcf9658bdcfbd5e2d --- src/gui/CMakeLists.txt | 3 + src/gui/SesComponents/SesErrorBox.qml | 76 +++++ src/gui/SesComponents/SesTrayHeader.qml | 67 +++++ src/gui/SesComponents/syncdirvalidation.cpp | 41 +++ src/gui/SesComponents/syncdirvalidation.h | 19 ++ src/gui/buttonstyle.h | 303 +++++++++++++++++++ src/gui/buttonstylestrategy.h | 60 ++++ src/libsync/CMakeLists.txt | 1 + src/libsync/ionostheme.h | 305 ++++++++++++++++++++ src/libsync/theme.cpp | 112 ++++--- src/libsync/theme.h | 6 +- 11 files changed, 950 insertions(+), 43 deletions(-) create mode 100644 src/gui/SesComponents/SesErrorBox.qml create mode 100644 src/gui/SesComponents/SesTrayHeader.qml create mode 100644 src/gui/SesComponents/syncdirvalidation.cpp create mode 100644 src/gui/SesComponents/syncdirvalidation.h create mode 100644 src/gui/buttonstyle.h create mode 100644 src/gui/buttonstylestrategy.h create mode 100644 src/libsync/ionostheme.h diff --git a/src/gui/CMakeLists.txt b/src/gui/CMakeLists.txt index a58117fcfe5b6..63e2e0c1e4ddf 100644 --- a/src/gui/CMakeLists.txt +++ b/src/gui/CMakeLists.txt @@ -146,6 +146,9 @@ set(client_SRCS systray.h systray.cpp EncryptionTokenSelectionWindow.qml + buttonstyle.h + thumbnailjob.h + thumbnailjob.cpp userinfo.h userinfo.cpp vfsdownloaderrordialog.h diff --git a/src/gui/SesComponents/SesErrorBox.qml b/src/gui/SesComponents/SesErrorBox.qml new file mode 100644 index 0000000000000..1c821caccde18 --- /dev/null +++ b/src/gui/SesComponents/SesErrorBox.qml @@ -0,0 +1,76 @@ +/* + * Copyright (C) 2021 by Felix Weilbach + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY + * or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * for more details. + */ + +import QtQuick 2.15 +import QtQuick.Layouts 1.15 +import QtQuick.Controls 2.15 + +import Style 1.0 +import "../tray/" + +Item { + id: errorBox + + property string text: "" + + implicitHeight: errorMessageLayout.implicitHeight + (2 * Style.standardSpacing) + + Rectangle { + anchors.fill: parent + border.color: Style.sesErrorBoxBorder + border.width: Style.thickBorderWidth + radius: Style.sesCornerRadius + } + + GridLayout { + id: errorMessageLayout + + anchors.fill: parent + anchors.margins: Style.standardSpacing + anchors.leftMargin: Style.standardSpacing + solidStripe.width + + columns: 2 + + Image { + source: Style.sesErrorIcon + width: 24 + height: 24 + Layout.rightMargin: Style.standardSpacing + } + + EnforcedPlainTextLabel { + Layout.fillWidth: true + + font.pixelSize: Style.sesFontPixelSize + font.weight: Style.sesFontBoldWeight + + text: qsTr("Error") + color: Style.sesErrorBoxText + } + + EnforcedPlainTextLabel { + id: errorMessage + + Layout.fillWidth: true + Layout.fillHeight: true + Layout.columnSpan: 2 + + wrapMode: Text.WordWrap + text: errorBox.text + + font.pixelSize: Style.sesFontErrortextPixelSize + font.weight: Style.sesFontNormalWeight + } + } +} diff --git a/src/gui/SesComponents/SesTrayHeader.qml b/src/gui/SesComponents/SesTrayHeader.qml new file mode 100644 index 0000000000000..3f4dd42c70894 --- /dev/null +++ b/src/gui/SesComponents/SesTrayHeader.qml @@ -0,0 +1,67 @@ +import QtQuick 2.15 +import QtQuick.Window 2.15 +import QtQuick.Controls 2.15 +import QtQuick.Layouts 1.15 +import QtGraphicalEffects 1.15 +import Qt.labs.platform 1.1 as NativeDialogs + +import "../" +import "../filedetails/" +import "../tray/" + +// Custom qml modules are in /theme (and included by resources.qrc) +import Style 1.0 + +import com.ionos.hidrivenext.desktopclient 1.0 + + +Rectangle { + + height: Style.trayWindowHeaderHeight + color: Style.sesWhite + radius: 0.0 + + RowLayout { + id: trayWindowHeaderLayout + + anchors.fill: parent + anchors.leftMargin: Style.sesTrayHeaderMargin + anchors.rightMargin: Style.sesTrayHeaderMargin + + TrayWindowAccountMenu{ + Layout.preferredWidth: Style.sesAccountButtonWidth + Layout.preferredHeight: Style.sesAccountButtonHeight + } + + HeaderButton { + id: trayWindowWebsiteButton + + icon.source: Style.sesWebsiteIcon + icon.color: Style.sesIconColor + onClicked: UserModel.openCurrentAccountServer() + + text: qsTr("Website") + + Layout.rightMargin: 2 + + Accessible.role: Accessible.Button + Accessible.name: qsTr("Open Nextcloud in browser") + Accessible.onPressAction: trayWindowWebsiteButton.clicked() + } + + TrayFoldersMenuButton { + id: openLocalFolderButton + + visible: currentUser.hasLocalFolder + currentUser: UserModel.currentUser + + onClicked: openLocalFolderButton.userHasGroupFolders ? openLocalFolderButton.toggleMenuOpen() : UserModel.openCurrentAccountLocalFolder() + + onFolderEntryTriggered: isGroupFolder ? UserModel.openCurrentAccountFolderFromTrayInfo(fullFolderPath) : UserModel.openCurrentAccountLocalFolder() + + Accessible.role: Accessible.Graphic + Accessible.name: qsTr("Open local or group folders") + Accessible.onPressAction: openLocalFolderButton.userHasGroupFolders ? openLocalFolderButton.toggleMenuOpen() : UserModel.openCurrentAccountLocalFolder() + } + } +} // Rectangle trayWindowHeaderBackground diff --git a/src/gui/SesComponents/syncdirvalidation.cpp b/src/gui/SesComponents/syncdirvalidation.cpp new file mode 100644 index 0000000000000..ca95f334d088e --- /dev/null +++ b/src/gui/SesComponents/syncdirvalidation.cpp @@ -0,0 +1,41 @@ +#include "syncdirvalidation.h" +#include +#include +#include "logger.h" + +#ifdef Q_OS_WIN +bool SyncDirValidator::isValidDir() { + QString appDataPath = SyncDirValidator::appDataPath(); + return !_path.startsWith(appDataPath) && !appDataPath.startsWith(_path); + +} + +QString SyncDirValidator::message() { + return QObject::tr("The directory %1 cannot be part of your sync directory. Please choose another folder.").arg(_path); +} + +QString SyncDirValidator::appDataPath() { + //Path: AppData/Roaming/ + QString appDataRoamingApplicationNamePath = QStandardPaths::writableLocation(QStandardPaths::AppDataLocation); + QDir appDataRoamingApplicationNameDir(appDataRoamingApplicationNamePath); + appDataRoamingApplicationNameDir.cdUp(); + appDataRoamingApplicationNameDir.cdUp(); + QString appDataPath = appDataRoamingApplicationNameDir.absolutePath(); + return appDataPath; +} + +#else + +bool SyncDirValidator::isValidDir() { + return true; +} + +QString SyncDirValidator::message() { + return ""; +} + +QString SyncDirValidator::appDataPath() { + return ""; +} + +#endif \ No newline at end of file diff --git a/src/gui/SesComponents/syncdirvalidation.h b/src/gui/SesComponents/syncdirvalidation.h new file mode 100644 index 0000000000000..a91812da85775 --- /dev/null +++ b/src/gui/SesComponents/syncdirvalidation.h @@ -0,0 +1,19 @@ +#ifndef SYNCDIRVALIDATION_H +#define SYNCDIRVALIDATION_H + +#include + +class SyncDirValidator { +public: + SyncDirValidator(const QString &path) : _path(path) {} + + bool isValidDir(); + QString message(); + +private: + QString appDataPath(); + QString _path; +}; + + +#endif // SYNCDIRVALIDATION_H \ No newline at end of file diff --git a/src/gui/buttonstyle.h b/src/gui/buttonstyle.h new file mode 100644 index 0000000000000..2f199b1352c80 --- /dev/null +++ b/src/gui/buttonstyle.h @@ -0,0 +1,303 @@ + +#ifndef _BUTTONSTYLE_H +#define _BUTTONSTYLE_H + +#include "ionostheme.h" +#include +#include + +namespace OCC{ + +enum class ButtonStyleName { + Primary, + Secondary, + MoreOptions, +}; +OCSYNC_EXPORT Q_NAMESPACE; +Q_ENUM_NS(ButtonStyleName); +} +Q_DECLARE_METATYPE(OCC::ButtonStyleName); + +namespace OCC{ +class ButtonStyle +{ +protected: + ButtonStyle() + { + qRegisterMetaType("OCC::ButtonStyleName"); + } + ~ButtonStyle() {} + +public: + + // Default + virtual QString buttonDefaultColor() const = 0; + virtual QString buttonDefaultBorderColor() const = 0; + // Hover + virtual QString buttonHoverColor() const = 0; + virtual QString buttonHoverBorderColor() const = 0; + // Pressed + virtual QString buttonPressedColor() const = 0; + virtual QString buttonPressedBorderColor() const = 0; + // Disabled + virtual QString buttonDisabledColor() const = 0; + virtual QString buttonDisabledBorderColor() const = 0; + // Focused + virtual QString buttonFocusedColor() const = 0; + virtual QString buttonFocusedBorderColor() const = 0; + // Font + virtual QString buttonDisabledFontColor() const = 0; + virtual QString buttonFontColor() const = 0; +}; + +class PrimaryButtonStyle : public ButtonStyle { +private: + PrimaryButtonStyle() + { + } + ~PrimaryButtonStyle() {} +public: + + PrimaryButtonStyle(PrimaryButtonStyle &other) = delete; + void operator=(const PrimaryButtonStyle &) = delete; + + static PrimaryButtonStyle& GetInstance() { + static PrimaryButtonStyle instance; + return instance; + } + + // Default + QString buttonDefaultColor() const override + { + return OCC::IonosTheme::buttonPrimaryColor(); + } + + QString buttonDefaultBorderColor() const override + { + return OCC::IonosTheme::buttonPrimaryColor(); + } + + //Hover + QString buttonHoverColor() const override + { + return OCC::IonosTheme::buttonPrimaryHoverColor(); + } + + QString buttonHoverBorderColor() const override + { + return OCC::IonosTheme::buttonPrimaryHoverColor(); + } + + // Pressed + QString buttonPressedColor() const override + { + return OCC::IonosTheme::buttonPrimaryPressedColor(); + } + + QString buttonPressedBorderColor() const override + { + return OCC::IonosTheme::buttonPrimaryPressedColor(); + } + + // Disabled + QString buttonDisabledColor() const override + { + return OCC::IonosTheme::buttonDisabledColor(); + } + + QString buttonDisabledBorderColor() const override + { + return OCC::IonosTheme::buttonDisabledColor(); + } + + // Focused + QString buttonFocusedColor() const override + { + return OCC::IonosTheme::buttonPrimaryColor(); + } + + QString buttonFocusedBorderColor() const override + { + return OCC::IonosTheme::black(); + } + + // Font + QString buttonDisabledFontColor() const override + { + return OCC::IonosTheme::buttonDisabledFontColor(); + } + + QString buttonFontColor() const override + { + return OCC::IonosTheme::white(); + } +}; + +class SecondaryButtonStyle : public ButtonStyle { +protected: + SecondaryButtonStyle() + { + } + ~SecondaryButtonStyle() {} +public: + + SecondaryButtonStyle(SecondaryButtonStyle &other) = delete; + void operator=(const SecondaryButtonStyle &) = delete; + + static SecondaryButtonStyle& GetInstance() { + static SecondaryButtonStyle instance; + return instance; + } + + // Default + QString buttonDefaultColor() const override + { + return OCC::IonosTheme::white(); + } + + QString buttonDefaultBorderColor() const override + { + return OCC::IonosTheme::buttonSecondaryBorderColor(); + } + + // Hover + QString buttonHoverColor() const override + { + return OCC::IonosTheme::buttonSecondaryHoverColor(); + } + + QString buttonHoverBorderColor() const override + { + return OCC::IonosTheme::buttonSecondaryBorderColor(); + } + + // Pressed + QString buttonPressedColor() const override + { + return OCC::IonosTheme::buttonSecondaryPressedColor(); + } + + QString buttonPressedBorderColor() const override + { + return OCC::IonosTheme::buttonSecondaryBorderColor(); + } + + // Disabled + QString buttonDisabledColor() const override + { + return OCC::IonosTheme::buttonDisabledColor(); + } + + QString buttonDisabledBorderColor() const override + { + return OCC::IonosTheme::buttonDisabledColor(); + } + + // Focused + QString buttonFocusedColor() const override + { + return OCC::IonosTheme::white(); + } + + QString buttonFocusedBorderColor() const override + { + return OCC::IonosTheme::black(); + } + + // Font + QString buttonDisabledFontColor() const override + { + return OCC::IonosTheme::buttonDisabledFontColor(); + } + + QString buttonFontColor() const override + { + return OCC::IonosTheme::black(); + } +}; + +class MoreOptionsButtonStyle : public ButtonStyle { +protected: + MoreOptionsButtonStyle() + { + } + ~MoreOptionsButtonStyle() {} +public: + + MoreOptionsButtonStyle(MoreOptionsButtonStyle &other) = delete; + void operator=(const MoreOptionsButtonStyle &) = delete; + + static MoreOptionsButtonStyle& GetInstance() { + static MoreOptionsButtonStyle instance; + return instance; + } + + // Default + QString buttonDefaultColor() const override + { + return OCC::IonosTheme::white(); + } + + QString buttonDefaultBorderColor() const override + { + return OCC::IonosTheme::white(); + } + + // Hover + QString buttonHoverColor() const override + { + return OCC::IonosTheme::buttonHoveredColor(); + } + + QString buttonHoverBorderColor() const override + { + return OCC::IonosTheme::buttonHoveredColor(); + } + + // Pressed + QString buttonPressedColor() const override + { + return OCC::IonosTheme::buttonPressedColor(); + } + + QString buttonPressedBorderColor() const override + { + return OCC::IonosTheme::buttonPressedColor(); + } + + // Disabled + QString buttonDisabledColor() const override + { + return OCC::IonosTheme::buttonDisabledColor(); + } + + QString buttonDisabledBorderColor() const override + { + return OCC::IonosTheme::buttonDisabledColor(); + } + + // Focused + QString buttonFocusedColor() const override + { + return OCC::IonosTheme::white(); + } + + QString buttonFocusedBorderColor() const override + { + return OCC::IonosTheme::black(); + } + + // Font + QString buttonDisabledFontColor() const override + { + return OCC::IonosTheme::buttonDisabledFontColor(); + } + + QString buttonFontColor() const override + { + return OCC::IonosTheme::black(); + } +}; +} + +#endif // _BUTTONSTYLE_H diff --git a/src/gui/buttonstylestrategy.h b/src/gui/buttonstylestrategy.h new file mode 100644 index 0000000000000..c6a316d25d3de --- /dev/null +++ b/src/gui/buttonstylestrategy.h @@ -0,0 +1,60 @@ +#ifndef BUTTONSTYLESTRATEGY_H +#define BUTTONSTYLESTRATEGY_H + +#include "buttonstyle.h" +#include +#include + + +class ButtonStyleStrategy +{ +public: + virtual ~ButtonStyleStrategy() = default; + + static OCC::ButtonStyle& getButtonStyle(const QWidget *widget, const QStyleOptionButton *option) + { + OCC::ButtonStyleName buttonStyleName; + if(widget != nullptr) + { + buttonStyleName = determineButtonStyleName(widget, option); + } + else + { + buttonStyleName = OCC::ButtonStyleName::Secondary; + } + + switch (buttonStyleName) + { + case OCC::ButtonStyleName::MoreOptions: + return OCC::MoreOptionsButtonStyle::GetInstance(); + case OCC::ButtonStyleName::Primary: + return OCC::PrimaryButtonStyle::GetInstance(); + case OCC::ButtonStyleName::Secondary: + default: + return OCC::SecondaryButtonStyle::GetInstance(); + } + } + + static OCC::ButtonStyleName determineButtonStyleName(const QWidget *widget, const QStyleOptionButton *option) + { + QVariant propertyValue = widget->property("buttonStyle"); + if(propertyValue.isValid()){ + + return propertyValue.value(); + } + + return getButtonStyleNameByObjectName(widget); + } + + static OCC::ButtonStyleName getButtonStyleNameByObjectName(const QWidget *widget) + { + static const QMap buttonStyleMap = { + {"qt_wizard_finish", OCC::ButtonStyleName::Primary} + }; + + QString buttonName = widget->objectName(); + return buttonStyleMap.value(buttonName, OCC::ButtonStyleName::Secondary); + } +}; + +#endif // BUTTONSTYLESTRATEGY_H \ No newline at end of file diff --git a/src/libsync/CMakeLists.txt b/src/libsync/CMakeLists.txt index 72ec2eedee479..1b5e0de585fa3 100644 --- a/src/libsync/CMakeLists.txt +++ b/src/libsync/CMakeLists.txt @@ -117,6 +117,7 @@ set(libsync_SRCS syncoptions.cpp theme.h theme.cpp + ionostheme.h updatee2eefoldermetadatajob.h updatee2eefoldermetadatajob.cpp updatemigratede2eemetadatajob.h diff --git a/src/libsync/ionostheme.h b/src/libsync/ionostheme.h new file mode 100644 index 0000000000000..97d7e34670787 --- /dev/null +++ b/src/libsync/ionostheme.h @@ -0,0 +1,305 @@ +#ifndef _IONOSTHEME_H +#define _IONOSTHEME_H + +#include +#include +#include "theme.h" + +namespace OCC { + +class IonosTheme { +public: + + //Icons + static QString avatarIcon() { + return QString(Theme::themePrefix) + QStringLiteral("ses/ses-setupAvatar.svg"); + } + + static QString folderIcon() { + return QString(Theme::themePrefix) + QStringLiteral("ses/ses-folder32.svg"); + } + + static QString syncArrows() { + return QString(Theme::themePrefix) + QStringLiteral("ses/ses-syncArrows.svg"); + } + + static QString questionCircleIcon() { + return QString(Theme::themePrefix) + QStringLiteral("ses/ses-questionCircle.svg"); + } + + static QString liveBackupPlusIcon() { + return QString(Theme::themePrefix) + QStringLiteral("ses/ses-addLiveBackupPlus.svg"); + } + + static QString plusIcon() { + return QStringLiteral("qrc:///client/theme/ses/ses-darkPlus24.svg"); + } + + static QString deleteIcon() { + return QStringLiteral("qrc:///client/theme/ses/ses-activityDelete.svg"); + } + + static QString refreshIcon() { + return QStringLiteral("qrc:///client/theme/ses/ses-refresh.svg"); + } + + static int treeViewIconSize() { + return 32; + } + + //Control Configuration: Sizes + static QString toolbarActionBorderRadius() { + return "8px"; + } + + static QString toolbarSideMargin() { + return "10px"; + } + + static int toolbarIconSize(){ + return 24; + } + + static QString buttonRadius() { + return "4px"; + } + + static int buttonRadiusInt() { + return 4; + } + + static QString buttonPadding() { + return "10px"; + } + + static QString smallMargin() { + return "8"; + } + + static int minimalSettingsDialogWidth() { + return 740; + } + + static int LoginPageSpacer() { + return 45; + } + + //Font Configuration + static QString settingsFont() { + return "Segoe UI"; + } + + static QString contextMenuFont() { + return ":/client/fonts/OpenSans-Regular.ttf"; + } + + static QString settingsSmallTextSize() { + return "14px"; + } + + static int settingsTextPixel() { + return 16; + } + + static QString settingsTextSize() { + return QString::number(settingsTextPixel()) + "px"; + } + + static int settingsTitlePixel() { + return 20; + } + + static QString settingsTitleSize() { + return QString::number(settingsTitlePixel()) + "px"; + } + + static int settingsBigTitlePixel() { + return 24; + } + + static QString settingsBigTitleSize() { + return QString::number(settingsBigTitlePixel()) + "px"; + } + + static QString onboardingTitle() { + return "28px"; + } + + static QString settingsTextWeight() { + return "400"; + } + + static QString settingsTitleWeight400() { + return "400"; + } + + static QString settingsTitleWeight500() { + return "500"; + } + + static QString settingsTitleWeight600() { + return "600"; + } + + static QFont::Weight settingsTitleWeightDemiBold() { + return QFont::DemiBold; + } + + static QFont::Weight settingsTitleWeightNormal() { + return QFont::Normal; + } + + static QFont settingsFontDefault(){ + QFont defaultFont(settingsFont()); + defaultFont.setPixelSize(settingsTextPixel()); + defaultFont.setWeight(settingsTitleWeightNormal()); + return defaultFont; + } + + static QString titleColor() { + return "#000000"; + } + + static QString folderWizardSubtitleColor() { + return "#104996"; + } + + static QString folderWizardPathColor() { + return "#97A3B4"; + } + + static QString loginWizardFontGrey() { + return "#616161"; + } + + static QString loginWizardFontLightGrey() { + return "#BDBDBD"; + } + + static QString fontConfigurationCss(QString font, QString size, QString weight, QString color) { + return QString("font-family: %1; font-size: %2; font-weight: %3; color: %4; ").arg( + font, + size, + weight, + color); + } + + //Colors + static QString settingsLinkColor() { + return "#02306A"; + } + + static QString buttonPrimaryColor() { + return "#0F6CBD"; + } + + static QString buttonSecondaryBorderColor() { + return "#D1D1D1"; + } + + static QString buttonDisabledColor() { + return "#F0F0F0"; + } + + static QString buttonPrimaryHoverColor() { + return "#115EA3"; + } + + static QString buttonSecondaryHoverColor() { + return "#F5F5F5"; + } + + static QString buttonPrimaryPressedColor() { + return "#0C3B5E"; + } + + static QString buttonSecondaryPressedColor() { + return "#E0E0E0"; + } + + static QString buttonDisabledFontColor() { + return "#BDBDBD"; + } + + static QString white() { + return "#FFFFFF"; + } + + static QString black() { + return "#000000"; + } + + static QString dialogBackgroundColor() { + return "#FAFAFA"; + } + + static QString menuBorderColor() { + return "#2E4360"; + } + + static QString menuTextColor() { + return "#001B41"; + } + + static QString menuSelectedItemColor() { + return "#F4F7FA"; + } + + static QString menuBorderRadius() { + return "16px"; + } + + static QString buttonPressedColor() { + return "#0B2A63"; + } + + static QString buttonHoveredColor() { + return "#1474C4"; + } + + static QString toolButtonHoveredColor() { + return "#DBEDF8"; + } + + static QString toolButtonPressedColor() { + return "#95CAEB"; + } + + static QString errorBorderColor() { + return "#EEACB2"; + } + + static QString errorColor() { + return "#FDF3F4"; + } + + static QString warningBorderColor() { + return "#F4BFAB"; + } + + static QString warningColor() { + return "#FDF6F3"; + } + + static QString successBorderColor() { + return "#9FD89F"; + } + + static QString successColor() { + return "#F1FAF1"; + } + + static QString infoBorderColor() { + return "#11C7E6"; + } + + static QString infoColor() { + return "#E6F9FC"; + } + + +private: + IonosTheme() {} +}; +} +#endif // _IONOSTHEME_H \ No newline at end of file diff --git a/src/libsync/theme.cpp b/src/libsync/theme.cpp index f1a7108bdeb68..5e06ced3f1ffe 100644 --- a/src/libsync/theme.cpp +++ b/src/libsync/theme.cpp @@ -144,7 +144,7 @@ QString Theme::appNameGUI() const QString Theme::appName() const { - return APPLICATION_SHORTNAME; + return APPLICATION_NAME; } QUrl Theme::stateOnlineImageSource() const @@ -400,6 +400,27 @@ Theme::Theme() QColor(127, 127, 127)); #endif + IONOSPalette.setColor(QPalette::Window, QColor("#ffffff")); + IONOSPalette.setColor(QPalette::WindowText, QColor("#001B40")); + IONOSPalette.setColor(QPalette::Disabled, QPalette::WindowText, QColor(0,0,0)); + IONOSPalette.setColor(QPalette::Base, QColor( "#FAFAFA")); + IONOSPalette.setColor(QPalette::AlternateBase, QColor(0,0,0)); + IONOSPalette.setColor(QPalette::ToolTipBase, QColor(0,0,0)); + IONOSPalette.setColor(QPalette::ToolTipText, QColor(0,0,0)); + IONOSPalette.setColor(QPalette::Text, QColor(0,0,0)); + IONOSPalette.setColor(QPalette::Disabled, QPalette::Text, QColor(0,0,0)); + IONOSPalette.setColor(QPalette::Dark, QColor("#e1e1e1")); + IONOSPalette.setColor(QPalette::Shadow, QColor("#D1D1D1")); + IONOSPalette.setColor(QPalette::Button, QColor(0,0,0)); + IONOSPalette.setColor(QPalette::ButtonText, QColor(0,0,0)); + IONOSPalette.setColor(QPalette::Disabled, QPalette::ButtonText, QColor(0,0,0)); + IONOSPalette.setColor(QPalette::BrightText, QColor(0,0,0)); + IONOSPalette.setColor(QPalette::Link, QColor("#1474c4")); + IONOSPalette.setColor(QPalette::Highlight, QColor("#F2F5F8")); + IONOSPalette.setColor(QPalette::Disabled, QPalette::Highlight, QColor(0,0,0)); + IONOSPalette.setColor(QPalette::HighlightedText, QColor(0,0,0)); + IONOSPalette.setColor(QPalette::Disabled, QPalette::HighlightedText, QColor(0,0,0)); + connectToPaletteSignal(); #ifdef APPLICATION_SERVER_URL_ENFORCE @@ -894,38 +915,25 @@ void Theme::replaceLinkColorString(QString &linkString, const QColor &newColor) linkString.replace(linkRegularExpression, QString::fromLatin1(" Date: Tue, 14 Jan 2025 13:53:21 +0100 Subject: [PATCH 007/371] style gui/wizzard welcome pages cherry-pick eda88dc35c6228308b94525b663b640e2244d4c3 --- src/gui/wizard/flow2authcredspage.cpp | 2 +- src/gui/wizard/flow2authwidget.cpp | 79 +- src/gui/wizard/flow2authwidget.h | 3 +- src/gui/wizard/flow2authwidget.ui | 446 +++---- src/gui/wizard/owncloudadvancedsetuppage.cpp | 183 ++- src/gui/wizard/owncloudadvancedsetuppage.h | 1 + src/gui/wizard/owncloudadvancedsetuppage.ui | 1180 +++++++++-------- .../wizard/owncloudconnectionmethoddialog.cpp | 1 + src/gui/wizard/owncloudsetupnocredspage.ui | 4 +- src/gui/wizard/owncloudsetuppage.cpp | 76 +- src/gui/wizard/owncloudsetuppage.h | 1 + src/gui/wizard/owncloudwizard.cpp | 47 +- src/gui/wizard/slideshow.cpp | 13 +- src/gui/wizard/welcomepage.cpp | 37 +- src/gui/wizard/welcomepage.ui | 521 ++++---- 15 files changed, 1431 insertions(+), 1163 deletions(-) diff --git a/src/gui/wizard/flow2authcredspage.cpp b/src/gui/wizard/flow2authcredspage.cpp index 8eef42fab0f4b..9177122178760 100644 --- a/src/gui/wizard/flow2authcredspage.cpp +++ b/src/gui/wizard/flow2authcredspage.cpp @@ -32,7 +32,7 @@ Flow2AuthCredsPage::Flow2AuthCredsPage() : AbstractCredentialsWizardPage() { _layout = new QVBoxLayout(this); - + _layout->setContentsMargins(0, 0, 0, 0); _flow2AuthWidget = new Flow2AuthWidget(); _layout->addWidget(_flow2AuthWidget); diff --git a/src/gui/wizard/flow2authwidget.cpp b/src/gui/wizard/flow2authwidget.cpp index e89a08a7f250e..338b7fb04fa70 100644 --- a/src/gui/wizard/flow2authwidget.cpp +++ b/src/gui/wizard/flow2authwidget.cpp @@ -14,19 +14,21 @@ #include "flow2authwidget.h" -#include "common/utility.h" + #include "account.h" +#include "buttonstyle.h" +#include "common/utility.h" #include "creds/webflowcredentials.h" +#include "linklabel.h" #include "networkjobs.h" -#include "wizard/owncloudwizardcommon.h" #include "theme.h" -#include "linklabel.h" +#include "wizard/owncloudwizardcommon.h" #include "QProgressIndicator.h" #include -#include #include +#include namespace OCC { @@ -39,8 +41,7 @@ Flow2AuthWidget::Flow2AuthWidget(QWidget *parent) { _ui.setupUi(this); - WizardCommon::initErrorLabel(_ui.errorLabel); - _ui.errorLabel->setTextFormat(Qt::RichText); + _ui.errorSnackbar->setVisible(false); connect(_ui.openLinkButton, &QPushButton::clicked, this, &Flow2AuthWidget::slotOpenBrowser); connect(_ui.copyLinkButton, &QPushButton::clicked, this, &Flow2AuthWidget::slotCopyLinkToClipboard); @@ -57,9 +58,7 @@ Flow2AuthWidget::Flow2AuthWidget(QWidget *parent) void Flow2AuthWidget::setLogo() { - const auto backgroundColor = palette().window().color(); - const auto logoIconFileName = Theme::instance()->isBranded() ? Theme::hidpiFileName("external.png", backgroundColor) - : Theme::hidpiFileName(":/client/theme/colored/external.png"); + const auto logoIconFileName = Theme::hidpiFileName(":/client/theme/ses/ses-external.svg"); _ui.logoLabel->setPixmap(logoIconFileName); } @@ -95,16 +94,14 @@ void Flow2AuthWidget::slotAuthResult(Flow2Auth::Result r, const QString &errorSt switch (r) { case Flow2Auth::NotSupported: /* Flow2Auth can't open browser */ - _ui.errorLabel->setText(tr("Unable to open the Browser, please copy the link to your Browser.")); - _ui.errorLabel->show(); + setError(tr("Error"),tr("Unable to open the Browser, please copy the link to your Browser.")); break; case Flow2Auth::Error: /* Error while getting the access token. (Timeout, or the server did not accept our client credentials */ - _ui.errorLabel->setText(errorString); - _ui.errorLabel->show(); + setError(tr("Error"), errorString); break; case Flow2Auth::LoggedIn: { - _ui.errorLabel->hide(); + _ui.errorSnackbar->hide(); break; } } @@ -112,12 +109,12 @@ void Flow2AuthWidget::slotAuthResult(Flow2Auth::Result r, const QString &errorSt emit authResult(r, errorString, user, appPassword); } -void Flow2AuthWidget::setError(const QString &error) { - if (error.isEmpty()) { - _ui.errorLabel->hide(); +void Flow2AuthWidget::setError(const QString &caption, const QString &message) { + if (message.isEmpty()) { + _ui.errorSnackbar->hide(); } else { - _ui.errorLabel->setText(error); - _ui.errorLabel->show(); + _ui.errorSnackbar->setError(message); + _ui.errorSnackbar->show(); } } @@ -128,8 +125,8 @@ Flow2AuthWidget::~Flow2AuthWidget() { void Flow2AuthWidget::slotOpenBrowser() { - if (_ui.errorLabel) - _ui.errorLabel->hide(); + if (_ui.errorSnackbar) + _ui.errorSnackbar->hide(); if (_asyncAuth) _asyncAuth->openBrowser(); @@ -137,8 +134,8 @@ void Flow2AuthWidget::slotOpenBrowser() void Flow2AuthWidget::slotCopyLinkToClipboard() { - if (_ui.errorLabel) - _ui.errorLabel->hide(); + if (_ui.errorSnackbar) + _ui.errorSnackbar->hide(); if (_asyncAuth) _asyncAuth->copyLinkToClipboard(); @@ -206,6 +203,14 @@ void Flow2AuthWidget::slotStyleChanged() customizeStyle(); } +void Flow2AuthWidget::shrinkTopMarginForText() +{ + _ui.topMarginSpacer->changeSize(20, 30); + _ui.topMarginSpacer->invalidate(); + setMinimumHeight(340); + setMaximumHeight(400); +} + void Flow2AuthWidget::customizeStyle() { setLogo(); @@ -220,10 +225,34 @@ void Flow2AuthWidget::customizeStyle() } _ui.openLinkButton->setText(tr("Open Browser")); + _ui.openLinkButton->setProperty("buttonStyle", QVariant::fromValue(OCC::ButtonStyleName::Primary)); + _ui.openLinkButton->setFixedSize(180, 40); _ui.copyLinkButton->setText(tr("Copy Link")); - - WizardCommon::customizeHintLabel(_ui.statusLabel); + _ui.copyLinkButton->setFixedSize(150, 40); + + _ui.mainLayoutVBox->setContentsMargins(32, 0, 32, 0); + _ui.innerLayoutVBox->setSpacing(16); + +#ifdef Q_OS_MAC + _ui.horizontalLayout->setSpacing(32); +#endif + + _ui.statusLabel->setStyleSheet(IonosTheme::fontConfigurationCss( + IonosTheme::settingsFont(), + IonosTheme::settingsTextSize(), + IonosTheme::settingsTextWeight(), + IonosTheme::titleColor() + )); + + _ui.label->setStyleSheet(IonosTheme::fontConfigurationCss( + IonosTheme::settingsFont(), + IonosTheme::settingsTextSize(), + IonosTheme::settingsTextWeight(), + IonosTheme::titleColor() + )); + + _ui.label->setText(tr("Switch to your browser to connect your account")); } } // namespace OCC diff --git a/src/gui/wizard/flow2authwidget.h b/src/gui/wizard/flow2authwidget.h index 4c622fab343ea..6ae031dfd6750 100644 --- a/src/gui/wizard/flow2authwidget.h +++ b/src/gui/wizard/flow2authwidget.h @@ -35,7 +35,8 @@ class Flow2AuthWidget : public QWidget void startAuth(Account *account); void resetAuth(Account *account = nullptr); - void setError(const QString &error); + void setError(const QString &caption, const QString &message); + void shrinkTopMarginForText(); public Q_SLOTS: void slotAuthResult(Flow2Auth::Result, const QString &errorString, const QString &user, const QString &appPassword); diff --git a/src/gui/wizard/flow2authwidget.ui b/src/gui/wizard/flow2authwidget.ui index e98f3c6d5e515..7ab39ab757ad2 100644 --- a/src/gui/wizard/flow2authwidget.ui +++ b/src/gui/wizard/flow2authwidget.ui @@ -1,261 +1,195 @@ - Flow2AuthWidget - - - - 0 - 0 - 597 - 387 - - - - - 0 - 0 - - - - - 500 - 280 - - - - Browser Authentication - - - - - - Qt::Vertical - - - - 20 - 40 - - - - - - - - - - Logo - - - Qt::AlignCenter - - - - - - - Qt::Vertical - - - - 20 - 32 - - - - - - - - - 12 - true - - - - Switch to your browser to connect your account - - - Qt::AlignCenter - - - true - - - - - - - Qt::Vertical - - - QSizePolicy::Expanding - - - - 20 - 8 - - - - - - - - Status - - - Qt::AlignCenter - - - 0 - - - - - - - Qt::Vertical - - - - 20 - 32 - - - - - - - - - - - Qt::Vertical - - - - 20 - 64 - - - - - - - - - - Qt::Horizontal - - - - 40 - 20 - - - - - - - - - - - 0 - 0 + Flow2AuthWidget + + + + 0 + 0 + 580 + 405 + + + + + 0 + 0 - - - - 9 - - - - pbSelectLocalFolder - - - true - - - false - - - - - - - - 0 - 0 - - - - - 9 - - - - pbSelectLocalFolder - - - true - - - false - - - + + + + 580 + 405 + + + + Browser Authentication + + + + + + Qt::Vertical + + + QSizePolicy::Preferred + + + + 20 + 110 + + + + + + + + 0 + + + 0 + + + + + Logo + + + Qt::AlignCenter + + + + + + + Qt::Vertical + + + QSizePolicy::Fixed + + + + 0 + 8 + + + + + + + + Switch to your browser to connect your account + + + Qt::AlignCenter + + + true + + + + + + + Status + + + Qt::AlignCenter + + + 0 + + + + + + + An error occurred while connecting. Please try again. + + + + + + + + + + 0 + + + 0 + + + + + Qt::Horizontal + + + + 40 + 20 + + + + + + + + Copy Link + + + + + + + Reopen Browser + + + + + + + Qt::Horizontal + + + + 40 + 20 + + + + + + + + + + + + Qt::Vertical + + + QSizePolicy::Fixed + + + + 0 + 32 + + + + - - - - - Qt::Horizontal - - - - 40 - 20 - - - - - - - - - - An error occurred while connecting. Please try again. - - - Qt::PlainText - - - Qt::AlignCenter - - - - - - - - - Qt::Vertical - - - QSizePolicy::Expanding - - - - 20 - 60 - - - - - - - - + + + + OCC::LinkLabel + QWidget +

wizard/linklabel.h
+ 1 + + + + diff --git a/src/gui/wizard/owncloudadvancedsetuppage.cpp b/src/gui/wizard/owncloudadvancedsetuppage.cpp index c3da20ec08cfa..0839f829ddcaa 100644 --- a/src/gui/wizard/owncloudadvancedsetuppage.cpp +++ b/src/gui/wizard/owncloudadvancedsetuppage.cpp @@ -23,17 +23,19 @@ #include "QProgressIndicator.h" -#include "wizard/owncloudwizard.h" -#include "wizard/owncloudwizardcommon.h" -#include "wizard/owncloudadvancedsetuppage.h" + #include "buttonstyle.h" #include "account.h" -#include "theme.h" #include "configfile.h" -#include "selectivesyncdialog.h" -#include #include "creds/abstractcredentials.h" +#include "ionostheme.h" #include "networkjobs.h" +#include "selectivesyncdialog.h" +#include "theme.h" +#include "wizard/owncloudadvancedsetuppage.h" #include "wizard/owncloudwizard.h" +#include "wizard/owncloudwizardcommon.h" +#include "SesComponents/syncdirvalidation.h" +#include #ifdef BUILD_FILE_PROVIDER_MODULE #include "gui/macOS/fileprovider.h" @@ -51,15 +53,22 @@ OwncloudAdvancedSetupPage::OwncloudAdvancedSetupPage(OwncloudWizard *wizard) setupResoultionWidget(); _filePathLabel.reset(new ElidedLabel); + _filePathLabel->setObjectName("filePathLabel"); + _filePathLabel->setWordWrap(true); _filePathLabel->setElideMode(Qt::ElideMiddle); _filePathLabel->setAlignment(Qt::AlignHCenter | Qt::AlignVCenter); _filePathLabel->setSizePolicy(QSizePolicy::Minimum, QSizePolicy::Fixed); - _ui.locationsGridLayout->addWidget(_filePathLabel.data(), 3, 3); + _ui.locationsVBox->insertWidget(3, _filePathLabel.data()); _filePathLabel->setTextFormat(Qt::PlainText); _ui.userNameLabel->setTextFormat(Qt::PlainText); _ui.serverAddressLabel->setTextFormat(Qt::PlainText); _ui.localFolderDescriptionLabel->setTextFormat(Qt::PlainText); + _ui.confCheckBoxSize->hide(); + _ui.confSpinBox->hide(); + _ui.confTraillingSizeLabel->hide(); + _ui.wSyncStrategy->removeItem(_ui.horizontalLayout_6); + registerField(QLatin1String("OCSyncFromScratch"), _ui.cbSyncFromScratch); @@ -72,12 +81,12 @@ OwncloudAdvancedSetupPage::OwncloudAdvancedSetupPage(OwncloudWizard *wizard) setupCustomization(); connect(_ui.pbSelectLocalFolder, &QAbstractButton::clicked, this, &OwncloudAdvancedSetupPage::slotSelectFolder); + _ui.pbSelectLocalFolder->setProperty("buttonStyle", QVariant::fromValue(OCC::ButtonStyleName::Secondary)); setButtonText(QWizard::FinishButton, tr("Connect")); if (Theme::instance()->enforceVirtualFilesSyncFolder()) { _ui.rSyncEverything->setDisabled(true); _ui.rSelectiveSync->setDisabled(true); - _ui.bSelectiveSync->setDisabled(true); } connect(_ui.rSyncEverything, &QAbstractButton::clicked, this, &OwncloudAdvancedSetupPage::slotSyncEverythingClicked); @@ -92,7 +101,6 @@ OwncloudAdvancedSetupPage::OwncloudAdvancedSetupPage(OwncloudWizard *wizard) updateMacOsFileProviderRelatedViews(); #endif }); - connect(_ui.bSelectiveSync, &QAbstractButton::clicked, this, &OwncloudAdvancedSetupPage::slotSelectiveSyncClicked); const auto theme = Theme::instance(); const auto appIcon = theme->applicationIcon(); @@ -211,7 +219,7 @@ void OwncloudAdvancedSetupPage::initializePage() _ui.confSpinBox->setValue(newFolderLimit.second); _ui.confCheckBoxExternal->setChecked(cfgFile.confirmExternalStorage()); - fetchUserAvatar(); + SetAvatarIcon(); setUserInformation(); customizeStyle(); @@ -234,6 +242,12 @@ void OwncloudAdvancedSetupPage::initializePage() } } +void OwncloudAdvancedSetupPage::SetAvatarIcon() +{ + const auto icon = QIcon(IonosTheme::avatarIcon()); + _ui.lServerIcon->setPixmap(icon.pixmap(32)); +} + void OwncloudAdvancedSetupPage::fetchUserAvatar() { // Reset user avatar @@ -341,7 +355,6 @@ void OwncloudAdvancedSetupPage::updateStatus() #endif _ui.syncModeLabel->setText(t); - _ui.syncModeLabel->setFixedHeight(_ui.syncModeLabel->sizeHint().height()); qint64 rSpace = _ui.rSyncEverything->isChecked() ? _rSize : _rSelectedSize; @@ -359,6 +372,7 @@ void OwncloudAdvancedSetupPage::setResolutionGuiVisible(bool value) _ui.syncModeLabel->setVisible(value); _ui.rKeepLocal->setVisible(value); _ui.cbSyncFromScratch->setVisible(value); + _ocWizard->adjustSize(); } /* obsolete */ @@ -440,13 +454,18 @@ bool OwncloudAdvancedSetupPage::validatePage() _checking = true; startSpinner(); emit completeChanged(); - + ConfigFile cfgFile; if (_ui.rSyncEverything->isChecked()) { ConfigFile cfgFile; cfgFile.setNewBigFolderSizeLimit(_ui.confCheckBoxSize->isChecked(), - _ui.confSpinBox->value()); + _ui.confCheckBoxSize->isChecked() ? _ui.confSpinBox->value() : -1); cfgFile.setConfirmExternalStorage(_ui.confCheckBoxExternal->isChecked()); } + else + { + cfgFile.setNewBigFolderSizeLimit(false, -1); + cfgFile.setConfirmExternalStorage(false); + } emit createLocalAndRemoteFolders(localFolder(), _remoteFolder); return false; @@ -467,6 +486,7 @@ void OwncloudAdvancedSetupPage::setErrorString(const QString &err) _ui.errorLabel->setVisible(true); _ui.errorLabel->setText(err); } + _ocWizard->adjustSize(); _checking = false; emit completeChanged(); } @@ -489,6 +509,11 @@ void OwncloudAdvancedSetupPage::setRemoteFolder(const QString &remoteFolder) void OwncloudAdvancedSetupPage::slotSelectFolder() { QString dir = QFileDialog::getExistingDirectory(nullptr, tr("Local Sync Folder"), QDir::homePath()); + SyncDirValidator syncDirValidator(dir); + if (!syncDirValidator.isValidDir()) { + setErrorString(syncDirValidator.message()); + return; + } if (!dir.isEmpty()) { // TODO: remove when UX decision is made refreshVirtualFilesAvailibility(dir); @@ -507,6 +532,7 @@ void OwncloudAdvancedSetupPage::slotSelectiveSyncClicked() AccountPtr acc = dynamic_cast(wizard())->account(); auto *dlg = new SelectiveSyncDialog(acc, _remoteFolder, _selectiveSyncBlacklist, this); dlg->setAttribute(Qt::WA_DeleteOnClose); + dlg->setStyleSheet(QStringLiteral("background-color: %1;").arg(IonosTheme::dialogBackgroundColor())); connect(dlg, &SelectiveSyncDialog::finished, this, [this, dlg]{ const int result = dlg->result(); @@ -519,6 +545,14 @@ void OwncloudAdvancedSetupPage::slotSelectiveSyncClicked() if (result == QDialog::Accepted) { _selectiveSyncBlacklist = dlg->createBlackList(); updateBlacklist = true; + _ui.confCheckBoxExternal->setStyleSheet(IonosTheme::fontConfigurationCss( + IonosTheme::settingsFont(), + IonosTheme::settingsTextSize(), + IonosTheme::settingsTextWeight(), + IonosTheme::loginWizardFontLightGrey() + )); + + _ui.confCheckBoxSize->setDisabled(true); } else if (result == QDialog::Rejected && _selectiveSyncBlacklist == QStringList("/")) { _selectiveSyncBlacklist = dlg->oldBlackList(); updateBlacklist = true; @@ -546,6 +580,8 @@ void OwncloudAdvancedSetupPage::slotSelectiveSyncClicked() }); dlg->open(); + + } void OwncloudAdvancedSetupPage::slotVirtualFileSyncClicked() @@ -557,6 +593,15 @@ void OwncloudAdvancedSetupPage::slotVirtualFileSyncClicked() setRadioChecked(_ui.rVirtualFileSync); }); } + + _ui.confCheckBoxExternal->setStyleSheet(IonosTheme::fontConfigurationCss( + IonosTheme::settingsFont(), + IonosTheme::settingsTextSize(), + IonosTheme::settingsTextWeight(), + IonosTheme::loginWizardFontLightGrey() + )); + + _ui.confCheckBoxSize->setDisabled(true); } void OwncloudAdvancedSetupPage::slotSyncEverythingClicked() @@ -567,8 +612,16 @@ void OwncloudAdvancedSetupPage::slotSyncEverythingClicked() QString errorStr = checkLocalSpace(_rSize); setErrorString(errorStr); + + _ui.confCheckBoxExternal->setStyleSheet(IonosTheme::fontConfigurationCss( + IonosTheme::settingsFont(), + IonosTheme::settingsTextSize(), + IonosTheme::settingsTextWeight(), + IonosTheme::titleColor() + )); } + void OwncloudAdvancedSetupPage::slotQuotaRetrieved(const QVariantMap &result) { _rSize = result["size"].toDouble(); @@ -617,16 +670,106 @@ void OwncloudAdvancedSetupPage::customizeStyle() } } + _ocWizard->setMinimumSize(QSize(626, 515)); + _ocWizard->setMaximumSize(QSize(626, 600)); + + _ui.mainHBox->setContentsMargins(0, 0, 0, 0); + _ui.wSyncStrategySynchronizeEverything->setContentsMargins(0, 0, 0, 0); + _ui.lVirtualFileSync->setContentsMargins(0, 0, 0, 0); + _ui.horizontalLayout_8->setContentsMargins(32, 0, 0, 0); + _ui.horizontalLayout_10->setContentsMargins(0, 8, 0, 0); + _ui.horizontalLayout_10->setMargin(1); + + _ui.wSyncStrategy->setSpacing(16); + _ui.wSyncStrategy->setContentsMargins(0, 0, 0, 0); + _ui.verticalLayout->setSpacing(0); + _ui.pbSelectLocalFolder->setMinimumSize(0, 40); + + _ui.serverVBox->setAlignment(Qt::AlignTop); + _ui.serverVBox->setSpacing(5); + _ui.serverVBox->setContentsMargins(0, 0, 0, 0); + + _ui.arrowVBox->setSpacing(0); + _ui.arrowVBox->setContentsMargins(0, 0, 0, 0); + _ui.arrowVBox->setAlignment(Qt::AlignTop); + + _ui.locationsVBox->setAlignment(Qt::AlignTop); + _ui.locationsVBox->setContentsMargins(0, 0, 0, 0); + _ui.locationsVBox->setSpacing(5); + + _ui.resolutionWidgetLayout->setContentsMargins(0, 0, 0, 0); + styleSyncLogo(); styleLocalFolderLabel(); + + setStyleSheet( + "QRadioButton {" + + IonosTheme::fontConfigurationCss( + IonosTheme::settingsFont(), + IonosTheme::settingsTextSize(), + IonosTheme::settingsTextWeight(), + IonosTheme::titleColor() + ) + "} QCheckBox {" + + IonosTheme::fontConfigurationCss( + IonosTheme::settingsFont(), + IonosTheme::settingsTextSize(), + IonosTheme::settingsTextWeight(), + IonosTheme::titleColor() + ) + "}" + ); + + _ui.userNameLabel->setStyleSheet(IonosTheme::fontConfigurationCss( + IonosTheme::settingsFont(), + IonosTheme::settingsTextSize(), + IonosTheme::settingsTextWeight(), + IonosTheme::titleColor() + )); + + _ui.serverAddressLabel->setStyleSheet(IonosTheme::fontConfigurationCss( + IonosTheme::settingsFont(), + IonosTheme::settingsTextSize(), + IonosTheme::settingsTextWeight(), + IonosTheme::loginWizardFontGrey() + )); + + _ui.localFolderDescriptionLabel->setStyleSheet(IonosTheme::fontConfigurationCss( + IonosTheme::settingsFont(), + IonosTheme::settingsTextSize(), + IonosTheme::settingsTextWeight(), + IonosTheme::titleColor() + )); + + _filePathLabel->setStyleSheet(IonosTheme::fontConfigurationCss( + IonosTheme::settingsFont(), + IonosTheme::settingsTextSize(), + IonosTheme::settingsTextWeight(), + IonosTheme::loginWizardFontGrey() + )); + + _ui.lFreeSpace->setStyleSheet(IonosTheme::fontConfigurationCss( + IonosTheme::settingsFont(), + IonosTheme::settingsTextSize(), + IonosTheme::settingsTextWeight(), + IonosTheme::loginWizardFontGrey() + )); + + #ifdef Q_OS_MAC + _ui.syncModeLabel->setStyleSheet( + IonosTheme::fontConfigurationCss( + IonosTheme::settingsFont(), + IonosTheme::settingsTextSize(), + IonosTheme::settingsTitleWeight600(), + IonosTheme::titleColor() + ) + ); + #endif + } void OwncloudAdvancedSetupPage::styleLocalFolderLabel() { - const auto backgroundColor = palette().window().color(); - const auto folderIconFileName = Theme::instance()->isBranded() ? Theme::hidpiFileName("folder.png", backgroundColor) - : Theme::hidpiFileName(":/client/theme/colored/folder.png"); - _ui.lLocal->setPixmap(folderIconFileName); + const auto icon = QIcon(IonosTheme::folderIcon()); + _ui.lLocal->setPixmap(icon.pixmap(32)); } void OwncloudAdvancedSetupPage::setRadioChecked(QRadioButton *radio) @@ -667,8 +810,10 @@ void OwncloudAdvancedSetupPage::updateMacOsFileProviderRelatedViews() void OwncloudAdvancedSetupPage::styleSyncLogo() { - const auto syncArrowIcon = Theme::createColorAwareIcon(QLatin1String(":/client/theme/sync-arrow.svg"), palette()); - _ui.syncLogoLabel->setPixmap(syncArrowIcon.pixmap(QSize(50, 50))); + const auto syncArrowIcon = QIcon(IonosTheme::syncArrows()); + // const auto syncArrowIcon = Theme::createColorAwareIcon(QLatin1String(":/client/theme/sync-arrow.svg"), palette()); + _ui.syncLogoLabel->setPixmap(syncArrowIcon.pixmap(QSize(32,32))); + _ui.syncLogoLabel->setSizePolicy(QSizePolicy(QSizePolicy::Fixed, QSizePolicy::Fixed)); } void OwncloudAdvancedSetupPage::setupResoultionWidget() diff --git a/src/gui/wizard/owncloudadvancedsetuppage.h b/src/gui/wizard/owncloudadvancedsetuppage.h index 9192b7c9df9e6..391fe7efc7842 100644 --- a/src/gui/wizard/owncloudadvancedsetuppage.h +++ b/src/gui/wizard/owncloudadvancedsetuppage.h @@ -88,6 +88,7 @@ private slots: void setResolutionGuiVisible(bool value); void setupResoultionWidget(); void fetchUserAvatar(); + void SetAvatarIcon(); void setUserInformation(); // TODO: remove when UX decision is made diff --git a/src/gui/wizard/owncloudadvancedsetuppage.ui b/src/gui/wizard/owncloudadvancedsetuppage.ui index 5f51a2d824e10..dc9eedfad6610 100644 --- a/src/gui/wizard/owncloudadvancedsetuppage.ui +++ b/src/gui/wizard/owncloudadvancedsetuppage.ui @@ -7,7 +7,7 @@ 0 0 912 - 633 + 635 @@ -19,14 +19,49 @@ Form - - + + + + + Qt::Horizontal + + + QSizePolicy::Fixed + + + + 32 + 20 + + + + + + + + + Qt::Vertical + + + QSizePolicy::Fixed + + + + 20 + 52 + + + + + + true + 0 @@ -48,612 +83,633 @@ - + QLayout::SetFixedSize - - - - Avatar + + 65 + + + 65 + + + + + QLayout::SetFixedSize - - Qt::PlainText + + + + + 0 + 0 + + + + Avatar + + + Qt::PlainText + + + Qt::AlignCenter + + + + + + + Qt::Vertical + + + QSizePolicy::Fixed + + + + 0 + 8 + + + + + + + + + 0 + 0 + + + + Username + + + Qt::PlainText + + + Qt::AlignCenter + + + + + + + + 0 + 0 + + + + Server address + + + Qt::PlainText + + + Qt::AlignHCenter|Qt::AlignTop + + + true + + + + + + + + + QLayout::SetFixedSize - - Qt::AlignCenter + + + + + 0 + 0 + + + + Sync Logo + + + Qt::PlainText + + + Qt::AlignHCenter|Qt::AlignTop + + + + + + + + + QLayout::SetFixedSize - + + + + + 0 + 0 + + + + + 0 + 32 + + + + &Local Folder + + + Qt::PlainText + + + Qt::AlignCenter + + + pbSelectLocalFolder + + + + + + + Qt::Vertical + + + QSizePolicy::Fixed + + + + 0 + 8 + + + + + + + + + 0 + 0 + + + + + true + + + + Local Folder + + + Qt::PlainText + + + Qt::AlignCenter + + + + + + + + 0 + 0 + + + + Free space + + + Qt::PlainText + + + Qt::AlignCenter + + + true + + + + + + + + 0 + 4 + + + + Qt::Vertical + + + QSizePolicy::Preferred + + + + 40 + 16 + + + + + + + + + 0 + 0 + + + + Choose different folder + + + true + + + false + + + + + + + + + + + + 0 + 4 + + + + Qt::Vertical + + + QSizePolicy::Fixed + + + + 0 + 32 + + + + + + + + + + + + + 0 + 0 + + + + Synchronize everything from server + + + true + + + + + + + Size + + + Qt::PlainText + + + + + + + Qt::Horizontal + + + + 40 + 20 + + + + + + + + + + + + Qt::Horizontal + + + QSizePolicy::Minimum + + + + 20 + 20 + + + + + + + + Ask before syncing folders larger than + + + + + + + + 0 + 0 + + + + Qt::StrongFocus + + + 999999 + + + 99 + + + + + + + + MB + + + + Qt::PlainText + + + + + + + Qt::Horizontal + + + + 40 + 20 + + + + + + + + + + + + Ask before syncing external storages + + + 32 + + + + + + + + + 8 + + + + + + 0 + 0 + + + + Choose what to sync + + + false + + + + + + + TextLabel + + + Qt::PlainText + + + + + + + Qt::Horizontal + + + + 40 + 20 + + + + + + + + + + + + + 0 + 0 + + + + Use virtual files !PLACEHOLDER! + + + false + + + + + + + Qt::Horizontal + + + + 40 + 20 + + + + + - - + + + + + + + 0 + 4 + + + + Qt::Vertical + + + QSizePolicy::Fixed + + + + 0 + 16 + + + + + + + + 6 + + + QLayout::SetMinimumSize + + + 0 + + + 2 + + + 0 + + + 0 + + + - + 0 0 - - &Local Folder - - - Qt::PlainText - - - Qt::AlignCenter - - - pbSelectLocalFolder - - - - - + 9 true - - Username - - - Qt::PlainText - - - Qt::AlignCenter - - - - - - - - true - + + 1 - Local Folder + Status message - Qt::PlainText + Qt::AutoText - Qt::AlignCenter + Qt::AlignLeading + + + true - - + + - + 0 0 - Choose different folder + Keep local data - + true - - false - - - + + - + 0 0 - - Free space - - - Qt::PlainText - - - Qt::AlignCenter - - - true - - - - - - - Qt::Horizontal - - - - 40 - 20 - - - - - - - - Qt::Vertical + + <html><head/><body><p>If this box is checked, + existing content in the local folder will be erased to start a clean sync + from the server.</p><p>Do not check this if the local content + should be uploaded to the servers folder.</p></body></html> + - - QSizePolicy::Expanding - - - - 20 - 40 - - - - - - - - Qt::Vertical - - - QSizePolicy::Expanding - - - - 20 - 40 - - - - - - - - Qt::Horizontal - - - - 40 - 20 - - - - - - - Server address + Erase local folder and start a clean sync - - Qt::PlainText - - - Qt::AlignHCenter|Qt::AlignTop - - + true - - - - Sync Logo - - - Qt::PlainText - - - Qt::AlignCenter - - - - - - QLayout::SetMinimumSize + + + + 0 + 4 + - - 0 + + Qt::Vertical - - 0 + + QSizePolicy::Preferred - - - - Qt::Horizontal - - - - 40 - 20 - - - - - - - - 0 - - - 0 - - - - - 0 - - - 0 - - - - - 0 - - - - - Synchronize everything from server - - - true - - - - - - - Size - - - Qt::PlainText - - - - - - - Qt::Horizontal - - - - 40 - 20 - - - - - - - - - - 0 - - - - - Qt::Horizontal - - - QSizePolicy::Minimum - - - - 20 - 20 - - - - - - - - Ask before syncing folders larger than - - - - - - - - 0 - 0 - - - - Qt::StrongFocus - - - 999999 - - - 99 - - - - - - - MB - - - Qt::PlainText - - - - - - - Qt::Horizontal - - - - 40 - 20 - - - - - - - - - - 0 - - - - - Qt::Horizontal - - - QSizePolicy::Minimum - - - - 20 - 20 - - - - - - - - Ask before syncing external storages - - - - - - - Qt::Horizontal - - - - 40 - 20 - - - - - - - - - - 0 - - - - - - 0 - 0 - - - - - - - false - - - - - - - Choose what to sync - - - true - - - false - - - - - - - TextLabel - - - Qt::PlainText - - - - - - - Qt::Horizontal - - - - 40 - 20 - - - - - - - - - - - - - 0 - 0 - - - - Use virtual files !PLACEHOLDER! - - - false - - - - - - - Qt::Horizontal - - - - 40 - 20 - - - - - - - - - - - - - 0 - 0 - - - - - 6 - - - QLayout::SetMinimumSize - - - 0 - - - 2 - - - 0 - - - 0 - - - - - - 0 - 0 - - - - - 9 - true - - - - 1 - - - Status message - - - Qt::AutoText - - - Qt::AlignCenter - - - false - - - - - - - - 0 - 0 - - - - Keep local data - - - true - - - - - - - - 0 - 0 - - - - <html><head/><body><p>If this box is checked, existing content in the local folder will be erased to start a clean sync from the server.</p><p>Do not check this if the local content should be uploaded to the servers folder.</p></body></html> - - - Erase local folder and start a clean sync - - - true - - - - - - - - - - - - Qt::Horizontal - - - - 40 - 20 - - - - - + + + 0 + 16 + + + @@ -677,6 +733,22 @@ + + + + Qt::Horizontal + + + QSizePolicy::Fixed + + + + 32 + 20 + + + + diff --git a/src/gui/wizard/owncloudconnectionmethoddialog.cpp b/src/gui/wizard/owncloudconnectionmethoddialog.cpp index 2c4bd12a51067..285290d099868 100644 --- a/src/gui/wizard/owncloudconnectionmethoddialog.cpp +++ b/src/gui/wizard/owncloudconnectionmethoddialog.cpp @@ -23,6 +23,7 @@ OwncloudConnectionMethodDialog::OwncloudConnectionMethodDialog(QWidget *parent) , ui(new Ui::OwncloudConnectionMethodDialog) { ui->setupUi(this); + setWindowFlags(windowFlags() & ~Qt::WindowContextHelpButtonHint); connect(ui->btnNoTLS, &QAbstractButton::clicked, this, &OwncloudConnectionMethodDialog::returnNoTLS); connect(ui->btnClientSideTLS, &QAbstractButton::clicked, this, &OwncloudConnectionMethodDialog::returnClientSideTLS); diff --git a/src/gui/wizard/owncloudsetupnocredspage.ui b/src/gui/wizard/owncloudsetupnocredspage.ui index d12a9e1438326..b87c7bab470f8 100644 --- a/src/gui/wizard/owncloudsetupnocredspage.ui +++ b/src/gui/wizard/owncloudsetupnocredspage.ui @@ -67,13 +67,13 @@ - + diff --git a/src/gui/wizard/owncloudsetuppage.cpp b/src/gui/wizard/owncloudsetuppage.cpp index 28bd2c3d849be..4721a9808a33a 100644 --- a/src/gui/wizard/owncloudsetuppage.cpp +++ b/src/gui/wizard/owncloudsetuppage.cpp @@ -93,7 +93,7 @@ OwncloudSetupPage::OwncloudSetupPage(QWidget *parent) void OwncloudSetupPage::setLogo() { - _ui.logoLabel->setPixmap(Theme::instance()->wizardApplicationLogo()); + //_ui.logoLabel->setPixmap(Theme::instance()->wizardApplicationLogo()); } void OwncloudSetupPage::setupServerAddressDescriptionLabel() @@ -257,7 +257,7 @@ bool OwncloudSetupPage::validatePage() QString u = url(); QUrl qurl(u); if (!qurl.isValid() || qurl.host().isEmpty()) { - setErrorString(tr("Server address does not seem to be valid"), false); + setConnectionError(tr("Server address does not seem to be valid"), false); return false; } @@ -284,42 +284,50 @@ void OwncloudSetupPage::setAuthType(DetermineAuthTypeJob::AuthType type) stopSpinner(); } +void OwncloudSetupPage::setConnectionError(const QString &err, bool retryHTTPonly) +{ + this->setVisible(true); + _ocWizard->button(QWizard::BackButton)->setHidden(false); + setErrorString(err, retryHTTPonly); +} + void OwncloudSetupPage::setErrorString(const QString &err, bool retryHTTPonly) { if (err.isEmpty()) { _ui.errorLabel->setVisible(false); } else { - if (retryHTTPonly) { - const auto urlString = url(); - QUrl url(urlString); - if (url.scheme() == "https") { - // Ask the user how to proceed when connecting to a https:// URL fails. - // It is possible that the server is secured with client-side TLS certificates, - // but that it has no way of informing the owncloud client that this is the case. - - OwncloudConnectionMethodDialog dialog; - dialog.setUrl(url); - // FIXME: Synchronous dialogs are not so nice because of event loop recursion - int retVal = dialog.exec(); - - switch (retVal) { - case OwncloudConnectionMethodDialog::No_TLS: { - url.setScheme("http"); - _ui.leUrl->setFullText(url.toString()); - // skip ahead to next page, since the user would expect us to retry automatically - wizard()->next(); - } break; - case OwncloudConnectionMethodDialog::Client_Side_TLS: - addCertDial->show(); - break; - case OwncloudConnectionMethodDialog::Closed: - case OwncloudConnectionMethodDialog::Back: - default: - // No-op. - break; - } - } - } + //SES-84: Should only be shown in the Managed Cloud Client + // if (retryHTTPonly) { + // const auto urlString = url(); + // QUrl url(urlString); + // if (url.scheme() == "https") { + // // Ask the user how to proceed when connecting to a https:// URL fails. + // // It is possible that the server is secured with client-side TLS certificates, + // // but that it has no way of informing the owncloud client that this is the case. + + // OwncloudConnectionMethodDialog dialog; + // dialog.setUrl(url); + // // FIXME: Synchronous dialogs are not so nice because of event loop recursion + // int retVal = dialog.exec(); + + // switch (retVal) { + // case OwncloudConnectionMethodDialog::No_TLS: { + // url.setScheme("http"); + // _ui.leUrl->setFullText(url.toString()); + // // skip ahead to next page, since the user would expect us to retry automatically + // wizard()->next(); + // } break; + // case OwncloudConnectionMethodDialog::Client_Side_TLS: + // addCertDial->show(); + // break; + // case OwncloudConnectionMethodDialog::Closed: + // case OwncloudConnectionMethodDialog::Back: + // default: + // // No-op. + // break; + // } + // } + // } _ui.errorLabel->setVisible(true); _ui.errorLabel->setText(err); @@ -383,7 +391,7 @@ void OwncloudSetupPage::slotStyleChanged() void OwncloudSetupPage::customizeStyle() { - setLogo(); + //setLogo(); if (_progressIndi) { const auto isDarkBackground = Theme::isDarkColor(palette().window().color()); diff --git a/src/gui/wizard/owncloudsetuppage.h b/src/gui/wizard/owncloudsetuppage.h index 06cea0753695e..e856f170dbb8b 100644 --- a/src/gui/wizard/owncloudsetuppage.h +++ b/src/gui/wizard/owncloudsetuppage.h @@ -59,6 +59,7 @@ class OwncloudSetupPage : public QWizardPage public slots: void setErrorString(const QString &, bool retryHTTPonly); + void setConnectionError(const QString &, bool retryHTTPonly); void startSpinner(); void stopSpinner(); void slotCertificateAccepted(); diff --git a/src/gui/wizard/owncloudwizard.cpp b/src/gui/wizard/owncloudwizard.cpp index a887ca65c7189..daa8788254e72 100644 --- a/src/gui/wizard/owncloudwizard.cpp +++ b/src/gui/wizard/owncloudwizard.cpp @@ -23,14 +23,14 @@ #include "foregroundbackground_interface.h" #endif -#include "wizard/owncloudwizard.h" -#include "wizard/welcomepage.h" -#include "wizard/owncloudsetuppage.h" -#include "wizard/owncloudhttpcredspage.h" -#include "wizard/termsofservicewizardpage.h" +#include "ionostheme.h" +#include "wizard/flow2authcredspage.h" #include "wizard/owncloudadvancedsetuppage.h" +#include "wizard/owncloudhttpcredspage.h" +#include "wizard/owncloudsetuppage.h" +#include "wizard/owncloudwizard.h" #include "wizard/webviewpage.h" -#include "wizard/flow2authcredspage.h" +#include "wizard/welcomepage.h" #include "common/vfs.h" @@ -128,6 +128,9 @@ OwncloudWizard::OwncloudWizard(QWidget *parent) adjustWizardSize(); centerWindow(); + + // Set focus policy to prevent initial focus on the button + setFocusPolicy(Qt::StrongFocus); } void OwncloudWizard::centerWindow() @@ -142,20 +145,9 @@ void OwncloudWizard::centerWindow() wizardWindow->move(newWindowPosition); } - void OwncloudWizard::adjustWizardSize() { - const auto pageSizes = calculateWizardPageSizes(); - const auto currentPageIndex = currentId(); - - // If we can, just use the size of the current page - if(currentPageIndex > -1 && currentPageIndex < pageSizes.count()) { - resize(pageSizes.at(currentPageIndex)); - return; - } - - // As a backup, resize to largest page - resize(calculateLargestSizeOfWizardPages(pageSizes)); + setFixedSize(QSize(626, 460)); } QList OwncloudWizard::calculateWizardPageSizes() const @@ -350,6 +342,10 @@ void OwncloudWizard::slotCurrentPageChanged(int id) id == WizardCommon::Page_Flow2AuthCreds || id == WizardCommon::Page_TermsOfService) { setButtonLayout({ QWizard::BackButton, QWizard::Stretch }); + #ifdef APPLICATION_SERVER_URL_ENFORCE + button(QWizard::BackButton)->setHidden(true); + #endif + } else if (id == WizardCommon::Page_AdvancedSetup) { setButtonLayout({ QWizard::CustomButton2, QWizard::Stretch, QWizard::CustomButton1, QWizard::FinishButton }); setNextButtonAsDefault(); @@ -360,6 +356,11 @@ void OwncloudWizard::slotCurrentPageChanged(int id) if (id == WizardCommon::Page_ServerSetup) { emit clearPendingRequests(); + #ifdef APPLICATION_SERVER_URL_ENFORCE + _setupPage->setServerUrl(APPLICATION_SERVER_URL); + _setupPage->initializePage(); + button(QWizard::BackButton)->setHidden(true); + #endif } if (id == WizardCommon::Page_AdvancedSetup && _credentialsPage == _flow2CredsPage) { @@ -381,7 +382,7 @@ void OwncloudWizard::displayError(const QString &msg, bool retryHTTPonly) break; case WizardCommon::Page_ServerSetup: - _setupPage->setErrorString(msg, retryHTTPonly); + _setupPage->setConnectionError(msg, retryHTTPonly); break; case WizardCommon::Page_HttpCreds: @@ -457,8 +458,14 @@ void OwncloudWizard::customizeStyle() // Set background colors auto wizardPalette = palette(); - const auto backgroundColor = wizardPalette.color(QPalette::Window); + const auto backgroundColor = QColor(IonosTheme::dialogBackgroundColor()); + + // Set Color of upper part wizardPalette.setColor(QPalette::Base, backgroundColor); + + // Set Color of lower part + wizardPalette.setColor(backgroundRole(), backgroundColor); + // Set separator color wizardPalette.setColor(QPalette::Mid, backgroundColor); diff --git a/src/gui/wizard/slideshow.cpp b/src/gui/wizard/slideshow.cpp index 7423227211b32..5e263c8a47c1d 100644 --- a/src/gui/wizard/slideshow.cpp +++ b/src/gui/wizard/slideshow.cpp @@ -13,6 +13,8 @@ */ #include "slideshow.h" +#include "ionostheme.h" + #include #include #include @@ -21,14 +23,19 @@ namespace OCC { -static const int Spacing = 6; +static const int Spacing = IonosTheme::LoginPageSpacer(); static const int SlideDuration = 1000; static const int SlideDistance = 400; SlideShow::SlideShow(QWidget *parent) : QWidget(parent) { setSizePolicy(QSizePolicy::Minimum, QSizePolicy::Minimum); - setStyleSheet(QStringLiteral("font: bold 18pt")); + setStyleSheet(IonosTheme::fontConfigurationCss( + IonosTheme::settingsFont(), + IonosTheme::onboardingTitle(), + IonosTheme::settingsTitleWeight400(), + IonosTheme::titleColor() + )); } void SlideShow::addSlide(const QPixmap &pixmap, const QString &label) @@ -190,7 +197,7 @@ void SlideShow::maybeRestartTimer() } void SlideShow::drawSlide(QPainter *painter, int index) -{ +{ const auto label = _labels.value(index); const auto labelRect = style()->itemTextRect(fontMetrics(), rect(), diff --git a/src/gui/wizard/welcomepage.cpp b/src/gui/wizard/welcomepage.cpp index fa706fbcd4052..ecdf8fe525995 100644 --- a/src/gui/wizard/welcomepage.cpp +++ b/src/gui/wizard/welcomepage.cpp @@ -13,11 +13,12 @@ */ #include "welcomepage.h" +#include "buttonstyle.h" #include "guiutility.h" #include "theme.h" +#include "ui_welcomepage.h" #include "wizard/owncloudwizard.h" #include "wizard/slideshow.h" -#include "ui_welcomepage.h" namespace OCC { @@ -47,36 +48,23 @@ void WelcomePage::initializePage() void WelcomePage::setLoginButtonDefault() { +#ifdef Q_OS_WIN _ui->loginButton->setDefault(true); +#endif _ui->loginButton->setFocus(); } void WelcomePage::styleSlideShow() { - const auto theme = Theme::instance(); - const auto backgroundColor = palette().window().color(); - - const auto wizardNextcloudIconFileName = theme->isBranded() ? Theme::hidpiFileName("wizard-nextcloud.png", backgroundColor) - : Theme::hidpiFileName(":/client/theme/colored/wizard-nextcloud.png"); - const auto wizardFilesIconFileName = theme->isBranded() ? Theme::hidpiFileName("wizard-files.png", backgroundColor) - : Theme::hidpiFileName(":/client/theme/colored/wizard-files.png"); - const auto wizardGroupwareIconFileName = theme->isBranded() ? Theme::hidpiFileName("wizard-groupware.png", backgroundColor) - : Theme::hidpiFileName(":/client/theme/colored/wizard-groupware.png"); - const auto wizardTalkIconFileName = theme->isBranded() ? Theme::hidpiFileName("wizard-talk.png", backgroundColor) - : Theme::hidpiFileName(":/client/theme/colored/wizard-talk.png"); - - _ui->slideShow->addSlide(wizardNextcloudIconFileName, tr("Keep your data secure and under your control")); - _ui->slideShow->addSlide(wizardFilesIconFileName, tr("Secure collaboration & file exchange")); - _ui->slideShow->addSlide(wizardGroupwareIconFileName, tr("Easy-to-use web mail, calendaring & contacts")); - _ui->slideShow->addSlide(wizardTalkIconFileName, tr("Screensharing, online meetings & web conferences")); + const auto ionosLogoFileName = Theme::hidpiFileName(":/client/theme/colored/IONOS_logo_w_suffix_frontend.png"); - const auto isDarkBackground = Theme::isDarkColor(backgroundColor); - _ui->slideShowNextButton->setIcon(theme->uiThemeIcon(QStringLiteral("control-next.svg"), isDarkBackground)); - _ui->slideShowPreviousButton->setIcon(theme->uiThemeIcon(QStringLiteral("control-prev.svg"), isDarkBackground)); + _ui->slideShow->addSlide(ionosLogoFileName, tr("Keep your data secure and under your control")); } void WelcomePage::setupSlideShow() { + _ui->slideShowNextButton->hide(); + _ui->slideShowPreviousButton->hide(); connect(_ui->slideShow, &SlideShow::clicked, _ui->slideShow, &SlideShow::stopShow); connect(_ui->slideShowNextButton, &QPushButton::clicked, _ui->slideShow, &SlideShow::nextSlide); connect(_ui->slideShowPreviousButton, &QPushButton::clicked, _ui->slideShow, &SlideShow::prevSlide); @@ -84,14 +72,16 @@ void WelcomePage::setupSlideShow() void WelcomePage::setupLoginButton() { + _ui->loginButton->setProperty("buttonStyle", QVariant::fromValue(OCC::ButtonStyleName::Primary)); connect(_ui->loginButton, &QPushButton::clicked, this, [this](bool /*checked*/) { _nextPage = WizardCommon::Page_ServerSetup; - _ocWizard->next(); + _ocWizard->next(); }); } void WelcomePage::setupCreateAccountButton() { + _ui->createAccountButton->hide(); #ifdef WITH_WEBENGINE connect(_ui->createAccountButton, &QPushButton::clicked, this, [this](bool /*checked*/) { _ocWizard->setRegistration(true); @@ -108,8 +98,9 @@ void WelcomePage::setupCreateAccountButton() void WelcomePage::setupHostYourOwnServerLabel() { + _ui->hostYourOwnServerLabel->hide(); _ui->hostYourOwnServerLabel->setText(tr("Host your own server")); - _ui->hostYourOwnServerLabel->setAlignment(Qt::AlignCenter); + _ui->hostYourOwnServerLabel->setAlignment(Qt::AlignCenter); _ui->hostYourOwnServerLabel->setUrl(QUrl("https://docs.nextcloud.com/server/latest/admin_manual/installation/#installation")); } @@ -120,6 +111,8 @@ int WelcomePage::nextId() const void WelcomePage::customizeStyle() { + _ocWizard->setFixedSize(626, 460); + _ui->mainHbox->setContentsMargins(0, 0, 0, 0); styleSlideShow(); } } diff --git a/src/gui/wizard/welcomepage.ui b/src/gui/wizard/welcomepage.ui index e2e920aa315d3..84f0aae879145 100644 --- a/src/gui/wizard/welcomepage.ui +++ b/src/gui/wizard/welcomepage.ui @@ -1,229 +1,298 @@ - OCC::WelcomePage - - - - 0 - 0 - 500 - 500 - - - - - 0 - 0 - - - - Form - - - - - - Qt::Vertical - - - QSizePolicy::Expanding - - - - 20 - 80 - - - - - - - - 0 - - - - - - 40 - 16777215 - - - - - - - false - - - false - - - true - - - - - - - - 12 - 75 - true - - - - - - - - - 40 - 16777215 - - - - - - - false - - - false - - - true - - - - - - - - - 0 - - - 0 - - - - - Qt::Horizontal - - - - 40 - 20 - - - - - - - - 0 - - - - - Qt::Vertical - - - - 20 - 40 - - - - - - - - Log in - - - true - - - true - - - - - - - Sign up with provider - - - true - - - false - - - - - - - - - - Qt::Vertical - - - - 20 - 40 - - - - - - - - - - Qt::Horizontal - - - - 40 - 20 - - - - - - - - - - Qt::Vertical - - - - 20 - 40 - - - - - - - - - OCC::SlideShow - QWidget -
wizard/slideshow.h
-
- - OCC::LinkLabel - QWidget -
wizard/linklabel.h
- 1 -
-
- - + OCC::WelcomePage + + + + 0 + 0 + 626 + 450 + + + + + 0 + 0 + + + + Form + + + + + + Qt::Horizontal + + + QSizePolicy::Minimum + + + + 118 + 20 + + + + + + + + + + Qt::Vertical + + + QSizePolicy::Fixed + + + + 20 + 90 + + + + + + + + 0 + + + + + + 40 + 16777215 + + + + + + + false + + + false + + + true + + + + + + + + 12 + true + + + + + -1 + -1 + + + + + + + + + 40 + 16777215 + + + + + + + false + + + false + + + true + + + + + + + + + Qt::Vertical + + + QSizePolicy::Expanding + + + + 20 + 90 + + + + + + + + 0 + + + 0 + + + + + Qt::Horizontal + + + + 40 + 20 + + + + + + + + 0 + + + 10 + + + + + Qt::Vertical + + + QSizePolicy::MinimumExpanding + + + + 20 + 80 + + + + + + + + Log in + + + true + + + true + + + + + + + Sign up with provider + + + true + + + false + + + + + + + + + + Qt::Vertical + + + QSizePolicy::Expanding + + + + 20 + 48 + + + + + + + + + + Qt::Horizontal + + + + 40 + 0 + + + + + + + + + + Qt::Vertical + + + QSizePolicy::Fixed + + + + 20 + 0 + + + + + + + + + + Qt::Horizontal + + + QSizePolicy::Minimum + + + + 118 + 20 + + + + + + + + + OCC::SlideShow + QWidget +
wizard/slideshow.h
+
+ + OCC::LinkLabel + QWidget +
wizard/linklabel.h
+ 1 +
+
+ +
From 1e7f2b18e1d38edd0cb2cbc961f33ecd425834ba Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Christopher=20H=C3=A4tty?= Date: Tue, 14 Jan 2025 15:25:49 +0100 Subject: [PATCH 008/371] style tray cherry-pick ee74a6f6744d69f904eeb2411d960085470ad6a9 --- resources.qrc | 6 + src/gui/tray/AccountMenuItem.qml | 41 ++ src/gui/tray/ActivityItem.qml | 4 +- src/gui/tray/ActivityItemActions.qml | 6 +- src/gui/tray/ActivityItemContent.qml | 57 +- src/gui/tray/ActivityList.qml | 10 +- src/gui/tray/CallNotificationDialog.qml | 2 +- src/gui/tray/EditFileLocallyLoadingDialog.qml | 2 +- src/gui/tray/EnforcedPlainTextLabel.qml | 1 - src/gui/tray/HeaderButton.qml | 53 +- src/gui/tray/HeaderLogo.qml | 34 ++ src/gui/tray/NCBusyIndicator.qml | 8 +- src/gui/tray/SesButtonContents.qml | 73 +++ src/gui/tray/SesCustomButton.qml | 75 +++ src/gui/tray/SyncStatus.qml | 39 +- src/gui/tray/TalkReplyTextField.qml | 2 +- src/gui/tray/TrayFoldersMenuButton.qml | 44 +- src/gui/tray/TrayWindowAccountMenu.qml | 285 ++++++++++ src/gui/tray/TrayWindowHeaderBar.qml | 171 ++++++ src/gui/tray/UnifiedSearchInputContainer.qml | 2 +- src/gui/tray/UnifiedSearchResultListItem.qml | 2 +- .../tray/UnifiedSearchResultSectionItem.qml | 2 +- src/gui/tray/UserLine.qml | 159 +++--- src/gui/tray/Window.qml | 497 ++++++++++++++++++ src/gui/tray/activitylistmodel.cpp | 22 +- src/gui/tray/asyncimageresponse.h | 4 +- src/gui/tray/usermodel.cpp | 49 +- src/gui/tray/usermodel.h | 2 + 28 files changed, 1491 insertions(+), 161 deletions(-) create mode 100644 src/gui/tray/AccountMenuItem.qml create mode 100644 src/gui/tray/HeaderLogo.qml create mode 100644 src/gui/tray/SesButtonContents.qml create mode 100644 src/gui/tray/SesCustomButton.qml create mode 100644 src/gui/tray/TrayWindowAccountMenu.qml create mode 100644 src/gui/tray/TrayWindowHeaderBar.qml create mode 100644 src/gui/tray/Window.qml diff --git a/resources.qrc b/resources.qrc index 6036fa0e1bff0..e41bf9cdb761b 100644 --- a/resources.qrc +++ b/resources.qrc @@ -40,6 +40,8 @@ src/gui/tray/UnifiedSearchResultNothingFound.qml src/gui/tray/UnifiedSearchPlaceholderView.qml src/gui/tray/UnifiedSearchResultSectionItem.qml + src/gui/tray/SesCustomButton.qml + src/gui/tray/SesButtonContents.qml src/gui/tray/ActivityItemContextMenu.qml src/gui/tray/ActivityItemActions.qml src/gui/tray/ActivityItemContent.qml @@ -52,6 +54,10 @@ src/gui/tray/NCToolTip.qml src/gui/tray/NCProgressBar.qml src/gui/tray/EnforcedPlainTextLabel.qml + src/gui/tray/TrayWindowHeaderBar.qml + src/gui/tray/TrayWindowAccountMenu.qml + src/gui/tray/HeaderLogo.qml + src/gui/tray/AccountMenuItem.qml theme/Style/Style.qml theme/Style/qmldir src/gui/tray/ListItemLineAndSubline.qml diff --git a/src/gui/tray/AccountMenuItem.qml b/src/gui/tray/AccountMenuItem.qml new file mode 100644 index 0000000000000..0d427221d72a7 --- /dev/null +++ b/src/gui/tray/AccountMenuItem.qml @@ -0,0 +1,41 @@ +import QtQuick 2.15 +import QtQuick.Window 2.15 +import QtQuick.Controls 2.15 +import QtQuick.Layouts 1.15 + +// Custom qml modules are in /theme (and included by resources.qrc) +import Style 1.0 +import com.ionos.hidrivenext.desktopclient 1.0 + +MenuItem { + id: accountMenuItem + + property bool isHovered: accountMenuItem.hovered || accountMenuItem.visualFocus + property bool isActive: accountMenuItem.pressed + + font.pixelSize: Style.sesFontPixelSize + hoverEnabled: true + leftPadding: Style.sesMediumMargin + topPadding: Style.sesAccountMenuItemPadding + bottomPadding: Style.sesAccountMenuItemPadding + spacing: Style.sesSmallMargin + + icon.height: Style.smallIconSize + icon.width: Style.smallIconSize + icon.color: Style.sesIconDarkColor + + background: Item { + height: parent.height + width: parent.menu.width + Rectangle { + radius: 0 + anchors.fill: parent + anchors.margins: 1 + color: accountMenuItem.isActive ? Style.sesButtonPressed : accountMenuItem.isHovered ? Style.sesAccountMenuHover : "transparent" + } + } + + Accessible.role: Accessible.MenuItem + Accessible.name: text + Accessible.onPressAction: accountMenuItem.clicked() +} \ No newline at end of file diff --git a/src/gui/tray/ActivityItem.qml b/src/gui/tray/ActivityItem.qml index c84b44cceda81..b37fdbd1bdd96 100644 --- a/src/gui/tray/ActivityItem.qml +++ b/src/gui/tray/ActivityItem.qml @@ -3,11 +3,13 @@ import QtQuick import QtQuick.Controls import QtQuick.Layouts import Style -import com.nextcloud.desktopclient +import com.ionos.hidrivenext.desktopclient ItemDelegate { id: root + leftPadding: Style.sesActivityItemDistanceToFrame + rightPadding: Style.sesActivityItemDistanceToFrame property Flickable flickable property int iconSize: Style.trayListItemIconSize diff --git a/src/gui/tray/ActivityItemActions.qml b/src/gui/tray/ActivityItemActions.qml index 873da58302024..eb3d997cf7615 100644 --- a/src/gui/tray/ActivityItemActions.qml +++ b/src/gui/tray/ActivityItemActions.qml @@ -3,7 +3,7 @@ import QtQuick import QtQuick.Controls import QtQuick.Layouts import Style -import com.nextcloud.desktopclient +import com.ionos.hidrivenext.desktopclient Repeater { id: root @@ -44,6 +44,10 @@ Repeater { onClicked: isTalkReplyButton ? root.showReplyField() : root.triggerAction(model.index) + textColor: Style.adjustedCurrentUserHeaderColor + textColorHovered: Style.currentUserHeaderTextColor + bgColor: Style.currentUserHeaderColor + visible: verb !== "REPLY" || (verb === "REPLY" && root.talkReplyButtonVisible) } } diff --git a/src/gui/tray/ActivityItemContent.qml b/src/gui/tray/ActivityItemContent.qml index 45fd6591aefa4..510d17f90276b 100644 --- a/src/gui/tray/ActivityItemContent.qml +++ b/src/gui/tray/ActivityItemContent.qml @@ -4,7 +4,7 @@ import QtQuick.Controls import QtQuick.Layouts import Style import Qt5Compat.GraphicalEffects -import com.nextcloud.desktopclient +import com.ionos.hidrivenext.desktopclient RowLayout { id: root @@ -26,12 +26,12 @@ RowLayout { Item { id: thumbnailItem - readonly property int imageWidth: width * (1 - Style.thumbnailImageSizeReduction) - readonly property int imageHeight: height * (1 - Style.thumbnailImageSizeReduction) + readonly property int imageWidth: Style.sesIconSize + readonly property int imageHeight: Style.sesIconSize readonly property int thumbnailRadius: model.thumbnail && model.thumbnail.isUserAvatar ? width / 2 : 3 - implicitWidth: root.iconSize - implicitHeight: model.thumbnail && model.thumbnail.isMimeTypeIcon ? root.iconSize * 0.9 : root.iconSize + implicitWidth: Style.sesIconSize + implicitHeight: Style.sesIconSize Loader { id: thumbnailImageLoader @@ -45,8 +45,8 @@ RowLayout { Image { id: thumbnailImage - width: thumbnailItem.imageWidth - height: thumbnailItem.imageHeight + width: Style.sesIconSize + height: Style.sesIconSize anchors.verticalCenter: parent.verticalCenter anchors.left: parent.left cache: true @@ -78,8 +78,9 @@ RowLayout { Image { id: activityIcon - width: model.thumbnail !== undefined ? parent.width * 0.4 : thumbnailItem.imageWidth - height: model.thumbnail !== undefined ? width : width * 0.9 + + width: model.thumbnail !== undefined ? Style.sesIconSize * 0.6 : Style.sesIconSize + height: model.thumbnail !== undefined ? Style.sesIconSize * 0.6 : Style.sesIconSize // Prevent bad access into unloaded item properties readonly property int thumbnailPaintedWidth: thumbnailImageLoader.item ? thumbnailImageLoader.item.paintedWidth : 0 @@ -116,8 +117,8 @@ RowLayout { Layout.fillHeight: true Layout.fillWidth: true - Layout.maximumWidth: root.width - Style.standardSpacing - root.iconSize - implicitWidth: root.width - Style.standardSpacing - root.iconSize + Layout.maximumWidth: root.width - Style.standardSpacing - root.iconSize + Style.sesActivityItemWidthModifier + implicitWidth: root.width - Style.standardSpacing - root.iconSize + Style.sesActivityItemWidthModifier spacing: Style.smallSpacing @@ -134,7 +135,7 @@ RowLayout { elide: Text.ElideRight wrapMode: Text.Wrap maximumLineCount: 2 - font.pixelSize: Style.topLinePixelSize + font: root.font visible: text !== "" } @@ -150,7 +151,9 @@ RowLayout { height: (text === "") ? 0 : implicitHeight text: root.activityData.dateTime - font.pixelSize: Style.subLinePixelSize + font.family: Style.sesOpenSansRegular + font.pixelSize: Style.sesFontHintPixelSize + color: Style.sesTrayFontColor visible: text !== "" } @@ -160,9 +163,16 @@ RowLayout { Button { id: fileDetailsButton + property bool isHovered: fileDetailsButton.hovered || fileDetailsButton.visualFocus + property bool isActive: fileDetailsButton.pressed + + Layout.preferredWidth: Style.dismissButtonSize + Layout.preferredHeight: Style.dismissButtonSize + Layout.alignment: Qt.AlignTop | Qt.AlignRight width: Style.activityListButtonWidth height: Style.activityListButtonHeight + icon.source: "image://svgimage-custom-color/more.svg/" + (isHovered ? Style.sesWhite : Style.sesActionHover) icon.source: "image://svgimage-custom-color/more.svg/" + palette.buttonText icon.width: Style.activityListButtonIconSize @@ -172,10 +182,17 @@ RowLayout { text: qsTr("Open file details") visible: parent.hovered } + background: Rectangle { + anchors.fill: parent + anchors.margins: 1 + color: parent.isActive ? Style.sesActionPressed : parent.isHovered ? Style.sesActionHover : "transparent" + radius: width / 2 + } + + display: Button.IconOnly + leftPadding: 0 + rightPadding: 0 - display: Button.IconOnly - visible: model.showFileDetails - onClicked: Systray.presentShareViewInTray(model.openablePath) } Button { @@ -220,8 +237,9 @@ RowLayout { height: (text === "") ? 0 : implicitHeight elide: Text.ElideRight wrapMode: Text.Wrap - maximumLineCount: 2 - font.pixelSize: Style.subLinePixelSize + maximumLineCount: 10 + font.family: Style.sesOpenSansRegular + font.pixelSize: Style.sesFontHintPixelSize visible: text !== "" } @@ -241,7 +259,8 @@ RowLayout { elide: Text.ElideRight wrapMode: Text.Wrap maximumLineCount: 2 - font.pixelSize: Style.topLinePixelSize + font: root.font + color: Style.sesTrayFontColor visible: text !== "" } diff --git a/src/gui/tray/ActivityList.qml b/src/gui/tray/ActivityList.qml index c5196948d5632..b7180b35fd46a 100644 --- a/src/gui/tray/ActivityList.qml +++ b/src/gui/tray/ActivityList.qml @@ -2,7 +2,7 @@ import QtQuick import QtQuick.Controls import Style -import com.nextcloud.desktopclient as NC +import com.ionos.hidrivenext.desktopclient as NC ScrollView { id: controlRoot @@ -65,7 +65,7 @@ ScrollView { highlight: Rectangle { id: activityHover anchors.fill: activityList.currentItem - color: palette.highlight + color: Style.sesHover radius: Style.mediumRoundedButtonRadius visible: activityList.activeFocus } @@ -148,13 +148,15 @@ ScrollView { verticalAlignment: Image.AlignVCenter horizontalAlignment: Image.AlignHCenter fillMode: Image.PreserveAspectFit - source: "image://svgimage-custom-color/activity.svg/" + palette.windowText + source: "image://svgimage-custom-color/activity.svg/" + sourceSize.height: 32 + sourceSize.width: 22 } EnforcedPlainTextLabel { width: parent.width text: qsTr("No activities yet") - font.bold: true + color: Style.sesDarkBlue wrapMode: Text.Wrap horizontalAlignment: Text.AlignHCenter verticalAlignment: Text.AlignVCenter diff --git a/src/gui/tray/CallNotificationDialog.qml b/src/gui/tray/CallNotificationDialog.qml index 3050540279798..0d5ef11a133a6 100644 --- a/src/gui/tray/CallNotificationDialog.qml +++ b/src/gui/tray/CallNotificationDialog.qml @@ -16,11 +16,11 @@ import QtQuick import QtQuick.Window import Style -import com.nextcloud.desktopclient import QtQuick.Layouts import QtMultimedia import QtQuick.Controls import Qt5Compat.GraphicalEffects +import com.ionos.hidrivenext.desktopclient ApplicationWindow { id: root diff --git a/src/gui/tray/EditFileLocallyLoadingDialog.qml b/src/gui/tray/EditFileLocallyLoadingDialog.qml index 8edbf8d01b635..400f19c966921 100644 --- a/src/gui/tray/EditFileLocallyLoadingDialog.qml +++ b/src/gui/tray/EditFileLocallyLoadingDialog.qml @@ -1,9 +1,9 @@ import QtQuick import QtQuick.Window import Style -import com.nextcloud.desktopclient import QtQuick.Layouts import QtQuick.Controls +import com.ionos.hidrivenext.desktopclient ApplicationWindow { id: root diff --git a/src/gui/tray/EnforcedPlainTextLabel.qml b/src/gui/tray/EnforcedPlainTextLabel.qml index bfc3c09957433..9211d2aa84e83 100644 --- a/src/gui/tray/EnforcedPlainTextLabel.qml +++ b/src/gui/tray/EnforcedPlainTextLabel.qml @@ -22,7 +22,6 @@ Label { textFormat = Text.PlainText; } } - textFormat: Text.PlainText onTextFormatChanged: resetToPlainText() Component.onCompleted: resetToPlainText() diff --git a/src/gui/tray/HeaderButton.qml b/src/gui/tray/HeaderButton.qml index ff8866e481cf4..36c7acffb30e0 100644 --- a/src/gui/tray/HeaderButton.qml +++ b/src/gui/tray/HeaderButton.qml @@ -21,12 +21,12 @@ import QtQuick.Layouts // Custom qml modules are in /theme (and included by resources.qrc) import Style -import com.nextcloud.desktopclient +import com.ionos.hidrivenext.desktopclient Button { id: root - display: AbstractButton.IconOnly + display: AbstractButton.TextUnderIcon flat: true hoverEnabled: Style.hoverEffectsEnabled @@ -42,6 +42,51 @@ Button { } Layout.alignment: Qt.AlignRight - Layout.preferredWidth: Style.trayWindowHeaderHeight - Layout.preferredHeight: Style.trayWindowHeaderHeight + Layout.preferredWidth: Style.sesHeaderButtonWidth + Layout.preferredHeight: Style.sesHeaderButtonHeight + + property bool isHovered: root.hovered || root.visualFocus + property bool isActive: root.pressed + + background: Rectangle { + width: Style.sesHeaderButtonWidth + height: Style.sesHeaderButtonHeight + color: root.isActive ? Style.sesButtonPressed : root.isHovered ? Style.sesAccountMenuHover : "transparent" + radius: Style.sesCornerRadius + } + + contentItem: Item { + id: rootContent + + Image { + id: buttonIcon + anchors.horizontalCenter: rootContent.horizontalCenter + anchors.top: rootContent.top + anchors.topMargin: 10 + + property int imageWidth: root.icon.width + property int imageHeight: root.icon.height + cache: true + + source: root.icon.source + sourceSize { + width: imageWidth + height: imageHeight + } + + width: imageWidth + height: imageHeight + + anchors.verticalCenter: parent + } + + Text { + anchors.horizontalCenter: buttonIcon.horizontalCenter + anchors.top: buttonIcon.bottom + anchors.topMargin: 5 + font: root.font + text: root.text + color: Style.sesTrayFontColor + } + } } diff --git a/src/gui/tray/HeaderLogo.qml b/src/gui/tray/HeaderLogo.qml new file mode 100644 index 0000000000000..ee7b9ee008351 --- /dev/null +++ b/src/gui/tray/HeaderLogo.qml @@ -0,0 +1,34 @@ +import QtQuick 2.15 +import QtQuick.Window 2.15 +import QtQuick.Controls 2.15 +import QtQuick.Layouts 1.15 +import QtGraphicalEffects 1.15 +import Qt.labs.platform 1.1 as NativeDialogs + +import "../" + +// Custom qml modules are in /theme (and included by resources.qrc) +import Style 1.0 + +import com.ionos.hidrivenext.desktopclient 1.0 + +Rectangle { + Image{ + id: trayWindowLogo + cache: false + source: Style.sesIonosLogoIcon + sourceSize: Qt.size(width, height) + fillMode: Image.PreserveAspectFit + anchors{ + top: parent.top + left: parent.left + bottom: parent.bottom + topMargin: Style.sesHeaderLogoTopMargin + leftMargin: Style.sesHeaderLogoTopMargin + bottomMargin: Style.sesHeaderLogoTopMargin + + } + } + + color: Style.sesSelectedColor +} \ No newline at end of file diff --git a/src/gui/tray/NCBusyIndicator.qml b/src/gui/tray/NCBusyIndicator.qml index 583b787bcbe9d..0f25fd3d2d2d7 100644 --- a/src/gui/tray/NCBusyIndicator.qml +++ b/src/gui/tray/NCBusyIndicator.qml @@ -22,9 +22,6 @@ BusyIndicator { property color color: palette.windowText property string imageSource: "image://svgimage-custom-color/change.svg/" - property int imageSourceSizeWidth: 64 - property int imageSourceSizeHeight: 64 - contentItem: Image { id: contentImage @@ -34,9 +31,8 @@ BusyIndicator { verticalAlignment: Image.AlignVCenter source: colourableImage ? root.imageSource + root.color : root.imageSource - sourceSize.width: root.imageSourceSizeWidth - sourceSize.height: root.imageSourceSizeHeight - fillMode: Image.PreserveAspectFit + width: Style.sesIconSize + height: Style.sesIconSize mipmap: true diff --git a/src/gui/tray/SesButtonContents.qml b/src/gui/tray/SesButtonContents.qml new file mode 100644 index 0000000000000..d27b0316daba3 --- /dev/null +++ b/src/gui/tray/SesButtonContents.qml @@ -0,0 +1,73 @@ +/* + * Copyright (C) by Claudio Cambra + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY + * or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * for more details. + */ + +import QtQuick 2.15 +import QtQuick.Controls 2.15 +import QtQuick.Layouts 1.15 +import QtGraphicalEffects 1.15 + +import Style 1.0 + +RowLayout { + id: root + + property bool hovered: false + property string imageSourceHover: "" + property string imageSource: "" + property int imageSourceWidth: undefined + property int imageSourceHeight: undefined + property string text: "" + property var display + + property color textColor: palette.buttonText + property color textColorHovered: textColor + property alias font: buttonLabel.font + + height: parent.height + + EnforcedPlainTextLabel { + id: buttonLabel + + Layout.alignment: Qt.AlignVCenter + + text: root.text + + visible: root.text !== "" + + color: root.hovered ? root.textColorHovered : root.textColor + + elide: Text.ElideRight + } + + Image { + id: icon + + Layout.alignment: Qt.AlignVCenter + + source: root.hovered ? root.imageSourceHover : root.imageSource + + sourceSize { + width: root.imageSourceWidth + height: root.imageSourceHeight + } + + fillMode: Image.PreserveAspectFit + visible: root.display === Button.TextOnly ? false : root.hovered ? root.imageSourceHover !== "" : root.imageSource !== "" + + layer.enabled: true + layer.effect: ColorOverlay { + color: Style.sesWhite + } + } +} \ No newline at end of file diff --git a/src/gui/tray/SesCustomButton.qml b/src/gui/tray/SesCustomButton.qml new file mode 100644 index 0000000000000..0f61857f01a28 --- /dev/null +++ b/src/gui/tray/SesCustomButton.qml @@ -0,0 +1,75 @@ +/* + * Copyright (C) 2022 by Oleksandr Zolotov + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY + * or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * for more details. + */ + +import QtQuick 2.15 +import QtQuick.Controls 2.15 +import QtQuick.Layouts 1.15 +import Style 1.0 + +Button { + id: root + + property string imageSourceHover: root.icon.source + property var iconItem: icon + + property string toolTipText: "" + + property color textColor: palette.buttonText + property color textColorHovered: textColor + + property alias contentsFont: root.font + + property alias bgColor: bgRectangle.color + property alias bgNormalColor: bgRectangle.normalColor + property alias bgHoverColor: bgRectangle.hoverColor + property alias bgNormalOpacity: bgRectangle.normalOpacity + property alias bgHoverOpacity: bgRectangle.hoverOpacity + + property int bgBorderWidth + property string bgBorderColor + + background: NCButtonBackground { + id: bgRectangle + hovered: root.hovered + height: 36 + border.width: root.bgBorderWidth + border.color: root.bgBorderColor + } + + leftPadding: root.text === "" ? Style.smallSpacing : 20 + rightPadding: root.text === "" ? Style.smallSpacing : 20 + + implicitHeight: 36 + implicitWidth: contentItem.implicitWidth + leftPadding + rightPadding + + hoverEnabled: true + + NCToolTip { + text: root.toolTipText + visible: root.toolTipText !== "" && root.hovered + } + + contentItem: SesButtonContents { + id: contents + display: root.display + hovered: root.hovered + imageSourceHover: root.imageSourceHover + imageSource: root.icon.source + imageSourceWidth: 12 + imageSourceHeight: 16 + text: root.text + textColor: root.textColor + textColorHovered: root.textColorHovered + } +} diff --git a/src/gui/tray/SyncStatus.qml b/src/gui/tray/SyncStatus.qml index fa106f96ccf2f..e81e655699ca3 100644 --- a/src/gui/tray/SyncStatus.qml +++ b/src/gui/tray/SyncStatus.qml @@ -4,7 +4,7 @@ import QtQuick.Layouts import Style -import com.nextcloud.desktopclient as NC +import com.ionos.hidrivenext.desktopclientas NC RowLayout { id: root @@ -20,18 +20,11 @@ RowLayout { NCBusyIndicator { id: syncIcon - property int size: Style.trayListItemIconSize * 0.6 - property int whiteSpace: (Style.trayListItemIconSize - size) - - Layout.preferredWidth: size - Layout.preferredHeight: size - Layout.alignment: Qt.AlignHCenter | Qt.AlignVCenter - Layout.topMargin: Style.trayHorizontalMargin - Layout.rightMargin: whiteSpace * (0.5 + Style.thumbnailImageSizeReduction) - Layout.bottomMargin: Style.trayHorizontalMargin - Layout.leftMargin: Style.trayHorizontalMargin + (whiteSpace * (0.5 - Style.thumbnailImageSizeReduction)) - + Layout.topMargin: 16 + Layout.rightMargin: 0 + Layout.bottomMargin: 16 + Layout.leftMargin: Style.sesActivityItemDistanceToFrame padding: 0 imageSource: syncStatus.syncIcon @@ -41,10 +34,11 @@ RowLayout { ColumnLayout { id: syncProgressLayout - Layout.alignment: Qt.AlignVCenter + Layout.alignment: Qt.AlignLeft | Qt.AlignVCenter Layout.topMargin: 8 - Layout.rightMargin: Style.trayHorizontalMargin + Layout.rightMargin: Style.sesActivityItemDistanceToFrame Layout.bottomMargin: 8 + Layout.leftMargin: 0 Layout.fillWidth: true Layout.fillHeight: true @@ -55,8 +49,7 @@ RowLayout { text: syncStatus.syncStatusString verticalAlignment: Text.AlignVCenter - font.pixelSize: Style.topLinePixelSize - font.bold: true + font: root.font wrapMode: Text.Wrap } @@ -81,7 +74,8 @@ RowLayout { text: syncStatus.syncStatusDetailString visible: syncStatus.syncStatusDetailString !== "" - font.pixelSize: Style.subLinePixelSize + color: palette.midlight + font: root.font wrapMode: Text.Wrap } } @@ -94,11 +88,11 @@ RowLayout { text: qsTr("Sync now") padding: Style.smallSpacing + textColor: Style.adjustedCurrentUserHeaderColor + textColorHovered: Style.currentUserHeaderTextColor + bgColor: Style.currentUserHeaderColor - visible: !activityModel.hasSyncConflicts && - !syncStatus.syncing && - NC.UserModel.currentUser.hasLocalFolder && - NC.UserModel.currentUser.isConnected + visible: false // SES-4 removed enabled: visible onClicked: { if(!syncStatus.syncing) { @@ -111,6 +105,9 @@ RowLayout { Layout.rightMargin: Style.trayHorizontalMargin text: qsTr("Resolve conflicts") + textColor: Style.adjustedCurrentUserHeaderColor + textColorHovered: Style.currentUserHeaderTextColor + bgColor: Style.currentUserHeaderColor visible: activityModel.hasSyncConflicts && !syncStatus.syncing && diff --git a/src/gui/tray/TalkReplyTextField.qml b/src/gui/tray/TalkReplyTextField.qml index 40447957228ef..55a6d2099c83a 100644 --- a/src/gui/tray/TalkReplyTextField.qml +++ b/src/gui/tray/TalkReplyTextField.qml @@ -2,8 +2,8 @@ import QtQuick import QtQuick.Controls import QtQuick.Layouts -import com.nextcloud.desktopclient import Style +import com.ionos.hidrivenext.desktopclient TextField { id: replyMessageTextField diff --git a/src/gui/tray/TrayFoldersMenuButton.qml b/src/gui/tray/TrayFoldersMenuButton.qml index 060a167bd5e43..141170f9e5bd5 100644 --- a/src/gui/tray/TrayFoldersMenuButton.qml +++ b/src/gui/tray/TrayFoldersMenuButton.qml @@ -29,6 +29,11 @@ HeaderButton { property bool userHasGroupFolders: currentUser.groupFolders.length > 0 property color parentBackgroundColor: "transparent" + icon.source: Style.sesFilesIcon + icon.color: Style.sesIconColor + + text: qsTr("Files") + function openMenu() { foldersMenuLoader.openMenu() } @@ -70,23 +75,14 @@ HeaderButton { Item { id: rootContent - anchors.fill: parent - - Item { - id: contentContainer - anchors.centerIn: parent - - implicitWidth: openLocalFolderButtonCaretIconLoader.active ? openLocalFolderButtonIcon.width + openLocalFolderButtonCaretIconLoader.width : openLocalFolderButtonIcon.width - implicitHeight: openLocalFolderButtonIcon.height - Image { id: folderStateIndicator - visible: root.currentUser.hasLocalFolder + visible: root.currentUser.hasLocalFolder && false // SES-50 Hide Indicator till we have a proper implementation source: root.currentUser.isConnected ? Style.stateOnlineImageSource : Style.stateOfflineImageSource cache: false anchors.bottom: openLocalFolderButtonIcon.bottom - anchors.bottomMargin: Style.trayFoldersMenuButtonStateIndicatorBottomOffset + anchors.bottomMargin: -5 anchors.right: openLocalFolderButtonIcon.right sourceSize.width: Style.folderStateIndicatorSize sourceSize.height: Style.folderStateIndicatorSize @@ -96,11 +92,12 @@ HeaderButton { z: 1 Rectangle { - id: folderStateIndicatorBackground + id: folderStateIndicatorBackgroundMouseHover width: Style.folderStateIndicatorSize + Style.trayFolderStatusIndicatorSizeOffset height: width - color: root.parentBackgroundColor anchors.centerIn: parent + color: root.hovered ? Style.currentUserHeaderTextColor : "transparent" + opacity: Style.trayFolderStatusIndicatorMouseHoverOpacityFactor radius: width * Style.trayFolderStatusIndicatorRadiusFactor z: -1 } @@ -109,12 +106,15 @@ HeaderButton { Image { id: openLocalFolderButtonIcon - property int imageWidth: rootContent.width * Style.trayFoldersMenuButtonMainIconSizeFraction - property int imageHeight: rootContent.width * Style.trayFoldersMenuButtonMainIconSizeFraction + anchors.horizontalCenter: rootContent.horizontalCenter + anchors.top: rootContent.top + anchors.topMargin: 10 + property int imageWidth: root.icon.width + property int imageHeight: root.icon.height cache: true - source: "image://svgimage-custom-color/folder.svg/" + palette.windowText + source: root.icon.source sourceSize { width: imageWidth height: imageHeight @@ -123,9 +123,17 @@ HeaderButton { width: imageWidth height: imageHeight - anchors.verticalCenter: parent.verticalCenter + anchors.verticalCenter: parent } + Text { + anchors.horizontalCenter: openLocalFolderButtonIcon.horizontalCenter + anchors.top: openLocalFolderButtonIcon.bottom + anchors.topMargin: 5 + text: root.text + font: root.font + color: Style.sesTrayFontColor + } Loader { id: openLocalFolderButtonCaretIconLoader @@ -153,9 +161,7 @@ HeaderButton { width: openLocalFolderButtonCaretIconLoader.imageWidth height: openLocalFolderButtonCaretIconLoader.imageHeight - } - } } Loader { diff --git a/src/gui/tray/TrayWindowAccountMenu.qml b/src/gui/tray/TrayWindowAccountMenu.qml new file mode 100644 index 0000000000000..2d7d2367e8747 --- /dev/null +++ b/src/gui/tray/TrayWindowAccountMenu.qml @@ -0,0 +1,285 @@ +import QtQuick 2.15 +import QtQuick.Window 2.15 +import QtQuick.Controls 2.15 +import QtQuick.Layouts 1.15 +import QtGraphicalEffects 1.15 +import Qt.labs.platform 1.1 as NativeDialogs + +import "../" +import "../filedetails/" + +// Custom qml modules are in /theme (and included by resources.qrc) +import Style 1.0 + +import com.ionos.hidrivenext.desktopclient 1.0 + +Button { + id: currentAccountButton + + display: AbstractButton.IconOnly + flat: true + + Accessible.role: Accessible.ButtonMenu + Accessible.name: qsTr("Current account") + Accessible.onPressAction: currentAccountButton.clicked() + + property bool isHovered: currentAccountButton.hovered || currentAccountButton.visualFocus + property bool isActive: currentAccountButton.pressed + + background: Rectangle { + color: currentAccountButton.isActive ? Style.sesButtonPressed : + currentAccountButton.isHovered ? Style.sesAccountMenuHover : + accountMenu.visible? Style.sesSelectedColor : "transparent" + radius: Style.sesCornerRadius + } + + // We call open() instead of popup() because we want to position it + // exactly below the dropdown button, not the mouse + onClicked: { + syncPauseButton.text = Systray.syncIsPaused ? qsTr("Resume sync for all") : qsTr("Pause sync for all") + if (accountMenu.visible) { + accountMenu.close() + } else { + accountMenu.open() + } + } + + onVisibleChanged: { + // HACK: reload account Instantiator immediately by restting it - could be done better I guess + // see also id:accountMenu below + userLineInstantiator.active = false; + userLineInstantiator.active = true; + } + + Menu { + id: accountMenu + + // x coordinate grows towards the right + // y coordinate grows towards the bottom + x: (currentAccountButton.x + 2) + y: (currentAccountButton.y + Style.trayWindowHeaderHeight + 2) + + width: Style.sesAccountMenuWidth + height: Math.min(implicitHeight, maxMenuHeight) + closePolicy: Menu.CloseOnPressOutsideParent | Menu.CloseOnEscape + + clip: true + + background: Rectangle { + border.color: Style.sesBorderColor + color: Style.sesWhite + radius: Style.sesCornerRadius + } + + contentItem: ScrollView { + id: accMenuScrollView + ScrollBar.horizontal.policy: ScrollBar.AlwaysOff + + data: WheelHandler { + target: accMenuScrollView.contentItem + } + ListView { + implicitHeight: contentHeight + model: accountMenu.contentModel + interactive: true + clip: true + currentIndex: accountMenu.currentIndex + } + } + + onClosed: { + // HACK: reload account Instantiator immediately by restting it - could be done better I guess + // see also onVisibleChanged above + userLineInstantiator.active = false; + userLineInstantiator.active = true; + } + + Instantiator { + id: userLineInstantiator + model: UserModel + delegate: UserLine { + onShowUserStatusSelector: { + userStatusDrawer.openUserStatusDrawer(model.index); + accountMenu.close(); + } + onClicked: UserModel.currentUserId = model.index; + } + onObjectAdded: accountMenu.insertItem(index, object) + onObjectRemoved: accountMenu.removeItem(object) + } + + Rectangle { + anchors.left: parent.left + anchors.right: parent.right + implicitHeight: 1 + color: Style.sesBorderColor + } + + AccountMenuItem{ + id: addAccountButton + icon.source: Style.sesDarkPlus + text: qsTr("Add account") + onClicked: UserModel.addAccount() + visible: Systray.enableAddAccount + } + + Rectangle { + anchors.left: parent.left + anchors.right: parent.right + implicitHeight: 1 + color: Style.sesBorderColor + } + + AccountMenuItem{ + id: syncPauseButton + onClicked: Systray.syncIsPaused = !Systray.syncIsPaused + icon.source: Systray.syncIsPaused ? Style.sesAccountResume : Style.sesAccountPause + } + + AccountMenuItem{ + id: settingsButton + text: qsTr("Settings") + onClicked: Systray.openSettings() + icon.source: Style.sesAccountSettings + } + + AccountMenuItem{ + id: exitButton + text: qsTr("Exit") + onClicked: Systray.shutdown() + icon.source: Style.sesAccountQuit + } + } + + RowLayout { + id: accountControlRowLayout + + height: Style.sesAccountButtonHeight + width: Style.sesAccountButtonWidth + spacing: 0 + + Image { + id: currentAccountAvatar + + Layout.leftMargin: Style.sesAccountButtonLeftMargin + verticalAlignment: Qt.AlignCenter + cache: false + source: Style.sesAvatar + Accessible.role: Accessible.Graphic + Accessible.name: qsTr("Current account avatar") + + Rectangle { + id: currentAccountStatusIndicatorBackground + // SES-50 Remove Inidcator + // visible: UserModel.currentUser.isConnected + // && UserModel.currentUser.serverHasUserStatus + visible: false + width: Style.accountAvatarStateIndicatorSize + + Style.trayFolderStatusIndicatorSizeOffset + height: width + anchors.bottom: currentAccountAvatar.bottom + anchors.right: currentAccountAvatar.right + anchors.bottomMargin: -5 + anchors.rightMargin: -5 + color: Style.currentUserHeaderColor + radius: width * Style.trayFolderStatusIndicatorRadiusFactor + } + + Rectangle { + id: currentAccountStatusIndicatorMouseHover + // SES-50 Remove Inidcator + // visible: UserModel.currentUser.isConnected + // && UserModel.currentUser.serverHasUserStatus + visible: false + width: Style.accountAvatarStateIndicatorSize + + Style.trayFolderStatusIndicatorSizeOffset + height: width + anchors.bottom: currentAccountAvatar.bottom + anchors.right: currentAccountAvatar.right + anchors.bottomMargin: -5 + anchors.rightMargin: -5 + color: currentAccountButton.hovered ? Style.sesHover : "transparent" + opacity: Style.trayFolderStatusIndicatorMouseHoverOpacityFactor + radius: width * Style.trayFolderStatusIndicatorRadiusFactor + } + + Image { + id: currentAccountStatusIndicator + // SES-50 Remove Inidcator + // visible: UserModel.currentUser.isConnected + // && UserModel.currentUser.serverHasUserStatus + visible: false + source: UserModel.currentUser.statusIcon + cache: false + x: currentAccountStatusIndicatorBackground.x + 1 + y: currentAccountStatusIndicatorBackground.y + 1 + sourceSize.width: Style.accountAvatarStateIndicatorSize + sourceSize.height: Style.accountAvatarStateIndicatorSize + + Accessible.role: Accessible.Indicator + Accessible.name: UserModel.desktopNotificationsAllowed ? qsTr("Current account status is online") : qsTr("Current account status is do not disturb") + } + } + + Column { + id: accountLabels + spacing: 0 + Layout.alignment: Qt.AlignLeft | Qt.AlignVCenter + Layout.leftMargin: Style.sesSmallMargin + Layout.fillWidth: true + Layout.maximumWidth: parent.width + + EnforcedPlainTextLabel { + id: currentAccountUser + Layout.alignment: Qt.AlignLeft | Qt.AlignBottom + width: Style.sesAccountLabelWidth + text: UserModel.currentUser.name + elide: Text.ElideRight + color: Style.currentUserHeaderTextColor + font: root.font + } + + RowLayout { + id: currentUserStatus + visible: UserModel.currentUser.isConnected && + UserModel.currentUser.serverHasUserStatus + spacing: Style.accountLabelsSpacing + width: parent.width + + EnforcedPlainTextLabel { + id: emoji + visible: UserModel.currentUser.statusEmoji !== "" + width: Style.userStatusEmojiSize + text: UserModel.currentUser.statusEmoji + } + EnforcedPlainTextLabel { + id: message + Layout.alignment: Qt.AlignLeft | Qt.AlignBottom + Layout.fillWidth: true + visible: UserModel.currentUser.statusMessage !== "" + width: Style.currentAccountLabelWidth + text: UserModel.currentUser.statusMessage !== "" + ? UserModel.currentUser.statusMessage + : UserModel.currentUser.server + elide: Text.ElideRight + color: Style.currentUserHeaderTextColor + } + } + } + + ColorOverlay { + cached: true + color: Style.currentUserHeaderTextColor + width: source.width + height: source.height + Layout.rightMargin: Style.sesAccountButtonRightMargin + source: Image { + Layout.alignment: Qt.AlignRight + verticalAlignment: Qt.AlignCenter + source: Style.sesChevron + sourceSize.width: 12 + sourceSize.height: 7 + Accessible.role: Accessible.PopupMenu + Accessible.name: qsTr("Account switcher and settings menu") + } + } + } +} \ No newline at end of file diff --git a/src/gui/tray/TrayWindowHeaderBar.qml b/src/gui/tray/TrayWindowHeaderBar.qml new file mode 100644 index 0000000000000..e03af08bc67a6 --- /dev/null +++ b/src/gui/tray/TrayWindowHeaderBar.qml @@ -0,0 +1,171 @@ +import QtQuick 2.15 +import QtQuick.Window 2.15 +import QtQuick.Controls 2.15 +import QtQuick.Layouts 1.15 +import QtGraphicalEffects 1.15 +import Qt.labs.platform 1.1 as NativeDialogs + +import "../" +import "../filedetails/" + +// Custom qml modules are in /theme (and included by resources.qrc) +import Style 1.0 + +import com.ionos.hidrivenext.desktopclient 1.0 + + +Rectangle { + + height: Style.trayWindowHeaderHeight + color: Style.sesWhite + radius: 0.0 + + RowLayout { + id: trayWindowHeaderLayout + + anchors.fill: parent + anchors.leftMargin: 20 + anchors.rightMargin: 20 + + TrayWindowAccountMenu{ + Layout.preferredWidth: Style.currentAccountButtonWidth + Layout.preferredHeight: Style.trayWindowHeaderHeight + } + + HeaderButton { + id: trayWindowWebsiteButton + + icon.source: Style.sesWebsiteIcon + icon.color: Style.sesIconColor + onClicked: UserModel.openCurrentAccountServer() + + text: qsTr("Website") + + Accessible.role: Accessible.Button + Accessible.name: qsTr("Open Nextcloud in browser") + Accessible.onPressAction: trayWindowWebsiteButton.clicked() + + Layout.alignment: Qt.AlignRight + Layout.preferredWidth: Style.trayWindowHeaderHeight + Layout.preferredHeight: Style.trayWindowHeaderHeight + } + + TrayFoldersMenuButton { + id: openLocalFolderButton + + visible: currentUser.hasLocalFolder + currentUser: UserModel.currentUser + + + onClicked: openLocalFolderButton.userHasGroupFolders ? openLocalFolderButton.toggleMenuOpen() : UserModel.openCurrentAccountLocalFolder() + + onFolderEntryTriggered: isGroupFolder ? UserModel.openCurrentAccountFolderFromTrayInfo(fullFolderPath) : UserModel.openCurrentAccountLocalFolder() + + Accessible.role: Accessible.Graphic + Accessible.name: qsTr("Open local or group folders") + Accessible.onPressAction: openLocalFolderButton.userHasGroupFolders ? openLocalFolderButton.toggleMenuOpen() : UserModel.openCurrentAccountLocalFolder() + + Layout.alignment: Qt.AlignRight + Layout.preferredWidth: Style.trayWindowHeaderHeight + Layout.preferredHeight: Style.trayWindowHeaderHeight + } + + HeaderButton { + id: trayWindowTalkButton + + visible: false //SES-4 removed + icon.source: "qrc:///client/theme/white/talk-app.svg" + icon.color: Style.currentUserHeaderTextColor + onClicked: UserModel.openCurrentAccountTalk() + + Accessible.role: Accessible.Button + Accessible.name: qsTr("Open Nextcloud Talk in browser") + Accessible.onPressAction: trayWindowTalkButton.clicked() + + Layout.alignment: Qt.AlignRight + Layout.preferredWidth: Style.trayWindowHeaderHeight + Layout.preferredHeight: Style.trayWindowHeaderHeight + + } + + HeaderButton { + id: trayWindowAppsButton + icon.source: "qrc:///client/theme/white/more-apps.svg" + icon.color: Style.currentUserHeaderTextColor + + visible: false //SES-4 removed + + onClicked: { + if(appsMenuListView.count <= 0) { + UserModel.openCurrentAccountServer() + } else if (appsMenu.visible) { + appsMenu.close() + } else { + appsMenu.open() + } + } + + Accessible.role: Accessible.ButtonMenu + Accessible.name: qsTr("More apps") + Accessible.onPressAction: trayWindowAppsButton.clicked() + + Menu { + id: appsMenu + x: Style.trayWindowMenuOffsetX + y: (trayWindowAppsButton.y + trayWindowAppsButton.height + Style.trayWindowMenuOffsetY) + width: Style.trayWindowWidth * Style.trayWindowMenuWidthFactor + height: implicitHeight + y > Style.trayWindowHeight ? Style.trayWindowHeight - y : implicitHeight + closePolicy: Menu.CloseOnPressOutsideParent | Menu.CloseOnEscape + + background: Rectangle { + border.color: Style.sesBorderColor + color: Style.sesWhite + radius: 2 + } + + contentItem: ScrollView { + id: appsMenuScrollView + ScrollBar.horizontal.policy: ScrollBar.AlwaysOff + + data: WheelHandler { + target: appsMenuScrollView.contentItem + } + ListView { + id: appsMenuListView + implicitHeight: contentHeight + model: UserAppsModel + interactive: true + clip: true + currentIndex: appsMenu.currentIndex + delegate: MenuItem { + id: appEntry + anchors.left: parent.left + anchors.right: parent.right + + text: model.appName + font.pixelSize: Style.topLinePixelSize + icon.source: model.appIconUrl + icon.color: Style.ncTextColor + onTriggered: UserAppsModel.openAppUrl(appUrl) + hoverEnabled: true + + background: Item { + height: parent.height + width: parent.width + Rectangle { + anchors.fill: parent + anchors.margins: 1 + color: parent.parent.hovered || parent.parent.visualFocus ? Style.sesHover : "transparent" + } + } + + Accessible.role: Accessible.MenuItem + Accessible.name: qsTr("Open %1 in browser").arg(model.appName) + Accessible.onPressAction: appEntry.triggered() + } + } + } + } + } + } +} // Rectangle trayWindowHeaderBackground diff --git a/src/gui/tray/UnifiedSearchInputContainer.qml b/src/gui/tray/UnifiedSearchInputContainer.qml index 4ce71913337aa..1514d9623297f 100644 --- a/src/gui/tray/UnifiedSearchInputContainer.qml +++ b/src/gui/tray/UnifiedSearchInputContainer.qml @@ -18,7 +18,7 @@ import QtQuick.Controls import Qt5Compat.GraphicalEffects import Style -import com.nextcloud.desktopclient +import com.ionos.hidrivenext.desktopclient TextField { id: root diff --git a/src/gui/tray/UnifiedSearchResultListItem.qml b/src/gui/tray/UnifiedSearchResultListItem.qml index 97092b23c6f00..e11bd24e07f40 100644 --- a/src/gui/tray/UnifiedSearchResultListItem.qml +++ b/src/gui/tray/UnifiedSearchResultListItem.qml @@ -16,7 +16,7 @@ import QtQml import QtQuick import QtQuick.Controls import Style -import com.nextcloud.desktopclient +import com.ionos.hidrivenext.desktopclient MouseArea { id: unifiedSearchResultMouseArea diff --git a/src/gui/tray/UnifiedSearchResultSectionItem.qml b/src/gui/tray/UnifiedSearchResultSectionItem.qml index 31acaf202d279..a05bf5500a5f3 100644 --- a/src/gui/tray/UnifiedSearchResultSectionItem.qml +++ b/src/gui/tray/UnifiedSearchResultSectionItem.qml @@ -17,7 +17,7 @@ import QtQuick import QtQuick.Controls import QtQuick.Layouts import Style -import com.nextcloud.desktopclient +import com.ionos.hidrivenext.desktopclient EnforcedPlainTextLabel { required property string section diff --git a/src/gui/tray/UserLine.qml b/src/gui/tray/UserLine.qml index ea52fb09c2d21..917da63b6c5fc 100644 --- a/src/gui/tray/UserLine.qml +++ b/src/gui/tray/UserLine.qml @@ -19,61 +19,46 @@ import QtQuick.Layouts // Custom qml modules are in /theme (and included by resources.qrc) import Style -import com.nextcloud.desktopclient +import com.ionos.hidrivenext.desktopclient AbstractButton { id: userLine + property bool isHovered: userLine.hovered || userLine.visualFocus + property bool isActive: userLine.pressed + signal showUserStatusSelector(int id) Accessible.role: Accessible.MenuItem Accessible.name: qsTr("Switch to account") + " " + model.name - height: Style.trayWindowHeaderHeight + height: Style.sesAccountMenuHeight + + leftPadding: Style.sesMediumMargin + topPadding: Style.sesSmallMargin + bottomPadding: Style.sesSmallMargin + + background: Rectangle { + radius: 0 + anchors.fill: parent + anchors.margins: 1 + color: userLine.isHovered && !userMoreButton.isHovered ? Style.sesAccountMenuHover : "transparent" + } contentItem: RowLayout { id: userLineLayout - spacing: Style.userLineSpacing + spacing: Style.sesSmallMargin Image { id: accountAvatar - Layout.leftMargin: Style.accountIconsMenuMargin verticalAlignment: Qt.AlignCenter cache: false - source: model.avatar !== "" ? model.avatar : Style.darkMode ? "image://avatars/fallbackWhite" : "image://avatars/fallbackBlack" - Layout.preferredHeight: Style.accountAvatarSize - Layout.preferredWidth: Style.accountAvatarSize - - Rectangle { - id: accountStatusIndicatorBackground - visible: model.isConnected && model.serverHasUserStatus - width: accountStatusIndicator.sourceSize.width + 2 - height: width - color: "white" - anchors.bottom: accountAvatar.bottom - anchors.right: accountAvatar.right - radius: width * Style.trayFolderStatusIndicatorRadiusFactor - } - - Image { - id: accountStatusIndicator - visible: model.isConnected && model.serverHasUserStatus - source: model.statusIcon - cache: false - x: accountStatusIndicatorBackground.x + 1 - y: accountStatusIndicatorBackground.y + 1 - sourceSize.width: Style.accountAvatarStateIndicatorSize - sourceSize.height: Style.accountAvatarStateIndicatorSize - - Accessible.role: Accessible.Indicator - Accessible.name: model.desktopNotificationsAllowed ? qsTr("Current account status is online") : qsTr("Current account status is do not disturb") - } + source: Style.sesAvatar } ColumnLayout { id: accountLabels - Layout.leftMargin: Style.accountLabelsSpacing Layout.fillWidth: true Layout.fillHeight: true @@ -84,8 +69,7 @@ AbstractButton { verticalAlignment: Text.AlignBottom text: name elide: Text.ElideRight - font.pixelSize: Style.topLinePixelSize - font.bold: true + font: root.font } RowLayout { @@ -109,86 +93,131 @@ AbstractButton { visible: model.statusMessage !== "" text: statusMessage elide: Text.ElideRight - font.pixelSize: Style.subLinePixelSize + font: root.font leftPadding: Style.accountLabelsSpacing } } - - EnforcedPlainTextLabel { - id: accountServer - Layout.fillWidth: true - Layout.alignment: Qt.AlignLeft | Qt.AlignTop - verticalAlignment: Text.AlignTop - text: server - elide: Text.ElideRight - font.pixelSize: Style.subLinePixelSize - } } Button { id: userMoreButton Layout.preferredWidth: Style.headerButtonIconSize - Layout.fillHeight: true + Layout.preferredHeight: Layout.preferredWidth + Layout.rightMargin: Style.sesMediumMargin flat: true + property bool isHovered: userMoreButton.hovered || userMoreButton.visualFocus + property bool isActive: userMoreButton.pressed || userMoreButtonMenu.visible + + icon.source: "qrc:///client/theme/more.svg" + icon.color: userMoreButton.isActive || userMoreButton.isHovered ? Style.sesWhite : Style.sesIconDarkColor + Accessible.role: Accessible.ButtonMenu Accessible.name: qsTr("Account actions") Accessible.onPressAction: userMoreButtonMouseArea.clicked() onClicked: userMoreButtonMenu.visible ? userMoreButtonMenu.close() : userMoreButtonMenu.popup() - - icon.source: "image://svgimage-custom-color/more.svg/" + palette.windowText + background: Rectangle { + anchors.fill: parent + anchors.margins: 1 + color: userMoreButton.isActive ? Style.sesActionPressed : userMoreButton.isHovered ? Style.sesActionHover : "transparent" + radius: width / 2 + } AutoSizingMenu { id: userMoreButtonMenu closePolicy: Menu.CloseOnPressOutsideParent | Menu.CloseOnEscape + background: Rectangle { + radius: Style.sesCornerRadius + border.color: Style.sesBorderColor + } + MenuItem { - visible: model.isConnected && model.serverHasUserStatus + visible: false height: visible ? implicitHeight : 0 text: qsTr("Set status") - font.pixelSize: Style.topLinePixelSize + font: root.font + palette.windowText: Style.ncTextColor hoverEnabled: true onClicked: showUserStatusSelector(index) } MenuItem { + id: logInOutButton + + property bool isHovered: logInOutButton.hovered || logInOutButton.visualFocus + property bool isActive: logInOutButton.pressed + + icon.source: Style.sesLogout + icon.color: Style.sesIconDarkColor + leftPadding: Style.sesMediumMargin + topPadding: Style.sesAccountMenuItemPadding + bottomPadding: Style.sesAccountMenuItemPadding + spacing: Style.sesSmallMargin text: model.isConnected ? qsTr("Log out") : qsTr("Log in") - font.pixelSize: Style.topLinePixelSize + font: root.font + palette.windowText: Style.ncTextColor hoverEnabled: true onClicked: { model.isConnected ? UserModel.logout(index) : UserModel.login(index) accountMenu.close() } - Accessible.role: Accessible.Button - Accessible.name: model.isConnected ? qsTr("Log out") : qsTr("Log in") - - onPressed: { - if (model.isConnected) { - UserModel.logout(index) - } else { - UserModel.login(index) + background: Item { + height: parent.height + width: parent.menu.width + Rectangle { + radius: 0 + anchors.fill: parent + anchors.margins: 1 + color: logInOutButton.isActive ? Style.sesButtonPressed : + logInOutButton.isHovered ? Style.sesAccountMenuHover : "transparent" } - accountMenu.close() } - } + + Accessible.role: Accessible.MenuItem + Accessible.name: model.isConnected ? qsTr("Log out") : qsTr("Log in") + } MenuItem { + + property bool isHovered: removeAccountButton.hovered || removeAccountButton.visualFocus + property bool isActive: removeAccountButton.pressed + id: removeAccountButton + icon.source: Style.sesDelete + icon.color: Style.sesIconDarkColor + leftPadding: Style.sesMediumMargin + topPadding: Style.sesAccountMenuItemPadding + bottomPadding: Style.sesAccountMenuItemPadding + spacing: Style.sesSmallMargin text: qsTr("Remove account") - font.pixelSize: Style.topLinePixelSize + font: root.font + palette.windowText: Style.ncTextColor hoverEnabled: true onClicked: { UserModel.removeAccount(index) accountMenu.close() } - Accessible.role: Accessible.Button + background: Item { + height: parent.height + width: parent.menu.width + Rectangle { + radius: 0 + anchors.fill: parent + anchors.margins: 1 + color: removeAccountButton.isActive ? Style.sesButtonPressed : + removeAccountButton.isHovered ? Style.sesAccountMenuHover : "transparent" + } + } + + Accessible.role: Accessible.MenuItem Accessible.name: text Accessible.onPressAction: removeAccountButton.clicked() } } } } -} // MenuItem userLine +} // MenuItem userLine \ No newline at end of file diff --git a/src/gui/tray/Window.qml b/src/gui/tray/Window.qml new file mode 100644 index 0000000000000..5ccd8ad933121 --- /dev/null +++ b/src/gui/tray/Window.qml @@ -0,0 +1,497 @@ +/* + * Copyright (C) 2020 by Dominique Fuchs <32204802+DominiqueFuchs@users.noreply.github.com> + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY + * or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * for more details. + */ + +import QtQuick 2.15 +import QtQuick.Window 2.15 +import QtQuick.Controls 2.15 +import QtQuick.Layouts 1.15 +import QtGraphicalEffects 1.15 +import Qt.labs.platform 1.1 as NativeDialogs + +import "../" +import "../filedetails/" +import "../SesComponents/" + +// Custom qml modules are in /theme (and included by resources.qrc) +import Style 1.0 + +import com.ionos.hidrivenext.desktopclient 1.0 + +ApplicationWindow { + id: trayWindow + + title: Systray.windowTitle + // If the main dialog is displayed as a regular window we want it to be quadratic + width: Systray.useNormalWindow ? Style.trayWindowHeight : Style.sesTrayWindowWidth + height: Style.trayWindowHeight + color: "transparent" + flags: Systray.useNormalWindow ? Qt.Window : Qt.Dialog | Qt.FramelessWindowHint + + font.family: Style.sesOpenSansRegular + font.pixelSize: Style.sesFontPixelSize + font.weight: Style.sesFontBoldWeight + + // TODO: Rather than setting all these palette colours manually, + // create a custom style and do it for all components globally + palette { + text: Style.ncTextColor + windowText: Style.ncTextColor + buttonText: Style.ncTextColor + brightText: Style.ncTextBrightColor + highlight: Style.lightHover + highlightedText: Style.ncTextColor + light: Style.lightHover + midlight: Style.ncSecondaryTextColor + mid: Style.darkerHover + dark: Style.menuBorder + button: Style.buttonBackgroundColor + window: Style.backgroundColor + base: Style.backgroundColor + toolTipBase: Style.backgroundColor + toolTipText: Style.ncTextColor + } + + readonly property int maxMenuHeight: Style.trayWindowHeight - Style.trayWindowHeaderHeight - 2 * Style.trayWindowBorderWidth + + Component.onCompleted: Systray.forceWindowInit(trayWindow) + + // Close tray window when focus is lost (e.g. click somewhere else on the screen) + onActiveChanged: { + if (!Systray.useNormalWindow && !active) { + hide(); + Systray.isOpen = false; + } + } + + onClosing: Systray.isOpen = false + + onVisibleChanged: syncStatus.model.load() + + background: Rectangle { + radius: 0.0 + border.width: Style.trayWindowBorderWidth + border.color: palette.dark + color: palette.window + } + + Connections { + target: UserModel + function onCurrentUserChanged() { + accountMenu.close(); + syncStatus.model.load(); + } + } + + Component { + id: errorMessageDialog + + NativeDialogs.MessageDialog { + id: dialog + + title: Systray.windowTitle + + onAccepted: destroy() + onRejected: destroy() + } + } + + Connections { + target: Systray + + function onIsOpenChanged() { + userStatusDrawer.close() + fileDetailsDrawer.close(); + + if(Systray.isOpen) { + accountMenu.close(); + appsMenu.close(); + openLocalFolderButton.closeMenu() + } + } + + function onShowErrorMessageDialog(error) { + var newErrorDialog = errorMessageDialog.createObject(trayWindow) + newErrorDialog.text = error + newErrorDialog.open() + } + + function onShowFileDetails(accountState, localPath, fileDetailsPage) { + fileDetailsDrawer.openFileDetails(accountState, localPath, fileDetailsPage); + } + } + + OpacityMask { + anchors.fill: parent + anchors.margins: Style.trayWindowBorderWidth + source: ShaderEffectSource { + sourceItem: trayWindowMainItem + hideSource: true + } + maskSource: Rectangle { + width: trayWindow.width + height: trayWindow.height + radius: 0.0 + } + } + + Drawer { + id: userStatusDrawer + width: parent.width + height: parent.height - Style.trayDrawerMargin + padding: 0 + edge: Qt.BottomEdge + modal: true + visible: false + + background: Rectangle { + radius: Systray.useNormalWindow ? 0.0 : Style.trayWindowRadius + border.width: Style.trayWindowBorderWidth + border.color: palette.dark + color: "red"//palette.window + } + + property int userIndex: 0 + + function openUserStatusDrawer(index) { + console.log(`About to show dialog for user with index ${index}`); + userIndex = index; + open(); + } + + Loader { + id: userStatusContents + anchors.fill: parent + active: userStatusDrawer.visible + sourceComponent: UserStatusSelectorPage { + anchors.fill: parent + userIndex: userStatusDrawer.userIndex + onFinished: userStatusDrawer.close() + } + } + } + + Drawer { + id: fileDetailsDrawer + width: parent.width - Style.trayDrawerMargin + height: parent.height + padding: 0 + edge: Qt.RightEdge + modal: true + visible: false + clip: true + + background: Rectangle { + radius: Systray.useNormalWindow ? 0.0 : Style.trayWindowRadius + border.width: Style.trayWindowBorderWidth + border.color: palette.dark + color: palette.window + } + + property var folderAccountState: ({}) + property string fileLocalPath: "" + property var pageToShow: Systray.FileDetailsPage.Activity + + function openFileDetails(accountState, localPath, fileDetailsPage) { + console.log(`About to show file details view in tray for ${localPath}`); + folderAccountState = accountState; + fileLocalPath = localPath; + pageToShow = fileDetailsPage; + + if(!opened) { + open(); + } + } + + Loader { + id: fileDetailsContents + anchors.fill: parent + active: fileDetailsDrawer.visible + onActiveChanged: { + if (active) { + Systray.showFileDetailsPage(fileDetailsDrawer.fileLocalPath, + fileDetailsDrawer.pageToShow); + } + } + sourceComponent: FileDetailsView { + id: fileDetails + + width: parent.width + height: parent.height + + backgroundsVisible: false + accentColor: Style.currentUserHeaderColor + accountState: fileDetailsDrawer.folderAccountState + localPath: fileDetailsDrawer.fileLocalPath + showCloseButton: true + + onCloseButtonClicked: fileDetailsDrawer.close() + } + } + } + + Item { + id: trayWindowMainItem + + property bool isUnifiedSearchActive: unifiedSearchResultsListViewSkeletonLoader.active + || unifiedSearchResultNothingFound.visible + || unifiedSearchResultsErrorLabel.visible + || unifiedSearchResultsListView.visible + + anchors.fill: parent + anchors.margins: Style.trayWindowBorderWidth + clip: true + + Accessible.role: Accessible.Grouping + Accessible.name: qsTr("Nextcloud desktop main dialog") + + HeaderLogo { + id: trayWindowLogoHeaderBackground + height: Style.sesHeaderLogoHeigth + width: parent.width + } + + SesTrayHeader { + id: trayWindowHeaderBackground + anchors.left: trayWindowLogoHeaderBackground.left + anchors.right: trayWindowLogoHeaderBackground.right + anchors.top: trayWindowLogoHeaderBackground.bottom + anchors.topMargin: Style.sesHeaderTopMargin + } + + Rectangle { + anchors.left: parent.left + anchors.right: parent.right + anchors.top: trayWindowHeaderBackground.bottom + anchors.topMargin: Style.sesHeaderTopMargin + implicitHeight: 1 + color: Style.sesBorderColor + } + + UnifiedSearchInputContainer { + id: trayWindowUnifiedSearchInputContainer + height: 0 + visible: false //SES-4 removed + + anchors { + top: trayWindowHeaderBackground.bottom + left: trayWindowMainItem.left + right: trayWindowMainItem.right + + topMargin: Style.trayHorizontalMargin + controlRoot.padding + leftMargin: Style.trayHorizontalMargin + controlRoot.padding + rightMargin: Style.trayHorizontalMargin + controlRoot.padding + } + + text: UserModel.currentUser.unifiedSearchResultsListModel.searchTerm + readOnly: !UserModel.currentUser.isConnected || UserModel.currentUser.unifiedSearchResultsListModel.currentFetchMoreInProgressProviderId + isSearchInProgress: UserModel.currentUser.unifiedSearchResultsListModel.isSearchInProgress + onTextEdited: { UserModel.currentUser.unifiedSearchResultsListModel.searchTerm = trayWindowUnifiedSearchInputContainer.text } + onClearText: { UserModel.currentUser.unifiedSearchResultsListModel.searchTerm = "" } + } + + SesErrorBox { + id: unifiedSearchResultsErrorLabel + visible: UserModel.currentUser.unifiedSearchResultsListModel.errorString && + !unifiedSearchResultsListView.visible && + !UserModel.currentUser.unifiedSearchResultsListModel.isSearchInProgress && + !UserModel.currentUser.unifiedSearchResultsListModel.currentFetchMoreInProgressProviderId + text: UserModel.currentUser.unifiedSearchResultsListModel.errorString + anchors.top: trayWindowUnifiedSearchInputContainer.bottom + anchors.left: trayWindowMainItem.left + anchors.right: trayWindowMainItem.right + anchors.margins: Style.trayHorizontalMargin + } + + UnifiedSearchResultNothingFound { + id: unifiedSearchResultNothingFound + + anchors.top: trayWindowUnifiedSearchInputContainer.bottom + anchors.left: trayWindowMainItem.left + anchors.right: trayWindowMainItem.right + anchors.topMargin: Style.trayHorizontalMargin + + text: UserModel.currentUser.unifiedSearchResultsListModel.searchTerm + + property bool isSearchRunning: UserModel.currentUser.unifiedSearchResultsListModel.isSearchInProgress + property bool waitingForSearchTermEditEnd: UserModel.currentUser.unifiedSearchResultsListModel.waitingForSearchTermEditEnd + property bool isSearchResultsEmpty: unifiedSearchResultsListView.count === 0 + property bool nothingFound: text && isSearchResultsEmpty && !UserModel.currentUser.unifiedSearchResultsListModel.errorString + + visible: !isSearchRunning && !waitingForSearchTermEditEnd && nothingFound + } + + Loader { + id: unifiedSearchResultsListViewSkeletonLoader + + anchors.top: trayWindowUnifiedSearchInputContainer.bottom + anchors.left: trayWindowMainItem.left + anchors.right: trayWindowMainItem.right + anchors.bottom: trayWindowMainItem.bottom + anchors.margins: controlRoot.padding + + active: !unifiedSearchResultNothingFound.visible && + !unifiedSearchResultsListView.visible && + !UserModel.currentUser.unifiedSearchResultsListModel.errorString && + UserModel.currentUser.unifiedSearchResultsListModel.searchTerm + + sourceComponent: UnifiedSearchResultItemSkeletonContainer { + anchors.fill: parent + spacing: unifiedSearchResultsListView.spacing + animationRectangleWidth: trayWindow.width + } + } + + ScrollView { + id: controlRoot + contentWidth: availableWidth + + ScrollBar.horizontal.policy: ScrollBar.AlwaysOff + + data: WheelHandler { + target: controlRoot.contentItem + } + visible: unifiedSearchResultsListView.count > 0 + + anchors.top: trayWindowUnifiedSearchInputContainer.bottom + anchors.left: trayWindowMainItem.left + anchors.right: trayWindowMainItem.right + anchors.bottom: trayWindowMainItem.bottom + + ListView { + id: unifiedSearchResultsListView + spacing: 4 + clip: true + + keyNavigationEnabled: true + + reuseItems: true + + Accessible.role: Accessible.List + Accessible.name: qsTr("Unified search results list") + + model: UserModel.currentUser.unifiedSearchResultsListModel + + delegate: UnifiedSearchResultListItem { + width: unifiedSearchResultsListView.width + isSearchInProgress: unifiedSearchResultsListView.model.isSearchInProgress + currentFetchMoreInProgressProviderId: unifiedSearchResultsListView.model.currentFetchMoreInProgressProviderId + fetchMoreTriggerClicked: unifiedSearchResultsListView.model.fetchMoreTriggerClicked + resultClicked: unifiedSearchResultsListView.model.resultClicked + ListView.onPooled: isPooled = true + ListView.onReused: isPooled = false + } + + section.property: "providerName" + section.criteria: ViewSection.FullString + section.delegate: UnifiedSearchResultSectionItem { + width: unifiedSearchResultsListView.width + } + } + } + + SyncStatus { + id: syncStatus + + visible: !trayWindowMainItem.isUnifiedSearchActive + + anchors.top: trayWindowUnifiedSearchInputContainer.bottom + anchors.left: trayWindowMainItem.left + anchors.right: trayWindowMainItem.right + } + + Loader { + id: newActivitiesButtonLoader + + anchors.top: activityList.top + anchors.topMargin: 5 + anchors.horizontalCenter: activityList.horizontalCenter + + width: Style.newActivitiesButtonWidth + height: Style.newActivitiesButtonHeight + + z: 1 + + active: false + + sourceComponent: CustomButton { + id: newActivitiesButton + hoverEnabled: true + padding: Style.smallSpacing + + textColor: Style.currentUserHeaderTextColor + textColorHovered: Style.currentUserHeaderTextColor + bgNormalColor: Qt.lighter(bgHoverColor, 1.25) + bgHoverColor: Style.currentUserHeaderColor + bgNormalOpacity: Style.newActivitiesBgNormalOpacity + bgHoverOpacity: Style.newActivitiesBgHoverOpacity + + anchors.fill: parent + + text: qsTr("New activities") + + icon.source: "image://svgimage-custom-color/expand-less-black.svg" + "/" + Style.currentUserHeaderTextColor + icon.width: Style.activityLabelBaseWidth + icon.height: Style.activityLabelBaseWidth + + onClicked: { + activityList.scrollToTop(); + newActivitiesButtonLoader.active = false + } + + Timer { + id: newActivitiesButtonDisappearTimer + interval: Style.newActivityButtonDisappearTimeout + running: newActivitiesButtonLoader.active && !newActivitiesButton.hovered + repeat: false + onTriggered: fadeoutActivitiesButtonDisappear.running = true + } + + OpacityAnimator { + id: fadeoutActivitiesButtonDisappear + target: newActivitiesButton; + from: 1; + to: 0; + duration: Style.newActivityButtonDisappearFadeTimeout + loops: 1 + running: false + onFinished: newActivitiesButtonLoader.active = false + } + } + } + + ActivityList { + id: activityList + visible: !trayWindowMainItem.isUnifiedSearchActive + anchors.top: syncStatus.bottom + anchors.left: trayWindowMainItem.left + anchors.right: trayWindowMainItem.right + anchors.bottom: trayWindowMainItem.bottom + + activeFocusOnTab: true + model: activityModel + onOpenFile: Qt.openUrlExternally(filePath); + onActivityItemClicked: { + model.slotTriggerDefaultAction(index) + } + Connections { + target: activityModel + onInteractiveActivityReceived: { + if (!activityList.atYBeginning) { + newActivitiesButtonLoader.active = true; + } + } + } + } + } // Item trayWindowMainItem +} diff --git a/src/gui/tray/activitylistmodel.cpp b/src/gui/tray/activitylistmodel.cpp index a5e7be3de78c4..eb502a9a15b19 100644 --- a/src/gui/tray/activitylistmodel.cpp +++ b/src/gui/tray/activitylistmodel.cpp @@ -26,6 +26,8 @@ #include "activitydata.h" #include "systray.h" +#include "ionostheme.h" + #include #include #include @@ -225,17 +227,19 @@ QVariant ActivityListModel::data(const QModelIndex &index, int role) const }; const auto generateIconPath = [&]() { - auto colorIconPath = QStringLiteral("image://svgimage-custom-color/%1"); + auto colorIconPath = QStringLiteral("qrc:///client/theme/ses/"); if (a._type == Activity::NotificationType && !a._talkNotificationData.userAvatar.isEmpty()) { return QStringLiteral("image://svgimage-custom-color/talk-bordered.svg"); } else if (a._type == Activity::SyncResultType) { - return colorIconPath.arg("state-error.svg"); + colorIconPath.append("ses-snackBarErrorIcon.svg"); + return colorIconPath; } else if (a._type == Activity::SyncFileItemType) { if (a._syncFileItemStatus == SyncFileItem::NormalError || a._syncFileItemStatus == SyncFileItem::FatalError || a._syncFileItemStatus == SyncFileItem::DetailError || a._syncFileItemStatus == SyncFileItem::BlacklistedError) { - return colorIconPath.arg("state-error.svg"); + colorIconPath.append("ses-snackBarErrorIcon.svg"); + return colorIconPath; } else if (a._syncFileItemStatus == SyncFileItem::SoftError || a._syncFileItemStatus == SyncFileItem::Conflict || a._syncFileItemStatus == SyncFileItem::Restoration @@ -243,17 +247,19 @@ QVariant ActivityListModel::data(const QModelIndex &index, int role) const || a._syncFileItemStatus == SyncFileItem::FileNameInvalid || a._syncFileItemStatus == SyncFileItem::FileNameInvalidOnServer || a._syncFileItemStatus == SyncFileItem::FileNameClash) { - return colorIconPath.arg("state-warning.svg"); + colorIconPath.append("ses-warning.svg"); + return colorIconPath; } else if (a._syncFileItemStatus == SyncFileItem::FileIgnored) { - return colorIconPath.arg("state-info.svg"); + colorIconPath.append("ses-info.svg"); + return colorIconPath; } else { // File sync successful if (a._fileAction == "file_created") { - return a._previews.empty() ? colorIconPath.arg("add.svg") : colorIconPath.arg("add-bordered.svg"); + return IonosTheme::plusIcon(); } else if (a._fileAction == "file_deleted") { - return a._previews.empty() ? colorIconPath.arg("delete.svg") : colorIconPath.arg("delete-bordered.svg"); + return IonosTheme::deleteIcon(); } else { - return a._previews.empty() ? colorIconPath.arg("change.svg") : colorIconPath.arg("change-bordered.svg"); + return IonosTheme::refreshIcon(); } } } else { diff --git a/src/gui/tray/asyncimageresponse.h b/src/gui/tray/asyncimageresponse.h index 9d2d60003f19d..e6176618270fb 100644 --- a/src/gui/tray/asyncimageresponse.h +++ b/src/gui/tray/asyncimageresponse.h @@ -16,7 +16,7 @@ #include #include -#include +#include "sesFileIconProvider.h" class AsyncImageResponse : public QQuickImageResponse { @@ -35,6 +35,6 @@ private slots: QStringList _imagePaths; QSize _requestedImageSize; QColor _svgRecolor; - QFileIconProvider _fileIconProvider; + SesFileIconProvider _fileIconProvider; int _index = 0; }; diff --git a/src/gui/tray/usermodel.cpp b/src/gui/tray/usermodel.cpp index 5316528c76432..d367825534289 100644 --- a/src/gui/tray/usermodel.cpp +++ b/src/gui/tray/usermodel.cpp @@ -18,6 +18,8 @@ #include "tray/unifiedsearchresultslistmodel.h" #include "tray/talkreply.h" #include "userstatusconnector.h" +#include "thumbnailjob.h" +#include "buttonstyle.h" #include #include @@ -25,6 +27,10 @@ #include #include #include +#include +#include +#include +#include // time span in milliseconds which has to be between two // refreshes of the notifications @@ -1484,15 +1490,18 @@ void UserModel::removeAccount(const int id) } QMessageBox messageBox(QMessageBox::Question, - tr("Confirm Account Removal"), + tr("Confirm Account Removal"), tr("

Do you really want to remove the connection to the account %1?

" "

Note: This will not delete any files.

") - .arg(_users[id]->name()), - QMessageBox::NoButton); - const auto * const yesButton = messageBox.addButton(tr("Remove connection"), QMessageBox::YesRole); + .arg(_users[id]->name())); + messageBox.addButton(tr("Cancel"), QMessageBox::NoRole); + QPushButton *yesButton = messageBox.addButton(tr("Remove connection"), QMessageBox::YesRole); + + styleMessageBox(messageBox, yesButton); messageBox.exec(); + if (messageBox.clickedButton() != yesButton) { return; } @@ -1641,6 +1650,38 @@ int UserModel::findUserIdForAccount(AccountState *account) const const auto id = std::distance(std::cbegin(_users), it); return id; } + +void UserModel::styleMessageBox(QMessageBox &messageBox, QPushButton *yesButton){ + + messageBox.setStyleSheet(QStringLiteral("QMessageBox { background-color: %1; } QMessageBox QLabel { %2 } ").arg( + IonosTheme::dialogBackgroundColor(), + IonosTheme::fontConfigurationCss( + IonosTheme::settingsFont(), + IonosTheme::settingsTextSize(), + IonosTheme::settingsTextWeight(), + IonosTheme::titleColor() + ) + ) + ); + + messageBox.setIconPixmap(QPixmap(IonosTheme::questionCircleIcon())); + + yesButton->setProperty("buttonStyle", QVariant::fromValue(OCC::ButtonStyleName::Primary)); + + QDialogButtonBox *buttonBox = messageBox.findChild(); + buttonBox->setLayoutDirection(Qt::RightToLeft); + buttonBox->setSizePolicy(QSizePolicy::Maximum, QSizePolicy::Maximum); + + QHBoxLayout *buttonBoxLayout = messageBox.findChild(); + buttonBoxLayout->setSpacing(8); +#ifdef Q_OS_MACOS + buttonBoxLayout->setSpacing(24); +#endif + + QLabel *label = messageBox.findChild("qt_msgbox_label"); + label->setMinimumSize(529, 49); + label->setSizePolicy(QSizePolicy::Maximum, QSizePolicy::Maximum); +} /*-------------------------------------------------------------------------------------*/ class ImageResponse : public QQuickImageResponse diff --git a/src/gui/tray/usermodel.h b/src/gui/tray/usermodel.h index e4e40e1671e96..ccdf93f970e99 100644 --- a/src/gui/tray/usermodel.h +++ b/src/gui/tray/usermodel.h @@ -7,6 +7,7 @@ #include #include #include +#include #include "accountfwd.h" #include "accountmanager.h" @@ -278,6 +279,7 @@ public slots: bool _init = true; void buildUserList(); + void styleMessageBox(QMessageBox &messageBox, QPushButton *yesButton); }; class ImageProvider : public QQuickAsyncImageProvider From a065889d064d0d1e5a99be6fed6aa828a0cf1660 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Christopher=20H=C3=A4tty?= Date: Wed, 15 Jan 2025 08:40:31 +0100 Subject: [PATCH 009/371] Fixed Tray by adjusting import --- .../Services/ClientCommunicationService.swift | 2 +- .../Services/FPUIExtensionService.swift | 2 +- .../DocumentActionViewController.swift | 6 +-- .../FileProviderUIExt/Info.plist | 6 +-- src/gui/ConflictDelegate.qml | 2 +- src/gui/EmojiPicker.qml | 2 +- src/gui/ResolveConflictsDialog.qml | 2 +- src/gui/SesComponents/SesTrayHeader.qml | 2 +- src/gui/UserStatusSelector.qml | 2 +- src/gui/UserStatusSelectorPage.qml | 2 +- src/gui/filedetails/FileActivityView.qml | 2 +- src/gui/filedetails/FileDetailsPage.qml | 2 +- src/gui/filedetails/FileDetailsView.qml | 2 +- src/gui/filedetails/FileDetailsWindow.qml | 2 +- src/gui/filedetails/NCInputDateField.qml | 2 +- src/gui/filedetails/NCInputTextArea.qml | 2 +- src/gui/filedetails/NCInputTextField.qml | 2 +- src/gui/filedetails/NCTabButton.qml | 2 +- src/gui/filedetails/ShareDelegate.qml | 2 +- src/gui/filedetails/ShareDetailsPage.qml | 2 +- src/gui/filedetails/ShareView.qml | 2 +- src/gui/filedetails/ShareeDelegate.qml | 2 +- src/gui/filedetails/ShareeSearchField.qml | 2 +- src/gui/macOS/fileproviderxpc_mac_utils.mm | 2 +- .../macOS/ui/FileProviderEvictionDialog.qml | 2 +- .../FileProviderFastEnumerationSettings.qml | 2 +- src/gui/macOS/ui/FileProviderFileDelegate.qml | 2 +- src/gui/macOS/ui/FileProviderSettings.qml | 2 +- src/gui/macOS/ui/FileProviderStorageInfo.qml | 2 +- src/gui/macOS/ui/FileProviderSyncStatus.qml | 2 +- src/gui/owncloudgui.cpp | 38 +++++++++---------- src/gui/tray/AccountMenuItem.qml | 2 +- src/gui/tray/CallNotificationDialog.qml | 2 +- src/gui/tray/CurrentAccountHeaderButton.qml | 2 +- src/gui/tray/EditFileLocallyLoadingDialog.qml | 2 +- src/gui/tray/MainWindow.qml | 2 +- src/gui/tray/SyncStatus.qml | 2 +- src/gui/tray/TrayWindowAccountMenu.qml | 2 +- src/gui/tray/TrayWindowHeader.qml | 2 +- src/gui/tray/TrayWindowHeaderBar.qml | 2 +- theme/Style/Style.qml | 2 +- 41 files changed, 63 insertions(+), 63 deletions(-) diff --git a/shell_integration/MacOSX/NextcloudIntegration/FileProviderExt/Services/ClientCommunicationService.swift b/shell_integration/MacOSX/NextcloudIntegration/FileProviderExt/Services/ClientCommunicationService.swift index 687c08ca9b01d..d04dd3a8d220e 100644 --- a/shell_integration/MacOSX/NextcloudIntegration/FileProviderExt/Services/ClientCommunicationService.swift +++ b/shell_integration/MacOSX/NextcloudIntegration/FileProviderExt/Services/ClientCommunicationService.swift @@ -18,7 +18,7 @@ import OSLog class ClientCommunicationService: NSObject, NSFileProviderServiceSource, NSXPCListenerDelegate, ClientCommunicationProtocol { let listener = NSXPCListener.anonymous() - let serviceName = NSFileProviderServiceName("com.nextcloud.desktopclient.ClientCommunicationService") + let serviceName = NSFileProviderServiceName("com.ionos.hidrivenext.desktopclient.ClientCommunicationService") let fpExtension: FileProviderExtension init(fpExtension: FileProviderExtension) { diff --git a/shell_integration/MacOSX/NextcloudIntegration/FileProviderExt/Services/FPUIExtensionService.swift b/shell_integration/MacOSX/NextcloudIntegration/FileProviderExt/Services/FPUIExtensionService.swift index a572942a88d67..5d67a7e919b08 100644 --- a/shell_integration/MacOSX/NextcloudIntegration/FileProviderExt/Services/FPUIExtensionService.swift +++ b/shell_integration/MacOSX/NextcloudIntegration/FileProviderExt/Services/FPUIExtensionService.swift @@ -9,7 +9,7 @@ import FileProvider import NextcloudKit let fpUiExtensionServiceName = NSFileProviderServiceName( - "com.nextcloud.desktopclient.FPUIExtensionService" + "com.ionos.hidrivenext.desktopclient.FPUIExtensionService" ) @objc protocol FPUIExtensionService { diff --git a/shell_integration/MacOSX/NextcloudIntegration/FileProviderUIExt/DocumentActionViewController.swift b/shell_integration/MacOSX/NextcloudIntegration/FileProviderUIExt/DocumentActionViewController.swift index dfff3bf34ae7a..cacc61ccc9d2a 100644 --- a/shell_integration/MacOSX/NextcloudIntegration/FileProviderUIExt/DocumentActionViewController.swift +++ b/shell_integration/MacOSX/NextcloudIntegration/FileProviderUIExt/DocumentActionViewController.swift @@ -37,11 +37,11 @@ class DocumentActionViewController: FPUIActionExtensionViewController { Logger.actionViewController.info("Preparing action: \(actionIdentifier, privacy: .public)") switch (actionIdentifier) { - case "com.nextcloud.desktopclient.FileProviderUIExt.ShareAction": + case "com.ionos.hidrivenext.desktopclient.FileProviderUIExt.ShareAction": prepare(childViewController: ShareViewController(itemIdentifiers)) - case "com.nextcloud.desktopclient.FileProviderUIExt.LockFileAction": + case "com.ionos.hidrivenext.desktopclient.FileProviderUIExt.LockFileAction": prepare(childViewController: LockViewController(itemIdentifiers, locking: true)) - case "com.nextcloud.desktopclient.FileProviderUIExt.UnlockFileAction": + case "com.ionos.hidrivenext.desktopclient.FileProviderUIExt.UnlockFileAction": prepare(childViewController: LockViewController(itemIdentifiers, locking: false)) default: return diff --git a/shell_integration/MacOSX/NextcloudIntegration/FileProviderUIExt/Info.plist b/shell_integration/MacOSX/NextcloudIntegration/FileProviderUIExt/Info.plist index 31930b7627abc..eb627d452692a 100644 --- a/shell_integration/MacOSX/NextcloudIntegration/FileProviderUIExt/Info.plist +++ b/shell_integration/MacOSX/NextcloudIntegration/FileProviderUIExt/Info.plist @@ -14,7 +14,7 @@ NSExtensionFileProviderActionIdentifier - com.nextcloud.desktopclient.FileProviderUIExt.UnlockFileAction + com.ionos.hidrivenext.desktopclient.FileProviderUIExt.UnlockFileAction NSExtensionFileProviderActionName Unlock file NSExtensionFileProviderActionActivationRule @@ -26,13 +26,13 @@ NSExtensionFileProviderActionName Lock file NSExtensionFileProviderActionIdentifier - com.nextcloud.desktopclient.FileProviderUIExt.LockFileAction + com.ionos.hidrivenext.desktopclient.FileProviderUIExt.LockFileAction NSExtensionFileProviderActionActivationRule TRUEPREDICATE NSExtensionFileProviderActionIdentifier - com.nextcloud.desktopclient.FileProviderUIExt.ShareAction + com.ionos.hidrivenext.desktopclient.FileProviderUIExt.ShareAction NSExtensionFileProviderActionName Share options diff --git a/src/gui/ConflictDelegate.qml b/src/gui/ConflictDelegate.qml index 07ebea17836c5..b9aeee4b88ce1 100644 --- a/src/gui/ConflictDelegate.qml +++ b/src/gui/ConflictDelegate.qml @@ -17,7 +17,7 @@ import QtQuick import QtQuick.Layouts import QtQuick.Controls import Style -import com.nextcloud.desktopclient +import com.ionos.hidrivenext.desktopclient import "./tray" Item { diff --git a/src/gui/EmojiPicker.qml b/src/gui/EmojiPicker.qml index 486965ebd79f7..8741b2bc6f6ee 100644 --- a/src/gui/EmojiPicker.qml +++ b/src/gui/EmojiPicker.qml @@ -17,7 +17,7 @@ import QtQuick.Controls import QtQuick.Layouts import Style -import com.nextcloud.desktopclient 1.0 as NC +import com.ionos.hidrivenext.desktopclient as NC import "./tray" ColumnLayout { diff --git a/src/gui/ResolveConflictsDialog.qml b/src/gui/ResolveConflictsDialog.qml index 529181d6c1b32..c091a346973d5 100644 --- a/src/gui/ResolveConflictsDialog.qml +++ b/src/gui/ResolveConflictsDialog.qml @@ -19,7 +19,7 @@ import QtQuick.Layouts import QtQuick.Controls import QtQml.Models import Style -import com.nextcloud.desktopclient +import com.ionos.hidrivenext.desktopclient import "./tray" ApplicationWindow { diff --git a/src/gui/SesComponents/SesTrayHeader.qml b/src/gui/SesComponents/SesTrayHeader.qml index 3f4dd42c70894..2d3e11182d3db 100644 --- a/src/gui/SesComponents/SesTrayHeader.qml +++ b/src/gui/SesComponents/SesTrayHeader.qml @@ -12,7 +12,7 @@ import "../tray/" // Custom qml modules are in /theme (and included by resources.qrc) import Style 1.0 -import com.ionos.hidrivenext.desktopclient 1.0 +import com.ionos.hidrivenext.desktopclient Rectangle { diff --git a/src/gui/UserStatusSelector.qml b/src/gui/UserStatusSelector.qml index 736dbe5a86a05..88dd179131b80 100644 --- a/src/gui/UserStatusSelector.qml +++ b/src/gui/UserStatusSelector.qml @@ -18,7 +18,7 @@ import QtQuick.Layouts import QtQuick.Controls import QtQuick.Window -import com.nextcloud.desktopclient as NC +import com.ionos.hidrivenext.desktopclient as NC import Style import "./tray" diff --git a/src/gui/UserStatusSelectorPage.qml b/src/gui/UserStatusSelectorPage.qml index a60423f9a77f5..fa545d6c6abb0 100644 --- a/src/gui/UserStatusSelectorPage.qml +++ b/src/gui/UserStatusSelectorPage.qml @@ -16,7 +16,7 @@ import QtQuick import QtQuick.Controls import Style -import com.nextcloud.desktopclient as NC +import com.ionos.hidrivenext.desktopclient as NC Page { id: page diff --git a/src/gui/filedetails/FileActivityView.qml b/src/gui/filedetails/FileActivityView.qml index 904bee76240be..3341736014cc6 100644 --- a/src/gui/filedetails/FileActivityView.qml +++ b/src/gui/filedetails/FileActivityView.qml @@ -16,7 +16,7 @@ import QtQuick import QtQuick.Layouts import QtQuick.Controls -import com.nextcloud.desktopclient +import com.ionos.hidrivenext.desktopclient import Style import "../tray" diff --git a/src/gui/filedetails/FileDetailsPage.qml b/src/gui/filedetails/FileDetailsPage.qml index 5b281720e952c..e7de4a4253527 100644 --- a/src/gui/filedetails/FileDetailsPage.qml +++ b/src/gui/filedetails/FileDetailsPage.qml @@ -16,7 +16,7 @@ import QtQuick import QtQuick.Layouts import QtQuick.Controls -import com.nextcloud.desktopclient +import com.ionos.hidrivenext.desktopclient import Style import "../tray" diff --git a/src/gui/filedetails/FileDetailsView.qml b/src/gui/filedetails/FileDetailsView.qml index 991da7d2b91c1..6ce265f69e4c3 100644 --- a/src/gui/filedetails/FileDetailsView.qml +++ b/src/gui/filedetails/FileDetailsView.qml @@ -16,7 +16,7 @@ import QtQuick import QtQuick.Layouts import QtQuick.Controls -import com.nextcloud.desktopclient +import com.ionos.hidrivenext.desktopclient import Style StackView { diff --git a/src/gui/filedetails/FileDetailsWindow.qml b/src/gui/filedetails/FileDetailsWindow.qml index f7f5eee41e420..f233149af1e2a 100644 --- a/src/gui/filedetails/FileDetailsWindow.qml +++ b/src/gui/filedetails/FileDetailsWindow.qml @@ -17,7 +17,7 @@ import QtQuick.Window import QtQuick.Layouts import QtQuick.Controls -import com.nextcloud.desktopclient +import com.ionos.hidrivenext.desktopclient import Style ApplicationWindow { diff --git a/src/gui/filedetails/NCInputDateField.qml b/src/gui/filedetails/NCInputDateField.qml index b39eed3273065..3dd83175cd2ac 100644 --- a/src/gui/filedetails/NCInputDateField.qml +++ b/src/gui/filedetails/NCInputDateField.qml @@ -14,7 +14,7 @@ import QtQuick import QtQuick.Controls -import com.nextcloud.desktopclient +import com.ionos.hidrivenext.desktopclient NCInputTextField { id: root diff --git a/src/gui/filedetails/NCInputTextArea.qml b/src/gui/filedetails/NCInputTextArea.qml index d3e917ff5113f..743400b05ab4f 100644 --- a/src/gui/filedetails/NCInputTextArea.qml +++ b/src/gui/filedetails/NCInputTextArea.qml @@ -16,7 +16,7 @@ import QtQuick import QtQuick.Controls import QtQuick.Layouts -import com.nextcloud.desktopclient +import com.ionos.hidrivenext.desktopclient import Style TextArea { diff --git a/src/gui/filedetails/NCInputTextField.qml b/src/gui/filedetails/NCInputTextField.qml index be1ad2558bce5..c45c1ea51d5bf 100644 --- a/src/gui/filedetails/NCInputTextField.qml +++ b/src/gui/filedetails/NCInputTextField.qml @@ -16,7 +16,7 @@ import QtQuick import QtQuick.Controls import QtQuick.Layouts -import com.nextcloud.desktopclient +import com.ionos.hidrivenext.desktopclient import Style TextField { diff --git a/src/gui/filedetails/NCTabButton.qml b/src/gui/filedetails/NCTabButton.qml index 48e2fecccabec..ee17cb052a467 100644 --- a/src/gui/filedetails/NCTabButton.qml +++ b/src/gui/filedetails/NCTabButton.qml @@ -17,7 +17,7 @@ import QtQuick.Window import QtQuick.Layouts import QtQuick.Controls -import com.nextcloud.desktopclient +import com.ionos.hidrivenext.desktopclient import Style import "../tray" diff --git a/src/gui/filedetails/ShareDelegate.qml b/src/gui/filedetails/ShareDelegate.qml index d6bb454a94090..73b33ff00dd76 100644 --- a/src/gui/filedetails/ShareDelegate.qml +++ b/src/gui/filedetails/ShareDelegate.qml @@ -18,7 +18,7 @@ import QtQuick.Layouts import QtQuick.Controls import Qt5Compat.GraphicalEffects -import com.nextcloud.desktopclient +import com.ionos.hidrivenext.desktopclient import Style import "../tray" import "../" diff --git a/src/gui/filedetails/ShareDetailsPage.qml b/src/gui/filedetails/ShareDetailsPage.qml index 8035b40d9d195..5b7bf62d02aab 100644 --- a/src/gui/filedetails/ShareDetailsPage.qml +++ b/src/gui/filedetails/ShareDetailsPage.qml @@ -18,7 +18,7 @@ import QtQuick.Layouts import QtQuick.Controls import Qt5Compat.GraphicalEffects -import com.nextcloud.desktopclient +import com.ionos.hidrivenext.desktopclient import Style import "../tray" import "../" diff --git a/src/gui/filedetails/ShareView.qml b/src/gui/filedetails/ShareView.qml index 1b7b9ca7de067..f68529ec5e52b 100644 --- a/src/gui/filedetails/ShareView.qml +++ b/src/gui/filedetails/ShareView.qml @@ -17,7 +17,7 @@ import QtQuick.Window import QtQuick.Layouts import QtQuick.Controls -import com.nextcloud.desktopclient +import com.ionos.hidrivenext.desktopclient import Style import "../tray" import "../" diff --git a/src/gui/filedetails/ShareeDelegate.qml b/src/gui/filedetails/ShareeDelegate.qml index b46b3bb81e78a..03f07b5f826b2 100644 --- a/src/gui/filedetails/ShareeDelegate.qml +++ b/src/gui/filedetails/ShareeDelegate.qml @@ -17,7 +17,7 @@ import QtQuick.Window import QtQuick.Layouts import QtQuick.Controls -import com.nextcloud.desktopclient +import com.ionos.hidrivenext.desktopclient import Style import "../tray" diff --git a/src/gui/filedetails/ShareeSearchField.qml b/src/gui/filedetails/ShareeSearchField.qml index adda7a987ea9d..4fbaceb872f58 100644 --- a/src/gui/filedetails/ShareeSearchField.qml +++ b/src/gui/filedetails/ShareeSearchField.qml @@ -17,7 +17,7 @@ import QtQuick.Window import QtQuick.Layouts import QtQuick.Controls -import com.nextcloud.desktopclient +import com.ionos.hidrivenext.desktopclient import Style import "../tray" diff --git a/src/gui/macOS/fileproviderxpc_mac_utils.mm b/src/gui/macOS/fileproviderxpc_mac_utils.mm index 42aefe9a3047a..0cb24bb1bb17a 100644 --- a/src/gui/macOS/fileproviderxpc_mac_utils.mm +++ b/src/gui/macOS/fileproviderxpc_mac_utils.mm @@ -19,7 +19,7 @@ #include "gui/accountmanager.h" namespace { -const char *const clientCommunicationServiceName = "com.nextcloud.desktopclient.ClientCommunicationService"; +const char *const clientCommunicationServiceName = "com.ionos.hidrivenext.desktopclient.ClientCommunicationService"; NSString *const nsClientCommunicationServiceName = [NSString stringWithUTF8String:clientCommunicationServiceName]; } diff --git a/src/gui/macOS/ui/FileProviderEvictionDialog.qml b/src/gui/macOS/ui/FileProviderEvictionDialog.qml index 5f96557ea910d..f4f2ff581b126 100644 --- a/src/gui/macOS/ui/FileProviderEvictionDialog.qml +++ b/src/gui/macOS/ui/FileProviderEvictionDialog.qml @@ -20,7 +20,7 @@ import Style 1.0 import "../../filedetails" import "../../tray" -import com.nextcloud.desktopclient 1.0 +import com.ionos.hidrivenext.desktopclient ApplicationWindow { id: root diff --git a/src/gui/macOS/ui/FileProviderFastEnumerationSettings.qml b/src/gui/macOS/ui/FileProviderFastEnumerationSettings.qml index ce94746298d5d..46ec374eed544 100644 --- a/src/gui/macOS/ui/FileProviderFastEnumerationSettings.qml +++ b/src/gui/macOS/ui/FileProviderFastEnumerationSettings.qml @@ -20,7 +20,7 @@ import Style 1.0 import "../../filedetails" import "../../tray" -import com.nextcloud.desktopclient 1.0 +import com.ionos.hidrivenext.desktopclient Column { id: root diff --git a/src/gui/macOS/ui/FileProviderFileDelegate.qml b/src/gui/macOS/ui/FileProviderFileDelegate.qml index a26d980262a2e..182135c89efa5 100644 --- a/src/gui/macOS/ui/FileProviderFileDelegate.qml +++ b/src/gui/macOS/ui/FileProviderFileDelegate.qml @@ -20,7 +20,7 @@ import Style 1.0 import "../../filedetails" import "../../tray" -import com.nextcloud.desktopclient 1.0 +import com.ionos.hidrivenext.desktopclient Item { id: root diff --git a/src/gui/macOS/ui/FileProviderSettings.qml b/src/gui/macOS/ui/FileProviderSettings.qml index 98a437cd5add7..ea338cec9786f 100644 --- a/src/gui/macOS/ui/FileProviderSettings.qml +++ b/src/gui/macOS/ui/FileProviderSettings.qml @@ -20,7 +20,7 @@ import Style 1.0 import "../../filedetails" import "../../tray" -import com.nextcloud.desktopclient 1.0 +import com.ionos.hidrivenext.desktopclient Page { id: root diff --git a/src/gui/macOS/ui/FileProviderStorageInfo.qml b/src/gui/macOS/ui/FileProviderStorageInfo.qml index d6b0850e1762b..fcb762f3e6119 100644 --- a/src/gui/macOS/ui/FileProviderStorageInfo.qml +++ b/src/gui/macOS/ui/FileProviderStorageInfo.qml @@ -20,7 +20,7 @@ import Style 1.0 import "../../filedetails" import "../../tray" -import com.nextcloud.desktopclient 1.0 +import com.ionos.hidrivenext.desktopclient GridLayout { id: root diff --git a/src/gui/macOS/ui/FileProviderSyncStatus.qml b/src/gui/macOS/ui/FileProviderSyncStatus.qml index 61db9ae98c314..f9a185bdb1d50 100644 --- a/src/gui/macOS/ui/FileProviderSyncStatus.qml +++ b/src/gui/macOS/ui/FileProviderSyncStatus.qml @@ -20,7 +20,7 @@ import Style 1.0 import "../../filedetails" import "../../tray" -import com.nextcloud.desktopclient 1.0 +import com.ionos.hidrivenext.desktopclient GridLayout { id: root diff --git a/src/gui/owncloudgui.cpp b/src/gui/owncloudgui.cpp index e387275968cad..b147f136b9474 100644 --- a/src/gui/owncloudgui.cpp +++ b/src/gui/owncloudgui.cpp @@ -128,20 +128,20 @@ ownCloudGui::ownCloudGui(Application *parent) connect(Logger::instance(), &Logger::guiLog, this, &ownCloudGui::slotShowTrayMessage); connect(Logger::instance(), &Logger::guiMessage, this, &ownCloudGui::slotShowGuiMessage); - qmlRegisterType("com.nextcloud.desktopclient", 1, 0, "SyncStatusSummary"); - qmlRegisterType("com.nextcloud.desktopclient", 1, 0, "EmojiModel"); - qmlRegisterType("com.nextcloud.desktopclient", 1, 0, "UserStatusSelectorModel"); - qmlRegisterType("com.nextcloud.desktopclient", 1, 0, "ActivityListModel"); - qmlRegisterType("com.nextcloud.desktopclient", 1, 0, "FileActivityListModel"); - qmlRegisterType("com.nextcloud.desktopclient", 1, 0, "SortedActivityListModel"); - qmlRegisterType("com.nextcloud.desktopclient", 1, 0, "WheelHandler"); - qmlRegisterType("com.nextcloud.desktopclient", 1, 0, "CallStateChecker"); - qmlRegisterType("com.nextcloud.desktopclient", 1, 0, "DateFieldBackend"); - qmlRegisterType("com.nextcloud.desktopclient", 1, 0, "FileDetails"); - qmlRegisterType("com.nextcloud.desktopclient", 1, 0, "ShareModel"); - qmlRegisterType("com.nextcloud.desktopclient", 1, 0, "ShareeModel"); - qmlRegisterType("com.nextcloud.desktopclient", 1, 0, "SortedShareModel"); - qmlRegisterType("com.nextcloud.desktopclient", 1, 0, "SyncConflictsModel"); + qmlRegisterType("com.ionos.hidrivenext.desktopclient", 1, 0, "SyncStatusSummary"); + qmlRegisterType("com.ionos.hidrivenext.desktopclient", 1, 0, "EmojiModel"); + qmlRegisterType("com.ionos.hidrivenext.desktopclient", 1, 0, "UserStatusSelectorModel"); + qmlRegisterType("com.ionos.hidrivenext.desktopclient", 1, 0, "ActivityListModel"); + qmlRegisterType("com.ionos.hidrivenext.desktopclient", 1, 0, "FileActivityListModel"); + qmlRegisterType("com.ionos.hidrivenext.desktopclient", 1, 0, "SortedActivityListModel"); + qmlRegisterType("com.ionos.hidrivenext.desktopclient", 1, 0, "WheelHandler"); + qmlRegisterType("com.ionos.hidrivenext.desktopclient", 1, 0, "CallStateChecker"); + qmlRegisterType("com.ionos.hidrivenext.desktopclient", 1, 0, "DateFieldBackend"); + qmlRegisterType("com.ionos.hidrivenext.desktopclient", 1, 0, "FileDetails"); + qmlRegisterType("com.ionos.hidrivenext.desktopclient", 1, 0, "ShareModel"); + qmlRegisterType("com.ionos.hidrivenext.desktopclient", 1, 0, "ShareeModel"); + qmlRegisterType("com.ionos.hidrivenext.desktopclient", 1, 0, "SortedShareModel"); + qmlRegisterType("com.ionos.hidrivenext.desktopclient", 1, 0, "SyncConflictsModel"); qmlRegisterUncreatableType("com.nextcloud.desktopclient", 1, 0, "QAbstractItemModel", "QAbstractItemModel"); qmlRegisterUncreatableType("com.nextcloud.desktopclient", 1, 0, "Activity", "Activity"); @@ -159,13 +159,13 @@ ownCloudGui::ownCloudGui(Application *parent) qRegisterMetaType("Sharee"); qRegisterMetaType("ActivityList"); - qmlRegisterSingletonInstance("com.nextcloud.desktopclient", 1, 0, "UserModel", UserModel::instance()); - qmlRegisterSingletonInstance("com.nextcloud.desktopclient", 1, 0, "UserAppsModel", UserAppsModel::instance()); - qmlRegisterSingletonInstance("com.nextcloud.desktopclient", 1, 0, "Theme", Theme::instance()); - qmlRegisterSingletonInstance("com.nextcloud.desktopclient", 1, 0, "Systray", Systray::instance()); + qmlRegisterSingletonInstance("com.ionos.hidrivenext.desktopclient", 1, 0, "UserModel", UserModel::instance()); + qmlRegisterSingletonInstance("com.ionos.hidrivenext.desktopclient", 1, 0, "UserAppsModel", UserAppsModel::instance()); + qmlRegisterSingletonInstance("com.ionos.hidrivenext.desktopclient", 1, 0, "Theme", Theme::instance()); + qmlRegisterSingletonInstance("com.ionos.hidrivenext.desktopclient", 1, 0, "Systray", Systray::instance()); #ifdef BUILD_FILE_PROVIDER_MODULE - qmlRegisterSingletonInstance("com.nextcloud.desktopclient", 1, 0, "FileProviderSettingsController", Mac::FileProviderSettingsController::instance()); + qmlRegisterSingletonInstance("com.ionos.hidrivenext.desktopclient", 1, 0, "FileProviderSettingsController", Mac::FileProviderSettingsController::instance()); #endif } diff --git a/src/gui/tray/AccountMenuItem.qml b/src/gui/tray/AccountMenuItem.qml index 0d427221d72a7..9ea01a7a761f1 100644 --- a/src/gui/tray/AccountMenuItem.qml +++ b/src/gui/tray/AccountMenuItem.qml @@ -5,7 +5,7 @@ import QtQuick.Layouts 1.15 // Custom qml modules are in /theme (and included by resources.qrc) import Style 1.0 -import com.ionos.hidrivenext.desktopclient 1.0 +import com.ionos.hidrivenext.desktopclient MenuItem { id: accountMenuItem diff --git a/src/gui/tray/CallNotificationDialog.qml b/src/gui/tray/CallNotificationDialog.qml index 0d5ef11a133a6..a85f3f7900bbc 100644 --- a/src/gui/tray/CallNotificationDialog.qml +++ b/src/gui/tray/CallNotificationDialog.qml @@ -16,11 +16,11 @@ import QtQuick import QtQuick.Window import Style +import com.ionos.hidrivenext.desktopclient import QtQuick.Layouts import QtMultimedia import QtQuick.Controls import Qt5Compat.GraphicalEffects -import com.ionos.hidrivenext.desktopclient ApplicationWindow { id: root diff --git a/src/gui/tray/CurrentAccountHeaderButton.qml b/src/gui/tray/CurrentAccountHeaderButton.qml index 7ea3adb42dd74..417af9b7d6b52 100644 --- a/src/gui/tray/CurrentAccountHeaderButton.qml +++ b/src/gui/tray/CurrentAccountHeaderButton.qml @@ -20,7 +20,7 @@ import "../" import "../filedetails/" import Style -import com.nextcloud.desktopclient +import com.ionos.hidrivenext.desktopclient Button { id: root diff --git a/src/gui/tray/EditFileLocallyLoadingDialog.qml b/src/gui/tray/EditFileLocallyLoadingDialog.qml index 400f19c966921..904694d85ffb1 100644 --- a/src/gui/tray/EditFileLocallyLoadingDialog.qml +++ b/src/gui/tray/EditFileLocallyLoadingDialog.qml @@ -1,9 +1,9 @@ import QtQuick import QtQuick.Window import Style +import com.ionos.hidrivenext.desktopclient import QtQuick.Layouts import QtQuick.Controls -import com.ionos.hidrivenext.desktopclient ApplicationWindow { id: root diff --git a/src/gui/tray/MainWindow.qml b/src/gui/tray/MainWindow.qml index cf13b90be918b..eafca28219361 100644 --- a/src/gui/tray/MainWindow.qml +++ b/src/gui/tray/MainWindow.qml @@ -26,7 +26,7 @@ import "../filedetails/" // Custom qml modules are in /theme (and included by resources.qrc) import Style -import com.nextcloud.desktopclient +import com.ionos.hidrivenext.desktopclient ApplicationWindow { id: trayWindow diff --git a/src/gui/tray/SyncStatus.qml b/src/gui/tray/SyncStatus.qml index e81e655699ca3..1ec1ca162f9e8 100644 --- a/src/gui/tray/SyncStatus.qml +++ b/src/gui/tray/SyncStatus.qml @@ -4,7 +4,7 @@ import QtQuick.Layouts import Style -import com.ionos.hidrivenext.desktopclientas NC +import com.ionos.hidrivenext.desktopclient as NC RowLayout { id: root diff --git a/src/gui/tray/TrayWindowAccountMenu.qml b/src/gui/tray/TrayWindowAccountMenu.qml index 2d7d2367e8747..cefec839c8244 100644 --- a/src/gui/tray/TrayWindowAccountMenu.qml +++ b/src/gui/tray/TrayWindowAccountMenu.qml @@ -11,7 +11,7 @@ import "../filedetails/" // Custom qml modules are in /theme (and included by resources.qrc) import Style 1.0 -import com.ionos.hidrivenext.desktopclient 1.0 +import com.ionos.hidrivenext.desktopclient Button { id: currentAccountButton diff --git a/src/gui/tray/TrayWindowHeader.qml b/src/gui/tray/TrayWindowHeader.qml index 6d783dd8ba136..f45d29a94a2d1 100644 --- a/src/gui/tray/TrayWindowHeader.qml +++ b/src/gui/tray/TrayWindowHeader.qml @@ -20,7 +20,7 @@ import "../" import "../filedetails/" import Style -import com.nextcloud.desktopclient +import com.ionos.hidrivenext.desktopclient Rectangle { id: root diff --git a/src/gui/tray/TrayWindowHeaderBar.qml b/src/gui/tray/TrayWindowHeaderBar.qml index e03af08bc67a6..f21ba6c7392a4 100644 --- a/src/gui/tray/TrayWindowHeaderBar.qml +++ b/src/gui/tray/TrayWindowHeaderBar.qml @@ -11,7 +11,7 @@ import "../filedetails/" // Custom qml modules are in /theme (and included by resources.qrc) import Style 1.0 -import com.ionos.hidrivenext.desktopclient 1.0 +import com.ionos.hidrivenext.desktopclient Rectangle { diff --git a/theme/Style/Style.qml b/theme/Style/Style.qml index 9d5f6f6788dbb..473fe7c1e9252 100644 --- a/theme/Style/Style.qml +++ b/theme/Style/Style.qml @@ -2,7 +2,7 @@ pragma Singleton import QtQuick -import com.ionos.hidrivenext.desktopclient 1.0 +import com.ionos.hidrivenext.desktopclient QtObject { readonly property int pixelSize: fontMetrics.font.pixelSize From 608dc746bb23c29a105c502f77533be1927483e8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Christopher=20H=C3=A4tty?= Date: Thu, 16 Jan 2025 13:03:11 +0100 Subject: [PATCH 010/371] Fixed some merge issues --- resources.qrc | 11 +- src/gui/SesComponents/SesTrayHeader.qml | 9 +- src/gui/tray/ActivityItemActions.qml | 9 +- src/gui/tray/ActivityItemContent.qml | 29 ++--- src/gui/tray/HeaderLogo.qml | 16 ++- src/gui/tray/MainWindow.qml | 150 ++++++++++++++---------- src/gui/tray/SesButtonContents.qml | 8 +- src/gui/tray/SesCustomButton.qml | 23 ++-- src/gui/tray/SyncStatus.qml | 17 +-- src/gui/tray/TrayWindowAccountMenu.qml | 45 ++++--- theme.qrc.in | 1 + theme/Style/Style.qml | 21 ++++ theme/ses/ses-IONOS-logo.svg | 35 ++++++ 13 files changed, 229 insertions(+), 145 deletions(-) create mode 100644 theme/ses/ses-IONOS-logo.svg diff --git a/resources.qrc b/resources.qrc index e41bf9cdb761b..6f69c28663140 100644 --- a/resources.qrc +++ b/resources.qrc @@ -40,8 +40,6 @@ src/gui/tray/UnifiedSearchResultNothingFound.qml src/gui/tray/UnifiedSearchPlaceholderView.qml src/gui/tray/UnifiedSearchResultSectionItem.qml - src/gui/tray/SesCustomButton.qml - src/gui/tray/SesButtonContents.qml src/gui/tray/ActivityItemContextMenu.qml src/gui/tray/ActivityItemActions.qml src/gui/tray/ActivityItemContent.qml @@ -54,15 +52,12 @@ src/gui/tray/NCToolTip.qml src/gui/tray/NCProgressBar.qml src/gui/tray/EnforcedPlainTextLabel.qml - src/gui/tray/TrayWindowHeaderBar.qml - src/gui/tray/TrayWindowAccountMenu.qml - src/gui/tray/HeaderLogo.qml - src/gui/tray/AccountMenuItem.qml theme/Style/Style.qml theme/Style/qmldir src/gui/tray/ListItemLineAndSubline.qml src/gui/tray/TrayFoldersMenuButton.qml src/gui/tray/TrayFolderListItem.qml + src/gui/tray/HeaderLogo.qml src/gui/ResolveConflictsDialog.qml src/gui/ConflictDelegate.qml src/gui/ConflictItemFileInfo.qml @@ -72,5 +67,9 @@ src/gui/macOS/ui/FileProviderSyncStatus.qml src/gui/macOS/ui/FileProviderStorageInfo.qml src/gui/macOS/ui/FileProviderFastEnumerationSettings.qml + src/gui/SesComponents/SesErrorBox.qml + src/gui/SesComponents/SesTrayHeader.qml + src/gui/tray/SesCustomButton.qml + src/gui/tray/SesButtonContents.qml diff --git a/src/gui/SesComponents/SesTrayHeader.qml b/src/gui/SesComponents/SesTrayHeader.qml index 2d3e11182d3db..b7f3425245f0e 100644 --- a/src/gui/SesComponents/SesTrayHeader.qml +++ b/src/gui/SesComponents/SesTrayHeader.qml @@ -1,8 +1,7 @@ -import QtQuick 2.15 -import QtQuick.Window 2.15 -import QtQuick.Controls 2.15 -import QtQuick.Layouts 1.15 -import QtGraphicalEffects 1.15 +import QtQuick +import QtQuick.Window +import QtQuick.Controls +import QtQuick.Layouts import Qt.labs.platform 1.1 as NativeDialogs import "../" diff --git a/src/gui/tray/ActivityItemActions.qml b/src/gui/tray/ActivityItemActions.qml index eb3d997cf7615..ad255cfb705ee 100644 --- a/src/gui/tray/ActivityItemActions.qml +++ b/src/gui/tray/ActivityItemActions.qml @@ -26,7 +26,7 @@ Repeater { model: root.linksForActionButtons - Button { + SesCustomButton { id: activityActionButton property string verb: model.modelData.verb @@ -44,9 +44,10 @@ Repeater { onClicked: isTalkReplyButton ? root.showReplyField() : root.triggerAction(model.index) - textColor: Style.adjustedCurrentUserHeaderColor - textColorHovered: Style.currentUserHeaderTextColor - bgColor: Style.currentUserHeaderColor + textColor: palette.brightText + bgColor: Style.sesActionPressed + bgNormalOpacity: 1.0 + bgHoverOpacity: Style.hoverOpacity visible: verb !== "REPLY" || (verb === "REPLY" && root.talkReplyButtonVisible) } diff --git a/src/gui/tray/ActivityItemContent.qml b/src/gui/tray/ActivityItemContent.qml index 510d17f90276b..0be9914b61839 100644 --- a/src/gui/tray/ActivityItemContent.qml +++ b/src/gui/tray/ActivityItemContent.qml @@ -162,10 +162,10 @@ RowLayout { spacing: Style.extraSmallSpacing Button { - id: fileDetailsButton + id: fileDetailsButton property bool isHovered: fileDetailsButton.hovered || fileDetailsButton.visualFocus property bool isActive: fileDetailsButton.pressed - + Layout.preferredWidth: Style.dismissButtonSize Layout.preferredHeight: Style.dismissButtonSize Layout.alignment: Qt.AlignTop | Qt.AlignRight @@ -173,8 +173,7 @@ RowLayout { width: Style.activityListButtonWidth height: Style.activityListButtonHeight icon.source: "image://svgimage-custom-color/more.svg/" + (isHovered ? Style.sesWhite : Style.sesActionHover) - - icon.source: "image://svgimage-custom-color/more.svg/" + palette.buttonText + icon.width: Style.activityListButtonIconSize icon.height: Style.activityListButtonIconSize @@ -182,17 +181,19 @@ RowLayout { text: qsTr("Open file details") visible: parent.hovered } - background: Rectangle { - anchors.fill: parent - anchors.margins: 1 - color: parent.isActive ? Style.sesActionPressed : parent.isHovered ? Style.sesActionHover : "transparent" - radius: width / 2 - } + background: Rectangle { + anchors.fill: parent + anchors.margins: 1 + color: parent.isActive ? Style.sesActionPressed : parent.isHovered ? Style.sesActionHover : "transparent" + radius: width / 2 + } - display: Button.IconOnly - leftPadding: 0 - rightPadding: 0 + display: Button.IconOnly + leftPadding: 0 + rightPadding: 0 + visible: model.showFileDetails + onClicked: Systray.presentShareViewInTray(model.openablePath) } Button { @@ -260,7 +261,7 @@ RowLayout { wrapMode: Text.Wrap maximumLineCount: 2 font: root.font - color: Style.sesTrayFontColor + color: Style.sesTrayFontColor visible: text !== "" } diff --git a/src/gui/tray/HeaderLogo.qml b/src/gui/tray/HeaderLogo.qml index ee7b9ee008351..54ce6f3b1c56b 100644 --- a/src/gui/tray/HeaderLogo.qml +++ b/src/gui/tray/HeaderLogo.qml @@ -1,16 +1,14 @@ -import QtQuick 2.15 -import QtQuick.Window 2.15 -import QtQuick.Controls 2.15 -import QtQuick.Layouts 1.15 -import QtGraphicalEffects 1.15 -import Qt.labs.platform 1.1 as NativeDialogs +import QtQuick +import QtQuick.Window +import QtQuick.Controls +import QtQuick.Layouts +import Qt.labs.platform as NativeDialogs -import "../" // Custom qml modules are in /theme (and included by resources.qrc) -import Style 1.0 +import Style -import com.ionos.hidrivenext.desktopclient 1.0 +import com.ionos.hidrivenext.desktopclient Rectangle { Image{ diff --git a/src/gui/tray/MainWindow.qml b/src/gui/tray/MainWindow.qml index eafca28219361..cf2e3ef225f69 100644 --- a/src/gui/tray/MainWindow.qml +++ b/src/gui/tray/MainWindow.qml @@ -21,7 +21,9 @@ import Qt5Compat.GraphicalEffects import Qt.labs.platform as NativeDialogs import "../" +import "../tray" import "../filedetails/" +import "../SesComponents/" // Custom qml modules are in /theme (and included by resources.qrc) import Style @@ -36,10 +38,34 @@ ApplicationWindow { title: Systray.windowTitle // If the main dialog is displayed as a regular window we want it to be quadratic - width: Systray.useNormalWindow ? Style.trayWindowHeight : Style.trayWindowWidth + width: Systray.useNormalWindow ? Style.trayWindowHeight : Style.sesTrayWindowWidth height: Style.trayWindowHeight + color: "transparent" flags: Systray.useNormalWindow ? Qt.Window : Qt.Dialog | Qt.FramelessWindowHint - color: "transparent" + + font.family: Style.sesOpenSansRegular + font.pixelSize: Style.sesFontPixelSize + font.weight: Style.sesFontBoldWeight + + // TODO: Rather than setting all these palette colours manually, + // create a custom style and do it for all components globally + // palette { + // text: Style.ncTextColor + // windowText: Style.ncTextColor + // buttonText: Style.ncTextColor + // brightText: Style.ncTextBrightColor + // highlight: Style.lightHover + // highlightedText: Style.ncTextColor + // light: Style.lightHover + // midlight: Style.ncSecondaryTextColor + // mid: Style.darkerHover + // dark: Style.menuBorder + // button: Style.buttonBackgroundColor + // window: Style.backgroundColor + // base: Style.backgroundColor + // toolTipBase: Style.backgroundColor + // toolTipText: Style.ncTextColor + // } readonly property int maxMenuHeight: Style.trayWindowHeight - Style.trayWindowHeaderHeight - 2 * Style.trayWindowBorderWidth @@ -55,16 +81,10 @@ ApplicationWindow { onClosing: Systray.isOpen = false - onVisibleChanged: { - // HACK: reload account Instantiator immediately by restting it - could be done better I guess - // see also id:trayWindowHeader.currentAccountHeaderButton.accountMenu below - trayWindowHeader.currentAccountHeaderButton.userLineInstantiator.active = false; - trayWindowHeader.currentAccountHeaderButton.userLineInstantiator.active = true; - syncStatus.model.load(); - } + onVisibleChanged: syncStatus.model.load() background: Rectangle { - radius: Systray.useNormalWindow ? 0.0 : Style.trayWindowRadius + radius: 0.0 border.width: Style.trayWindowBorderWidth border.color: palette.dark color: palette.window @@ -126,7 +146,7 @@ ApplicationWindow { maskSource: Rectangle { width: trayWindow.width height: trayWindow.height - radius: Systray.useNormalWindow ? 0.0 : Style.trayWindowRadius + radius: 0.0 } } @@ -180,7 +200,7 @@ ApplicationWindow { radius: Systray.useNormalWindow ? 0.0 : Style.trayWindowRadius border.width: Style.trayWindowBorderWidth border.color: palette.dark - color: Style.colorWithoutTransparency(palette.base) + color: palette.window } property var folderAccountState: ({}) @@ -215,7 +235,7 @@ ApplicationWindow { height: parent.height backgroundsVisible: false - accentColor: Style.accentColor + accentColor: Style.currentUserHeaderColor accountState: fileDetailsDrawer.folderAccountState localPath: fileDetailsDrawer.fileLocalPath showCloseButton: true @@ -248,14 +268,28 @@ ApplicationWindow { anchors.fill: parent onClicked: forceActiveFocus() } - - TrayWindowHeader { - id: trayWindowHeader - - anchors.top: parent.top + + HeaderLogo { + id: trayWindowLogoHeaderBackground + height: Style.sesHeaderLogoHeigth + width: parent.width + } + + SesTrayHeader { + id: trayWindowHeaderBackground + anchors.left: trayWindowLogoHeaderBackground.left + anchors.right: trayWindowLogoHeaderBackground.right + anchors.top: trayWindowLogoHeaderBackground.bottom + anchors.topMargin: Style.sesHeaderTopMargin + } + + Rectangle { anchors.left: parent.left anchors.right: parent.right - height: Style.trayWindowHeaderHeight + anchors.top: trayWindowHeaderBackground.bottom + anchors.topMargin: Style.sesHeaderTopMargin + implicitHeight: 1 + color: Style.sesBorderColor } UnifiedSearchInputContainer { @@ -263,12 +297,18 @@ ApplicationWindow { property bool activateSearchFocus: activeFocus - anchors.top: trayWindowHeader.bottom - anchors.left: trayWindowMainItem.left - anchors.right: trayWindowMainItem.right - anchors.topMargin: Style.trayHorizontalMargin - anchors.leftMargin: Style.trayHorizontalMargin - anchors.rightMargin: Style.trayHorizontalMargin + height: 0 + visible: false //SES-4 removed + + anchors { + top: trayWindowHeaderBackground.bottom + left: trayWindowMainItem.left + right: trayWindowMainItem.right + + topMargin: Style.trayHorizontalMargin + controlRoot.padding + leftMargin: Style.trayHorizontalMargin + controlRoot.padding + rightMargin: Style.trayHorizontalMargin + controlRoot.padding + } text: UserModel.currentUser.unifiedSearchResultsListModel.searchTerm readOnly: !UserModel.currentUser.isConnected || UserModel.currentUser.unifiedSearchResultsListModel.currentFetchMoreInProgressProviderId @@ -279,45 +319,23 @@ ApplicationWindow { Keys.onEscapePressed: activateSearchFocus = false } - Rectangle { - id: bottomUnifiedSearchInputSeparator - - anchors.top: trayWindowUnifiedSearchInputContainer.bottom - anchors.left: parent.left - anchors.right: parent.right - anchors.topMargin: Style.trayHorizontalMargin - - height: 1 - color: palette.dark - visible: trayWindowMainItem.isUnifiedSearchActive - } - - ErrorBox { - id: unifiedSearchResultsErrorLabel - visible: UserModel.currentUser.unifiedSearchResultsListModel.errorString && !unifiedSearchResultsListView.visible && ! UserModel.currentUser.unifiedSearchResultsListModel.isSearchInProgress && ! UserModel.currentUser.unifiedSearchResultsListModel.currentFetchMoreInProgressProviderId - text: UserModel.currentUser.unifiedSearchResultsListModel.errorString - anchors.top: bottomUnifiedSearchInputSeparator.bottom - anchors.left: trayWindowMainItem.left - anchors.right: trayWindowMainItem.right - anchors.margins: Style.trayHorizontalMargin - } - - UnifiedSearchPlaceholderView { - id: unifiedSearchPlaceholderView - - anchors.top: bottomUnifiedSearchInputSeparator.bottom - anchors.left: trayWindowMainItem.left - anchors.right: trayWindowMainItem.right - anchors.bottom: trayWindowMainItem.bottom - anchors.topMargin: Style.trayHorizontalMargin - - visible: trayWindowUnifiedSearchInputContainer.activateSearchFocus && !UserModel.currentUser.unifiedSearchResultsListModel.searchTerm - } + SesErrorBox { + id: unifiedSearchResultsErrorLabel + visible: UserModel.currentUser.unifiedSearchResultsListModel.errorString && + !unifiedSearchResultsListView.visible && + !UserModel.currentUser.unifiedSearchResultsListModel.isSearchInProgress && + !UserModel.currentUser.unifiedSearchResultsListModel.currentFetchMoreInProgressProviderId + text: UserModel.currentUser.unifiedSearchResultsListModel.errorString + anchors.top: trayWindowUnifiedSearchInputContainer.bottom + anchors.left: trayWindowMainItem.left + anchors.right: trayWindowMainItem.right + anchors.margins: Style.trayHorizontalMargin + } UnifiedSearchResultNothingFound { id: unifiedSearchResultNothingFound - anchors.top: bottomUnifiedSearchInputSeparator.bottom + anchors.top: trayWindowUnifiedSearchInputContainer.bottom anchors.left: trayWindowMainItem.left anchors.right: trayWindowMainItem.right anchors.topMargin: Style.trayHorizontalMargin @@ -335,7 +353,7 @@ ApplicationWindow { Loader { id: unifiedSearchResultsListViewSkeletonLoader - anchors.top: bottomUnifiedSearchInputSeparator.bottom + anchors.top: trayWindowUnifiedSearchInputContainer.bottom anchors.left: trayWindowMainItem.left anchors.right: trayWindowMainItem.right anchors.bottom: trayWindowMainItem.bottom @@ -364,7 +382,7 @@ ApplicationWindow { } visible: unifiedSearchResultsListView.count > 0 - anchors.top: bottomUnifiedSearchInputSeparator.bottom + anchors.top: trayWindowUnifiedSearchInputContainer.bottom anchors.left: trayWindowMainItem.left anchors.right: trayWindowMainItem.right anchors.bottom: trayWindowMainItem.bottom @@ -404,7 +422,6 @@ ApplicationWindow { SyncStatus { id: syncStatus - accentColor: Style.accentColor visible: !trayWindowMainItem.isUnifiedSearchActive anchors.top: trayWindowUnifiedSearchInputContainer.bottom @@ -441,6 +458,13 @@ ApplicationWindow { hoverEnabled: true padding: Style.smallSpacing + // textColor: Style.currentUserHeaderTextColor + // textColorHovered: Style.currentUserHeaderTextColor + // bgNormalColor: Qt.lighter(bgHoverColor, 1.25) + // bgHoverColor: Style.currentUserHeaderColor + // bgNormalOpacity: Style.newActivitiesBgNormalOpacity + // bgHoverOpacity: Style.newActivitiesBgHoverOpacity + anchors.fill: parent text: qsTr("New activities") diff --git a/src/gui/tray/SesButtonContents.qml b/src/gui/tray/SesButtonContents.qml index d27b0316daba3..302252c622a22 100644 --- a/src/gui/tray/SesButtonContents.qml +++ b/src/gui/tray/SesButtonContents.qml @@ -15,10 +15,8 @@ import QtQuick 2.15 import QtQuick.Controls 2.15 import QtQuick.Layouts 1.15 -import QtGraphicalEffects 1.15 import Style 1.0 - RowLayout { id: root @@ -66,8 +64,8 @@ RowLayout { visible: root.display === Button.TextOnly ? false : root.hovered ? root.imageSourceHover !== "" : root.imageSource !== "" layer.enabled: true - layer.effect: ColorOverlay { - color: Style.sesWhite - } + // layer.effect: ColorOverlay { + // color: "white" + // } } } \ No newline at end of file diff --git a/src/gui/tray/SesCustomButton.qml b/src/gui/tray/SesCustomButton.qml index 0f61857f01a28..934d9bed6974c 100644 --- a/src/gui/tray/SesCustomButton.qml +++ b/src/gui/tray/SesCustomButton.qml @@ -12,11 +12,11 @@ * for more details. */ -import QtQuick 2.15 -import QtQuick.Controls 2.15 -import QtQuick.Layouts 1.15 -import Style 1.0 - +import QtQuick +import QtQuick.Controls +import QtQuick.Layouts +import Style +import com.ionos.hidrivenext.desktopclient Button { id: root @@ -39,12 +39,19 @@ Button { property int bgBorderWidth property string bgBorderColor - background: NCButtonBackground { + Rectangle { id: bgRectangle - hovered: root.hovered - height: 36 + property bool isHovered: root.hovered + property real normalOpacity: 0.3 + property real hoverOpacity: 1.0 + property color normalColor: palette.button + property color hoverColor: palette.button + height: 36 border.width: root.bgBorderWidth border.color: root.bgBorderColor + color: isHovered ? hoverColor : normalColor + opacity: isHovered ? hoverOpacity : normalOpacity + radius: width / 2 } leftPadding: root.text === "" ? Style.smallSpacing : 20 diff --git a/src/gui/tray/SyncStatus.qml b/src/gui/tray/SyncStatus.qml index 1ec1ca162f9e8..e66ffc593e239 100644 --- a/src/gui/tray/SyncStatus.qml +++ b/src/gui/tray/SyncStatus.qml @@ -88,9 +88,6 @@ RowLayout { text: qsTr("Sync now") padding: Style.smallSpacing - textColor: Style.adjustedCurrentUserHeaderColor - textColorHovered: Style.currentUserHeaderTextColor - bgColor: Style.currentUserHeaderColor visible: false // SES-4 removed enabled: visible @@ -101,14 +98,18 @@ RowLayout { } } - Button { + SesCustomButton { Layout.rightMargin: Style.trayHorizontalMargin - text: qsTr("Resolve conflicts") - textColor: Style.adjustedCurrentUserHeaderColor - textColorHovered: Style.currentUserHeaderTextColor - bgColor: Style.currentUserHeaderColor + font.pixelSize: pixelSize + font.weight: fontWeight + text: qsTr("Resolve conflicts") + textColor: palette.brightText + bgColor: Style.sesActionPressed + bgNormalOpacity: 1.0 + bgHoverOpacity: Style.hoverOpacity + visible: activityModel.hasSyncConflicts && !syncStatus.syncing && NC.UserModel.currentUser.hasLocalFolder && diff --git a/src/gui/tray/TrayWindowAccountMenu.qml b/src/gui/tray/TrayWindowAccountMenu.qml index cefec839c8244..c29106efa6c65 100644 --- a/src/gui/tray/TrayWindowAccountMenu.qml +++ b/src/gui/tray/TrayWindowAccountMenu.qml @@ -1,15 +1,14 @@ -import QtQuick 2.15 -import QtQuick.Window 2.15 -import QtQuick.Controls 2.15 -import QtQuick.Layouts 1.15 -import QtGraphicalEffects 1.15 -import Qt.labs.platform 1.1 as NativeDialogs +import QtQuick +import QtQuick.Window +import QtQuick.Controls +import QtQuick.Layouts +import Qt.labs.platform as NativeDialogs import "../" import "../filedetails/" // Custom qml modules are in /theme (and included by resources.qrc) -import Style 1.0 +import Style import com.ionos.hidrivenext.desktopclient @@ -265,21 +264,21 @@ Button { } } - ColorOverlay { - cached: true - color: Style.currentUserHeaderTextColor - width: source.width - height: source.height - Layout.rightMargin: Style.sesAccountButtonRightMargin - source: Image { - Layout.alignment: Qt.AlignRight - verticalAlignment: Qt.AlignCenter - source: Style.sesChevron - sourceSize.width: 12 - sourceSize.height: 7 - Accessible.role: Accessible.PopupMenu - Accessible.name: qsTr("Account switcher and settings menu") - } - } + // ColorOverlay { + // cached: true + // color: Style.currentUserHeaderTextColor + // width: source.width + // height: source.height + // Layout.rightMargin: Style.sesAccountButtonRightMargin + // source: Image { + // Layout.alignment: Qt.AlignRight + // verticalAlignment: Qt.AlignCenter + // source: Style.sesChevron + // sourceSize.width: 12 + // sourceSize.height: 7 + // Accessible.role: Accessible.PopupMenu + // Accessible.name: qsTr("Account switcher and settings menu") + // } + // } } } \ No newline at end of file diff --git a/theme.qrc.in b/theme.qrc.in index 52e027b769ff6..f7c40a76bc70e 100644 --- a/theme.qrc.in +++ b/theme.qrc.in @@ -242,6 +242,7 @@ theme/call-notification.wav theme/talk-app.svg theme/chevron-double-up.svg + theme/ses/ses-IONOS-Logo.svg theme/colored/IONOS_logo_w_suffix_frontend.png theme/colored/IONOS_logo_w_suffix_frontend@2x.png theme/colored/IONOS_logo_w_suffix_frontend.svg diff --git a/theme/Style/Style.qml b/theme/Style/Style.qml index 473fe7c1e9252..7a3eb55647f7b 100644 --- a/theme/Style/Style.qml +++ b/theme/Style/Style.qml @@ -218,6 +218,27 @@ QtObject { return Qt.rgba(color.r, color.g, color.b, 1) } + // SES + readonly property string sesWebsiteIcon: "qrc:///client/theme/external.svg" + readonly property string sesFilesIcon: "qrc:///client/theme/files.svg" + readonly property string sesIonosLogoIcon: "qrc:///client/theme/ses/ses-IONOS-Logo.svg" + + readonly property string sesAvatar: "qrc:///client/theme/account.svg" + + readonly property string sesAccountQuit: "qrc:///client/theme/black/close.svg" + readonly property string sesAccountPause: "qrc:///client/theme/colored/state-pause.svg" + readonly property string sesDarkPlus: "qrc:///client/theme/black/add.svg" + readonly property string sesLightPlus: "qrc:///client/theme/white/add.svg" + readonly property string sesAccountSettings: "qrc:///client/theme/black/settings.svg" + readonly property string sesAccountResume: "qrc:///client/theme/black/state-sync.svg" + readonly property string sesLogout: "qrc:///client/theme/black/close.svg" + readonly property string sesDelete: "qrc:///client/theme/delete.svg" + readonly property string sesClipboard: "qrc:///client/theme/copy.svg" + readonly property string sesErrorIcon: "qrc:///client/theme/colored/state-error.svg" + readonly property string sesErrorBoxIcon: "qrc:///client/theme/colored/state-error.svg" + readonly property string sesGreenCheckmark: "qrc:///client/theme/colored/state-ok.svg" + readonly property string sesChevron: "qrc:///client/theme/black/caret-down.svg" + readonly property color sesIconDarkColor: "#001B41" readonly property color sesIconColor: "#1474C4" diff --git a/theme/ses/ses-IONOS-logo.svg b/theme/ses/ses-IONOS-logo.svg new file mode 100644 index 0000000000000..816faa83f14e7 --- /dev/null +++ b/theme/ses/ses-IONOS-logo.svg @@ -0,0 +1,35 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + From 2fcece82cf12f8b05f37cf6363b51ae2459ceb04 Mon Sep 17 00:00:00 2001 From: Emil Bohleber Date: Thu, 21 Nov 2024 15:27:52 +0100 Subject: [PATCH 011/371] add ses style helpers --- src/gui/moreoptionsbuttonstylehelper.cpp | 113 ++++++++++++ src/gui/moreoptionsbuttonstylehelper.h | 25 +++ src/gui/pushbuttonstylehelper.cpp | 122 +++++++++++++ src/gui/pushbuttonstylehelper.h | 36 ++++ src/gui/sesFileIconProvider.cpp | 22 +++ src/gui/sesFileIconProvider.h | 14 ++ src/gui/sesstyle.cpp | 217 +++++++++++++++++++++++ src/gui/sesstyle.h | 75 ++++++++ 8 files changed, 624 insertions(+) create mode 100644 src/gui/moreoptionsbuttonstylehelper.cpp create mode 100644 src/gui/moreoptionsbuttonstylehelper.h create mode 100644 src/gui/pushbuttonstylehelper.cpp create mode 100644 src/gui/pushbuttonstylehelper.h create mode 100644 src/gui/sesFileIconProvider.cpp create mode 100644 src/gui/sesFileIconProvider.h create mode 100644 src/gui/sesstyle.cpp create mode 100644 src/gui/sesstyle.h diff --git a/src/gui/moreoptionsbuttonstylehelper.cpp b/src/gui/moreoptionsbuttonstylehelper.cpp new file mode 100644 index 0000000000000..20f19fb2a655b --- /dev/null +++ b/src/gui/moreoptionsbuttonstylehelper.cpp @@ -0,0 +1,113 @@ +#include "moreoptionsbuttonstylehelper.h" + +#include "buttonstylestrategy.h" +#include "buttonstyle.h" +#include "ionostheme.h" +#include +#include +#include + + +void MoreOptionsButtonStyleHelper::setupPainterForToolButtonShape(const QStyleOptionButton *option, QPainter *painter, const QWidget *widget) +{ + OCC::ButtonStyle& style = ButtonStyleStrategy::getButtonStyle(widget, option); + + // Disabled + if (!(option->state & QStyle::State_Enabled)) { + painter->setPen(QColor(style.buttonDisabledBorderColor())); + painter->setBrush(QColor(style.buttonDisabledColor())); + } + //Pressed + else if (option->state & QStyle::State_Sunken) + { + painter->setPen(QColor(style.buttonPressedBorderColor())); + painter->setBrush(QColor(style.buttonPressedColor())); + } + // Hover + else if(option->state & QStyle::State_MouseOver) + { + painter->setPen(QColor(style.buttonHoverBorderColor())); + painter->setBrush(QColor(style.buttonHoverColor())); + } + // Focused + else if (option->state & QStyle::State_HasFocus) { + painter->setPen(QColor(style.buttonFocusedBorderColor())); + painter->setBrush(QColor(style.buttonFocusedColor())); + } + // Else - Just beeing there + else { + painter->setPen(QColor(style.buttonDefaultBorderColor())); + painter->setBrush(QColor(style.buttonDefaultColor())); + } +} + +void MoreOptionsButtonStyleHelper::drawToolButtonShape(const QStyleOptionButton *option, QPainter *painter, const QWidget *widget) +{ + painter->save(); + painter->setRenderHints(QPainter::Antialiasing); + setupPainterForToolButtonShape(option, painter, widget); + const int radius = option->rect.height() / 2; + painter->drawRoundedRect(option->rect, radius,radius); + painter->restore(); +} + +QPixmap MoreOptionsButtonStyleHelper::tintPixmap(const QPixmap &src, const QColor &color) const{ + QPixmap result(src.size()); + result.fill(Qt::transparent); + + QPainter painter(&result); + painter.setCompositionMode(QPainter::CompositionMode_Source); + painter.drawPixmap(0, 0, src); + + painter.setCompositionMode(QPainter::CompositionMode_SourceIn); + painter.fillRect(result.rect(), color); + + painter.end(); + return result; +} + +QSize MoreOptionsButtonStyleHelper::getLargestIconSize(const QIcon &icon) const{ + QList availableSizes = icon.availableSizes(); + + if (availableSizes.isEmpty()) { + return QSize(); + } + + QSize largestSize; + int maxDimension = 0; + + for (const QSize &size : availableSizes) { + if (size.width() > maxDimension) { + maxDimension = size.width(); + largestSize = size; + } + } + + return largestSize; +} + +void MoreOptionsButtonStyleHelper::adjustIconColor(QStyleOptionButton *option, const QWidget *widget) +{ + QColor iconColor; + OCC::ButtonStyle& style = ButtonStyleStrategy::getButtonStyle(widget, option); + + if (!(option->state & QStyle::State_Enabled)) { + iconColor = style.buttonDisabledFontColor(); + } + else if(option->state & QStyle::State_MouseOver) + { + iconColor = QColor(style.buttonDefaultColor()); + } + else + { + iconColor = QColor(style.buttonHoverColor()); + } + + QIcon icon = option->icon; + QSize iconSize = getLargestIconSize(icon); + QPixmap pixmap = icon.pixmap(iconSize); + + QPixmap coloredPixmap = tintPixmap(pixmap, iconColor); + + option->icon = (QIcon(coloredPixmap)); +} \ No newline at end of file diff --git a/src/gui/moreoptionsbuttonstylehelper.h b/src/gui/moreoptionsbuttonstylehelper.h new file mode 100644 index 0000000000000..6ffc2d5f4060d --- /dev/null +++ b/src/gui/moreoptionsbuttonstylehelper.h @@ -0,0 +1,25 @@ +#ifndef MOREOPTIONSBUTTONSTYLEHELPER_H +#define MOREOPTIONSBUTTONSTYLEHELPER_H + +#include + +class QPainter; +class QStyleOptionButton; +class QWidget; +class QPixmap; +class QColor; +class QIcon; + +class MoreOptionsButtonStyleHelper +{ +public: + void setupPainterForToolButtonShape(const QStyleOptionButton *option, QPainter *painter, const QWidget *widget); + void drawToolButtonShape(const QStyleOptionButton *option, QPainter *painter, const QWidget *widget); + void adjustIconColor(QStyleOptionButton *option, const QWidget *widget); + +private: + QPixmap tintPixmap(const QPixmap &src, const QColor &color) const; + QSize getLargestIconSize(const QIcon &icon) const; + +}; +#endif // MOREOPTIONSBUTTONSTYLEHELPER_H \ No newline at end of file diff --git a/src/gui/pushbuttonstylehelper.cpp b/src/gui/pushbuttonstylehelper.cpp new file mode 100644 index 0000000000000..de087eaa98c31 --- /dev/null +++ b/src/gui/pushbuttonstylehelper.cpp @@ -0,0 +1,122 @@ +/**************************************************************************** +** +** This file is part of the Oxygen2 project. +** +** SPDX-FileCopyrightText: 2022 Klarälvdalens Datakonsult AB, a KDAB Group company +** +** SPDX-License-Identifier: MIT +** +****************************************************************************/ + +#include "pushbuttonstylehelper.h" + + +#include "buttonstyle.h" +#include "buttonstylestrategy.h" +#include "ionostheme.h" +#include +#include +#include +#include +#include + +void PushButtonStyleHelper::setupPainterForShape(const QStyleOptionButton *option, QPainter *painter, const QWidget *widget) +{ + OCC::ButtonStyle& style = ButtonStyleStrategy::getButtonStyle(widget, option); + + // Disabled + if (!(option->state & QStyle::State_Enabled)) { + painter->setPen(QColor(style.buttonDisabledBorderColor())); + painter->setBrush(QColor(style.buttonDisabledColor())); + } + //Pressed + else if (option->state & QStyle::State_Sunken) { + + painter->setPen(QColor(style.buttonPressedBorderColor())); + painter->setBrush(QColor(style.buttonPressedColor())); + } + // Hover + else if(option->state & QStyle::State_MouseOver) + { + painter->setPen(QColor(style.buttonHoverBorderColor())); + painter->setBrush(QColor(style.buttonHoverColor())); + } + // Focused + else if (option->state & QStyle::State_HasFocus) { + painter->setPen(QColor(style.buttonFocusedBorderColor())); + painter->setBrush(QColor(style.buttonFocusedColor())); + } + // Else - Just beeing there + else { + painter->setPen(QColor(style.buttonDefaultBorderColor())); + painter->setBrush(QColor(style.buttonDefaultColor())); + } +} + +void PushButtonStyleHelper::drawButtonShape(const QStyleOptionButton *option, QPainter *painter, const QWidget *widget) +{ + painter->save(); + painter->setRenderHints(QPainter::Antialiasing); + setupPainterForShape(option, painter, widget); + const int radius = OCC::IonosTheme::buttonRadiusInt(); + painter->drawRoundedRect(option->rect, radius, radius); + painter->restore(); +} + +void PushButtonStyleHelper::setFont(QFont& font) const +{ + font.setWeight(OCC::IonosTheme::settingsTitleWeightDemiBold()); + font.setPixelSize(OCC::IonosTheme::settingsTextPixel()); +} + +void PushButtonStyleHelper::recalculateContentSize(QSize &contentsSize, const QWidget *widget) const +{ + QFont font = widget->font(); + setFont(font); + QFontMetrics fm(font); + + //Code aus qpushbutton.cpp - sizeHint + const QPushButton* pushButton = qobject_cast(widget); + int w = 0, h = 0; + QString s(pushButton->text()); + bool empty = s.isEmpty(); + if (empty) + s = QStringLiteral("XXXX"); + QSize sz = fm.size(Qt::TextShowMnemonic, s); + if (!empty || !w) + w += sz.width(); + if (!empty || !h) + h = qMax(h, sz.height()); + // -- end code + + contentsSize.setHeight(h); + contentsSize.setWidth(w); +} + +QSize PushButtonStyleHelper::sizeFromContents(const QStyleOptionButton *option, QSize contentsSize, const QWidget *widget, int margin) const +{ + Q_UNUSED(option) + Q_UNUSED(widget) + if(widget != nullptr) + { + recalculateContentSize(contentsSize, widget); + } + const int frameWidth = 2; // due to pen width 1 in drawButtonBevel, on each side + return QSize(qMax(80, contentsSize.width() + 2 * margin + frameWidth), qMin(40, contentsSize.height() + 2 * margin + frameWidth)); +} + +void PushButtonStyleHelper::adjustTextPalette(QStyleOptionButton *option, const QWidget *widget) const +{ + QColor textColor; + OCC::ButtonStyle& style = ButtonStyleStrategy::getButtonStyle(widget, option); + + // Disabled + if (!(option->state & QStyle::State_Enabled)) { + textColor = style.buttonDisabledFontColor(); + } + else + { + textColor = style.buttonFontColor(); + } + option->palette.setColor(QPalette::ButtonText, textColor); +} \ No newline at end of file diff --git a/src/gui/pushbuttonstylehelper.h b/src/gui/pushbuttonstylehelper.h new file mode 100644 index 0000000000000..cf9c23959599c --- /dev/null +++ b/src/gui/pushbuttonstylehelper.h @@ -0,0 +1,36 @@ +/**************************************************************************** +** +** This file is part of the Oxygen2 project. +** +** SPDX-FileCopyrightText: 2022 Klarälvdalens Datakonsult AB, a KDAB Group company +** +** SPDX-License-Identifier: MIT +** +****************************************************************************/ + +#ifndef PUSHBUTTONSTYLEHELPER_H +#define PUSHBUTTONSTYLEHELPER_H + +#include + +class QPainter; +class QPushButton; +class QStyleOptionButton; +class QWidget; +class QPixmap; +class QColor; +class QFont; + +class PushButtonStyleHelper +{ +public: + void setupPainterForShape(const QStyleOptionButton *option, QPainter *painter, const QWidget *widget); + void drawButtonShape(const QStyleOptionButton *option, QPainter *painter, const QWidget *widget); + QSize sizeFromContents(const QStyleOptionButton *option, QSize contentsSize, const QWidget *widget, int margin) const; + void adjustTextPalette(QStyleOptionButton *option, const QWidget *widget) const; + void setFont(QFont& font) const; +private: + void recalculateContentSize(QSize &contentsSize, const QWidget *widget) const; + +}; +#endif // PUSHBUTTONSTYLEHELPER_H \ No newline at end of file diff --git a/src/gui/sesFileIconProvider.cpp b/src/gui/sesFileIconProvider.cpp new file mode 100644 index 0000000000000..99f96001b2fb1 --- /dev/null +++ b/src/gui/sesFileIconProvider.cpp @@ -0,0 +1,22 @@ +#include "sesfileiconprovider.h" + +#include +#include + +QIcon SesFileIconProvider::icon(const QFileInfo &info) const +{ + QFileIconProvider provider; + + if (info.isDir()) + { + return QIcon(":/client/theme/ses/ses-filesIconBright.svg"); + } + + if (info.suffix().isEmpty()) + { + return QIcon(":/client/theme/ses/ses-file.svg"); + } + + + return provider.icon(info); +}; \ No newline at end of file diff --git a/src/gui/sesFileIconProvider.h b/src/gui/sesFileIconProvider.h new file mode 100644 index 0000000000000..69d7454be7d3f --- /dev/null +++ b/src/gui/sesFileIconProvider.h @@ -0,0 +1,14 @@ +#ifndef SESFILEICONPROVIDER_H +#define SESFILEICONPROVIDER_H + +#include +#include +#include + +class SesFileIconProvider : public QFileIconProvider +{ +public: + QIcon icon(const QFileInfo &info) const override; +}; + +#endif // SESFILEICONPROVIDER_H \ No newline at end of file diff --git a/src/gui/sesstyle.cpp b/src/gui/sesstyle.cpp new file mode 100644 index 0000000000000..24e7baafcc116 --- /dev/null +++ b/src/gui/sesstyle.cpp @@ -0,0 +1,217 @@ +/**************************************************************************** +** +** This file is part of the Oxygen2 project. +** +** SPDX-FileCopyrightText: 2022 Klarälvdalens Datakonsult AB, a KDAB Group company +** +** SPDX-License-Identifier: MIT +** +****************************************************************************/ + +/************************************************************************* + * + * Copyright (c) 2013-2019, Klaralvdalens Datakonsult AB (KDAB) + * All rights reserved. + * + * See the LICENSE.txt file shipped along with this file for the license. + * + *************************************************************************/ + +#include "sesstyle.h" +#include "ionostheme.h" + +#include "pushbuttonstylehelper.h" +#include "moreoptionsbuttonstylehelper.h" + +#include +#include +#include +#include +#include + +sesStyle::sesStyle() + : super() + , mPushButtonStyleHelper(new PushButtonStyleHelper) + , mMoreOptionsButtonStyleHelper(new MoreOptionsButtonStyleHelper) +{ +} + +void sesStyle::drawPrimitive(PrimitiveElement pe, const QStyleOption *option, QPainter *painter, const QWidget *widget) const +{ + switch (pe) { + case PE_FrameFocusRect: + // nothing, we don't want focus rects + break; + #ifdef Q_OS_MAC + case PE_IndicatorBranch: + { + + QStyleOption optCopy = *option; + int originalWidth = optCopy.rect.width(); + int originalHeight = optCopy.rect.height(); + optCopy.rect.setWidth(static_cast(originalWidth * 0.5)); + optCopy.rect.setHeight(static_cast(originalHeight * 0.5)); + optCopy.rect.translate(5, 5); + + if (!(option->state & State_Children)) + break; + if (option->state & State_Open) + drawPrimitive(PE_IndicatorArrowDown, &optCopy, painter, widget); + else { + const bool reverse = (option->direction == Qt::RightToLeft); + drawPrimitive(reverse ? PE_IndicatorArrowLeft : PE_IndicatorArrowRight, &optCopy, painter, widget); + } + break; + } + #endif + default: + super::drawPrimitive(pe, option, painter, widget); + break; + } +} + +int sesStyle::pixelMetric(PixelMetric metric, const QStyleOption *option, const QWidget *widget) const +{ + switch (metric) { + case PM_ButtonShiftHorizontal: + case PM_ButtonShiftVertical: + return 0; // no shift + case PM_ButtonMargin: + return 16; + default: + return super::pixelMetric(metric, option, widget); + } +} + +void sesStyle::drawButton(const QStyleOptionButton *btn, QPainter *painter, const QWidget *widget) const { + proxy()->drawControl(CE_PushButtonBevel, btn, painter, widget); + QStyleOptionButton subopt = *btn; + subopt.rect = subElementRect(SE_PushButtonContents, btn, widget); + proxy()->drawControl(CE_PushButtonLabel, &subopt, painter, widget); + if (btn->state & State_HasFocus) { + QStyleOptionFocusRect fropt; + fropt.QStyleOption::operator=(*btn); + fropt.rect = subElementRect(SE_PushButtonFocusRect, btn, widget); + proxy()->drawPrimitive(PE_FrameFocusRect, &fropt, painter, widget); + } +} + + +void sesStyle::drawControl(ControlElement element, const QStyleOption *option, QPainter *painter, const QWidget *widget) const +{ + switch (element) { + case CE_TreeViewMoreOptions: + { + if (const auto *btn = qstyleoption_cast(option)) + { + // Bevel + mMoreOptionsButtonStyleHelper->drawToolButtonShape(btn, painter, widget); + + // Label / Icon + QStyleOptionButton subopt = *btn; + subopt.rect = subElementRect(SE_PushButtonContents, btn, widget); + mMoreOptionsButtonStyleHelper->adjustIconColor(&subopt, widget); + QCommonStyle::drawControl(CE_PushButtonLabel, &subopt, painter, widget); + } + return; + } + case CE_PushButton: + { + if (const auto *btn = qstyleoption_cast(option)) + { + drawButton(btn, painter, widget); + } + return; + } + case CE_PushButtonBevel: + if (const auto *optionButton = qstyleoption_cast(option)) + { + mPushButtonStyleHelper->drawButtonShape(optionButton, painter, widget); + } + return; + case CE_PushButtonLabel: + if (const auto *optionButton = qstyleoption_cast(option)) + { + QStyleOptionButton customStyleCopy = *optionButton; + mPushButtonStyleHelper->adjustTextPalette(&customStyleCopy, widget); + + painter->save(); + QFont font = painter->font(); + mPushButtonStyleHelper->setFont(font); + painter->setFont(font); + + QCommonStyle::drawControl(element, &customStyleCopy, painter, widget); + painter->restore(); + } + return; + default: + super::drawControl(element, option, painter, widget); + } +} + +void sesStyle::polish(QWidget *w) +{ + if (qobject_cast(w) || qobject_cast(w)) { + w->setAttribute(Qt::WA_Hover); + } + super::polish(w); +} + +bool sesStyle::eventFilter(QObject *obj, QEvent *event) +{ + return super::eventFilter(obj, event); +} + +PushButtonStyleHelper *sesStyle::pushButtonStyleHelper() const +{ + return mPushButtonStyleHelper.get(); +} + +int sesStyle::styleHint(StyleHint stylehint, const QStyleOption *option, const QWidget *widget, QStyleHintReturn *returnData) const +{ + switch (stylehint) { + case SH_DialogButtonBox_ButtonsHaveIcons: + return 0; + default: + break; + } + + return super::styleHint(stylehint, option, widget, returnData); +} + +QSize sesStyle::sizeFromContents(ContentsType type, const QStyleOption *option, const QSize &contentsSize, const QWidget *widget) const +{ + switch (type) { + case CT_PushButton: + if (const auto *buttonOption = qstyleoption_cast(option)) { + return mPushButtonStyleHelper->sizeFromContents(buttonOption, contentsSize, widget, pixelMetric(PM_ButtonMargin, buttonOption, widget)); + } + break; + case CT_TreeViewMoreOptions: + { + if (const auto *buttonOption = qstyleoption_cast(option)) { + return super::sizeFromContents(CT_ToolButton, option, contentsSize, widget); + } + break; + } + default: + break; + } + return super::sizeFromContents(type, option, contentsSize, widget); +} + +QRect sesStyle::subElementRect(SubElement subElement, const QStyleOption *option, const QWidget *widget) const +{ + switch (subElement) { + default: + return super::subElementRect(subElement, option, widget); + } +} + +void sesStyle::drawComplexControl(ComplexControl complexControl, const QStyleOptionComplex *option, QPainter *painter, const QWidget *widget) const +{ + switch (complexControl) { + default: + super::drawComplexControl(complexControl, option, painter, widget); + } +} \ No newline at end of file diff --git a/src/gui/sesstyle.h b/src/gui/sesstyle.h new file mode 100644 index 0000000000000..9f9e053dab36c --- /dev/null +++ b/src/gui/sesstyle.h @@ -0,0 +1,75 @@ +/**************************************************************************** +** +** This file is part of the Oxygen2 project. +** +** SPDX-FileCopyrightText: 2022 Klarälvdalens Datakonsult AB, a KDAB Group company +** +** SPDX-License-Identifier: MIT +** +****************************************************************************/ + +/************************************************************************* + * + * Copyright (c) 2013-2019, Klaralvdalens Datakonsult AB (KDAB) + * All rights reserved. + * + * See the LICENSE.txt file shipped along with this file for the license. + * + *************************************************************************/ +#pragma once + +#include +#include +#include + +class PushButtonStyleHelper; + +// QProxyStyle to see all widgets in an application (even if it means mixing with the default style) +// QCommonStyle to only see what we have styled, no bad interactions from the default style, but the other widgets won't be usable +using super = QProxyStyle; + +class sesStyle : public super +{ +public: + enum CustomControlElement { + CE_TreeViewMoreOptions = QStyle::CE_CustomBase + 1, // Custom element for a button + }; + + enum CustomContentsType { + CT_TreeViewMoreOptions = QStyle::CT_CustomBase + 1, // Custom element for a button + }; + + sesStyle(); + + void drawPrimitive(PrimitiveElement pe, const QStyleOption *option, QPainter *painter, + const QWidget *widget = nullptr) const override; + + int pixelMetric(PixelMetric pm, const QStyleOption *option = nullptr, + const QWidget *widget = nullptr) const override; + + void drawButton(const QStyleOptionButton *btn, QPainter *painter, const QWidget *widget) const; + + void drawControl(ControlElement element, const QStyleOption *option, QPainter *painter, + const QWidget *widget = nullptr) const override; + + void drawComplexControl(ComplexControl complexControl, const QStyleOptionComplex *opt, QPainter *painter, + const QWidget *widget = nullptr) const override; + + int styleHint(StyleHint stylehint, const QStyleOption *option, const QWidget *widget, QStyleHintReturn *returnData) const override; + + QSize sizeFromContents(ContentsType type, const QStyleOption *option, const QSize &contentsSize, const QWidget *widget) const override; + + QRect subElementRect(SubElement subElement, const QStyleOption *option, const QWidget *widget) const override; + + void polish(QWidget *w) override; + + bool eventFilter(QObject *obj, QEvent *event) override; + + + PushButtonStyleHelper* pushButtonStyleHelper() const; + +private: + std::unique_ptr mPushButtonStyleHelper; + std::unique_ptr mMoreOptionsButtonStyleHelper; + +}; \ No newline at end of file From 7c9a22e01a59505d6b476c459117d4bd2dd703db Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Christopher=20H=C3=A4tty?= Date: Thu, 16 Jan 2025 14:12:52 +0100 Subject: [PATCH 012/371] Merge Fix --- resources.qrc | 2 ++ 1 file changed, 2 insertions(+) diff --git a/resources.qrc b/resources.qrc index 6f69c28663140..0e1056bb2df92 100644 --- a/resources.qrc +++ b/resources.qrc @@ -69,7 +69,9 @@ src/gui/macOS/ui/FileProviderFastEnumerationSettings.qml src/gui/SesComponents/SesErrorBox.qml src/gui/SesComponents/SesTrayHeader.qml + src/gui/tray/TrayWindowAccountMenu.qml src/gui/tray/SesCustomButton.qml src/gui/tray/SesButtonContents.qml + src/gui/tray/AccountMenuItem.qml From 5db17c853117ab44f08ff1f59781f00486ec5dea Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Christopher=20H=C3=A4tty?= Date: Thu, 16 Jan 2025 14:19:30 +0100 Subject: [PATCH 013/371] style activity view and shares view 3cd6e826d113bbaa969a5bb176d811068b9370b2 --- src/gui/filedetails/FileDetailsPage.qml | 96 +-- src/gui/filedetails/FileDetailsView.qml | 2 +- src/gui/filedetails/FileDetailsWindow.qml | 3 - src/gui/filedetails/NCInputTextArea.qml | 5 + src/gui/filedetails/NCInputTextField.qml | 8 + src/gui/filedetails/ShareDelegate.qml | 80 +- src/gui/filedetails/ShareDetailsPage.qml | 872 ++++++++++++---------- src/gui/filedetails/ShareView.qml | 28 +- src/gui/filedetails/ShareeDelegate.qml | 3 + src/gui/filedetails/ShareeSearchField.qml | 16 +- src/gui/filedetails/shareemodel.cpp | 2 +- src/gui/filedetails/sharemodel.cpp | 6 +- src/gui/filedetails/sortedsharemodel.cpp | 2 +- 13 files changed, 633 insertions(+), 490 deletions(-) diff --git a/src/gui/filedetails/FileDetailsPage.qml b/src/gui/filedetails/FileDetailsPage.qml index e7de4a4253527..4f45650c556ba 100644 --- a/src/gui/filedetails/FileDetailsPage.qml +++ b/src/gui/filedetails/FileDetailsPage.qml @@ -45,7 +45,11 @@ Page { localPath: root.localPath } - Connections { + font.family: Style.sesOpenSansRegular + font.pixelSize: Style.sesFontPixelSize + font.weight: Style.sesFontNormalWeight + + Connections { target: Systray function onShowFileDetailsPage(fileLocalPath, page) { if (!root.fileDetails.sharingAvailable && page == Systray.FileDetailsPage.Sharing) { @@ -69,12 +73,12 @@ Page { bottomPadding: intendedPadding background: Rectangle { - color: palette.base + color: palette.window visible: root.backgroundsVisible } header: ColumnLayout { - spacing: root.intendedPadding + spacing: Style.sesMediumMargin GridLayout { id: headerGridLayout @@ -107,15 +111,15 @@ Page { id: fileIcon Layout.rowSpan: headerGridLayout.rows - Layout.preferredWidth: Style.trayListItemIconSize - Layout.leftMargin: root.intendedPadding + Layout.preferredWidth: Style.sesFileDetailsIconSize + Layout.leftMargin: Style.sesMediumMargin Layout.fillHeight: true verticalAlignment: Image.AlignVCenter horizontalAlignment: Image.AlignHCenter source: root.fileDetails.iconUrl - sourceSize.width: Style.trayListItemIconSize - sourceSize.height: Style.trayListItemIconSize + sourceSize.width: Style.sesFileDetailsIconSize + sourceSize.height: Style.sesFileDetailsIconSize fillMode: Image.PreserveAspectFit } @@ -123,26 +127,34 @@ Page { id: fileNameLabel Layout.fillWidth: true - Layout.rightMargin: headerGridLayout.textRightMargin + Layout.rightMargin: Style.sesFileDetailsHeaderModifier text: root.fileDetails.name - font.bold: true + + font.pixelSize: Style.sesFontPixelSizeTitle + font.weight: Style.sesFontBoldWeight + wrapMode: Text.Wrap } - Button { + SesCustomButton { id: closeButton Layout.rowSpan: headerGridLayout.rows - Layout.preferredWidth: Style.activityListButtonWidth - Layout.preferredHeight: Style.activityListButtonHeight - Layout.alignment: Qt.AlignHCenter | Qt.AlignVCenter + Layout.preferredWidth: Style.iconButtonWidth + Layout.preferredHeight: width Layout.rightMargin: headerGridLayout.textRightMargin icon.source: "image://svgimage-custom-color/clear.svg" + "/" + palette.buttonText - icon.width: Style.activityListButtonIconSize - icon.height: Style.activityListButtonIconSize + bgColor: palette.highlight + bgNormalOpacity: 0 + toolTipText: qsTr("Dismiss") + + font.pixelSize: Style.sesFontPixelSize + font.weight: Style.sesFontNormalWeight + visible: root.showCloseButton + onClicked: root.closeButtonClicked() } @@ -150,9 +162,13 @@ Page { id: fileDetailsLabel Layout.fillWidth: true - Layout.rightMargin: headerGridLayout.textRightMargin + Layout.rightMargin: Style.sesFileDetailsHeaderModifier + + text: `${root.fileDetails.sizeString}, ${root.fileDetails.lastChangedString}` + + font.pixelSize: Style.sesFontHintPixelSize + font.weight: Style.sesFontNormalWeight - text: `${root.fileDetails.sizeString} · ${root.fileDetails.lastChangedString}` wrapMode: Text.Wrap } @@ -163,8 +179,12 @@ Page { Layout.rightMargin: headerGridLayout.textRightMargin text: root.fileDetails.lockExpireString + color: palette.midlight wrapMode: Text.Wrap visible: headerGridLayout.showFileLockedString + + font.pixelSize: Style.sesFontHintPixelSize + font.weight: Style.sesFontNormalWeight } Row { @@ -207,37 +227,13 @@ Page { ToolTip { visible: hoverHandler.hovered text: tagRepeater.fileTagModel.overflowTagsString + + font.pixelSize: Style.sesFontPixelSize + font.weight: Style.sesFontNormalWeight } } } } - - TabBar { - id: viewBar - - Layout.leftMargin: root.intendedPadding - Layout.rightMargin: root.intendedPadding - - padding: 0 - background: null - - NCTabButton { - svgCustomColorSource: "image://svgimage-custom-color/activity.svg" - text: qsTr("Activity") - checked: swipeView.currentIndex === fileActivityView.swipeIndex - onClicked: swipeView.currentIndex = fileActivityView.swipeIndex - } - - NCTabButton { - width: visible ? implicitWidth : 0 - height: visible ? implicitHeight : 0 - svgCustomColorSource: "image://svgimage-custom-color/share.svg" - text: qsTr("Sharing") - checked: swipeView.currentIndex === shareViewLoader.swipeIndex - onClicked: swipeView.currentIndex = shareViewLoader.swipeIndex - visible: root.fileDetails.sharingAvailable - } - } } SwipeView { @@ -246,18 +242,6 @@ Page { anchors.fill: parent clip: true - FileActivityView { - id: fileActivityView - - readonly property int swipeIndex: SwipeView.index - - delegateHorizontalPadding: root.intendedPadding - - accountState: root.accountState - localPath: root.localPath - iconSize: root.iconSize - } - Loader { id: shareViewLoader diff --git a/src/gui/filedetails/FileDetailsView.qml b/src/gui/filedetails/FileDetailsView.qml index 6ce265f69e4c3..9413c16873612 100644 --- a/src/gui/filedetails/FileDetailsView.qml +++ b/src/gui/filedetails/FileDetailsView.qml @@ -31,7 +31,7 @@ StackView { property bool backgroundsVisible: true background: Rectangle { - color: palette.base + color: palette.window visible: root.backgroundsVisible } diff --git a/src/gui/filedetails/FileDetailsWindow.qml b/src/gui/filedetails/FileDetailsWindow.qml index f233149af1e2a..bc4a8f2f45f0e 100644 --- a/src/gui/filedetails/FileDetailsWindow.qml +++ b/src/gui/filedetails/FileDetailsWindow.qml @@ -26,9 +26,6 @@ ApplicationWindow { property var accountState property string localPath: "" - LayoutMirroring.enabled: Application.layoutDirection === Qt.RightToLeft - LayoutMirroring.childrenInherit: true - width: 400 height: 500 minimumWidth: 300 diff --git a/src/gui/filedetails/NCInputTextArea.qml b/src/gui/filedetails/NCInputTextArea.qml index 743400b05ab4f..4bdc32065c851 100644 --- a/src/gui/filedetails/NCInputTextArea.qml +++ b/src/gui/filedetails/NCInputTextArea.qml @@ -43,6 +43,11 @@ TextArea { width: height height: parent.height + + background: Rectangle { + radius: width / 2 + color: textFieldBorder.color + } flat: true icon.source: "image://svgimage-custom-color/confirm.svg" + "/" + root.secondaryColor diff --git a/src/gui/filedetails/NCInputTextField.qml b/src/gui/filedetails/NCInputTextField.qml index c45c1ea51d5bf..825f4c964db4a 100644 --- a/src/gui/filedetails/NCInputTextField.qml +++ b/src/gui/filedetails/NCInputTextField.qml @@ -32,6 +32,14 @@ TextField { rightPadding: submitButton.width selectByMouse: true + + background: Rectangle { + id: textFieldBorder + radius: Style.slightlyRoundedButtonRadius + border.width: Style.normalBorderWidth + border.color: root.activeFocus ? root.validInput ? root.accentColor : Style.errorBoxBackgroundColor : root.secondaryColor + color: palette.base + } Button { id: submitButton diff --git a/src/gui/filedetails/ShareDelegate.qml b/src/gui/filedetails/ShareDelegate.qml index 73b33ff00dd76..6cce8317df80a 100644 --- a/src/gui/filedetails/ShareDelegate.qml +++ b/src/gui/filedetails/ShareDelegate.qml @@ -49,7 +49,7 @@ GridLayout { property FileDetails fileDetails: FileDetails {} property StackView rootStackView: StackView {} property bool backgroundsVisible: true - property color accentColor: Style.ncBlue + property color accentColor: Style.sesIconColor property bool canCreateLinkShares: true property bool serverAllowsResharing: true @@ -139,6 +139,7 @@ GridLayout { Layout.column: 1 text: root.detailText + elide: Text.ElideRight visible: text !== "" } @@ -151,17 +152,22 @@ GridLayout { spacing: 0 - Button { + SesCustomButton { id: createLinkButton Layout.alignment: Qt.AlignCenter - Layout.preferredWidth: Style.activityListButtonWidth - Layout.preferredHeight: Style.activityListButtonHeight + Layout.preferredWidth: Style.iconButtonWidth + Layout.preferredHeight: width + + toolTipText: qsTr("Create a new share link") - icon.source: "image://svgimage-custom-color/add.svg/" + palette.buttonText - icon.width: Style.activityListButtonIconSize - icon.height: Style.activityListButtonIconSize - display: AbstractButton.IconOnly + bgColor: palette.highlight + bgNormalOpacity: 0 + + icon.source: Style.sesLightPlus + palette.buttonText + icon.width: Style.smallIconSize + icon.height: Style.smallIconSize + // display: AbstractButton.IconOnly visible: (root.isPlaceholderLinkShare || root.isSecureFileDropPlaceholderLinkShare) && root.canCreateLinkShares enabled: visible @@ -169,7 +175,7 @@ GridLayout { onClicked: root.createNewLinkShare() } - Button { + SesCustomButton { id: copyLinkButton function copyShareLink() { @@ -184,19 +190,27 @@ GridLayout { property bool shareLinkCopied: false - Layout.alignment: Qt.AlignVCenter | Qt.AlignHCenter - Layout.preferredWidth: shareLinkCopied ? implicitWidth : Style.activityListButtonWidth - Layout.preferredHeight: Style.activityListButtonHeight + Layout.alignment: Qt.AlignCenter + Layout.preferredWidth: shareLinkCopied ? implicitWidth : Style.iconButtonWidth + Layout.preferredHeight: Style.iconButtonWidth + + toolTipText: qsTr("Copy share link location") text: shareLinkCopied ? qsTr("Copied!") : "" + textColor: Style.sesDarkGreen + + bgColor: palette.highlight + bgNormalOpacity: 0 + + icon.source: shareLinkCopied ? Style.sesGreenCheckmark + Style.positiveColor : + Style.sesClipboard + palette.brightText + + icon.width: Style.smallIconSize + icon.height: Style.smallIconSize - icon.source: shareLinkCopied ? "image://svgimage-custom-color/copy.svg/" + palette.brightText : - "image://svgimage-custom-color/copy.svg/" + palette.buttonText - icon.width: Style.activityListButtonIconSize - icon.height: Style.activityListButtonIconSize - display: AbstractButton.IconOnly visible: root.isLinkShare || root.isInternalLinkShare enabled: visible + onClicked: copyShareLink() Behavior on Layout.preferredWidth { @@ -215,19 +229,35 @@ GridLayout { } } - Button { + SesCustomButton { id: moreButton - Layout.alignment: Qt.AlignVCenter | Qt.AlignHCenter - Layout.preferredWidth: Style.activityListButtonWidth - Layout.preferredHeight: Style.activityListButtonHeight + property bool isHovered: moreButton.hovered || moreButton.visualFocus + property bool isActive: moreButton.pressed + + Layout.alignment: Qt.AlignCenter + Layout.preferredWidth: Style.iconButtonWidth + Layout.preferredHeight: width + + toolTipText: qsTr("Share options") + + bgColor: palette.highlight + bgNormalOpacity: 0 + + icon.source: "image://svgimage-custom-color/more.svg/" + (moreButton.isActive || moreButton.isHovered ? Style.sesWhite : Style.sesIconColor) + icon.width: Style.smallIconSize + icon.height: Style.smallIconSize - icon.source: "image://svgimage-custom-color/more.svg/" + palette.buttonText - icon.width: Style.activityListButtonIconSize - icon.height: Style.activityListButtonIconSize - display: AbstractButton.IconOnly visible: !root.isPlaceholderLinkShare && !root.isSecureFileDropPlaceholderLinkShare && !root.isInternalLinkShare enabled: visible + + background: Rectangle { + anchors.fill: parent + anchors.margins: 1 + color: moreButton.isActive ? Style.sesActionPressed : moreButton.isHovered ? Style.sesActionHover : "transparent" + radius: width / 2 + } + onClicked: root.rootStackView.push(shareDetailsPageComponent, {}, StackView.PushTransition) Component { diff --git a/src/gui/filedetails/ShareDetailsPage.qml b/src/gui/filedetails/ShareDetailsPage.qml index 5b7bf62d02aab..ec8e324c365e5 100644 --- a/src/gui/filedetails/ShareDetailsPage.qml +++ b/src/gui/filedetails/ShareDetailsPage.qml @@ -21,6 +21,7 @@ import Qt5Compat.GraphicalEffects import com.ionos.hidrivenext.desktopclient import Style import "../tray" +import "../SesComponents/" import "../" Page { @@ -43,6 +44,11 @@ Page { signal setPassword(string password) signal setNote(string note) + + font.family: Style.sesOpenSansRegular + font.pixelSize: Style.sesFontPixelSize + font.weight: Style.sesFontNormalWeight + property bool backgroundsVisible: true property color accentColor: Style.ncBlue @@ -94,6 +100,16 @@ Page { property bool waitingForPasswordChange: false property bool waitingForNoteChange: false + readonly property int titlePixelSize: Style.sesFontPixelSizeTitle + readonly property int titleFontWeight: Style.sesFontNormalWeight + + readonly property int hintPixelSize: Style.sesFontHintPixelSize + readonly property int hintFontWeight: Style.sesFontNormalWeight + + + readonly property int pixelSize: Style.sesFontPixelSize + readonly property int fontWeight: Style.sesFontNormalWeight + function showPasswordSetError(message) { passwordErrorBoxLoader.message = message !== "" ? message : qsTr("An error occurred setting the share password."); @@ -105,8 +121,8 @@ Page { } function resetLinkShareLabelField() { - linkShareLabelTextField.text = linkShareLabel; - waitingForLinkShareLabelChange = false; + // linkShareLabelTextField.text = linkShareLabel; + // waitingForLinkShareLabelChange = false; } function resetPasswordField() { @@ -210,38 +226,50 @@ Page { } EnforcedPlainTextLabel { - id: headLabel + id: fileNameLabel Layout.fillWidth: true + Layout.rightMargin: headerGridLayout.textRightMargin - text: qsTr("Edit share") - font.bold: true - elide: Text.ElideRight + text: root.fileDetails.name + + font.pixelSize: titlePixelSize + font.weight: titleFontWeight + + wrapMode: Text.Wrap } - Button { - id: closeButton + SesCustomButton { + id: placeholder Layout.rowSpan: headerGridLayout.rows - Layout.preferredWidth: Style.activityListButtonWidth - Layout.preferredHeight: Style.activityListButtonHeight - Layout.alignment: Qt.AlignHCenter | Qt.AlignVCenter + Layout.preferredWidth: Style.iconButtonWidth + Layout.preferredHeight: width Layout.rightMargin: root.padding icon.source: "image://svgimage-custom-color/clear.svg" + "/" + palette.buttonText - icon.width: Style.activityListButtonIconSize - icon.height: Style.activityListButtonIconSize + bgColor: palette.highlight + bgNormalOpacity: 0 + toolTipText: qsTr("Dismiss") + + font.pixelSize: pixelSize + font.weight: fontWeight + + onClicked: root.closeShareDetails() } EnforcedPlainTextLabel { - id: secondaryLabel + id: fileDetailsLabel Layout.fillWidth: true - Layout.rightMargin: root.padding + Layout.rightMargin: headerGridLayout.textRightMargin - text: root.fileDetails.name + text: `${root.fileDetails.sizeString}, ${root.fileDetails.lastChangedString}` wrapMode: Text.Wrap + + font.pixelSize: hintPixelSize + font.weight: hintFontWeight } } } @@ -259,198 +287,7 @@ Page { readonly property int itemPadding: Style.smallSpacing width: parent.width - spacing: Style.smallSpacing - - RowLayout { - Layout.fillWidth: true - height: visible ? implicitHeight : 0 - spacing: scrollContentsColumn.indicatorSpacing - - visible: root.isLinkShare - - Image { - Layout.preferredWidth: scrollContentsColumn.indicatorItemWidth - Layout.fillHeight: true - - verticalAlignment: Image.AlignVCenter - horizontalAlignment: Image.AlignHCenter - fillMode: Image.Pad - - source: "image://svgimage-custom-color/edit.svg/" + palette.windowText - sourceSize.width: scrollContentsColumn.rowIconWidth - sourceSize.height: scrollContentsColumn.rowIconWidth - } - - NCInputTextField { - id: linkShareLabelTextField - - Layout.fillWidth: true - height: visible ? implicitHeight : 0 - - text: root.linkShareLabel - placeholderText: qsTr("Share label") - - enabled: root.isLinkShare && - !root.waitingForLinkShareLabelChange - - onAccepted: if(text !== root.linkShareLabel) { - root.setLinkShareLabel(text); - root.waitingForLinkShareLabelChange = true; - } - - NCBusyIndicator { - anchors.fill: parent - visible: root.waitingForLinkShareLabelChange - running: visible - z: 1 - } - } - } - - Loader { - Layout.fillWidth: true - active: !root.isFolderItem && !root.isEncryptedItem - visible: active - sourceComponent: CheckBox { - spacing: scrollContentsColumn.indicatorSpacing - leftPadding: scrollContentsColumn.itemPadding - rightPadding: scrollContentsColumn.itemPadding - indicator.width: scrollContentsColumn.indicatorItemWidth - indicator.height: scrollContentsColumn.indicatorItemWidth - - checkable: true - checked: root.editingAllowed - text: qsTr("Allow upload and editing") - enabled: !root.isSharePermissionChangeInProgress - - onClicked: root.toggleAllowEditing(checked) - - NCBusyIndicator { - anchors.fill: parent - visible: root.isSharePermissionChangeInProgress - running: visible - z: 1 - } - } - } - Loader { - Layout.fillWidth: true - active: root.isFolderItem && !root.isEncryptedItem - visible: active - sourceComponent: ColumnLayout { - id: permissionRadioButtonsLayout - spacing: Layout.smallSpacing - width: parent.width - - ButtonGroup { - id: permissionModeRadioButtonsGroup - } - - RadioButton { - readonly property int permissionMode: ShareModel.ModeViewOnly - Layout.fillWidth: true - ButtonGroup.group: permissionModeRadioButtonsGroup - enabled: !root.isSharePermissionChangeInProgress - checked: root.currentPermissionMode === permissionMode - text: qsTr("View only") - spacing: scrollContentsColumn.indicatorSpacing - leftPadding: scrollContentsColumn.itemPadding - rightPadding: scrollContentsColumn.itemPadding - onClicked: root.permissionModeChanged(permissionMode) - } - - RadioButton { - readonly property int permissionMode: ShareModel.ModeUploadAndEditing - Layout.fillWidth: true - ButtonGroup.group: permissionModeRadioButtonsGroup - enabled: !root.isSharePermissionChangeInProgress - checked: root.currentPermissionMode === permissionMode - text: qsTr("Allow upload and editing") - spacing: scrollContentsColumn.indicatorSpacing - leftPadding: scrollContentsColumn.itemPadding - rightPadding: scrollContentsColumn.itemPadding - onClicked: root.permissionModeChanged(permissionMode) - } - - RadioButton { - readonly property int permissionMode: ShareModel.ModeFileDropOnly - Layout.fillWidth: true - ButtonGroup.group: permissionModeRadioButtonsGroup - enabled: !root.isSharePermissionChangeInProgress - checked: root.currentPermissionMode === permissionMode - text: qsTr("File drop (upload only)") - spacing: scrollContentsColumn.indicatorSpacing - leftPadding: scrollContentsColumn.itemPadding - rightPadding: scrollContentsColumn.itemPadding - onClicked: root.permissionModeChanged(permissionMode) - } - - CheckBox { - id: allowResharingCheckBox - - Layout.fillWidth: true - - spacing: scrollContentsColumn.indicatorSpacing - leftPadding: scrollContentsColumn.itemPadding - rightPadding: scrollContentsColumn.itemPadding - indicator.width: scrollContentsColumn.indicatorItemWidth - indicator.height: scrollContentsColumn.indicatorItemWidth - - checkable: true - checked: root.resharingAllowed - text: qsTr("Allow resharing") - enabled: !root.isSharePermissionChangeInProgress && root.serverAllowsResharing - visible: root.serverAllowsResharing - onClicked: root.toggleAllowResharing(checked); - - Connections { - target: root - onResharingAllowedChanged: allowResharingCheckBox.checked = root.resharingAllowed - } - } - } - - NCBusyIndicator { - anchors.fill: parent - visible: root.isSharePermissionChangeInProgress - running: visible - z: 1 - } - } - - Loader { - Layout.fillWidth: true - - active: root.isLinkShare - visible: active - sourceComponent: ColumnLayout { - CheckBox { - id: hideDownloadEnabledMenuItem - - anchors.left: parent.left - anchors.right: parent.right - - spacing: scrollContentsColumn.indicatorSpacing - leftPadding: scrollContentsColumn.itemPadding - rightPadding: scrollContentsColumn.itemPadding - indicator.width: scrollContentsColumn.indicatorItemWidth - indicator.height: scrollContentsColumn.indicatorItemWidth - - checked: root.hideDownload - text: qsTr("Hide download") - enabled: !root.isHideDownloadInProgress - onClicked: root.toggleHideDownload(checked); - - NCBusyIndicator { - anchors.fill: parent - visible: root.isHideDownloadInProgress - running: visible - z: 1 - } - } - } - } CheckBox { id: passwordProtectEnabledMenuItem @@ -458,8 +295,7 @@ Page { Layout.fillWidth: true spacing: scrollContentsColumn.indicatorSpacing - leftPadding: scrollContentsColumn.itemPadding - rightPadding: scrollContentsColumn.itemPadding + padding: scrollContentsColumn.itemPadding indicator.width: scrollContentsColumn.indicatorItemWidth indicator.height: scrollContentsColumn.indicatorItemWidth @@ -475,62 +311,6 @@ Page { root.togglePasswordProtect(checked); root.waitingForPasswordProtectEnabledChange = true; } - - NCBusyIndicator { - anchors.fill: parent - visible: root.waitingForPasswordProtectEnabledChange - running: visible - z: 1 - } - } - - RowLayout { - Layout.fillWidth: true - - height: visible ? implicitHeight : 0 - spacing: scrollContentsColumn.indicatorSpacing - - visible: root.shareSupportsPassword && root.passwordProtectEnabled - - Image { - Layout.preferredWidth: scrollContentsColumn.indicatorItemWidth - Layout.fillHeight: true - - verticalAlignment: Image.AlignVCenter - horizontalAlignment: Image.AlignHCenter - fillMode: Image.Pad - - source: "image://svgimage-custom-color/lock-https.svg/" + palette.windowText - sourceSize.width: scrollContentsColumn.rowIconWidth - sourceSize.height: scrollContentsColumn.rowIconWidth - } - - NCInputTextField { - id: passwordTextField - - Layout.fillWidth: true - height: visible ? implicitHeight : 0 - - text: root.password !== "" ? root.password : root.passwordPlaceholder - enabled: visible && - root.passwordProtectEnabled && - !root.waitingForPasswordChange && - !root.waitingForPasswordProtectEnabledChange - - onAccepted: if(text !== root.password && text !== root.passwordPlaceholder) { - passwordErrorBoxLoader.message = ""; - root.setPassword(text); - root.waitingForPasswordChange = true; - } - - NCBusyIndicator { - anchors.fill: parent - visible: root.waitingForPasswordChange || - root.waitingForPasswordProtectEnabledChange - running: visible - z: 1 - } - } } Loader { @@ -551,7 +331,7 @@ Page { // Artificially add vertical padding implicitHeight: passwordErrorBox.implicitHeight + (Style.smallSpacing * 2) - ErrorBox { + SesErrorBox { id: passwordErrorBox anchors.left: parent.left anchors.right: parent.right @@ -562,14 +342,53 @@ Page { } } + TextEdit { + id: passwordTextEdit + visible: root.passwordProtectEnabled + Layout.fillWidth: true + Layout.leftMargin: 3 + Layout.rightMargin: 3 + height: visible ? 64 : 0 + wrapMode: TextEdit.Wrap + selectByMouse: true + text: root.password !== "" ? root.password : root.passwordPlaceholder + + font.family: root.font.family + font.pixelSize: pixelSize + font.weight: fontWeight + + padding: scrollContentsColumn.itemPadding + enabled: visible && + root.passwordProtectEnabled && + !root.waitingForPasswordChange && + !root.waitingForPasswordProtectEnabledChange + + onEditingFinished: if(text !== root.password && text !== root.passwordPlaceholder) { + passwordErrorBoxLoader.message = ""; + root.setPassword(text); + root.waitingForPasswordChange = true; + } + + Rectangle { + id: passwordTextBorder + anchors.fill: parent + radius: Style.slightlyRoundedButtonRadius + border.width: Style.thickBorderWidth + border.color: Style.sesTrayInputField + color: palette.base + z: -1 + } + } + CheckBox { id: expireDateEnabledMenuItem Layout.fillWidth: true + font.pixelSize: pixelSize + font.weight: fontWeight spacing: scrollContentsColumn.indicatorSpacing - leftPadding: scrollContentsColumn.itemPadding - rightPadding: scrollContentsColumn.itemPadding + padding: scrollContentsColumn.itemPadding indicator.width: scrollContentsColumn.indicatorItemWidth indicator.height: scrollContentsColumn.indicatorItemWidth @@ -582,79 +401,95 @@ Page { root.toggleExpirationDate(checked); root.waitingForExpireDateEnabledChange = true; } - - NCBusyIndicator { - anchors.fill: parent - visible: root.waitingForExpireDateEnabledChange - running: visible - z: 1 - } } - RowLayout { + NCInputDateField { + id: expireDateField + + font.pixelSize: pixelSize + font.weight: fontWeight + Layout.fillWidth: true + Layout.leftMargin: 3 + Layout.rightMargin: 3 height: visible ? implicitHeight : 0 - spacing: scrollContentsColumn.indicatorSpacing + leftPadding: 15 visible: root.expireDateEnabled - Image { - Layout.preferredWidth: scrollContentsColumn.indicatorItemWidth - Layout.fillHeight: true - - verticalAlignment: Image.AlignVCenter - horizontalAlignment: Image.AlignHCenter - fillMode: Image.Pad - - source: "image://svgimage-custom-color/calendar.svg/" + palette.windowText - sourceSize.width: scrollContentsColumn.rowIconWidth - sourceSize.height: scrollContentsColumn.rowIconWidth + selectByMouse: true + + dateInMs: root.expireDate + maximumDateMs: root.maximumExpireDate + minimumDateMs: { + const currentDate = new Date(); + const currentYear = currentDate.getFullYear(); + const currentMonth = currentDate.getMonth(); + const currentMonthDay = currentDate.getDate(); + // Start of day at 00:00:0000 UTC + return Date.UTC(currentYear, currentMonth, currentMonthDay + 1); } - NCInputDateField { - id: expireDateField - - Layout.fillWidth: true - height: visible ? implicitHeight : 0 - - dateInMs: root.expireDate - maximumDateMs: root.maximumExpireDate - minimumDateMs: { - const currentDate = new Date(); - const currentYear = currentDate.getFullYear(); - const currentMonth = currentDate.getMonth(); - const currentMonthDay = currentDate.getDate(); - // Start of day at 00:00:0000 UTC - return Date.UTC(currentYear, currentMonth, currentMonthDay + 1); - } - - enabled: root.expireDateEnabled && - !root.waitingForExpireDateChange && - !root.waitingForExpireDateEnabledChange + enabled: root.expireDateEnabled && + !root.waitingForExpireDateChange && + !root.waitingForExpireDateEnabledChange - onUserAcceptedDate: { - root.setExpireDate(dateInMs); - root.waitingForExpireDateChange = true; - } + onUserAcceptedDate: { + root.setExpireDate(dateInMs); + root.waitingForExpireDateChange = true; + } - NCBusyIndicator { - anchors.fill: parent - visible: root.waitingForExpireDateEnabledChange || - root.waitingForExpireDateChange - running: visible - z: 1 - } + Rectangle { + id: dateTextBorder + anchors.fill: parent + radius: Style.slightlyRoundedButtonRadius + border.width: Style.thickBorderWidth + border.color: Style.sesTrayInputField + color: palette.base + z: -1 } } + + ColumnLayout { + Layout.fillWidth: true + height: visible ? implicitHeight : 0 + spacing: Style.extraSmallSpacing CheckBox { id: noteEnabledMenuItem Layout.fillWidth: true + // TODO: Rather than setting all these palette colours manually, + // create a custom style and do it for all components globally. + // + // Additionally, we need to override the entire palette when we + // set one palette property, as otherwise we default back to the + // theme palette -- not the parent palette + palette { + text: Style.ncTextColor + windowText: Style.ncTextColor + buttonText: Style.ncTextColor + brightText: Style.ncTextBrightColor + highlight: Style.lightHover + highlightedText: Style.ncTextColor + light: Style.lightHover + midlight: Style.ncSecondaryTextColor + mid: Style.darkerHover + dark: Style.menuBorder + button: Style.buttonBackgroundColor + window: Style.menuBorder + base: Style.backgroundColor + toolTipBase: Style.backgroundColor + toolTipText: Style.ncTextColor + } + + font.pixelSize: pixelSize + font.weight: fontWeight + + spacing: scrollContentsColumn.indicatorSpacing - leftPadding: scrollContentsColumn.itemPadding - rightPadding: scrollContentsColumn.itemPadding + padding: scrollContentsColumn.itemPadding indicator.width: scrollContentsColumn.indicatorItemWidth indicator.height: scrollContentsColumn.indicatorItemWidth @@ -669,92 +504,339 @@ Page { root.waitingForNoteChange = true; } } + } + + Text{ + text: qsTr("Enter the note to recipient") + color: Style.sesGray + padding: scrollContentsColumn.itemPadding + visible: root.noteEnabled + font.family: root.font.family + font.pixelSize: pixelSize + font.weight: fontWeight + } - NCBusyIndicator { - anchors.fill: parent - visible: root.waitingForNoteChange && !noteEnabledMenuItem.checked - running: visible - z: 1 + TextEdit { + id: noteTextEdit + visible: root.noteEnabled + font.family: root.font.family + font.pixelSize: pixelSize + font.weight: fontWeight + Layout.fillWidth: true + Layout.leftMargin: 3 + Layout.rightMargin: 3 + height: visible ? 64 : 0 + wrapMode: TextEdit.Wrap + selectByMouse: true + padding: scrollContentsColumn.itemPadding + enabled: root.noteEnabled && + !root.waitingForNoteChange && + !root.waitingForNoteEnabledChange + + onEditingFinished: if(text !== "") { + root.setNote(text); + root.waitingForNoteChange = true; + } + + Rectangle { + id: noteTextBorder + anchors.fill: parent + radius: Style.slightlyRoundedButtonRadius + border.width: Style.thickBorderWidth + border.color: Style.sesTrayInputField + color: palette.base + z: -1 + } } - } + } - RowLayout { + Loader { Layout.fillWidth: true - height: visible ? implicitHeight : 0 - spacing: scrollContentsColumn.indicatorSpacing + active: !root.isFolderItem && !root.isEncryptedItem + visible: active + sourceComponent: CheckBox { + // TODO: Rather than setting all these palette colours manually, + // create a custom style and do it for all components globally. + // + // Additionally, we need to override the entire palette when we + // set one palette property, as otherwise we default back to the + // theme palette -- not the parent palette + palette { + text: Style.ncTextColor + windowText: Style.ncTextColor + buttonText: Style.ncTextColor + brightText: Style.ncTextBrightColor + highlight: Style.lightHover + highlightedText: Style.ncTextColor + light: Style.lightHover + midlight: Style.ncSecondaryTextColor + mid: Style.darkerHover + dark: Style.menuBorder + button: Style.buttonBackgroundColor + window: Style.menuBorder + base: Style.backgroundColor + toolTipBase: Style.backgroundColor + toolTipText: Style.ncTextColor + } - visible: noteEnabledMenuItem.checked + font.pixelSize: pixelSize + font.weight: fontWeight - Image { - Layout.preferredWidth: scrollContentsColumn.indicatorItemWidth - Layout.fillHeight: true + spacing: scrollContentsColumn.indicatorSpacing + padding: scrollContentsColumn.itemPadding + indicator.width: scrollContentsColumn.indicatorItemWidth + indicator.height: scrollContentsColumn.indicatorItemWidth - verticalAlignment: Image.AlignVCenter - horizontalAlignment: Image.AlignHCenter - fillMode: Image.Pad + checkable: true + checked: root.editingAllowed + text: qsTr("Allow upload and editing") + enabled: !root.isSharePermissionChangeInProgress - source: "image://svgimage-custom-color/edit.svg/" + palette.windowText - sourceSize.width: scrollContentsColumn.rowIconWidth - sourceSize.height: scrollContentsColumn.rowIconWidth + onClicked: root.toggleAllowEditing(checked) } + } - NCInputTextArea { - id: noteTextArea + Loader { + Layout.fillWidth: true + active: root.isFolderItem && !root.isEncryptedItem + visible: active + sourceComponent: ColumnLayout { + id: permissionRadioButtonsLayout + spacing: 0 + width: parent.width - Layout.fillWidth: true - // no height here -- let the textarea figure it out how much it needs - submitButton.height: Math.min(Style.talkReplyTextFieldPreferredHeight, height - 2) + ButtonGroup { + id: permissionModeRadioButtonsGroup + } - text: root.note - placeholderText: qsTr("Enter a note for the recipient") - enabled: noteEnabledMenuItem.checked && !root.waitingForNoteChange + CheckBox { + id: customPermissionsCheckBox + Layout.fillWidth: true + enabled: !root.isSharePermissionChangeInProgress + checked: root.currentPermissionMode === permissionMode + text: qsTr("Custom Permissions") + spacing: scrollContentsColumn.indicatorSpacing + padding: scrollContentsColumn.itemPadding + indicator.width: scrollContentsColumn.indicatorItemWidth + indicator.height: scrollContentsColumn.indicatorItemWidth + onClicked: root.permissionModeChanged(permissionMode) + font.pixelSize: pixelSize + font.weight: fontWeight + } - onEditingFinished: if (text !== "" && text !== root.note) { - root.setNote(text); - root.waitingForNoteChange = true; + CheckBox { + readonly property int permissionMode: ShareModel.ModeViewOnly + Layout.fillWidth: true + Layout.leftMargin: 30 + ButtonGroup.group: permissionModeRadioButtonsGroup + enabled: !root.isSharePermissionChangeInProgress + checked: root.currentPermissionMode === permissionMode + text: qsTr("View only") + indicator.width: scrollContentsColumn.indicatorItemWidth + indicator.height: scrollContentsColumn.indicatorItemWidth + spacing: scrollContentsColumn.indicatorSpacing + padding: scrollContentsColumn.itemPadding + onClicked: root.permissionModeChanged(permissionMode) + visible: customPermissionsCheckBox.checked + font.pixelSize: pixelSize + font.weight: fontWeight } - NCBusyIndicator { - anchors.fill: parent - visible: root.waitingForNoteChange && noteEnabledMenuItem.checked - running: visible - z: 1 + CheckBox { + readonly property int permissionMode: ShareModel.ModeUploadAndEditing + Layout.fillWidth: true + Layout.leftMargin: 30 + ButtonGroup.group: permissionModeRadioButtonsGroup + enabled: !root.isSharePermissionChangeInProgress + checked: root.currentPermissionMode === permissionMode + text: qsTr("Allow upload and editing") + indicator.width: scrollContentsColumn.indicatorItemWidth + indicator.height: scrollContentsColumn.indicatorItemWidth + spacing: scrollContentsColumn.indicatorSpacing + padding: scrollContentsColumn.itemPadding + onClicked: root.permissionModeChanged(permissionMode) + visible: customPermissionsCheckBox.checked + font.pixelSize: pixelSize + font.weight: fontWeight + } + + CheckBox { + readonly property int permissionMode: ShareModel.ModeFileDropOnly + Layout.fillWidth: true + Layout.leftMargin: 30 + ButtonGroup.group: permissionModeRadioButtonsGroup + enabled: !root.isSharePermissionChangeInProgress + checked: root.currentPermissionMode === permissionMode + text: qsTr("File drop (upload only)") + indicator.width: scrollContentsColumn.indicatorItemWidth + indicator.height: scrollContentsColumn.indicatorItemWidth + spacing: scrollContentsColumn.indicatorSpacing + padding: scrollContentsColumn.itemPadding + onClicked: root.permissionModeChanged(permissionMode) + visible: customPermissionsCheckBox.checked + font.pixelSize: pixelSize + font.weight: fontWeight } } } - Button { - height: Style.standardPrimaryButtonHeight - icon.source: "image://svgimage-custom-color/close.svg/" + palette.buttonText - icon.height: Style.extraSmallIconSize - text: qsTr("Unshare") - onClicked: root.deleteShare() + CheckBox { + id: allowResharingCheckBox + + Layout.fillWidth: true + + // TODO: Rather than setting all these palette colours manually, + // create a custom style and do it for all components globally. + // + // Additionally, we need to override the entire palette when we + // set one palette property, as otherwise we default back to the + // theme palette -- not the parent palette + palette { + text: Style.ncTextColor + windowText: Style.ncTextColor + buttonText: Style.ncTextColor + brightText: Style.ncTextBrightColor + highlight: Style.lightHover + highlightedText: Style.ncTextColor + light: Style.lightHover + midlight: Style.ncSecondaryTextColor + mid: Style.darkerHover + dark: Style.menuBorder + button: Style.buttonBackgroundColor + window: palette.dark // NOTE: Fusion theme uses darker window colour for the border of the checkbox + base: Style.backgroundColor + toolTipBase: Style.backgroundColor + toolTipText: Style.ncTextColor + } + + font.pixelSize: pixelSize + font.weight: fontWeight + + spacing: scrollContentsColumn.indicatorSpacing + padding: scrollContentsColumn.itemPadding + indicator.width: scrollContentsColumn.indicatorItemWidth + indicator.height: scrollContentsColumn.indicatorItemWidth + + checkable: true + checked: root.resharingAllowed + text: qsTr("Allow resharing") + enabled: !root.isSharePermissionChangeInProgress && root.serverAllowsResharing + visible: root.serverAllowsResharing + onClicked: root.toggleAllowResharing(checked); + + Connections { + target: root + onResharingAllowedChanged: allowResharingCheckBox.checked = root.resharingAllowed + } } - Button { - height: Style.standardPrimaryButtonHeight - icon.source: "image://svgimage-custom-color/add.svg/" + palette.buttonText - icon.height: Style.extraSmallIconSize - text: qsTr("Add another link") - visible: root.isLinkShare && root.canCreateLinkShares - enabled: visible - onClicked: root.createNewLinkShare() + Loader { + Layout.fillWidth: true + + active: root.isLinkShare + visible: active + sourceComponent: ColumnLayout { + CheckBox { + id: hideDownloadEnabledMenuItem + + anchors.left: parent.left + anchors.right: parent.right + + // TODO: Rather than setting all these palette colours manually, + // create a custom style and do it for all components globally. + // + // Additionally, we need to override the entire palette when we + // set one palette property, as otherwise we default back to the + // theme palette -- not the parent palette + palette { + text: Style.ncTextColor + windowText: Style.ncTextColor + buttonText: Style.ncTextColor + brightText: Style.ncTextBrightColor + highlight: Style.lightHover + highlightedText: Style.ncTextColor + light: Style.lightHover + midlight: Style.ncSecondaryTextColor + mid: Style.darkerHover + dark: Style.menuBorder + button: Style.buttonBackgroundColor + window: palette.dark // NOTE: Fusion theme uses darker window colour for the border of the checkbox + base: Style.backgroundColor + toolTipBase: Style.backgroundColor + toolTipText: Style.ncTextColor + } + + font.pixelSize: pixelSize + font.weight: fontWeight + + spacing: scrollContentsColumn.indicatorSpacing + padding: scrollContentsColumn.itemPadding + indicator.width: scrollContentsColumn.indicatorItemWidth + indicator.height: scrollContentsColumn.indicatorItemWidth + + checked: root.hideDownload + text: qsTr("Hide download") + enabled: !root.isHideDownloadInProgress + onClicked: root.toggleHideDownload(checked); + } + } } } } - footer: DialogButtonBox { - topPadding: 0 - bottomPadding: root.padding - rightPadding: root.padding - leftPadding: root.padding - alignment: Qt.AlignRight | Qt.AlignVCenter - contentWidth: (contentItem as ListView).contentWidth - visible: copyShareLinkButton.visible + footer: GridLayout { + id: buttonGrid + + columns: 1 + rows: 2 + + SesCustomButton { + Layout.columnSpan: buttonGrid.columns - background: Rectangle { color: "transparent" } + icon.source: Style.sesLightPlus - Button { + font.pixelSize: pixelSize + font.weight: fontWeight + text: qsTr("Add another link") + textColor: palette.brightText + + bgColor: Style.sesActionPressed + bgNormalOpacity: 1.0 + bgHoverOpacity: Style.hoverOpacity + + visible: root.isLinkShare && root.canCreateLinkShares + enabled: visible + + Layout.leftMargin: 16 + Layout.bottomMargin: 16 + Layout.row: 0 + + onClicked: root.createNewLinkShare() + } + + SesCustomButton { + id: unshareButton + + font.pixelSize: pixelSize + font.weight: fontWeight + text: qsTr("Unshare") + textColor: Style.sesActionPressed + + bgColor: palette.highlight + bgNormalOpacity: 1.0 + + bgBorderWidth: 2 + bgBorderColor: Style.sesActionPressed + bgHoverOpacity: Style.hoverOpacity + + Layout.bottomMargin: 16 + Layout.leftMargin: 16 + Layout.rightMargin: 60 + Layout.row: 1 + onClicked: root.deleteShare() + } + + SesCustomButton { id: copyShareLinkButton function copyShareLink() { @@ -769,21 +851,35 @@ Page { property bool shareLinkCopied: false - height: Style.standardPrimaryButtonHeight - - Layout.preferredWidth: Style.activityListButtonWidth - Layout.preferredHeight: Style.activityListButtonHeight - Layout.alignment: Qt.AlignHCenter | Qt.AlignVCenter + icon.source: Style.sesClipboard - icon.source: "image://svgimage-custom-color/copy.svg/" + palette.brightText - icon.width: Style.smallIconSize - icon.height: Style.smallIconSize + font.pixelSize: pixelSize + font.weight: fontWeight text: shareLinkCopied ? qsTr("Share link copied!") : qsTr("Copy share link") + textColor: palette.brightText + + bgColor: Style.sesActionPressed + bgNormalOpacity: 1.0 + bgHoverOpacity: shareLinkCopied ? 1.0 : Style.hoverOpacity + visible: root.isLinkShare enabled: visible onClicked: copyShareLink() + Layout.alignment: Qt.AlignRight + Layout.bottomMargin: 16 + Layout.rightMargin: 20 + Layout.row: 1 + + Behavior on bgColor { + ColorAnimation { duration: Style.shortAnimationDuration } + } + + Behavior on bgHoverOpacity { + NumberAnimation { duration: Style.shortAnimationDuration } + } + Behavior on Layout.preferredWidth { SmoothedAnimation { duration: Style.shortAnimationDuration } } diff --git a/src/gui/filedetails/ShareView.qml b/src/gui/filedetails/ShareView.qml index f68529ec5e52b..1b5aa8d63dd6d 100644 --- a/src/gui/filedetails/ShareView.qml +++ b/src/gui/filedetails/ShareView.qml @@ -20,6 +20,7 @@ import QtQuick.Controls import com.ionos.hidrivenext.desktopclient import Style import "../tray" +import "../SesComponents" import "../" ColumnLayout { @@ -123,20 +124,14 @@ ColumnLayout { } } - ErrorBox { + SesErrorBox { id: errorBox Layout.fillWidth: true Layout.leftMargin: root.horizontalPadding Layout.rightMargin: root.horizontalPadding - showCloseButton: true visible: false - - onCloseButtonClicked: { - text = ""; - visible = false; - } } RowLayout { @@ -173,6 +168,7 @@ ColumnLayout { Layout.topMargin: Style.smallSpacing Layout.leftMargin: root.horizontalPadding Layout.rightMargin: root.horizontalPadding + Layout.preferredHeight: Style.sesSearchFieldHeight visible: root.userGroupSharingPossible enabled: visible && !root.loading && !root.shareModel.isShareDisabledEncryptedFolder && !shareeSearchField.isShareeFetchOngoing @@ -194,6 +190,7 @@ ColumnLayout { Layout.fillHeight: true Layout.leftMargin: root.horizontalPadding Layout.rightMargin: root.horizontalPadding + Layout.topMargin: Style.sesMediumMargin active: root.sharingPossible @@ -215,7 +212,9 @@ ColumnLayout { sourceModel: root.shareModel } - delegate: ShareDelegate { + delegate: ColumnLayout{ + width: parent.width + ShareDelegate { id: shareDelegate Connections { @@ -245,7 +244,7 @@ ColumnLayout { fileDetails: root.fileDetails rootStackView: root.rootStackView backgroundsVisible: root.backgroundsVisible - accentColor: root.accentColor + accentColor: Style.sesIconColor canCreateLinkShares: root.publicLinkSharingPossible serverAllowsResharing: root.serverAllowsResharing @@ -269,6 +268,14 @@ ColumnLayout { onSetExpireDate: shareModel.setShareExpireDateFromQml(model.share, milliseconds) onSetPassword: shareModel.setSharePasswordFromQml(model.share, password) onSetNote: shareModel.setShareNoteFromQml(model.share, note) + width: parent.width + } + + Rectangle{ + height: Style.sesMediumMargin + color: "transparent" + width: parent.width + } } Loader { @@ -311,6 +318,7 @@ ColumnLayout { id: sharingDisabledLabel width: parent.width text: qsTr("Sharing is disabled") + color: palette.midlight wrapMode: Text.Wrap horizontalAlignment: Text.AlignHCenter verticalAlignment: Text.AlignVCenter @@ -318,6 +326,7 @@ ColumnLayout { EnforcedPlainTextLabel { width: parent.width text: qsTr("This item cannot be shared.") + color: palette.midlight wrapMode: Text.Wrap horizontalAlignment: Text.AlignHCenter verticalAlignment: Text.AlignVCenter @@ -326,6 +335,7 @@ ColumnLayout { EnforcedPlainTextLabel { width: parent.width text: qsTr("Sharing is disabled.") + color: palette.midlight wrapMode: Text.Wrap horizontalAlignment: Text.AlignHCenter verticalAlignment: Text.AlignVCenter diff --git a/src/gui/filedetails/ShareeDelegate.qml b/src/gui/filedetails/ShareeDelegate.qml index 03f07b5f826b2..5f8701544395d 100644 --- a/src/gui/filedetails/ShareeDelegate.qml +++ b/src/gui/filedetails/ShareeDelegate.qml @@ -62,6 +62,9 @@ ItemDelegate { Layout.preferredHeight: unifiedSearchResultSkeletonItemDetails.iconWidth Layout.alignment: Qt.AlignVCenter | Qt.AlignLeft + font.pixelSize: Style.sesFontPixelSize + font.weight: Style.sesFontNormalWeight + Layout.fillWidth: true horizontalAlignment: Text.AlignLeft diff --git a/src/gui/filedetails/ShareeSearchField.qml b/src/gui/filedetails/ShareeSearchField.qml index 4fbaceb872f58..74aaf768f24cd 100644 --- a/src/gui/filedetails/ShareeSearchField.qml +++ b/src/gui/filedetails/ShareeSearchField.qml @@ -38,6 +38,7 @@ TextField { } readonly property int horizontalPaddingOffset: Style.trayHorizontalMargin + readonly property color placeholderColor: Style.sesSearchFieldContent readonly property double iconsScaleFactor: 0.6 function triggerSuggestionsVisibility() { @@ -45,9 +46,11 @@ TextField { } placeholderText: enabled ? qsTr("Search for users or groups…") : qsTr("Sharing is not available for this folder") + placeholderTextColor: placeholderColor verticalAlignment: Qt.AlignVCenter implicitHeight: Math.max(Style.talkReplyTextFieldPreferredHeight, contentHeight) + onActiveFocusChanged: triggerSuggestionsVisibility() onTextChanged: triggerSuggestionsVisibility() Keys.onPressed: { @@ -87,8 +90,15 @@ TextField { } } - leftPadding: searchIcon.width + searchIcon.anchors.leftMargin + horizontalPaddingOffset - rightPadding: clearTextButton.width + clearTextButton.anchors.rightMargin + horizontalPaddingOffset + leftPadding: searchIcon.width + searchIcon.anchors.leftMargin + horizontalPaddingOffset - 5 + rightPadding: root.text ? clearTextButton.width + clearTextButton.anchors.rightMargin + horizontalPaddingOffset : 5 + + background: Rectangle { + radius: 5 + border.color: Style.sesMenuBorder + border.width: 1 + + } Image { id: searchIcon @@ -107,7 +117,7 @@ TextField { fillMode: Image.PreserveAspectFit horizontalAlignment: Image.AlignLeft - source: "image://svgimage-custom-color/search.svg" + "/" + palette.placeholderText + source: "image://svgimage-custom-color/search.svg" + "/" + Style.sesSearchFieldContent sourceSize: Qt.size(parent.height * root.iconsScaleFactor, parent.height * root.iconsScaleFactor) visible: !root.shareeModel.fetchOngoing diff --git a/src/gui/filedetails/shareemodel.cpp b/src/gui/filedetails/shareemodel.cpp index 9710de710715b..9018bfa832839 100644 --- a/src/gui/filedetails/shareemodel.cpp +++ b/src/gui/filedetails/shareemodel.cpp @@ -23,7 +23,7 @@ namespace OCC { -Q_LOGGING_CATEGORY(lcShareeModel, "com.nextcloud.shareemodel") +Q_LOGGING_CATEGORY(lcShareeModel, "com.ionos.hidrivenext.shareemodel") ShareeModel::ShareeModel(QObject *parent) : QAbstractListModel(parent) diff --git a/src/gui/filedetails/sharemodel.cpp b/src/gui/filedetails/sharemodel.cpp index 8c55a7b8c92e2..283f496c2d01e 100644 --- a/src/gui/filedetails/sharemodel.cpp +++ b/src/gui/filedetails/sharemodel.cpp @@ -37,7 +37,7 @@ static const auto secureFileDropPlaceholderLinkShareId = QStringLiteral("__secur namespace OCC { -Q_LOGGING_CATEGORY(lcShareModel, "com.nextcloud.sharemodel") +Q_LOGGING_CATEGORY(lcShareModel, "com.ionos.hidrivenext.sharemodel") ShareModel::ShareModel(QObject *parent) : QAbstractListModel(parent) @@ -782,11 +782,11 @@ QString ShareModel::iconUrlForShare(const SharePtr &share) const switch(share->getShareType()) { case Share::TypeInternalLink: - return QString(iconsPath + QStringLiteral("external.svg")); + return QString(iconsPath + QStringLiteral("externalLink.svg")); case Share::TypePlaceholderLink: case Share::TypeSecureFileDropPlaceholderLink: case Share::TypeLink: - return QString(iconsPath + QStringLiteral("public.svg")); + return QString(iconsPath + QStringLiteral("link.svg")); case Share::TypeEmail: return QString(iconsPath + QStringLiteral("email.svg")); case Share::TypeRoom: diff --git a/src/gui/filedetails/sortedsharemodel.cpp b/src/gui/filedetails/sortedsharemodel.cpp index 9b9ef99a644bd..bcc5f3a06fd18 100644 --- a/src/gui/filedetails/sortedsharemodel.cpp +++ b/src/gui/filedetails/sortedsharemodel.cpp @@ -16,7 +16,7 @@ namespace OCC { -Q_LOGGING_CATEGORY(lcSortedShareModel, "com.nextcloud.sortedsharemodel") +Q_LOGGING_CATEGORY(lcSortedShareModel, "com.ionos.hidrivenext.sortedsharemodel") SortedShareModel::SortedShareModel(QObject *parent) : QSortFilterProxyModel(parent) From 184e95a129a048609c3f947335c89968e80260f5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Christopher=20H=C3=A4tty?= Date: Fri, 17 Jan 2025 09:46:58 +0100 Subject: [PATCH 014/371] style credentials 610aa56efe5a55f9cbc90d401e2864421ddf6c2b --- src/gui/creds/webflowcredentials.cpp | 4 ++-- src/gui/creds/webflowcredentialsdialog.cpp | 23 +++++++++++++++++++--- src/libsync/account.cpp | 9 +++++++++ src/libsync/account.h | 1 + 4 files changed, 32 insertions(+), 5 deletions(-) diff --git a/src/gui/creds/webflowcredentials.cpp b/src/gui/creds/webflowcredentials.cpp index d5618307247be..58ad6dc613812 100644 --- a/src/gui/creds/webflowcredentials.cpp +++ b/src/gui/creds/webflowcredentials.cpp @@ -163,8 +163,8 @@ void WebFlowCredentials::askFromUser() { _askDialog->setUrl(url); } - QString msg = tr("You have been logged out of your account %1 at %2. Please login again.") - .arg(_account->prettyName(), _account->url().toDisplayString()); + QString msg = tr("You have been logged out of your account %1 at %2. Please login again.") + .arg(_account->eliedName(200), _account->url().toDisplayString()); _askDialog->setInfo(msg); _askDialog->show(); diff --git a/src/gui/creds/webflowcredentialsdialog.cpp b/src/gui/creds/webflowcredentialsdialog.cpp index 4178b0bd73586..70705920d781d 100644 --- a/src/gui/creds/webflowcredentialsdialog.cpp +++ b/src/gui/creds/webflowcredentialsdialog.cpp @@ -6,7 +6,7 @@ #include "application.h" #include "owncloudgui.h" #include "wizard/owncloudwizardcommon.h" - +#include "ionostheme.h" #ifdef WITH_WEBENGINE #include "wizard/webview.h" #endif // WITH_WEBENGINE @@ -24,6 +24,11 @@ WebFlowCredentialsDialog::WebFlowCredentialsDialog(Account *account, bool useFlo { setWindowFlags(windowFlags() & ~Qt::WindowContextHelpButtonHint); + setStyleSheet(QStringLiteral("QDialog { background-color: %1; }").arg(IonosTheme::dialogBackgroundColor())); + + setFixedWidth(646); + setSizePolicy(QSizePolicy(QSizePolicy::Minimum, QSizePolicy::Minimum)); + _layout = new QVBoxLayout(this); int spacing = _layout->spacing(); auto margin = _layout->contentsMargins(); @@ -35,12 +40,24 @@ WebFlowCredentialsDialog::WebFlowCredentialsDialog(Account *account, bool useFlo _containerLayout->setContentsMargins(margin); _infoLabel = new QLabel(); - _infoLabel->setTextFormat(Qt::PlainText); + _infoLabel->setTextFormat(Qt::RichText); _infoLabel->setAlignment(Qt::AlignCenter); + _infoLabel->setWordWrap(true); + _infoLabel->setContentsMargins(0, 32, 0, 0); + _infoLabel->setStyleSheet(IonosTheme::fontConfigurationCss( + IonosTheme::settingsFont(), + IonosTheme::settingsTextSize(), + IonosTheme::settingsTitleWeight600(), + IonosTheme::titleColor() + )); _containerLayout->addWidget(_infoLabel); + layout()->setSizeConstraint(QLayout::SetFixedSize); + if (_useFlow2) { _flow2AuthWidget = new Flow2AuthWidget(); + _flow2AuthWidget->shrinkTopMarginForText(); + _containerLayout->addWidget(_flow2AuthWidget); connect(_flow2AuthWidget, &Flow2AuthWidget::authResult, this, &WebFlowCredentialsDialog::slotFlow2AuthResult); @@ -117,7 +134,7 @@ void WebFlowCredentialsDialog::setError(const QString &error) { slotShowSettingsDialog(); if (_useFlow2 && _flow2AuthWidget) { - _flow2AuthWidget->setError(error); + _flow2AuthWidget->setError("Error", error); return; } diff --git a/src/libsync/account.cpp b/src/libsync/account.cpp index bb0a0e117b803..30031ea5f6b6d 100644 --- a/src/libsync/account.cpp +++ b/src/libsync/account.cpp @@ -52,6 +52,8 @@ #include #include #include +#include +#include #include @@ -214,6 +216,13 @@ QString Account::prettyName() const return name; } +QString Account::eliedName(const int size) const +{ + QFontMetrics fontMetrics(QApplication::font()); + QString elidedName = fontMetrics.elidedText(prettyName(), Qt::ElideMiddle, size); + return elidedName; +} + QColor Account::serverColor() const { return _serverColor; diff --git a/src/libsync/account.h b/src/libsync/account.h index 041144387d454..4ea1cf8b6199b 100644 --- a/src/libsync/account.h +++ b/src/libsync/account.h @@ -157,6 +157,7 @@ class OWNCLOUDSYNC_EXPORT Account : public QObject /// e.g. the actual name of the user (John Doe). If this cannot be /// provided, defaults to davUser (e.g. johndoe) [[nodiscard]] QString prettyName() const; + [[nodiscard]] QString eliedName(const int size) const; [[nodiscard]] QColor accentColor() const; [[nodiscard]] QColor headerColor() const; From 7aea97d6cd00491b7486dcad80aa61d544c764cb Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Christopher=20H=C3=A4tty?= Date: Fri, 17 Jan 2025 14:23:46 +0100 Subject: [PATCH 015/371] style settings - account-settings 4c098926161b45c8144aae31d048b03234e85d88 --- src/gui/accountsettings.cpp | 256 ++++++++++++++++++++++++++------- src/gui/accountsettings.h | 7 + src/gui/accountsettings.ui | 59 +++++++- src/gui/folderstatusdelegate.h | 1 + 4 files changed, 271 insertions(+), 52 deletions(-) diff --git a/src/gui/accountsettings.cpp b/src/gui/accountsettings.cpp index 551d60450575c..78961d1a681aa 100644 --- a/src/gui/accountsettings.cpp +++ b/src/gui/accountsettings.cpp @@ -20,6 +20,9 @@ #include "ui_accountsettings.h" #include "theme.h" +#include "ionostheme.h" +#include "buttonstyle.h" +#include "account.h" #include "foldercreationdialog.h" #include "folderman.h" #include "folderwizard.h" @@ -65,8 +68,6 @@ #include "macOS/fileprovider.h" #endif -#include "account.h" - namespace { constexpr auto propertyFolder = "folder"; constexpr auto propertyPath = "path"; @@ -83,15 +84,13 @@ class AccountSettings; Q_LOGGING_CATEGORY(lcAccountSettings, "nextcloud.gui.account.settings", QtInfoMsg) -static const char progressBarStyleC[] = - "QProgressBar {" - "border: 1px solid grey;" - "border-radius: 5px;" - "text-align: center;" - "}" - "QProgressBar::chunk {" - "background-color: %1; width: 1px;" - "}"; +const QString progressBarStyle() +{ + return QStringLiteral( + "QProgressBar { border: 1px solid grey; border-radius: 5px; text-align: center; }" + "QProgressBar::chunk { background-color: %1; width: 1px; }" + ); +} void showEnableE2eeWithVirtualFilesWarningDialog(std::function onAccept) { @@ -164,7 +163,7 @@ class MouseCursorChanger : public QObject const auto index = folderList->indexAt(pos); if (model->classify(index) == FolderStatusModel::RootFolder && (FolderStatusDelegate::errorsListRect(folderList->visualRect(index)).contains(pos) || - FolderStatusDelegate::optionsButtonRect(folderList->visualRect(index),folderList->layoutDirection()).contains(pos))) { + FolderStatusDelegate::optionsButtonRect(folderList->visualRect(index), folderList->layoutDirection()).contains(pos))) { shape = Qt::PointingHandCursor; } folderList->setCursor(shape); @@ -190,6 +189,8 @@ AccountSettings::AccountSettings(AccountState *accountState, QWidget *parent) // Connect styleChanged events to our widgets, so they can adapt (Dark-/Light-Mode switching) connect(this, &AccountSettings::styleChanged, delegate, &FolderStatusDelegate::slotStyleChanged); + _ui->_folderList->setFont(IonosTheme::settingsFontDefault()); + _ui->_folderList->header()->hide(); _ui->_folderList->setItemDelegate(delegate); _ui->_folderList->setModel(_model); @@ -210,6 +211,8 @@ AccountSettings::AccountSettings(AccountState *accountState, QWidget *parent) fpSettingsLayout->setContentsMargins(0, 0, 0, 0); fpSettingsLayout->addWidget(fpSettingsWidget); fileProviderTab->setLayout(fpSettingsLayout); + } else { + disguiseTabWidget(); } #else const auto tabWidget = _ui->tabWidget; @@ -234,6 +237,10 @@ AccountSettings::AccountSettings(AccountState *accountState, QWidget *parent) _ui->_folderList->setAttribute(Qt::WA_Hover, true); _ui->_folderList->installEventFilter(mouseCursorChanger); +#ifdef Q_OS_MAC + _ui->expandMemoryButton->setAutoDefault(false); +#endif + connect(this, &AccountSettings::removeAccountFolders, AccountManager::instance(), &AccountManager::removeAccountFolders); connect(_ui->_folderList, &QWidget::customContextMenuRequested, @@ -276,11 +283,6 @@ AccountSettings::AccountSettings(AccountState *accountState, QWidget *parent) connect(FolderMan::instance(), &FolderMan::folderListChanged, _model, &FolderStatusModel::resetFolders); connect(this, &AccountSettings::folderChanged, _model, &FolderStatusModel::resetFolders); - - // quotaProgressBar style now set in customizeStyle() - /*QColor color = palette().highlight().color(); - _ui->quotaProgressBar->setStyleSheet(QString::fromLatin1(progressBarStyleC).arg(color.name()));*/ - // Connect E2E stuff initializeE2eEncryption(); _ui->encryptionMessage->setCloseButtonVisible(false); @@ -293,6 +295,8 @@ AccountSettings::AccountSettings(AccountState *accountState, QWidget *parent) connect(&_userInfo, &UserInfo::quotaUpdated, this, &AccountSettings::slotUpdateQuota); + connect(_ui->expandMemoryButton, &QAbstractButton::clicked, this, &AccountSettings::slotExpandMemoryClicked); + customizeStyle(); connect(_accountState->account()->e2e(), &ClientSideEncryption::startingDiscoveryEncryptionUsbToken, @@ -560,14 +564,17 @@ void AccountSettings::openIgnoredFilesDialog(const QString & absFolderPath) const QString ignoreFile{absFolderPath + ".sync-exclude.lst"}; const auto layout = new QVBoxLayout(); const auto ignoreListWidget = new IgnoreListTableWidget(this); + ignoreListWidget->setFont(IonosTheme::settingsFont()); ignoreListWidget->readIgnoreFile(ignoreFile); layout->addWidget(ignoreListWidget); const auto buttonBox = new QDialogButtonBox(QDialogButtonBox::Ok | QDialogButtonBox::Cancel); + customizeButtonBox(buttonBox); layout->addWidget(buttonBox); const auto dialog = new QDialog(); dialog->setLayout(layout); + dialog->setStyleSheet(QStringLiteral("QDialog { background-color: %1; }").arg(IonosTheme::dialogBackgroundColor())); connect(buttonBox, &QDialogButtonBox::clicked, [=](QAbstractButton * button) { if (buttonBox->buttonRole(button) == QDialogButtonBox::AcceptRole) { @@ -577,9 +584,28 @@ void AccountSettings::openIgnoredFilesDialog(const QString & absFolderPath) }); connect(buttonBox, &QDialogButtonBox::rejected, dialog, &QDialog::close); + dialog->setPalette(QPalette(QPalette::Window, IonosTheme::white())); + dialog->setWindowFlags(windowFlags() & ~Qt::WindowContextHelpButtonHint); + dialog->open(); } +void AccountSettings::customizeButtonBox(QDialogButtonBox *buttonBox){ + buttonBox->layout()->setSpacing(16); + buttonBox->setContentsMargins(0,0,11,10); + + const auto okButton = buttonBox->button(QDialogButtonBox::Ok); + + okButton->setProperty("buttonStyle", QVariant::fromValue(ButtonStyleName::Primary)); + okButton->setMinimumSize(80, 40); + + buttonBox->button(QDialogButtonBox::Cancel)->setMinimumSize(80, 40); + +#if defined(Q_OS_MAC) + buttonBox->layout()->setSpacing(32); +#endif +} + void AccountSettings::slotSubfolderContextMenuRequested(const QModelIndex& index, const QPoint& pos) { Q_UNUSED(pos); @@ -642,11 +668,56 @@ void AccountSettings::slotSubfolderContextMenuRequested(const QModelIndex& index ac = availabilityMenu->addAction(Utility::vfsFreeSpaceActionText()); connect(ac, &QAction::triggered, this, [this, folder, path] { slotSetSubFolderAvailability(folder, path, PinState::OnlineOnly); }); + + styleCustomContextMenu(availabilityMenu); } + styleCustomContextMenu(&menu); + menu.exec(QCursor::pos()); } +void AccountSettings::styleCustomContextMenu(QMenu *menu) const +{ + menu->setWindowFlags(menu->windowFlags() | Qt::FramelessWindowHint | Qt::NoDropShadowWindowHint); + + menu->setAttribute(Qt::WA_TranslucentBackground); + + menu->setStyleSheet( + QStringLiteral( + "QMenu {" + "background-color: %1; " + "border: 1px solid %2; " + "padding: 15px; " + "border-radius: %5; " + "font-family: %6; " + "font-size: %7; " + "font-weight: %8; " + "}" + "QMenu::item {" + "background-color: transparent;" + "padding: 16px 18px; " + "color: %3; " + "border-radius: 8px; " + "}" + "QMenu::item:selected {" + "background-color: %4; " + "color: %3; " + "border-radius: 8px; " + "}" + ).arg( + IonosTheme::white(), + IonosTheme::menuBorderColor(), + IonosTheme::menuTextColor(), + IonosTheme::menuSelectedItemColor(), + IonosTheme::menuBorderRadius(), + IonosTheme::contextMenuFont(), + IonosTheme::settingsTextSize(), + IonosTheme::settingsTextWeight() + ) + ); +} + void AccountSettings::slotCustomContextMenuRequested(const QPoint &pos) { const auto treeView = _ui->_folderList; @@ -677,6 +748,13 @@ void AccountSettings::slotCustomContextMenuRequested(const QPoint &pos) const auto menu = new QMenu(treeView); + connect(menu, &QMenu::aboutToHide, [treeView, index]() { + auto* delegate = qobject_cast(treeView->itemDelegate(index)); + delegate->MousePos = QPoint(-1, -1); + treeView->update(); + }); + + menu->setAttribute(Qt::WA_DeleteOnClose); auto ac = menu->addAction(tr("Open folder")); @@ -723,6 +801,8 @@ void AccountSettings::slotCustomContextMenuRequested(const QPoint &pos) ac = menu->addAction(tr("Disable virtual file support …")); connect(ac, &QAction::triggered, this, &AccountSettings::slotDisableVfsCurrentFolder); ac->setDisabled(Theme::instance()->enforceVirtualFilesSyncFolder()); + + styleCustomContextMenu(availabilityMenu); } if (const auto mode = bestAvailableVfsMode(); @@ -737,6 +817,7 @@ void AccountSettings::slotCustomContextMenuRequested(const QPoint &pos) } } + styleCustomContextMenu(menu); menu->popup(treeView->mapToGlobal(pos)); } @@ -745,16 +826,6 @@ void AccountSettings::slotFolderListClicked(const QModelIndex &indx) { if (indx.data(FolderStatusDelegate::AddButton).toBool()) { // "Add Folder Sync Connection" - const auto treeView = _ui->_folderList; - const auto pos = treeView->mapFromGlobal(QCursor::pos()); - QStyleOptionViewItem opt; - opt.initFrom(treeView); - const auto btnRect = treeView->visualRect(indx); - const auto btnSize = treeView->itemDelegateForIndex(indx)->sizeHint(opt, indx); - const auto actual = QStyle::visualRect(opt.direction, btnRect, QRect(btnRect.topLeft(), btnSize)); - if (!actual.contains(pos)) { - return; - } if (indx.flags() & Qt::ItemIsEnabled) { slotAddFolder(); @@ -889,8 +960,21 @@ void AccountSettings::slotRemoveCurrentFolder() .arg(shortGuiLocalPath), QMessageBox::NoButton, this); + + messageBox->setStyleSheet( + QStringLiteral("QMessageBox QLabel { %1; }").arg( + IonosTheme::fontConfigurationCss( + IonosTheme::settingsFont(), + IonosTheme::settingsTextSize(), + IonosTheme::settingsTextWeight(), + IonosTheme::titleColor() + ) + ) + ); + messageBox->setAttribute(Qt::WA_DeleteOnClose); const auto yesButton = messageBox->addButton(tr("Remove Folder Sync Connection"), QMessageBox::YesRole); + yesButton->setProperty("buttonStyle", QVariant::fromValue(ButtonStyleName::Primary)); messageBox->addButton(tr("Cancel"), QMessageBox::NoRole); connect(messageBox, &QMessageBox::finished, this, [messageBox, yesButton, folder, row, this]{ if (messageBox->clickedButton() == yesButton) { @@ -1010,7 +1094,20 @@ void AccountSettings::slotDisableVfsCurrentFolder() "will become available again." "\n\n" "This action will abort any currently running synchronization.")); + + msgBox->setStyleSheet(QString( + "QMessageBox {" + + IonosTheme::fontConfigurationCss( + IonosTheme::settingsFont(), + IonosTheme::settingsTextSize(), + IonosTheme::settingsTextWeight(), + IonosTheme::titleColor() + ) + "background-color: %1; }").arg(IonosTheme::dialogBackgroundColor()) + ); + const auto acceptButton = msgBox->addButton(tr("Disable support"), QMessageBox::AcceptRole); + acceptButton->setProperty("buttonStyle", QVariant::fromValue(ButtonStyleName::Primary)); + msgBox->addButton(tr("Cancel"), QMessageBox::RejectRole); connect(msgBox, &QMessageBox::finished, msgBox, [this, msgBox, folder, acceptButton] { msgBox->deleteLater(); @@ -1158,25 +1255,26 @@ void AccountSettings::migrateCertificateForAccount(const AccountPtr &account) void AccountSettings::showConnectionLabel(const QString &message, QStringList errors) { - const auto errStyle = QLatin1String("color:#ffffff; background-color:#bb4d4d;padding:5px;" - "border-width: 1px; border-style: solid; border-color: #aaaaaa;" - "border-radius:5px;"); - if (errors.isEmpty()) { - auto msg = message; - Theme::replaceLinkColorStringBackgroundAware(msg); - _ui->connectLabel->setText(msg); - _ui->connectLabel->setToolTip({}); - _ui->connectLabel->setStyleSheet({}); - } else { - errors.prepend(message); - auto userFriendlyMsg = errors.join(QLatin1String("
")); - qCDebug(lcAccountSettings) << userFriendlyMsg; - Theme::replaceLinkColorString(userFriendlyMsg, QColor(0xc1c8e6)); - _ui->connectLabel->setText(userFriendlyMsg); - _ui->connectLabel->setToolTip({}); - _ui->connectLabel->setStyleSheet(errStyle); - } - _ui->accountStatus->setVisible(!message.isEmpty()); + // SES-4 Removed + // const auto errStyle = QLatin1String("color:#ffffff; background-color:#bb4d4d;padding:5px;" + // "border-width: 1px; border-style: solid; border-color: #aaaaaa;" + // "border-radius:5px;"); + // if (errors.isEmpty()) { + // auto msg = message; + // Theme::replaceLinkColorStringBackgroundAware(msg); + // _ui->connectLabel->setText(msg); + // _ui->connectLabel->setToolTip({}); + // _ui->connectLabel->setStyleSheet({}); + // } else { + // errors.prepend(message); + // auto userFriendlyMsg = errors.join(QLatin1String("
")); + // qCDebug(lcAccountSettings) << userFriendlyMsg; + // Theme::replaceLinkColorString(userFriendlyMsg, QColor("#c1c8e6")); + // _ui->connectLabel->setText(userFriendlyMsg); + // _ui->connectLabel->setToolTip({}); + // _ui->connectLabel->setStyleSheet(errStyle); + // } + _ui->accountStatus->setVisible(false); } void AccountSettings::slotEnableCurrentFolder(bool terminate) @@ -1203,9 +1301,30 @@ void AccountSettings::slotEnableCurrentFolder(bool terminate) QMessageBox::Yes | QMessageBox::No, this); msgbox->setAttribute(Qt::WA_DeleteOnClose); msgbox->setDefaultButton(QMessageBox::Yes); + msgbox->defaultButton()->setProperty("buttonStyle", QVariant::fromValue(ButtonStyleName::Primary)); + + QHBoxLayout *buttonLayout = msgbox->findChild(); + buttonLayout->setSpacing(8); + +#ifdef Q_OS_MAC + buttonLayout->setSpacing(24); +#endif + connect(msgbox, &QMessageBox::accepted, this, [this]{ slotEnableCurrentFolder(true); }); + + msgbox->setStyleSheet( + QStringLiteral("QMessageBox QLabel { %1; }").arg( + IonosTheme::fontConfigurationCss( + IonosTheme::settingsFont(), + IonosTheme::settingsTextSize(), + IonosTheme::settingsTextWeight(), + IonosTheme::titleColor() + ) + ) + ); + msgbox->open(); return; } @@ -1275,6 +1394,7 @@ void AccountSettings::slotUpdateQuota(qint64 total, qint64 used) _ui->quotaInfoLabel->setText(tr("%1 of %2 in use").arg(usedStr, totalStr)); _ui->quotaInfoLabel->setToolTip(toolTip); _ui->quotaProgressBar->setToolTip(toolTip); + _ui->quotaInfo2Label->setText(tr("Storage space %1% occupied").arg(percentStr)); } else { _ui->quotaProgressBar->setVisible(false); _ui->quotaInfoLabel->setToolTip({}); @@ -1450,6 +1570,11 @@ void AccountSettings::slotHideSelectiveSyncWidget() _ui->selectiveSyncLabel->hide(); } +void AccountSettings::slotExpandMemoryClicked() +{ + QDesktopServices::openUrl(QUrl(tr("https://wl.hidrive.com/easy/0057"))); +} + void AccountSettings::slotSelectiveSyncChanged(const QModelIndex &topLeft, const QModelIndex &bottomRight, const QVector &roles) @@ -1682,12 +1807,39 @@ void AccountSettings::customizeStyle() _ui->connectLabel->setText(msg); const auto color = palette().highlight().color(); - _ui->quotaProgressBar->setStyleSheet(QString::fromLatin1(progressBarStyleC).arg(color.name())); + _ui->quotaProgressBar->setStyleSheet(progressBarStyle().arg(color.name())); + + _ui->quotaInfoLabel->setStyleSheet( + IonosTheme::fontConfigurationCss( + IonosTheme::settingsFont(), + IonosTheme::settingsTextSize(), + IonosTheme::settingsTitleWeight600(), + IonosTheme::titleColor() + ) + ); + + _ui->quotaInfo2Label->setStyleSheet( + IonosTheme::fontConfigurationCss( + IonosTheme::settingsFont(), + IonosTheme::settingsSmallTextSize(), + IonosTheme::settingsTextWeight(), + IonosTheme::titleColor() + ) + ); + +#if defined(Q_OS_MAC) + _ui->selectiveSyncLabel->setStyleSheet(QString("color: %1;").arg(IonosTheme::black())); + _ui->horizontalLayout->setSpacing(16); +#endif + } void AccountSettings::initializeE2eEncryption() { - connect(_accountState->account()->e2e(), &ClientSideEncryption::initializationFinished, this, &AccountSettings::slotPossiblyUnblacklistE2EeFoldersAndRestartSync); + connect(_accountState->account()->e2e(), + &ClientSideEncryption::initializationFinished, + this, + &AccountSettings::slotPossiblyUnblacklistE2EeFoldersAndRestartSync); if (_accountState->account()->e2e()->isInitialized()) { slotE2eEncryptionMnemonicReady(); @@ -1763,6 +1915,14 @@ void AccountSettings::initializeE2eEncryptionSettingsMessage() connect(actionEnableE2e, &QAction::triggered, this, &AccountSettings::slotE2eEncryptionGenerateKeys); } +void AccountSettings::disguiseTabWidget() const +{ + // Ensure all elements of the tab widget are hidden. + // Document mode lets the child view take up the whole view. + _ui->tabWidget->setDocumentMode(true); + _ui->tabWidget->tabBar()->hide(); +} + } // namespace OCC #include "accountsettings.moc" diff --git a/src/gui/accountsettings.h b/src/gui/accountsettings.h index 592e7175e1d5c..c09b068f0cc2e 100644 --- a/src/gui/accountsettings.h +++ b/src/gui/accountsettings.h @@ -20,6 +20,7 @@ #include #include #include +#include #include "folder.h" #include "userinfo.h" @@ -134,8 +135,10 @@ private slots: void resetE2eEncryption(); void checkClientSideEncryptionState(); void removeActionFromEncryptionMessage(const QString &actionId); + void slotExpandMemoryClicked(); private: + void styleCustomContextMenu(QMenu *menu) const; bool event(QEvent *) override; QAction *addActionToEncryptionMessage(const QString &actionTitle, const QString &actionId); @@ -144,6 +147,10 @@ private slots: /// Returns the alias of the selected folder, empty string if none [[nodiscard]] QString selectedFolderAlias() const; + void disguiseTabWidget() const; + + void customizeButtonBox(QDialogButtonBox *buttonBox); + Ui::AccountSettings *_ui; FolderStatusModel *_model; diff --git a/src/gui/accountsettings.ui b/src/gui/accountsettings.ui index 2db413221b169..88e9c17168390 100644 --- a/src/gui/accountsettings.ui +++ b/src/gui/accountsettings.ui @@ -13,9 +13,21 @@ Form - + + 32 + + + 32 + + + 32 + + + 32 + + - + @@ -38,6 +50,8 @@ + + @@ -52,7 +66,7 @@ 16777215 - 7 + 8 @@ -62,6 +76,43 @@ -1 + false + + + + + + + + 0 + 0 + + + + Expand Memory + + + + + + + + + + 0 + 0 + + + + + + + Storage space: … + + + Qt::PlainText + + false @@ -263,7 +314,7 @@ QTabWidget::Rounded
- 0 + 1 diff --git a/src/gui/folderstatusdelegate.h b/src/gui/folderstatusdelegate.h index a8ed1c41de3b4..944fa5725f9e4 100644 --- a/src/gui/folderstatusdelegate.h +++ b/src/gui/folderstatusdelegate.h @@ -27,6 +27,7 @@ class FolderStatusDelegate : public QStyledItemDelegate Q_OBJECT public: FolderStatusDelegate(); + QPoint MousePos; enum datarole { FolderAliasRole = Qt::UserRole + 100, HeaderRole, From b0529c32175798934c24636caaea43141fe3ca6b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Christopher=20H=C3=A4tty?= Date: Fri, 17 Jan 2025 15:45:55 +0100 Subject: [PATCH 016/371] style settings - added files 4c098926161b45c8144aae31d048b03234e85d88 --- src/gui/CMakeLists.txt | 13 +++ src/gui/folderwizardselectivesync.ui | 85 ++++++++++++++++ src/gui/linkbutton.cpp | 26 +++++ src/gui/linkbutton.h | 23 +++++ src/gui/sessnackbar.cpp | 140 +++++++++++++++++++++++++++ src/gui/sessnackbar.h | 62 ++++++++++++ 6 files changed, 349 insertions(+) create mode 100644 src/gui/folderwizardselectivesync.ui create mode 100644 src/gui/linkbutton.cpp create mode 100644 src/gui/linkbutton.h create mode 100644 src/gui/sessnackbar.cpp create mode 100644 src/gui/sessnackbar.h diff --git a/src/gui/CMakeLists.txt b/src/gui/CMakeLists.txt index 63e2e0c1e4ddf..29dacc75e941e 100644 --- a/src/gui/CMakeLists.txt +++ b/src/gui/CMakeLists.txt @@ -224,6 +224,19 @@ set(client_SRCS creds/webflowcredentials.cpp creds/webflowcredentialsdialog.h creds/webflowcredentialsdialog.cpp + sessnackbar.h + sessnackbar.cpp + sesstyle.h + sesstyle.cpp + buttonstylestrategy.h + sesFileIconProvider.h + sesFileIconProvider.cpp + pushbuttonstylehelper.h + pushbuttonstylehelper.cpp + moreoptionsbuttonstylehelper.h + moreoptionsbuttonstylehelper.cpp + SesComponents/syncdirvalidation.h + SesComponents/syncdirvalidation.cpp wizard/postfixlineedit.h wizard/postfixlineedit.cpp wizard/abstractcredswizardpage.h diff --git a/src/gui/folderwizardselectivesync.ui b/src/gui/folderwizardselectivesync.ui new file mode 100644 index 0000000000000..29fd0b148e663 --- /dev/null +++ b/src/gui/folderwizardselectivesync.ui @@ -0,0 +1,85 @@ + + + FolderWizardSelectiveSync + + + + 0 + 0 + 639 + 460 + + + + Form + + + + + + 20 + + + 0 + + + 20 + + + 0 + + + + + font: 18pt bold; + + + Add Folder Sync + + + Qt::PlainText + + + false + + + + + + + color: rgb(16, 73, 150); font: bold; + + + Step 3 of 3: Selektive Synchronisation + + + Qt::PlainText + + + false + + + + + + + + + Qt::Vertical + + + QSizePolicy::Preferred + + + + 349 + 360 + + + + + + + + + \ No newline at end of file diff --git a/src/gui/linkbutton.cpp b/src/gui/linkbutton.cpp new file mode 100644 index 0000000000000..9bf2134fb62f8 --- /dev/null +++ b/src/gui/linkbutton.cpp @@ -0,0 +1,26 @@ +// linkbutton.cpp +#include "linkbutton.h" +#include "ionostheme.h" +#include "theme.h" + +namespace OCC { + LinkButton::LinkButton(QWidget* parent) + : QLabel(parent) + { + setStyleSheet(QStringLiteral("QLabel { color: %1; text-decoration: underline; font-size: %2; font-weight: %3; }") + .arg(IonosTheme::settingsLinkColor() + , IonosTheme::settingsTextSize() + , IonosTheme::settingsTitleWeight600() + )); + + setCursor(Qt::PointingHandCursor); + } + + void LinkButton::mousePressEvent(QMouseEvent* event) + { + if (event->button() == Qt::LeftButton) { + emit clicked(); + } + QLabel::mousePressEvent(event); + } +} \ No newline at end of file diff --git a/src/gui/linkbutton.h b/src/gui/linkbutton.h new file mode 100644 index 0000000000000..7dd0465e65142 --- /dev/null +++ b/src/gui/linkbutton.h @@ -0,0 +1,23 @@ +// linkbutton.h +#ifndef LINKBUTTON_H +#define LINKBUTTON_H + +#include +#include +#include +namespace OCC { + class LinkButton : public QLabel + { + Q_OBJECT + + public: + explicit LinkButton(QWidget* parent = nullptr); + + signals: + void clicked(); + + protected: + void mousePressEvent(QMouseEvent* event); + }; +} +#endif // LINKBUTTON_H diff --git a/src/gui/sessnackbar.cpp b/src/gui/sessnackbar.cpp new file mode 100644 index 0000000000000..c42c099b2ab4c --- /dev/null +++ b/src/gui/sessnackbar.cpp @@ -0,0 +1,140 @@ +#include "sessnackbar.h" +#include "ionostheme.h" +#include "theme.h" +#include +#include +#include + +namespace OCC { + + sesSnackBar::sesSnackBar(QWidget* parent) + : QFrame(parent) + { + setObjectName("sesSnackBar"); + setSizePolicy(QSizePolicy::Minimum, QSizePolicy::Minimum); + setContentsMargins(0, 0, 0, 0); + + auto policy = sizePolicy(); + policy.setRetainSizeWhenHidden(false); + setSizePolicy(policy); + + const auto layout = new QHBoxLayout(); + layout->setObjectName("sesSnackBarLayout"); + layout->setContentsMargins(16, 15, 16, 15); + layout->setSpacing(0); + + m_captionLabel.setObjectName("sesSnackBarCaption"); + m_captionLabel.setSizePolicy(QSizePolicy::Preferred, QSizePolicy::Minimum); + m_captionLabel.setText(m_caption); + + m_messageLabel.setObjectName("sesSnackBarMessage"); + m_messageLabel.setText(m_message); + m_messageLabel.setSizePolicy(QSizePolicy::MinimumExpanding, QSizePolicy::Minimum); + m_messageLabel.setWordWrap(true); + + m_iconLabel.setObjectName("sesSnackBarIcon"); + m_iconLabel.setSizePolicy(QSizePolicy::Fixed, QSizePolicy::Fixed); + m_iconLabel.setFixedSize(16, 16); + + layout->addWidget(&m_captionLabel); + layout->addSpacerItem(new QSpacerItem(8, 0, QSizePolicy::Fixed, QSizePolicy::Fixed)); + layout->addWidget(&m_messageLabel); + layout->addSpacerItem(new QSpacerItem(8, 0, QSizePolicy::Fixed, QSizePolicy::Fixed)); + layout->addWidget(&m_iconLabel); + setLayout(layout); + + errorStyle(); + } + + void sesSnackBar::clearMessage(){ + m_captionLabel.clear(); + m_messageLabel.clear(); + } + + QString sesSnackBar::caption() const { return m_caption; } + QString sesSnackBar::message() const { return m_message; } + + + void sesSnackBar::setCaption(QString captionText) { + if (m_caption != captionText) { + m_caption = captionText; + m_captionLabel.setText(m_caption); + emit captionChanged(m_caption); + } + } + + void sesSnackBar::setError(QString errorMessage){ + errorStyle(); + setMessage(errorMessage); + setCaption(tr("Error")); + emit errorChanged(m_message); + } + + void sesSnackBar::setWarning(QString warningMessage){ + warningStyle(); + setMessage(warningMessage); + setCaption(tr("Warning")); + emit warningChanged(m_message); + } + + void sesSnackBar::setSuccess(QString successMessage){ + successStyle(); + setMessage(successMessage); + setCaption(tr("Success")); + emit successChanged(m_message); + } + + void sesSnackBar::setMessage(QString messageText) { + m_message = messageText; + m_messageLabel.setText(m_message); + } + + void sesSnackBar::setWordWrap(bool on) + { + m_messageLabel.setWordWrap(on); + } + + bool sesSnackBar::wordWrap() const + { + return m_messageLabel.wordWrap(); + } + + void sesSnackBar::successStyle() + { + const auto logoIconFileName = Theme::hidpiFileName(":/client/theme/black/state-ok.svg"); + m_iconLabel.setPixmap(logoIconFileName); + + updateStyleSheet(IonosTheme::successBorderColor(), IonosTheme::successColor(), IonosTheme::black(), IonosTheme::black()); + } + + void sesSnackBar::warningStyle() + { + const auto logoIconFileName = Theme::hidpiFileName(":/client/theme/black/state-info.svg"); + m_iconLabel.setPixmap(logoIconFileName); + + updateStyleSheet(IonosTheme::warningBorderColor(), IonosTheme::warningColor(), IonosTheme::black(), IonosTheme::black()); + } + + void sesSnackBar::errorStyle() + { + const auto logoIconFileName = Theme::hidpiFileName(":/client/theme/black/state-error.svg"); + m_iconLabel.setPixmap(logoIconFileName); + + updateStyleSheet(IonosTheme::errorBorderColor(), IonosTheme::errorColor(), IonosTheme::black(), IonosTheme::black()); + } + + void sesSnackBar::updateStyleSheet(QColor frameBorderColor, QColor frameBackgroundColor, QColor frameColor, QColor labelColor) + { + QString style = QString::fromLatin1("QFrame {border: 1px solid %1; border-radius: 4px;" + "background-color: %2; color: %3;}" + "QLabel {border: 0px none; padding 0px; background-color: transparent; color: %4;}" + "QLabel#sesSnackBarCaption {font-weight: bold;}" + ).arg(frameBorderColor.name() + , frameBackgroundColor.name() + , frameColor.name() + , labelColor.name()); + + setStyleSheet(style); + + } +} \ No newline at end of file diff --git a/src/gui/sessnackbar.h b/src/gui/sessnackbar.h new file mode 100644 index 0000000000000..cb215e996838c --- /dev/null +++ b/src/gui/sessnackbar.h @@ -0,0 +1,62 @@ +#ifndef SESSNACKBAR_H +#define SESSNACKBAR_H + +#include +#include +#include +#include +#include +#include +#include + +namespace OCC { + + class sesSnackBar : public QFrame + { + Q_OBJECT + Q_PROPERTY(QString caption READ caption WRITE setCaption NOTIFY captionChanged) + Q_PROPERTY(QString message READ message) + Q_PROPERTY(QString error WRITE setError NOTIFY errorChanged) + Q_PROPERTY(QString warning WRITE setWarning NOTIFY warningChanged) + Q_PROPERTY(QString success WRITE setSuccess NOTIFY successChanged) + Q_PROPERTY(bool wordWrap READ wordWrap WRITE setWordWrap) + + public: + explicit sesSnackBar(QWidget* parent = nullptr); + QString caption() const; + QString message() const; + bool wordWrap() const; + void clearMessage(); + + public slots: + void setCaption(QString captionText); + void setError(QString errorMessage); + void setWarning(QString warningMessage); + void setSuccess(QString successMessage); + + void setWordWrap(bool on); + + signals: + void captionChanged(QString captionText); + void errorChanged(QString errorText); + void warningChanged(QString warningText); + void successChanged(QString successText); + + private: + QString m_caption; + QString m_message; + + QLabel m_messageLabel; + QLabel m_captionLabel; + QLabel m_iconLabel; + + void updateStyleSheet(QColor frameBorderColor, QColor frameBackgroundColor, QColor frameColor, QColor labelColor); + void setMessage(QString messageText); + + void errorStyle(); + void warningStyle(); + void successStyle(); + + }; +} +#endif // SESSNACKBAR_H From 9b223e61a2a07e7d5d9603380e48cdd084def714 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Christopher=20H=C3=A4tty?= Date: Wed, 22 Jan 2025 08:26:35 +0100 Subject: [PATCH 017/371] style settings - minor dialog changes 4c098926161b45c8144aae31d048b03234e85d88 --- src/gui/addcertificatedialog.cpp | 1 + src/gui/authenticationdialog.cpp | 1 + src/gui/legalnotice.cpp | 1 + src/gui/proxyauthdialog.cpp | 1 + 4 files changed, 4 insertions(+) diff --git a/src/gui/addcertificatedialog.cpp b/src/gui/addcertificatedialog.cpp index fabaeec5b6d14..0d3e8f3209edb 100644 --- a/src/gui/addcertificatedialog.cpp +++ b/src/gui/addcertificatedialog.cpp @@ -26,6 +26,7 @@ AddCertificateDialog::AddCertificateDialog(QWidget *parent) { ui->setupUi(this); ui->labelErrorCertif->setText(""); + setWindowFlags(windowFlags() & ~Qt::WindowContextHelpButtonHint); } AddCertificateDialog::~AddCertificateDialog() diff --git a/src/gui/authenticationdialog.cpp b/src/gui/authenticationdialog.cpp index 7b7de1abbebb0..aef5f8163c017 100644 --- a/src/gui/authenticationdialog.cpp +++ b/src/gui/authenticationdialog.cpp @@ -43,6 +43,7 @@ AuthenticationDialog::AuthenticationDialog(const QString &realm, const QString & connect(box, &QDialogButtonBox::accepted, this, &QDialog::accept); connect(box, &QDialogButtonBox::rejected, this, &QDialog::reject); lay->addWidget(box); + setWindowFlags(windowFlags() & ~Qt::WindowContextHelpButtonHint); } QString AuthenticationDialog::user() const diff --git a/src/gui/legalnotice.cpp b/src/gui/legalnotice.cpp index 04f3d8e31113b..33d5c5f3da765 100644 --- a/src/gui/legalnotice.cpp +++ b/src/gui/legalnotice.cpp @@ -24,6 +24,7 @@ LegalNotice::LegalNotice(QDialog *parent) , _ui(new Ui::LegalNotice) { _ui->setupUi(this); + setWindowFlags(windowFlags() & ~Qt::WindowContextHelpButtonHint); connect(_ui->closeButton, &QPushButton::clicked, this, &LegalNotice::accept); diff --git a/src/gui/proxyauthdialog.cpp b/src/gui/proxyauthdialog.cpp index c5680bb7e7a10..5e3fee0fc5035 100644 --- a/src/gui/proxyauthdialog.cpp +++ b/src/gui/proxyauthdialog.cpp @@ -22,6 +22,7 @@ ProxyAuthDialog::ProxyAuthDialog(QWidget *parent) , ui(new Ui::ProxyAuthDialog) { ui->setupUi(this); + setWindowFlags(windowFlags() & ~Qt::WindowContextHelpButtonHint); } ProxyAuthDialog::~ProxyAuthDialog() From 5487b81a2f4e89581530c1e35b6b0c8e724ad52e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Christopher=20H=C3=A4tty?= Date: Wed, 22 Jan 2025 08:45:15 +0100 Subject: [PATCH 018/371] style settings - more dialog changes 4c098926161b45c8144aae31d048b03234e85d88 --- src/gui/caseclashfilenamedialog.cpp | 47 +++++++ src/gui/caseclashfilenamedialog.h | 2 + src/gui/caseclashfilenamedialog.ui | 6 + src/gui/conflictdialog.cpp | 28 +++++ src/gui/conflictdialog.h | 1 + src/gui/foldercreationdialog.cpp | 56 +++++++-- src/gui/foldercreationdialog.h | 2 + src/gui/foldercreationdialog.ui | 186 +++++++++++++--------------- src/gui/invalidfilenamedialog.cpp | 48 ++++++- src/gui/invalidfilenamedialog.h | 1 + src/gui/selectivesyncdialog.cpp | 79 ++++++++++++ 11 files changed, 348 insertions(+), 108 deletions(-) diff --git a/src/gui/caseclashfilenamedialog.cpp b/src/gui/caseclashfilenamedialog.cpp index 92f3c768962b9..109d826bb162a 100644 --- a/src/gui/caseclashfilenamedialog.cpp +++ b/src/gui/caseclashfilenamedialog.cpp @@ -19,6 +19,7 @@ #include "account.h" #include "folder.h" +#include "buttonstyle.h" #include "common/filesystembase.h" #include @@ -84,6 +85,8 @@ CaseClashFilenameDialog::CaseClashFilenameDialog(AccountPtr account, Q_ASSERT(_account); Q_ASSERT(_folder); + setWindowFlags(windowFlags() & ~Qt::WindowContextHelpButtonHint); + const auto filePathFileInfo = QFileInfo(_filePath); const auto conflictFileName = filePathFileInfo.fileName(); @@ -99,6 +102,7 @@ CaseClashFilenameDialog::CaseClashFilenameDialog(AccountPtr account, _ui->setupUi(this); _ui->buttonBox->button(QDialogButtonBox::Ok)->setEnabled(false); _ui->buttonBox->button(QDialogButtonBox::Ok)->setText(tr("Rename file")); + _ui->buttonBox->button(QDialogButtonBox::Ok)->setProperty("buttonStyle", QVariant::fromValue(ButtonStyleName::Primary)); _ui->descriptionLabel->setText(tr("The file \"%1\" could not be synced because of a case clash conflict with an existing file on this system.").arg(_originalFileName)); _ui->explanationLabel->setText(tr("%1 does not support equal file names with only letter casing differences.").arg(QSysInfo::prettyProductName())); @@ -150,10 +154,13 @@ CaseClashFilenameDialog::CaseClashFilenameDialog(AccountPtr account, _ui->buttonBox->setStandardButtons(_ui->buttonBox->standardButtons() &~ QDialogButtonBox::No); if (_conflictSolver.allowedToRename()) { _ui->buttonBox->button(QDialogButtonBox::Ok)->setEnabled(true); + _ui->buttonBox->button(QDialogButtonBox::Ok)->setProperty("buttonStyle", QVariant::fromValue(ButtonStyleName::Primary)); + _ui->filenameLineEdit->setEnabled(true); _ui->filenameLineEdit->selectAll(); } else { _ui->buttonBox->setStandardButtons(_ui->buttonBox->standardButtons() | QDialogButtonBox::No); + _ui->buttonBox->button(QDialogButtonBox::Ok)->setProperty("buttonStyle", QVariant::fromValue(ButtonStyleName::Primary)); } }); @@ -167,6 +174,8 @@ CaseClashFilenameDialog::CaseClashFilenameDialog(AccountPtr account, }); checkIfAllowedToRename(); + + customizeStyle(); } CaseClashFilenameDialog::~CaseClashFilenameDialog() = default; @@ -286,5 +295,43 @@ void CaseClashFilenameDialog::onFilenameLineEditTextChanged(const QString &text) _ui->buttonBox->button(QDialogButtonBox::Ok) ->setEnabled(isTextValid); + _ui->buttonBox->button(QDialogButtonBox::Ok)->setProperty("buttonStyle", QVariant::fromValue(ButtonStyleName::Primary)); + } + +void CaseClashFilenameDialog::customizeStyle() +{ + this->setStyleSheet( + QStringLiteral("QDialog {background-color: %1; color: %2;} QLabel{ %3;}").arg( + IonosTheme::dialogBackgroundColor(), + IonosTheme::black(), + IonosTheme::fontConfigurationCss( + IonosTheme::settingsFont(), + IonosTheme::settingsTextSize(), + IonosTheme::settingsTextWeight(), + IonosTheme::titleColor() + ) + ) + ); + + _ui->filenameLineEdit->setStyleSheet( + QStringLiteral( + "color: %1; font-family: %2; font-size: %3; font-weight: %4; border-radius: %5; border: 1px " + "solid %6; padding: 0px 12px; text-align: left; vertical-align: middle; height: 40px; background: %7; ").arg( + IonosTheme::folderWizardPathColor(), + IonosTheme::settingsFont(), + IonosTheme::settingsTextSize(), + IonosTheme::settingsTextWeight(), + IonosTheme::buttonRadius(), + IonosTheme::menuBorderColor(), + IonosTheme::white() + ) + ); + + #ifdef Q_OS_MAC + _ui->buttonBox->layout()->setSpacing(24); + _ui->buttonBox->setLayoutDirection(Qt::LeftToRight); + #endif +} + } diff --git a/src/gui/caseclashfilenamedialog.h b/src/gui/caseclashfilenamedialog.h index 6608cb80102bc..feb88d43075ac 100644 --- a/src/gui/caseclashfilenamedialog.h +++ b/src/gui/caseclashfilenamedialog.h @@ -79,5 +79,7 @@ private slots: QString _relativeFilePath; QString _originalFileName; QString _newFilename; + + void customizeStyle(); }; } diff --git a/src/gui/caseclashfilenamedialog.ui b/src/gui/caseclashfilenamedialog.ui index a5944fc709886..7477525cbe60a 100644 --- a/src/gui/caseclashfilenamedialog.ui +++ b/src/gui/caseclashfilenamedialog.ui @@ -120,6 +120,9 @@ Open existing file + + true +
@@ -226,6 +229,9 @@ Open clashing file + + true + diff --git a/src/gui/conflictdialog.cpp b/src/gui/conflictdialog.cpp index bae7b190f957a..75c8c7d2304b3 100644 --- a/src/gui/conflictdialog.cpp +++ b/src/gui/conflictdialog.cpp @@ -16,6 +16,7 @@ #include "ui_conflictdialog.h" #include "conflictsolver.h" +#include "buttonstyle.h" #include #include @@ -50,8 +51,10 @@ ConflictDialog::ConflictDialog(QWidget *parent) { _ui->setupUi(this); forceHeaderFont(_ui->conflictMessage); + setWindowFlags(windowFlags() & ~Qt::WindowContextHelpButtonHint); _ui->buttonBox->button(QDialogButtonBox::Ok)->setEnabled(false); _ui->buttonBox->button(QDialogButtonBox::Ok)->setText(tr("Keep selected version")); + _ui->buttonBox->button(QDialogButtonBox::Ok)->setProperty("buttonStyle", QVariant::fromValue(ButtonStyleName::Primary)); _ui->conflictMessage->setTextFormat(Qt::PlainText); @@ -67,6 +70,8 @@ ConflictDialog::ConflictDialog(QWidget *parent) connect(_solver, &ConflictSolver::localVersionFilenameChanged, this, &ConflictDialog::updateWidgets); connect(_solver, &ConflictSolver::remoteVersionFilenameChanged, this, &ConflictDialog::updateWidgets); + + customizeStyle(); } QString ConflictDialog::baseFilename() const @@ -178,6 +183,29 @@ void ConflictDialog::updateButtonStates() : isRemotePicked ? tr("Keep server version") : tr("Keep selected version"); _ui->buttonBox->button(QDialogButtonBox::Ok)->setText(text); + _ui->buttonBox->button(QDialogButtonBox::Ok)->setProperty("buttonStyle", QVariant::fromValue(ButtonStyleName::Primary)); + +} + +void ConflictDialog::customizeStyle() +{ + this->setStyleSheet( + QStringLiteral("QDialog {background-color: %1; color: %2;} QLabel{ %3;}").arg( + IonosTheme::dialogBackgroundColor(), + IonosTheme::black(), + IonosTheme::fontConfigurationCss( + IonosTheme::settingsFont(), + IonosTheme::settingsTextSize(), + IonosTheme::settingsTextWeight(), + IonosTheme::titleColor() + ) + ) + ); + + #ifdef Q_OS_MAC + _ui->buttonBox->layout()->setSpacing(24); + _ui->buttonBox->setLayoutDirection(Qt::LeftToRight); + #endif } } // namespace OCC diff --git a/src/gui/conflictdialog.h b/src/gui/conflictdialog.h index b102b8de7797f..f82066d176474 100644 --- a/src/gui/conflictdialog.h +++ b/src/gui/conflictdialog.h @@ -46,6 +46,7 @@ public slots: private: void updateWidgets(); void updateButtonStates(); + void customizeStyle(); QString _baseFilename; QScopedPointer _ui; diff --git a/src/gui/foldercreationdialog.cpp b/src/gui/foldercreationdialog.cpp index 2d4f3c4cc4a98..4ed103ee9ccd7 100644 --- a/src/gui/foldercreationdialog.cpp +++ b/src/gui/foldercreationdialog.cpp @@ -13,6 +13,9 @@ */ #include "foldercreationdialog.h" + +#include "buttonstyle.h" +#include "ionostheme.h" #include "ui_foldercreationdialog.h" #include @@ -20,6 +23,9 @@ #include #include #include +#include +#include +#include namespace OCC { @@ -31,10 +37,13 @@ FolderCreationDialog::FolderCreationDialog(const QString &destination, QWidget * , _destination(destination) { ui->setupUi(this); + setWindowTitle(tr("%1 Create new folder").arg(Theme::instance()->appNameGUI())); + customizeStyle(); - ui->labelErrorMessage->setVisible(false); + ui->errorSnackbar->setVisible(false); setWindowFlags(windowFlags() & ~Qt::WindowContextHelpButtonHint); + setWindowFlags(windowFlags() | Qt::Dialog | Qt::WindowMinMaxButtonsHint); connect(ui->newFolderNameEdit, &QLineEdit::textChanged, this, &FolderCreationDialog::slotNewFolderNameEditTextEdited); @@ -69,11 +78,6 @@ void FolderCreationDialog::accept() const auto fullPath = QString(_destination + "/" + ui->newFolderNameEdit->text()); - if (QDir(fullPath).exists()) { - ui->labelErrorMessage->setVisible(true); - return; - } - if (QDir(_destination).mkdir(ui->newFolderNameEdit->text())) { Q_EMIT folderCreated(fullPath); } else { @@ -86,10 +90,46 @@ void FolderCreationDialog::accept() void FolderCreationDialog::slotNewFolderNameEditTextEdited() { if (!ui->newFolderNameEdit->text().isEmpty() && QDir(_destination + "/" + ui->newFolderNameEdit->text()).exists()) { - ui->labelErrorMessage->setVisible(true); + ui->errorSnackbar->setVisible(true); + ui->buttonBox->button(QDialogButtonBox::Ok)->setEnabled(false); } else { - ui->labelErrorMessage->setVisible(false); + ui->errorSnackbar->setVisible(false); + ui->buttonBox->button(QDialogButtonBox::Ok)->setEnabled(true); } } +void FolderCreationDialog::customizeStyle() +{ + ui->buttonBox->setLayoutDirection(Qt::RightToLeft); + + QDialog *dialog = qobject_cast(this); + dialog->setMinimumSize(626, 156); + + QPushButton *okButton = ui->buttonBox->button(QDialogButtonBox::Ok); + okButton->setProperty("buttonStyle", QVariant::fromValue(OCC::ButtonStyleName::Primary)); + + QHBoxLayout* buttonlayout = qobject_cast(ui->buttonBox->layout()); + buttonlayout->setSpacing(16); + + ui->errorSnackbar->setFixedHeight(46); + + ui->newFolderNameEdit->setStyleSheet( + QStringLiteral( + "color: %1; font-family: %2; font-size: %3; font-weight: %4; border-radius: %5; border: 1px " + "solid %6; padding: 0px 12px; text-align: left; vertical-align: middle; height: 40px; background: %7; ") + .arg(IonosTheme::folderWizardPathColor(), + IonosTheme::settingsFont(), + IonosTheme::settingsTextSize(), + IonosTheme::settingsTextWeight(), + IonosTheme::buttonRadius(), + IonosTheme::menuBorderColor(), + IonosTheme::white() + ) + ); + +#if defined(Q_OS_MAC) + buttonlayout->setSpacing(32); +#endif + } +} \ No newline at end of file diff --git a/src/gui/foldercreationdialog.h b/src/gui/foldercreationdialog.h index 3d8642112f2c4..78d582a41e24d 100644 --- a/src/gui/foldercreationdialog.h +++ b/src/gui/foldercreationdialog.h @@ -43,6 +43,8 @@ private slots: Ui::FolderCreationDialog *ui; QString _destination; + + void customizeStyle(); }; } diff --git a/src/gui/foldercreationdialog.ui b/src/gui/foldercreationdialog.ui index 84d7c77e18654..314ef6cffab97 100644 --- a/src/gui/foldercreationdialog.ui +++ b/src/gui/foldercreationdialog.ui @@ -1,100 +1,90 @@ - OCC::FolderCreationDialog - - - - 0 - 0 - 355 - 138 - - - - Create new folder - - - - - 0 - 90 - 341 - 32 - - - - Qt::Horizontal - - - QDialogButtonBox::Cancel|QDialogButtonBox::Ok - - - - - - 20 - 30 - 321 - 22 - - - - Enter folder name - - - - - true - - - - 20 - 60 - 321 - 16 - - - - color: rgb(255, 0, 0) - - - Folder already exists - - - - - - - buttonBox - accepted() - OCC::FolderCreationDialog - accept() - - - 248 - 254 - - - 157 - 274 - - - - - buttonBox - rejected() - OCC::FolderCreationDialog - reject() - - - 316 - 260 - - - 286 - 274 - - - - - + OCC::FolderCreationDialog + + + Create new folder + + + + + + Enter folder name + + + + + + + Folder already exists + + + false + + + + + + + + + Qt::Horizontal + + + QSizePolicy::Expanding + + + + + + + Qt::Horizontal + + + QDialogButtonBox::Cancel|QDialogButtonBox::Ok + + + + + + + + + + + + + + buttonBox + accepted() + OCC::FolderCreationDialog + accept() + + + 248 + 254 + + + 157 + 274 + + + + + buttonBox + rejected() + OCC::FolderCreationDialog + reject() + + + 316 + 260 + + + 286 + 274 + + + + + \ No newline at end of file diff --git a/src/gui/invalidfilenamedialog.cpp b/src/gui/invalidfilenamedialog.cpp index c6cf31da00997..df78348ffa9b4 100644 --- a/src/gui/invalidfilenamedialog.cpp +++ b/src/gui/invalidfilenamedialog.cpp @@ -19,6 +19,8 @@ #include "ui_invalidfilenamedialog.h" #include "filesystem.h" +#include "ionostheme.h" +#include "buttonstyle.h" #include #include @@ -79,6 +81,7 @@ InvalidFilenameDialog::InvalidFilenameDialog(AccountPtr account, { Q_ASSERT(_account); Q_ASSERT(_folder); + setWindowFlags(windowFlags() & ~Qt::WindowContextHelpButtonHint); const auto filePathFileInfo = QFileInfo(_filePath); _relativeFilePath = filePathFileInfo.path() + QStringLiteral("/"); @@ -136,6 +139,8 @@ InvalidFilenameDialog::InvalidFilenameDialog(AccountPtr account, tr("Checking rename permissions …")); _ui->buttonBox->button(QDialogButtonBox::Ok)->setEnabled(false); _ui->filenameLineEdit->setEnabled(false); + _ui->buttonBox->button(QDialogButtonBox::Ok)->setProperty("buttonStyle", QVariant::fromValue(ButtonStyleName::Primary)); + connect(_ui->filenameLineEdit, &QLineEdit::textChanged, this, &InvalidFilenameDialog::onFilenameLineEditTextChanged); @@ -145,6 +150,8 @@ InvalidFilenameDialog::InvalidFilenameDialog(AccountPtr account, } else { checkIfAllowedToRename(); } + + customizeStyle(); } InvalidFilenameDialog::~InvalidFilenameDialog() = default; @@ -186,6 +193,7 @@ bool InvalidFilenameDialog::processLeadingOrTrailingSpacesError(const QString &f const auto hasTrailingSpaces = fileName.endsWith(QLatin1Char(' ')); _ui->buttonBox->setStandardButtons(_ui->buttonBox->standardButtons() &~ QDialogButtonBox::No); + _ui->buttonBox->button(QDialogButtonBox::Ok)->setProperty("buttonStyle", QVariant::fromValue(ButtonStyleName::Primary)); if (hasLeadingSpaces || hasTrailingSpaces) { if (hasLeadingSpaces && hasTrailingSpaces) { @@ -222,6 +230,8 @@ void InvalidFilenameDialog::onPropfindPermissionError(QNetworkReply *reply) void InvalidFilenameDialog::allowRenaming() { _ui->buttonBox->button(QDialogButtonBox::Ok)->setEnabled(true); + _ui->buttonBox->button(QDialogButtonBox::Ok)->setProperty("buttonStyle", QVariant::fromValue(ButtonStyleName::Primary)); + _ui->filenameLineEdit->setEnabled(true); _ui->filenameLineEdit->selectAll(); _ui->errorLabel->setText({}); @@ -258,8 +268,9 @@ void InvalidFilenameDialog::onFilenameLineEditTextChanged(const QString &text) _ui->errorLabel->setText(tr("Filename contains illegal characters: %1").arg(illegalCharacterListToString(illegalContainedCharacters))); } - _ui->buttonBox->button(QDialogButtonBox::Ok) - ->setEnabled(isTextValid); + _ui->buttonBox->button(QDialogButtonBox::Ok)->setEnabled(isTextValid); + _ui->buttonBox->button(QDialogButtonBox::Ok)->setProperty("buttonStyle", QVariant::fromValue(ButtonStyleName::Primary)); + } void InvalidFilenameDialog::onMoveJobFinished() @@ -281,6 +292,7 @@ void InvalidFilenameDialog::onRemoteDestinationFileAlreadyExists(const QVariantM _ui->errorLabel->setText(tr("Cannot rename file because a file with the same name does already exist on the server. Please pick another name.")); _ui->buttonBox->button(QDialogButtonBox::Ok)->setEnabled(false); + _ui->buttonBox->button(QDialogButtonBox::Ok)->setProperty("buttonStyle", QVariant::fromValue(ButtonStyleName::Primary)); } void InvalidFilenameDialog::onRemoteDestinationFileDoesNotExist(QNetworkReply *reply) @@ -320,4 +332,36 @@ void InvalidFilenameDialog::onRemoteSourceFileDoesNotExist(QNetworkReply *reply) } QDialog::accept(); } + +void InvalidFilenameDialog::customizeStyle() +{ + this->setStyleSheet( + QStringLiteral("QDialog {background-color: %1; } QLabel{ font-family: %2; font-size: %3; font-weight: %4; }").arg( + IonosTheme::dialogBackgroundColor(), + IonosTheme::settingsFont(), + IonosTheme::settingsTextSize(), + IonosTheme::settingsTextWeight() + ) + ); + + _ui->filenameLineEdit->setStyleSheet( + QStringLiteral( + "color: %1; font-family: %2; font-size: %3; font-weight: %4; border-radius: %5; border: 1px " + "solid %6; padding: 0px 12px; text-align: left; vertical-align: middle; height: 40px; background: %7; ").arg( + IonosTheme::folderWizardPathColor(), + IonosTheme::settingsFont(), + IonosTheme::settingsTextSize(), + IonosTheme::settingsTextWeight(), + IonosTheme::buttonRadius(), + IonosTheme::menuBorderColor(), + IonosTheme::white() + ) + ); + + #ifdef Q_OS_MAC + _ui->buttonBox->layout()->setSpacing(24); + _ui->buttonBox->setLayoutDirection(Qt::LeftToRight); + #endif +} + } diff --git a/src/gui/invalidfilenamedialog.h b/src/gui/invalidfilenamedialog.h index 1477dd6451fa7..faa61b2aa5cf7 100644 --- a/src/gui/invalidfilenamedialog.h +++ b/src/gui/invalidfilenamedialog.h @@ -81,6 +81,7 @@ class InvalidFilenameDialog : public QDialog void onPropfindPermissionSuccess(const QVariantMap &values); void onPropfindPermissionError(QNetworkReply *reply = nullptr); void allowRenaming(); + void customizeStyle(); private slots: void useInvalidName(); }; diff --git a/src/gui/selectivesyncdialog.cpp b/src/gui/selectivesyncdialog.cpp index abe5a56b39480..d266d3a966a3b 100644 --- a/src/gui/selectivesyncdialog.cpp +++ b/src/gui/selectivesyncdialog.cpp @@ -13,12 +13,14 @@ */ #include "selectivesyncdialog.h" #include "account.h" +#include "buttonstyle.h" #include "common/utility.h" #include "configfile.h" #include "folder.h" #include "folderman.h" #include "networkjobs.h" #include "theme.h" +#include "ionostheme.h" #include #include #include @@ -77,6 +79,14 @@ SelectiveSyncWidget::SelectiveSyncWidget(AccountPtr account, QWidget *parent) auto header = new QLabel(this); header->setText(tr("Deselect remote folders you do not wish to synchronize.")); header->setWordWrap(true); + header->setStyleSheet( + IonosTheme::fontConfigurationCss( + IonosTheme::settingsFont(), + IonosTheme::settingsTextSize(), + IonosTheme::settingsTextWeight(), + IonosTheme::titleColor()) + + QStringLiteral("background-color: %1;").arg(IonosTheme::dialogBackgroundColor()) + ); layout->addWidget(header); layout->addWidget(_folderTree); @@ -94,6 +104,42 @@ SelectiveSyncWidget::SelectiveSyncWidget(AccountPtr account, QWidget *parent) _folderTree->headerItem()->setText(0, tr("Name")); _folderTree->headerItem()->setText(1, tr("Size")); + +#ifdef Q_OS_MAC + _folderTree->header()->setStyleSheet( + "QHeaderView::section {" + " background-color: white;" // Set the background color + " border: 1px solid #e6e6e6;" // Optional: add a border + " padding-left: 4px;" + + QString(IonosTheme::fontConfigurationCss( + IonosTheme::settingsFont(), + IonosTheme::settingsTextSize(), + IonosTheme::settingsTextWeight(), + IonosTheme::titleColor())) + + + "}" + ); +#else + _folderTree->header()->setStyleSheet( + IonosTheme::fontConfigurationCss( + IonosTheme::settingsFont(), + IonosTheme::settingsTextSize(), + IonosTheme::settingsTextWeight(), + IonosTheme::titleColor() + )); +#endif + + _folderTree->setStyleSheet(IonosTheme::fontConfigurationCss( + IonosTheme::settingsFont(), + IonosTheme::settingsTextSize(), + IonosTheme::settingsTextWeight(), + IonosTheme::titleColor() + )); + +#ifdef Q_OS_MAC + _folderTree->setPalette(QPalette(IonosTheme::white())); +#endif + ConfigFile::setupDefaultExcludeFilePaths(_excludedFiles); _excludedFiles.reloadExcludeFiles(); } @@ -477,6 +523,7 @@ SelectiveSyncDialog::SelectiveSyncDialog(AccountPtr account, Folder *folder, QWi , _folder(folder) { bool ok = false; + setWindowFlags(windowFlags() & ~Qt::WindowContextHelpButtonHint); init(account); QStringList selectiveSyncList = _folder->journalDb()->getSelectiveSyncList(SyncJournalDb::SelectiveSyncBlackList, &ok); if (ok) { @@ -494,6 +541,7 @@ SelectiveSyncDialog::SelectiveSyncDialog(AccountPtr account, const QString &fold , _folder(nullptr) { init(account); + setWindowFlags(windowFlags() & ~Qt::WindowContextHelpButtonHint); _selectiveSync->setFolderInfo(folder, folder, blacklist); } @@ -504,11 +552,42 @@ void SelectiveSyncDialog::init(const AccountPtr &account) _selectiveSync = new SelectiveSyncWidget(account, this); layout->addWidget(_selectiveSync); auto *buttonBox = new QDialogButtonBox(Qt::Horizontal); + _okButton = buttonBox->addButton(QDialogButtonBox::Ok); + _okButton->setProperty("buttonStyle", QVariant::fromValue(ButtonStyleName::Primary)); connect(_okButton, &QPushButton::clicked, this, &SelectiveSyncDialog::accept); + QPushButton *button = nullptr; button = buttonBox->addButton(QDialogButtonBox::Cancel); + +#ifdef Q_OS_MAC + _okButton->setStyleSheet( + _okButton->styleSheet() + QStringLiteral("QPushButton { %1; } ").arg( + IonosTheme::fontConfigurationCss( + IonosTheme::settingsFont(), + IonosTheme::settingsTextSize(), + IonosTheme::settingsTitleWeight500(), + IonosTheme::white() + ) + ) + ); + + button->setStyleSheet( + button->styleSheet() + QStringLiteral("QPushButton { %1; } ").arg( + IonosTheme::fontConfigurationCss( + IonosTheme::settingsFont(), + IonosTheme::settingsTextSize(), + IonosTheme::settingsTitleWeight500(), + IonosTheme::titleColor() + ) + ) + ); + + buttonBox->layout()->setSpacing(24); +#endif + connect(button, &QAbstractButton::clicked, this, &QDialog::reject); + layout->addWidget(buttonBox); } From f810ce8659b1d2d0e7234ad527515092787122a7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Christopher=20H=C3=A4tty?= Date: Wed, 22 Jan 2025 13:19:03 +0100 Subject: [PATCH 019/371] style settings - stettingsdialog & generalsettings 4c098926161b45c8144aae31d048b03234e85d88 --- src/gui/CMakeLists.txt | 2 + src/gui/generalsettings.cpp | 91 ++- src/gui/generalsettings.h | 4 + src/gui/generalsettings.ui | 1155 +++++++++++++++++++---------------- src/gui/settingsdialog.cpp | 105 ++-- 5 files changed, 790 insertions(+), 567 deletions(-) diff --git a/src/gui/CMakeLists.txt b/src/gui/CMakeLists.txt index 29dacc75e941e..44b86dc9ba16a 100644 --- a/src/gui/CMakeLists.txt +++ b/src/gui/CMakeLists.txt @@ -228,6 +228,8 @@ set(client_SRCS sessnackbar.cpp sesstyle.h sesstyle.cpp + linkbutton.h + linkbutton.cpp buttonstylestrategy.h sesFileIconProvider.h sesFileIconProvider.cpp diff --git a/src/gui/generalsettings.cpp b/src/gui/generalsettings.cpp index d9d0b5d2c45ee..151cc7db6a0b8 100644 --- a/src/gui/generalsettings.cpp +++ b/src/gui/generalsettings.cpp @@ -16,11 +16,13 @@ #include "ui_generalsettings.h" #include "theme.h" +#include "ionostheme.h" #include "configfile.h" #include "application.h" #include "owncloudsetupwizard.h" #include "accountmanager.h" #include "guiutility.h" +#include "linkbutton.h" #include "capabilities.h" #if defined(BUILD_UPDATER) @@ -49,6 +51,7 @@ #include #include #include +#include #include #include @@ -195,9 +198,9 @@ GeneralSettings::GeneralSettings(QWidget *parent) this, &GeneralSettings::slotToggleOptionalServerNotifications); _ui->serverNotificationsCheckBox->setToolTip(tr("Server notifications that require attention.")); - connect(_ui->chatNotificationsCheckBox, &QAbstractButton::toggled, - this, &GeneralSettings::slotToggleChatNotifications); - _ui->chatNotificationsCheckBox->setToolTip(tr("Show chat notification dialogs.")); + // connect(_ui->chatNotificationsCheckBox, &QAbstractButton::toggled, + // this, &GeneralSettings::slotToggleChatNotifications); + // _ui->chatNotificationsCheckBox->setToolTip(tr("Show chat notification dialogs.")); connect(_ui->callNotificationsCheckBox, &QAbstractButton::toggled, this, &GeneralSettings::slotToggleCallNotifications); @@ -227,7 +230,7 @@ GeneralSettings::GeneralSettings(QWidget *parent) _ui->infoAndUpdatesLabel->setOpenExternalLinks(true); // About legal notice - connect(_ui->legalNoticeButton, &QPushButton::clicked, this, &GeneralSettings::slotShowLegalNotice); + // connect(_ui->legalNoticeButton, &QPushButton::clicked, this, &GeneralSettings::slotShowLegalNotice); connect(_ui->usageDocumentationButton, &QPushButton::clicked, this, []() { Utility::openBrowser(QUrl(Theme::instance()->helpUrl())); @@ -267,8 +270,8 @@ GeneralSettings::GeneralSettings(QWidget *parent) int m1 = 0; int m2 = 0; int m3 = 0; - _ui->horizontalLayout_3->getContentsMargins(&m0, &m1, &m2, &m3); - _ui->horizontalLayout_3->setContentsMargins(0, m1, m2, m3); + _ui->horizontalLayout_1->getContentsMargins(&m0, &m1, &m2, &m3); + _ui->horizontalLayout_1->setContentsMargins(0, m1, m2, m3); // OEM themes are not obliged to ship mono icons, so there // is no point in offering an option @@ -279,7 +282,10 @@ GeneralSettings::GeneralSettings(QWidget *parent) // accountAdded means the wizard was finished and the wizard might change some options. connect(AccountManager::instance(), &AccountManager::accountAdded, this, &GeneralSettings::loadMiscSettings); - +connect(_ui->moreInfoLinkButton, &OCC::LinkButton::clicked, this, &GeneralSettings::slotOpenMoreInformationLink); + connect(_ui->legalNoticeLinkButton, &OCC::LinkButton::clicked, this, &GeneralSettings::slotOpenLegalNoticeLink); + connect(_ui->openSourceLinkButton, &OCC::LinkButton::clicked, this, &GeneralSettings::slotOpenOpenSourceLink); + connect(_ui->privacyLinkButton, &OCC::LinkButton::clicked, this, &GeneralSettings::slotOpenPrivacyLink); #if defined(BUILD_UPDATER) loadUpdateChannelsList(); #endif @@ -292,6 +298,26 @@ GeneralSettings::~GeneralSettings() delete _ui; } +void GeneralSettings::slotOpenMoreInformationLink() +{ + QDesktopServices::openUrl(QUrl("https://wl.hidrive.com/easy/0007/")); +} + +void GeneralSettings::slotOpenLegalNoticeLink() +{ + QDesktopServices::openUrl(QUrl("https://wl.hidrive.com/easy/0004/")); +} + +void GeneralSettings::slotOpenOpenSourceLink() +{ + QDesktopServices::openUrl(QUrl("https://wl.hidrive.com/easy/0006")); +} + +void GeneralSettings::slotOpenPrivacyLink() +{ + QDesktopServices::openUrl(QUrl("https://wl.hidrive.com/easy/0005/")); +} + QSize GeneralSettings::sizeHint() const { return { @@ -307,8 +333,8 @@ void GeneralSettings::loadMiscSettings() _ui->monoIconsCheckBox->setChecked(cfgFile.monoIcons()); _ui->serverNotificationsCheckBox->setChecked(cfgFile.optionalServerNotifications()); - _ui->chatNotificationsCheckBox->setEnabled(cfgFile.optionalServerNotifications()); - _ui->chatNotificationsCheckBox->setChecked(cfgFile.showChatNotifications()); + // _ui->chatNotificationsCheckBox->setEnabled(cfgFile.optionalServerNotifications()); + // _ui->chatNotificationsCheckBox->setChecked(cfgFile.showChatNotifications()); _ui->callNotificationsCheckBox->setEnabled(cfgFile.optionalServerNotifications()); _ui->callNotificationsCheckBox->setChecked(cfgFile.showCallNotifications()); _ui->showInExplorerNavigationPaneCheckBox->setChecked(cfgFile.showInExplorerNavigationPane()); @@ -560,7 +586,7 @@ void GeneralSettings::slotToggleOptionalServerNotifications(bool enable) { ConfigFile cfgFile; cfgFile.setOptionalServerNotifications(enable); - _ui->chatNotificationsCheckBox->setEnabled(enable); + // _ui->chatNotificationsCheckBox->setEnabled(enable); _ui->callNotificationsCheckBox->setEnabled(enable); } @@ -643,6 +669,51 @@ void GeneralSettings::customizeStyle() }(); _ui->infoAndUpdatesLabel->setText(aboutText); + this->setStyleSheet( + QStringLiteral("QGroupBox { border: %1; font-size: %2; font-weight: %3; color: %4; }").arg( + Theme::instance()->systemPalette()["base"].value().name(), + IonosTheme::settingsTitleSize(), + IonosTheme::settingsTitleWeight500(), + IonosTheme::black() + ) + ); + + this->setStyleSheet( + this->styleSheet() + QStringLiteral("QCheckBox { font-size: %1; font-weight: %2; margin-left: %3 px; color: %4; }").arg( + IonosTheme::settingsTextSize(), + IonosTheme::settingsTextWeight(), + IonosTheme::smallMargin(), + IonosTheme::black() + ) + ); + + this->setStyleSheet( + this->styleSheet() + QStringLiteral("QLabel { font-size: %1; font-weight: %2; color: %3; }").arg( + IonosTheme::settingsTextSize(), + IonosTheme::settingsTitleWeight500(), + IonosTheme::black() + ) + ); + + this->setStyleSheet( + this->styleSheet() + QStringLiteral("QFrame { font-size: %1; font-weight: %2; color: %3; }").arg( + IonosTheme::settingsTextSize(), + IonosTheme::settingsTitleWeight600(), + IonosTheme::black() + ) + ); + +#if defined(Q_OS_MAC) + _ui->generalBoxLayout->setMargin(16); + _ui->dataProtectionBoxLayout->setMargin(16); +#endif + + // SES-4 removed + _ui->monoIconsCheckBox->hide(); + _ui->callNotificationsCheckBox->hide(); + _ui->advanced_groupBox->hide(); + _ui->updates_frame->hide(); + #if defined(BUILD_UPDATER) // updater info slotUpdateInfo(); diff --git a/src/gui/generalsettings.h b/src/gui/generalsettings.h index 519a40b7fa2a9..db8547e3e1da1 100644 --- a/src/gui/generalsettings.h +++ b/src/gui/generalsettings.h @@ -60,6 +60,10 @@ private slots: void loadMiscSettings(); void slotShowLegalNotice(); void slotRemotePollIntervalChanged(int seconds); + void slotOpenMoreInformationLink(); + void slotOpenLegalNoticeLink(); + void slotOpenPrivacyLink(); + void slotOpenOpenSourceLink(); void updatePollIntervalVisibility(); #if defined(BUILD_UPDATER) void slotUpdateInfo(); diff --git a/src/gui/generalsettings.ui b/src/gui/generalsettings.ui index 623835e14926e..59f3cbb8f3079 100644 --- a/src/gui/generalsettings.ui +++ b/src/gui/generalsettings.ui @@ -1,527 +1,648 @@ - OCC::GeneralSettings - - - - 0 - 0 - 667 - 796 - - - - Form - - - - - - General Settings - - - - - - &Launch on System Startup + OCC::GeneralSettings + + + + 0 + 0 + 601 + 663 + - - - - - - Show Call Notifications + + Form - - - - - - For System Tray - - - Use &Monochrome Icons - - - - - - - Show Chat Notifications - - - - - - - Show Server &Notifications - - - - - - - - - - Advanced - - - - - - 0 - - - - - - - Ask for confirmation before synchronizing new folders larger than - - - true - - - - - - - Qt::Orientation::Horizontal - - - QSizePolicy::Policy::Fixed - - - - 10 - 20 - - - - - - - - 999999 + + + + 24 - - 99 + + 32 - - - - - - MB + + 24 - - - - - - - - - - Qt::Orientation::Horizontal + + 24 - - QSizePolicy::Policy::Fixed - - - - 20 - 20 - - - - - - - - Notify when synchronised folders grow larger than specified limit - - - - - - - - - - - Qt::Orientation::Horizontal - - - QSizePolicy::Policy::Fixed - - - - 40 - 20 - - - - - - - - Automatically disable synchronisation of folders that overcome limit - - - - - - - - - - - - - Ask for confirmation before synchronizing external storages - - - - - - - - - - - Move removed files to trash - - - - - - - - - - - Show sync folders in &Explorer's navigation pane - - - - - - - - - - - - 0 - 0 - - - - S&how crash reporter - - - - - - - - - - - - Server poll interval - - - - - - - 30 - - - 999999 - - - 1 - - - - - - - seconds (if <a href="https://github.com/nextcloud/notify_push">Client Push</a> is unavailable) - - - Qt::TextFormat::RichText - - - true - - - Qt::TextInteractionFlag::LinksAccessibleByKeyboard|Qt::TextInteractionFlag::LinksAccessibleByMouse - - - - - - - Qt::Orientation::Horizontal - - - - 40 - 20 - - - - - - - - - - - - - Edit &Ignored Files - - - - - - - Create Debug Archive - - - - - - - Qt::Orientation::Horizontal - - - - 555 - 20 - - - - - - - - - - - - - Info - - - - 10 - - - - - - 0 - 0 - - - - Desktop client x.x.x - - - - - - - - 0 - - - 1 - - - - - - - - 0 - 0 - - - - Update channel - - - - - - - - 0 - 0 - - - - - - - - - - - true - - - true - - - - - - - - 0 - 0 - - - - &Restart && Update - - - - - - - - - - - - 0 - 0 - - - - &Automatically check for updates - - - true - - - - - - - - 0 - 0 - - - - Check Now - - - - - - - Qt::Orientation::Horizontal - - - - 40 - 20 - - - - - - + + + + + + General Settings + + + + + + + + 3 + + + + + &Launch on system startup + + + + + + + Show server &notifications + + + + + + + For System Tray + + + Use &monochrome icons + + + + + + + Show call notifications + + + + + + + + + + Qt::Horizontal + + + + 20 + 0 + + + + + + + + + Updates + + + + + + + + 3 + + + + + + 0 + 0 + + + + &Automatically check for updates + + + true + + + + + + + + + + + + + Advanced + + + + + + 0 + + + + + + + Ask for confirmation before + synchronizing new folders larger than + + + true + + + + + + + Qt::Horizontal + + + QSizePolicy::Fixed + + + + 10 + 20 + + + + + + + + 999999 + + + 99 + + + + + + + + MB + + + + + + + + + + + Qt::Horizontal + + + QSizePolicy::Fixed + + + + 20 + 20 + + + + + + + + Notify when synchronised folders grow + larger than specified limit + + + + + + + + + + + Qt::Horizontal + + + QSizePolicy::Fixed + + + + 40 + 20 + + + + + + + + Automatically disable synchronisation of + folders that overcome limit + + + + + + + + + + + + + Ask for confirmation before synchronizing + external storages + + + + + + + + + + + Move removed files to trash + + + + + + + + + + + Show sync folders in &Explorer's navigation + pane + + + + + + + + + + + + 0 + 0 + + + + S&how crash reporter + + + + + + + + + + + Edit &Ignored Files + + + + + + + Create Debug Archive + + + + + + + Qt::Horizontal + + + + 555 + 20 + + + + + + + + + + + + + Qt::Vertical + + + + 20 + 16 + + + + QSizePolicy::Minimum + + + + + + + Data Protection + + + + 3 + + + + + &Analysis data collection for needs-based design + + + + + + + 12 + + + 5 + + + + + Legal Notice + + + + + + + Privacy Policy + + + + + + + Open Source Software + + + + + + + Qt::Horizontal + + + + 20 + 0 + + + + + + + + + + + + + + Qt::Vertical + + + + 20 + 10 + + + + + + + + + + + + + 0 + + + 0 + + + 0 + + + 0 + + + + + + + + 0 + 0 + + + + Update channel + + + + + + + + 0 + 0 + + + + + stable + + + + + beta + + + + + + + + + + + true + + + true + + + + + + + + 0 + 0 + + + + &Restart && Update + + + + + + + + + + + + 0 + 0 + + + + Check Now + + + + + + + Qt::Horizontal + + + + 40 + 20 + + + + + + + + + + + + Usage Documentation + + + + + + + Qt::Horizontal + + + + 40 + 20 + + + + + + + + + + + + + + + + + + + + + 0 + 0 + + + + Desktop client x.x.x + + + + + + + More Information + + + + + + + Qt::Horizontal + + + + 20 + 0 + + + + + + + - - - - - - - - Usage Documentation - - - - - - - Legal Notice - - - - - - - Qt::Orientation::Horizontal - - - - 40 - 20 - - - - - - - - - - - - Qt::Orientation::Vertical - - - - 20 - 0 - - - - - - - - autostartCheckBox - serverNotificationsCheckBox - ignoredFilesButton - newFolderLimitCheckBox - newFolderLimitSpinBox - crashreporterCheckBox - restartButton - - - - - newFolderLimitCheckBox - toggled(bool) - newFolderLimitSpinBox - setEnabled(bool) - - - 247 - 188 - - - 497 - 190 - - - - - + + autostartCheckBox + serverNotificationsCheckBox + monoIconsCheckBox + ignoredFilesButton + newFolderLimitCheckBox + newFolderLimitSpinBox + crashreporterCheckBox + restartButton + + + + + newFolderLimitCheckBox + toggled(bool) + newFolderLimitSpinBox + setEnabled(bool) + + + 247 + 188 + + + 497 + 190 + + + + + \ No newline at end of file diff --git a/src/gui/settingsdialog.cpp b/src/gui/settingsdialog.cpp index 31aba69c31898..2f734f889db4c 100644 --- a/src/gui/settingsdialog.cpp +++ b/src/gui/settingsdialog.cpp @@ -17,6 +17,7 @@ #include "folderman.h" #include "theme.h" +#include "ionostheme.h" #include "generalsettings.h" #include "networksettings.h" #include "accountsettings.h" @@ -45,10 +46,14 @@ namespace { const QString TOOLBAR_CSS() { - return QStringLiteral("QToolBar { background: %1; margin: 0; padding: 0; border: none; border-bottom: 1px solid %2; spacing: 0; } " - "QToolBar QToolButton { background: %1; border: none; border-bottom: 1px solid %2; margin: 0; padding: 5px; } " - "QToolBar QToolBarExtension { padding:0; } " - "QToolBar QToolButton:checked { background: %3; color: %4; }"); + return QStringLiteral("QToolBar { background: %1; border: none; border-bottom: 1px solid %2; } " + "QToolBar QToolButton { background: %1; border: none; margin: 2px 0px 7px 12px; padding: 11px 4px 4px 4px; border-radius: %5; %8; } " + "QToolBar QToolButton:checked { background: %7; color: %4; }" + "QToolBar QToolButton:hover { background: %3; }" + "QToolBar QToolButton:pressed { background: %6; color: %4; }" + "QToolBar::separator { height: 100%; width: 1px; background: %2; margin-left: 12px; } " // Style for the separator + "QToolBarExtension#qt_toolbar_ext_button {margin: 0 0 7px 0; padding: 0;}" // Style overflow button + ); } const float buttonSizeRatio = 1.618f; // golden ratio @@ -70,7 +75,7 @@ QString shortDisplayNameForSettings(OCC::Account *account, int width) QFont f; QFontMetrics fm(f); host = fm.elidedText(host, Qt::ElideMiddle, width); - user = fm.elidedText(user, Qt::ElideRight, width); + user = fm.elidedText(user, Qt::ElideMiddle, width); } return QStringLiteral("%1\n%2").arg(user, host); } @@ -88,8 +93,9 @@ SettingsDialog::SettingsDialog(ownCloudGui *gui, QWidget *parent) _ui->setupUi(this); _toolBar = new QToolBar; - _toolBar->setIconSize(QSize(32, 32)); + _toolBar->setIconSize(QSize(IonosTheme::toolbarIconSize(), IonosTheme::toolbarIconSize())); _toolBar->setToolButtonStyle(Qt::ToolButtonTextUnderIcon); + _toolBar->setFixedHeight(94); layout()->setMenuBar(_toolBar); // People perceive this as a Window, so also make Ctrl+W work @@ -113,13 +119,12 @@ SettingsDialog::SettingsDialog(ownCloudGui *gui, QWidget *parent) _actionGroup->setExclusive(true); connect(_actionGroup, &QActionGroup::triggered, this, &SettingsDialog::slotSwitchPage); - // Adds space between users + activities and general + network actions - auto *spacer = new QWidget(); - spacer->setMinimumWidth(10); - spacer->setSizePolicy(QSizePolicy::MinimumExpanding, QSizePolicy::Minimum); - _toolBar->addWidget(spacer); + QAction *newAccountAction = createColorAwareAction(QLatin1String(":/client/theme/ses/ses-darkPlus16.svg"), tr("New Account")); + _actionGroup->addAction(newAccountAction); + _toolBar->addAction(newAccountAction); + connect(newAccountAction, &QAction::triggered, _gui, &ownCloudGui::slotNewAccountWizard); - QAction *generalAction = createColorAwareAction(QLatin1String(":/client/theme/settings.svg"), tr("General")); + QAction *generalAction = createColorAwareAction(QLatin1String(":/client/theme/ses/ses-settings24.svg"), tr("General")); _actionGroup->addAction(generalAction); _toolBar->addAction(generalAction); auto *generalSettings = new GeneralSettings; @@ -134,15 +139,16 @@ SettingsDialog::SettingsDialog(ownCloudGui *gui, QWidget *parent) connect(AccountManager::instance(), &AccountManager::capabilitiesChanged, generalSettings, &GeneralSettings::loadUpdateChannelsList); #endif - QAction *networkAction = createColorAwareAction(QLatin1String(":/client/theme/network.svg"), tr("Network")); - _actionGroup->addAction(networkAction); - _toolBar->addAction(networkAction); - auto *networkSettings = new NetworkSettings; - _ui->stack->addWidget(networkSettings); + // SES-4 removed network settings + // QAction *networkAction = createColorAwareAction(QLatin1String(":/client/theme/network.svg"), tr("Network")); + // _actionGroup->addAction(networkAction); + // _toolBar->addAction(networkAction); + // auto *networkSettings = new NetworkSettings; + // _ui->stack->addWidget(networkSettings); _actionGroupWidgets.insert(generalAction, generalSettings); - _actionGroupWidgets.insert(networkAction, networkSettings); - + // _actionGroupWidgets.insert(networkAction, networkSettings); + _toolBar->addSeparator(); const auto accountsList = AccountManager::instance()->accounts(); for (const auto &account : accountsList) { accountAdded(account.data()); @@ -166,6 +172,7 @@ SettingsDialog::SettingsDialog(ownCloudGui *gui, QWidget *parent) setWindowFlags(windowFlags() & ~Qt::WindowContextHelpButtonHint); cfg.restoreGeometry(this); + resize(width() > IonosTheme::minimalSettingsDialogWidth() ? width(): IonosTheme::minimalSettingsDialogWidth(), height()); } SettingsDialog::~SettingsDialog() @@ -224,7 +231,7 @@ void SettingsDialog::showFirstPage() { QList actions = _toolBar->actions(); if (!actions.empty()) { - actions.first()->trigger(); + actions.at(1)->trigger(); } } @@ -242,14 +249,14 @@ void SettingsDialog::accountAdded(AccountState *s) bool brandingSingleAccount = !Theme::instance()->multiAccount(); const auto actionText = brandingSingleAccount ? tr("Account") : s->account()->displayName(); - const auto accountAction = createColorAwareAction(QLatin1String(":/client/theme/account.svg"), actionText); + const auto accountAction = createColorAwareAction(QLatin1String(":/client/theme/ses/ses-settingsAvatar.svg"), actionText); if (!brandingSingleAccount) { accountAction->setToolTip(s->account()->displayName()); accountAction->setIconText(shortDisplayNameForSettings(s->account().data(), static_cast(height * buttonSizeRatio))); } - _toolBar->insertAction(_toolBar->actions().at(0), accountAction); + _toolBar->addAction(accountAction); auto accountSettings = new AccountSettings(s, this); QString objectName = QLatin1String("accountSettings_"); objectName += s->account()->displayName(); @@ -283,16 +290,7 @@ void SettingsDialog::accountAdded(AccountState *s) void SettingsDialog::slotAccountAvatarChanged() { - auto *account = dynamic_cast(sender()); - if (account && _actionForAccount.contains(account)) { - QAction *action = _actionForAccount[account]; - if (action) { - QImage pix = account->avatar(); - if (!pix.isNull()) { - action->setIcon(QPixmap::fromImage(AvatarJob::makeCircularAvatar(pix))); - } - } - } + } void SettingsDialog::slotAccountDisplayNameChanged() @@ -344,18 +342,44 @@ void SettingsDialog::accountRemoved(AccountState *s) void SettingsDialog::customizeStyle() { - QString highlightColor(palette().highlight().color().name()); - QString highlightTextColor(palette().highlightedText().color().name()); - QString dark(palette().dark().color().name()); - QString background(palette().base().color().name()); - _toolBar->setStyleSheet(TOOLBAR_CSS().arg(background, dark, highlightColor, highlightTextColor)); + QVariantMap palette = Theme::instance()->systemPalette(); + + QString white(palette["window"].value().name()); + QString hoverColor(IonosTheme::toolButtonHoveredColor()); + QString pressedColor(IonosTheme::toolButtonPressedColor()); + QString selectedColor(IonosTheme::menuSelectedItemColor()); + + QString borderColor(palette["shadow"].value().name()); + QString highlightTextColor(palette["highlightedText"].value().name()); + + QString toolbarActionBorderRadius(IonosTheme::toolbarActionBorderRadius()); + QString toolbarSideMargin (IonosTheme::toolbarSideMargin()); + QString toolButtonFont ( + IonosTheme::fontConfigurationCss( + IonosTheme::settingsFont(), + IonosTheme::settingsTextSize(), + IonosTheme::settingsTextWeight(), + IonosTheme::menuTextColor() + ) + ); + + _toolBar->setStyleSheet( + TOOLBAR_CSS().arg(white, borderColor, hoverColor, highlightTextColor, toolbarActionBorderRadius, pressedColor, selectedColor, toolButtonFont) + ); for (const auto a : _actionGroup->actions()) { QIcon icon = Theme::createColorAwareIcon(a->property("iconPath").toString(), palette()); a->setIcon(icon); auto *btn = qobject_cast(_toolBar->widgetForAction(a)); - if (btn) + if (btn) { + Q_FOREACH (auto ai, AccountManager::instance()->accounts()){ + if (a->text().contains(ai->account()->displayName())){ + btn->setFixedWidth(164); + } + } + btn->setIcon(icon); + } } } @@ -382,10 +406,11 @@ class ToolButtonAction : public QWidgetAction QString objectName = QLatin1String("settingsdialog_toolbutton_"); objectName += text(); btn->setObjectName(objectName); - + btn->setFixedSize(150, 94); btn->setDefaultAction(this); btn->setToolButtonStyle(Qt::ToolButtonTextUnderIcon); - btn->setSizePolicy(QSizePolicy::Fixed, QSizePolicy::Expanding); + + btn->setSizePolicy(QSizePolicy::Minimum, QSizePolicy::Fixed); return btn; } }; From b80595503f91f913b223602f148de729a0a5b5fb Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Christopher=20H=C3=A4tty?= Date: Wed, 22 Jan 2025 15:24:07 +0100 Subject: [PATCH 020/371] style settings - systray, main & owncloudgui 4c098926161b45c8144aae31d048b03234e85d88 --- src/gui/main.cpp | 23 ++++++++++++----------- src/gui/owncloudgui.cpp | 5 ++++- src/gui/systray.cpp | 7 +++++++ 3 files changed, 23 insertions(+), 12 deletions(-) diff --git a/src/gui/main.cpp b/src/gui/main.cpp index dbbffc9fd9483..c5d70678938aa 100644 --- a/src/gui/main.cpp +++ b/src/gui/main.cpp @@ -25,6 +25,7 @@ #include "application.h" #include "cocoainitializer.h" #include "theme.h" +#include "ionostheme.h" #include "common/utility.h" #if defined(BUILD_UPDATER) @@ -40,6 +41,7 @@ #include #include #include +#include "sesstyle.h" using namespace OCC; @@ -84,19 +86,11 @@ int main(int argc, char **argv) #if defined Q_OS_MAC qmlStyle = QStringLiteral("macOS"); #elif defined Q_OS_WIN - if (QOperatingSystemVersion::current().version() < QOperatingSystemVersion::Windows11.version()) { - qmlStyle = QStringLiteral("Universal"); - widgetsStyle = QStringLiteral("Fusion"); - if (qEnvironmentVariableIsEmpty("QT_QUICK_CONTROLS_UNIVERSAL_THEME")) { - // initialise theme with the light/dark mode setting from the OS - qputenv("QT_QUICK_CONTROLS_UNIVERSAL_THEME", "System"); - } - } else { - qmlStyle = QStringLiteral("FluentWinUI3"); - widgetsStyle = QStringLiteral("windows11"); - } + qmlStyle = QStringLiteral("Fusion"); + QApplication::setFont(IonosTheme::settingsFontDefault()); #endif + QApplication::setStyle(new sesStyle); QQuickStyle::setStyle(qmlStyle); QQuickStyle::setFallbackStyle(QStringLiteral("Fusion")); @@ -205,5 +199,12 @@ int main(int argc, char **argv) } } + QString clientID; + if (clientID.isEmpty()) { + clientID = QUuid::createUuid().toString(); + } + + + return app.exec(); } diff --git a/src/gui/owncloudgui.cpp b/src/gui/owncloudgui.cpp index b147f136b9474..af423280b9038 100644 --- a/src/gui/owncloudgui.cpp +++ b/src/gui/owncloudgui.cpp @@ -76,7 +76,7 @@ namespace OCC { -Q_LOGGING_CATEGORY(lcOwnCloudGui, "com.nextcloud.owncloudgui") +Q_LOGGING_CATEGORY(lcOwnCloudGui, "com.ionos.hidrivenext.owncloudgui") const char propertyAccountC[] = "oc_account"; @@ -619,6 +619,9 @@ void ownCloudGui::slotShowSettings() #ifdef Q_OS_MAC auto *fgbg = new ForegroundBackground(); _settingsDialog->installEventFilter(fgbg); +#else + _settingsDialog->setStyleSheet(QStringLiteral("QDialog {background: %1}") + .arg(Theme::instance()->systemPalette()["base"].value().name())); #endif connect(_tray.data(), &Systray::hideSettingsDialog, diff --git a/src/gui/systray.cpp b/src/gui/systray.cpp index 6837073cea463..719cd73bc1c89 100644 --- a/src/gui/systray.cpp +++ b/src/gui/systray.cpp @@ -15,6 +15,7 @@ #include "accountmanager.h" #include "systray.h" #include "theme.h" +#include "ionostheme.h" #include "config.h" #include "common/utility.h" #include "tray/svgimageprovider.h" @@ -208,6 +209,12 @@ void Systray::setupContextMenu() resumeAction->setVisible(anyPaused); resumeAction->setEnabled(anyPaused); }); + + _contextMenu->setStyleSheet(IonosTheme::fontConfigurationCss( + IonosTheme::settingsFont(), + IonosTheme::settingsTextSize(), + IonosTheme::settingsTextWeight(), + IonosTheme::menuTextColor())); } void Systray::destroyDialog(QQuickWindow *dialog) const From 2ed2bfe6c28b45734c2a6e035f0c2dd70cc475ac Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Christopher=20H=C3=A4tty?= Date: Thu, 23 Jan 2025 08:05:01 +0100 Subject: [PATCH 021/371] style settings - ignorelisttablewidget 4c098926161b45c8144aae31d048b03234e85d88 --- src/gui/ignorelisttablewidget.cpp | 127 +++++++++++++++-- src/gui/ignorelisttablewidget.h | 4 + src/gui/ignorelisttablewidget.ui | 217 +++++++++++++++--------------- 3 files changed, 230 insertions(+), 118 deletions(-) diff --git a/src/gui/ignorelisttablewidget.cpp b/src/gui/ignorelisttablewidget.cpp index 1d4f2422599af..5991db8fc6bf5 100644 --- a/src/gui/ignorelisttablewidget.cpp +++ b/src/gui/ignorelisttablewidget.cpp @@ -3,8 +3,10 @@ #include "folderman.h" +#include "buttonstyle.h" #include #include +#include #include #include @@ -21,18 +23,29 @@ IgnoreListTableWidget::IgnoreListTableWidget(QWidget *parent) setWindowFlags(windowFlags() & ~Qt::WindowContextHelpButtonHint); ui->setupUi(this); - ui->descriptionLabel->setText(tr("Files or folders matching a pattern will not be synchronized.\n\n" - "Items where deletion is allowed will be deleted if they prevent a " - "directory from being removed. " - "This is useful for meta data.")); + customizeIgnoreListDialogStyle(); + + ui->descriptionLabel->setText(tr("Files or folders that match this pattern will not be synchronized.\n\n" + "Objects that are allowed to be deleted will be deleted if they would " + "prevent a folder from being deleted. " + "This is useful for metadata.")); - ui->removePushButton->setEnabled(false); connect(ui->tableWidget, &QTableWidget::itemSelectionChanged, this, &IgnoreListTableWidget::slotItemSelectionChanged); + + ui->removePushButton->setEnabled(false); + ui->removePushButton->setProperty("buttonStyle", QVariant::fromValue(OCC::ButtonStyleName::Secondary)); + ui->removePushButton->setMinimumSize(QSize(114, 40)); connect(ui->removePushButton, &QAbstractButton::clicked, this, &IgnoreListTableWidget::slotRemoveCurrentItem); + + ui->addPushButton->setProperty("buttonStyle", QVariant::fromValue(OCC::ButtonStyleName::Primary)); + ui->addPushButton->setMinimumSize(QSize(114, 40)); connect(ui->addPushButton, &QAbstractButton::clicked, this, &IgnoreListTableWidget::slotAddPattern); + + ui->removeAllPushButton->setProperty("buttonStyle", QVariant::fromValue(OCC::ButtonStyleName::Primary)); + ui->removeAllPushButton->setMinimumSize(QSize(114, 40)); connect(ui->removeAllPushButton, &QAbstractButton::clicked, this, &IgnoreListTableWidget::slotRemoveAllItems); @@ -108,10 +121,13 @@ void IgnoreListTableWidget::slotWriteIgnoreFile(const QString & file) void IgnoreListTableWidget::slotAddPattern() { - bool okClicked = false; - QString pattern = QInputDialog::getText(this, tr("Add Ignore Pattern"), - tr("Add a new ignore pattern:"), - QLineEdit::Normal, QString(), &okClicked); + QInputDialog inputDialog(this); + + customizeAddIgnorePatternDialogStyle(inputDialog); + + bool okClicked = inputDialog.exec() == QDialog::Accepted; + + QString pattern = inputDialog.textValue(); if (!okClicked || pattern.isEmpty()) return; @@ -167,4 +183,97 @@ int IgnoreListTableWidget::addPattern(const QString &pattern, bool deletable, bo return newRow; } +void IgnoreListTableWidget::customizeIgnoreListDialogStyle(){ + + ui->tableWidget->setStyleSheet( + QStringLiteral("QTableWidget { background-color: %1; color: %2; } ").arg( + IonosTheme::white(), + IonosTheme::black() + ) + + IonosTheme::fontConfigurationCss( + IonosTheme::settingsFont(), + IonosTheme::settingsTextSize(), + IonosTheme::settingsTextWeight(), + IonosTheme::titleColor() + ) + ); + + ui->descriptionLabel->setStyleSheet( + IonosTheme::fontConfigurationCss( + IonosTheme::settingsFont(), + IonosTheme::settingsTextSize(), + IonosTheme::settingsTextWeight(), + IonosTheme::titleColor() + ) + ); + + ui->tableWidget->horizontalHeader()->setStyleSheet( + QStringLiteral("QHeaderView::section { background-color: %1; color: %2; border-bottom: none; %3; }").arg( + IonosTheme::white(), + IonosTheme::black(), + IonosTheme::fontConfigurationCss( + IonosTheme::settingsFont(), + IonosTheme::settingsTextSize(), + IonosTheme::settingsTextWeight(), + IonosTheme::titleColor() + ) + ) + ); + + ui->tableWidget->setMinimumSize(374, 424); + +#if defined(Q_OS_MAC) + ui->verticalButtonLayout->setSpacing(30); + this->setFixedWidth(584); +#endif + +} + +void IgnoreListTableWidget::customizeAddIgnorePatternDialogStyle(QInputDialog &inputDialog){ + inputDialog.setWindowTitle(tr("Ignore Pattern")); + inputDialog.setLabelText(tr("Add New Ignore Pattern")); + inputDialog.setTextValue(QString()); + inputDialog.resize(626, 196); + inputDialog.setVisible(true); + inputDialog.setContentsMargins(12,0,12,12); + + QLabel *label = inputDialog.findChild(); + label->setAlignment(Qt::AlignCenter); + label->setStyleSheet( + IonosTheme::fontConfigurationCss( + IonosTheme::settingsFont(), + IonosTheme::settingsTextSize(), + IonosTheme::settingsTextWeight(), + IonosTheme::titleColor() + ) + ); + + QLineEdit *lineEdit = inputDialog.findChild(); + lineEdit->setStyleSheet( + QStringLiteral( + "color: %1; font-family: %2; font-size: %3; font-weight: %4; border-radius: %5; border: 1px " + "solid %6; padding: 0px 12px; text-align: left; vertical-align: middle; height: 40px; background: %7; ") + .arg(IonosTheme::folderWizardPathColor(), + IonosTheme::settingsFont(), + IonosTheme::settingsTextSize(), + IonosTheme::settingsTextWeight(), + IonosTheme::buttonRadius(), + IonosTheme::menuBorderColor(), + IonosTheme::white() + ) + ); + + QDialogButtonBox *buttonBox = inputDialog.findChild(); + buttonBox->setLayoutDirection(Qt::RightToLeft); + buttonBox->layout()->setSpacing(16); + buttonBox->setSizePolicy(QSizePolicy::Maximum, QSizePolicy::Fixed); + + QPushButton *okButton = buttonBox->button(QDialogButtonBox::Ok); + okButton->setProperty("buttonStyle", QVariant::fromValue(ButtonStyleName::Primary)); + +#if defined(Q_OS_MAC) + buttonBox->layout()->setSpacing(32); +#endif +} + } // namespace OCC diff --git a/src/gui/ignorelisttablewidget.h b/src/gui/ignorelisttablewidget.h index 39d43fde98247..ea4758d93490f 100644 --- a/src/gui/ignorelisttablewidget.h +++ b/src/gui/ignorelisttablewidget.h @@ -1,6 +1,7 @@ #pragma once #include +#include class QAbstractButton; @@ -32,6 +33,9 @@ private slots: private: void setupTableReadOnlyItems(); + void customizeIgnoreListDialogStyle(); + void customizeAddIgnorePatternDialogStyle(QInputDialog &inputDialog); + QString readOnlyTooltip; Ui::IgnoreListTableWidget *ui; }; diff --git a/src/gui/ignorelisttablewidget.ui b/src/gui/ignorelisttablewidget.ui index 1ea59cd4fd844..08d4a771a3088 100644 --- a/src/gui/ignorelisttablewidget.ui +++ b/src/gui/ignorelisttablewidget.ui @@ -1,112 +1,111 @@ - OCC::IgnoreListTableWidget - - - - 0 - 0 - 342 - 378 - - - - IgnoreListTableWidget - - - - - - true - - - QAbstractItemView::SingleSelection - - - QAbstractItemView::SelectRows - - - 2 - - - - Pattern - - - - - Allow Deletion - - + OCC::IgnoreListTableWidget + + + IgnoreListTableWidget + + + + 40 + + + + + 24 + + + 15 + + + + + true + + + QAbstractItemView::SingleSelection + + + QAbstractItemView::SelectRows + + + 2 + + + + Pattern + + + + + Allow Deletion + + + + + + + + 15 + + + Qt::AlignTop + + + + + true + + + Add + + + + + + + true + + + Remove + + + + + + + Remove all + + + + + + + + + + + true + + + + 0 + 0 + + + + + + + Qt::PlainText + + + true + + + + - - - - - true - - - Add - - - - - - - true - - - Remove - - - - - - - Remove all - - - - - - - true - - - Qt::Vertical - - - - 20 - 322 - - - - - - - - true - - - - 0 - 0 - - - - - - - Qt::PlainText - - - true - - - - - - - - + + + \ No newline at end of file From 5b2c80d7c72926417fda2947c1cc6deeef59e840 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Christopher=20H=C3=A4tty?= Date: Thu, 23 Jan 2025 08:45:18 +0100 Subject: [PATCH 022/371] style settings - folderwizard dialog 4c098926161b45c8144aae31d048b03234e85d88 --- src/gui/folderwizard.cpp | 320 ++++++++++++++++++++++++--- src/gui/folderwizard.h | 8 +- src/gui/folderwizardsourcepage.ui | 175 +++++++++++---- src/gui/folderwizardtargetpage.ui | 349 ++++++++++++++++++++---------- 4 files changed, 649 insertions(+), 203 deletions(-) diff --git a/src/gui/folderwizard.cpp b/src/gui/folderwizard.cpp index 9f31cf4b78b40..37cf2e367691c 100644 --- a/src/gui/folderwizard.cpp +++ b/src/gui/folderwizard.cpp @@ -20,7 +20,9 @@ #include "account.h" #include "selectivesyncdialog.h" #include "accountstate.h" +#include "buttonstyle.h" #include "creds/abstractcredentials.h" +#include "SesComponents/syncdirvalidation.h" #include "wizard/owncloudwizard.h" #include "common/asserts.h" @@ -30,6 +32,7 @@ #include #include #include +#include #include #include #include @@ -63,9 +66,9 @@ QString FormatWarningsWizardPage::formatWarnings(const QStringList &warnings) co { QString formattedWarning; if (warnings.count() == 1) { - formattedWarning = warnings.first(); + formattedWarning = tr("%1").arg(warnings.first()); } else if (warnings.count() > 1) { - formattedWarning = "
    "; + formattedWarning = tr("") + "
      "; for (const auto &warning : warnings) { formattedWarning += QString::fromLatin1("
    • %1
    • ").arg(warning); } @@ -91,8 +94,10 @@ FolderWizardLocalPath::FolderWizardLocalPath(const AccountPtr &account) _ui.localFolderLineEdit->setText(QDir::toNativeSeparators(defaultPath)); _ui.localFolderLineEdit->setToolTip(tr("Enter the path to the local folder.")); - _ui.warnLabel->setTextFormat(Qt::RichText); - _ui.warnLabel->hide(); + _ui.sesSnackBar->setWordWrap(true); + _ui.sesSnackBar->hide(); + + _ui.localFolderChooseBtn->setProperty("buttonStyle", QVariant::fromValue(OCC::ButtonStyleName::Primary)); changeStyle(); } @@ -101,12 +106,12 @@ FolderWizardLocalPath::~FolderWizardLocalPath() = default; void FolderWizardLocalPath::initializePage() { - _ui.warnLabel->hide(); + _ui.sesSnackBar->hide(); } void FolderWizardLocalPath::cleanupPage() { - _ui.warnLabel->hide(); + _ui.sesSnackBar->hide(); } bool FolderWizardLocalPath::isComplete() const @@ -117,23 +122,18 @@ bool FolderWizardLocalPath::isComplete() const const auto errorStr = FolderMan::instance()->checkPathValidityForNewFolder( QDir::fromNativeSeparators(_ui.localFolderLineEdit->text()), serverUrl).second; - - bool isOk = errorStr.isEmpty(); - QStringList warnStrings; - if (!isOk) { - warnStrings << errorStr; + if(errorStr.isEmpty()) + { + _ui.sesSnackBar->hide(); + _ui.sesSnackBar->clearMessage(); + return true; } - - _ui.warnLabel->setWordWrap(true); - if (isOk) { - _ui.warnLabel->hide(); - _ui.warnLabel->clear(); - } else { - _ui.warnLabel->show(); - QString warnings = formatWarnings(warnStrings); - _ui.warnLabel->setText(warnings); + else + { + _ui.sesSnackBar->show(); + _ui.sesSnackBar->setWarning(formatWarnings(QStringList(errorStr))); + return false; } - return isOk; } void FolderWizardLocalPath::slotChooseLocalFolder() @@ -152,6 +152,13 @@ void FolderWizardLocalPath::slotChooseLocalFolder() QString dir = QFileDialog::getExistingDirectory(this, tr("Select the source folder"), sf); + + SyncDirValidator syncDirValidator(dir); + if (!syncDirValidator.isValidDir()) { + _ui.sesSnackBar->show(); + _ui.sesSnackBar->setError(syncDirValidator.message()); + return; + } if (!dir.isEmpty()) { // set the last directory component name as alias _ui.localFolderLineEdit->setText(QDir::toNativeSeparators(dir)); @@ -178,8 +185,60 @@ void FolderWizardLocalPath::changeEvent(QEvent *e) void FolderWizardLocalPath::changeStyle() { - const auto yellowWarnPalette = yellowWarnWidgetPalette(_ui.warnLabel->palette()); - _ui.warnLabel->setPalette(yellowWarnPalette); + _ui.title->setStyleSheet(IonosTheme::fontConfigurationCss( + IonosTheme::settingsFont(), + IonosTheme::settingsBigTitleSize(), + IonosTheme::settingsTitleWeight600(), + IonosTheme::titleColor())); + + _ui.title->setProperty("text", tr("Add Folder Sync")); + + _ui.subTitle->setStyleSheet(IonosTheme::fontConfigurationCss( + IonosTheme::settingsFont(), + IonosTheme::settingsTextSize(), + IonosTheme::settingsTitleWeight600(), + IonosTheme::folderWizardSubtitleColor())); + + _ui.subTitle->setProperty("text", tr("Step 1 of 3: Select local folder")); + + _ui.description->setStyleSheet(IonosTheme::fontConfigurationCss( + IonosTheme::settingsFont(), + IonosTheme::settingsTextSize(), + IonosTheme::settingsTextWeight(), + IonosTheme::titleColor())); + + _ui.description->setProperty("text", + tr("Select a folder on your hard drive that should be permanetly connected to your %1. All files and " + "subfolders are automatically uploaded and synchronized").arg(Theme::instance()->appNameGUI())); + + _ui.localFolderLineEdit->setStyleSheet(QString( + "color: %1; font-family: %2; font-size: %3; font-weight: %4; border-radius: %5; border: 1px " + "solid %6; padding: 0px 12px; text-align: left; vertical-align: middle; height: 40px; background: %7; ") + .arg(IonosTheme::folderWizardPathColor()) + .arg(IonosTheme::settingsFont()) + .arg(IonosTheme::settingsTextSize()) + .arg(IonosTheme::settingsTextWeight()) + .arg(IonosTheme::buttonRadius()) + .arg(IonosTheme::menuBorderColor()) + .arg(IonosTheme::white()) + ); + + _ui.localFolderChooseBtn->setProperty("text", tr("Choose")); + + +#if defined(Q_OS_MAC) + _ui.localFolderChooseBtn->setStyleSheet( + QStringLiteral("QPushButton { margin-left: 5px; margin-top: 12px; height: 40px; width: 80px; %1} ").arg( + IonosTheme::fontConfigurationCss( + IonosTheme::settingsFont(), + IonosTheme::settingsTextSize(), + IonosTheme::settingsTitleWeight500(), + IonosTheme::white() + ) + ) + ); +#endif + } // ================================================================================= @@ -188,7 +247,7 @@ FolderWizardRemotePath::FolderWizardRemotePath(const AccountPtr &account) , _account(account) { _ui.setupUi(this); - _ui.warnFrame->hide(); + _ui.sesSnackBar->hide(); _ui.folderTreeWidget->setSortingEnabled(true); _ui.folderTreeWidget->sortByColumn(0, Qt::AscendingOrder); @@ -199,11 +258,21 @@ FolderWizardRemotePath::FolderWizardRemotePath(const AccountPtr &account) connect(_ui.folderTreeWidget, &QTreeWidget::currentItemChanged, this, &FolderWizardRemotePath::slotCurrentItemChanged); connect(_ui.folderEntry, &QLineEdit::textEdited, this, &FolderWizardRemotePath::slotFolderEntryEdited); + _ui.refreshButton->setProperty("buttonStyle", QVariant::fromValue(OCC::ButtonStyleName::Primary)); + _ui.addFolderButton->setProperty("buttonStyle", QVariant::fromValue(OCC::ButtonStyleName::Primary)); + + _ui.buttonLayout->setAlignment(Qt::AlignLeft); + _lscolTimer.setInterval(500); _lscolTimer.setSingleShot(true); connect(&_lscolTimer, &QTimer::timeout, this, &FolderWizardRemotePath::slotLsColFolderEntry); _ui.folderTreeWidget->header()->setSectionResizeMode(0, QHeaderView::ResizeToContents); + +#ifdef Q_OS_MAC + _ui.folderTreeWidget->setPalette(QPalette(IonosTheme::white())); +#endif + // Make sure that there will be a scrollbar when the contents is too wide _ui.folderTreeWidget->header()->setStretchLastSection(false); @@ -225,7 +294,47 @@ void FolderWizardRemotePath::slotAddRemoteFolder() dlg->setLabelText(tr("Enter the name of the new folder to be created below \"%1\":") .arg(parent)); dlg->open(this, SLOT(slotCreateRemoteFolder(QString))); + + QDialogButtonBox *buttonBox = dlg->findChild(); + buttonBox->setLayoutDirection(Qt::RightToLeft); + buttonBox->layout()->setSpacing(16); + buttonBox->setSizePolicy(QSizePolicy::Maximum, QSizePolicy::Fixed); + buttonBox->button(QDialogButtonBox::Ok)->setProperty("buttonStyle", QVariant::fromValue(OCC::ButtonStyleName::Primary)); dlg->setAttribute(Qt::WA_DeleteOnClose); + + dlg->findChild()->setStyleSheet( + QStringLiteral( + "color: %1; font-family: %2; font-size: %3; font-weight: %4; border-radius: %5; border: 1px " + "solid %6; padding: 0px 12px; text-align: left; vertical-align: middle; height: 40px; background: %7; ").arg( + IonosTheme::folderWizardPathColor(), + IonosTheme::settingsFont(), + IonosTheme::settingsTextSize(), + IonosTheme::settingsTextWeight(), + IonosTheme::buttonRadius(), + IonosTheme::menuBorderColor(), + IonosTheme::white() + ) + ); + + #ifdef Q_OS_MAC + buttonBox->layout()->setSpacing(24); + + dlg->setStyleSheet( + QStringLiteral(" %1; } ").arg( + IonosTheme::fontConfigurationCss( + IonosTheme::settingsFont(), + IonosTheme::settingsTextSize(), + IonosTheme::settingsTextWeight(), + IonosTheme::titleColor() + ) + ) + ); + + buttonBox->button(QDialogButtonBox::Ok)->setStyleSheet( + buttonBox->button(QDialogButtonBox::Ok)->styleSheet() + + QStringLiteral(" color: %1; ").arg(IonosTheme::white()) + ); + #endif } void FolderWizardRemotePath::slotCreateRemoteFolder(const QString &folder) @@ -251,7 +360,7 @@ void FolderWizardRemotePath::slotCreateRemoteFolder(const QString &folder) void FolderWizardRemotePath::slotCreateRemoteFolderFinished() { qCDebug(lcWizard) << "webdav mkdir request finished"; - showWarn(tr("Folder was successfully created on %1.").arg(Theme::instance()->appNameGUI())); + showSuccess(tr("Folder was successfully created on %1.").arg(Theme::instance()->appNameGUI())); slotRefreshFolders(); _ui.folderEntry->setText(dynamic_cast(sender())->path()); slotLsColFolderEntry(); @@ -261,9 +370,9 @@ void FolderWizardRemotePath::slotHandleMkdirNetworkError(QNetworkReply *reply) { qCWarning(lcWizard) << "webdav mkdir request failed:" << reply->error(); if (!_account->credentials()->stillValid(reply)) { - showWarn(tr("Authentication failed accessing %1").arg(Theme::instance()->appNameGUI())); + showError(tr("Authentication failed accessing %1").arg(Theme::instance()->appNameGUI())); } else { - showWarn(tr("Failed to create the folder on %1. Please check manually.") + showError(tr("Failed to create the folder on %1. Please check manually.") .arg(Theme::instance()->appNameGUI())); } } @@ -281,7 +390,7 @@ void FolderWizardRemotePath::slotHandleLsColNetworkError(QNetworkReply *reply) } auto job = qobject_cast(sender()); ASSERT(job); - showWarn(tr("Failed to list a folder. Error: %1") + showError(tr("Failed to list a folder. Error: %1") .arg(job->errorStringParsingBody())); } @@ -534,11 +643,33 @@ void FolderWizardRemotePath::initializePage() void FolderWizardRemotePath::showWarn(const QString &msg) const { if (msg.isEmpty()) { - _ui.warnFrame->hide(); + _ui.sesSnackBar->hide(); } else { - _ui.warnFrame->show(); - _ui.warnLabel->setText(msg); + _ui.sesSnackBar->show(); + _ui.sesSnackBar->setWarning(msg); + } +} + +void FolderWizardRemotePath::showSuccess(const QString &msg) const +{ + if (msg.isEmpty()) { + _ui.sesSnackBar->hide(); + + } else { + _ui.sesSnackBar->show(); + _ui.sesSnackBar->setSuccess(msg); + } +} + +void FolderWizardRemotePath::showError(const QString &msg) const +{ + if (msg.isEmpty()) { + _ui.sesSnackBar->hide(); + + } else { + _ui.sesSnackBar->show(); + _ui.sesSnackBar->setError(msg); } } @@ -560,27 +691,114 @@ void FolderWizardRemotePath::changeEvent(QEvent *e) void FolderWizardRemotePath::changeStyle() { - const auto yellowWarnPalette = yellowWarnWidgetPalette(_ui.warnLabel->palette()); - _ui.warnLabel->setPalette(yellowWarnPalette); + _ui.title->setStyleSheet(IonosTheme::fontConfigurationCss( + IonosTheme::settingsFont(), + IonosTheme::settingsBigTitleSize(), + IonosTheme::settingsTitleWeight600(), + IonosTheme::titleColor())); + + _ui.title->setProperty("text", tr("Add Folder Sync")); + + _ui.subTitle->setStyleSheet(IonosTheme::fontConfigurationCss( + IonosTheme::settingsFont(), + IonosTheme::settingsTextSize(), + IonosTheme::settingsTitleWeight600(), + IonosTheme::folderWizardSubtitleColor())); + + _ui.subTitle->setProperty("text", tr("Step 2 of 3: Directory in your %1").arg(Theme::instance()->appNameGUI())); + + _ui.description1->setStyleSheet(IonosTheme::fontConfigurationCss( + IonosTheme::settingsFont(), + IonosTheme::settingsTextSize(), + IonosTheme::settingsTextWeight(), + IonosTheme::titleColor())); + + _ui.description1->setProperty("text", + tr("Please now select or create a target folder in your %1 where the content should be uploaded and synchronized.").arg(Theme::instance()->appNameGUI())); + + _ui.description2->setProperty("text", + tr("Both folders are permanently linked and the respective contents are automatically synchronized and updated.")); + + _ui.description2->setStyleSheet(IonosTheme::fontConfigurationCss( + IonosTheme::settingsFont(), + IonosTheme::settingsTextSize(), + IonosTheme::settingsTextWeight(), + IonosTheme::titleColor())); + + _ui.folderEntry->setStyleSheet( + QStringLiteral("color: %1; font-family: %2; font-size: %3; font-weight: %4; border-radius: %5; border: 1px " + "solid %6; padding: 0px 12px; text-align: left; vertical-align: middle; height: 40px;") + .arg(IonosTheme::folderWizardPathColor()) + .arg(IonosTheme::settingsFont()) + .arg(IonosTheme::settingsTextSize()) + .arg(IonosTheme::settingsTextWeight()) + .arg(IonosTheme::buttonRadius()) + .arg(IonosTheme::menuBorderColor())); + + _ui.folderTreeWidget->setStyleSheet(IonosTheme::fontConfigurationCss( + IonosTheme::settingsFont(), + IonosTheme::settingsTextSize(), + IonosTheme::settingsTextWeight(), + IonosTheme::titleColor())); + + _ui.refreshButton->setProperty("text", tr("Refresh")); + + _ui.addFolderButton->setProperty("text", tr("Create folder")); + +#if defined(Q_OS_MAC) + _ui.buttonLayout->setSpacing(24); +#endif } // ==================================================================================== FolderWizardSelectiveSync::FolderWizardSelectiveSync(const AccountPtr &account) { - auto *layout = new QVBoxLayout(this); + _uiSelectiveSync.setupUi(this); + auto *layout = _uiSelectiveSync.verticalLayout; _selectiveSync = new SelectiveSyncWidget(account, this); layout->addWidget(_selectiveSync); if (!Theme::instance()->disableVirtualFilesSyncFolder() && Theme::instance()->showVirtualFilesOption() && bestAvailableVfsMode() != Vfs::Off) { _virtualFilesCheckBox = new QCheckBox(tr("Use virtual files instead of downloading content immediately %1").arg(bestAvailableVfsMode() == Vfs::WindowsCfApi ? QString() : tr("(experimental)"))); + connect(_virtualFilesCheckBox, &QCheckBox::clicked, this, &FolderWizardSelectiveSync::virtualFilesCheckboxClicked); - connect(_virtualFilesCheckBox, &QCheckBox::checkStateChanged, this, [this](int state) { + connect(_virtualFilesCheckBox, &QCheckBox::stateChanged, this, [this](int state) { _selectiveSync->setEnabled(state == Qt::Unchecked); }); _virtualFilesCheckBox->setChecked(bestAvailableVfsMode() == Vfs::WindowsCfApi); + _virtualFilesCheckBox->setStyleSheet("margin-top: 5px;"); + layout->addWidget(_virtualFilesCheckBox); + + _virtualFilesCheckBox->setStyleSheet(IonosTheme::fontConfigurationCss( + IonosTheme::settingsFont(), + IonosTheme::settingsTextSize(), + IonosTheme::settingsTextWeight(), + IonosTheme::titleColor())); } + + _selectiveSync->setStyleSheet(IonosTheme::fontConfigurationCss( + IonosTheme::settingsFont(), + IonosTheme::settingsTextSize(), + IonosTheme::settingsTextWeight(), + IonosTheme::titleColor())); + + _uiSelectiveSync.title->setStyleSheet(IonosTheme::fontConfigurationCss( + IonosTheme::settingsFont(), + IonosTheme::settingsBigTitleSize(), + IonosTheme::settingsTitleWeight600(), + IonosTheme::titleColor())); + _uiSelectiveSync.title->setProperty("text", tr("Add Folder Sync")); + + _uiSelectiveSync.subTitle->setStyleSheet(IonosTheme::fontConfigurationCss( + IonosTheme::settingsFont(), + IonosTheme::settingsTextSize(), + IonosTheme::settingsTitleWeight600(), + IonosTheme::folderWizardSubtitleColor())); + + _uiSelectiveSync.subTitle->setProperty("text", tr("Step 3 of 3: Selektive Synchronisation")); + } FolderWizardSelectiveSync::~FolderWizardSelectiveSync() = default; @@ -679,7 +897,6 @@ FolderWizard::FolderWizard(AccountPtr account, QWidget *parent) , _folderWizardSourcePage(new FolderWizardLocalPath(account)) , _folderWizardSelectiveSyncPage(new FolderWizardSelectiveSync(account)) { - setWizardStyle(QWizard::ModernStyle); setWindowFlags(windowFlags() & ~Qt::WindowContextHelpButtonHint); setPage(Page_Source, _folderWizardSourcePage); _folderWizardSourcePage->installEventFilter(this); @@ -691,8 +908,14 @@ FolderWizard::FolderWizard(AccountPtr account, QWidget *parent) setPage(Page_SelectiveSync, _folderWizardSelectiveSyncPage); setWindowTitle(tr("Add Folder Sync Connection")); + setButtonLayout({ QWizard::Stretch, QWizard::CancelButton, QWizard::NextButton, QWizard::FinishButton }); setOptions(QWizard::CancelButtonOnLeft); setButtonText(QWizard::FinishButton, tr("Add Sync Connection")); + button(QWizard::NextButton)->setProperty("buttonStyle", QVariant::fromValue(OCC::ButtonStyleName::Primary)); + + adjustWizardSize(); + setWizardStyle(QWizard::ClassicStyle); + customizeStyle(); } FolderWizard::~FolderWizard() = default; @@ -720,4 +943,29 @@ void FolderWizard::resizeEvent(QResizeEvent *event) } } +void FolderWizard::customizeStyle() +{ + // HINT: Customize wizard's own style here, if necessary in the future (Dark-/Light-Mode switching) + + // Set background colors + auto wizardPalette = palette(); + const auto backgroundColor = QColor(IonosTheme::dialogBackgroundColor()); + + // Set Color of upper part + wizardPalette.setColor(QPalette::Base, backgroundColor); + + // Set Color of lower part + wizardPalette.setColor(QPalette::Window, backgroundColor); + + // Set separator color + wizardPalette.setColor(QPalette::Mid, backgroundColor); + + setPalette(wizardPalette); +} + +void FolderWizard::adjustWizardSize() +{ + setFixedSize(QSize(576, 704)); +} + } // end namespace diff --git a/src/gui/folderwizard.h b/src/gui/folderwizard.h index 867a50ec7b967..5d27eb367156b 100644 --- a/src/gui/folderwizard.h +++ b/src/gui/folderwizard.h @@ -24,6 +24,7 @@ #include "ui_folderwizardsourcepage.h" #include "ui_folderwizardtargetpage.h" +#include "ui_folderwizardselectivesync.h" class QCheckBox; @@ -95,6 +96,8 @@ class FolderWizardRemotePath : public FormatWarningsWizardPage protected slots: void showWarn(const QString & = QString()) const; + void showSuccess(const QString & = QString()) const; + void showError(const QString & = QString()) const; void slotAddRemoteFolder(); void slotCreateRemoteFolder(const QString &); void slotCreateRemoteFolderFinished(); @@ -146,6 +149,7 @@ private slots: void virtualFilesCheckboxClicked(); private: + Ui_FolderWizardSelectiveSync _uiSelectiveSync{}; SelectiveSyncWidget *_selectiveSync; QCheckBox *_virtualFilesCheckBox = nullptr; }; @@ -174,8 +178,10 @@ class FolderWizard : public QWizard FolderWizardLocalPath *_folderWizardSourcePage; FolderWizardRemotePath *_folderWizardTargetPage = nullptr; FolderWizardSelectiveSync *_folderWizardSelectiveSyncPage; -}; + void customizeStyle(); + void adjustWizardSize(); +}; } // namespace OCC diff --git a/src/gui/folderwizardsourcepage.ui b/src/gui/folderwizardsourcepage.ui index 94af3645a594f..4175c0c13519a 100644 --- a/src/gui/folderwizardsourcepage.ui +++ b/src/gui/folderwizardsourcepage.ui @@ -6,69 +6,152 @@ 0 0 - 423 - 174 + 639 + 460 Form - + + + + 20 + + + 0 + + + 20 + + + 0 + + + + + font: 18pt bold; + + + Add Folder Sync + + + Qt::PlainText + + + false + + + + + + + color: rgb(16, 73, 150); font: bold; + + + Step 1 of 3: Select local folder + + + Qt::PlainText + + + false + + + + + + + Qt::Vertical + + + QSizePolicy::Preferred + + + + 20 + 20 + + + + + + + + + 0 + 0 + + + + Select a folder on your hard drive that should be permanetly connected to your %1. All files and subfolders are automatically uploaded and synchronized + + + Qt::PlainText + + + true + + + + + + + Qt::Vertical + + + QSizePolicy::Preferred + + + + 20 + 15 + + + + + + + + + + + + 85 + 16777215 + + + + &Choose + + + + + + + true + + + + + + Qt::Vertical + + QSizePolicy::Preferred + 349 - 0 + 360 - - - - Pick a local folder on your computer to sync - - - - - - - - - - - &Choose … - - - - - - - - - - - - true - - - QFrame::StyledPanel - - - - - - Qt::RichText - - - 3 - - - diff --git a/src/gui/folderwizardtargetpage.ui b/src/gui/folderwizardtargetpage.ui index 4e53902aba6b2..937956c683747 100644 --- a/src/gui/folderwizardtargetpage.ui +++ b/src/gui/folderwizardtargetpage.ui @@ -1,125 +1,234 @@ - FolderWizardTargetPage - - - - 0 - 0 - 520 - 350 - - - - Form - - - - - - - - - true - - - QFrame::NoFrame - - - QFrame::Raised - - - - - - - - true - - - QFrame::NoFrame - - - QFrame::Plain - - - TextLabel - - - Qt::RichText - - - true - - - 3 - - - - - - - - - - - - Select a remote destination folder - - - true - - - false - - - - - - Create folder - - - - - - - Qt::Vertical - - - - 20 - 40 - + FolderWizardTargetPage + + + + 0 + 0 + 639 + 460 + - - - - - - Refresh + + Form - - - - - - true - - - true - - - - Folders - - - - - + + + + + 20 + + + 0 + + + 20 + + + 0 + + + + + font: 18pt bold; + + + Add Folder Sync + + + Qt::PlainText + + + false + + + + + + + color: rgb(16,73, 150);font: bold; + + + Step 2 of 3: Directory in your %1 + + + Qt::PlainText + + + false + + + + + + + Qt::Vertical + + + QSizePolicy::Preferred + + + + 20 + 20 + + + + + + + + + 0 + 0 + + + + Please now select or create a target folder in your %1 where the content should be uploaded and synchronized. + + + Qt::PlainText + + + true + + + + + + + + 0 + 0 + + + + Both folders are permanently linked and the respective contents are automatically synchronized and updated. + + + Qt::PlainText + + + true + + + + + + + Qt::Vertical + + + QSizePolicy::Preferred + + + + 20 + 12 + + + + + + + + + 0 + 0 + + + + + 0 + 0 + + + + + + + + + 0 + 0 + + + + true + + + true + + + + Folders + + + + + + + + true + + + + + + + Qt::Vertical + + + QSizePolicy::Preferred + + + + 20 + 10 + + + + + + + + 16 + + + + + + 86 + 40 + + + + Refresh + + + + + + + + 167 + 40 + + + + Create folder + + + + + + + + - - - - - - + + + \ No newline at end of file From a855375645b1017b49f0b12d88424649fd2b0135 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Christopher=20H=C3=A4tty?= Date: Thu, 23 Jan 2025 09:43:23 +0100 Subject: [PATCH 023/371] style settings - folderstatusdelegate (treeview) 4c098926161b45c8144aae31d048b03234e85d88 --- src/gui/folderstatusdelegate.cpp | 335 ++++++++++++++++++++----------- src/gui/folderstatusdelegate.h | 11 +- src/gui/folderstatusview.cpp | 10 +- 3 files changed, 228 insertions(+), 128 deletions(-) diff --git a/src/gui/folderstatusdelegate.cpp b/src/gui/folderstatusdelegate.cpp index 45350b469fabb..4532dc92b1887 100644 --- a/src/gui/folderstatusdelegate.cpp +++ b/src/gui/folderstatusdelegate.cpp @@ -19,7 +19,11 @@ #include "folderstatusview.h" #include "folderman.h" #include "accountstate.h" +#include "sesstyle.h" +#include "buttonstyle.h" + #include +#include #include #include @@ -27,14 +31,7 @@ #include #include #include - -inline static QFont makeAliasFont(const QFont &normalFont) -{ - QFont aliasFont = normalFont; - aliasFont.setBold(true); - aliasFont.setPointSize(normalFont.pointSize() + 2); - return aliasFont; -} +#include namespace { #ifdef Q_OS_MACOS @@ -44,6 +41,14 @@ namespace { namespace OCC { +inline static QFont makeAliasFont(const QFont &normalFont) +{ + QFont aliasFont = normalFont; + aliasFont.setWeight(IonosTheme::settingsTitleWeightDemiBold()); + aliasFont.setPixelSize(IonosTheme::settingsBigTitlePixel()); + return aliasFont; +} + FolderStatusDelegate::FolderStatusDelegate() : QStyledItemDelegate() { @@ -52,15 +57,21 @@ FolderStatusDelegate::FolderStatusDelegate() QString FolderStatusDelegate::addFolderText() { - return tr("Add Folder Sync Connection"); + return tr("Add live backup"); +} + +QString FolderStatusDelegate::addInfoText() +{ + return tr("Synchronize any other local folder with your %1").arg(Theme::instance()->appNameGUI()); } // allocate each item size in listview. QSize FolderStatusDelegate::sizeHint(const QStyleOptionViewItem &option, const QModelIndex &index) const { - QFont aliasFont = makeAliasFont(option.font); - QFont font = option.font; + QFont font = QFont(option.font); + font.setPixelSize(IonosTheme::settingsTextPixel()); + QFont aliasFont = makeAliasFont(font); QFontMetrics fm(font); QFontMetrics aliasFm(aliasFont); @@ -71,7 +82,7 @@ QSize FolderStatusDelegate::sizeHint(const QStyleOptionViewItem &option, QFontMetrics fm(qApp->font("QPushButton")); QStyleOptionButton opt; static_cast(opt) = option; - opt.text = addFolderText(); + opt.text = addInfoText(); return QApplication::style()->sizeFromContents( QStyle::CT_PushButton, &opt, fm.size(Qt::TextSingleLine, opt.text)) + QSize(0, margins); } @@ -111,22 +122,78 @@ int FolderStatusDelegate::rootFolderHeightWithoutErrors(const QFontMetrics &fm, return h; } +void FolderStatusDelegate::drawAddButton(QPainter *painter, const QStyleOptionViewItem &option, const QModelIndex &index) const +{ + QFont titleFont = option.font; + titleFont.setWeight(IonosTheme::settingsTitleWeightDemiBold()); + titleFont.setPixelSize(IonosTheme::settingsTitlePixel()); + QFontMetrics titleTextFm(titleFont); + const auto baseDistanceForCalculus = titleTextFm.height() / 2; + + QFont subtitleFont = option.font; + + QFontMetrics subtitleTextFm(subtitleFont); + const auto distanceToSubline = subtitleTextFm.height() / 4; + + auto iconBox = option.rect; + iconBox.setTop(iconBox.top() + baseDistanceForCalculus); + iconBox.setBottom(iconBox.top() + IonosTheme::treeViewIconSize()); + iconBox.setLeft(iconBox.left() + baseDistanceForCalculus); + iconBox.setWidth(iconBox.height()); + + auto titleBox = option.rect; + titleBox.setTop(iconBox.top()); + titleBox.setBottom(iconBox.bottom() - distanceToSubline); + titleBox.setRight(titleBox.right() - baseDistanceForCalculus); + titleBox.setLeft(iconBox.right() + baseDistanceForCalculus); + + auto subtitleBox = option.rect; + subtitleBox.setTop(titleBox.bottom() + distanceToSubline); + subtitleBox.setBottom(subtitleBox.top() + 4 * distanceToSubline); + subtitleBox.setLeft(iconBox.right() + baseDistanceForCalculus); + subtitleBox.setRight(subtitleBox.right() - baseDistanceForCalculus); + + auto titleText = addFolderText(); + auto subtitleText = addInfoText(); + auto addIcon = QIcon(IonosTheme::liveBackupPlusIcon()); + const auto addPixmap = addIcon.pixmap(iconBox.size(), QIcon::Normal); + + painter->save(); + painter->drawPixmap(QStyle::visualRect(option.direction, option.rect, iconBox).left(), iconBox.top(), addPixmap); + + drawElidedText(painter, option, titleTextFm, titleFont, titleText, titleBox); + + drawElidedText(painter, option, subtitleTextFm, subtitleFont, subtitleText, subtitleBox); + + painter->restore(); +} + +void FolderStatusDelegate::drawElidedText(QPainter *painter, QStyleOptionViewItem option, QFontMetrics fontMetric, QFont font, QString text, QRect rect) const{ + const auto elidedText = fontMetric.elidedText(text, Qt::ElideRight, rect.width()); + painter->setFont(font); + painter->drawText(QStyle::visualRect(option.direction, option.rect, rect), Qt::AlignLeft, elidedText); +} + void FolderStatusDelegate::paint(QPainter *painter, const QStyleOptionViewItem &option, const QModelIndex &index) const { + QStyleOptionViewItem opt = option; + QFont font = opt.font; + font.setPixelSize(IonosTheme::settingsTextPixel()); + opt.font = font; + + QStyledItemDelegate::paint(painter, opt, index); + if (index.data(AddButton).toBool()) { - const_cast(option).showDecorationSelected = false; + drawAddButton(painter, opt, index); + return; } - QStyledItemDelegate::paint(painter, option, index); - auto textAlign = Qt::AlignLeft; - const auto aliasFont = makeAliasFont(option.font); - const auto subFont = option.font; - const auto errorFont = subFont; - auto progressFont = subFont; + const auto aliasFont = makeAliasFont(opt.font); + const auto subFont = opt.font; - progressFont.setPointSize(subFont.pointSize() - 2); + const auto errorFont = subFont; QFontMetrics subFm(subFont); QFontMetrics aliasFm(aliasFont); @@ -134,23 +201,6 @@ void FolderStatusDelegate::paint(QPainter *painter, const QStyleOptionViewItem & const auto aliasMargin = aliasFm.height() / 2; const auto margin = subFm.height() / 4; - if (index.data(AddButton).toBool()) { - QStyleOptionButton opt; - static_cast(opt) = option; - if (opt.state & QStyle::State_Enabled && opt.state & QStyle::State_MouseOver && index == _pressedIndex) { - opt.state |= QStyle::State_Sunken; - } else { - opt.state |= QStyle::State_Raised; - } - opt.text = addFolderText(); - opt.rect = addButtonRect(option.rect, option.direction); - painter->save(); - painter->setFont(qApp->font("QPushButton")); - QApplication::style()->drawControl(QStyle::CE_PushButton, &opt, painter, option.widget); - painter->restore(); - return; - } - if (dynamic_cast(index.model())->classify(index) != FolderStatusModel::RootFolder) { return; } @@ -163,7 +213,6 @@ void FolderStatusDelegate::paint(QPainter *painter, const QStyleOptionViewItem & auto errorTexts = qvariant_cast(index.data(FolderErrorMsg)); auto infoTexts = qvariant_cast(index.data(FolderInfoMsg)); - auto overallPercent = qvariant_cast(index.data(SyncProgressOverallPercent)); auto overallString = qvariant_cast(index.data(SyncProgressOverallString)); auto itemString = qvariant_cast(index.data(SyncProgressItemString)); auto warningCount = qvariant_cast(index.data(WarningCount)); @@ -192,7 +241,7 @@ void FolderStatusDelegate::paint(QPainter *painter, const QStyleOptionViewItem & localPathRect.setTop(remotePathRect.bottom() + margin); localPathRect.setBottom(localPathRect.top() + subFm.height()); - iconRect.setBottom(localPathRect.bottom()); + iconRect.setBottom(iconRect.top() + IonosTheme::treeViewIconSize()); iconRect.setWidth(iconRect.height()); const auto nextToIcon = iconRect.right() + aliasMargin; @@ -202,8 +251,6 @@ void FolderStatusDelegate::paint(QPainter *painter, const QStyleOptionViewItem & const auto iconSize = iconRect.width(); - auto optionsButtonVisualRect = optionsButtonRect(option.rect, option.direction); - const auto statusPixmap = statusIcon.pixmap(iconSize, iconSize, syncEnabled ? QIcon::Normal : QIcon::Disabled); painter->drawPixmap(QStyle::visualRect(option.direction, option.rect, iconRect).left(), iconRect.top(), statusPixmap); @@ -235,37 +282,32 @@ void FolderStatusDelegate::paint(QPainter *painter, const QStyleOptionViewItem & painter->setPen(palette.color(colourGroup, QPalette::Text)); } - const auto elidedAlias = aliasFm.elidedText(aliasText, Qt::ElideRight, aliasRect.width()); - painter->setFont(aliasFont); - painter->drawText(QStyle::visualRect(option.direction, option.rect, aliasRect), textAlign, elidedAlias); + drawElidedText(painter, option, aliasFm, aliasFont, aliasText, aliasRect); const auto showProgess = !overallString.isEmpty() || !itemString.isEmpty(); if (!showProgess) { - painter->setFont(subFont); - const auto elidedRemotePathText = subFm.elidedText(syncText, Qt::ElideRight, remotePathRect.width()); - painter->drawText(QStyle::visualRect(option.direction, option.rect, remotePathRect), textAlign, elidedRemotePathText); + drawElidedText(painter, option, subFm, subFont, syncText, remotePathRect); - const auto elidedPathText = subFm.elidedText(pathText, Qt::ElideMiddle, localPathRect.width()); - painter->drawText(QStyle::visualRect(option.direction, option.rect, localPathRect), textAlign, elidedPathText); + drawElidedText(painter, option, subFm, subFont, pathText, localPathRect); } - auto textBoxTop = iconRect.bottom() + margin; + auto textBoxTop = qMax(localPathRect.bottom(), remotePathRect.bottom()) + margin; // paint an error overlay if there is an error string or conflict string - auto drawTextBox = [&](const QStringList &texts, QColor color) { + auto drawTextBox = [&](const QStringList &texts, QColor color, QColor borderColor) { auto rect = localPathRect; rect.setLeft(iconRect.left()); rect.setTop(textBoxTop); rect.setHeight(texts.count() * subFm.height() + 2 * margin); - rect.setRight(option.rect.right() - margin); + rect.setRight(option.rect.right() - aliasMargin); // save previous state to not mess up colours with the background (fixes issue: https://github.com/nextcloud/desktop/issues/1237) painter->save(); painter->setBrush(color); - painter->setPen(QColor(0xaa, 0xaa, 0xaa)); + painter->setPen(borderColor); painter->drawRoundedRect(QStyle::visualRect(option.direction, option.rect, rect), 4, 4); - painter->setPen(Qt::white); + painter->setPen(Qt::black); painter->setFont(errorFont); QRect textRect(rect.left() + margin, rect.top() + margin, @@ -283,73 +325,118 @@ void FolderStatusDelegate::paint(QPainter *painter, const QStyleOptionViewItem & }; if (!conflictTexts.isEmpty()) { - drawTextBox(conflictTexts, QColor(0xba, 0xba, 0x4d)); + drawTextBox(conflictTexts, QColor(IonosTheme::warningColor()), QColor(IonosTheme::warningBorderColor())); } if (!errorTexts.isEmpty()) { - drawTextBox(errorTexts, QColor(0xbb, 0x4d, 0x4d)); + drawTextBox(errorTexts, QColor(IonosTheme::errorColor()), QColor(IonosTheme::errorBorderColor())); } if (!infoTexts.isEmpty()) { - drawTextBox(infoTexts, QColor(0x4d, 0x4d, 0xba)); + drawTextBox(infoTexts, QColor(IonosTheme::infoColor()), QColor(IonosTheme::infoBorderColor())); } // Sync File Progress Bar: Show it if syncFile is not empty. if (showProgess) { - const auto fileNameTextHeight = subFm.boundingRect(tr("File")).height(); - constexpr auto barHeight = 7; // same height as quota bar - const auto overallWidth = option.rect.right() - aliasMargin - optionsButtonVisualRect.width() - nextToIcon; + drawSyncProgressBar(painter, opt, index, subFm, aliasMargin, remotePathRect, margin, nextToIcon); + } - painter->save(); + drawMoreOptionsButton(painter, option, index); +} + +void FolderStatusDelegate::drawSyncProgressBar(QPainter *painter, const QStyleOptionViewItem &option, const QModelIndex &index, const QFontMetrics &subFm, const int aliasMargin, const QRect &remotePathRect, const int margin, const int nextToIcon) const +{ + auto overallPercent = qvariant_cast(index.data(SyncProgressOverallPercent)); + auto overallString = qvariant_cast(index.data(SyncProgressOverallString)); + auto optionsButtonVisualRect = optionsButtonRect(option.rect, option.direction); + + const auto fileNameTextHeight = subFm.boundingRect(tr("File")).height(); + constexpr auto barHeight = 7; // same height as quota bar + const auto overallWidth = option.rect.right() - aliasMargin - optionsButtonVisualRect.width() - nextToIcon; + + QFont progressFont(option.font); + progressFont.setPixelSize(IonosTheme::settingsTextPixel()); + progressFont.setWeight(IonosTheme::settingsTitleWeightNormal()); + painter->save(); // Overall Progress Bar. - const auto progressBarRect = QRect(nextToIcon, - remotePathRect.top(), - overallWidth - 2 * margin, - barHeight); - - QStyleOptionProgressBar progressBarOpt; - - progressBarOpt.state = option.state | QStyle::State_Horizontal; - progressBarOpt.minimum = 0; - progressBarOpt.maximum = 100; - progressBarOpt.progress = overallPercent; - progressBarOpt.state = QStyle::StateFlag::State_Horizontal; - progressBarOpt.rect = QStyle::visualRect(option.direction, option.rect, progressBarRect); + const auto progressBarRect = QRect(nextToIcon, + remotePathRect.top(), + overallWidth - 2 * margin, + barHeight); + + QStyleOptionProgressBar progressBarOpt; + + progressBarOpt.state = option.state | QStyle::State_Horizontal; + progressBarOpt.minimum = 0; + progressBarOpt.maximum = 100; + progressBarOpt.progress = overallPercent; + progressBarOpt.state = QStyle::StateFlag::State_Horizontal; + progressBarOpt.rect = QStyle::visualRect(option.direction, option.rect, progressBarRect); #ifdef Q_OS_MACOS - backupStyle->drawControl(QStyle::CE_ProgressBar, &progressBarOpt, painter, option.widget); + backupStyle->drawControl(QStyle::CE_ProgressBar, &progressBarOpt, painter, option.widget); #else - QApplication::style()->drawControl(QStyle::CE_ProgressBar, &progressBarOpt, painter, option.widget); + QApplication::style()->drawControl(QStyle::CE_ProgressBar, &progressBarOpt, painter, option.widget); #endif - // itemString is e.g. Syncing fileName1, filename2 - // syncText is Synchronizing files in local folders or Synchronizing virtual files in local folder - const auto generalSyncStatus = !itemString.isEmpty() ? itemString : syncText; - QRect generalSyncStatusRect; - generalSyncStatusRect.setTop(progressBarRect.bottom() + margin); - generalSyncStatusRect.setHeight(fileNameTextHeight); - generalSyncStatusRect.setLeft(progressBarRect.left()); - generalSyncStatusRect.setWidth(progressBarRect.width()); - painter->setFont(progressFont); +// Overall Progress Text + QRect overallProgressRect; + overallProgressRect.setTop(progressBarRect.bottom() + margin); + overallProgressRect.setHeight(fileNameTextHeight); + overallProgressRect.setLeft(progressBarRect.left()); + overallProgressRect.setWidth(progressBarRect.width()); + painter->setFont(progressFont); - painter->drawText(QStyle::visualRect(option.direction, option.rect, generalSyncStatusRect), Qt::AlignLeft | Qt::AlignVCenter, generalSyncStatus); + painter->drawText(QStyle::visualRect(option.direction, option.rect, overallProgressRect), Qt::AlignLeft | Qt::AlignVCenter, overallString); - painter->restore(); - } + // // itemString is e.g. Syncing fileName1, filename2 + // // syncText is Synchronizing files in local folders or Synchronizing virtual files in local folder + // const auto generalSyncStatus = !itemString.isEmpty() ? itemString : syncText; + // QRect generalSyncStatusRect; + // generalSyncStatusRect.setTop(progressBarRect.bottom() + margin); + // generalSyncStatusRect.setHeight(fileNameTextHeight); + // generalSyncStatusRect.setLeft(progressBarRect.left()); + // generalSyncStatusRect.setWidth(progressBarRect.width()); + // // painter->setFont(progressFont); + + // painter->drawText(QStyle::visualRect(option.direction, option.rect, generalSyncStatusRect), Qt::AlignLeft | Qt::AlignVCenter, generalSyncStatus); painter->restore(); +} +void FolderStatusDelegate::drawMoreOptionsButton(QPainter *painter, const QStyleOptionViewItem &option, const QModelIndex &index) const +{ + auto optionsButtonVisualRect = optionsButtonRect(option.rect, option.direction); + + QStyleOptionButton btnOpt; + btnOpt.state = option.state; + btnOpt.state &= ~(QStyle::State_Selected | QStyle::State_HasFocus | QStyle::State_MouseOver); + btnOpt.state |= QStyle::State_Raised; + + if(optionsButtonVisualRect.contains(MousePos) ) { - QStyleOptionToolButton btnOpt; - btnOpt.state = option.state; - btnOpt.state &= ~(QStyle::State_Selected | QStyle::State_HasFocus); + btnOpt.state |= QStyle::State_MouseOver; + } + + if (btnOpt.state & QStyle::State_Enabled && btnOpt.state & QStyle::State_MouseOver && index == _pressedIndex) { + btnOpt.state |= QStyle::State_Sunken; + } else { btnOpt.state |= QStyle::State_Raised; - btnOpt.arrowType = Qt::NoArrow; - btnOpt.subControls = QStyle::SC_ToolButton; - btnOpt.rect = optionsButtonVisualRect; - btnOpt.icon = _iconMore; - const auto buttonSize = QApplication::style()->pixelMetric(QStyle::PM_ButtonIconSize); - btnOpt.iconSize = QSize(buttonSize, buttonSize); - QApplication::style()->drawComplexControl(QStyle::CC_ToolButton, &btnOpt, painter); } + + btnOpt.rect = optionsButtonVisualRect; + btnOpt.icon = _iconMore; + const auto iconSize = optionsButtonIconSize(); + btnOpt.iconSize = QSize(iconSize, iconSize); + QWidget buttonWidget; + buttonWidget.setProperty("buttonStyle", QVariant::fromValue(OCC::ButtonStyleName::MoreOptions)); + + QApplication::style()-> + drawControl( + static_cast(sesStyle::CE_TreeViewMoreOptions), &btnOpt, painter, &buttonWidget); +} + +int FolderStatusDelegate::optionsButtonIconSize() { + // Using this calculation to use the DPI-Scaled values. The QStyleHelper::dpiScaled is not accessible from here. + return QApplication::style()->pixelMetric(QStyle::PM_LargeIconSize) - QApplication::style()->pixelMetric(QStyle::PM_MenuScrollerHeight); } bool FolderStatusDelegate::editorEvent(QEvent *event, QAbstractItemModel *model, @@ -360,12 +447,24 @@ bool FolderStatusDelegate::editorEvent(QEvent *event, QAbstractItemModel *model, case QEvent::MouseMove: if (const auto *view = qobject_cast(option.widget)) { auto *me = dynamic_cast(event); - QModelIndex index; + QModelIndex pressedIndex; if (me->buttons()) { - index = view->indexAt(me->pos()); + pressedIndex = view->indexAt(me->pos()); + } + if (_pressedIndex != pressedIndex) { + _pressedIndex = pressedIndex; + view->viewport()->update(); } - if (_pressedIndex != index) { - _pressedIndex = index; + auto optionsButtonVisualRect = optionsButtonRect(option.rect, option.direction); + + MousePos = me->pos(); + if(optionsButtonVisualRect.contains(MousePos)) + { + _hoveredIndex = index; + view->viewport()->update(); + } else if(_hoveredIndex.isValid()) + { + _hoveredIndex = QModelIndex(); view->viewport()->update(); } } @@ -381,37 +480,29 @@ bool FolderStatusDelegate::editorEvent(QEvent *event, QAbstractItemModel *model, QRect FolderStatusDelegate::optionsButtonRect(QRect within, Qt::LayoutDirection direction) { - QFont font = QFont(); + QFont font = QFont(IonosTheme::settingsFont()); QFont aliasFont = makeAliasFont(font); QFontMetrics fm(font); QFontMetrics aliasFm(aliasFont); within.setHeight(FolderStatusDelegate::rootFolderHeightWithoutErrors(fm, aliasFm)); - QStyleOptionToolButton opt; - int e = QApplication::style()->pixelMetric(QStyle::PM_ButtonIconSize); - opt.rect.setSize(QSize(e,e)); - QSize size = QApplication::style()->sizeFromContents(QStyle::CT_ToolButton, &opt, opt.rect.size()); - - int margin = QApplication::style()->pixelMetric(QStyle::PM_LayoutHorizontalSpacing); - QRect r(QPoint(within.right() - size.width() - margin, + QStyleOptionButton opt; + int iconSize = optionsButtonIconSize(); + opt.rect.setSize(QSize(iconSize,iconSize)); + QSize size = QApplication::style()->sizeFromContents( + static_cast(sesStyle::CT_TreeViewMoreOptions), &opt, opt.rect.size()); + + // Using PM_LargeIconSize as margin because it get DPI Scaled, which I canot access from here + int margin = QApplication::style()->pixelMetric(QStyle::PM_LargeIconSize); + QRect r(QPoint(within.right() - size.width() - aliasFm.height() / 2, within.top() + within.height() / 2 - size.height() / 2), size); return QStyle::visualRect(direction, within, r); } -QRect FolderStatusDelegate::addButtonRect(QRect within, Qt::LayoutDirection direction) -{ - QFontMetrics fm(qApp->font("QPushButton")); - QStyleOptionButton opt; - opt.text = addFolderText(); - QSize size = QApplication::style()->sizeFromContents(QStyle::CT_PushButton, &opt, fm.size(Qt::TextSingleLine, opt.text)); - QRect r(QPoint(within.left(), within.top() + within.height() / 2 - size.height() / 2), size); - return QStyle::visualRect(direction, within, r); -} - QRect FolderStatusDelegate::errorsListRect(QRect within) { - QFont font = QFont(); + QFont font = QFont(IonosTheme::settingsFont()); QFont aliasFont = makeAliasFont(font); QFontMetrics fm(font); QFontMetrics aliasFm(aliasFont); @@ -426,7 +517,7 @@ void FolderStatusDelegate::slotStyleChanged() void FolderStatusDelegate::customizeStyle() { - _iconMore = Theme::createColorAwareIcon(QLatin1String(":/client/theme/more.svg")); + _iconMore = Theme::createColorAwareIcon(QLatin1String(":/client/theme/ses/ses-more.svg"), QSize(128, 128)); } } // namespace OCC diff --git a/src/gui/folderstatusdelegate.h b/src/gui/folderstatusdelegate.h index 944fa5725f9e4..32b6786d094f1 100644 --- a/src/gui/folderstatusdelegate.h +++ b/src/gui/folderstatusdelegate.h @@ -61,8 +61,9 @@ class FolderStatusDelegate : public QStyledItemDelegate /** * return the position of the option button within the item */ + + static QRect optionsButtonRect(QRect within, Qt::LayoutDirection direction); - static QRect addButtonRect(QRect within, Qt::LayoutDirection direction); static QRect errorsListRect(QRect within); static int rootFolderHeightWithoutErrors(const QFontMetrics &fm, const QFontMetrics &aliasFm); @@ -71,9 +72,17 @@ public slots: private: void customizeStyle(); + void drawAddButton(QPainter *,const QStyleOptionViewItem &, const QModelIndex &) const; + void drawElidedText(QPainter *painter, QStyleOptionViewItem option, QFontMetrics fontMetric, QFont font, QString text, QRect rect) const; + void drawSyncProgressBar(QPainter *painter, const QStyleOptionViewItem &option, const QModelIndex &index, const QFontMetrics &subFm, const int aliasMargin, const QRect &remotePathRect, const int margin, const int nextToIcon) const; + void drawMoreOptionsButton(QPainter *painter, const QStyleOptionViewItem &option, const QModelIndex &index) const; + + static int optionsButtonIconSize(); static QString addFolderText(); + static QString addInfoText(); QPersistentModelIndex _pressedIndex; + QPersistentModelIndex _hoveredIndex; QIcon _iconMore; }; diff --git a/src/gui/folderstatusview.cpp b/src/gui/folderstatusview.cpp index a353bc49f269a..876d02bc36b50 100644 --- a/src/gui/folderstatusview.cpp +++ b/src/gui/folderstatusview.cpp @@ -14,11 +14,15 @@ #include "folderstatusview.h" #include "folderstatusdelegate.h" +#include "ionostheme.h" namespace OCC { FolderStatusView::FolderStatusView(QWidget *parent) : QTreeView(parent) { + #ifdef Q_OS_MAC + setPalette(QPalette(QPalette::ButtonText, IonosTheme::white())); + #endif } QModelIndex FolderStatusView::indexAt(const QPoint &point) const @@ -32,11 +36,7 @@ QModelIndex FolderStatusView::indexAt(const QPoint &point) const QRect FolderStatusView::visualRect(const QModelIndex &index) const { - QRect rect = QTreeView::visualRect(index); - if (index.data(FolderStatusDelegate::AddButton).toBool()) { - return FolderStatusDelegate::addButtonRect(rect, layoutDirection()); - } - return rect; + return QTreeView::visualRect(index); } } // namespace OCC From e78efad536066763edec945ea939e02e2c2a5433 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Christopher=20H=C3=A4tty?= Date: Thu, 23 Jan 2025 09:44:08 +0100 Subject: [PATCH 024/371] style settings - CMake Variable 4c098926161b45c8144aae31d048b03234e85d88 --- src/gui/CMakeLists.txt | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/gui/CMakeLists.txt b/src/gui/CMakeLists.txt index 44b86dc9ba16a..cd2484d5ff2f8 100644 --- a/src/gui/CMakeLists.txt +++ b/src/gui/CMakeLists.txt @@ -10,6 +10,9 @@ endif() if(CMAKE_BUILD_TYPE MATCHES Debug) add_definitions(-DQT_QML_DEBUG) endif() +if(CMAKE_BUILD_TYPE MATCHES "RelWithDebInfo") + add_definitions(-DBUILDTYPE_RELWITHDEBINFO) +endif() IF(BUILD_UPDATER) add_subdirectory(updater) From dde938cc5f03c685c31d373fe475a630b80725ed Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Christopher=20H=C3=A4tty?= Date: Thu, 23 Jan 2025 11:52:00 +0100 Subject: [PATCH 025/371] add stylings in libsync 0c7ae74e69be0e4c2caba5831e229c6f9eec31ec --- src/gui/application.cpp | 2 +- src/gui/logbrowser.cpp | 2 +- src/gui/owncloudgui.cpp | 2 +- src/libsync/account.cpp | 9 ++++++--- src/libsync/configfile.cpp | 6 +++--- src/libsync/logger.cpp | 7 +++++-- 6 files changed, 17 insertions(+), 11 deletions(-) diff --git a/src/gui/application.cpp b/src/gui/application.cpp index 78a9a1c1f3c57..f60bd000c4047 100644 --- a/src/gui/application.cpp +++ b/src/gui/application.cpp @@ -741,7 +741,7 @@ void Application::setupLogging() logger->setLogDebug(true); #endif - logger->enterNextLogFile(QStringLiteral("nextcloud.log"), OCC::Logger::LogType::Log); + logger->enterNextLogFile(QStringLiteral("hidrivenext.log"), OCC::Logger::LogType::Log); logger->enterNextLogFile(QStringLiteral("permanent_delete.log"), OCC::Logger::LogType::DeleteLog); qCInfo(lcApplication) << "##################" << _theme->appName() diff --git a/src/gui/logbrowser.cpp b/src/gui/logbrowser.cpp index 46357edc50a5d..7c0fb19599d0a 100644 --- a/src/gui/logbrowser.cpp +++ b/src/gui/logbrowser.cpp @@ -118,7 +118,7 @@ void LogBrowser::togglePermanentLogging(bool enabled) if (enabled) { if (!logger->isLoggingToFile()) { logger->setupTemporaryFolderLogDir(); - logger->enterNextLogFile(QStringLiteral("nextcloud.log"), OCC::Logger::LogType::Log); + logger->enterNextLogFile(QStringLiteral("hidrivenext.log"), OCC::Logger::LogType::Log); } } else { logger->disableTemporaryFolderLogDir(); diff --git a/src/gui/owncloudgui.cpp b/src/gui/owncloudgui.cpp index af423280b9038..e277fec51cedb 100644 --- a/src/gui/owncloudgui.cpp +++ b/src/gui/owncloudgui.cpp @@ -255,7 +255,7 @@ void ownCloudGui::slotSyncStateChange(Folder *folder) || result.status() == SyncResult::Problem || result.status() == SyncResult::SyncAbortRequested || result.status() == SyncResult::Error) { - Logger::instance()->enterNextLogFile(QStringLiteral("nextcloud.log"), OCC::Logger::LogType::Log); + Logger::instance()->enterNextLogFile(QStringLiteral("hidrivenext.log"), OCC::Logger::LogType::Log); } } diff --git a/src/libsync/account.cpp b/src/libsync/account.cpp index 30031ea5f6b6d..3342e5d85a423 100644 --- a/src/libsync/account.cpp +++ b/src/libsync/account.cpp @@ -225,7 +225,8 @@ QString Account::eliedName(const int size) const QColor Account::serverColor() const { - return _serverColor; + // SES-50 Hardcoded. Old value was _serverColor; + return QColor("#718095"); } QColor Account::headerColor() const @@ -235,7 +236,8 @@ QColor Account::headerColor() const QColor Account::headerTextColor() const { - return _serverTextColor; + // SES-50 Hardcoded to Black. Old value was _serverTextColor; + return QColor("black"); } QColor Account::accentColor() const @@ -247,7 +249,8 @@ QColor Account::accentColor() const darknessAdjustment *= darknessAdjustment; // Square the value to pronounce the darkness more in lighter colours constexpr auto baseAdjustment = 125; const auto adjusted = Theme::isDarkColor(accentColor) ? accentColor : accentColor.darker(baseAdjustment + darknessAdjustment); - return adjusted; + // SES-50 Hardcoded. Old value was adjusted; + return QColor("#718095"); } QString Account::id() const diff --git a/src/libsync/configfile.cpp b/src/libsync/configfile.cpp index 089d760544a33..450c0997a7255 100644 --- a/src/libsync/configfile.cpp +++ b/src/libsync/configfile.cpp @@ -985,13 +985,13 @@ void ConfigFile::setNewBigFolderSizeLimit(bool isChecked, qint64 mbytes) bool ConfigFile::confirmExternalStorage() const { - const auto fallback = getValue(confirmExternalStorageC, QString(), true); + const auto fallback = getValue(confirmExternalStorageC, QString(), false); return getPolicySetting(QLatin1String(confirmExternalStorageC), fallback).toBool(); } bool ConfigFile::useNewBigFolderSizeLimit() const { - const auto fallback = getValue(useNewBigFolderSizeLimitC, QString(), true); + const auto fallback = getValue(useNewBigFolderSizeLimitC, QString(), false); return getPolicySetting(QLatin1String(useNewBigFolderSizeLimitC), fallback).toBool(); } @@ -1050,7 +1050,7 @@ bool ConfigFile::showMainDialogAsNormalWindow() const { bool ConfigFile::promptDeleteFiles() const { QSettings settings(configFile(), QSettings::IniFormat); - return settings.value(promptDeleteC, false).toBool(); + return settings.value(promptDeleteC, true).toBool(); } void ConfigFile::setPromptDeleteFiles(bool promptDeleteFiles) diff --git a/src/libsync/logger.cpp b/src/libsync/logger.cpp index a9ffad0f348c0..760487dcc82b5 100644 --- a/src/libsync/logger.cpp +++ b/src/libsync/logger.cpp @@ -240,9 +240,10 @@ QString Logger::temporaryFolderLogDirPath() const void Logger::setupTemporaryFolderLogDir() { auto dir = temporaryFolderLogDirPath(); - if (!QDir().mkpath(dir)) { + if (!QDir().mkpath(dir)) return; - } + setLogDebug(true); + setLogExpire(4 /*hours*/); setLogDir(dir); _temporaryFolderLogDir = true; } @@ -254,6 +255,8 @@ void Logger::disableTemporaryFolderLogDir() enterNextLogFile("nextcloud.log", LogType::Log); setLogDir(QString()); + setLogDebug(false); + setLogFile(QString()); _temporaryFolderLogDir = false; } From 3eba6de1609c32ec944d16058b518d225c26e267 Mon Sep 17 00:00:00 2001 From: Emil Bohleber Date: Thu, 21 Nov 2024 15:30:52 +0100 Subject: [PATCH 026/371] add ga4 tracking --- src/gui/ga4/datacollectionwrapper.cpp | 59 +++++ src/gui/ga4/datacollectionwrapper.h | 82 +++++++ src/gui/ga4/ganalytics.cpp | 168 ++++++++++++++ src/gui/ga4/ganalytics.h | 77 +++++++ src/gui/ga4/ganalytics_worker.cpp | 309 ++++++++++++++++++++++++++ src/gui/ga4/ganalytics_worker.h | 121 ++++++++++ 6 files changed, 816 insertions(+) create mode 100644 src/gui/ga4/datacollectionwrapper.cpp create mode 100644 src/gui/ga4/datacollectionwrapper.h create mode 100644 src/gui/ga4/ganalytics.cpp create mode 100644 src/gui/ga4/ganalytics.h create mode 100644 src/gui/ga4/ganalytics_worker.cpp create mode 100644 src/gui/ga4/ganalytics_worker.h diff --git a/src/gui/ga4/datacollectionwrapper.cpp b/src/gui/ga4/datacollectionwrapper.cpp new file mode 100644 index 0000000000000..895221ae0b0a8 --- /dev/null +++ b/src/gui/ga4/datacollectionwrapper.cpp @@ -0,0 +1,59 @@ +#include "datacollectionwrapper.h" + +#ifdef BUILDTYPE_RELWITHDEBINFO + const QString GA_MEASUREMENT_ID = "G-P9KD4TLW0V"; // Verwende diesen String nur wenn wir in Debug bauen +#else + const QString GA_MEASUREMENT_ID = "G-270CYZ49V0"; // Verwende diesen String nur wenn wir in Release bauen +#endif + + +DataCollectionWrapper::DataCollectionWrapper(QObject *parent) : QObject(parent) { +} + +DataCollectionWrapper::~DataCollectionWrapper() { +} + +void DataCollectionWrapper::clicked(const TrackingPage trackingPage, const TrackingElement trackingButton){ + trackEvent( _trackingPageString[trackingPage], _trackingElementString[trackingButton]); +} + +void DataCollectionWrapper::opened(const TrackingPage trackingPage){ + trackEvent(_trackingEventString[TrackingEvent::Open], _trackingPageString[trackingPage]); +} + +void DataCollectionWrapper::login(){ + trackEvent(QString(), _trackingEventString[TrackingEvent::Login]); +} + +void DataCollectionWrapper::accountRemoved(){ + trackEventImmediately(QString(), _trackingEventString[TrackingEvent::Logout]); +} + +void DataCollectionWrapper::trackEvent(QString page, QString element) { + GAnalytics::getInstance().sendEvent(page, element); +} + +void DataCollectionWrapper::trackEventImmediately(QString page, QString element) +{ + GAnalytics::getInstance().sendEventImmediatley(page, element); +} + +void DataCollectionWrapper::setClientID(const QString clientId) { + GAnalytics::getInstance().setClientID(clientId); +} + +void DataCollectionWrapper::setSendData(const bool sendData) { + GAnalytics::getInstance().enable(sendData); +} + +void DataCollectionWrapper::setAccount(const OCC::AccountPtr account) { + GAnalytics::getInstance().setAccount(account); +} + +void DataCollectionWrapper::initDataCollection() { + GAnalytics* ga = &GAnalytics::getInstance(); + ga->setMeasurementId(GA_MEASUREMENT_ID); + ga->setSendInterval(3000); + ga->setLogLevel(GAnalytics::Info); + ga->enableValidation(false); +} \ No newline at end of file diff --git a/src/gui/ga4/datacollectionwrapper.h b/src/gui/ga4/datacollectionwrapper.h new file mode 100644 index 0000000000000..f7e97bb01bbae --- /dev/null +++ b/src/gui/ga4/datacollectionwrapper.h @@ -0,0 +1,82 @@ +#ifndef DATACOLLECTIONWRAPPER_H +#define DATACOLLECTIONWRAPPER_H + +#include "ganalytics.h" +#include "account.h" + +class DataCollectionWrapper : public QObject { + + Q_OBJECT + Q_ENUMS(TrackingPage) + Q_ENUMS(TrackingEvent) + Q_ENUMS(TrackingElement) + + +public: + + enum TrackingEvent + { + Click, + Open, + Login, + Logout, + }; + + enum TrackingPage{ + GeneralSettings, + AccountSettings, + }; + + enum TrackingElement{ + PrivacyPolicy, + OpenSourceComponents, + LegalNotice, + MoreInformation, + ServerNotifications, + AutoStart, + ToogleSendData, + AutoCheckforUpdate + }; + + void setClientID(const QString clientId); + void setSendData(const bool sendData); + void setAccount(const OCC::AccountPtr account); + void initDataCollection(); + + DataCollectionWrapper(QObject *parent = 0); + ~DataCollectionWrapper(); + +public slots: + void login(); + void accountRemoved(); + void clicked(const TrackingPage trackingPage, const TrackingElement trackingButton); + void opened(const TrackingPage trackingPage); +private: + void trackEvent(QString page = QString(), QString element = QString()); + void trackEventImmediately(QString page = QString(), QString element = QString()); + + std::map _trackingPageString = { + { GeneralSettings, "GeneralSetting" }, + { AccountSettings, "AccountSettings" }, + }; + + std::map _trackingElementString = { + { PrivacyPolicy, "PrivacyPolicy" }, + { OpenSourceComponents, "OpenSourceComponents" }, + { LegalNotice, "LegalNotice" }, + { MoreInformation, "MoreInformation" }, + { ServerNotifications, "ServerNotifications" }, + { AutoStart, "AutoStart" }, + { ToogleSendData, "ToogleSendData" }, + { AutoCheckforUpdate, "AutoCheckforUpdate" }, + }; + + std::map _trackingEventString = { + { Click, "click" }, + { Open, "screen_view" }, + { Login, "login" }, + { Logout, "logout" }, + }; +}; + +#endif // DATACOLLECTIONWRAPPER_H \ No newline at end of file diff --git a/src/gui/ga4/ganalytics.cpp b/src/gui/ga4/ganalytics.cpp new file mode 100644 index 0000000000000..00e80a7f84006 --- /dev/null +++ b/src/gui/ga4/ganalytics.cpp @@ -0,0 +1,168 @@ +/* + * This file is part of Nextcloud Destop - Ionos HiDrive Next + * + * Modifications: + * - Changed the usage of Measurement Protocol to the GA4 API + * - Removed the construction of the json payload + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +#include "ganalytics.h" +#include "ganalytics_worker.h" + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include +#include +#include + +#include "account.h" + + +GAnalytics::GAnalytics(QObject *parent) : QObject(parent) +{ + d = new GAnalyticsWorker(this); +} + +/** + * Destructor of class GAnalytics. + */ +GAnalytics::~GAnalytics() +{ + delete d; +} + +void GAnalytics::setLogLevel(GAnalytics::LogLevel logLevel) +{ + d->m_logLevel = logLevel; +} + +GAnalytics::LogLevel GAnalytics::logLevel() const +{ + return d->m_logLevel; +} + +void GAnalytics::setViewportSize(const QString &viewportSize) +{ + d->m_viewportSize = viewportSize; +} + +QString GAnalytics::viewportSize() const +{ + return d->m_viewportSize; +} + +void GAnalytics::setLanguage(const QString &language) +{ + d->m_language = language; +} + +QString GAnalytics::language() const +{ + return d->m_language; +} + +void GAnalytics::setAnonymizeIPs(bool anonymize) +{ + d->m_anonymizeIPs = anonymize; +} + +bool GAnalytics::anonymizeIPs() +{ + return d->m_anonymizeIPs; +} + +void GAnalytics::setSendInterval(int milliseconds) +{ + d->m_timer.setInterval(milliseconds); +} + +int GAnalytics::sendInterval() const +{ + return (d->m_timer.interval()); +} + +bool GAnalytics::isEnabled() +{ + return d->m_isEnabled; +} + +void GAnalytics::setMeasurementId(const QString &measurementId) +{ + d->m_measurementId = measurementId; +} + +void GAnalytics::setClientID(const QString &clientID) +{ + d->m_clientID = clientID; +} + +void GAnalytics::enable(bool state) +{ + d->enable(state); +} + +void GAnalytics::enableValidation(bool state) +{ + d->m_validation = state; +} + +void GAnalytics::setNetworkAccessManager(QNetworkAccessManager *networkAccessManager) +{ + if (d->networkManager != networkAccessManager) + { + // Delete the old network manager if it was our child + if (d->networkManager && d->networkManager->parent() == this) + { + d->networkManager->deleteLater(); + } + + d->networkManager = networkAccessManager; + } +} + +QNetworkAccessManager *GAnalytics::networkAccessManager() const +{ + return d->networkManager; +} + +void GAnalytics::setAccount(OCC::AccountPtr account) +{ + d->m_account = account; +} +/** + * This method is called whenever a button was pressed in the application. + * A query for a POST message will be created to report this event. The + * created query will be stored in a message queue. + */ +void GAnalytics::sendEvent(const QString &page, const QString &element) +{ + d->enqueQueryWithCurrentTime(element, page); +} + +void GAnalytics::sendEventImmediatley(const QString &page, const QString &element) +{ + d->enqueQueryWithCurrentTime(element, page); + d->postMessage(); +} diff --git a/src/gui/ga4/ganalytics.h b/src/gui/ga4/ganalytics.h new file mode 100644 index 0000000000000..c9fbf2c2dc695 --- /dev/null +++ b/src/gui/ga4/ganalytics.h @@ -0,0 +1,77 @@ +#pragma once + +#include +#include +#include "account.h" + +class QNetworkAccessManager; +class GAnalyticsWorker; +class DataCollectionWrapper; +class Account; + +// https://developers.google.com/analytics/devguides/collection/protocol/ga4/verify-implementation?client_type=gtag +class GAnalytics : public QObject +{ + Q_OBJECT + Q_ENUMS(LogLevel) + +public: + ~GAnalytics(); + + static GAnalytics& getInstance() + { + static GAnalytics instance; + return instance; + } + +public: + enum LogLevel + { + Debug, + Info, + Error + }; + + void setMeasurementId(const QString& measurementId); + void setClientID(const QString& clientID); + + void setLogLevel(LogLevel logLevel); + LogLevel logLevel() const; + + void setViewportSize(const QString &viewportSize); + QString viewportSize() const; + + void setLanguage(const QString &language); + QString language() const; + + void setAnonymizeIPs(bool anonymize); + bool anonymizeIPs(); + + void setSendInterval(int milliseconds); + int sendInterval() const; + + void enable(bool state = true); + bool isEnabled(); + + OCC::AccountPtr account; + void setAccount(OCC::AccountPtr account); + + void enableValidation(bool state); + + /// Get or set the network access manager. If none is set, the class creates its own on the first request + void setNetworkAccessManager(QNetworkAccessManager *networkAccessManager); + QNetworkAccessManager *networkAccessManager() const; + + +private: + void sendEvent(const QString &page = QString(), const QString &element = QString()); + void sendEventImmediatley(const QString &page, const QString &element); + explicit GAnalytics(QObject *parent = 0); + Q_DISABLE_COPY_MOVE(GAnalytics); + +private: + GAnalyticsWorker *d; + + friend class DataCollectionWrapper; +}; + diff --git a/src/gui/ga4/ganalytics_worker.cpp b/src/gui/ga4/ganalytics_worker.cpp new file mode 100644 index 0000000000000..f3eb1351430c3 --- /dev/null +++ b/src/gui/ga4/ganalytics_worker.cpp @@ -0,0 +1,309 @@ +/* + * This file is part of Nextcloud Destop - Ionos HiDrive Next + * + * Modifications: + * - Changed the usage of Measurement Protocol to the GA4 API + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +#include "ganalytics.h" +#include "ganalytics_worker.h" +#include +#include +#include + +#include +#include + +#include +#include +#include +#include + +#include "logger.h" +#include "account.h" + +const QLatin1String GAnalyticsWorker::dateTimeFormat("yyyy,MM,dd-hh:mm::ss:zzz"); + +Q_LOGGING_CATEGORY(lcGAnalyticsWorker, "nextcloud.gui.ga4.ganalytics_worker", QtInfoMsg) + +GAnalyticsWorker::GAnalyticsWorker(GAnalytics *parent) + : QObject(parent), q(parent), m_logLevel(GAnalytics::Error) +{ + m_appName = QCoreApplication::instance()->applicationName(); + m_appVersion = QCoreApplication::instance()->applicationVersion(); + m_request.setHeader(QNetworkRequest::ContentTypeHeader, "application/json; charset=utf-8"); + m_request.setHeader(QNetworkRequest::UserAgentHeader, getUserAgent()); + + m_language = QLocale::system().name().toLower().replace("_", "-"); + m_screenResolution = getScreenResolution(); + + m_timer.setInterval(m_timerInterval); + connect(&m_timer, &QTimer::timeout, this, &GAnalyticsWorker::postMessage); +} + +void GAnalyticsWorker::enable(bool state) +{ + // state change to the same is not valid. + if(m_isEnabled == state) + { + return; + } + + m_isEnabled = state; + if(m_isEnabled) + { + // enable -> start doing things :) + m_timer.start(); + } + else + { + // disable -> stop the timer + m_timer.stop(); + } +} + +void GAnalyticsWorker::logMessage(GAnalytics::LogLevel level, const QString &message) +{ + if (m_logLevel > level) + { + return; + } + if(level == GAnalytics::Error) + { + // log error message + qCCritical(lcGAnalyticsWorker) << "[Analytics]" << message; + } + else if(level == GAnalytics::Info) + { + // log info message + qCInfo(lcGAnalyticsWorker) << "[Analytics]" << message; + } + else if(level == GAnalytics::Debug) + { + // log debug message + qCDebug(lcGAnalyticsWorker) << "[Analytics]" << message; + } +} + +/** + * Get primary screen resolution. + * @return A QString like "800x600". + */ +QString GAnalyticsWorker::getScreenResolution() +{ + QScreen *screen = QGuiApplication::primaryScreen(); + QSize size = screen->size(); + + return QString("%1x%2").arg(size.width()).arg(size.height()); +} + +/** + * Try to gain information about the system where this application + * is running. It needs to get the name and version of the operating + * system, the language and screen resolution. + * All this information will be send in POST messages. + * @return agent A QString with all the information formatted for a POST message. + */ +QString GAnalyticsWorker::getUserAgent() +{ + return QString("%1/%2").arg(m_appName).arg(m_appVersion); +} + + +/** + * Takes a QUrlQuery object and wrapp it together with + * a QTime object into a QueryBuffer struct. These struct + * will be stored in the message queue. + */ +void GAnalyticsWorker::enqueQueryWithCurrentTime(QString eventValue, QString screenNameValue) +{ + if(!m_isEnabled) + { + return; + } + QueryBuffer buffer; + buffer.eventValue = eventValue; + buffer.screenNameValue = screenNameValue; + buffer.time = QDateTime::currentDateTime(); + + m_messageQueue.enqueue(buffer); +} + +/** + * This function is called by a timer interval. + * The function tries to send a messages from the queue. + * If message was successfully send then this function + * will be called back to send next message. + * If message queue contains more than one message then + * the connection will kept open. + * The message POST is asyncroniously when the server + * answered a signal will be emitted. + */ +void GAnalyticsWorker::postMessage() +{ + if (m_messageQueue.isEmpty()) + { + // queue empty -> try sending later + m_timer.start(); + return; + } + else + { + // queue has messages -> stop timer and start sending + m_timer.stop(); + } + + if(m_account == nullptr) + { + logMessage(GAnalytics::Error, "account is not set!"); + return; + } + + QString connection = "close"; + if (m_messageQueue.count() > 1) + { + connection = "keep-alive"; + } + + QueryBuffer buffer = m_messageQueue.head(); + QDateTime sendTime = QDateTime::currentDateTime(); + qint64 timeDiff = buffer.time.msecsTo(sendTime); + + if (timeDiff > fourHours) + { + // too old. + m_messageQueue.dequeue(); + emit postMessage(); + return; + } + + m_request.setRawHeader("Connection", connection.toUtf8()); + m_request.setHeader(QNetworkRequest::ContentLengthHeader, 0); + + if (m_measurementId.isEmpty()) { + logMessage(GAnalytics::Error, "google analytics measurement id was not set!"); + m_messageQueue.dequeue(); + return; + } + if (m_clientID.isEmpty()) { + logMessage(GAnalytics::Error, "client id was not set!"); + m_messageQueue.dequeue(); + return; + } + + QUrl requestUrl; + requestUrl.setScheme("https"); + requestUrl.setHost("www.google-analytics.com"); + if(m_validation){ + requestUrl.setPath("/debug/g/collect"); + } + else { + requestUrl.setPath("/g/collect"); + } + + QUrlQuery query; + setStaticQueryValues(query); + setDynamicQueryValues(query, buffer.eventValue, buffer.screenNameValue); + + requestUrl.setQuery(query); + + m_request.setUrl(QUrl(requestUrl)); + + char message[512]; + snprintf(message, sizeof(message), "%s\n", requestUrl.toString().toStdString().c_str()); + logMessage(GAnalytics::Debug, message); + + QNetworkReply *reply = m_account->sendRawRequest("POST", m_request.url(), m_request, QByteArray()); + + connect(reply, SIGNAL(finished()), this, SLOT(postMessageFinished())); +} + +void GAnalyticsWorker::setDynamicQueryValues(QUrlQuery& query, const QString& eventValue, const QString& screenNameValue){ + query.addQueryItem(_ga4[GA4::Event], eventValue); + query.addQueryItem(_ga4[GA4::ScreenName], screenNameValue); +} + +void GAnalyticsWorker::setStaticQueryValues(QUrlQuery& query){ + + query.addQueryItem(_ga4[GA4::Version], "2"); + query.addQueryItem(_ga4[GA4::MeasurementID], m_measurementId); + query.addQueryItem(_ga4[GA4::ClientID], m_clientID); + + query.addQueryItem(_ga4[GA4::SessionID], "1"); + query.addQueryItem(_ga4[GA4::SessionSequence], "1"); + query.addQueryItem(_ga4[GA4::SessionCount], "1"); + query.addQueryItem(_ga4[GA4::UserID], m_userID); + query.addQueryItem(_ga4[GA4::Language], m_language); + query.addQueryItem(_ga4[GA4::ScreenResolution], m_screenResolution); + // TODO SES-169 + // query.addQueryItem(_ga4[GA4::AgentArch], "x86_64"); + query.addQueryItem(_ga4[GA4::AgentMobileBrand], "0"); + #ifdef Q_OS_WIN + query.addQueryItem(_ga4[GA4::AgentPlatform], "Windows"); + #endif + #ifdef Q_OS_LINUX + query.addQueryItem(_ga4[GA4::AgentPlatform], "Linux"); + #endif + #ifdef Q_OS_MAC + query.addQueryItem(_ga4[GA4::AgentPlatform], "MacOS"); + #endif + // TODO SES-169 + // query.addQueryItem(_ga4[GA4::AgentPlatformVersion], "10"); + query.addQueryItem(_ga4[GA4::EngagementTime], "100"); + + query.addQueryItem(_ga4[GA4::AppName], QUrl::toPercentEncoding(m_appName)); + query.addQueryItem(_ga4[GA4::AppVersion], m_appVersion); +} + + +/** + * NetworkAccsessManager has finished to POST a message. + * If POST message was successfully send then the message + * query should be removed from queue. + * SIGNAL "postMessage" will be emitted to send next message + * if there is any. + * If message couldn't be send then next try is when the + * timer emits its signal. + */ +void GAnalyticsWorker::postMessageFinished() +{ + QNetworkReply *reply = qobject_cast(sender()); + + int httpStausCode = reply->attribute(QNetworkRequest::HttpStatusCodeAttribute).toInt(); + if (httpStausCode < 200 || httpStausCode > 299) + { + logMessage(GAnalytics::Error, QString("Error posting message: %1").arg(reply->errorString())); + + // An error ocurred. Try sending later. + m_timer.start(); + return; + } + else + { + logMessage(GAnalytics::Debug, "Message sent"); + } + + if(m_validation) + { + QByteArray bytes = reply->readAll(); + QString str = QString::fromUtf8(bytes.data(), bytes.size()); + char message[256]; + snprintf(message, sizeof(message), "Status Code:%d\nReply: %s\n", httpStausCode, str.toStdString().c_str()); + logMessage(GAnalytics::Debug, message); + } + + m_messageQueue.dequeue(); + postMessage(); + reply->deleteLater(); +} \ No newline at end of file diff --git a/src/gui/ga4/ganalytics_worker.h b/src/gui/ga4/ganalytics_worker.h new file mode 100644 index 0000000000000..5fac431303774 --- /dev/null +++ b/src/gui/ga4/ganalytics_worker.h @@ -0,0 +1,121 @@ +#pragma once + +#include +#include +#include +#include +#include +#include "ganalytics.h" +#include "abstractnetworkjob.h" + +#include +#include +#include "account.h" + +struct QueryBuffer +{ + QString eventValue; + QString screenNameValue; + QDateTime time; +}; + +class GAnalyticsWorker : public QObject +{ + Q_OBJECT + + +public: + explicit GAnalyticsWorker(GAnalytics *parent = 0); + + GAnalytics *q; + + QNetworkAccessManager *networkManager = nullptr; + + QQueue m_messageQueue; + QTimer m_timer; + QNetworkRequest m_request; + GAnalytics::LogLevel m_logLevel; + + QString m_measurementId; + QString m_clientID; + QString m_userID; + QString m_appName; + QString m_appVersion; + QString m_language; + QString m_screenResolution; + QString m_viewportSize; + + OCC::AccountPtr m_account; + + bool m_anonymizeIPs = false; + bool m_isEnabled = false; + int m_timerInterval = 30000; + bool m_validation = false; + + const static int fourHours = 4 * 60 * 60 * 1000; + const static QLatin1String dateTimeFormat; + +public: + void logMessage(GAnalytics::LogLevel level, const QString &message); + + QString getScreenResolution(); + QString getUserAgent(); + + void enqueQueryWithCurrentTime(QString eventValue, QString screenNameValue); + void setIsSending(bool doSend); + void enable(bool state); + +public slots: + void postMessage(); + void postMessageFinished(); + +private: + void setStaticQueryValues(QUrlQuery& query); + void setDynamicQueryValues(QUrlQuery& query, const QString& eventValue, const QString& screenNameValue); + + enum GA4 + { + Version, + MeasurementID, + ClientID, + SessionID, + SessionSequence, + SessionCount, + UserID, + Language, + ScreenResolution, + AgentArch, + AgentMobileBrand, + AgentPlatform, + AgentPlatformVersion, + Event, + ScreenName, + AppName, + AppVersion, + EngagementTime, + }; + + std::map _ga4 = { + { Version, "v" }, + { MeasurementID, "tid" }, + { ClientID, "cid" }, + { SessionID, "sid" }, + { SessionSequence, "_s" }, + { SessionCount, "sct" }, + { UserID, "uid" }, + { Language, "ul" }, + { ScreenResolution, "sr" }, + { AgentArch, "ua" }, + { AgentMobileBrand, "uamb" }, + { AgentPlatform, "uap" }, + { AgentPlatformVersion, "uapv" }, + { Event, "en" }, + { ScreenName, "ep.screen_name" }, + { AppName, "ep.app_name" }, + { AppVersion, "ep.software_version" }, + { EngagementTime, "_et" }, + }; + + friend class GAnalytics; +}; + From 06760a16add288b6185fa538772f1d7bff053eba Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Christopher=20H=C3=A4tty?= Date: Thu, 23 Jan 2025 11:59:33 +0100 Subject: [PATCH 027/371] usage of ga4 tracking --- src/gui/CMakeLists.txt | 6 ++++ src/gui/application.cpp | 38 ++++++++++++++++++++++- src/gui/application.h | 3 +- src/gui/generalsettings.cpp | 61 +++++++++++++++++++++++++++++++++++-- src/gui/generalsettings.h | 6 ++-- src/gui/main.cpp | 2 ++ src/libsync/configfile.cpp | 11 +++++++ src/libsync/configfile.h | 4 +++ 8 files changed, 124 insertions(+), 7 deletions(-) diff --git a/src/gui/CMakeLists.txt b/src/gui/CMakeLists.txt index cd2484d5ff2f8..15a84e540acc8 100644 --- a/src/gui/CMakeLists.txt +++ b/src/gui/CMakeLists.txt @@ -227,6 +227,12 @@ set(client_SRCS creds/webflowcredentials.cpp creds/webflowcredentialsdialog.h creds/webflowcredentialsdialog.cpp + ga4/datacollectionwrapper.cpp + ga4/datacollectionwrapper.h + ga4/ganalytics_worker.cpp + ga4/ganalytics_worker.h + ga4/ganalytics.cpp + ga4/ganalytics.h sessnackbar.h sessnackbar.cpp sesstyle.h diff --git a/src/gui/application.cpp b/src/gui/application.cpp index f60bd000c4047..d61da4176bdb6 100644 --- a/src/gui/application.cpp +++ b/src/gui/application.cpp @@ -38,6 +38,8 @@ #include "pushnotifications.h" #include "shellextensionsserver.h" +#include "ga4/datacollectionwrapper.h" + #if defined(BUILD_UPDATER) #include "updater/ocupdater.h" #endif @@ -489,6 +491,30 @@ Application::~Application() AccountManager::instance()->shutdown(); } +void Application::startTracking() +{ + DataCollectionWrapper dcw; + dcw.initDataCollection(); + AccountPtr account = AccountManager::instance()->accounts().first()->account(); + QByteArray byteArray = account->credentials()->user().toUtf8(); // Convert the input string to a byte array + QByteArray hash = QCryptographicHash::hash(byteArray, QCryptographicHash::Sha256); // Perform the hash + + ConfigFile cfg; + dcw.setSendData(cfg.sendData()); + dcw.setAccount(account); + + dcw.setClientID(hash.toHex()); + dcw.login(); +} + +void Application::stopTracking() +{ + DataCollectionWrapper dcw; + dcw.accountRemoved(); + dcw.setClientID(QString()); + dcw.setAccount(nullptr); +} + void Application::setupAccountsAndFolders() { _folderManager.reset(new FolderMan); @@ -636,6 +662,14 @@ void Application::slotAccountStateRemoved(AccountState *accountState) _folderManager.data(), &FolderMan::slotServerVersionChanged); } + if(AccountManager::instance()->accounts().isEmpty()) { + stopTracking(); + } + else + { + startTracking(); + } + // if there is no more account, show the wizard. if (_gui && AccountManager::instance()->accounts().isEmpty()) { // allow to add a new account if there is non any more. Always think @@ -657,6 +691,8 @@ void Application::slotAccountStateAdded(AccountState *accountState) connect(accountState->account().data(), &Account::serverVersionChanged, _folderManager.data(), &FolderMan::slotServerVersionChanged); + startTracking(); + _gui->slotTrayMessageIfServerUnsupported(accountState->account()); } @@ -743,7 +779,7 @@ void Application::setupLogging() logger->enterNextLogFile(QStringLiteral("hidrivenext.log"), OCC::Logger::LogType::Log); logger->enterNextLogFile(QStringLiteral("permanent_delete.log"), OCC::Logger::LogType::DeleteLog); - + qCInfo(lcApplication) << "##################" << _theme->appName() << "locale:" << QLocale::system().name() << "ui_lang:" << property("ui_lang") diff --git a/src/gui/application.h b/src/gui/application.h index c3936da43a45e..aedbb803c3618 100644 --- a/src/gui/application.h +++ b/src/gui/application.h @@ -109,7 +109,8 @@ protected slots: private: void setHelp(); - + void startTracking(); + void stopTracking(); void handleEditLocallyFromOptions(); AccountManager::AccountsRestoreResult restoreLegacyAccount(); diff --git a/src/gui/generalsettings.cpp b/src/gui/generalsettings.cpp index 151cc7db6a0b8..88688e09547b1 100644 --- a/src/gui/generalsettings.cpp +++ b/src/gui/generalsettings.cpp @@ -247,8 +247,8 @@ GeneralSettings::GeneralSettings(QWidget *parent) connect(_ui->stopExistingFolderNowBigSyncCheckBox, &QAbstractButton::toggled, this, &GeneralSettings::saveMiscSettings); connect(_ui->newExternalStorage, &QAbstractButton::toggled, this, &GeneralSettings::saveMiscSettings); connect(_ui->moveFilesToTrashCheckBox, &QAbstractButton::toggled, this, &GeneralSettings::saveMiscSettings); - connect(_ui->remotePollIntervalSpinBox, &QSpinBox::valueChanged, this, &GeneralSettings::slotRemotePollIntervalChanged); - + connect(_ui->sendData_checkbox, &QAbstractButton::toggled, this, &GeneralSettings::saveMiscSettings); + #ifndef WITH_CRASHREPORTER _ui->crashreporterCheckBox->setVisible(false); #endif @@ -282,14 +282,16 @@ GeneralSettings::GeneralSettings(QWidget *parent) // accountAdded means the wizard was finished and the wizard might change some options. connect(AccountManager::instance(), &AccountManager::accountAdded, this, &GeneralSettings::loadMiscSettings); -connect(_ui->moreInfoLinkButton, &OCC::LinkButton::clicked, this, &GeneralSettings::slotOpenMoreInformationLink); + connect(_ui->moreInfoLinkButton, &OCC::LinkButton::clicked, this, &GeneralSettings::slotOpenMoreInformationLink); connect(_ui->legalNoticeLinkButton, &OCC::LinkButton::clicked, this, &GeneralSettings::slotOpenLegalNoticeLink); connect(_ui->openSourceLinkButton, &OCC::LinkButton::clicked, this, &GeneralSettings::slotOpenOpenSourceLink); connect(_ui->privacyLinkButton, &OCC::LinkButton::clicked, this, &GeneralSettings::slotOpenPrivacyLink); + connect(_ui->sendData_checkbox, &QAbstractButton::toggled, this, &GeneralSettings::slotToggleSendData); #if defined(BUILD_UPDATER) loadUpdateChannelsList(); #endif + connectToTracking(); customizeStyle(); } @@ -298,6 +300,51 @@ GeneralSettings::~GeneralSettings() delete _ui; } +void GeneralSettings::connectToTracking() +{ + // DataCollectionWrapper dcw; + + connect(_ui->autoCheckForUpdatesCheckBox, &QAbstractButton::clicked, this, [this](){ + _dcw.clicked(DataCollectionWrapper::TrackingPage::GeneralSettings + , DataCollectionWrapper::TrackingElement::AutoCheckforUpdate); + }); + + connect(_ui->autostartCheckBox, &QAbstractButton::clicked, this, [this](){ + _dcw.clicked(DataCollectionWrapper::TrackingPage::GeneralSettings + , DataCollectionWrapper::TrackingElement::AutoStart); + }); + + connect(_ui->serverNotificationsCheckBox, &QAbstractButton::clicked, this, [this](){ + _dcw.clicked(DataCollectionWrapper::TrackingPage::GeneralSettings + , DataCollectionWrapper::TrackingElement::ServerNotifications); + }); + + connect(_ui->moreInfoLinkButton, &OCC::LinkButton::clicked, this, [this](){ + _dcw.clicked(DataCollectionWrapper::TrackingPage::GeneralSettings + , DataCollectionWrapper::TrackingElement::MoreInformation); + }); + + connect(_ui->legalNoticeLinkButton, &OCC::LinkButton::clicked, this, [this](){ + _dcw.clicked(DataCollectionWrapper::TrackingPage::GeneralSettings + , DataCollectionWrapper::TrackingElement::LegalNotice); + }); + + connect(_ui->openSourceLinkButton, &OCC::LinkButton::clicked, this, [this](){ + _dcw.clicked(DataCollectionWrapper::TrackingPage::GeneralSettings + , DataCollectionWrapper::TrackingElement::OpenSourceComponents); + }); + + connect(_ui->privacyLinkButton, &OCC::LinkButton::clicked, this, [this](){ + _dcw.clicked(DataCollectionWrapper::TrackingPage::GeneralSettings + , DataCollectionWrapper::TrackingElement::PrivacyPolicy); + }); + + connect(_ui->sendData_checkbox, &QAbstractButton::clicked, this, [this](){ + _dcw.clicked(DataCollectionWrapper::TrackingPage::GeneralSettings, + DataCollectionWrapper::TrackingElement::ToogleSendData); + }); +} + void GeneralSettings::slotOpenMoreInformationLink() { QDesktopServices::openUrl(QUrl("https://wl.hidrive.com/easy/0007/")); @@ -342,6 +389,7 @@ void GeneralSettings::loadMiscSettings() _ui->newExternalStorage->setChecked(cfgFile.confirmExternalStorage()); _ui->monoIconsCheckBox->setChecked(cfgFile.monoIcons()); _ui->moveFilesToTrashCheckBox->setChecked(cfgFile.moveToTrash()); + _ui->sendData_checkbox->setChecked(cfgFile.sendData()); auto newFolderLimit = cfgFile.newBigFolderSizeLimit(); _ui->newFolderLimitCheckBox->setChecked(newFolderLimit.first); @@ -565,6 +613,7 @@ void GeneralSettings::saveMiscSettings() cfgFile.setConfirmExternalStorage(_ui->newExternalStorage->isChecked()); cfgFile.setNotifyExistingFoldersOverLimit(existingFolderLimitEnabled); cfgFile.setStopSyncingExistingFoldersOverLimit(stopSyncingExistingFoldersOverLimit); + cfgFile.setSendData(_ui->sendData_checkbox->isChecked()); _ui->existingFolderLimitCheckBox->setEnabled(newFolderLimitEnabled); _ui->stopExistingFolderNowBigSyncCheckBox->setEnabled(existingFolderLimitEnabled); @@ -654,6 +703,12 @@ void GeneralSettings::slotShowLegalNotice() delete notice; } +void GeneralSettings::slotToggleSendData() +{ + DataCollectionWrapper dcw; + dcw.setSendData(_ui->sendData_checkbox->isChecked()); +} + void GeneralSettings::slotStyleChanged() { customizeStyle(); diff --git a/src/gui/generalsettings.h b/src/gui/generalsettings.h index db8547e3e1da1..1bef71337f8c3 100644 --- a/src/gui/generalsettings.h +++ b/src/gui/generalsettings.h @@ -19,7 +19,7 @@ #include #include - +#include "ga4/datacollectionwrapper.h" namespace OCC { class IgnoreListEditor; class SyncLogDialog; @@ -64,6 +64,7 @@ private slots: void slotOpenLegalNoticeLink(); void slotOpenPrivacyLink(); void slotOpenOpenSourceLink(); + void slotToggleSendData(); void updatePollIntervalVisibility(); #if defined(BUILD_UPDATER) void slotUpdateInfo(); @@ -73,8 +74,9 @@ private slots: #endif private: + void connectToTracking(); void customizeStyle(); - + DataCollectionWrapper _dcw; Ui::GeneralSettings *_ui; QPointer _ignoreEditor; bool _currentlyLoading = false; diff --git a/src/gui/main.cpp b/src/gui/main.cpp index c5d70678938aa..67087d6d74586 100644 --- a/src/gui/main.cpp +++ b/src/gui/main.cpp @@ -42,6 +42,8 @@ #include #include #include "sesstyle.h" +#include "ga4/ganalytics.h" +#include "ga4/datacollectionwrapper.h" using namespace OCC; diff --git a/src/libsync/configfile.cpp b/src/libsync/configfile.cpp index 450c0997a7255..c8d1964b26b06 100644 --- a/src/libsync/configfile.cpp +++ b/src/libsync/configfile.cpp @@ -89,6 +89,7 @@ static constexpr char notifyExistingFoldersOverLimitC[] = "notifyExistingFolders static constexpr char stopSyncingExistingFoldersOverLimitC[] = "stopSyncingExistingFoldersOverLimit"; static constexpr char confirmExternalStorageC[] = "confirmExternalStorage"; static constexpr char moveToTrashC[] = "moveToTrash"; +static constexpr char sendDataC[] = "sendData"; static constexpr char forceLoginV2C[] = "forceLoginV2"; @@ -1023,6 +1024,16 @@ void ConfigFile::setConfirmExternalStorage(bool isChecked) setValue(confirmExternalStorageC, isChecked); } +bool ConfigFile::sendData() const +{ + return getValue(sendDataC, QString(), false).toBool(); +} + +void ConfigFile::setSendData(bool isChecked) +{ + setValue(sendDataC, isChecked); +} + bool ConfigFile::moveToTrash() const { return getValue(moveToTrashC, QString(), false).toBool(); diff --git a/src/libsync/configfile.h b/src/libsync/configfile.h index 7da4f8fca76ca..bfc88f410c85c 100644 --- a/src/libsync/configfile.h +++ b/src/libsync/configfile.h @@ -154,6 +154,10 @@ class OWNCLOUDSYNC_EXPORT ConfigFile [[nodiscard]] bool confirmExternalStorage() const; void setConfirmExternalStorage(bool); + /** If we should track user data */ + [[nodiscard]] bool sendData() const; + void setSendData(bool); + /** If we should move the files deleted on the server in the trash */ [[nodiscard]] bool moveToTrash() const; void setMoveToTrash(bool); From 0dd1401686015498f1cdb95238fba731906b5726 Mon Sep 17 00:00:00 2001 From: Emil Bohleber Date: Thu, 21 Nov 2024 15:32:19 +0100 Subject: [PATCH 028/371] add a space in shellext for windows --- shell_integration/windows/WinShellExt.wxs.in | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/shell_integration/windows/WinShellExt.wxs.in b/shell_integration/windows/WinShellExt.wxs.in index 6b770dfe7f727..1d2154200437a 100644 --- a/shell_integration/windows/WinShellExt.wxs.in +++ b/shell_integration/windows/WinShellExt.wxs.in @@ -42,11 +42,11 @@ There is a limit in Windows (oh wonder^^) so that only the first 15 extensions get invoked, this is why to use that dirty little trick to get ahead ;) See: https://docs.microsoft.com/en-us/windows/win32/shell/context-menu-handlers?redirectedfrom=MSDN#employing-the-verb-selection-model --> - - - - - + + + + + From 360f0b1bf23d1d139e2dc38c619a895322d82e1e Mon Sep 17 00:00:00 2001 From: Emil Bohleber Date: Thu, 21 Nov 2024 15:32:48 +0100 Subject: [PATCH 029/371] update windows build scripts --- admin/win/msi/CMakeLists.txt | 2 +- admin/win/msi/Ionos.wxs | 226 ++++++++++++++++++ .../msi/{Nextcloud.wxs => Nextcloud~~.wxs} | 0 admin/win/msi/make-msi.bat.in | 4 +- 4 files changed, 229 insertions(+), 3 deletions(-) create mode 100644 admin/win/msi/Ionos.wxs rename admin/win/msi/{Nextcloud.wxs => Nextcloud~~.wxs} (100%) diff --git a/admin/win/msi/CMakeLists.txt b/admin/win/msi/CMakeLists.txt index 26385a88b385b..a2b40c1a85372 100644 --- a/admin/win/msi/CMakeLists.txt +++ b/admin/win/msi/CMakeLists.txt @@ -27,7 +27,7 @@ install(FILES ${CMAKE_CURRENT_BINARY_DIR}/make-msi.bat EnsureACL.js Platform.wxi - Nextcloud.wxs + Ionos.wxs ${CMAKE_CURRENT_BINARY_DIR}/RegistryCleanup.vbs RegistryCleanupCustomAction.wxs gui/banner.bmp diff --git a/admin/win/msi/Ionos.wxs b/admin/win/msi/Ionos.wxs new file mode 100644 index 0000000000000..aed4d0b74820e --- /dev/null +++ b/admin/win/msi/Ionos.wxs @@ -0,0 +1,226 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + (NOT UPGRADINGPRODUCTCODE) AND (REMOVE="ALL") + + + (NOT UPGRADINGPRODUCTCODE) AND (REMOVE="ALL") + + + (SCHEDULE_REBOOT=1) OR NOT (UILevel=2) + + + + $(var.AppName) + $(var.AppIcon) + $(var.AppHelpLink) + $(var.AppInfoLink) + + + + + + + + + + + + + + + + + + + + + + + + 1 + + 1 + + + WIXUI_EXITDIALOGOPTIONALCHECKBOX = 1 and NOT Installed + + Removing previous installation + Trying to terminate application process of previous installation + Removing sync folders from Explorer's Navigation Pane + + + + + + + NOT (LAUNCH=0) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + (NO_SHELL_EXTENSIONS=1) + + + + + (NO_START_MENU_SHORTCUTS=1) + + + + + (NO_DESKTOP_SHORTCUT=1) + + + + diff --git a/admin/win/msi/Nextcloud.wxs b/admin/win/msi/Nextcloud~~.wxs similarity index 100% rename from admin/win/msi/Nextcloud.wxs rename to admin/win/msi/Nextcloud~~.wxs diff --git a/admin/win/msi/make-msi.bat.in b/admin/win/msi/make-msi.bat.in index eb14735327fdf..1b19cea7cc855 100644 --- a/admin/win/msi/make-msi.bat.in +++ b/admin/win/msi/make-msi.bat.in @@ -17,10 +17,10 @@ Rem Generate collect.wxs if %ERRORLEVEL% neq 0 exit %ERRORLEVEL% Rem Compile en-US (https://www.firegiant.com/wix/tutorial/transforms/morphing-installers/) -"%WIX%\bin\candle.exe" -dcodepage=1252 -dPlatform=%BuildArch% -arch %BuildArch% -dHarvestAppDir="%HarvestAppDir%" -ext WixUtilExtension NCMsiHelper.wxs WinShellExt.wxs collect.wxs Nextcloud.wxs RegistryCleanupCustomAction.wxs +"%WIX%\bin\candle.exe" -dcodepage=1252 -dPlatform=%BuildArch% -arch %BuildArch% -dHarvestAppDir="%HarvestAppDir%" -ext WixUtilExtension NCMsiHelper.wxs WinShellExt.wxs collect.wxs Ionos.wxs RegistryCleanupCustomAction.wxs if %ERRORLEVEL% neq 0 exit %ERRORLEVEL% Rem Link MSI package -"%WIX%\bin\light.exe" -sw1076 -ext WixUIExtension -ext WixUtilExtension -cultures:en-us NCMsiHelper.wixobj WinShellExt.wixobj collect.wixobj Nextcloud.wixobj RegistryCleanupCustomAction.wixobj -out "@MSI_INSTALLER_FILENAME@" +"%WIX%\bin\light.exe" -sw1076 -ext WixUIExtension -ext WixUtilExtension -cultures:en-us NCMsiHelper.wixobj WinShellExt.wixobj collect.wixobj Ionos.wixobj RegistryCleanupCustomAction.wixobj -out "@MSI_INSTALLER_FILENAME@" exit %ERRORLEVEL% From 56ed170832071605844b8e9e977bdefdd48f654f Mon Sep 17 00:00:00 2001 From: Emil Bohleber Date: Thu, 21 Nov 2024 15:33:03 +0100 Subject: [PATCH 030/371] add adr documentation --- doc/ADR/20241007_TrackingWithGA4.md | 31 +++++++++++++++++++++++++++++ doc/ADR/_template.md | 30 ++++++++++++++++++++++++++++ 2 files changed, 61 insertions(+) create mode 100644 doc/ADR/20241007_TrackingWithGA4.md create mode 100644 doc/ADR/_template.md diff --git a/doc/ADR/20241007_TrackingWithGA4.md b/doc/ADR/20241007_TrackingWithGA4.md new file mode 100644 index 0000000000000..522a6f3c87c79 --- /dev/null +++ b/doc/ADR/20241007_TrackingWithGA4.md @@ -0,0 +1,31 @@ +# Use Tracking with Google Analytics 4 + +## Status + +proposed + +## Context + +The web front end already tracks user interactions with GA4. To track interactions in the client software as well, an implementation with GA should also be done here. + +## Decision + +Since the use of GA4 in desktop software and the use of the pure API are not natively supported, a reverse-engineered solution had to be used (see https://ga4mp.dev/#/), similar to the use of the GA4 Measurement Protocol, which, however, does not provide a complete replacement. + +This approach implements GA4 tracking based on HTTP POST requests. + +## Implementation Details + +The implementation consists of three classes: + +* GAnalyticsWorker +* GAnalytics +* DataCollectionWrapper + +The DataCollectionWrapper is the outermost layer and is used by the application to track actions and events. The DataCollectionWrapper provides enums for various tracking pages (areas of the application, such as GeneralSettings or UserSettings) and tracking elements (specific buttons, checkboxes, or similar items). +GAnalytics acts as an intermediary between the outer layer (DataCollectionWrapper) and the communication logic. Various variables are also set here. When a tracking call is made, it is forwarded to the GAnalyticsWorker, where it is queued. + +The GAnalyticsWorker contains a queue, a message loop, and a QNetworkAccessManager. At fixed intervals, the queue is checked for tracking calls, which are then sent to the GA4 interface. If multiple calls are present, the connection is kept alive until all tracking calls have been sent. + +## Consequences +This approach allows client-side tracking using GA4, bridging the gap between web and desktop tracking. The modular design simplifies maintenance by separating tracking logic from communication handling. Usage is straightforward; the application simply calls the DataCollectionWrapper at points where tracking should occur, ensuring that actions and events are recorded seamlessly. However, relying on a reverse-engineered solution introduces risks of future incompatibility with GA4 updates. Managing a queue and network connection adds complexity, and there might be latency when batching tracking calls. Overall, the solution balances functionality with maintainability but carries some technical risks. diff --git a/doc/ADR/_template.md b/doc/ADR/_template.md new file mode 100644 index 0000000000000..0f2aef85df5b5 --- /dev/null +++ b/doc/ADR/_template.md @@ -0,0 +1,30 @@ +# ADR template by Michael Nygard + +This is the template in [Documenting architecture decisions - Michael Nygard](http://thinkrelevance.com/blog/2011/11/15/documenting-architecture-decisions). +You can use [adr-tools](https://github.com/npryce/adr-tools) for managing the ADR files. + +We extended this Template with ```Implementation Details``` (optional) + +In each ADR file, write these sections: + +# Title + +## Status + +What is the status, such as proposed, accepted, rejected, deprecated, superseded, etc.? + +## Context + +What is the issue that we're seeing that is motivating this decision or change? + +## Decision + +What is the change that we're proposing and/or doing? + +## Implementation Details + +(Optional) How was this Decision implemented. I.e. Uml Diagrams, Code etc. + +## Consequences + +What becomes easier or more difficult to do because of this change? From 34a0bad346c96930b7d1bbb6ba72a4a11148e845 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Christopher=20H=C3=A4tty?= Date: Thu, 23 Jan 2025 12:41:49 +0100 Subject: [PATCH 031/371] add mac specific styles and shell extension changes 6ee58b9834da6a6a678e55e4156d4def57075694 --- src/gui/macOS/ui/FileProviderSyncStatus.qml | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/gui/macOS/ui/FileProviderSyncStatus.qml b/src/gui/macOS/ui/FileProviderSyncStatus.qml index f9a185bdb1d50..05556236be51e 100644 --- a/src/gui/macOS/ui/FileProviderSyncStatus.qml +++ b/src/gui/macOS/ui/FileProviderSyncStatus.qml @@ -54,8 +54,9 @@ GridLayout { Layout.columnSpan: root.syncStatus.syncing ? 2 : 1 Layout.fillWidth: true font.bold: true - font.pointSize: Style.headerFontPtSize + font.pointSize: Style.sesFontPointSize text: root.syncStatus.syncing ? qsTr("Syncing") : qsTr("All synced!") + color: Style.sesDarkBlue } NCProgressBar { From 3af062c65c8b3578db85b3a61ec3f1740a5a13c6 Mon Sep 17 00:00:00 2001 From: Emil Bohleber Date: Thu, 21 Nov 2024 15:34:41 +0100 Subject: [PATCH 032/371] add mac build script --- admin/osx/ionos_macmaker/start.sh | 179 ++++++++++++++++++++++++++++++ 1 file changed, 179 insertions(+) create mode 100644 admin/osx/ionos_macmaker/start.sh diff --git a/admin/osx/ionos_macmaker/start.sh b/admin/osx/ionos_macmaker/start.sh new file mode 100644 index 0000000000000..0eb9d9d405852 --- /dev/null +++ b/admin/osx/ionos_macmaker/start.sh @@ -0,0 +1,179 @@ +#!/bin/bash + +# This script is used to build the Mac OS X version of the IONOS client. +set -xe + +# Parse the command line arguments +while getopts "b:s:ci" opt; do + case ${opt} in + b )BUILD_DIR=$OPTARG;; + s )CODE_SIGN_IDENTITY=$OPTARG ;; + c )CLEAN_REBUILD=true ;; + i )PACKAGE_INSTALLER=true ;; + \? ) + echo "Usage: start.sh [-b ] [-s ] [-c] [-i]" + exit 1 + ;; + esac +done + +# Set the deployment target +export MACOSX_DEPLOYMENT_TARGET=10.15 + +# Some variables +PRODUCT_NAME="HiDrive Next" +REPO_ROOT_DIR="../../.." +CRAFT_DIR=~/Craft64 +PRODUCT_DIR=$BUILD_DIR/product +BUILD_UPDATER=true +TEAM_IDENTIFIER="5TDLCVD243" + +# Check if the client is running and kill it +# This is necessary to avoid issues with replacement of the bundle file +if pgrep -x "$PRODUCT_NAME" >/dev/null; then + killall "$PRODUCT_NAME" +fi + +# Check if BUILD_DIR is set, so we don't accidentally delete the whole filesystem +if [ -z "$BUILD_DIR" ]; then + echo "Build dir not set. Add -b to the command." + exit 0 +fi + +# Check if BUILD_DIR exists. If not, create it. If so, clear it. +if [ ! -d $BUILD_DIR ]; then + mkdir -p $BUILD_DIR +else + if [ $CLEAN_REBUILD = true ]; then + rm -rf $BUILD_DIR/* + fi +fi + +# Check if Craft dir exists, if not exit +if [ ! -d $CRAFT_DIR ]; then + echo "Craft dir not found. Exiting." + exit 1 +fi + +# Load Sparkle +SPARKLE_DIR=$BUILD_DIR/sparkle +SPARKLE_DOWNLOAD_URI="https://github.com/sparkle-project/Sparkle/releases/download/1.27.3/Sparkle-1.27.3.tar.xz" + +if [ "$CLEAN_REBUILD" == "true" ] && [ "$BUILD_UPDATER" == "true" ]; then + mkdir -p $SPARKLE_DIR + wget $SPARKLE_DOWNLOAD_URI -O $SPARKLE_DIR/Sparkle.tar.xz + tar -xvf $SPARKLE_DIR/Sparkle.tar.xz -C $SPARKLE_DIR +fi + +# Build the client +cmake -S $REPO_ROOT_DIR/ -B $BUILD_DIR \ + -DQT_TRANSLATIONS_DIR=$REPO_ROOT_DIR/translations \ + -DCMAKE_INSTALL_PREFIX=$PRODUCT_DIR \ + -DBUILD_TESTING=OFF \ + -DBUILD_UPDATER=$(if [ $BUILD_UPDATER == true ]; then echo "ON"; else echo "OFF"; fi) \ + -DMIRALL_VERSION_BUILD=`date +%Y%m%d` \ + -DMIRALL_VERSION_SUFFIX=increment \ + -DBUILD_OWNCLOUD_OSX_BUNDLE=ON \ + -DCMAKE_OSX_ARCHITECTURES=x86_64 \ + -DBUILD_FILE_PROVIDER_MODULE=ON \ + -DCMAKE_PREFIX_PATH=$CRAFT_DIR \ + -DSPARKLE_LIBRARY=$SPARKLE_DIR/Sparkle.framework \ + -DSOCKETAPI_TEAM_IDENTIFIER_PREFIX="$TEAM_IDENTIFIER." \ + +make install -C $BUILD_DIR -j4 + +# --------------------------------------------------- +# Sign the client +# CODE_SIGN_IDENTITY="Developer ID Application: IONOS SE (5TDLCVD243)" + +# Check if CODE_SIGN_IDENTITY is set, if not exit +if [ -z "$CODE_SIGN_IDENTITY" ]; then + echo "Code sign identity not set. Exiting." + open $PRODUCT_DIR + exit 0 +fi + +PRODUCT_PATH=$PRODUCT_DIR/$PRODUCT_NAME.app + +recursive_sign(){ + local path="$1" + local extension="${path##*.}" + if [[ "$extension" == "dylib" || "$extension" == "framework" || "$extension" == "appex" ]]; then + echo "Signing directory: $path" + codesign -s "$2" --force --preserve-metadata=entitlements --verbose=4 --deep --options=runtime --timestamp "${path}" + fi +} + +export -f recursive_sign + +sign_folder_content(){ + local folder="$1" + local identity="$2" + local entitlements="$3" + codesign -s "$identity" --force $entitlements --verbose=4 --deep --options=runtime --timestamp "${folder}" +} + +export -f sign_folder_content + +CLIENT_CONTENTS_DIR=$PRODUCT_PATH/Contents +CLIENT_FRAMEWORKS_DIR=$CLIENT_CONTENTS_DIR/Frameworks +CLIENT_PLUGINS_DIR=$CLIENT_CONTENTS_DIR/PlugIns +CLIENT_RESOURCES_DIR=$CLIENT_CONTENTS_DIR/Resources + +find "$CLIENT_FRAMEWORKS_DIR" -print0 | xargs -0 -I {} bash -c 'recursive_sign "$@" "$CODE_SIGN_IDENTITY"' _ {} "$CODE_SIGN_IDENTITY" +find "$CLIENT_PLUGINS_DIR" -print0 | xargs -0 -I {} bash -c 'recursive_sign "$@" "$CODE_SIGN_IDENTITY"' _ {} "$CODE_SIGN_IDENTITY" +find "$CLIENT_RESOURCES_DIR" -print0 | xargs -0 -I {} bash -c 'recursive_sign "$@" "$CODE_SIGN_IDENTITY"' _ {} "$CODE_SIGN_IDENTITY" + +codesign -s "$CODE_SIGN_IDENTITY" --force --preserve-metadata=entitlements --verbose=4 --deep --options=runtime --timestamp "$PRODUCT_PATH" + +# Sign Sparkle +if [ $BUILD_UPDATER == true ]; then + SPARKLE_DIR=$CLIENT_FRAMEWORKS_DIR/Sparkle.framework + find "$SPARKLE_DIR/Resources/Autoupdate.app/Contents/MacOS" -mindepth 1 -print0 | xargs -0 -I {} bash -c 'sign_folder_content "$@" "$CODE_SIGN_IDENTITY"' _ {} "$CODE_SIGN_IDENTITY" + codesign -s "$CODE_SIGN_IDENTITY" --force --preserve-metadata=entitlements --verbose=4 --deep --options=runtime --timestamp "$SPARKLE_DIR/Sparkle" +fi + +# Sign the client +find "$CLIENT_CONTENTS_DIR/MacOS" -mindepth 1 -print0 | xargs -0 -I {} bash -c 'sign_folder_content "$@" "$CODE_SIGN_IDENTITY" "$entitlements" ' _ {} "$CODE_SIGN_IDENTITY" "--preserve-metadata=entitlements" + +# Validate that the key used for signing the binary matches the expected TeamIdentifier +# needed to pass the SocketApi through the sandbox for communication with virtual file system +if ! codesign -dv "$PRODUCT_PATH" 2>&1 | grep -q "TeamIdentifier=$TEAM_IDENTIFIER"; then + echo "TeamIdentifier does not match. Exiting." + exit 0 +fi + +# --------------------------------------------------- +# Installer + +# Build the installer, if enabled +if [ -z "$PACKAGE_INSTALLER" ]; then + echo "Installer packaging not enabled. Exiting." + open $PRODUCT_DIR + exit 0 +fi + +# package +$BUILD_DIR/admin/osx/create_mac.sh "$PRODUCT_DIR" "$BUILD_DIR" 'Developer ID Installer: IONOS SE (5TDLCVD243)' + +# notariaze +# Extract package filename from filesystem per .pkg extension +PACKAGE_FILENAME=$(ls $PRODUCT_DIR/*.pkg) + +# catch the output of the notarytool command +OUTPUT=$(xcrun notarytool submit --wait $PACKAGE_FILENAME\ + --keychain-profile "IONOS SE HiDrive Next") + +SUBMISSION_STATUS=$(echo $OUTPUT | grep -o 'status: [^ ]*' | cut -d ' ' -f 2) + +# Check if the notarization was successful +if [ $SUBMISSION_STATUS != "Accepted" ]; then + echo "Notarization failed. Exiting." + exit 1 +fi + +# staple +xcrun stapler staple $PACKAGE_FILENAME +xcrun stapler validate $PACKAGE_FILENAME + +open $PRODUCT_DIR From 675c8f1123cd6780810c7d73bad51286122c3c28 Mon Sep 17 00:00:00 2001 From: Emil Bohleber Date: Thu, 21 Nov 2024 15:35:27 +0100 Subject: [PATCH 033/371] change windows ci script to manual trigger --- .github/workflows/windows-build-and-test.yml | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/.github/workflows/windows-build-and-test.yml b/.github/workflows/windows-build-and-test.yml index 2aa869326675b..4d1b68b0f3460 100644 --- a/.github/workflows/windows-build-and-test.yml +++ b/.github/workflows/windows-build-and-test.yml @@ -1,5 +1,10 @@ name: Windows Build and Test on: + workflow_dispatch: + # push: + # branches: + # - master + # - develop pull_request: types: [opened, synchronize, reopened] jobs: From f42d59055ba10d194ebabdb4541f0f8fd7df5307 Mon Sep 17 00:00:00 2001 From: Emil Bohleber Date: Thu, 21 Nov 2024 16:31:38 +0100 Subject: [PATCH 034/371] replace all ses icons with some other icon from nextcloud --- src/gui/folderstatusdelegate.cpp | 2 +- src/gui/sesFileIconProvider.cpp | 4 ++-- src/gui/settingsdialog.cpp | 6 +++--- src/gui/tray/activitylistmodel.cpp | 10 +++++----- src/gui/wizard/flow2authwidget.cpp | 2 +- src/libsync/ionostheme.h | 16 ++++++++-------- 6 files changed, 20 insertions(+), 20 deletions(-) diff --git a/src/gui/folderstatusdelegate.cpp b/src/gui/folderstatusdelegate.cpp index 4532dc92b1887..ebd2dbdf7a3ab 100644 --- a/src/gui/folderstatusdelegate.cpp +++ b/src/gui/folderstatusdelegate.cpp @@ -517,7 +517,7 @@ void FolderStatusDelegate::slotStyleChanged() void FolderStatusDelegate::customizeStyle() { - _iconMore = Theme::createColorAwareIcon(QLatin1String(":/client/theme/ses/ses-more.svg"), QSize(128, 128)); + _iconMore = Theme::createColorAwareIcon(QLatin1String(":/client/theme/more.svg"), QSize(128, 128)); } } // namespace OCC diff --git a/src/gui/sesFileIconProvider.cpp b/src/gui/sesFileIconProvider.cpp index 99f96001b2fb1..677c1491b0d27 100644 --- a/src/gui/sesFileIconProvider.cpp +++ b/src/gui/sesFileIconProvider.cpp @@ -9,12 +9,12 @@ QIcon SesFileIconProvider::icon(const QFileInfo &info) const if (info.isDir()) { - return QIcon(":/client/theme/ses/ses-filesIconBright.svg"); + return QIcon(":/client/theme/black/folder.svg"); } if (info.suffix().isEmpty()) { - return QIcon(":/client/theme/ses/ses-file.svg"); + return QIcon(":/client/theme/black/edit.svg"); } diff --git a/src/gui/settingsdialog.cpp b/src/gui/settingsdialog.cpp index 2f734f889db4c..67ef6e137c437 100644 --- a/src/gui/settingsdialog.cpp +++ b/src/gui/settingsdialog.cpp @@ -119,12 +119,12 @@ SettingsDialog::SettingsDialog(ownCloudGui *gui, QWidget *parent) _actionGroup->setExclusive(true); connect(_actionGroup, &QActionGroup::triggered, this, &SettingsDialog::slotSwitchPage); - QAction *newAccountAction = createColorAwareAction(QLatin1String(":/client/theme/ses/ses-darkPlus16.svg"), tr("New Account")); + QAction *newAccountAction = createColorAwareAction(QLatin1String(":/client/theme/black/add.svg"), tr("New Account")); _actionGroup->addAction(newAccountAction); _toolBar->addAction(newAccountAction); connect(newAccountAction, &QAction::triggered, _gui, &ownCloudGui::slotNewAccountWizard); - QAction *generalAction = createColorAwareAction(QLatin1String(":/client/theme/ses/ses-settings24.svg"), tr("General")); + QAction *generalAction = createColorAwareAction(QLatin1String(":/client/theme/settings.svg"), tr("General")); _actionGroup->addAction(generalAction); _toolBar->addAction(generalAction); auto *generalSettings = new GeneralSettings; @@ -249,7 +249,7 @@ void SettingsDialog::accountAdded(AccountState *s) bool brandingSingleAccount = !Theme::instance()->multiAccount(); const auto actionText = brandingSingleAccount ? tr("Account") : s->account()->displayName(); - const auto accountAction = createColorAwareAction(QLatin1String(":/client/theme/ses/ses-settingsAvatar.svg"), actionText); + const auto accountAction = createColorAwareAction(QLatin1String(":/client/theme/account.svg"), actionText); if (!brandingSingleAccount) { accountAction->setToolTip(s->account()->displayName()); diff --git a/src/gui/tray/activitylistmodel.cpp b/src/gui/tray/activitylistmodel.cpp index eb502a9a15b19..96eb24fb6de28 100644 --- a/src/gui/tray/activitylistmodel.cpp +++ b/src/gui/tray/activitylistmodel.cpp @@ -227,18 +227,18 @@ QVariant ActivityListModel::data(const QModelIndex &index, int role) const }; const auto generateIconPath = [&]() { - auto colorIconPath = QStringLiteral("qrc:///client/theme/ses/"); + auto colorIconPath = QStringLiteral("qrc:///client/theme/colored/"); if (a._type == Activity::NotificationType && !a._talkNotificationData.userAvatar.isEmpty()) { return QStringLiteral("image://svgimage-custom-color/talk-bordered.svg"); } else if (a._type == Activity::SyncResultType) { - colorIconPath.append("ses-snackBarErrorIcon.svg"); + colorIconPath.append("state-error.svg"); return colorIconPath; } else if (a._type == Activity::SyncFileItemType) { if (a._syncFileItemStatus == SyncFileItem::NormalError || a._syncFileItemStatus == SyncFileItem::FatalError || a._syncFileItemStatus == SyncFileItem::DetailError || a._syncFileItemStatus == SyncFileItem::BlacklistedError) { - colorIconPath.append("ses-snackBarErrorIcon.svg"); + colorIconPath.append("state-error.svg"); return colorIconPath; } else if (a._syncFileItemStatus == SyncFileItem::SoftError || a._syncFileItemStatus == SyncFileItem::Conflict @@ -247,10 +247,10 @@ QVariant ActivityListModel::data(const QModelIndex &index, int role) const || a._syncFileItemStatus == SyncFileItem::FileNameInvalid || a._syncFileItemStatus == SyncFileItem::FileNameInvalidOnServer || a._syncFileItemStatus == SyncFileItem::FileNameClash) { - colorIconPath.append("ses-warning.svg"); + colorIconPath.append("state-info.svg"); return colorIconPath; } else if (a._syncFileItemStatus == SyncFileItem::FileIgnored) { - colorIconPath.append("ses-info.svg"); + colorIconPath.append("state-info.svg"); return colorIconPath; } else { // File sync successful diff --git a/src/gui/wizard/flow2authwidget.cpp b/src/gui/wizard/flow2authwidget.cpp index 338b7fb04fa70..89b52f09d8fe9 100644 --- a/src/gui/wizard/flow2authwidget.cpp +++ b/src/gui/wizard/flow2authwidget.cpp @@ -58,7 +58,7 @@ Flow2AuthWidget::Flow2AuthWidget(QWidget *parent) void Flow2AuthWidget::setLogo() { - const auto logoIconFileName = Theme::hidpiFileName(":/client/theme/ses/ses-external.svg"); + const auto logoIconFileName = Theme::hidpiFileName(":/client/theme/black/external.svg"); _ui.logoLabel->setPixmap(logoIconFileName); } diff --git a/src/libsync/ionostheme.h b/src/libsync/ionostheme.h index 97d7e34670787..bfb96b43e30aa 100644 --- a/src/libsync/ionostheme.h +++ b/src/libsync/ionostheme.h @@ -12,35 +12,35 @@ class IonosTheme { //Icons static QString avatarIcon() { - return QString(Theme::themePrefix) + QStringLiteral("ses/ses-setupAvatar.svg"); + return QString(Theme::themePrefix) + QStringLiteral("colored/wizard-groupware.svg"); } static QString folderIcon() { - return QString(Theme::themePrefix) + QStringLiteral("ses/ses-folder32.svg"); + return QString(Theme::themePrefix) + QStringLiteral("black/folder.svg"); } static QString syncArrows() { - return QString(Theme::themePrefix) + QStringLiteral("ses/ses-syncArrows.svg"); + return QString(Theme::themePrefix) + QStringLiteral("sync-arrow.svg"); } static QString questionCircleIcon() { - return QString(Theme::themePrefix) + QStringLiteral("ses/ses-questionCircle.svg"); + return QString(Theme::themePrefix) + QStringLiteral("black/state-info.svg"); } static QString liveBackupPlusIcon() { - return QString(Theme::themePrefix) + QStringLiteral("ses/ses-addLiveBackupPlus.svg"); + return QString(Theme::themePrefix) + QStringLiteral("black/add.svg"); } static QString plusIcon() { - return QStringLiteral("qrc:///client/theme/ses/ses-darkPlus24.svg"); + return QStringLiteral("qrc:///client/theme/black/add.svg"); } static QString deleteIcon() { - return QStringLiteral("qrc:///client/theme/ses/ses-activityDelete.svg"); + return QStringLiteral("qrc:///client/theme/black/clear.svg"); } static QString refreshIcon() { - return QStringLiteral("qrc:///client/theme/ses/ses-refresh.svg"); + return QStringLiteral("qrc:///client/theme/black/change.svg"); } static int treeViewIconSize() { From 5b5104795ac4be3b2e3cebbf111f78f35440ffa7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Christopher=20H=C3=A4tty?= Date: Mon, 25 Nov 2024 09:47:33 +0100 Subject: [PATCH 035/371] replaced link icons with simliar icon --- src/gui/filedetails/sharemodel.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/gui/filedetails/sharemodel.cpp b/src/gui/filedetails/sharemodel.cpp index 283f496c2d01e..b25a32c7cb194 100644 --- a/src/gui/filedetails/sharemodel.cpp +++ b/src/gui/filedetails/sharemodel.cpp @@ -782,11 +782,11 @@ QString ShareModel::iconUrlForShare(const SharePtr &share) const switch(share->getShareType()) { case Share::TypeInternalLink: - return QString(iconsPath + QStringLiteral("externalLink.svg")); + return QString(iconsPath + QStringLiteral("public.svg")); case Share::TypePlaceholderLink: case Share::TypeSecureFileDropPlaceholderLink: case Share::TypeLink: - return QString(iconsPath + QStringLiteral("link.svg")); + return QString(iconsPath + QStringLiteral("public.svg")); case Share::TypeEmail: return QString(iconsPath + QStringLiteral("email.svg")); case Share::TypeRoom: From 8aa4789a94a449efa72180837813e81fbbf60102 Mon Sep 17 00:00:00 2001 From: Kevin Beraz Date: Tue, 3 Dec 2024 14:29:47 +0100 Subject: [PATCH 036/371] SES-186 replace installer banner with white image --- admin/win/msi/gui/banner.bmp | Bin 114514 -> 85978 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/admin/win/msi/gui/banner.bmp b/admin/win/msi/gui/banner.bmp index fa483161f4a6ed96708261f7aeb1524da2cf73c2..5270a99dea084175b16de1eb879f42cbc2d9bea2 100644 GIT binary patch delta 398 zcmccgkL}icR&6KWTmFm;AkYQGH9-6p$h88}j0_S$l7S%rC@;j#z#z0yTaAs8VdKQ( KtfM5gLjV9St$wcn literal 114514 zcmeI)JBVCm9ER~(B7)io!8W9llwvv|5YmW+5Cd8XYO|dZuu=qV*1~4hLP!yl!p5Xf zQbe~gAr`UP*aX1@5(pTGh(r<6jq{wzJO1~}ncd0m$nJ*c;COD|?feGjJ-6(Umycao z7%+V@`g}0@{4rX6VKiSD>>unI&42n~VX*h9LH8N0-k*kp!T3McheuvK_U`hfe-6Cz z{k~`RE&aZ5@ZiC{i;IiTjy{i{IC0{MLr?y)=fLaB&!;x?$Lh*xdFZ5o0tzUgfC36A zpnw7jD4>7>3Mim}0tzUgfC36Apnw7jD4>7>3Mim}0tzUgfC36Apnw7jD4>7>3Mim} z0tzUgfC36Apnw7jD4>7>3Mim}0tzUgfC36Apnw7jD4>7>3Mim}0tzUgfC36Apnw7j zD4>7>3Mim}0tzUgfC36Apnw7jD4>7>3Mim}0tzUgfC36Apnw7jD4>7>3Mim}0tzUg zfC36Apnw7jD4>7>3Mim}0tzUgfC36Apnw7jD4>7>yISDxZ#Rbb{`zw+$FP~UsNtzi0+=tY@tG z&Nv>nCzn(2-rwVM1lFnZ)mzWi=3Q1m0Ru z>>MY#$oOLzYuc}$zIz7LOJ-9aQ?}v2bp2Asb*i_mde4Ay)QNU-JaxOv3Mim}0^2K) zjOntY+`G-Fl7aO;>78ri>p|*}4eeCh%sw)R@_g8zoXURY$u`Q+N2Z)3oO|zRHcjST z?vCzX*K+{2(MG+7om40b$!x}wPjWNGDAV2>ubE9b#+R|>*i)Z*jw|Ox^pW!x>QaX( zbx*#wf0z%)(e_8#II_%fc4HWwuP|pyW~UwI)TvpV`zKuA*QqU6_qnWq0tzUweFDh| zey5Wubu@kXSFdkt2BcnXGuy~C`XH;wh~!lEGf%d)W9b`1t=BH+dOkVY?$3JKrN8!5 z%WRa{w3G9L9D6+{$#KP(vT2ifo3p8#^PJSnn3ywO`l|P~Yg;+5N*?FFd-6Z^=sROi z`?THny=K321r$&~f$b4U#_&7cmkr6a`n&$HnN0>I6X}oVsLb0b+18GwZwzhStk*XB z`batEw9B<-_pF!ay`xX=SEn3hlCQa+oZL$p&O=fro@~R6?8}(&O%A7xWNX&RP(B#- z=qmU>1r$&~fgK@`jA?T+ zgX_!7{LWLS?|Q7ZNjqc)!pE>1|*_2_Ox_!2(7f-S`$Ju5!+w)EUZ88=n z#>{#q#+r5Jw9P#V>N+W)fC38a9D)2sw>g;+_T}ZQnVmdIzK|*DFBy@3m?tmWvGk3h z)@$q1Z}O=vSJyY2*||@UbCEXpYac9gUCX~$o97hMoKMhpo7tP~kG9u4U)XHB)>A+M z1r*qtKr*z=$+X&+m$POz_iWd;f1|tSN?-HLY_46&Y1(DZ`YaRg*O7B|;@vIY*UH58 zdY+4Oon7DQ!e*9h(VUCSIl9Q1?DfXHdAjt(7{$R zn`gDj(&P&nIM2-9Y+gTbpi?&FzVnpbGjE<(J2Q8<#e%zSyjwh6t1F;@0=q)s|H^DK zy0)F?we!yGyfgJM*Vnt^i*b+&D4>7>3N!*WSLgZO_^m7Bzlq8*+>cIH_C5E^yVEI?Yi#PTm)ZF{Ak?eRe)G3K@?1IN zV4gneb7kJkqHJxW)^S+@1r$&~f!!#uQD*1;DYB9Gq{+tQF5CK^d$KLhvFkN9KB-H; z?Nr}wqa1zb-E8`*xtzLr-cEn~8)M3(?>s|KS?3BUpnw7j>}G+DGMi&d&gPmn^S<1r zJh_=N^%}djHLY$PPugJ482Zi+YR=d4KHo;$NdW~EP~cG#$h+OsGLd5?E4gOP_3QW= z`1Di;?oCs+y~d_O{?1sN<+ZWyTK@ju$EF?nUhm&qa}2rOCbwB$uYB#xWd#&aKmi35 zP(T3%6i`3`1r$&~0R@~ From 1d48650967c899c438ebc468ea4f89bff5b470aa Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Christopher=20H=C3=A4tty?= Date: Thu, 23 Jan 2025 13:01:33 +0100 Subject: [PATCH 037/371] SES-161 Use AppShortName for Update URL 6958ca6deaf55e530065bf9f7e495d326786f0c8 --- src/gui/updater/updater.cpp | 2 +- src/libsync/theme.cpp | 5 +++++ src/libsync/theme.h | 19 +++++++++++++++++++ 3 files changed, 25 insertions(+), 1 deletion(-) diff --git a/src/gui/updater/updater.cpp b/src/gui/updater/updater.cpp index c09113137585d..020b09c14f836 100644 --- a/src/gui/updater/updater.cpp +++ b/src/gui/updater/updater.cpp @@ -95,7 +95,7 @@ QUrlQuery Updater::getQueryParams() query.addQueryItem(QStringLiteral("osRelease"), QSysInfo::productType()); query.addQueryItem(QStringLiteral("osVersion"), QSysInfo::productVersion()); query.addQueryItem(QStringLiteral("kernelVersion"), QSysInfo::kernelVersion()); - query.addQueryItem(QStringLiteral("oem"), Theme::instance()->appName()); + query.addQueryItem(QStringLiteral("oem"), Theme::instance()->appShortName()); query.addQueryItem(QStringLiteral("buildArch"), QSysInfo::buildCpuArchitecture()); query.addQueryItem(QStringLiteral("currentArch"), QSysInfo::currentCpuArchitecture()); query.addQueryItem(QStringLiteral("versionsuffix"), Theme::instance()->versionSuffix()); diff --git a/src/libsync/theme.cpp b/src/libsync/theme.cpp index 5e06ced3f1ffe..8b087dcaaee8b 100644 --- a/src/libsync/theme.cpp +++ b/src/libsync/theme.cpp @@ -147,6 +147,11 @@ QString Theme::appName() const return APPLICATION_NAME; } +QString Theme::appShortName() const +{ + return APPLICATION_SHORTNAME; +} + QUrl Theme::stateOnlineImageSource() const { return imagePathToUrl(themeImagePath("state-ok")); diff --git a/src/libsync/theme.h b/src/libsync/theme.h index 3a021b8db8c3f..16234a22604ea 100644 --- a/src/libsync/theme.h +++ b/src/libsync/theme.h @@ -41,6 +41,7 @@ class OWNCLOUDSYNC_EXPORT Theme : public QObject Q_PROPERTY(bool branded READ isBranded CONSTANT) Q_PROPERTY(QString appNameGUI READ appNameGUI CONSTANT) Q_PROPERTY(QString appName READ appName CONSTANT) + Q_PROPERTY(QString appShortName READ appShortName CONSTANT) Q_PROPERTY(QUrl stateOnlineImageSource READ stateOnlineImageSource CONSTANT) Q_PROPERTY(QUrl stateOfflineImageSource READ stateOfflineImageSource CONSTANT) Q_PROPERTY(QUrl statusOnlineImageSource READ statusOnlineImageSource CONSTANT) @@ -123,6 +124,24 @@ class OWNCLOUDSYNC_EXPORT Theme : public QObject */ [[nodiscard]] QString appName() const; + /** + * @brief appShortName - Application name (short and single word) + * + * Use and redefine this as an application name. Keep it straight as + * it is used for config files etc. If you need a more sophisticated + * name in the GUI, redefine appNameGUI. + * + * By default, the name is derived from the APPLICATION_SHORTNAME + * cmake variable, and should be the same. This method is only + * reimplementable for legacy reasons. + * + * Warning: Do not modify this value, as many things, e.g. settings + * depend on it! You most likely want to modify \ref appNameGUI(). + * + * @return QString with app name. + */ + [[nodiscard]] QString appShortName() const; + /** * @brief Returns full path to an online state icon * @return QUrl full path to an icon From 6123e504a3041e06c75a6d644a66267a4ffb2ebd Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Christopher=20H=C3=A4tty?= Date: Tue, 3 Dec 2024 14:57:40 +0100 Subject: [PATCH 038/371] SES-161 Use correct Update Server --- IONOS.cmake | 82 +++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 82 insertions(+) create mode 100644 IONOS.cmake diff --git a/IONOS.cmake b/IONOS.cmake new file mode 100644 index 0000000000000..1ccf59eff473c --- /dev/null +++ b/IONOS.cmake @@ -0,0 +1,82 @@ +set( APPLICATION_NAME "HiDrive Next" ) +set( APPLICATION_SHORTNAME "HiDriveNext" ) +set( APPLICATION_EXECUTABLE "HiDriveNext" ) +set( APPLICATION_CONFIG_NAME "${APPLICATION_EXECUTABLE}" ) +set( APPLICATION_DOMAIN "ionos.com" ) +set( APPLICATION_VENDOR "IONOS SE" ) +set( APPLICATION_UPDATE_URL "https://customerupdates.nextcloud.com/client/" CACHE STRING "URL for updater" ) +set( APPLICATION_HELP_URL "" CACHE STRING "URL for the help menu" ) + +if(APPLE AND APPLICATION_NAME STREQUAL "Nextcloud" AND EXISTS "${CMAKE_SOURCE_DIR}/theme/colored/Nextcloud-macOS-icon.svg") + set( APPLICATION_ICON_NAME "Nextcloud-macOS" ) + message("Using macOS-specific application icon: ${APPLICATION_ICON_NAME}") +else() + set( APPLICATION_ICON_NAME "${APPLICATION_SHORTNAME}" ) +endif() + +set( APPLICATION_ICON_SET "SVG" ) +set( APPLICATION_SERVER_URL "https://easy-qa-1.nextcloud-ionos.com" CACHE STRING "URL for the server to use. If entered, the UI field will be pre-filled with it" ) +set( APPLICATION_SERVER_URL_ENFORCE ON ) # If set and APPLICATION_SERVER_URL is defined, the server can only connect to the pre-defined URL +set( APPLICATION_REV_DOMAIN "com.ionos.hidrivenext.desktopclient" ) +# set( APPLICATION_VIRTUALFILE_SUFFIX "nextcloud" CACHE STRING "Virtual file suffix (not including the .)") +set( APPLICATION_OCSP_STAPLING_ENABLED OFF ) +set( APPLICATION_FORBID_BAD_SSL OFF ) + +set( LINUX_PACKAGE_SHORTNAME "hidrivenext" ) +set( LINUX_APPLICATION_ID "${APPLICATION_REV_DOMAIN}.${LINUX_PACKAGE_SHORTNAME}") + +set( THEME_CLASS "NextcloudTheme" ) +set( WIN_SETUP_BITMAP_PATH "${CMAKE_SOURCE_DIR}/admin/win/nsi" ) + +set( MAC_INSTALLER_BACKGROUND_FILE "${CMAKE_SOURCE_DIR}/admin/osx/installer-background.png" CACHE STRING "The MacOSX installer background image") + +# set( THEME_INCLUDE "${OEM_THEME_DIR}/mytheme.h" ) +# set( APPLICATION_LICENSE "${OEM_THEME_DIR}/license.txt ) + +option( WITH_CRASHREPORTER "Build crashreporter" OFF ) +#set( CRASHREPORTER_SUBMIT_URL "https://crash-reports.owncloud.com/submit" CACHE STRING "URL for crash reporter" ) +#set( CRASHREPORTER_ICON ":/owncloud-icon.png" ) + +## Updater options +option( BUILD_UPDATER "Build updater" ON ) + +option( WITH_PROVIDERS "Build with providers list" ON ) + +option( ENFORCE_VIRTUAL_FILES_SYNC_FOLDER "Enforce use of virtual files sync folder when available" OFF ) + +option(ENFORCE_SINGLE_ACCOUNT "Enforce use of a single account in desktop client" OFF) + +option( DO_NOT_USE_PROXY "Do not use system wide proxy, instead always do a direct connection to server" OFF ) + +## Theming options +set(NEXTCLOUD_BACKGROUND_COLOR "#0082c9" CACHE STRING "Default Nextcloud background color") +set( APPLICATION_WIZARD_HEADER_BACKGROUND_COLOR ${NEXTCLOUD_BACKGROUND_COLOR} CACHE STRING "Hex color of the wizard header background") +set( APPLICATION_WIZARD_HEADER_TITLE_COLOR "#000000" CACHE STRING "Hex color of the text in the wizard header") +option( APPLICATION_WIZARD_USE_CUSTOM_LOGO "Use the logo from ':/client/theme/colored/wizard_logo.(png|svg)' else the default application icon is used" ON ) + + +# +## Windows Shell Extensions & MSI - IMPORTANT: Generate new GUIDs for custom builds with "guidgen" or "uuidgen" +# +if(WIN32) + # Context Menu + set( WIN_SHELLEXT_CONTEXT_MENU_GUID "{28F7B423-F04D-4035-9163-742ABAB2C09D}" ) + + # Overlays + set( WIN_SHELLEXT_OVERLAY_GUID_ERROR "{69E48F56-3877-4D15-BE6C-148D20D9AD39}" ) + set( WIN_SHELLEXT_OVERLAY_GUID_OK "{66163328-2F7D-4727-8557-07AA1A4951D4}" ) + set( WIN_SHELLEXT_OVERLAY_GUID_OK_SHARED "{FE8E7808-F772-402A-96C5-5998ADAE34B7}" ) + set( WIN_SHELLEXT_OVERLAY_GUID_SYNC "{BE95EBD1-B334-4D70-8797-F3827DBA7884}" ) + set( WIN_SHELLEXT_OVERLAY_GUID_WARNING "{F5D52817-2813-4CF7-94E6-4D58D96E5EB3}" ) + + # MSI Upgrade Code (without brackets) + set( WIN_MSI_UPGRADE_CODE "DB5332BA-8B5B-43A9-8594-48263DE4E7EA" ) + + # Windows build options + option( BUILD_WIN_MSI "Build MSI scripts and helper DLL" OFF ) + option( BUILD_WIN_TOOLS "Build Win32 migration tools" OFF ) +endif() + +if (APPLE AND CMAKE_OSX_DEPLOYMENT_TARGET VERSION_GREATER_EQUAL 11.0) + option( BUILD_FILE_PROVIDER_MODULE "Build the macOS virtual files File Provider module" OFF ) +endif() From fb95a0388bf2fdf6e2472bf3b936921660c1e266 Mon Sep 17 00:00:00 2001 From: Boris Baltes Date: Thu, 12 Dec 2024 13:17:40 +0100 Subject: [PATCH 039/371] SES-228 validate manual input in FolderWizardLocalPath --- src/gui/folderwizard.cpp | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/src/gui/folderwizard.cpp b/src/gui/folderwizard.cpp index 37cf2e367691c..1a30eff7ff1ec 100644 --- a/src/gui/folderwizard.cpp +++ b/src/gui/folderwizard.cpp @@ -122,6 +122,13 @@ bool FolderWizardLocalPath::isComplete() const const auto errorStr = FolderMan::instance()->checkPathValidityForNewFolder( QDir::fromNativeSeparators(_ui.localFolderLineEdit->text()), serverUrl).second; + SyncDirValidator syncDirValidator(QDir::fromNativeSeparators(_ui.localFolderLineEdit->text())); + if (!syncDirValidator.isValidDir()) { + _ui.sesSnackBar->show(); + _ui.sesSnackBar->setError(syncDirValidator.message()); + return false; + } + if(errorStr.isEmpty()) { _ui.sesSnackBar->hide(); From fa7ed86ea7e49802be4799d6e5a9ddd735949770 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Christopher=20H=C3=A4tty?= Date: Thu, 23 Jan 2025 13:08:49 +0100 Subject: [PATCH 040/371] adjusted .vscode files to VM Directory --- .vscode/launch.json | 8 +++++--- .vscode/settings.json | 2 +- 2 files changed, 6 insertions(+), 4 deletions(-) diff --git a/.vscode/launch.json b/.vscode/launch.json index 3fe60132e26b1..11fb844ce03a0 100644 --- a/.vscode/launch.json +++ b/.vscode/launch.json @@ -16,8 +16,10 @@ "environment": [ { "name": "PATH", - "value": "C:/Craft64/bin;%PATH%" + "value": "C:/CraftRoot/bin;%PATH%" }, + { "name": "QML_IMPORT_TRACE", "value": "1" }, + { "name": "QT_LOGGING_RULES", "value": "qt.qml.debug=true" } ], }, { @@ -31,7 +33,7 @@ "environment": [ { "name": "PATH", - "value": "C:/Craft64/bin;%PATH%" + "value": "C:/CraftRoot/bin;%PATH%" }, ], }, @@ -46,7 +48,7 @@ "environment": [ { "name": "PATH", - "value": "C:/Craft64/bin;%PATH%" + "value": "C:/CraftRoot/bin;%PATH%" }, ], }, diff --git a/.vscode/settings.json b/.vscode/settings.json index 0d75aa43d4575..04b01132611b9 100644 --- a/.vscode/settings.json +++ b/.vscode/settings.json @@ -1,7 +1,7 @@ { "cmake.generator": "Ninja", "cmake.configureSettings": { - "CMAKE_PREFIX_PATH": "C:/Craft64", + "CMAKE_PREFIX_PATH": "C:/CraftRoot", "BUILD_TESTING":"OFF", }, "cmake.buildDirectory": "${workspaceFolder}/build/${buildKitTargetOs}-${buildKitVendor}-${buildKitTargetArch}/${buildType}", From 944b0ef68ab10a4f8a0a9a2af83795d87248bb24 Mon Sep 17 00:00:00 2001 From: Kevin Beraz Date: Thu, 12 Dec 2024 13:20:59 +0100 Subject: [PATCH 041/371] move build directory out of respository so we do not scan this directory while generating translation files --- .vscode/launch.json | 6 +++--- .vscode/settings.json | 2 +- .vscode/tasks.json | 4 ++-- 3 files changed, 6 insertions(+), 6 deletions(-) diff --git a/.vscode/launch.json b/.vscode/launch.json index 11fb844ce03a0..92c2c2e0b629a 100644 --- a/.vscode/launch.json +++ b/.vscode/launch.json @@ -9,7 +9,7 @@ "name": "(RelWithDebInfo) Launch HiDriveNext", "type": "cppvsdbg", "request": "launch", - "program": "${workspaceFolder}/build/win32-MSVC-x64/RelWithDebInfo/bin/HiDriveNext.exe", + "program": "${workspaceFolder}/../build/win32-MSVC-x64/RelWithDebInfo/bin/HiDriveNext.exe", "args": [], "stopAtEntry": false, "cwd": "${workspaceFolder}", @@ -26,7 +26,7 @@ "name": "(RelWithDebInfo) Launch NextCloud", "type": "cppvsdbg", "request": "launch", - "program": "${workspaceFolder}/build/win32-MSVC-x64/RelWithDebInfo/bin/nextcloud.exe", + "program": "${workspaceFolder}/../build/win32-MSVC-x64/RelWithDebInfo/bin/nextcloud.exe", "args": [], "stopAtEntry": false, "cwd": "${workspaceFolder}", @@ -41,7 +41,7 @@ "name": "(Release) Launch NextCloud", "type": "cppvsdbg", "request": "launch", - "program": "${workspaceFolder}/build/win32-MSVC-x64/Release/bin/nextcloud.exe", + "program": "${workspaceFolder}/../build/win32-MSVC-x64/Release/bin/nextcloud.exe", "args": [], "stopAtEntry": false, "cwd": "${workspaceFolder}", diff --git a/.vscode/settings.json b/.vscode/settings.json index 04b01132611b9..dde3108064331 100644 --- a/.vscode/settings.json +++ b/.vscode/settings.json @@ -4,5 +4,5 @@ "CMAKE_PREFIX_PATH": "C:/CraftRoot", "BUILD_TESTING":"OFF", }, - "cmake.buildDirectory": "${workspaceFolder}/build/${buildKitTargetOs}-${buildKitVendor}-${buildKitTargetArch}/${buildType}", + "cmake.buildDirectory": "${workspaceFolder}/../build/${buildKitTargetOs}-${buildKitVendor}-${buildKitTargetArch}/${buildType}", } \ No newline at end of file diff --git a/.vscode/tasks.json b/.vscode/tasks.json index 988cc883ce738..153627d3103a2 100644 --- a/.vscode/tasks.json +++ b/.vscode/tasks.json @@ -8,7 +8,7 @@ "args": [ "-NoProfile", "-Command", - "Remove-Item -Recurse -Force .\\build\\win32-MSVC-x64\\RelWithDebInfo" + "Remove-Item -Recurse -Force ..\\build\\win32-MSVC-x64\\RelWithDebInfo" ], "problemMatcher": [], "group": { @@ -24,7 +24,7 @@ "args": [ "-NoProfile", "-Command", - "Remove-Item -Recurse -Force .\\build\\win32-MSVC-x64\\Release" + "Remove-Item -Recurse -Force ..\\build\\win32-MSVC-x64\\Release" ], "problemMatcher": [], "group": { From f8f13fa35a6f466cd91fd5cd0632c36339e05138 Mon Sep 17 00:00:00 2001 From: Boris Baltes Date: Thu, 12 Dec 2024 13:50:59 +0100 Subject: [PATCH 042/371] SES-228 cleanup - moved validation one step up --- src/gui/folderwizard.cpp | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/gui/folderwizard.cpp b/src/gui/folderwizard.cpp index 1a30eff7ff1ec..a94ab6bf4a012 100644 --- a/src/gui/folderwizard.cpp +++ b/src/gui/folderwizard.cpp @@ -119,9 +119,6 @@ bool FolderWizardLocalPath::isComplete() const QUrl serverUrl = _account->url(); serverUrl.setUserName(_account->credentials()->user()); - const auto errorStr = FolderMan::instance()->checkPathValidityForNewFolder( - QDir::fromNativeSeparators(_ui.localFolderLineEdit->text()), serverUrl).second; - SyncDirValidator syncDirValidator(QDir::fromNativeSeparators(_ui.localFolderLineEdit->text())); if (!syncDirValidator.isValidDir()) { _ui.sesSnackBar->show(); @@ -129,6 +126,9 @@ bool FolderWizardLocalPath::isComplete() const return false; } + const auto errorStr = FolderMan::instance()->checkPathValidityForNewFolder( + QDir::fromNativeSeparators(_ui.localFolderLineEdit->text()), serverUrl).second; + if(errorStr.isEmpty()) { _ui.sesSnackBar->hide(); From 06a82d202f1d53c669ab844b8635300367559a04 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Christopher=20H=C3=A4tty?= Date: Thu, 23 Jan 2025 13:19:25 +0100 Subject: [PATCH 043/371] SES-213 replace nextcloud with hidrivenext in logfile names a02c85258ed7a30e852e6c8d7ffd0247c12a73ff --- src/csync/csync_exclude.cpp | 2 +- src/gui/folder.cpp | 2 +- src/libsync/logger.cpp | 6 +++--- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/src/csync/csync_exclude.cpp b/src/csync/csync_exclude.cpp index 2c23656f2320f..247fd7c2e5ed2 100644 --- a/src/csync/csync_exclude.cpp +++ b/src/csync/csync_exclude.cpp @@ -153,7 +153,7 @@ static CSYNC_EXCLUDE_TYPE _csync_excluded_common(const QString &path, bool exclu if (bname.startsWith(QLatin1String(".owncloudsync.log"), Qt::CaseInsensitive)) { // ".owncloudsync.log*" return CSYNC_FILE_SILENTLY_EXCLUDED; } - if (bname.startsWith(QLatin1String(".nextcloudsync.log"), Qt::CaseInsensitive)) { // ".nextcloudsync.log*" + if (bname.startsWith(QLatin1String(".hidrivenextsync.log"), Qt::CaseInsensitive)) { // ".hidrivenextsync.log*" return CSYNC_FILE_SILENTLY_EXCLUDED; } } diff --git a/src/gui/folder.cpp b/src/gui/folder.cpp index 24585c1e60f13..3695b51f0f5d1 100644 --- a/src/gui/folder.cpp +++ b/src/gui/folder.cpp @@ -1694,7 +1694,7 @@ void Folder::registerFolderWatcher() } connect(_folderWatcher.data(), &FolderWatcher::filesLockImposed, this, &Folder::slotFilesLockImposed, Qt::UniqueConnection); _folderWatcher->init(path()); - _folderWatcher->startNotificatonTest(path() + QLatin1String(".nextcloudsync.log")); + _folderWatcher->startNotificatonTest(path() + QLatin1String(".hidrivenextsync.log")); connect(_engine.data(), &SyncEngine::lockFileDetected, _folderWatcher.data(), &FolderWatcher::slotLockFileDetectedExternally); } diff --git a/src/libsync/logger.cpp b/src/libsync/logger.cpp index 760487dcc82b5..96704782a7be2 100644 --- a/src/libsync/logger.cpp +++ b/src/libsync/logger.cpp @@ -137,7 +137,7 @@ void Logger::doLog(QtMsgType type, const QMessageLogContext &ctx, const QString _logstream->flush(); } closeNoLock(); - enterNextLogFileNoLock(QStringLiteral("nextcloud.log"), LogType::Log); + enterNextLogFileNoLock(QStringLiteral("hidrivenext.log"), LogType::Log); } ++linesCounter; @@ -223,7 +223,7 @@ void Logger::setLogFlush(bool flush) void Logger::setLogDebug(bool debug) { - const QSet rules = {debug ? QStringLiteral("nextcloud.*.debug=true") : QString()}; + const QSet rules = {debug ? QStringLiteral("hidrivenext.*.debug=true") : QString()}; if (debug) { addLogRule(rules); } else { @@ -253,7 +253,7 @@ void Logger::disableTemporaryFolderLogDir() if (!_temporaryFolderLogDir) return; - enterNextLogFile("nextcloud.log", LogType::Log); + enterNextLogFile("hidrivenext.log", LogType::Log); setLogDir(QString()); setLogDebug(false); setLogFile(QString()); From 3f6a9d529084a778be0721111f5418e0fa0c7982 Mon Sep 17 00:00:00 2001 From: Kevin Beraz Date: Fri, 13 Dec 2024 16:16:10 +0100 Subject: [PATCH 044/371] SES-212 style buttons in conflict dialog according to Tray Menu Style --- src/gui/ResolveConflictsDialog.qml | 32 ++++++++++++++++++++++++++---- 1 file changed, 28 insertions(+), 4 deletions(-) diff --git a/src/gui/ResolveConflictsDialog.qml b/src/gui/ResolveConflictsDialog.qml index c091a346973d5..90889d0bfe5b2 100644 --- a/src/gui/ResolveConflictsDialog.qml +++ b/src/gui/ResolveConflictsDialog.qml @@ -147,15 +147,39 @@ ApplicationWindow { } DialogButtonBox { + id: buttonBox Layout.fillWidth: true - Button { + readonly property int pixelSize: Style.sesFontPixelSize + readonly property int fontWeight: Style.sesFontNormalWeight + + SesCustomButton { + font.pixelSize: pixelSize + font.weight: fontWeight text: qsTr("Resolve conflicts") - DialogButtonBox.buttonRole: DialogButtonBox.AcceptRole + textColor: palette.brightText + + bgColor: Style.sesActionPressed + bgNormalOpacity: 1.0 + bgHoverOpacity: Style.hoverOpacity + + onClicked: buttonBox.onRejected() } - Button { + + SesCustomButton { + font.pixelSize: pixelSize + font.weight: fontWeight text: qsTr("Cancel") - DialogButtonBox.buttonRole: DialogButtonBox.RejectRole + textColor: Style.sesActionPressed + + bgColor: palette.highlight + bgNormalOpacity: 1.0 + + bgBorderWidth: 2 + bgBorderColor: Style.sesActionPressed + bgHoverOpacity: Style.hoverOpacity + + onClicked: buttonBox.onRejected() } onAccepted: function() { From f7701b88ab83c8db9dd0fdb1d94a483b368d6da8 Mon Sep 17 00:00:00 2001 From: Boris Baltes Date: Mon, 16 Dec 2024 14:44:47 +0100 Subject: [PATCH 045/371] SES-225 prevent error message if folderpicker was canceled --- src/gui/folderwizard.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/gui/folderwizard.cpp b/src/gui/folderwizard.cpp index a94ab6bf4a012..ebccfdbf32846 100644 --- a/src/gui/folderwizard.cpp +++ b/src/gui/folderwizard.cpp @@ -161,7 +161,7 @@ void FolderWizardLocalPath::slotChooseLocalFolder() sf); SyncDirValidator syncDirValidator(dir); - if (!syncDirValidator.isValidDir()) { + if (!syncDirValidator.isValidDir() && !dir.isEmpty()) { _ui.sesSnackBar->show(); _ui.sesSnackBar->setError(syncDirValidator.message()); return; From 1653b2127e8d1279c485f3909575d5ee705fa92f Mon Sep 17 00:00:00 2001 From: Boris Baltes Date: Tue, 17 Dec 2024 09:42:42 +0100 Subject: [PATCH 046/371] SES-227 do not show context menu on text input fields --- src/gui/foldercreationdialog.ui | 3 +++ src/gui/folderwizardsourcepage.ui | 6 +++++- src/gui/folderwizardtargetpage.ui | 3 +++ src/gui/invalidfilenamedialog.ui | 3 +++ 4 files changed, 14 insertions(+), 1 deletion(-) diff --git a/src/gui/foldercreationdialog.ui b/src/gui/foldercreationdialog.ui index 314ef6cffab97..de849b09215cd 100644 --- a/src/gui/foldercreationdialog.ui +++ b/src/gui/foldercreationdialog.ui @@ -11,6 +11,9 @@ Enter folder name + + Qt::NoContextMenu + diff --git a/src/gui/folderwizardsourcepage.ui b/src/gui/folderwizardsourcepage.ui index 4175c0c13519a..81762d63d6a43 100644 --- a/src/gui/folderwizardsourcepage.ui +++ b/src/gui/folderwizardsourcepage.ui @@ -112,7 +112,11 @@ - + + + Qt::NoContextMenu + + diff --git a/src/gui/folderwizardtargetpage.ui b/src/gui/folderwizardtargetpage.ui index 937956c683747..1d93d3c65d58d 100644 --- a/src/gui/folderwizardtargetpage.ui +++ b/src/gui/folderwizardtargetpage.ui @@ -146,6 +146,9 @@ 0 + + Qt::NoContextMenu + diff --git a/src/gui/invalidfilenamedialog.ui b/src/gui/invalidfilenamedialog.ui index 91ff3f7386bc5..6815f301c9ed8 100644 --- a/src/gui/invalidfilenamedialog.ui +++ b/src/gui/invalidfilenamedialog.ui @@ -70,6 +70,9 @@ New filename + + Qt::NoContextMenu + From 83e7978d8d9b1e9c7b0905697690bbfb3e3ef099 Mon Sep 17 00:00:00 2001 From: Boris Baltes Date: Wed, 18 Dec 2024 08:27:30 +0100 Subject: [PATCH 047/371] SES-223 do not turn path seperator into slashes for communication reason --- src/gui/SesComponents/syncdirvalidation.cpp | 2 +- src/gui/folderwizard.cpp | 6 ++++-- 2 files changed, 5 insertions(+), 3 deletions(-) diff --git a/src/gui/SesComponents/syncdirvalidation.cpp b/src/gui/SesComponents/syncdirvalidation.cpp index ca95f334d088e..eddb9f3932c8e 100644 --- a/src/gui/SesComponents/syncdirvalidation.cpp +++ b/src/gui/SesComponents/syncdirvalidation.cpp @@ -6,7 +6,7 @@ #ifdef Q_OS_WIN bool SyncDirValidator::isValidDir() { QString appDataPath = SyncDirValidator::appDataPath(); - return !_path.startsWith(appDataPath) && !appDataPath.startsWith(_path); + return !QDir::fromNativeSeparators(_path).startsWith(appDataPath) && !appDataPath.startsWith(QDir::fromNativeSeparators(_path)); } diff --git a/src/gui/folderwizard.cpp b/src/gui/folderwizard.cpp index ebccfdbf32846..6d200dc342a74 100644 --- a/src/gui/folderwizard.cpp +++ b/src/gui/folderwizard.cpp @@ -119,7 +119,8 @@ bool FolderWizardLocalPath::isComplete() const QUrl serverUrl = _account->url(); serverUrl.setUserName(_account->credentials()->user()); - SyncDirValidator syncDirValidator(QDir::fromNativeSeparators(_ui.localFolderLineEdit->text())); + + SyncDirValidator syncDirValidator(_ui.localFolderLineEdit->text()); if (!syncDirValidator.isValidDir()) { _ui.sesSnackBar->show(); _ui.sesSnackBar->setError(syncDirValidator.message()); @@ -160,7 +161,8 @@ void FolderWizardLocalPath::slotChooseLocalFolder() tr("Select the source folder"), sf); - SyncDirValidator syncDirValidator(dir); + SyncDirValidator syncDirValidator(QDir::fromNativeSeparators("\\ //")); + // SyncDirValidator syncDirValidator(QDir::fromNativeSeparators(_ui.localFolderLineEdit->text())); if (!syncDirValidator.isValidDir() && !dir.isEmpty()) { _ui.sesSnackBar->show(); _ui.sesSnackBar->setError(syncDirValidator.message()); From 21390a938403d054d5b38b7ca76b6189a308f885 Mon Sep 17 00:00:00 2001 From: Boris Baltes Date: Wed, 18 Dec 2024 09:59:59 +0100 Subject: [PATCH 048/371] SES-223 reworked path validation --- src/gui/SesComponents/syncdirvalidation.cpp | 18 +++++++++++++++--- src/gui/folderwizard.cpp | 3 +-- 2 files changed, 16 insertions(+), 5 deletions(-) diff --git a/src/gui/SesComponents/syncdirvalidation.cpp b/src/gui/SesComponents/syncdirvalidation.cpp index eddb9f3932c8e..df358e2f54ffe 100644 --- a/src/gui/SesComponents/syncdirvalidation.cpp +++ b/src/gui/SesComponents/syncdirvalidation.cpp @@ -5,13 +5,25 @@ #ifdef Q_OS_WIN bool SyncDirValidator::isValidDir() { - QString appDataPath = SyncDirValidator::appDataPath(); - return !QDir::fromNativeSeparators(_path).startsWith(appDataPath) && !appDataPath.startsWith(QDir::fromNativeSeparators(_path)); + QString appDataPath = SyncDirValidator::appDataPath().replace("/", QDir::separator()); + QStringList pathComponents = _path.replace("/", QDir::separator()).split(QDir::separator(), QString::SkipEmptyParts); + QStringList appDataPathComponents = appDataPath.split(QDir::separator(), QString::SkipEmptyParts); + /* + If path is shorter than appDataPath and one path component is different, then path cannot be a real subset and is sowith valid + If appDataPath is shorter than path, we need to check, if the last appDataPath component is different from the related path component, then path is valid. + Otherwise path is a subpath from appDataPath and invalid + */ + for(int i = 0; i < qMin(pathComponents.size(), appDataPathComponents.size()); i++) { + if(pathComponents[i] != appDataPathComponents[i]) { + return true; + } + } + return false; } QString SyncDirValidator::message() { - return QObject::tr("The directory %1 cannot be part of your sync directory. Please choose another folder.").arg(_path); + return QObject::tr("The directory %1 cannot be part of your sync directory. Please choose another folder.").arg(_path.replace("/", QDir::separator())); } QString SyncDirValidator::appDataPath() { diff --git a/src/gui/folderwizard.cpp b/src/gui/folderwizard.cpp index 6d200dc342a74..46f2a4d6b05be 100644 --- a/src/gui/folderwizard.cpp +++ b/src/gui/folderwizard.cpp @@ -161,8 +161,7 @@ void FolderWizardLocalPath::slotChooseLocalFolder() tr("Select the source folder"), sf); - SyncDirValidator syncDirValidator(QDir::fromNativeSeparators("\\ //")); - // SyncDirValidator syncDirValidator(QDir::fromNativeSeparators(_ui.localFolderLineEdit->text())); + SyncDirValidator syncDirValidator(_ui.localFolderLineEdit->text()); if (!syncDirValidator.isValidDir() && !dir.isEmpty()) { _ui.sesSnackBar->show(); _ui.sesSnackBar->setError(syncDirValidator.message()); From 8b507a93a211771dfda9559051bd97fd778e86da Mon Sep 17 00:00:00 2001 From: Kevin Beraz Date: Wed, 18 Dec 2024 14:41:13 +0100 Subject: [PATCH 049/371] SES-218 style toolbar overflow menu --- src/gui/settingsdialog.cpp | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/gui/settingsdialog.cpp b/src/gui/settingsdialog.cpp index 67ef6e137c437..dcba20c2d1dea 100644 --- a/src/gui/settingsdialog.cpp +++ b/src/gui/settingsdialog.cpp @@ -53,6 +53,10 @@ const QString TOOLBAR_CSS() "QToolBar QToolButton:pressed { background: %6; color: %4; }" "QToolBar::separator { height: 100%; width: 1px; background: %2; margin-left: 12px; } " // Style for the separator "QToolBarExtension#qt_toolbar_ext_button {margin: 0 0 7px 0; padding: 0;}" // Style overflow button + "QMenu { background: %1; color: %4; }" // Style overflow menu + "QMenu::item::checked { background: %7; color: %4; }" + "QMenu::item::selected { background: %3; color: %4; }" + "QMenu::item::pressed { background: %6; color: %4; }" ); } From 775ea843cad82f01e44f5bed1a967084d414dc2d Mon Sep 17 00:00:00 2001 From: Kevin Beraz Date: Wed, 18 Dec 2024 14:42:42 +0100 Subject: [PATCH 050/371] SES-218 set font color for checkbox labels to black --- src/gui/conflictdialog.cpp | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/src/gui/conflictdialog.cpp b/src/gui/conflictdialog.cpp index 75c8c7d2304b3..58170cf8b84f9 100644 --- a/src/gui/conflictdialog.cpp +++ b/src/gui/conflictdialog.cpp @@ -205,6 +205,14 @@ void ConflictDialog::customizeStyle() #ifdef Q_OS_MAC _ui->buttonBox->layout()->setSpacing(24); _ui->buttonBox->setLayoutDirection(Qt::LeftToRight); + + _ui->localVersionRadio->setStyleSheet( + QStringLiteral("QCheckBox {color: %1;}").arg(IonosTheme::black()) + ); + + _ui->remoteVersionRadio->setStyleSheet( + QStringLiteral("QCheckBox {color: %1;}").arg(IonosTheme::black()) + ); #endif } From b77f0d2ab796d1e438ae2d576ae678e946c5e3a2 Mon Sep 17 00:00:00 2001 From: Kevin Beraz Date: Wed, 18 Dec 2024 14:43:47 +0100 Subject: [PATCH 051/371] SES-218 prevent highlighting of ExpandMemoryButton --- src/gui/accountsettings.cpp | 1 + 1 file changed, 1 insertion(+) diff --git a/src/gui/accountsettings.cpp b/src/gui/accountsettings.cpp index 78961d1a681aa..290342672ccbb 100644 --- a/src/gui/accountsettings.cpp +++ b/src/gui/accountsettings.cpp @@ -239,6 +239,7 @@ AccountSettings::AccountSettings(AccountState *accountState, QWidget *parent) #ifdef Q_OS_MAC _ui->expandMemoryButton->setAutoDefault(false); + _ui->expandMemoryButton->setFocusPolicy(Qt::NoFocus); #endif connect(this, &AccountSettings::removeAccountFolders, From 31f0c15d30c69f0413d4f0685e7ff136f1411cdb Mon Sep 17 00:00:00 2001 From: Emil Bohleber Date: Fri, 20 Dec 2024 11:16:07 +0100 Subject: [PATCH 052/371] SES-215 replace installer background for mac with empty image --- admin/osx/installer-background.png | Bin 4028 -> 794 bytes admin/osx/installer-background.svg | 35 +++++++++++++++++++++++++- admin/osx/installer-background_2x.png | Bin 7190 -> 1994 bytes 3 files changed, 34 insertions(+), 1 deletion(-) diff --git a/admin/osx/installer-background.png b/admin/osx/installer-background.png index ca273880b37aa34ff8fca33a53677cc779b6fa37..7833f187dcaa842b2795d45b0affbdec7cb19b6a 100644 GIT binary patch literal 794 zcmeAS@N?(olHy`uVBq!ia0y~yU~~YoPjIjS$(bw`tAP|}fk$L90|Vb-5N14{zaj-F zC|TkfQ4*Y=R#Ki=l*&+EUaps!mtCBkSdglhUz9%kosAR&1JiO(7srr_Id88RGBPOe z956Vr|G8qayD;nCs`O_JB75I5H0ZK%q(~}ENNsSK#>f;o${7s<`lo}hj8?2Hy-9+K R4Zw8G;OXk;vd$@?2>`qv&*cCB literal 4028 zcmeH}={pn*7skgjmKlTW5o2G*R+h*lV;LFC7)D|uL@}}qAt46wAj^=Egk~(0-IVOx zAo3L1Gu9M6mSib~Y;Vt(_n&y*`#RUTe&;&h?)!W=$r$uy2uK_R001B;3p0BFfCce~ z`?=Wu^qT4ZCjbEJZ;Z7A^3QnkfBoNq|2+o`9v$p~R= zVrqsoziffBw6eBA+hXkOu?|-puR1y7uDQ5gcXRi+;puhrmbVYy_qLyZKp-I~_)bV@ z*xm4Z5s^{%qhpA%aq$ll5|ffs9;T+HXOJ?p9%Ykr9_K#EdzxQR_>4j=DlRFdJufS- zsI024sinVoS@){Gp|PpCrM0cSqm$9q-SfJ)?@j;TZ{H0Jz8@MM866v+_%O+wnx2`R zoBz1*>GR^!mw%R5R@c6+f7{sH+W!7y=jX58z5U+@heyZ7MEN`b033ocGj<4PS?`Md z;|hRCIVu+|XZ;udE8-N@8*!ls0HW;9OwTbJ{AbXjGp>F!f8b9=={4v^X+N(`ABgLo z2NAyo?kQ@Hl`WTq9=!j!e7O<*&E;Z+YjxYXS@#3-io(nw{AZleuFr0+`BeNCTZ4S4 zQsFZ6UPt>~JZFbHSWS0F?d0tbo9fY~PwLk&y{Gy1HPO5MUeFfr)4|V9HvE>G=r5D1 zhqjH9$)$!Kc6h~$RDt)p-~?c4F03rOwLp@dn~epMLuzf=oh%ZO4zqJ;w3AuMi#Xq= zsbMyeg{dvxiI>`PC6E0zugLc$#*cSr2s%urRgjzt!44nQMCHFs`~$2fG)tFc6O?pi zfA1kKO>AP}a6yDtAzN8_Yk~}!E)%F&&w&^Z50DC7V-X#vr z#kSqnNel|ubCb&SRI)8l^0~1`$H*;Z?_I`b*)2Z`)u8d^5tser&5{m?3Z5~$#s1vTA^KUs}H)z1$|ks9P=K9 zX?wpQZ%)Kr-6)Q1RgC)Wbzt9wFiDfRzGJ8Cc2wq^Z$KJp>=5h3W{rw)l`m6qmxKW^&4{FrvpZ`?>9| zZ%3r2rR{s?U{;lU+$TrZR=SIByN^x;RZQ>Ov-D4#Ia5?&16-*37SW7);}oJ`3DPqb%)=zVXFp9oEanj}@9%Nl=AFBUln;37Kt>q7N8Atn@H34IQ{tRW0sQd`CLD~DIz00F1j-S-siJhU<=pS3^14x6+>Ai_OpJ^d$y|9uG6+F4lGO? z$s!0lGlbu)tV=jyw)hK>Wr_{{eT*Tay|T%>?=tM{+>8-a0+P8UD&DYMDe;JaF7Q@- zP%iEC-iaYYmtAFtq}aA-5qT`zUd9K{r2_p};lD@o@sLdNYb9QcZ{-k%F-R}bwVApr z@e=zAS~@Kb+S5?mRv1gYaFZ1OGy`*s_=LFqmR<@^6U$nlYZO{%3ht+|=d<1ReT`=v z5bVRWkpX%FTR>)A`tOKt=LA<=46wXJYJERtT5(TiSencllgky(;EW8QX{>hlEM}K^ zNiPi1%Y3r)3`~8_0Hx0JZ=Gho%8H2AffLUJNV~f-cYyT|U?%IP1~Wy_v-w<43n@8W zBvqMka32WIc?fZ=FU^Ud>3z|eiEn^!)16-*j{nYyJyp5j;d2MzE zQ-7AQ^@wL1?LZ`abtx%~VdXIi581>kPa~96rdhy@n&p-GBh0H@bkWHj7B@;HA7aGb zAlZjgjk|TeG;#%Z2@Z?-xF$jgJ5{FFz<+lN>=+3HpDdjrKL6h zGQ3~zA9S7TRR+eL&6+)m?bjjtzT6SPVN+S5LrZ{gx(aV5$icZlc^}|guw9ymqkqAQ zpVKf39$(`^@+#(WGud+X?vAC}{LGAh9+$ljy2Tpsqbpq%|F-kXTm|2@AQS~RQz80=ERztCnn&;smQF;kbTwCwDDaS*@!BQGt1cjyRXw)W zr}sID-MW%}A=+{l95_g0Xh1Pun(E9e7D8JmEEIPT@RuvA=G^6EO~8T&jsTZui5dFq zWUo-b@Due$q{;{g5CvXsE+?_4HZWpBi_8uc!~67NK|cm@~YjpuE6`^K_Sw zUwyBIKP!H7ohZMMcQNIu_+$BQiNT(1{p^iTm^%Bd)iaQ9U4a)4V>$0gjYKNBnm5#|Xw!%h49GIp#_(kKo~r^M_D zpwiESBouW@$L|J9lcS+^dAO*NwQ{G+oeZZAZXI7AR-K*V+0?AzyK^!ry=&kO){y(_ z@#&vART>-RbQGcmp1VN37OTY|$!+X5d|2aGk+LBUuGYZFN2G$Uw!=vU)zo)-8L;zr z<8JS_l-Tvo^z9UV|s}=No$) z-z!U1o?7*4%{;e+ENDe?t`CiE#)5)i5uE7nyIiC7JsAfBw&%Z~qwPh4CA~3Iqh|V* z7swm0IfYN^HV2Z_BP#giVI4=D6OxsznT~hLHO_Abi+y=!tcQkl(g4AZpPGAvT7o1> zYFy29Gd=3vajQomO0Ou9e?|4I?5UXe5KL1{&sCx+>i^aZb~CS3EHC;)Shf zg7=|k?rpO`qAD_Qv-SLdTB&tRD;`h?qvtpG{vc@DF1|53xVOEbJfy$ByWi6?>#Pmf zBv1Fve!3$@>h$TYxKb%H2!6PB=4QZI8RG1!+Y6qDzggY2#Q*)VQAo5|jfs2Qe*oV@ B2BiQ1 diff --git a/admin/osx/installer-background.svg b/admin/osx/installer-background.svg index 73af25b6d05d6..6a25f5f66f099 100644 --- a/admin/osx/installer-background.svg +++ b/admin/osx/installer-background.svg @@ -1,2 +1,35 @@ - + diff --git a/admin/osx/installer-background_2x.png b/admin/osx/installer-background_2x.png index 0117c4974989a1e4286f0490ce98e18e0f2d33b9..210f1b91845e5b56f5e2efc6533c8d4854f0e943 100644 GIT binary patch literal 1994 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 From f62a2c844f90c9b3a8cf8d2afa74d49d223ba979 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Christopher=20H=C3=A4tty?= Date: Thu, 23 Jan 2025 14:39:21 +0100 Subject: [PATCH 053/371] SES-223 Merge Fix for 2bb2ae68aee451b9cff27e6dd8fc8fa50cb1890f --- src/gui/SesComponents/syncdirvalidation.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/gui/SesComponents/syncdirvalidation.cpp b/src/gui/SesComponents/syncdirvalidation.cpp index df358e2f54ffe..3357866fb897f 100644 --- a/src/gui/SesComponents/syncdirvalidation.cpp +++ b/src/gui/SesComponents/syncdirvalidation.cpp @@ -6,8 +6,8 @@ #ifdef Q_OS_WIN bool SyncDirValidator::isValidDir() { QString appDataPath = SyncDirValidator::appDataPath().replace("/", QDir::separator()); - QStringList pathComponents = _path.replace("/", QDir::separator()).split(QDir::separator(), QString::SkipEmptyParts); - QStringList appDataPathComponents = appDataPath.split(QDir::separator(), QString::SkipEmptyParts); + QStringList pathComponents = _path.replace("/", QDir::separator()).split(QDir::separator(), Qt::SkipEmptyParts); + QStringList appDataPathComponents = appDataPath.split(QDir::separator(), Qt::SkipEmptyParts); /* If path is shorter than appDataPath and one path component is different, then path cannot be a real subset and is sowith valid If appDataPath is shorter than path, we need to check, if the last appDataPath component is different from the related path component, then path is valid. From d12b0b9c931b753c8e539df84a01cc2ec9ea5810 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Christopher=20H=C3=A4tty?= Date: Thu, 23 Jan 2025 14:48:18 +0100 Subject: [PATCH 054/371] SES-216 adjust color of CustomButtons 84224beb83a34266749ffa625ef06fdc5959d5d1 --- src/gui/tray/ActivityItemActions.qml | 3 +-- src/gui/tray/SyncStatus.qml | 7 ++++--- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/src/gui/tray/ActivityItemActions.qml b/src/gui/tray/ActivityItemActions.qml index ad255cfb705ee..2aeaf4e857e68 100644 --- a/src/gui/tray/ActivityItemActions.qml +++ b/src/gui/tray/ActivityItemActions.qml @@ -13,7 +13,7 @@ Repeater { property variant linksContextMenu: [] property bool displayActions: false - property color moreActionsButtonColor: palette.base + property color moreActionsButtonColor: "transparent" property int maxActionButtons: 0 @@ -34,7 +34,6 @@ Repeater { Layout.alignment: Qt.AlignTop | Qt.AlignRight - hoverEnabled: true padding: Style.smallSpacing display: Button.TextOnly diff --git a/src/gui/tray/SyncStatus.qml b/src/gui/tray/SyncStatus.qml index e66ffc593e239..c67001be79c46 100644 --- a/src/gui/tray/SyncStatus.qml +++ b/src/gui/tray/SyncStatus.qml @@ -10,7 +10,6 @@ RowLayout { id: root property alias model: syncStatus - property color accentColor: Style.ncBlue spacing: Style.trayHorizontalMargin @@ -63,7 +62,6 @@ RowLayout { sourceComponent: NCProgressBar { id: syncProgressBar value: syncStatus.syncProgress - fillColor: root.accentColor } } @@ -80,7 +78,7 @@ RowLayout { } } - Button { + SesCustomButton { id: syncNowButton Layout.rightMargin: Style.trayHorizontalMargin @@ -88,6 +86,9 @@ RowLayout { text: qsTr("Sync now") padding: Style.smallSpacing + textColor: Style.adjustedCurrentUserHeaderColor + textColorHovered: Style.currentUserHeaderTextColor + bgColor: Style.currentUserHeaderColor visible: false // SES-4 removed enabled: visible From cfc0570bdcae2e86c0a5d8666884da85388d3b3f Mon Sep 17 00:00:00 2001 From: Kevin Beraz Date: Tue, 7 Jan 2025 15:25:50 +0100 Subject: [PATCH 055/371] SES-256 replace nextcloud offline state icon --- theme/colored/state-offline.svg | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/theme/colored/state-offline.svg b/theme/colored/state-offline.svg index 60e6bd950d3fe..e768c954e7e46 100644 --- a/theme/colored/state-offline.svg +++ b/theme/colored/state-offline.svg @@ -1 +1,4 @@ - + + + + From 128a53ea544594785c94a3d201482200e3297f39 Mon Sep 17 00:00:00 2001 From: Kevin Beraz Date: Thu, 9 Jan 2025 15:44:47 +0100 Subject: [PATCH 056/371] SES-256 replace app icon --- theme/black/hidrivenext-icon.svg | 6 +++--- theme/black/state-offline.svg | 5 ++++- theme/colored/hidrivenext-icon.svg | 6 +++--- theme/white/hidrivenext-icon.svg | 6 +++--- theme/white/state-offline.svg | 5 ++++- 5 files changed, 17 insertions(+), 11 deletions(-) diff --git a/theme/black/hidrivenext-icon.svg b/theme/black/hidrivenext-icon.svg index 8da01eec16cf2..e768c954e7e46 100644 --- a/theme/black/hidrivenext-icon.svg +++ b/theme/black/hidrivenext-icon.svg @@ -1,4 +1,4 @@ - - - + + + diff --git a/theme/black/state-offline.svg b/theme/black/state-offline.svg index a1336e59f4604..e768c954e7e46 100644 --- a/theme/black/state-offline.svg +++ b/theme/black/state-offline.svg @@ -1 +1,4 @@ - + + + + diff --git a/theme/colored/hidrivenext-icon.svg b/theme/colored/hidrivenext-icon.svg index 8da01eec16cf2..e768c954e7e46 100644 --- a/theme/colored/hidrivenext-icon.svg +++ b/theme/colored/hidrivenext-icon.svg @@ -1,4 +1,4 @@ - - - + + + diff --git a/theme/white/hidrivenext-icon.svg b/theme/white/hidrivenext-icon.svg index 8da01eec16cf2..e768c954e7e46 100644 --- a/theme/white/hidrivenext-icon.svg +++ b/theme/white/hidrivenext-icon.svg @@ -1,4 +1,4 @@ - - - + + + diff --git a/theme/white/state-offline.svg b/theme/white/state-offline.svg index 2462f939a3cf6..e768c954e7e46 100644 --- a/theme/white/state-offline.svg +++ b/theme/white/state-offline.svg @@ -1 +1,4 @@ - + + + + From 40eef644f82619c0925d1a8c6b03b7f79e886666 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Christopher=20H=C3=A4tty?= Date: Thu, 23 Jan 2025 14:50:09 +0100 Subject: [PATCH 057/371] SES-214 replace help URL 350180865ee86f5255ac9c19512e4ecca9b6d231 --- src/libsync/theme.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/libsync/theme.cpp b/src/libsync/theme.cpp index 8b087dcaaee8b..2d67f65f36158 100644 --- a/src/libsync/theme.cpp +++ b/src/libsync/theme.cpp @@ -470,7 +470,7 @@ QString Theme::helpUrl() const #ifdef APPLICATION_HELP_URL return QString::fromLatin1(APPLICATION_HELP_URL); #else - return QString::fromLatin1("https://docs.nextcloud.com/server/latest/user_manual/en/desktop/index.html"); + return QString::fromLatin1("https://wl.hidrive.com/%1").arg(tr("easy/0118", "Redirect URL Parameter")); #endif } From 0d404dc2cc54bcbcbf7f043800b21e6b223ef01d Mon Sep 17 00:00:00 2001 From: Kevin Beraz Date: Fri, 10 Jan 2025 15:54:35 +0100 Subject: [PATCH 058/371] SES-256 change offline icon back to standord nextcloud icon --- theme/black/state-offline.svg | 5 +---- theme/colored/state-offline.svg | 5 +---- theme/white/state-offline.svg | 5 +---- 3 files changed, 3 insertions(+), 12 deletions(-) diff --git a/theme/black/state-offline.svg b/theme/black/state-offline.svg index e768c954e7e46..a1336e59f4604 100644 --- a/theme/black/state-offline.svg +++ b/theme/black/state-offline.svg @@ -1,4 +1 @@ - - - - + diff --git a/theme/colored/state-offline.svg b/theme/colored/state-offline.svg index e768c954e7e46..60e6bd950d3fe 100644 --- a/theme/colored/state-offline.svg +++ b/theme/colored/state-offline.svg @@ -1,4 +1 @@ - - - - + diff --git a/theme/white/state-offline.svg b/theme/white/state-offline.svg index e768c954e7e46..2462f939a3cf6 100644 --- a/theme/white/state-offline.svg +++ b/theme/white/state-offline.svg @@ -1,4 +1 @@ - - - - + From 13e2aa8f80c9115b6308ff0d2f4e508aec1512cf Mon Sep 17 00:00:00 2001 From: Kevin Beraz Date: Wed, 15 Jan 2025 09:54:48 +0100 Subject: [PATCH 059/371] SES-257 add macOS specific app icon --- theme/black/hidrivenext-macOS-icon.svg | 9 + theme/colored/Nextcloud-macOS-icon.svg | 287 ----------------------- theme/colored/hidrivenext-macOS-icon.svg | 9 + theme/white/hidrivenext-macOS-icon.svg | 9 + 4 files changed, 27 insertions(+), 287 deletions(-) create mode 100644 theme/black/hidrivenext-macOS-icon.svg delete mode 100644 theme/colored/Nextcloud-macOS-icon.svg create mode 100644 theme/colored/hidrivenext-macOS-icon.svg create mode 100644 theme/white/hidrivenext-macOS-icon.svg diff --git a/theme/black/hidrivenext-macOS-icon.svg b/theme/black/hidrivenext-macOS-icon.svg new file mode 100644 index 0000000000000..09456b02f9815 --- /dev/null +++ b/theme/black/hidrivenext-macOS-icon.svg @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/theme/colored/Nextcloud-macOS-icon.svg b/theme/colored/Nextcloud-macOS-icon.svg deleted file mode 100644 index 571fcdf5b2623..0000000000000 --- a/theme/colored/Nextcloud-macOS-icon.svg +++ /dev/null @@ -1,287 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/theme/colored/hidrivenext-macOS-icon.svg b/theme/colored/hidrivenext-macOS-icon.svg new file mode 100644 index 0000000000000..09456b02f9815 --- /dev/null +++ b/theme/colored/hidrivenext-macOS-icon.svg @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/theme/white/hidrivenext-macOS-icon.svg b/theme/white/hidrivenext-macOS-icon.svg new file mode 100644 index 0000000000000..09456b02f9815 --- /dev/null +++ b/theme/white/hidrivenext-macOS-icon.svg @@ -0,0 +1,9 @@ + + + + + + + + + From 16c50c5955a5f13e0c72c505be64140eba506d03 Mon Sep 17 00:00:00 2001 From: Kevin Beraz Date: Wed, 15 Jan 2025 09:55:25 +0100 Subject: [PATCH 060/371] SES-257 set correct APPLICATION_ICON_NAME for macOS --- IONOS.cmake | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/IONOS.cmake b/IONOS.cmake index 1ccf59eff473c..b0222d133a146 100644 --- a/IONOS.cmake +++ b/IONOS.cmake @@ -7,8 +7,8 @@ set( APPLICATION_VENDOR "IONOS SE" ) set( APPLICATION_UPDATE_URL "https://customerupdates.nextcloud.com/client/" CACHE STRING "URL for updater" ) set( APPLICATION_HELP_URL "" CACHE STRING "URL for the help menu" ) -if(APPLE AND APPLICATION_NAME STREQUAL "Nextcloud" AND EXISTS "${CMAKE_SOURCE_DIR}/theme/colored/Nextcloud-macOS-icon.svg") - set( APPLICATION_ICON_NAME "Nextcloud-macOS" ) +if(APPLE AND APPLICATION_NAME STREQUAL "HiDrive Next" AND EXISTS "${CMAKE_SOURCE_DIR}/theme/colored/hidrivenext-macOS-icon.svg") + set( APPLICATION_ICON_NAME "hidrivenext-macOS" ) message("Using macOS-specific application icon: ${APPLICATION_ICON_NAME}") else() set( APPLICATION_ICON_NAME "${APPLICATION_SHORTNAME}" ) From 634791e2ae152e808278c763aa5cc0aaa6ed3152 Mon Sep 17 00:00:00 2001 From: Kevin Beraz Date: Wed, 15 Jan 2025 15:35:05 +0100 Subject: [PATCH 061/371] SES-224 set default value of 'promptDeleteAllFiles' to false --- src/libsync/configfile.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/libsync/configfile.cpp b/src/libsync/configfile.cpp index c8d1964b26b06..56860002d8c25 100644 --- a/src/libsync/configfile.cpp +++ b/src/libsync/configfile.cpp @@ -1061,7 +1061,7 @@ bool ConfigFile::showMainDialogAsNormalWindow() const { bool ConfigFile::promptDeleteFiles() const { QSettings settings(configFile(), QSettings::IniFormat); - return settings.value(promptDeleteC, true).toBool(); + return settings.value(promptDeleteC, false).toBool(); } void ConfigFile::setPromptDeleteFiles(bool promptDeleteFiles) From c7587470092a01da64db99685a55443e02332290 Mon Sep 17 00:00:00 2001 From: Emil Bohleber Date: Fri, 17 Jan 2025 18:32:00 +0100 Subject: [PATCH 062/371] SES-248 replace sparkle key wich our new one --- cmake/modules/MacOSXBundleInfo.plist.in | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/cmake/modules/MacOSXBundleInfo.plist.in b/cmake/modules/MacOSXBundleInfo.plist.in index 7e996b4b7c009..7c89afae884b3 100644 --- a/cmake/modules/MacOSXBundleInfo.plist.in +++ b/cmake/modules/MacOSXBundleInfo.plist.in @@ -38,10 +38,8 @@ SUShowReleaseNotes - SUPublicDSAKeyFile - dsa_pub.pem SUPublicEDKey - c3RcfDWDayvsYSZW8FhZN1UOJhvPVN30zleb4zOqbtU= + FQ8Dq6AiSDDv4XpnyJ3b6mQBFYLPKgj9ziEg/+VNGHg= UTExportedTypeDeclarations From 624ee4c2458effdab900b85e89a8019b33d35f6c Mon Sep 17 00:00:00 2001 From: Emil Bohleber Date: Fri, 17 Jan 2025 18:33:00 +0100 Subject: [PATCH 063/371] SES-248 make start.sh executable --- admin/osx/ionos_macmaker/start.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) mode change 100644 => 100755 admin/osx/ionos_macmaker/start.sh diff --git a/admin/osx/ionos_macmaker/start.sh b/admin/osx/ionos_macmaker/start.sh old mode 100644 new mode 100755 index 0eb9d9d405852..bcda940bb6c91 --- a/admin/osx/ionos_macmaker/start.sh +++ b/admin/osx/ionos_macmaker/start.sh @@ -72,7 +72,7 @@ cmake -S $REPO_ROOT_DIR/ -B $BUILD_DIR \ -DBUILD_TESTING=OFF \ -DBUILD_UPDATER=$(if [ $BUILD_UPDATER == true ]; then echo "ON"; else echo "OFF"; fi) \ -DMIRALL_VERSION_BUILD=`date +%Y%m%d` \ - -DMIRALL_VERSION_SUFFIX=increment \ + -DMIRALL_VERSION_SUFFIX="" \ -DBUILD_OWNCLOUD_OSX_BUNDLE=ON \ -DCMAKE_OSX_ARCHITECTURES=x86_64 \ -DBUILD_FILE_PROVIDER_MODULE=ON \ From b36bfc0da839411c3d302c231f4d7baeeb4d1bc3 Mon Sep 17 00:00:00 2001 From: Emil Bohleber Date: Fri, 17 Jan 2025 20:21:16 +0100 Subject: [PATCH 064/371] SES-275 set inactive tab text to black --- src/gui/accountsettings.cpp | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/src/gui/accountsettings.cpp b/src/gui/accountsettings.cpp index 290342672ccbb..d5668c27f7cb5 100644 --- a/src/gui/accountsettings.cpp +++ b/src/gui/accountsettings.cpp @@ -211,6 +211,13 @@ AccountSettings::AccountSettings(AccountState *accountState, QWidget *parent) fpSettingsLayout->setContentsMargins(0, 0, 0, 0); fpSettingsLayout->addWidget(fpSettingsWidget); fileProviderTab->setLayout(fpSettingsLayout); + + _ui->tabWidget->tabBar()->setStyleSheet("QTabBar::tab {\ + color: #000000;\ + }\ + QTabBar::tab:selected {\ + color: #ffffff;\ + }"); } else { disguiseTabWidget(); } From 34d5d20186322dc17dc13e4a4c2bf9ef9c884e4f Mon Sep 17 00:00:00 2001 From: Kevin Beraz Date: Tue, 21 Jan 2025 11:38:22 +0100 Subject: [PATCH 065/371] SES-229 add new icons --- theme/colored/state-error.svg | 11 ++++++++++- theme/colored/state-offline.svg | 4 +++- theme/colored/state-ok.svg | 11 ++++++++++- theme/colored/state-pause.svg | 11 ++++++++++- theme/colored/state-sync.svg | 17 ++++++++++++++++- theme/colored/state-warning.svg | 11 ++++++++++- theme/ses/ses-accountDelete.svg | 3 +++ theme/ses/ses-accountLogout.svg | 10 ++++++++++ theme/ses/ses-accountPause.svg | 3 +++ theme/ses/ses-accountQuit.svg | 3 +++ theme/ses/ses-accountResume.svg | 3 +++ theme/ses/ses-activity.svg | 10 ++++++++++ theme/ses/ses-addlivebackup.svg | 10 ++++++++++ theme/ses/ses-chevron.svg | 3 +++ theme/ses/ses-clipboard.svg | 10 ++++++++++ theme/ses/ses-darkPlus.svg | 10 ++++++++++ theme/ses/ses-external.svg | 3 +++ theme/ses/ses-file.svg | 3 +++ theme/ses/ses-folderIcon.svg | 3 +++ theme/ses/ses-folderIconBright.svg | 3 +++ theme/ses/ses-info.svg | 10 ++++++++++ theme/ses/ses-link.svg | 4 ++++ theme/ses/ses-more.svg | 3 +++ theme/ses/ses-questionmark.svg | 3 +++ theme/ses/ses-refresh.svg | 10 ++++++++++ theme/ses/ses-settings.svg | 3 +++ theme/ses/ses-settingsAvatar.svg | 3 +++ theme/ses/ses-snackbar-error.svg | 10 ++++++++++ theme/ses/ses-snackbar-success.svg | 10 ++++++++++ theme/ses/ses-snackbar-warning.svg | 3 +++ theme/ses/ses-state-offline.svg | 3 +++ theme/ses/ses-syncArrows.svg | 3 +++ theme/ses/ses-syncstate-error.svg | 10 ++++++++++ theme/ses/ses-syncstate-paused.svg | 10 ++++++++++ theme/ses/ses-syncstate-success.svg | 10 ++++++++++ theme/ses/ses-syncstate-syncing.svg | 16 ++++++++++++++++ theme/ses/ses-syncstate-warning.svg | 10 ++++++++++ theme/ses/ses-website.svg | 10 ++++++++++ 38 files changed, 267 insertions(+), 6 deletions(-) create mode 100644 theme/ses/ses-accountDelete.svg create mode 100644 theme/ses/ses-accountLogout.svg create mode 100644 theme/ses/ses-accountPause.svg create mode 100644 theme/ses/ses-accountQuit.svg create mode 100644 theme/ses/ses-accountResume.svg create mode 100644 theme/ses/ses-activity.svg create mode 100644 theme/ses/ses-addlivebackup.svg create mode 100644 theme/ses/ses-chevron.svg create mode 100644 theme/ses/ses-clipboard.svg create mode 100644 theme/ses/ses-darkPlus.svg create mode 100644 theme/ses/ses-external.svg create mode 100644 theme/ses/ses-file.svg create mode 100644 theme/ses/ses-folderIcon.svg create mode 100644 theme/ses/ses-folderIconBright.svg create mode 100644 theme/ses/ses-info.svg create mode 100644 theme/ses/ses-link.svg create mode 100644 theme/ses/ses-more.svg create mode 100644 theme/ses/ses-questionmark.svg create mode 100644 theme/ses/ses-refresh.svg create mode 100644 theme/ses/ses-settings.svg create mode 100644 theme/ses/ses-settingsAvatar.svg create mode 100644 theme/ses/ses-snackbar-error.svg create mode 100644 theme/ses/ses-snackbar-success.svg create mode 100644 theme/ses/ses-snackbar-warning.svg create mode 100644 theme/ses/ses-state-offline.svg create mode 100644 theme/ses/ses-syncArrows.svg create mode 100644 theme/ses/ses-syncstate-error.svg create mode 100644 theme/ses/ses-syncstate-paused.svg create mode 100644 theme/ses/ses-syncstate-success.svg create mode 100644 theme/ses/ses-syncstate-syncing.svg create mode 100644 theme/ses/ses-syncstate-warning.svg create mode 100644 theme/ses/ses-website.svg diff --git a/theme/colored/state-error.svg b/theme/colored/state-error.svg index 224ce8626c4e0..4674cc8e2d4d4 100644 --- a/theme/colored/state-error.svg +++ b/theme/colored/state-error.svg @@ -1 +1,10 @@ - + + + + + + + + + + diff --git a/theme/colored/state-offline.svg b/theme/colored/state-offline.svg index 60e6bd950d3fe..eda854aac5306 100644 --- a/theme/colored/state-offline.svg +++ b/theme/colored/state-offline.svg @@ -1 +1,3 @@ - + + + diff --git a/theme/colored/state-ok.svg b/theme/colored/state-ok.svg index f7bfcbcce6d83..433f04a262429 100644 --- a/theme/colored/state-ok.svg +++ b/theme/colored/state-ok.svg @@ -1 +1,10 @@ - + + + + + + + + + + diff --git a/theme/colored/state-pause.svg b/theme/colored/state-pause.svg index f2edf258a15dc..5f91042e48073 100644 --- a/theme/colored/state-pause.svg +++ b/theme/colored/state-pause.svg @@ -1 +1,10 @@ - + + + + + + + + + + diff --git a/theme/colored/state-sync.svg b/theme/colored/state-sync.svg index 658d1b40e0c43..07aa6dda5c66c 100644 --- a/theme/colored/state-sync.svg +++ b/theme/colored/state-sync.svg @@ -1 +1,16 @@ - + + + + + + + + + + + + + + + + diff --git a/theme/colored/state-warning.svg b/theme/colored/state-warning.svg index a738cdbc8b1a5..32363111058db 100644 --- a/theme/colored/state-warning.svg +++ b/theme/colored/state-warning.svg @@ -1 +1,10 @@ - + + + + + + + + + + diff --git a/theme/ses/ses-accountDelete.svg b/theme/ses/ses-accountDelete.svg new file mode 100644 index 0000000000000..8b35ccf415249 --- /dev/null +++ b/theme/ses/ses-accountDelete.svg @@ -0,0 +1,3 @@ + + + diff --git a/theme/ses/ses-accountLogout.svg b/theme/ses/ses-accountLogout.svg new file mode 100644 index 0000000000000..60c5eacfcd135 --- /dev/null +++ b/theme/ses/ses-accountLogout.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/theme/ses/ses-accountPause.svg b/theme/ses/ses-accountPause.svg new file mode 100644 index 0000000000000..6928b0a84ca1a --- /dev/null +++ b/theme/ses/ses-accountPause.svg @@ -0,0 +1,3 @@ + + + diff --git a/theme/ses/ses-accountQuit.svg b/theme/ses/ses-accountQuit.svg new file mode 100644 index 0000000000000..95554efad4428 --- /dev/null +++ b/theme/ses/ses-accountQuit.svg @@ -0,0 +1,3 @@ + + + diff --git a/theme/ses/ses-accountResume.svg b/theme/ses/ses-accountResume.svg new file mode 100644 index 0000000000000..fea95e07e255b --- /dev/null +++ b/theme/ses/ses-accountResume.svg @@ -0,0 +1,3 @@ + + + diff --git a/theme/ses/ses-activity.svg b/theme/ses/ses-activity.svg new file mode 100644 index 0000000000000..09d58a5868610 --- /dev/null +++ b/theme/ses/ses-activity.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/theme/ses/ses-addlivebackup.svg b/theme/ses/ses-addlivebackup.svg new file mode 100644 index 0000000000000..c78a03471aa8f --- /dev/null +++ b/theme/ses/ses-addlivebackup.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/theme/ses/ses-chevron.svg b/theme/ses/ses-chevron.svg new file mode 100644 index 0000000000000..0823e78819528 --- /dev/null +++ b/theme/ses/ses-chevron.svg @@ -0,0 +1,3 @@ + + + diff --git a/theme/ses/ses-clipboard.svg b/theme/ses/ses-clipboard.svg new file mode 100644 index 0000000000000..11e2a909d3851 --- /dev/null +++ b/theme/ses/ses-clipboard.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/theme/ses/ses-darkPlus.svg b/theme/ses/ses-darkPlus.svg new file mode 100644 index 0000000000000..74f4f7eca5844 --- /dev/null +++ b/theme/ses/ses-darkPlus.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/theme/ses/ses-external.svg b/theme/ses/ses-external.svg new file mode 100644 index 0000000000000..07f5a34f63f2f --- /dev/null +++ b/theme/ses/ses-external.svg @@ -0,0 +1,3 @@ + + + diff --git a/theme/ses/ses-file.svg b/theme/ses/ses-file.svg new file mode 100644 index 0000000000000..0a8d10cbb7694 --- /dev/null +++ b/theme/ses/ses-file.svg @@ -0,0 +1,3 @@ + + + diff --git a/theme/ses/ses-folderIcon.svg b/theme/ses/ses-folderIcon.svg new file mode 100644 index 0000000000000..b8fb4f1c7eebc --- /dev/null +++ b/theme/ses/ses-folderIcon.svg @@ -0,0 +1,3 @@ + + + diff --git a/theme/ses/ses-folderIconBright.svg b/theme/ses/ses-folderIconBright.svg new file mode 100644 index 0000000000000..cec3690fe2544 --- /dev/null +++ b/theme/ses/ses-folderIconBright.svg @@ -0,0 +1,3 @@ + + + diff --git a/theme/ses/ses-info.svg b/theme/ses/ses-info.svg new file mode 100644 index 0000000000000..bb88fa20fa785 --- /dev/null +++ b/theme/ses/ses-info.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/theme/ses/ses-link.svg b/theme/ses/ses-link.svg new file mode 100644 index 0000000000000..bcab7b7518f91 --- /dev/null +++ b/theme/ses/ses-link.svg @@ -0,0 +1,4 @@ + + + + diff --git a/theme/ses/ses-more.svg b/theme/ses/ses-more.svg new file mode 100644 index 0000000000000..87baffb082247 --- /dev/null +++ b/theme/ses/ses-more.svg @@ -0,0 +1,3 @@ + + + diff --git a/theme/ses/ses-questionmark.svg b/theme/ses/ses-questionmark.svg new file mode 100644 index 0000000000000..e6fe962b7a657 --- /dev/null +++ b/theme/ses/ses-questionmark.svg @@ -0,0 +1,3 @@ + + + diff --git a/theme/ses/ses-refresh.svg b/theme/ses/ses-refresh.svg new file mode 100644 index 0000000000000..1502d63212085 --- /dev/null +++ b/theme/ses/ses-refresh.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/theme/ses/ses-settings.svg b/theme/ses/ses-settings.svg new file mode 100644 index 0000000000000..97cdc64e85eb9 --- /dev/null +++ b/theme/ses/ses-settings.svg @@ -0,0 +1,3 @@ + + + diff --git a/theme/ses/ses-settingsAvatar.svg b/theme/ses/ses-settingsAvatar.svg new file mode 100644 index 0000000000000..55c13ae34b0fd --- /dev/null +++ b/theme/ses/ses-settingsAvatar.svg @@ -0,0 +1,3 @@ + + + diff --git a/theme/ses/ses-snackbar-error.svg b/theme/ses/ses-snackbar-error.svg new file mode 100644 index 0000000000000..ddb015e7693c4 --- /dev/null +++ b/theme/ses/ses-snackbar-error.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/theme/ses/ses-snackbar-success.svg b/theme/ses/ses-snackbar-success.svg new file mode 100644 index 0000000000000..cfabcb54ee292 --- /dev/null +++ b/theme/ses/ses-snackbar-success.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/theme/ses/ses-snackbar-warning.svg b/theme/ses/ses-snackbar-warning.svg new file mode 100644 index 0000000000000..8dd360cd42c29 --- /dev/null +++ b/theme/ses/ses-snackbar-warning.svg @@ -0,0 +1,3 @@ + + + diff --git a/theme/ses/ses-state-offline.svg b/theme/ses/ses-state-offline.svg new file mode 100644 index 0000000000000..eda854aac5306 --- /dev/null +++ b/theme/ses/ses-state-offline.svg @@ -0,0 +1,3 @@ + + + diff --git a/theme/ses/ses-syncArrows.svg b/theme/ses/ses-syncArrows.svg new file mode 100644 index 0000000000000..88cd18033beb5 --- /dev/null +++ b/theme/ses/ses-syncArrows.svg @@ -0,0 +1,3 @@ + + + diff --git a/theme/ses/ses-syncstate-error.svg b/theme/ses/ses-syncstate-error.svg new file mode 100644 index 0000000000000..4674cc8e2d4d4 --- /dev/null +++ b/theme/ses/ses-syncstate-error.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/theme/ses/ses-syncstate-paused.svg b/theme/ses/ses-syncstate-paused.svg new file mode 100644 index 0000000000000..5f91042e48073 --- /dev/null +++ b/theme/ses/ses-syncstate-paused.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/theme/ses/ses-syncstate-success.svg b/theme/ses/ses-syncstate-success.svg new file mode 100644 index 0000000000000..433f04a262429 --- /dev/null +++ b/theme/ses/ses-syncstate-success.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/theme/ses/ses-syncstate-syncing.svg b/theme/ses/ses-syncstate-syncing.svg new file mode 100644 index 0000000000000..07aa6dda5c66c --- /dev/null +++ b/theme/ses/ses-syncstate-syncing.svg @@ -0,0 +1,16 @@ + + + + + + + + + + + + + + + + diff --git a/theme/ses/ses-syncstate-warning.svg b/theme/ses/ses-syncstate-warning.svg new file mode 100644 index 0000000000000..32363111058db --- /dev/null +++ b/theme/ses/ses-syncstate-warning.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/theme/ses/ses-website.svg b/theme/ses/ses-website.svg new file mode 100644 index 0000000000000..c909fa4d33aac --- /dev/null +++ b/theme/ses/ses-website.svg @@ -0,0 +1,10 @@ + + + + + + + + + + From ad3b717fc2e1dfceb9c89da33cd5c454ed560051 Mon Sep 17 00:00:00 2001 From: Kevin Beraz Date: Tue, 21 Jan 2025 11:39:05 +0100 Subject: [PATCH 066/371] SES-229 use icons in ionostheme.h and style.qml --- src/libsync/ionostheme.h | 40 ++++++++++++++++++++++++++++++++-------- theme.qrc.in | 31 +++++++++++++++++++++++++++++++ theme/Style/Style.qml | 38 +++++++++++++++++++------------------- 3 files changed, 82 insertions(+), 27 deletions(-) diff --git a/src/libsync/ionostheme.h b/src/libsync/ionostheme.h index bfb96b43e30aa..b5e45d137610d 100644 --- a/src/libsync/ionostheme.h +++ b/src/libsync/ionostheme.h @@ -12,35 +12,59 @@ class IonosTheme { //Icons static QString avatarIcon() { - return QString(Theme::themePrefix) + QStringLiteral("colored/wizard-groupware.svg"); + return QString(Theme::themePrefix) + QStringLiteral("ses/ses-settingsAvatar.svg"); } static QString folderIcon() { - return QString(Theme::themePrefix) + QStringLiteral("black/folder.svg"); + return QString(Theme::themePrefix) + QStringLiteral("ses/ses-folderIcon.svg"); } static QString syncArrows() { - return QString(Theme::themePrefix) + QStringLiteral("sync-arrow.svg"); + return QString(Theme::themePrefix) + QStringLiteral("ses/ses-syncArrows.svg"); } static QString questionCircleIcon() { - return QString(Theme::themePrefix) + QStringLiteral("black/state-info.svg"); + return QString(Theme::themePrefix) + QStringLiteral("ses/ses-questionMark.svg"); } static QString liveBackupPlusIcon() { - return QString(Theme::themePrefix) + QStringLiteral("black/add.svg"); + return QString(Theme::themePrefix) + QStringLiteral("ses/ses-addlivebackup.svg"); } static QString plusIcon() { - return QStringLiteral("qrc:///client/theme/black/add.svg"); + return QStringLiteral("qrc:///client/theme/ses/ses-darkPlus.svg"); } static QString deleteIcon() { - return QStringLiteral("qrc:///client/theme/black/clear.svg"); + return QStringLiteral("qrc:///client/theme/ses/ses-accountDelete.svg"); } static QString refreshIcon() { - return QStringLiteral("qrc:///client/theme/black/change.svg"); + return QStringLiteral("qrc:///client/theme/ses/ses-refresh.svg"); + } + + static QString syncSuccessIcon() { + return QStringLiteral("qrc:///client/theme/ses/ses-syncstatus-success.svg"); + } + + static QString syncWarnIcon() { + return QStringLiteral("qrc:///client/theme/ses/ses-syncstatus-warning.svg"); + } + + static QString syncErrorIcon() { + return QStringLiteral("qrc:///client/theme/ses/ses-syncstatus-error.svg"); + } + + static QString syncPausedIcon() { + return QStringLiteral("qrc:///client/theme/ses/ses-syncstatus-paused.svg"); + } + + static QString syncingIcon() { + return QStringLiteral("qrc:///client/theme/ses/ses-syncstatus-syncing.svg"); + } + + static QString syncOfflineIcon() { + return QStringLiteral("qrc:///client/theme/ses/ses-state-offline.svg"); } static int treeViewIconSize() { diff --git a/theme.qrc.in b/theme.qrc.in index f7c40a76bc70e..a6ebba6422196 100644 --- a/theme.qrc.in +++ b/theme.qrc.in @@ -248,5 +248,36 @@ theme/colored/IONOS_logo_w_suffix_frontend.svg fonts/OpenSans-SemiBold.ttf fonts/OpenSans-Regular.ttf + theme/ses/ses-accountDelete.svg + theme/ses/ses-accountLogout.svg + theme/ses/ses-accountPause.svg + theme/ses/ses-accountQuit.svg + theme/ses/ses-accountResume.svg + theme/ses/ses-activity.svg + theme/ses/ses-chevron.svg + theme/ses/ses-clipboard.svg + theme/ses/ses-darkPlus.svg + theme/ses/ses-addlivebackup.svg + theme/ses/ses-file.svg + theme/ses/ses-folderIcon.svg + theme/ses/ses-folderIconBright.svg + theme/ses/ses-syncstate-success.svg + theme/ses/ses-syncstate-syncing.svg + theme/ses/ses-syncstate-paused.svg + theme/ses/ses-syncstate-warning.svg + theme/ses/ses-syncstate-error.svg + theme/ses/ses-state-offline.svg + theme/ses/ses-snackbar-success.svg + theme/ses/ses-snackbar-warning.svg + theme/ses/ses-snackbar-error.svg + theme/ses/ses-more.svg + theme/ses/ses-questionmark.svg + theme/ses/ses-refresh.svg + theme/ses/ses-settings.svg + theme/ses/ses-settingsAvatar.svg + theme/ses/ses-info.svg + theme/ses/ses-syncArrows.svg + theme/ses/ses-external.svg + theme/ses/ses-website.svg diff --git a/theme/Style/Style.qml b/theme/Style/Style.qml index 7a3eb55647f7b..18c63173dbd30 100644 --- a/theme/Style/Style.qml +++ b/theme/Style/Style.qml @@ -219,25 +219,25 @@ QtObject { } // SES - readonly property string sesWebsiteIcon: "qrc:///client/theme/external.svg" - readonly property string sesFilesIcon: "qrc:///client/theme/files.svg" - readonly property string sesIonosLogoIcon: "qrc:///client/theme/ses/ses-IONOS-Logo.svg" - - readonly property string sesAvatar: "qrc:///client/theme/account.svg" - - readonly property string sesAccountQuit: "qrc:///client/theme/black/close.svg" - readonly property string sesAccountPause: "qrc:///client/theme/colored/state-pause.svg" - readonly property string sesDarkPlus: "qrc:///client/theme/black/add.svg" - readonly property string sesLightPlus: "qrc:///client/theme/white/add.svg" - readonly property string sesAccountSettings: "qrc:///client/theme/black/settings.svg" - readonly property string sesAccountResume: "qrc:///client/theme/black/state-sync.svg" - readonly property string sesLogout: "qrc:///client/theme/black/close.svg" - readonly property string sesDelete: "qrc:///client/theme/delete.svg" - readonly property string sesClipboard: "qrc:///client/theme/copy.svg" - readonly property string sesErrorIcon: "qrc:///client/theme/colored/state-error.svg" - readonly property string sesErrorBoxIcon: "qrc:///client/theme/colored/state-error.svg" - readonly property string sesGreenCheckmark: "qrc:///client/theme/colored/state-ok.svg" - readonly property string sesChevron: "qrc:///client/theme/black/caret-down.svg" + readonly property string sesWebsiteIcon: "qrc:///client/theme/ses/ses-website.svg" + readonly property string sesFolderIcon: "qrc:///client/theme/ses/ses-folderIcon.svg" + readonly property string sesIonosLogoIcon: "qrc:///client/theme/ses/ses-IONOS-Logo.svg" + + readonly property string sesAvatar: "qrc:///client/theme/ses/ses-settingsAvatar.svg" + + readonly property string sesAccountQuit: "qrc:///client/theme/ses/ses-accountQuit.svg" + readonly property string sesAccountPause: "qrc:///client/theme/ses/ses-accountPause.svg" + readonly property string sesDarkPlus: "qrc:///client/theme/ses/ses-darkPlus.svg" + readonly property string sesAccountSettings: "qrc:///client/theme/ses/ses-settings.svg" + readonly property string sesAccountResume: "qrc:///client/theme/ses/ses-accountResume.svg" + readonly property string sesLogout: "qrc:///client/theme/ses/ses-accountLogout.svg" + readonly property string sesDelete: "qrc:///client/theme/ses/ses-accountDelete.svg" + readonly property string sesClipboard: "qrc:///client/theme/ses/ses-clipboard.svg" + readonly property string sesSyncErrorIcon: "qrc:///client/theme/ses/ses-syncstate-error.svg" + readonly property string sesErrorBoxIcon: "qrc:///client/theme/ses/ses-snackbar-error.svg" + readonly property string sesSyncSuccessIcon: "qrc:///client/theme/ses/ses-syncstate-success.svg" + readonly property string sesOfflineIcon: "qrc:///client/theme/ses/ses-state-offline.svg" + readonly property string sesChevron: "qrc:///client/theme/ses/ses-chevron.svg" readonly property color sesIconDarkColor: "#001B41" readonly property color sesIconColor: "#1474C4" From d477fd86d2376789f1744af14002cc174ad93a6a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Christopher=20H=C3=A4tty?= Date: Thu, 23 Jan 2025 15:04:17 +0100 Subject: [PATCH 067/371] SES-229 use new icons in UI Components ce17c8bc8056bbc03506105b6a55a4d64a702538 --- src/gui/SesComponents/SesErrorBox.qml | 2 +- src/gui/filedetails/ShareDelegate.qml | 4 ++-- src/gui/filedetails/ShareDetailsPage.qml | 2 +- src/gui/folderstatusdelegate.cpp | 2 +- src/gui/owncloudgui.cpp | 3 ++- src/gui/sesFileIconProvider.cpp | 4 ++-- src/gui/sessnackbar.cpp | 6 +++--- src/gui/settingsdialog.cpp | 6 +++--- src/gui/tray/ActivityList.qml | 2 +- src/gui/tray/TrayFoldersMenuButton.qml | 2 +- src/gui/tray/TrayWindowAccountMenu.qml | 6 +++--- src/gui/tray/activitylistmodel.cpp | 6 +++--- src/gui/wizard/flow2authwidget.cpp | 2 +- 13 files changed, 24 insertions(+), 23 deletions(-) diff --git a/src/gui/SesComponents/SesErrorBox.qml b/src/gui/SesComponents/SesErrorBox.qml index 1c821caccde18..6a0d6ea2ba8a4 100644 --- a/src/gui/SesComponents/SesErrorBox.qml +++ b/src/gui/SesComponents/SesErrorBox.qml @@ -43,7 +43,7 @@ Item { columns: 2 Image { - source: Style.sesErrorIcon + source: Style.sesErrorBoxIcon width: 24 height: 24 Layout.rightMargin: Style.standardSpacing diff --git a/src/gui/filedetails/ShareDelegate.qml b/src/gui/filedetails/ShareDelegate.qml index 6cce8317df80a..10222fea551dc 100644 --- a/src/gui/filedetails/ShareDelegate.qml +++ b/src/gui/filedetails/ShareDelegate.qml @@ -164,7 +164,7 @@ GridLayout { bgColor: palette.highlight bgNormalOpacity: 0 - icon.source: Style.sesLightPlus + palette.buttonText + icon.source: Style.sesDarkPlus + palette.buttonText icon.width: Style.smallIconSize icon.height: Style.smallIconSize // display: AbstractButton.IconOnly @@ -202,7 +202,7 @@ GridLayout { bgColor: palette.highlight bgNormalOpacity: 0 - icon.source: shareLinkCopied ? Style.sesGreenCheckmark + Style.positiveColor : + icon.source: shareLinkCopied ? Style.sesSyncSuccessIcon + Style.positiveColor : Style.sesClipboard + palette.brightText icon.width: Style.smallIconSize diff --git a/src/gui/filedetails/ShareDetailsPage.qml b/src/gui/filedetails/ShareDetailsPage.qml index ec8e324c365e5..fe57d8afeb338 100644 --- a/src/gui/filedetails/ShareDetailsPage.qml +++ b/src/gui/filedetails/ShareDetailsPage.qml @@ -793,7 +793,7 @@ Page { SesCustomButton { Layout.columnSpan: buttonGrid.columns - icon.source: Style.sesLightPlus + icon.source: Style.sesDarkPlus font.pixelSize: pixelSize font.weight: fontWeight diff --git a/src/gui/folderstatusdelegate.cpp b/src/gui/folderstatusdelegate.cpp index ebd2dbdf7a3ab..4532dc92b1887 100644 --- a/src/gui/folderstatusdelegate.cpp +++ b/src/gui/folderstatusdelegate.cpp @@ -517,7 +517,7 @@ void FolderStatusDelegate::slotStyleChanged() void FolderStatusDelegate::customizeStyle() { - _iconMore = Theme::createColorAwareIcon(QLatin1String(":/client/theme/more.svg"), QSize(128, 128)); + _iconMore = Theme::createColorAwareIcon(QLatin1String(":/client/theme/ses/ses-more.svg"), QSize(128, 128)); } } // namespace OCC diff --git a/src/gui/owncloudgui.cpp b/src/gui/owncloudgui.cpp index e277fec51cedb..9c97e02d0b1cc 100644 --- a/src/gui/owncloudgui.cpp +++ b/src/gui/owncloudgui.cpp @@ -52,6 +52,7 @@ #include #include #include +#include #ifdef WITH_LIBCLOUDPROVIDERS #include #include @@ -93,7 +94,7 @@ ownCloudGui::ownCloudGui(Application *parent) _tray = Systray::instance(); _tray->setTrayEngine(new QQmlApplicationEngine(this)); // for the beginning, set the offline icon until the account was verified - _tray->setIcon(Theme::instance()->folderOfflineIcon(/*systray?*/ true)); + _tray->setIcon(QIcon(IonosTheme::syncOfflineIcon())); _tray->show(); diff --git a/src/gui/sesFileIconProvider.cpp b/src/gui/sesFileIconProvider.cpp index 677c1491b0d27..569027980dfbb 100644 --- a/src/gui/sesFileIconProvider.cpp +++ b/src/gui/sesFileIconProvider.cpp @@ -9,12 +9,12 @@ QIcon SesFileIconProvider::icon(const QFileInfo &info) const if (info.isDir()) { - return QIcon(":/client/theme/black/folder.svg"); + return QIcon(":/client/theme/ses/ses-folderIconBright.svg"); } if (info.suffix().isEmpty()) { - return QIcon(":/client/theme/black/edit.svg"); + return QIcon(":/client/theme/ses/ses-file.svg"); } diff --git a/src/gui/sessnackbar.cpp b/src/gui/sessnackbar.cpp index c42c099b2ab4c..52c4883e990f9 100644 --- a/src/gui/sessnackbar.cpp +++ b/src/gui/sessnackbar.cpp @@ -101,7 +101,7 @@ namespace OCC { void sesSnackBar::successStyle() { - const auto logoIconFileName = Theme::hidpiFileName(":/client/theme/black/state-ok.svg"); + const auto logoIconFileName = Theme::hidpiFileName(":/client/theme/ses/ses-snackbar-success.svg"); m_iconLabel.setPixmap(logoIconFileName); updateStyleSheet(IonosTheme::successBorderColor(), IonosTheme::successColor(), IonosTheme::black(), IonosTheme::black()); @@ -109,7 +109,7 @@ namespace OCC { void sesSnackBar::warningStyle() { - const auto logoIconFileName = Theme::hidpiFileName(":/client/theme/black/state-info.svg"); + const auto logoIconFileName = Theme::hidpiFileName(":/client/theme/ses/ses-snackbar-warning.svg"); m_iconLabel.setPixmap(logoIconFileName); updateStyleSheet(IonosTheme::warningBorderColor(), IonosTheme::warningColor(), IonosTheme::black(), IonosTheme::black()); @@ -117,7 +117,7 @@ namespace OCC { void sesSnackBar::errorStyle() { - const auto logoIconFileName = Theme::hidpiFileName(":/client/theme/black/state-error.svg"); + const auto logoIconFileName = Theme::hidpiFileName(":/client/theme/ses/ses-snackbar-error.svg"); m_iconLabel.setPixmap(logoIconFileName); updateStyleSheet(IonosTheme::errorBorderColor(), IonosTheme::errorColor(), IonosTheme::black(), IonosTheme::black()); diff --git a/src/gui/settingsdialog.cpp b/src/gui/settingsdialog.cpp index dcba20c2d1dea..7ba422e233d3f 100644 --- a/src/gui/settingsdialog.cpp +++ b/src/gui/settingsdialog.cpp @@ -123,12 +123,12 @@ SettingsDialog::SettingsDialog(ownCloudGui *gui, QWidget *parent) _actionGroup->setExclusive(true); connect(_actionGroup, &QActionGroup::triggered, this, &SettingsDialog::slotSwitchPage); - QAction *newAccountAction = createColorAwareAction(QLatin1String(":/client/theme/black/add.svg"), tr("New Account")); + QAction *newAccountAction = createColorAwareAction(QLatin1String(":/client/theme/ses/ses-darkPlus.svg"), tr("New Account")); _actionGroup->addAction(newAccountAction); _toolBar->addAction(newAccountAction); connect(newAccountAction, &QAction::triggered, _gui, &ownCloudGui::slotNewAccountWizard); - QAction *generalAction = createColorAwareAction(QLatin1String(":/client/theme/settings.svg"), tr("General")); + QAction *generalAction = createColorAwareAction(QLatin1String(":/client/theme/ses/ses-settings.svg"), tr("General")); _actionGroup->addAction(generalAction); _toolBar->addAction(generalAction); auto *generalSettings = new GeneralSettings; @@ -253,7 +253,7 @@ void SettingsDialog::accountAdded(AccountState *s) bool brandingSingleAccount = !Theme::instance()->multiAccount(); const auto actionText = brandingSingleAccount ? tr("Account") : s->account()->displayName(); - const auto accountAction = createColorAwareAction(QLatin1String(":/client/theme/account.svg"), actionText); + const auto accountAction = createColorAwareAction(QLatin1String(":/client/theme/ses/ses-settingsAvatar.svg"), actionText); if (!brandingSingleAccount) { accountAction->setToolTip(s->account()->displayName()); diff --git a/src/gui/tray/ActivityList.qml b/src/gui/tray/ActivityList.qml index b7180b35fd46a..06f890683d2cd 100644 --- a/src/gui/tray/ActivityList.qml +++ b/src/gui/tray/ActivityList.qml @@ -148,7 +148,7 @@ ScrollView { verticalAlignment: Image.AlignVCenter horizontalAlignment: Image.AlignHCenter fillMode: Image.PreserveAspectFit - source: "image://svgimage-custom-color/activity.svg/" + source: "qrc:///client/theme/ses/ses-activity.svg" sourceSize.height: 32 sourceSize.width: 22 } diff --git a/src/gui/tray/TrayFoldersMenuButton.qml b/src/gui/tray/TrayFoldersMenuButton.qml index 141170f9e5bd5..a3d9073145fce 100644 --- a/src/gui/tray/TrayFoldersMenuButton.qml +++ b/src/gui/tray/TrayFoldersMenuButton.qml @@ -29,7 +29,7 @@ HeaderButton { property bool userHasGroupFolders: currentUser.groupFolders.length > 0 property color parentBackgroundColor: "transparent" - icon.source: Style.sesFilesIcon + icon.source: Style.sesFolderIcon icon.color: Style.sesIconColor text: qsTr("Files") diff --git a/src/gui/tray/TrayWindowAccountMenu.qml b/src/gui/tray/TrayWindowAccountMenu.qml index c29106efa6c65..68166abbf12ed 100644 --- a/src/gui/tray/TrayWindowAccountMenu.qml +++ b/src/gui/tray/TrayWindowAccountMenu.qml @@ -272,10 +272,10 @@ Button { // Layout.rightMargin: Style.sesAccountButtonRightMargin // source: Image { // Layout.alignment: Qt.AlignRight - // verticalAlignment: Qt.AlignCenter + // verticalAlignment: Qt.AlignBottom // source: Style.sesChevron - // sourceSize.width: 12 - // sourceSize.height: 7 + // sourceSize.width: 14 + // sourceSize.height: 14 // Accessible.role: Accessible.PopupMenu // Accessible.name: qsTr("Account switcher and settings menu") // } diff --git a/src/gui/tray/activitylistmodel.cpp b/src/gui/tray/activitylistmodel.cpp index 96eb24fb6de28..996278d895a70 100644 --- a/src/gui/tray/activitylistmodel.cpp +++ b/src/gui/tray/activitylistmodel.cpp @@ -231,7 +231,7 @@ QVariant ActivityListModel::data(const QModelIndex &index, int role) const if (a._type == Activity::NotificationType && !a._talkNotificationData.userAvatar.isEmpty()) { return QStringLiteral("image://svgimage-custom-color/talk-bordered.svg"); } else if (a._type == Activity::SyncResultType) { - colorIconPath.append("state-error.svg"); + colorIconPath.append("state-ok.svg"); return colorIconPath; } else if (a._type == Activity::SyncFileItemType) { if (a._syncFileItemStatus == SyncFileItem::NormalError @@ -247,10 +247,10 @@ QVariant ActivityListModel::data(const QModelIndex &index, int role) const || a._syncFileItemStatus == SyncFileItem::FileNameInvalid || a._syncFileItemStatus == SyncFileItem::FileNameInvalidOnServer || a._syncFileItemStatus == SyncFileItem::FileNameClash) { - colorIconPath.append("state-info.svg"); + colorIconPath.append("state-warning.svg"); return colorIconPath; } else if (a._syncFileItemStatus == SyncFileItem::FileIgnored) { - colorIconPath.append("state-info.svg"); + colorIconPath = QStringLiteral("qrc:///client/theme/ses/ses-info.svg"); return colorIconPath; } else { // File sync successful diff --git a/src/gui/wizard/flow2authwidget.cpp b/src/gui/wizard/flow2authwidget.cpp index 89b52f09d8fe9..338b7fb04fa70 100644 --- a/src/gui/wizard/flow2authwidget.cpp +++ b/src/gui/wizard/flow2authwidget.cpp @@ -58,7 +58,7 @@ Flow2AuthWidget::Flow2AuthWidget(QWidget *parent) void Flow2AuthWidget::setLogo() { - const auto logoIconFileName = Theme::hidpiFileName(":/client/theme/black/external.svg"); + const auto logoIconFileName = Theme::hidpiFileName(":/client/theme/ses/ses-external.svg"); _ui.logoLabel->setPixmap(logoIconFileName); } From 106c8c5951ff2a232bfd2717b8a5c5a3a3570de3 Mon Sep 17 00:00:00 2001 From: Emil Bohleber Date: Tue, 21 Jan 2025 15:50:33 +0100 Subject: [PATCH 068/371] SES-248 remove fileprovider param from updater call --- src/gui/updater/updater.cpp | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/gui/updater/updater.cpp b/src/gui/updater/updater.cpp index 020b09c14f836..a86a5862356ea 100644 --- a/src/gui/updater/updater.cpp +++ b/src/gui/updater/updater.cpp @@ -60,9 +60,9 @@ QUrl Updater::updateUrl() if (SparkleUpdater::autoUpdaterAllowed()) { urlQuery.addQueryItem(QLatin1String("sparkle"), QLatin1String("true")); } -#ifdef BUILD_FILE_PROVIDER_MODULE - urlQuery.addQueryItem(QLatin1String("fileprovider"), QLatin1String("true")); -#endif +// #ifdef BUILD_FILE_PROVIDER_MODULE +// urlQuery.addQueryItem(QLatin1String("fileprovider"), QLatin1String("true")); +// #endif #endif #if defined(Q_OS_WIN) urlQuery.addQueryItem(QLatin1String("msi"), QLatin1String("true")); From 42ff0761f12f37235362d2d60dc084667d04fa4c Mon Sep 17 00:00:00 2001 From: Emil Bohleber Date: Tue, 21 Jan 2025 15:51:29 +0100 Subject: [PATCH 069/371] SES-248 move sparkle sign up so it will be signed bevore integration into bundle --- admin/osx/ionos_macmaker/start.sh | 55 ++++++++++++++++--------------- 1 file changed, 28 insertions(+), 27 deletions(-) diff --git a/admin/osx/ionos_macmaker/start.sh b/admin/osx/ionos_macmaker/start.sh index bcda940bb6c91..978a921c53138 100755 --- a/admin/osx/ionos_macmaker/start.sh +++ b/admin/osx/ionos_macmaker/start.sh @@ -1,5 +1,25 @@ #!/bin/bash +recursive_sign(){ + local path="$1" + local extension="${path##*.}" + if [[ "$extension" == "dylib" || "$extension" == "framework" || "$extension" == "appex" ]]; then + echo "Signing directory: $path" + codesign -s "$2" --force --preserve-metadata=entitlements --verbose=4 --deep --options=runtime --timestamp "${path}" + fi +} + +export -f recursive_sign + +sign_folder_content(){ + local folder="$1" + local identity="$2" + local entitlements="$3" + codesign -s "$identity" --force $entitlements --verbose=4 --deep --options=runtime --timestamp "${folder}" +} + +export -f sign_folder_content + # This script is used to build the Mac OS X version of the IONOS client. set -xe @@ -63,6 +83,13 @@ if [ "$CLEAN_REBUILD" == "true" ] && [ "$BUILD_UPDATER" == "true" ]; then mkdir -p $SPARKLE_DIR wget $SPARKLE_DOWNLOAD_URI -O $SPARKLE_DIR/Sparkle.tar.xz tar -xvf $SPARKLE_DIR/Sparkle.tar.xz -C $SPARKLE_DIR + + # Sign Sparkle + if [ -n "$CODE_SIGN_IDENTITY" ]; then + SPARKLE_FRAMEWORK_DIR=$SPARKLE_DIR/Sparkle.framework + find "$SPARKLE_FRAMEWORK_DIR/Resources/Autoupdate.app/Contents/MacOS" -mindepth 1 -print0 | xargs -0 -I {} bash -c 'sign_folder_content "$@" "$CODE_SIGN_IDENTITY"' _ {} "$CODE_SIGN_IDENTITY" + codesign -s "$CODE_SIGN_IDENTITY" --force --preserve-metadata=entitlements --verbose=4 --deep --options=runtime --timestamp "$SPARKLE_FRAMEWORK_DIR/Sparkle" + fi fi # Build the client @@ -72,7 +99,7 @@ cmake -S $REPO_ROOT_DIR/ -B $BUILD_DIR \ -DBUILD_TESTING=OFF \ -DBUILD_UPDATER=$(if [ $BUILD_UPDATER == true ]; then echo "ON"; else echo "OFF"; fi) \ -DMIRALL_VERSION_BUILD=`date +%Y%m%d` \ - -DMIRALL_VERSION_SUFFIX="" \ + -DMIRALL_VERSION_SUFFIX="release" \ -DBUILD_OWNCLOUD_OSX_BUNDLE=ON \ -DCMAKE_OSX_ARCHITECTURES=x86_64 \ -DBUILD_FILE_PROVIDER_MODULE=ON \ @@ -95,26 +122,6 @@ fi PRODUCT_PATH=$PRODUCT_DIR/$PRODUCT_NAME.app -recursive_sign(){ - local path="$1" - local extension="${path##*.}" - if [[ "$extension" == "dylib" || "$extension" == "framework" || "$extension" == "appex" ]]; then - echo "Signing directory: $path" - codesign -s "$2" --force --preserve-metadata=entitlements --verbose=4 --deep --options=runtime --timestamp "${path}" - fi -} - -export -f recursive_sign - -sign_folder_content(){ - local folder="$1" - local identity="$2" - local entitlements="$3" - codesign -s "$identity" --force $entitlements --verbose=4 --deep --options=runtime --timestamp "${folder}" -} - -export -f sign_folder_content - CLIENT_CONTENTS_DIR=$PRODUCT_PATH/Contents CLIENT_FRAMEWORKS_DIR=$CLIENT_CONTENTS_DIR/Frameworks CLIENT_PLUGINS_DIR=$CLIENT_CONTENTS_DIR/PlugIns @@ -126,12 +133,6 @@ find "$CLIENT_RESOURCES_DIR" -print0 | xargs -0 -I {} bash -c 'recursive_sign "$ codesign -s "$CODE_SIGN_IDENTITY" --force --preserve-metadata=entitlements --verbose=4 --deep --options=runtime --timestamp "$PRODUCT_PATH" -# Sign Sparkle -if [ $BUILD_UPDATER == true ]; then - SPARKLE_DIR=$CLIENT_FRAMEWORKS_DIR/Sparkle.framework - find "$SPARKLE_DIR/Resources/Autoupdate.app/Contents/MacOS" -mindepth 1 -print0 | xargs -0 -I {} bash -c 'sign_folder_content "$@" "$CODE_SIGN_IDENTITY"' _ {} "$CODE_SIGN_IDENTITY" - codesign -s "$CODE_SIGN_IDENTITY" --force --preserve-metadata=entitlements --verbose=4 --deep --options=runtime --timestamp "$SPARKLE_DIR/Sparkle" -fi # Sign the client find "$CLIENT_CONTENTS_DIR/MacOS" -mindepth 1 -print0 | xargs -0 -I {} bash -c 'sign_folder_content "$@" "$CODE_SIGN_IDENTITY" "$entitlements" ' _ {} "$CODE_SIGN_IDENTITY" "--preserve-metadata=entitlements" From 058b3c5a78377426347d948d237a63fd612dca7d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Christopher=20H=C3=A4tty?= Date: Thu, 23 Jan 2025 15:17:53 +0100 Subject: [PATCH 070/371] Merge translations changes --- src/gui/folderstatusdelegate.cpp | 2 +- src/gui/generalsettings.ui | 2 +- src/libsync/theme.cpp | 3 ++- 3 files changed, 4 insertions(+), 3 deletions(-) diff --git a/src/gui/folderstatusdelegate.cpp b/src/gui/folderstatusdelegate.cpp index 4532dc92b1887..0588e592bae12 100644 --- a/src/gui/folderstatusdelegate.cpp +++ b/src/gui/folderstatusdelegate.cpp @@ -57,7 +57,7 @@ FolderStatusDelegate::FolderStatusDelegate() QString FolderStatusDelegate::addFolderText() { - return tr("Add live backup"); + return tr("Add Folder Sync"); } QString FolderStatusDelegate::addInfoText() diff --git a/src/gui/generalsettings.ui b/src/gui/generalsettings.ui index 59f3cbb8f3079..2816d9bb004fc 100644 --- a/src/gui/generalsettings.ui +++ b/src/gui/generalsettings.ui @@ -362,7 +362,7 @@ - &Analysis data collection for needs-based design + &Analysis data collection for needs-based design diff --git a/src/libsync/theme.cpp b/src/libsync/theme.cpp index 2d67f65f36158..610a497b682ad 100644 --- a/src/libsync/theme.cpp +++ b/src/libsync/theme.cpp @@ -642,7 +642,8 @@ QString Theme::aboutInfo() const QString Theme::about() const { - const auto devString = developerStringInfo(); + //: Example text: "

      Nextcloud Desktop Client

      " (%1 is the application name) + const auto devString = tr("

      %1 %2

      ").arg(APPLICATION_NAME, QString::fromLatin1(MIRALL_STRINGIFY(MIRALL_VERSION))); return devString; } From f41d0ed1f3b7d2f84eab4b6117189a3389a4d50f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Christopher=20H=C3=A4tty?= Date: Thu, 23 Jan 2025 15:53:49 +0100 Subject: [PATCH 071/371] Merge fix --- src/gui/wizard/owncloudadvancedsetuppage.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/gui/wizard/owncloudadvancedsetuppage.cpp b/src/gui/wizard/owncloudadvancedsetuppage.cpp index 0839f829ddcaa..45eb5d7ea6151 100644 --- a/src/gui/wizard/owncloudadvancedsetuppage.cpp +++ b/src/gui/wizard/owncloudadvancedsetuppage.cpp @@ -678,7 +678,7 @@ void OwncloudAdvancedSetupPage::customizeStyle() _ui.lVirtualFileSync->setContentsMargins(0, 0, 0, 0); _ui.horizontalLayout_8->setContentsMargins(32, 0, 0, 0); _ui.horizontalLayout_10->setContentsMargins(0, 8, 0, 0); - _ui.horizontalLayout_10->setMargin(1); + // _ui.horizontalLayout_10->setMargin(1); _ui.wSyncStrategy->setSpacing(16); _ui.wSyncStrategy->setContentsMargins(0, 0, 0, 0); From 5826cb293b479c33f796557ab655dd34b84a5bdd Mon Sep 17 00:00:00 2001 From: Emil Bohleber Date: Mon, 27 Jan 2025 15:08:30 +0100 Subject: [PATCH 072/371] SES-265 remove failing macOS code --- src/gui/generalsettings.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/gui/generalsettings.cpp b/src/gui/generalsettings.cpp index 88688e09547b1..a9665f938b794 100644 --- a/src/gui/generalsettings.cpp +++ b/src/gui/generalsettings.cpp @@ -759,8 +759,8 @@ void GeneralSettings::customizeStyle() ); #if defined(Q_OS_MAC) - _ui->generalBoxLayout->setMargin(16); - _ui->dataProtectionBoxLayout->setMargin(16); + // _ui->generalBoxLayout->setMargin(16); + // _ui->dataProtectionBoxLayout->setMargin(16); #endif // SES-4 removed From 875af26ab60daa23207a85b08e437ab5a31fbc53 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Christopher=20H=C3=A4tty?= Date: Thu, 30 Jan 2025 08:56:24 +0100 Subject: [PATCH 073/371] SES-296 Used BaseStyle explicit instead of default --- src/gui/main.cpp | 9 +++++++++ src/gui/sesstyle.cpp | 4 ++-- src/gui/sesstyle.h | 2 ++ 3 files changed, 13 insertions(+), 2 deletions(-) diff --git a/src/gui/main.cpp b/src/gui/main.cpp index 67087d6d74586..0be2fc9eab27e 100644 --- a/src/gui/main.cpp +++ b/src/gui/main.cpp @@ -95,9 +95,18 @@ int main(int argc, char **argv) QApplication::setStyle(new sesStyle); QQuickStyle::setStyle(qmlStyle); QQuickStyle::setFallbackStyle(QStringLiteral("Fusion")); +// Comment in again when Ionos Compiler Switch is available +// #if defined Q_OS_WIN +// if (QOperatingSystemVersion::current().version() < QOperatingSystemVersion::Windows11.version()) { +// QApplication::setStyle(QStyleFactory::create("Fusion")); +// } +// #endif OCC::Application app(argc, argv); + app.setStyle(new sesStyle(QStyleFactory::create("WindowsVista"))); + QQuickStyle::setStyle(style); + QQuickStyle::setFallbackStyle(QStringLiteral("Fusion")); if (!widgetsStyle.isEmpty()) { QApplication::setStyle(QStyleFactory::create(widgetsStyle)); } diff --git a/src/gui/sesstyle.cpp b/src/gui/sesstyle.cpp index 24e7baafcc116..329051a9f0a6b 100644 --- a/src/gui/sesstyle.cpp +++ b/src/gui/sesstyle.cpp @@ -29,8 +29,8 @@ #include #include -sesStyle::sesStyle() - : super() +sesStyle::sesStyle(QStyle* baseStyle) + : super(baseStyle) , mPushButtonStyleHelper(new PushButtonStyleHelper) , mMoreOptionsButtonStyleHelper(new MoreOptionsButtonStyleHelper) { diff --git a/src/gui/sesstyle.h b/src/gui/sesstyle.h index 9f9e053dab36c..4ac43bc3fd1fa 100644 --- a/src/gui/sesstyle.h +++ b/src/gui/sesstyle.h @@ -31,6 +31,8 @@ using super = QProxyStyle; class sesStyle : public super { public: + sesStyle(QStyle* baseStyle); + enum CustomControlElement { CE_TreeViewMoreOptions = QStyle::CE_CustomBase + 1, // Custom element for a button }; From f58f94711d7dbb3a233eac2672f7f0edfe91a480 Mon Sep 17 00:00:00 2001 From: Emil Bohleber Date: Thu, 30 Jan 2025 12:59:40 +0100 Subject: [PATCH 074/371] SES-293 hide connection tab while hopefully still showing virtual files tab --- src/gui/accountsettings.cpp | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/src/gui/accountsettings.cpp b/src/gui/accountsettings.cpp index d5668c27f7cb5..520f9d8c6a3fe 100644 --- a/src/gui/accountsettings.cpp +++ b/src/gui/accountsettings.cpp @@ -237,6 +237,15 @@ AccountSettings::AccountSettings(AccountState *accountState, QWidget *parent) connectionSettingsLayout->addWidget(networkSettings); connectionSettingsTab->setLayout(connectionSettingsLayout); + const auto connectionSettingsTabIndex = _ui->tabWidget->indexOf(connectionSettingsTab); + if(connectionSettingsTabIndex >= 0){ + _ui->tabWidget->removeTab(connectionSettingsTabIndex); + } + _ui->tabWidget->setCurrentIndex(0); +#ifndef BUILD_FILE_PROVIDER_MODULE + _ui->tabWidget->tabBar()->hide(); +#endif + const auto mouseCursorChanger = new MouseCursorChanger(this); mouseCursorChanger->folderList = _ui->_folderList; mouseCursorChanger->model = _model; From 1519f739b95cdb9f6d9065d00d06490dd397d636 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Christopher=20H=C3=A4tty?= Date: Thu, 30 Jan 2025 09:44:52 +0100 Subject: [PATCH 075/371] SES-299 Removed obsolete Window.qml (replaced by MainWindow.qml)) --- src/gui/tray/Window.qml | 497 ---------------------------------------- 1 file changed, 497 deletions(-) delete mode 100644 src/gui/tray/Window.qml diff --git a/src/gui/tray/Window.qml b/src/gui/tray/Window.qml deleted file mode 100644 index 5ccd8ad933121..0000000000000 --- a/src/gui/tray/Window.qml +++ /dev/null @@ -1,497 +0,0 @@ -/* - * Copyright (C) 2020 by Dominique Fuchs <32204802+DominiqueFuchs@users.noreply.github.com> - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, but - * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY - * or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License - * for more details. - */ - -import QtQuick 2.15 -import QtQuick.Window 2.15 -import QtQuick.Controls 2.15 -import QtQuick.Layouts 1.15 -import QtGraphicalEffects 1.15 -import Qt.labs.platform 1.1 as NativeDialogs - -import "../" -import "../filedetails/" -import "../SesComponents/" - -// Custom qml modules are in /theme (and included by resources.qrc) -import Style 1.0 - -import com.ionos.hidrivenext.desktopclient 1.0 - -ApplicationWindow { - id: trayWindow - - title: Systray.windowTitle - // If the main dialog is displayed as a regular window we want it to be quadratic - width: Systray.useNormalWindow ? Style.trayWindowHeight : Style.sesTrayWindowWidth - height: Style.trayWindowHeight - color: "transparent" - flags: Systray.useNormalWindow ? Qt.Window : Qt.Dialog | Qt.FramelessWindowHint - - font.family: Style.sesOpenSansRegular - font.pixelSize: Style.sesFontPixelSize - font.weight: Style.sesFontBoldWeight - - // TODO: Rather than setting all these palette colours manually, - // create a custom style and do it for all components globally - palette { - text: Style.ncTextColor - windowText: Style.ncTextColor - buttonText: Style.ncTextColor - brightText: Style.ncTextBrightColor - highlight: Style.lightHover - highlightedText: Style.ncTextColor - light: Style.lightHover - midlight: Style.ncSecondaryTextColor - mid: Style.darkerHover - dark: Style.menuBorder - button: Style.buttonBackgroundColor - window: Style.backgroundColor - base: Style.backgroundColor - toolTipBase: Style.backgroundColor - toolTipText: Style.ncTextColor - } - - readonly property int maxMenuHeight: Style.trayWindowHeight - Style.trayWindowHeaderHeight - 2 * Style.trayWindowBorderWidth - - Component.onCompleted: Systray.forceWindowInit(trayWindow) - - // Close tray window when focus is lost (e.g. click somewhere else on the screen) - onActiveChanged: { - if (!Systray.useNormalWindow && !active) { - hide(); - Systray.isOpen = false; - } - } - - onClosing: Systray.isOpen = false - - onVisibleChanged: syncStatus.model.load() - - background: Rectangle { - radius: 0.0 - border.width: Style.trayWindowBorderWidth - border.color: palette.dark - color: palette.window - } - - Connections { - target: UserModel - function onCurrentUserChanged() { - accountMenu.close(); - syncStatus.model.load(); - } - } - - Component { - id: errorMessageDialog - - NativeDialogs.MessageDialog { - id: dialog - - title: Systray.windowTitle - - onAccepted: destroy() - onRejected: destroy() - } - } - - Connections { - target: Systray - - function onIsOpenChanged() { - userStatusDrawer.close() - fileDetailsDrawer.close(); - - if(Systray.isOpen) { - accountMenu.close(); - appsMenu.close(); - openLocalFolderButton.closeMenu() - } - } - - function onShowErrorMessageDialog(error) { - var newErrorDialog = errorMessageDialog.createObject(trayWindow) - newErrorDialog.text = error - newErrorDialog.open() - } - - function onShowFileDetails(accountState, localPath, fileDetailsPage) { - fileDetailsDrawer.openFileDetails(accountState, localPath, fileDetailsPage); - } - } - - OpacityMask { - anchors.fill: parent - anchors.margins: Style.trayWindowBorderWidth - source: ShaderEffectSource { - sourceItem: trayWindowMainItem - hideSource: true - } - maskSource: Rectangle { - width: trayWindow.width - height: trayWindow.height - radius: 0.0 - } - } - - Drawer { - id: userStatusDrawer - width: parent.width - height: parent.height - Style.trayDrawerMargin - padding: 0 - edge: Qt.BottomEdge - modal: true - visible: false - - background: Rectangle { - radius: Systray.useNormalWindow ? 0.0 : Style.trayWindowRadius - border.width: Style.trayWindowBorderWidth - border.color: palette.dark - color: "red"//palette.window - } - - property int userIndex: 0 - - function openUserStatusDrawer(index) { - console.log(`About to show dialog for user with index ${index}`); - userIndex = index; - open(); - } - - Loader { - id: userStatusContents - anchors.fill: parent - active: userStatusDrawer.visible - sourceComponent: UserStatusSelectorPage { - anchors.fill: parent - userIndex: userStatusDrawer.userIndex - onFinished: userStatusDrawer.close() - } - } - } - - Drawer { - id: fileDetailsDrawer - width: parent.width - Style.trayDrawerMargin - height: parent.height - padding: 0 - edge: Qt.RightEdge - modal: true - visible: false - clip: true - - background: Rectangle { - radius: Systray.useNormalWindow ? 0.0 : Style.trayWindowRadius - border.width: Style.trayWindowBorderWidth - border.color: palette.dark - color: palette.window - } - - property var folderAccountState: ({}) - property string fileLocalPath: "" - property var pageToShow: Systray.FileDetailsPage.Activity - - function openFileDetails(accountState, localPath, fileDetailsPage) { - console.log(`About to show file details view in tray for ${localPath}`); - folderAccountState = accountState; - fileLocalPath = localPath; - pageToShow = fileDetailsPage; - - if(!opened) { - open(); - } - } - - Loader { - id: fileDetailsContents - anchors.fill: parent - active: fileDetailsDrawer.visible - onActiveChanged: { - if (active) { - Systray.showFileDetailsPage(fileDetailsDrawer.fileLocalPath, - fileDetailsDrawer.pageToShow); - } - } - sourceComponent: FileDetailsView { - id: fileDetails - - width: parent.width - height: parent.height - - backgroundsVisible: false - accentColor: Style.currentUserHeaderColor - accountState: fileDetailsDrawer.folderAccountState - localPath: fileDetailsDrawer.fileLocalPath - showCloseButton: true - - onCloseButtonClicked: fileDetailsDrawer.close() - } - } - } - - Item { - id: trayWindowMainItem - - property bool isUnifiedSearchActive: unifiedSearchResultsListViewSkeletonLoader.active - || unifiedSearchResultNothingFound.visible - || unifiedSearchResultsErrorLabel.visible - || unifiedSearchResultsListView.visible - - anchors.fill: parent - anchors.margins: Style.trayWindowBorderWidth - clip: true - - Accessible.role: Accessible.Grouping - Accessible.name: qsTr("Nextcloud desktop main dialog") - - HeaderLogo { - id: trayWindowLogoHeaderBackground - height: Style.sesHeaderLogoHeigth - width: parent.width - } - - SesTrayHeader { - id: trayWindowHeaderBackground - anchors.left: trayWindowLogoHeaderBackground.left - anchors.right: trayWindowLogoHeaderBackground.right - anchors.top: trayWindowLogoHeaderBackground.bottom - anchors.topMargin: Style.sesHeaderTopMargin - } - - Rectangle { - anchors.left: parent.left - anchors.right: parent.right - anchors.top: trayWindowHeaderBackground.bottom - anchors.topMargin: Style.sesHeaderTopMargin - implicitHeight: 1 - color: Style.sesBorderColor - } - - UnifiedSearchInputContainer { - id: trayWindowUnifiedSearchInputContainer - height: 0 - visible: false //SES-4 removed - - anchors { - top: trayWindowHeaderBackground.bottom - left: trayWindowMainItem.left - right: trayWindowMainItem.right - - topMargin: Style.trayHorizontalMargin + controlRoot.padding - leftMargin: Style.trayHorizontalMargin + controlRoot.padding - rightMargin: Style.trayHorizontalMargin + controlRoot.padding - } - - text: UserModel.currentUser.unifiedSearchResultsListModel.searchTerm - readOnly: !UserModel.currentUser.isConnected || UserModel.currentUser.unifiedSearchResultsListModel.currentFetchMoreInProgressProviderId - isSearchInProgress: UserModel.currentUser.unifiedSearchResultsListModel.isSearchInProgress - onTextEdited: { UserModel.currentUser.unifiedSearchResultsListModel.searchTerm = trayWindowUnifiedSearchInputContainer.text } - onClearText: { UserModel.currentUser.unifiedSearchResultsListModel.searchTerm = "" } - } - - SesErrorBox { - id: unifiedSearchResultsErrorLabel - visible: UserModel.currentUser.unifiedSearchResultsListModel.errorString && - !unifiedSearchResultsListView.visible && - !UserModel.currentUser.unifiedSearchResultsListModel.isSearchInProgress && - !UserModel.currentUser.unifiedSearchResultsListModel.currentFetchMoreInProgressProviderId - text: UserModel.currentUser.unifiedSearchResultsListModel.errorString - anchors.top: trayWindowUnifiedSearchInputContainer.bottom - anchors.left: trayWindowMainItem.left - anchors.right: trayWindowMainItem.right - anchors.margins: Style.trayHorizontalMargin - } - - UnifiedSearchResultNothingFound { - id: unifiedSearchResultNothingFound - - anchors.top: trayWindowUnifiedSearchInputContainer.bottom - anchors.left: trayWindowMainItem.left - anchors.right: trayWindowMainItem.right - anchors.topMargin: Style.trayHorizontalMargin - - text: UserModel.currentUser.unifiedSearchResultsListModel.searchTerm - - property bool isSearchRunning: UserModel.currentUser.unifiedSearchResultsListModel.isSearchInProgress - property bool waitingForSearchTermEditEnd: UserModel.currentUser.unifiedSearchResultsListModel.waitingForSearchTermEditEnd - property bool isSearchResultsEmpty: unifiedSearchResultsListView.count === 0 - property bool nothingFound: text && isSearchResultsEmpty && !UserModel.currentUser.unifiedSearchResultsListModel.errorString - - visible: !isSearchRunning && !waitingForSearchTermEditEnd && nothingFound - } - - Loader { - id: unifiedSearchResultsListViewSkeletonLoader - - anchors.top: trayWindowUnifiedSearchInputContainer.bottom - anchors.left: trayWindowMainItem.left - anchors.right: trayWindowMainItem.right - anchors.bottom: trayWindowMainItem.bottom - anchors.margins: controlRoot.padding - - active: !unifiedSearchResultNothingFound.visible && - !unifiedSearchResultsListView.visible && - !UserModel.currentUser.unifiedSearchResultsListModel.errorString && - UserModel.currentUser.unifiedSearchResultsListModel.searchTerm - - sourceComponent: UnifiedSearchResultItemSkeletonContainer { - anchors.fill: parent - spacing: unifiedSearchResultsListView.spacing - animationRectangleWidth: trayWindow.width - } - } - - ScrollView { - id: controlRoot - contentWidth: availableWidth - - ScrollBar.horizontal.policy: ScrollBar.AlwaysOff - - data: WheelHandler { - target: controlRoot.contentItem - } - visible: unifiedSearchResultsListView.count > 0 - - anchors.top: trayWindowUnifiedSearchInputContainer.bottom - anchors.left: trayWindowMainItem.left - anchors.right: trayWindowMainItem.right - anchors.bottom: trayWindowMainItem.bottom - - ListView { - id: unifiedSearchResultsListView - spacing: 4 - clip: true - - keyNavigationEnabled: true - - reuseItems: true - - Accessible.role: Accessible.List - Accessible.name: qsTr("Unified search results list") - - model: UserModel.currentUser.unifiedSearchResultsListModel - - delegate: UnifiedSearchResultListItem { - width: unifiedSearchResultsListView.width - isSearchInProgress: unifiedSearchResultsListView.model.isSearchInProgress - currentFetchMoreInProgressProviderId: unifiedSearchResultsListView.model.currentFetchMoreInProgressProviderId - fetchMoreTriggerClicked: unifiedSearchResultsListView.model.fetchMoreTriggerClicked - resultClicked: unifiedSearchResultsListView.model.resultClicked - ListView.onPooled: isPooled = true - ListView.onReused: isPooled = false - } - - section.property: "providerName" - section.criteria: ViewSection.FullString - section.delegate: UnifiedSearchResultSectionItem { - width: unifiedSearchResultsListView.width - } - } - } - - SyncStatus { - id: syncStatus - - visible: !trayWindowMainItem.isUnifiedSearchActive - - anchors.top: trayWindowUnifiedSearchInputContainer.bottom - anchors.left: trayWindowMainItem.left - anchors.right: trayWindowMainItem.right - } - - Loader { - id: newActivitiesButtonLoader - - anchors.top: activityList.top - anchors.topMargin: 5 - anchors.horizontalCenter: activityList.horizontalCenter - - width: Style.newActivitiesButtonWidth - height: Style.newActivitiesButtonHeight - - z: 1 - - active: false - - sourceComponent: CustomButton { - id: newActivitiesButton - hoverEnabled: true - padding: Style.smallSpacing - - textColor: Style.currentUserHeaderTextColor - textColorHovered: Style.currentUserHeaderTextColor - bgNormalColor: Qt.lighter(bgHoverColor, 1.25) - bgHoverColor: Style.currentUserHeaderColor - bgNormalOpacity: Style.newActivitiesBgNormalOpacity - bgHoverOpacity: Style.newActivitiesBgHoverOpacity - - anchors.fill: parent - - text: qsTr("New activities") - - icon.source: "image://svgimage-custom-color/expand-less-black.svg" + "/" + Style.currentUserHeaderTextColor - icon.width: Style.activityLabelBaseWidth - icon.height: Style.activityLabelBaseWidth - - onClicked: { - activityList.scrollToTop(); - newActivitiesButtonLoader.active = false - } - - Timer { - id: newActivitiesButtonDisappearTimer - interval: Style.newActivityButtonDisappearTimeout - running: newActivitiesButtonLoader.active && !newActivitiesButton.hovered - repeat: false - onTriggered: fadeoutActivitiesButtonDisappear.running = true - } - - OpacityAnimator { - id: fadeoutActivitiesButtonDisappear - target: newActivitiesButton; - from: 1; - to: 0; - duration: Style.newActivityButtonDisappearFadeTimeout - loops: 1 - running: false - onFinished: newActivitiesButtonLoader.active = false - } - } - } - - ActivityList { - id: activityList - visible: !trayWindowMainItem.isUnifiedSearchActive - anchors.top: syncStatus.bottom - anchors.left: trayWindowMainItem.left - anchors.right: trayWindowMainItem.right - anchors.bottom: trayWindowMainItem.bottom - - activeFocusOnTab: true - model: activityModel - onOpenFile: Qt.openUrlExternally(filePath); - onActivityItemClicked: { - model.slotTriggerDefaultAction(index) - } - Connections { - target: activityModel - onInteractiveActivityReceived: { - if (!activityList.atYBeginning) { - newActivitiesButtonLoader.active = true; - } - } - } - } - } // Item trayWindowMainItem -} From af15e0ba360ad7f297152c8d6fa1345ffb9e176f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Christopher=20H=C3=A4tty?= Date: Thu, 30 Jan 2025 12:12:59 +0100 Subject: [PATCH 076/371] SES-299 Fixed double icon --- src/gui/tray/TrayFoldersMenuButton.qml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/gui/tray/TrayFoldersMenuButton.qml b/src/gui/tray/TrayFoldersMenuButton.qml index a3d9073145fce..8572b59603b2d 100644 --- a/src/gui/tray/TrayFoldersMenuButton.qml +++ b/src/gui/tray/TrayFoldersMenuButton.qml @@ -72,7 +72,7 @@ HeaderButton { } - Item { + contentItem: Item { id: rootContent Image { From c99ed3cc3d0fe5c44a33c9c94902db01f4b9b47d Mon Sep 17 00:00:00 2001 From: Emil Bohleber Date: Thu, 30 Jan 2025 13:44:57 +0100 Subject: [PATCH 077/371] SES-293 remove quotes and prevent double escaped space --- src/gui/CMakeLists.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/gui/CMakeLists.txt b/src/gui/CMakeLists.txt index 15a84e540acc8..3aac15f49ac68 100644 --- a/src/gui/CMakeLists.txt +++ b/src/gui/CMakeLists.txt @@ -792,7 +792,7 @@ if(BUILD_OWNCLOUD_OSX_BUNDLE AND NOT BUILD_LIBRARIES_ONLY) "$/../.." -qmldir=${CMAKE_SOURCE_DIR}/src/gui -always-overwrite - -executable="$/${cmd_NAME}" + -executable=$/${cmd_NAME} ${NO_STRIP} COMMAND "${CMAKE_COMMAND}" -E rm -rf "${BIN_OUTPUT_DIRECTORY}/${OWNCLOUD_OSX_BUNDLE}/Contents/PlugIns/bearer" From ea774a345b81e9bc71660da3b53c9fdb82a30730 Mon Sep 17 00:00:00 2001 From: Kevin Beraz Date: Thu, 30 Jan 2025 16:33:11 +0100 Subject: [PATCH 078/371] SES-291 increase margins and fontweight --- src/gui/generalsettings.cpp | 2 +- src/gui/generalsettings.ui | 12 +++++++++--- 2 files changed, 10 insertions(+), 4 deletions(-) diff --git a/src/gui/generalsettings.cpp b/src/gui/generalsettings.cpp index a9665f938b794..c1690278f5f2a 100644 --- a/src/gui/generalsettings.cpp +++ b/src/gui/generalsettings.cpp @@ -728,7 +728,7 @@ void GeneralSettings::customizeStyle() QStringLiteral("QGroupBox { border: %1; font-size: %2; font-weight: %3; color: %4; }").arg( Theme::instance()->systemPalette()["base"].value().name(), IonosTheme::settingsTitleSize(), - IonosTheme::settingsTitleWeight500(), + IonosTheme::settingsTitleWeight600(), IonosTheme::black() ) ); diff --git a/src/gui/generalsettings.ui b/src/gui/generalsettings.ui index 2816d9bb004fc..234888ab72e8e 100644 --- a/src/gui/generalsettings.ui +++ b/src/gui/generalsettings.ui @@ -38,9 +38,15 @@ + + + 250 + 0 + + - 3 + 32 @@ -101,7 +107,7 @@ - 3 + 24 @@ -357,7 +363,7 @@ - 3 + 32 From 8e7f6bd0eb8f29ec80324774c74e22ea2ca2c91b Mon Sep 17 00:00:00 2001 From: Emil Bohleber Date: Thu, 30 Jan 2025 17:32:50 +0100 Subject: [PATCH 079/371] SES-306 color tray resolve conflict button black --- src/gui/tray/ActivityItemActions.qml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/gui/tray/ActivityItemActions.qml b/src/gui/tray/ActivityItemActions.qml index 2aeaf4e857e68..795acfe9b1edd 100644 --- a/src/gui/tray/ActivityItemActions.qml +++ b/src/gui/tray/ActivityItemActions.qml @@ -43,7 +43,7 @@ Repeater { onClicked: isTalkReplyButton ? root.showReplyField() : root.triggerAction(model.index) - textColor: palette.brightText + textColor: palette.buttonText bgColor: Style.sesActionPressed bgNormalOpacity: 1.0 bgHoverOpacity: Style.hoverOpacity From 984c2897c689bc3552a081e90836835d47bdcce3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Christopher=20H=C3=A4tty?= Date: Fri, 31 Jan 2025 13:25:34 +0100 Subject: [PATCH 080/371] SES-301 Fixed Menu sizes --- src/gui/tray/TrayWindowAccountMenu.qml | 8 +++++++ src/gui/tray/UserLine.qml | 33 +++++++++++++++++--------- 2 files changed, 30 insertions(+), 11 deletions(-) diff --git a/src/gui/tray/TrayWindowAccountMenu.qml b/src/gui/tray/TrayWindowAccountMenu.qml index 68166abbf12ed..96918ed5869a7 100644 --- a/src/gui/tray/TrayWindowAccountMenu.qml +++ b/src/gui/tray/TrayWindowAccountMenu.qml @@ -53,6 +53,14 @@ Button { Menu { id: accountMenu + bottomInset: 0 + topInset: 0 + rightInset: 0 + leftInset: 0 + rightPadding: 0 + leftPadding: 0 + topPadding: 0 + bottomPadding: 0 // x coordinate grows towards the right // y coordinate grows towards the bottom x: (currentAccountButton.x + 2) diff --git a/src/gui/tray/UserLine.qml b/src/gui/tray/UserLine.qml index 917da63b6c5fc..a65293140ac97 100644 --- a/src/gui/tray/UserLine.qml +++ b/src/gui/tray/UserLine.qml @@ -124,25 +124,26 @@ AbstractButton { radius: width / 2 } - AutoSizingMenu { + Menu { id: userMoreButtonMenu + width: Style.sesAccountMenuWidth + height: Math.min(implicitHeight, maxMenuHeight) closePolicy: Menu.CloseOnPressOutsideParent | Menu.CloseOnEscape + bottomInset: 0 + topInset: 0 + rightInset: 0 + leftInset: 0 + rightPadding: 0 + leftPadding: 0 + topPadding: 0 + bottomPadding: 0 + background: Rectangle { radius: Style.sesCornerRadius border.color: Style.sesBorderColor } - MenuItem { - visible: false - height: visible ? implicitHeight : 0 - text: qsTr("Set status") - font: root.font - palette.windowText: Style.ncTextColor - hoverEnabled: true - onClicked: showUserStatusSelector(index) - } - MenuItem { id: logInOutButton @@ -180,6 +181,16 @@ AbstractButton { Accessible.name: model.isConnected ? qsTr("Log out") : qsTr("Log in") } + MenuItem { + visible: false + height: visible ? implicitHeight : 0 + text: qsTr("Set status") + font: root.font + palette.windowText: Style.ncTextColor + hoverEnabled: true + onClicked: showUserStatusSelector(index) + } + MenuItem { property bool isHovered: removeAccountButton.hovered || removeAccountButton.visualFocus From 1beef14f5080f8d6885003ffaa8a30b904a4a6a9 Mon Sep 17 00:00:00 2001 From: Kevin Beraz Date: Fri, 31 Jan 2025 16:38:36 +0100 Subject: [PATCH 081/371] SES-297 apply font configuration for primary button also on windows --- src/gui/selectivesyncdialog.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/gui/selectivesyncdialog.cpp b/src/gui/selectivesyncdialog.cpp index d266d3a966a3b..030331e977b9c 100644 --- a/src/gui/selectivesyncdialog.cpp +++ b/src/gui/selectivesyncdialog.cpp @@ -560,7 +560,6 @@ void SelectiveSyncDialog::init(const AccountPtr &account) QPushButton *button = nullptr; button = buttonBox->addButton(QDialogButtonBox::Cancel); -#ifdef Q_OS_MAC _okButton->setStyleSheet( _okButton->styleSheet() + QStringLiteral("QPushButton { %1; } ").arg( IonosTheme::fontConfigurationCss( @@ -572,6 +571,7 @@ void SelectiveSyncDialog::init(const AccountPtr &account) ) ); +#ifdef Q_OS_MAC button->setStyleSheet( button->styleSheet() + QStringLiteral("QPushButton { %1; } ").arg( IonosTheme::fontConfigurationCss( From dd176102030d85f3941ca0f88e8ece85f5b5772b Mon Sep 17 00:00:00 2001 From: Emil Bohleber Date: Fri, 31 Jan 2025 17:15:36 +0100 Subject: [PATCH 082/371] SES-306 remove button color sets so all pill buttons look the same --- src/gui/ResolveConflictsDialog.qml | 1 - src/gui/filedetails/ShareDetailsPage.qml | 2 -- src/gui/tray/ActivityItemActions.qml | 1 - src/gui/tray/SyncStatus.qml | 1 - 4 files changed, 5 deletions(-) diff --git a/src/gui/ResolveConflictsDialog.qml b/src/gui/ResolveConflictsDialog.qml index 90889d0bfe5b2..91f748ee7be18 100644 --- a/src/gui/ResolveConflictsDialog.qml +++ b/src/gui/ResolveConflictsDialog.qml @@ -157,7 +157,6 @@ ApplicationWindow { font.pixelSize: pixelSize font.weight: fontWeight text: qsTr("Resolve conflicts") - textColor: palette.brightText bgColor: Style.sesActionPressed bgNormalOpacity: 1.0 diff --git a/src/gui/filedetails/ShareDetailsPage.qml b/src/gui/filedetails/ShareDetailsPage.qml index fe57d8afeb338..aa82b6832b726 100644 --- a/src/gui/filedetails/ShareDetailsPage.qml +++ b/src/gui/filedetails/ShareDetailsPage.qml @@ -798,7 +798,6 @@ Page { font.pixelSize: pixelSize font.weight: fontWeight text: qsTr("Add another link") - textColor: palette.brightText bgColor: Style.sesActionPressed bgNormalOpacity: 1.0 @@ -856,7 +855,6 @@ Page { font.pixelSize: pixelSize font.weight: fontWeight text: shareLinkCopied ? qsTr("Share link copied!") : qsTr("Copy share link") - textColor: palette.brightText bgColor: Style.sesActionPressed bgNormalOpacity: 1.0 diff --git a/src/gui/tray/ActivityItemActions.qml b/src/gui/tray/ActivityItemActions.qml index 795acfe9b1edd..269bdd6d86f87 100644 --- a/src/gui/tray/ActivityItemActions.qml +++ b/src/gui/tray/ActivityItemActions.qml @@ -43,7 +43,6 @@ Repeater { onClicked: isTalkReplyButton ? root.showReplyField() : root.triggerAction(model.index) - textColor: palette.buttonText bgColor: Style.sesActionPressed bgNormalOpacity: 1.0 bgHoverOpacity: Style.hoverOpacity diff --git a/src/gui/tray/SyncStatus.qml b/src/gui/tray/SyncStatus.qml index c67001be79c46..f8479c3da169e 100644 --- a/src/gui/tray/SyncStatus.qml +++ b/src/gui/tray/SyncStatus.qml @@ -106,7 +106,6 @@ RowLayout { font.weight: fontWeight text: qsTr("Resolve conflicts") - textColor: palette.brightText bgColor: Style.sesActionPressed bgNormalOpacity: 1.0 bgHoverOpacity: Style.hoverOpacity From a4c36bedb8096585f2115ab07b65c602529630fa Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Christopher=20H=C3=A4tty?= Date: Mon, 3 Feb 2025 08:07:09 +0100 Subject: [PATCH 083/371] SES-302 Removed ColorOverlay and restored Caret - Arrow --- src/gui/tray/TrayWindowAccountMenu.qml | 30 +++++++++++--------------- 1 file changed, 12 insertions(+), 18 deletions(-) diff --git a/src/gui/tray/TrayWindowAccountMenu.qml b/src/gui/tray/TrayWindowAccountMenu.qml index 96918ed5869a7..f1199de0104af 100644 --- a/src/gui/tray/TrayWindowAccountMenu.qml +++ b/src/gui/tray/TrayWindowAccountMenu.qml @@ -65,7 +65,7 @@ Button { // y coordinate grows towards the bottom x: (currentAccountButton.x + 2) y: (currentAccountButton.y + Style.trayWindowHeaderHeight + 2) - + width: Style.sesAccountMenuWidth height: Math.min(implicitHeight, maxMenuHeight) closePolicy: Menu.CloseOnPressOutsideParent | Menu.CloseOnEscape @@ -90,7 +90,7 @@ Button { model: accountMenu.contentModel interactive: true clip: true - currentIndex: accountMenu.currentIndex + currentIndex: accountMenu.currentIndex } } @@ -272,21 +272,15 @@ Button { } } - // ColorOverlay { - // cached: true - // color: Style.currentUserHeaderTextColor - // width: source.width - // height: source.height - // Layout.rightMargin: Style.sesAccountButtonRightMargin - // source: Image { - // Layout.alignment: Qt.AlignRight - // verticalAlignment: Qt.AlignBottom - // source: Style.sesChevron - // sourceSize.width: 14 - // sourceSize.height: 14 - // Accessible.role: Accessible.PopupMenu - // Accessible.name: qsTr("Account switcher and settings menu") - // } - // } + Image { + Layout.alignment: Qt.AlignRight + verticalAlignment: Qt.AlignBottom + Layout.rightMargin: Style.sesAccountButtonRightMargin + source: Style.sesChevron + sourceSize.width: 14 + sourceSize.height: 14 + Accessible.role: Accessible.PopupMenu + Accessible.name: qsTr("Account switcher and settings menu") + } } } \ No newline at end of file From 5876da6e3dac9d213e8648fa4d7eebbdde59c5c4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Christopher=20H=C3=A4tty?= Date: Mon, 3 Feb 2025 09:24:34 +0100 Subject: [PATCH 084/371] SES-302 Fixed Button Margin --- src/gui/SesComponents/SesTrayHeader.qml | 5 ++++- src/gui/tray/MainWindow.qml | 4 +--- theme/Style/Style.qml | 2 ++ 3 files changed, 7 insertions(+), 4 deletions(-) diff --git a/src/gui/SesComponents/SesTrayHeader.qml b/src/gui/SesComponents/SesTrayHeader.qml index b7f3425245f0e..c2073e8f0c2b0 100644 --- a/src/gui/SesComponents/SesTrayHeader.qml +++ b/src/gui/SesComponents/SesTrayHeader.qml @@ -16,9 +16,10 @@ import com.ionos.hidrivenext.desktopclient Rectangle { - height: Style.trayWindowHeaderHeight + height: Style.sesTrayHeaderHeight + Style.sesHeaderTopMargin * 2 color: Style.sesWhite radius: 0.0 + clip: true RowLayout { id: trayWindowHeaderLayout @@ -26,6 +27,8 @@ Rectangle { anchors.fill: parent anchors.leftMargin: Style.sesTrayHeaderMargin anchors.rightMargin: Style.sesTrayHeaderMargin + anchors.topMargin: Style.sesHeaderTopMargin + anchors.bottomMargin: Style.sesHeaderTopMargin TrayWindowAccountMenu{ Layout.preferredWidth: Style.sesAccountButtonWidth diff --git a/src/gui/tray/MainWindow.qml b/src/gui/tray/MainWindow.qml index cf2e3ef225f69..0191f982a412e 100644 --- a/src/gui/tray/MainWindow.qml +++ b/src/gui/tray/MainWindow.qml @@ -280,14 +280,12 @@ ApplicationWindow { anchors.left: trayWindowLogoHeaderBackground.left anchors.right: trayWindowLogoHeaderBackground.right anchors.top: trayWindowLogoHeaderBackground.bottom - anchors.topMargin: Style.sesHeaderTopMargin } Rectangle { anchors.left: parent.left anchors.right: parent.right anchors.top: trayWindowHeaderBackground.bottom - anchors.topMargin: Style.sesHeaderTopMargin implicitHeight: 1 color: Style.sesBorderColor } @@ -436,7 +434,7 @@ ApplicationWindow { anchors.bottom: syncStatus.bottom height: 1 color: palette.dark - visible: !trayWindowMainItem.isUnifiedSearchActive + visible: !trayWindowMainItem.isUnifiedSearchActive & false } Loader { diff --git a/theme/Style/Style.qml b/theme/Style/Style.qml index 18c63173dbd30..50e73d05a8953 100644 --- a/theme/Style/Style.qml +++ b/theme/Style/Style.qml @@ -293,6 +293,8 @@ QtObject { property int sesAccountButtonLeftMargin: 19 property int sesHeaderButtonWidth: 84 property int sesHeaderButtonHeight: 68 + property int sesTrayHeaderHeight: 68 + property int sesAccountMenuWidth: sesAccountButtonWidth - 8 property int sesAccountLabelWidth: 157 property int sesTrayHeaderMargin: 11 From 8fbfde48f3b401e7f99dca0e31a9d2b6655dc3d9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Christopher=20H=C3=A4tty?= Date: Mon, 3 Feb 2025 09:24:52 +0100 Subject: [PATCH 085/371] SES-302 Fixed wrong Color --- src/gui/tray/MainWindow.qml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/gui/tray/MainWindow.qml b/src/gui/tray/MainWindow.qml index 0191f982a412e..b4da47d68587b 100644 --- a/src/gui/tray/MainWindow.qml +++ b/src/gui/tray/MainWindow.qml @@ -200,7 +200,7 @@ ApplicationWindow { radius: Systray.useNormalWindow ? 0.0 : Style.trayWindowRadius border.width: Style.trayWindowBorderWidth border.color: palette.dark - color: palette.window + color: palette.base } property var folderAccountState: ({}) From eaa3377cdf6751d1029e4bbbf31838de20f9ccdf Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Christopher=20H=C3=A4tty?= Date: Mon, 3 Feb 2025 15:08:11 +0100 Subject: [PATCH 086/371] SES-297 Fixed Scrollbar by using Palette --- src/gui/selectivesyncdialog.cpp | 24 ++++++++++++++++++-- src/gui/selectivesyncdialog.h | 2 +- src/gui/wizard/owncloudadvancedsetuppage.cpp | 2 -- 3 files changed, 23 insertions(+), 5 deletions(-) diff --git a/src/gui/selectivesyncdialog.cpp b/src/gui/selectivesyncdialog.cpp index 030331e977b9c..23cc4ff08499b 100644 --- a/src/gui/selectivesyncdialog.cpp +++ b/src/gui/selectivesyncdialog.cpp @@ -560,6 +560,14 @@ void SelectiveSyncDialog::init(const AccountPtr &account) QPushButton *button = nullptr; button = buttonBox->addButton(QDialogButtonBox::Cancel); + connect(button, &QAbstractButton::clicked, this, &QDialog::reject); + + layout->addWidget(buttonBox); + customizeStyle(); +} + +void SelectiveSyncDialog::customizeStyle() +{ _okButton->setStyleSheet( _okButton->styleSheet() + QStringLiteral("QPushButton { %1; } ").arg( IonosTheme::fontConfigurationCss( @@ -586,9 +594,21 @@ void SelectiveSyncDialog::init(const AccountPtr &account) buttonBox->layout()->setSpacing(24); #endif - connect(button, &QAbstractButton::clicked, this, &QDialog::reject); - layout->addWidget(buttonBox); + // Set background colors + auto dialogPalette = palette(); + const auto backgroundColor = QColor(IonosTheme::dialogBackgroundColor()); + + // Set Color of upper part + dialogPalette.setColor(QPalette::Base, backgroundColor); + + // Set Color of lower part + dialogPalette.setColor(QPalette::Window, backgroundColor); + + // Set separator color + dialogPalette.setColor(QPalette::Mid, backgroundColor); + + setPalette(dialogPalette); } void SelectiveSyncDialog::accept() diff --git a/src/gui/selectivesyncdialog.h b/src/gui/selectivesyncdialog.h index 92f45f3d7e5e2..2b0a476f5dd80 100644 --- a/src/gui/selectivesyncdialog.h +++ b/src/gui/selectivesyncdialog.h @@ -110,7 +110,7 @@ class SelectiveSyncDialog : public QDialog private: void init(const AccountPtr &account); - + void customizeStyle(); SelectiveSyncWidget *_selectiveSync = nullptr; Folder *_folder; diff --git a/src/gui/wizard/owncloudadvancedsetuppage.cpp b/src/gui/wizard/owncloudadvancedsetuppage.cpp index 45eb5d7ea6151..fa8f79c905ed2 100644 --- a/src/gui/wizard/owncloudadvancedsetuppage.cpp +++ b/src/gui/wizard/owncloudadvancedsetuppage.cpp @@ -532,7 +532,6 @@ void OwncloudAdvancedSetupPage::slotSelectiveSyncClicked() AccountPtr acc = dynamic_cast(wizard())->account(); auto *dlg = new SelectiveSyncDialog(acc, _remoteFolder, _selectiveSyncBlacklist, this); dlg->setAttribute(Qt::WA_DeleteOnClose); - dlg->setStyleSheet(QStringLiteral("background-color: %1;").arg(IonosTheme::dialogBackgroundColor())); connect(dlg, &SelectiveSyncDialog::finished, this, [this, dlg]{ const int result = dlg->result(); @@ -678,7 +677,6 @@ void OwncloudAdvancedSetupPage::customizeStyle() _ui.lVirtualFileSync->setContentsMargins(0, 0, 0, 0); _ui.horizontalLayout_8->setContentsMargins(32, 0, 0, 0); _ui.horizontalLayout_10->setContentsMargins(0, 8, 0, 0); - // _ui.horizontalLayout_10->setMargin(1); _ui.wSyncStrategy->setSpacing(16); _ui.wSyncStrategy->setContentsMargins(0, 0, 0, 0); From 66d0592c6acbd3cdfd0860cccdaa065a480ee526 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Christopher=20H=C3=A4tty?= Date: Mon, 3 Feb 2025 15:08:32 +0100 Subject: [PATCH 087/371] SES-297 Fixed Clipped border of TreeView --- src/gui/selectivesyncdialog.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/gui/selectivesyncdialog.cpp b/src/gui/selectivesyncdialog.cpp index 23cc4ff08499b..1c05860473516 100644 --- a/src/gui/selectivesyncdialog.cpp +++ b/src/gui/selectivesyncdialog.cpp @@ -74,7 +74,7 @@ SelectiveSyncWidget::SelectiveSyncWidget(AccountPtr account, QWidget *parent) _loading = new QLabel(tr("Loading …"), _folderTree); auto layout = new QVBoxLayout(this); - layout->setContentsMargins(0, 0, 0, 0); + layout->setContentsMargins(1, 2, 1, 1); auto header = new QLabel(this); header->setText(tr("Deselect remote folders you do not wish to synchronize.")); From 8ce02b831f4262e2fec5fcfe6797695cba5a72c9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Christopher=20H=C3=A4tty?= Date: Tue, 4 Feb 2025 07:33:02 +0100 Subject: [PATCH 088/371] SES-297 Fixed clipped text Switched to Label with automatic wordwrap and customized it --- src/gui/CMakeLists.txt | 1 + src/gui/clickablelabel.h | 28 +++++++++++++++++++++++++ src/gui/folderwizard.cpp | 45 +++++++++++++++++++++++++++++++--------- src/gui/folderwizard.h | 6 ++++++ src/libsync/ionostheme.h | 8 +++++++ 5 files changed, 78 insertions(+), 10 deletions(-) create mode 100644 src/gui/clickablelabel.h diff --git a/src/gui/CMakeLists.txt b/src/gui/CMakeLists.txt index 3aac15f49ac68..0523a365c8f64 100644 --- a/src/gui/CMakeLists.txt +++ b/src/gui/CMakeLists.txt @@ -100,6 +100,7 @@ set(client_SRCS folderwatcher.cpp folderwizard.h folderwizard.cpp + clickablelabel.h generalsettings.h generalsettings.cpp legalnotice.h diff --git a/src/gui/clickablelabel.h b/src/gui/clickablelabel.h new file mode 100644 index 0000000000000..f0ae1628cb596 --- /dev/null +++ b/src/gui/clickablelabel.h @@ -0,0 +1,28 @@ +#ifndef CLICKABLELABEL_H +#define CLICKABLELABEL_H + +#include +#include +#include + +class ClickableLabel : public QLabel { + Q_OBJECT + +public: + explicit ClickableLabel(QWidget* parent = nullptr, Qt::WindowFlags f = Qt::WindowFlags()) + : QLabel(parent, f) {} + explicit ClickableLabel(const QString &text, QWidget* parent = nullptr, Qt::WindowFlags f = Qt::WindowFlags()) + : QLabel(text, parent, f) {} +signals: + void clicked(); + +protected: + void mousePressEvent(QMouseEvent* event) override { + if (event->button() == Qt::LeftButton) { + emit clicked(); + } + QLabel::mousePressEvent(event); + } +}; + +#endif // CLICKABLELABEL_H \ No newline at end of file diff --git a/src/gui/folderwizard.cpp b/src/gui/folderwizard.cpp index 46f2a4d6b05be..21371fb28594a 100644 --- a/src/gui/folderwizard.cpp +++ b/src/gui/folderwizard.cpp @@ -38,6 +38,7 @@ #include #include #include +#include #include #include #include @@ -777,13 +778,14 @@ FolderWizardSelectiveSync::FolderWizardSelectiveSync(const AccountPtr &account) _virtualFilesCheckBox->setChecked(bestAvailableVfsMode() == Vfs::WindowsCfApi); _virtualFilesCheckBox->setStyleSheet("margin-top: 5px;"); - layout->addWidget(_virtualFilesCheckBox); + QFont f; + QFont::Weight w; + f.setFamily(IonosTheme::settingsFont()); + f.setWeight( QFont::Weight::Normal); + f.setPixelSize(IonosTheme::settingsTextPixel()); + _virtualFilesCheckBox->setFont(f); - _virtualFilesCheckBox->setStyleSheet(IonosTheme::fontConfigurationCss( - IonosTheme::settingsFont(), - IonosTheme::settingsTextSize(), - IonosTheme::settingsTextWeight(), - IonosTheme::titleColor())); + layout->addLayout(_virtualFilesHBox); } _selectiveSync->setStyleSheet(IonosTheme::fontConfigurationCss( @@ -806,12 +808,35 @@ FolderWizardSelectiveSync::FolderWizardSelectiveSync(const AccountPtr &account) IonosTheme::folderWizardSubtitleColor())); _uiSelectiveSync.subTitle->setProperty("text", tr("Step 3 of 3: Selektive Synchronisation")); - } FolderWizardSelectiveSync::~FolderWizardSelectiveSync() = default; +void FolderWizardSelectiveSync::setupVirtualFilesCheckbox(){ + _virtualFilesHBox = new QHBoxLayout(); + _virtualFilesHBox->setSpacing(5); + _virtualFilesHBox->setAlignment(Qt::AlignLeft); + _virtualFilesCheckBox = new QCheckBox(); + _virtualFilesCheckBox->setSizePolicy(QSizePolicy::Maximum, QSizePolicy::Preferred); + + _virtualFilesCheckBoxLabel = new ClickableLabel(tr("Use virtual files instead of downloading content immediately %1") + .arg(bestAvailableVfsMode() == Vfs::WindowsCfApi ? QString() : tr("(experimental)"))); + _virtualFilesCheckBoxLabel->setWordWrap(true); + _virtualFilesCheckBoxLabel->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Preferred); + + connect(_virtualFilesCheckBoxLabel, &ClickableLabel::clicked, this, &FolderWizardSelectiveSync::virtualFilesCheckboxLabelClicked); + + _virtualFilesHBox->addWidget(_virtualFilesCheckBox, 0); + _virtualFilesHBox->addWidget(_virtualFilesCheckBoxLabel, 1); + + _virtualFilesHBox->setAlignment(_virtualFilesCheckBox, Qt::AlignVCenter); +} + +void FolderWizardSelectiveSync::virtualFilesCheckboxLabelClicked(){ + _virtualFilesCheckBox->setChecked(!_virtualFilesCheckBox->isChecked()); +} + void FolderWizardSelectiveSync::initializePage() { QString targetPath = wizard()->property("targetPath").toString(); @@ -832,11 +857,11 @@ void FolderWizardSelectiveSync::initializePage() if (Utility::isPathWindowsDrivePartitionRoot(wizard()->field(QStringLiteral("sourceFolder")).toString())) { _virtualFilesCheckBox->setChecked(false); _virtualFilesCheckBox->setEnabled(false); - _virtualFilesCheckBox->setText(tr("Virtual files are not supported for Windows partition roots as local folder. Please choose a valid subfolder under drive letter.")); + _virtualFilesCheckBoxLabel->setText(tr("Virtual files are not supported for Windows partition roots as local folder. Please choose a valid subfolder under drive letter.")); } else { _virtualFilesCheckBox->setChecked(bestAvailableVfsMode() == Vfs::WindowsCfApi); _virtualFilesCheckBox->setEnabled(true); - _virtualFilesCheckBox->setText(tr("Use virtual files instead of downloading content immediately %1").arg(bestAvailableVfsMode() == Vfs::WindowsCfApi ? QString() : tr("(experimental)"))); + _virtualFilesCheckBoxLabel->setText(tr("Use virtual files instead of downloading content immediately %1").arg(bestAvailableVfsMode() == Vfs::WindowsCfApi ? QString() : tr("(experimental)"))); if (Theme::instance()->enforceVirtualFilesSyncFolder()) { _virtualFilesCheckBox->setChecked(true); @@ -973,7 +998,7 @@ void FolderWizard::customizeStyle() void FolderWizard::adjustWizardSize() { - setFixedSize(QSize(576, 704)); + setFixedSize(QSize(IonosTheme::wizardFixedWidth(), IonosTheme::wizardFixedHeight())); } } // end namespace diff --git a/src/gui/folderwizard.h b/src/gui/folderwizard.h index 5d27eb367156b..12a8f97cc2bcc 100644 --- a/src/gui/folderwizard.h +++ b/src/gui/folderwizard.h @@ -21,6 +21,7 @@ #include "folder.h" #include "accountfwd.h" +#include "clickablelabel.h" #include "ui_folderwizardsourcepage.h" #include "ui_folderwizardtargetpage.h" @@ -147,11 +148,16 @@ class FolderWizardSelectiveSync : public QWizardPage private slots: void virtualFilesCheckboxClicked(); + void virtualFilesCheckboxLabelClicked(); private: + void setupVirtualFilesCheckbox(); + Ui_FolderWizardSelectiveSync _uiSelectiveSync{}; SelectiveSyncWidget *_selectiveSync; + QHBoxLayout *_virtualFilesHBox = nullptr; QCheckBox *_virtualFilesCheckBox = nullptr; + ClickableLabel *_virtualFilesCheckBoxLabel = nullptr; }; /** diff --git a/src/libsync/ionostheme.h b/src/libsync/ionostheme.h index b5e45d137610d..ce19ee092b5e3 100644 --- a/src/libsync/ionostheme.h +++ b/src/libsync/ionostheme.h @@ -104,6 +104,14 @@ class IonosTheme { return 740; } + static int wizardFixedWidth() { + return 576; + } + + static int wizardFixedHeight() { + return 704; + } + static int LoginPageSpacer() { return 45; } From f62f5e493cf8415ba35094360b5d6a56d6edc728 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Christopher=20H=C3=A4tty?= Date: Tue, 4 Feb 2025 13:18:13 +0100 Subject: [PATCH 089/371] SES-308 Format document --- src/gui/folderwizardsourcepage.ui | 322 +++++++++++++++--------------- 1 file changed, 161 insertions(+), 161 deletions(-) diff --git a/src/gui/folderwizardsourcepage.ui b/src/gui/folderwizardsourcepage.ui index 81762d63d6a43..0382a0876aebb 100644 --- a/src/gui/folderwizardsourcepage.ui +++ b/src/gui/folderwizardsourcepage.ui @@ -1,163 +1,163 @@ - FolderWizardSourcePage - - - - 0 - 0 - 639 - 460 - - - - Form - - - - - - 20 - - - 0 - - - 20 - - - 0 - - - - - font: 18pt bold; - - - Add Folder Sync - - - Qt::PlainText - - - false - - - - - - - color: rgb(16, 73, 150); font: bold; - - - Step 1 of 3: Select local folder - - - Qt::PlainText - - - false - - - - - - - Qt::Vertical - - - QSizePolicy::Preferred - - - - 20 - 20 - - - - - - - - - 0 - 0 - - - - Select a folder on your hard drive that should be permanetly connected to your %1. All files and subfolders are automatically uploaded and synchronized - - - Qt::PlainText - - - true - - - - - - - Qt::Vertical - - - QSizePolicy::Preferred - - - - 20 - 15 - - - - - - - - Qt::NoContextMenu - - - - - - - - 85 - 16777215 - - - - &Choose - - - - - - - true - - - - - - - - - Qt::Vertical - - - QSizePolicy::Preferred - - - - 349 - 360 - - - - - - - - - + FolderWizardSourcePage + + + + 0 + 0 + 639 + 460 + + + + Form + + + + + + 20 + + + 0 + + + 20 + + + 0 + + + + + font: 18pt bold; + + + Add Folder Sync + + + Qt::PlainText + + + false + + + + + + + color: rgb(16, 73, 150); font: bold; + + + Step 1 of 3: Select local folder + + + Qt::PlainText + + + false + + + + + + + Qt::Vertical + + + QSizePolicy::Preferred + + + + 20 + 20 + + + + + + + + + 0 + 0 + + + + Select a folder on your hard drive that should be permanetly connected to your %1. All files and subfolders are automatically uploaded and synchronized + + + Qt::PlainText + + + true + + + + + + + Qt::Vertical + + + QSizePolicy::Preferred + + + + 20 + 15 + + + + + + + + Qt::NoContextMenu + + + + + + + + 85 + 16777215 + + + + &Choose + + + + + + + true + + + + + + + + + Qt::Vertical + + + QSizePolicy::Preferred + + + + 349 + 360 + + + + + + + + + \ No newline at end of file From f95056fcc9409e99363812a8709206cc2ecb3dc7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Christopher=20H=C3=A4tty?= Date: Tue, 4 Feb 2025 13:21:47 +0100 Subject: [PATCH 090/371] SES-308 Fixed Button Size Remove MAximum Size to let Button adjust to Text, Added Horizontal Layout with Spacer to prohibit extending to much --- src/gui/folderwizardsourcepage.ui | 31 ++++++++++++++++++++----------- 1 file changed, 20 insertions(+), 11 deletions(-) diff --git a/src/gui/folderwizardsourcepage.ui b/src/gui/folderwizardsourcepage.ui index 0382a0876aebb..7c738c058e209 100644 --- a/src/gui/folderwizardsourcepage.ui +++ b/src/gui/folderwizardsourcepage.ui @@ -119,17 +119,26 @@ - - - - 85 - 16777215 - - - - &Choose - - + + + + + + &Choose + + + + + + + + 0 + 0 + + + + + From 3187e010a34290393db41c1798dabd82d6099e8f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Christopher=20H=C3=A4tty?= Date: Tue, 4 Feb 2025 13:47:00 +0100 Subject: [PATCH 091/371] SES-309 Increased Size to fixed clipped icon --- src/gui/sessnackbar.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/gui/sessnackbar.cpp b/src/gui/sessnackbar.cpp index 52c4883e990f9..00b22991e3589 100644 --- a/src/gui/sessnackbar.cpp +++ b/src/gui/sessnackbar.cpp @@ -34,7 +34,7 @@ namespace OCC { m_iconLabel.setObjectName("sesSnackBarIcon"); m_iconLabel.setSizePolicy(QSizePolicy::Fixed, QSizePolicy::Fixed); - m_iconLabel.setFixedSize(16, 16); + m_iconLabel.setFixedSize(24, 24); layout->addWidget(&m_captionLabel); layout->addSpacerItem(new QSpacerItem(8, 0, QSizePolicy::Fixed, QSizePolicy::Fixed)); From b3acc65824fdf359138c52914a4f20731b8c4d6e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Christopher=20H=C3=A4tty?= Date: Thu, 6 Feb 2025 11:41:46 +0100 Subject: [PATCH 092/371] SES-289 Modifed Q_LOGGING_CATEGORY --- src/common/checksumcalculator.cpp | 2 +- src/common/checksums.cpp | 2 +- src/common/filesystembase.cpp | 2 +- src/common/ownsql.cpp | 2 +- src/common/remotepermissions.cpp | 2 +- src/common/shellextensionutils.cpp | 2 +- src/common/syncjournaldb.cpp | 2 +- src/common/utility.cpp | 2 +- src/csync/vio/csync_vio_local_unix.cpp | 2 +- src/csync/vio/csync_vio_local_win.cpp | 2 +- src/gui/accountmanager.cpp | 2 +- src/gui/accountsettings.cpp | 2 +- src/gui/accountsetupcommandlinemanager.cpp | 2 +- src/gui/accountsetupfromcommandlinejob.cpp | 2 +- src/gui/accountstate.cpp | 2 +- src/gui/application.cpp | 2 +- src/gui/callstatechecker.cpp | 2 +- src/gui/caseclashfilenamedialog.cpp | 2 +- src/gui/conflictsolver.cpp | 2 +- src/gui/connectionvalidator.cpp | 2 +- src/gui/creds/credentialsfactory.cpp | 2 +- src/gui/creds/flow2auth.cpp | 2 +- src/gui/creds/httpcredentialsgui.cpp | 2 +- src/gui/creds/webflowcredentials.cpp | 2 +- src/gui/editlocallyjob.cpp | 2 +- src/gui/editlocallymanager.cpp | 2 +- src/gui/editlocallyverificationjob.cpp | 2 +- src/gui/fileactivitylistmodel.cpp | 2 +- src/gui/filedetails/filedetails.cpp | 2 +- src/gui/filedetails/shareemodel.cpp | 2 +- src/gui/filedetails/sharemodel.cpp | 2 +- src/gui/filedetails/sortedsharemodel.cpp | 2 +- src/gui/filetagmodel.cpp | 2 +- src/gui/folder.cpp | 2 +- src/gui/foldercreationdialog.cpp | 2 +- src/gui/folderman.cpp | 2 +- src/gui/folderstatusmodel.cpp | 2 +- src/gui/folderwatcher.cpp | 2 +- src/gui/ga4/ganalytics_worker.cpp | 2 +- src/gui/guiutility.cpp | 2 +- src/gui/iconutils.cpp | 2 +- src/gui/lockwatcher.cpp | 2 +- src/gui/macOS/fileprovider_mac.mm | 2 +- .../macOS/fileproviderdomainmanager_mac.mm | 2 ++ .../macOS/fileproviderdomainsyncstatus_mac.mm | 2 +- src/gui/macOS/fileprovidereditlocallyjob.cpp | 2 +- src/gui/macOS/fileprovideritemmetadata_mac.mm | 2 +- .../fileprovidermaterialiseditemsmodel_mac.mm | 2 +- .../fileprovidersettingscontroller_mac.mm | 2 +- .../macOS/fileprovidersocketcontroller.cpp | 2 +- src/gui/macOS/fileprovidersocketserver.cpp | 2 +- src/gui/macOS/fileproviderutils_mac.mm | 2 +- src/gui/macOS/fileproviderxpc_mac.mm | 2 +- src/gui/macOS/fileproviderxpc_mac_utils.mm | 2 +- src/gui/navigationpanehelper.cpp | 2 +- src/gui/notificationconfirmjob.cpp | 2 +- src/gui/ocsjob.cpp | 2 +- src/gui/owncloudgui.cpp | 2 +- src/gui/proxyauthhandler.cpp | 2 +- src/gui/remotewipe.cpp | 2 +- src/gui/sharee.cpp | 2 +- src/gui/sharemanager.cpp | 2 +- src/gui/shellextensionsserver.cpp | 2 +- src/gui/socketapi/socketapi.cpp | 4 ++-- src/gui/sslbutton.cpp | 2 +- src/gui/sslerrordialog.cpp | 2 +- src/gui/syncconflictsmodel.cpp | 2 +- src/gui/systray.cpp | 2 +- src/gui/systray_mac_common.mm | 2 +- src/gui/systray_mac_usernotifications.mm | 2 +- src/gui/tray/activitylistmodel.cpp | 2 +- src/gui/tray/notificationhandler.cpp | 2 +- src/gui/tray/svgimageprovider.cpp | 2 +- src/gui/tray/syncstatussummary.cpp | 2 +- src/gui/tray/talkreply.cpp | 2 +- .../tray/unifiedsearchresultslistmodel.cpp | 2 +- src/gui/updater/updater.cpp | 2 +- src/gui/userstatusselectormodel.cpp | 2 +- src/gui/wizard/flow2authwidget.cpp | 2 +- src/gui/wizard/owncloudwizard.cpp | 2 +- src/gui/wizard/webview.cpp | 2 +- src/gui/wizard/webviewpage.cpp | 2 +- src/libsync/abstractnetworkjob.cpp | 2 +- src/libsync/accessmanager.cpp | 2 +- src/libsync/account.cpp | 2 +- src/libsync/bandwidthmanager.cpp | 2 +- .../basepropagateremotedeleteencrypted.cpp | 2 +- src/libsync/bulkpropagatorjob.cpp | 2 +- src/libsync/capabilities.cpp | 2 +- src/libsync/caseclashconflictsolver.cpp | 2 +- src/libsync/clientproxy.cpp | 2 +- src/libsync/clientsideencryption.cpp | 5 ++-- src/libsync/clientsideencryptionjobs.cpp | 7 +++--- src/libsync/clientstatusreporting.cpp | 2 +- src/libsync/clientstatusreportingcommon.cpp | 2 +- src/libsync/clientstatusreportingdatabase.cpp | 2 +- src/libsync/clientstatusreportingnetwork.cpp | 2 +- src/libsync/configfile.cpp | 2 +- src/libsync/cookiejar.cpp | 2 +- src/libsync/creds/abstractcredentials.cpp | 2 +- src/libsync/creds/httpcredentials.cpp | 2 +- src/libsync/creds/keychainchunk.cpp | 2 +- src/libsync/creds/tokencredentials.cpp | 2 +- src/libsync/deletejob.cpp | 2 +- src/libsync/discovery.cpp | 2 +- src/libsync/discoveryphase.cpp | 2 +- .../encryptedfoldermetadatahandler.cpp | 2 +- src/libsync/encryptfolderjob.cpp | 2 +- src/libsync/foldermetadata.cpp | 2 +- src/libsync/lockfilejobs.cpp | 2 +- src/libsync/logger.cpp | 2 +- src/libsync/networkjobs.cpp | 24 +++++++++---------- src/libsync/ocsprofileconnector.cpp | 2 +- src/libsync/ocsuserstatusconnector.cpp | 2 +- src/libsync/owncloudpropagator.cpp | 8 +++---- src/libsync/propagatedownload.cpp | 4 ++-- src/libsync/propagatedownloadencrypted.cpp | 2 +- src/libsync/propagateremotedelete.cpp | 2 +- .../propagateremotedeleteencrypted.cpp | 2 +- ...opagateremotedeleteencryptedrootfolder.cpp | 2 +- src/libsync/propagateremotemkdir.cpp | 2 +- src/libsync/propagateremotemove.cpp | 4 ++-- src/libsync/propagateupload.cpp | 10 ++++---- src/libsync/propagateuploadencrypted.cpp | 2 +- src/libsync/propagatorjobs.cpp | 6 ++--- src/libsync/pushnotifications.cpp | 2 +- src/libsync/putmultifilejob.cpp | 2 +- src/libsync/syncengine.cpp | 2 +- src/libsync/syncfileitem.cpp | 2 +- src/libsync/syncfilestatustracker.cpp | 2 +- src/libsync/theme.cpp | 2 +- src/libsync/updatee2eefoldermetadatajob.cpp | 2 +- .../updatee2eefolderusersmetadatajob.cpp | 2 +- src/libsync/updatemigratede2eemetadatajob.cpp | 2 +- src/libsync/vfs/cfapi/cfapiwrapper.cpp | 2 +- src/libsync/vfs/cfapi/hydrationjob.cpp | 2 +- src/libsync/vfs/cfapi/vfs_cfapi.cpp | 2 +- src/libsync/vfs/suffix/vfs_suffix.cpp | 2 +- src/libsync/vfs/xattr/vfs_xattr.cpp | 2 +- src/libsync/vfs/xattr/xattrwrapper_linux.cpp | 2 +- test/endtoendtestutils.cpp | 2 +- test/pushnotificationstestutils.cpp | 2 +- 142 files changed, 169 insertions(+), 169 deletions(-) diff --git a/src/common/checksumcalculator.cpp b/src/common/checksumcalculator.cpp index acd19d4c6cb77..6976023fd5f1c 100644 --- a/src/common/checksumcalculator.cpp +++ b/src/common/checksumcalculator.cpp @@ -26,7 +26,7 @@ constexpr qint64 bufSize = 500 * 1024; namespace OCC { -Q_LOGGING_CATEGORY(lcChecksumCalculator, "nextcloud.common.checksumcalculator", QtInfoMsg) +Q_LOGGING_CATEGORY(lcChecksumCalculator, "hidrivenext.common.checksumcalculator", QtInfoMsg) static QCryptographicHash::Algorithm algorithmTypeToQCryptoHashAlgorithm(ChecksumCalculator::AlgorithmType algorithmType) { diff --git a/src/common/checksums.cpp b/src/common/checksums.cpp index 77291d09d3164..6046b66218f62 100644 --- a/src/common/checksums.cpp +++ b/src/common/checksums.cpp @@ -87,7 +87,7 @@ namespace OCC { -Q_LOGGING_CATEGORY(lcChecksums, "nextcloud.sync.checksums", QtInfoMsg) +Q_LOGGING_CATEGORY(lcChecksums, "hidrivenext.sync.checksums", QtInfoMsg) #define BUFSIZE qint64(500 * 1024) // 500 KiB diff --git a/src/common/filesystembase.cpp b/src/common/filesystembase.cpp index 9d73955f7c939..36bb66040018a 100644 --- a/src/common/filesystembase.cpp +++ b/src/common/filesystembase.cpp @@ -41,7 +41,7 @@ namespace OCC { -Q_LOGGING_CATEGORY(lcFileSystem, "nextcloud.sync.filesystem", QtInfoMsg) +Q_LOGGING_CATEGORY(lcFileSystem, "hidrivenext.sync.filesystem", QtInfoMsg) QString FileSystem::longWinPath(const QString &inpath) { diff --git a/src/common/ownsql.cpp b/src/common/ownsql.cpp index a8333f114cab1..189ee087870c7 100644 --- a/src/common/ownsql.cpp +++ b/src/common/ownsql.cpp @@ -41,7 +41,7 @@ namespace OCC { -Q_LOGGING_CATEGORY(lcSql, "nextcloud.sync.database.sql", QtInfoMsg) +Q_LOGGING_CATEGORY(lcSql, "hidrivenext.sync.database.sql", QtInfoMsg) SqlDatabase::SqlDatabase() = default; diff --git a/src/common/remotepermissions.cpp b/src/common/remotepermissions.cpp index 7afb4b98f6a08..421f0c32ff2be 100644 --- a/src/common/remotepermissions.cpp +++ b/src/common/remotepermissions.cpp @@ -25,7 +25,7 @@ namespace OCC { -Q_LOGGING_CATEGORY(lcRemotePermissions, "nextcloud.sync.remotepermissions", QtInfoMsg) +Q_LOGGING_CATEGORY(lcRemotePermissions, "hidrivenext.sync.remotepermissions", QtInfoMsg) static const char letters[] = " GWDNVCKRSMm"; diff --git a/src/common/shellextensionutils.cpp b/src/common/shellextensionutils.cpp index b2b59be80f663..ce25508c697df 100644 --- a/src/common/shellextensionutils.cpp +++ b/src/common/shellextensionutils.cpp @@ -4,7 +4,7 @@ namespace VfsShellExtensions { -Q_LOGGING_CATEGORY(lcShellExtensionUtils, "nextcloud.gui.shellextensionutils", QtInfoMsg) +Q_LOGGING_CATEGORY(lcShellExtensionUtils, "hidrivenext.gui.shellextensionutils", QtInfoMsg) QString VfsShellExtensions::serverNameForApplicationName(const QString &applicationName) { diff --git a/src/common/syncjournaldb.cpp b/src/common/syncjournaldb.cpp index 0813c12a17dc4..16784cc8c986c 100644 --- a/src/common/syncjournaldb.cpp +++ b/src/common/syncjournaldb.cpp @@ -44,7 +44,7 @@ namespace OCC { -Q_LOGGING_CATEGORY(lcDb, "nextcloud.sync.database", QtInfoMsg) +Q_LOGGING_CATEGORY(lcDb, "hidrivenext.sync.database", QtInfoMsg) #define GET_FILE_RECORD_QUERY \ "SELECT path, inode, modtime, type, md5, fileid, remotePerm, filesize," \ diff --git a/src/common/utility.cpp b/src/common/utility.cpp index b76f6cb6450bf..782a71b01cf62 100644 --- a/src/common/utility.cpp +++ b/src/common/utility.cpp @@ -59,7 +59,7 @@ constexpr qint64 terabytes = bytes * gigabytes; namespace OCC { -Q_LOGGING_CATEGORY(lcUtility, "nextcloud.sync.utility", QtInfoMsg) +Q_LOGGING_CATEGORY(lcUtility, "hidrivenext.sync.utility", QtInfoMsg) bool Utility::writeRandomFile(const QString &fname, int size) { diff --git a/src/csync/vio/csync_vio_local_unix.cpp b/src/csync/vio/csync_vio_local_unix.cpp index 8f319a3e4b23f..fec107018c701 100644 --- a/src/csync/vio/csync_vio_local_unix.cpp +++ b/src/csync/vio/csync_vio_local_unix.cpp @@ -38,7 +38,7 @@ #include #include -Q_LOGGING_CATEGORY(lcCSyncVIOLocal, "nextcloud.sync.csync.vio_local", QtInfoMsg) +Q_LOGGING_CATEGORY(lcCSyncVIOLocal, "hidrivenext.sync.csync.vio_local", QtInfoMsg) /* * directory functions diff --git a/src/csync/vio/csync_vio_local_win.cpp b/src/csync/vio/csync_vio_local_win.cpp index da677c692433d..093daa58389ee 100644 --- a/src/csync/vio/csync_vio_local_win.cpp +++ b/src/csync/vio/csync_vio_local_win.cpp @@ -40,7 +40,7 @@ #include "common/vfs.h" -Q_LOGGING_CATEGORY(lcCSyncVIOLocal, "nextcloud.sync.csync.vio_local", QtInfoMsg) +Q_LOGGING_CATEGORY(lcCSyncVIOLocal, "hidrivenext.sync.csync.vio_local", QtInfoMsg) /* * directory functions diff --git a/src/gui/accountmanager.cpp b/src/gui/accountmanager.cpp index 1a1a04eea4848..5a440411530e7 100644 --- a/src/gui/accountmanager.cpp +++ b/src/gui/accountmanager.cpp @@ -90,7 +90,7 @@ constexpr auto generalC = "General"; namespace OCC { -Q_LOGGING_CATEGORY(lcAccountManager, "nextcloud.gui.account.manager", QtInfoMsg) +Q_LOGGING_CATEGORY(lcAccountManager, "hidrivenext.gui.account.manager", QtInfoMsg) AccountManager *AccountManager::instance() { diff --git a/src/gui/accountsettings.cpp b/src/gui/accountsettings.cpp index 520f9d8c6a3fe..3be5dcd4fec3e 100644 --- a/src/gui/accountsettings.cpp +++ b/src/gui/accountsettings.cpp @@ -82,7 +82,7 @@ namespace OCC { class AccountSettings; -Q_LOGGING_CATEGORY(lcAccountSettings, "nextcloud.gui.account.settings", QtInfoMsg) +Q_LOGGING_CATEGORY(lcAccountSettings, "hidrivenext.gui.account.settings", QtInfoMsg) const QString progressBarStyle() { diff --git a/src/gui/accountsetupcommandlinemanager.cpp b/src/gui/accountsetupcommandlinemanager.cpp index 94388b7ea5f17..3a702bf6a08db 100644 --- a/src/gui/accountsetupcommandlinemanager.cpp +++ b/src/gui/accountsetupcommandlinemanager.cpp @@ -17,7 +17,7 @@ namespace OCC { -Q_LOGGING_CATEGORY(lcAccountSetupCommandLineManager, "nextcloud.gui.accountsetupcommandlinemanager", QtInfoMsg) +Q_LOGGING_CATEGORY(lcAccountSetupCommandLineManager, "hidrivenext.gui.accountsetupcommandlinemanager", QtInfoMsg) AccountSetupCommandLineManager *AccountSetupCommandLineManager::_instance = nullptr; diff --git a/src/gui/accountsetupfromcommandlinejob.cpp b/src/gui/accountsetupfromcommandlinejob.cpp index dd0f4066f2346..a148b8580594a 100644 --- a/src/gui/accountsetupfromcommandlinejob.cpp +++ b/src/gui/accountsetupfromcommandlinejob.cpp @@ -29,7 +29,7 @@ namespace OCC { -Q_LOGGING_CATEGORY(lcAccountSetupCommandLineJob, "nextcloud.gui.accountsetupcommandlinejob", QtInfoMsg) +Q_LOGGING_CATEGORY(lcAccountSetupCommandLineJob, "hidrivenext.gui.accountsetupcommandlinejob", QtInfoMsg) AccountSetupFromCommandLineJob::AccountSetupFromCommandLineJob(QString appPassword, QString userId, diff --git a/src/gui/accountstate.cpp b/src/gui/accountstate.cpp index a59fed2731750..92ddc85da8c76 100644 --- a/src/gui/accountstate.cpp +++ b/src/gui/accountstate.cpp @@ -40,7 +40,7 @@ namespace OCC { -Q_LOGGING_CATEGORY(lcAccountState, "nextcloud.gui.account.state", QtInfoMsg) +Q_LOGGING_CATEGORY(lcAccountState, "hidrivenext.gui.account.state", QtInfoMsg) AccountState::AccountState(const AccountPtr &account) : QObject() diff --git a/src/gui/application.cpp b/src/gui/application.cpp index d61da4176bdb6..f2310c4cf187a 100644 --- a/src/gui/application.cpp +++ b/src/gui/application.cpp @@ -76,7 +76,7 @@ class QSocket; namespace OCC { -Q_LOGGING_CATEGORY(lcApplication, "nextcloud.gui.application", QtInfoMsg) +Q_LOGGING_CATEGORY(lcApplication, "hidrivenext.gui.application", QtInfoMsg) namespace { diff --git a/src/gui/callstatechecker.cpp b/src/gui/callstatechecker.cpp index 242c5b0aba15b..875bf98033803 100644 --- a/src/gui/callstatechecker.cpp +++ b/src/gui/callstatechecker.cpp @@ -21,7 +21,7 @@ namespace OCC { -Q_LOGGING_CATEGORY(lcCallStateChecker, "nextcloud.gui.callstatechecker", QtInfoMsg) +Q_LOGGING_CATEGORY(lcCallStateChecker, "hidrivenext.gui.callstatechecker", QtInfoMsg) constexpr int successStatusCode = 200; diff --git a/src/gui/caseclashfilenamedialog.cpp b/src/gui/caseclashfilenamedialog.cpp index 109d826bb162a..f67d176fcfb8a 100644 --- a/src/gui/caseclashfilenamedialog.cpp +++ b/src/gui/caseclashfilenamedialog.cpp @@ -68,7 +68,7 @@ QString caseClashIllegalCharacterListToString(const QVector &illegalChara namespace OCC { -Q_LOGGING_CATEGORY(lcCaseClashConflictFialog, "nextcloud.sync.caseclash.dialog", QtInfoMsg) +Q_LOGGING_CATEGORY(lcCaseClashConflictFialog, "hidrivenext.sync.caseclash.dialog", QtInfoMsg) CaseClashFilenameDialog::CaseClashFilenameDialog(AccountPtr account, Folder *folder, diff --git a/src/gui/conflictsolver.cpp b/src/gui/conflictsolver.cpp index 5292d48e3280e..60ac7f35d5d38 100644 --- a/src/gui/conflictsolver.cpp +++ b/src/gui/conflictsolver.cpp @@ -22,7 +22,7 @@ namespace OCC { -Q_LOGGING_CATEGORY(lcConflict, "nextcloud.gui.conflictsolver", QtInfoMsg) +Q_LOGGING_CATEGORY(lcConflict, "hidrivenext.gui.conflictsolver", QtInfoMsg) ConflictSolver::ConflictSolver(QWidget *parent) : QObject(parent) diff --git a/src/gui/connectionvalidator.cpp b/src/gui/connectionvalidator.cpp index 6c1bec008ad41..c052952f5ccbd 100644 --- a/src/gui/connectionvalidator.cpp +++ b/src/gui/connectionvalidator.cpp @@ -31,7 +31,7 @@ namespace OCC { -Q_LOGGING_CATEGORY(lcConnectionValidator, "nextcloud.sync.connectionvalidator", QtInfoMsg) +Q_LOGGING_CATEGORY(lcConnectionValidator, "hidrivenext.sync.connectionvalidator", QtInfoMsg) // Make sure the timeout for this job is less than how often we get called // This makes sure we get tried often enough without "ConnectionValidator already running" diff --git a/src/gui/creds/credentialsfactory.cpp b/src/gui/creds/credentialsfactory.cpp index 894eaeee6a92f..2925e5a3ade75 100644 --- a/src/gui/creds/credentialsfactory.cpp +++ b/src/gui/creds/credentialsfactory.cpp @@ -22,7 +22,7 @@ namespace OCC { -Q_LOGGING_CATEGORY(lcGuiCredentials, "nextcloud.gui.credentials", QtInfoMsg) +Q_LOGGING_CATEGORY(lcGuiCredentials, "hidrivenext.gui.credentials", QtInfoMsg) namespace CredentialsFactory { diff --git a/src/gui/creds/flow2auth.cpp b/src/gui/creds/flow2auth.cpp index b3cc7c937ac41..c133a6dc61b3a 100644 --- a/src/gui/creds/flow2auth.cpp +++ b/src/gui/creds/flow2auth.cpp @@ -29,7 +29,7 @@ namespace OCC { -Q_LOGGING_CATEGORY(lcFlow2auth, "nextcloud.sync.credentials.flow2auth", QtInfoMsg) +Q_LOGGING_CATEGORY(lcFlow2auth, "hidrivenext.sync.credentials.flow2auth", QtInfoMsg) Flow2Auth::Flow2Auth(Account *account, QObject *parent) diff --git a/src/gui/creds/httpcredentialsgui.cpp b/src/gui/creds/httpcredentialsgui.cpp index 4e1d8ef1e630e..ee04f787dc23f 100644 --- a/src/gui/creds/httpcredentialsgui.cpp +++ b/src/gui/creds/httpcredentialsgui.cpp @@ -30,7 +30,7 @@ using namespace QKeychain; namespace OCC { -Q_LOGGING_CATEGORY(lcHttpCredentialsGui, "nextcloud.sync.credentials.http.gui", QtInfoMsg) +Q_LOGGING_CATEGORY(lcHttpCredentialsGui, "hidrivenext.sync.credentials.http.gui", QtInfoMsg) void HttpCredentialsGui::askFromUser() { diff --git a/src/gui/creds/webflowcredentials.cpp b/src/gui/creds/webflowcredentials.cpp index 58ad6dc613812..0acfb801d02a0 100644 --- a/src/gui/creds/webflowcredentials.cpp +++ b/src/gui/creds/webflowcredentials.cpp @@ -25,7 +25,7 @@ using namespace QKeychain; namespace OCC { -Q_LOGGING_CATEGORY(lcWebFlowCredentials, "nextcloud.sync.credentials.webflow", QtInfoMsg) +Q_LOGGING_CATEGORY(lcWebFlowCredentials, "hidrivenext.sync.credentials.webflow", QtInfoMsg) namespace { const char userC[] = "user"; diff --git a/src/gui/editlocallyjob.cpp b/src/gui/editlocallyjob.cpp index cac6de6d12ec2..eacaedf1b2e98 100644 --- a/src/gui/editlocallyjob.cpp +++ b/src/gui/editlocallyjob.cpp @@ -26,7 +26,7 @@ namespace OCC { -Q_LOGGING_CATEGORY(lcEditLocallyJob, "nextcloud.gui.editlocallyjob", QtInfoMsg) +Q_LOGGING_CATEGORY(lcEditLocallyJob, "hidrivenext.gui.editlocallyjob", QtInfoMsg) EditLocallyJob::EditLocallyJob(const AccountStatePtr &accountState, const QString &relPath, diff --git a/src/gui/editlocallymanager.cpp b/src/gui/editlocallymanager.cpp index e2c3d3c7ecf5f..4f50c87761ea6 100644 --- a/src/gui/editlocallymanager.cpp +++ b/src/gui/editlocallymanager.cpp @@ -24,7 +24,7 @@ namespace OCC { -Q_LOGGING_CATEGORY(lcEditLocallyManager, "nextcloud.gui.editlocallymanager", QtInfoMsg) +Q_LOGGING_CATEGORY(lcEditLocallyManager, "hidrivenext.gui.editlocallymanager", QtInfoMsg) EditLocallyManager *EditLocallyManager::_instance = nullptr; diff --git a/src/gui/editlocallyverificationjob.cpp b/src/gui/editlocallyverificationjob.cpp index dd6417e3defc3..195382a41a370 100644 --- a/src/gui/editlocallyverificationjob.cpp +++ b/src/gui/editlocallyverificationjob.cpp @@ -32,7 +32,7 @@ QString prefixSlashToPath(const QString &path) namespace OCC { -Q_LOGGING_CATEGORY(lcEditLocallyVerificationJob, "nextcloud.gui.editlocallyverificationjob", QtInfoMsg) +Q_LOGGING_CATEGORY(lcEditLocallyVerificationJob, "hidrivenext.gui.editlocallyverificationjob", QtInfoMsg) EditLocallyVerificationJob::EditLocallyVerificationJob(const AccountStatePtr &accountState, const QString &relPath, diff --git a/src/gui/fileactivitylistmodel.cpp b/src/gui/fileactivitylistmodel.cpp index 4e4c3c2203a00..5fcdec7267943 100644 --- a/src/gui/fileactivitylistmodel.cpp +++ b/src/gui/fileactivitylistmodel.cpp @@ -18,7 +18,7 @@ namespace OCC { -Q_LOGGING_CATEGORY(lcFileActivityListModel, "nextcloud.gui.fileactivitylistmodel", QtInfoMsg) +Q_LOGGING_CATEGORY(lcFileActivityListModel, "hidrivenext.gui.fileactivitylistmodel", QtInfoMsg) FileActivityListModel::FileActivityListModel(QObject *parent) : ActivityListModel(nullptr, parent) diff --git a/src/gui/filedetails/filedetails.cpp b/src/gui/filedetails/filedetails.cpp index bc8f2d4895c84..5034a89c6a32e 100644 --- a/src/gui/filedetails/filedetails.cpp +++ b/src/gui/filedetails/filedetails.cpp @@ -20,7 +20,7 @@ namespace OCC { -Q_LOGGING_CATEGORY(lcFileDetails, "nextcloud.gui.filedetails", QtInfoMsg) +Q_LOGGING_CATEGORY(lcFileDetails, "hidrivenext.gui.filedetails", QtInfoMsg) FileDetails::FileDetails(QObject *parent) : QObject(parent) diff --git a/src/gui/filedetails/shareemodel.cpp b/src/gui/filedetails/shareemodel.cpp index 9018bfa832839..cd32318912edd 100644 --- a/src/gui/filedetails/shareemodel.cpp +++ b/src/gui/filedetails/shareemodel.cpp @@ -23,7 +23,7 @@ namespace OCC { -Q_LOGGING_CATEGORY(lcShareeModel, "com.ionos.hidrivenext.shareemodel") +Q_LOGGING_CATEGORY(lcShareeModel, "com.hidrivenext.shareemodel") ShareeModel::ShareeModel(QObject *parent) : QAbstractListModel(parent) diff --git a/src/gui/filedetails/sharemodel.cpp b/src/gui/filedetails/sharemodel.cpp index b25a32c7cb194..914a3b25a1ed7 100644 --- a/src/gui/filedetails/sharemodel.cpp +++ b/src/gui/filedetails/sharemodel.cpp @@ -37,7 +37,7 @@ static const auto secureFileDropPlaceholderLinkShareId = QStringLiteral("__secur namespace OCC { -Q_LOGGING_CATEGORY(lcShareModel, "com.ionos.hidrivenext.sharemodel") +Q_LOGGING_CATEGORY(lcShareModel, "com.hidrivenext.sharemodel") ShareModel::ShareModel(QObject *parent) : QAbstractListModel(parent) diff --git a/src/gui/filedetails/sortedsharemodel.cpp b/src/gui/filedetails/sortedsharemodel.cpp index bcc5f3a06fd18..0b02c7dfdbaab 100644 --- a/src/gui/filedetails/sortedsharemodel.cpp +++ b/src/gui/filedetails/sortedsharemodel.cpp @@ -16,7 +16,7 @@ namespace OCC { -Q_LOGGING_CATEGORY(lcSortedShareModel, "com.ionos.hidrivenext.sortedsharemodel") +Q_LOGGING_CATEGORY(lcSortedShareModel, "com.hidrivenext.sortedsharemodel") SortedShareModel::SortedShareModel(QObject *parent) : QSortFilterProxyModel(parent) diff --git a/src/gui/filetagmodel.cpp b/src/gui/filetagmodel.cpp index 64cab4486a4f9..303c7436fe717 100644 --- a/src/gui/filetagmodel.cpp +++ b/src/gui/filetagmodel.cpp @@ -16,7 +16,7 @@ #include "libsync/networkjobs.h" -Q_LOGGING_CATEGORY(lcFileTagModel, "nextcloud.gui.filetagmodel", QtInfoMsg) +Q_LOGGING_CATEGORY(lcFileTagModel, "hidrivenext.gui.filetagmodel", QtInfoMsg) namespace OCC { diff --git a/src/gui/folder.cpp b/src/gui/folder.cpp index 3695b51f0f5d1..e8feba21193ad 100644 --- a/src/gui/folder.cpp +++ b/src/gui/folder.cpp @@ -58,7 +58,7 @@ constexpr auto versionC = "version"; namespace OCC { -Q_LOGGING_CATEGORY(lcFolder, "nextcloud.gui.folder", QtInfoMsg) +Q_LOGGING_CATEGORY(lcFolder, "hidrivenext.gui.folder", QtInfoMsg) Folder::Folder(const FolderDefinition &definition, AccountState *accountState, std::unique_ptr vfs, diff --git a/src/gui/foldercreationdialog.cpp b/src/gui/foldercreationdialog.cpp index 4ed103ee9ccd7..ca0d6828ac309 100644 --- a/src/gui/foldercreationdialog.cpp +++ b/src/gui/foldercreationdialog.cpp @@ -29,7 +29,7 @@ namespace OCC { -Q_LOGGING_CATEGORY(lcFolderCreationDialog, "nextcloud.gui.foldercreationdialog", QtInfoMsg) +Q_LOGGING_CATEGORY(lcFolderCreationDialog, "hidrivenext.gui.foldercreationdialog", QtInfoMsg) FolderCreationDialog::FolderCreationDialog(const QString &destination, QWidget *parent) : QDialog(parent) diff --git a/src/gui/folderman.cpp b/src/gui/folderman.cpp index d671dd2b87a4e..82ec3e34b69c9 100644 --- a/src/gui/folderman.cpp +++ b/src/gui/folderman.cpp @@ -55,7 +55,7 @@ int numberOfSyncJournals(const QString &path) namespace OCC { -Q_LOGGING_CATEGORY(lcFolderMan, "nextcloud.gui.folder.manager", QtInfoMsg) +Q_LOGGING_CATEGORY(lcFolderMan, "hidrivenext.gui.folder.manager", QtInfoMsg) FolderMan *FolderMan::_instance = nullptr; diff --git a/src/gui/folderstatusmodel.cpp b/src/gui/folderstatusmodel.cpp index d1211d7412c71..a13a6d2527268 100644 --- a/src/gui/folderstatusmodel.cpp +++ b/src/gui/folderstatusmodel.cpp @@ -28,7 +28,7 @@ Q_DECLARE_METATYPE(QPersistentModelIndex) namespace OCC { -Q_LOGGING_CATEGORY(lcFolderStatus, "nextcloud.gui.folder.model", QtInfoMsg) +Q_LOGGING_CATEGORY(lcFolderStatus, "hidrivenext.gui.folder.model", QtInfoMsg) static const char propertyParentIndexC[] = "oc_parentIndex"; static const char propertyPermissionMap[] = "oc_permissionMap"; diff --git a/src/gui/folderwatcher.cpp b/src/gui/folderwatcher.cpp index e8bed199bdef6..40f5af80458a0 100644 --- a/src/gui/folderwatcher.cpp +++ b/src/gui/folderwatcher.cpp @@ -46,7 +46,7 @@ constexpr auto lockChangeDebouncingTimerIntervalMs = 500; namespace OCC { -Q_LOGGING_CATEGORY(lcFolderWatcher, "nextcloud.gui.folderwatcher", QtInfoMsg) +Q_LOGGING_CATEGORY(lcFolderWatcher, "hidrivenext.gui.folderwatcher", QtInfoMsg) FolderWatcher::FolderWatcher(Folder *folder) : QObject(folder) diff --git a/src/gui/ga4/ganalytics_worker.cpp b/src/gui/ga4/ganalytics_worker.cpp index f3eb1351430c3..1df2a58498e84 100644 --- a/src/gui/ga4/ganalytics_worker.cpp +++ b/src/gui/ga4/ganalytics_worker.cpp @@ -35,7 +35,7 @@ const QLatin1String GAnalyticsWorker::dateTimeFormat("yyyy,MM,dd-hh:mm::ss:zzz"); -Q_LOGGING_CATEGORY(lcGAnalyticsWorker, "nextcloud.gui.ga4.ganalytics_worker", QtInfoMsg) +Q_LOGGING_CATEGORY(lcGAnalyticsWorker, "hidrivenext.gui.ga4.ganalytics_worker", QtInfoMsg) GAnalyticsWorker::GAnalyticsWorker(GAnalytics *parent) : QObject(parent), q(parent), m_logLevel(GAnalytics::Error) diff --git a/src/gui/guiutility.cpp b/src/gui/guiutility.cpp index 6e5fe203e5ef8..9a4c14a66b1fc 100644 --- a/src/gui/guiutility.cpp +++ b/src/gui/guiutility.cpp @@ -24,7 +24,7 @@ #include "common/asserts.h" using namespace OCC; -Q_LOGGING_CATEGORY(lcUtility, "nextcloud.gui.utility", QtInfoMsg) +Q_LOGGING_CATEGORY(lcUtility, "hidrivenext.gui.utility", QtInfoMsg) bool Utility::openBrowser(const QUrl &url, QWidget *errorWidgetParent) { diff --git a/src/gui/iconutils.cpp b/src/gui/iconutils.cpp index 69f543c783130..42dbfc0738124 100644 --- a/src/gui/iconutils.cpp +++ b/src/gui/iconutils.cpp @@ -82,7 +82,7 @@ namespace OCC { namespace Ui { namespace IconUtils { -Q_LOGGING_CATEGORY(lcIconUtils, "nextcloud.gui.iconutils", QtInfoMsg) +Q_LOGGING_CATEGORY(lcIconUtils, "hidrivenext.gui.iconutils", QtInfoMsg) QPixmap pixmapForBackground(const QString &fileName, const QColor &backgroundColor) { diff --git a/src/gui/lockwatcher.cpp b/src/gui/lockwatcher.cpp index cbd411d104c39..db15a3033b151 100644 --- a/src/gui/lockwatcher.cpp +++ b/src/gui/lockwatcher.cpp @@ -20,7 +20,7 @@ using namespace OCC; -Q_LOGGING_CATEGORY(lcLockWatcher, "nextcloud.gui.lockwatcher", QtInfoMsg) +Q_LOGGING_CATEGORY(lcLockWatcher, "hidrivenext.gui.lockwatcher", QtInfoMsg) static const int check_frequency = 20 * 1000; // ms diff --git a/src/gui/macOS/fileprovider_mac.mm b/src/gui/macOS/fileprovider_mac.mm index 194d1da6d129f..1104de24f6810 100644 --- a/src/gui/macOS/fileprovider_mac.mm +++ b/src/gui/macOS/fileprovider_mac.mm @@ -24,7 +24,7 @@ namespace OCC { -Q_LOGGING_CATEGORY(lcMacFileProvider, "nextcloud.gui.macfileprovider", QtInfoMsg) +Q_LOGGING_CATEGORY(lcMacFileProvider, "hidrivenext.gui.macfileprovider", QtInfoMsg) namespace Mac { diff --git a/src/gui/macOS/fileproviderdomainmanager_mac.mm b/src/gui/macOS/fileproviderdomainmanager_mac.mm index 1e4807cd4b33d..9d615d1cdb87b 100644 --- a/src/gui/macOS/fileproviderdomainmanager_mac.mm +++ b/src/gui/macOS/fileproviderdomainmanager_mac.mm @@ -138,6 +138,8 @@ inline QString accountIdFromDomain(NSFileProviderDomain * const domain) namespace OCC { +Q_LOGGING_CATEGORY(lcMacFileProviderDomainManager, "hidrivenext.gui.macfileproviderdomainmanager", QtInfoMsg) + namespace Mac { class API_AVAILABLE(macos(11.0)) FileProviderDomainManager::MacImplementation diff --git a/src/gui/macOS/fileproviderdomainsyncstatus_mac.mm b/src/gui/macOS/fileproviderdomainsyncstatus_mac.mm index 76e88d1fa8e16..1cf1253e71bac 100644 --- a/src/gui/macOS/fileproviderdomainsyncstatus_mac.mm +++ b/src/gui/macOS/fileproviderdomainsyncstatus_mac.mm @@ -26,7 +26,7 @@ namespace OCC::Mac { -Q_LOGGING_CATEGORY(lcMacFileProviderDomainSyncStatus, "nextcloud.gui.macfileproviderdomainsyncstatus", QtInfoMsg) +Q_LOGGING_CATEGORY(lcMacFileProviderDomainSyncStatus, "hidrivenext.gui.macfileproviderdomainsyncstatus", QtInfoMsg) class FileProviderDomainSyncStatus::MacImplementation { diff --git a/src/gui/macOS/fileprovidereditlocallyjob.cpp b/src/gui/macOS/fileprovidereditlocallyjob.cpp index 8cd456e1f67c1..05c316450358a 100644 --- a/src/gui/macOS/fileprovidereditlocallyjob.cpp +++ b/src/gui/macOS/fileprovidereditlocallyjob.cpp @@ -22,7 +22,7 @@ namespace OCC::Mac { -Q_LOGGING_CATEGORY(lcFileProviderEditLocallyJob, "nextcloud.gui.fileprovidereditlocally", QtInfoMsg) +Q_LOGGING_CATEGORY(lcFileProviderEditLocallyJob, "hidrivenext.gui.fileprovidereditlocally", QtInfoMsg) FileProviderEditLocallyJob::FileProviderEditLocallyJob(const AccountStatePtr &accountState, const QString &relPath, diff --git a/src/gui/macOS/fileprovideritemmetadata_mac.mm b/src/gui/macOS/fileprovideritemmetadata_mac.mm index 8b79a60bd3432..18b22eadcff9b 100644 --- a/src/gui/macOS/fileprovideritemmetadata_mac.mm +++ b/src/gui/macOS/fileprovideritemmetadata_mac.mm @@ -51,7 +51,7 @@ QString nsNameComponentsToLocalisedQString(NSPersonNameComponents *const nameCom namespace Mac { -Q_LOGGING_CATEGORY(lcMacImplFileProviderItemMetadata, "nextcloud.gui.macfileprovideritemmetadatamacimpl", QtInfoMsg) +Q_LOGGING_CATEGORY(lcMacImplFileProviderItemMetadata, "hidrivenext.gui.macfileprovideritemmetadatamacimpl", QtInfoMsg) FileProviderItemMetadata FileProviderItemMetadata::fromNSFileProviderItem(const void *const nsFileProviderItem, const QString &domainIdentifier) { diff --git a/src/gui/macOS/fileprovidermaterialiseditemsmodel_mac.mm b/src/gui/macOS/fileprovidermaterialiseditemsmodel_mac.mm index cfa73a14a498b..96516ed61fe0b 100644 --- a/src/gui/macOS/fileprovidermaterialiseditemsmodel_mac.mm +++ b/src/gui/macOS/fileprovidermaterialiseditemsmodel_mac.mm @@ -26,7 +26,7 @@ namespace Mac { -Q_LOGGING_CATEGORY(lcMacImplFileProviderMaterialisedItemsModelMac, "nextcloud.gui.macfileprovidermaterialiseditemsmodelmac", QtInfoMsg) +Q_LOGGING_CATEGORY(lcMacImplFileProviderMaterialisedItemsModelMac, "hidrivenext.gui.macfileprovidermaterialiseditemsmodelmac", QtInfoMsg) void FileProviderMaterialisedItemsModel::evictItem(const QString &identifier, const QString &domainIdentifier) { diff --git a/src/gui/macOS/fileprovidersettingscontroller_mac.mm b/src/gui/macOS/fileprovidersettingscontroller_mac.mm index 89e1b76e2b5b8..3170a429eb5d3 100644 --- a/src/gui/macOS/fileprovidersettingscontroller_mac.mm +++ b/src/gui/macOS/fileprovidersettingscontroller_mac.mm @@ -52,7 +52,7 @@ float gbFromBytesWithOneDecimal(const unsigned long long bytes) namespace Mac { -Q_LOGGING_CATEGORY(lcFileProviderSettingsController, "nextcloud.gui.mac.fileprovider.settingscontroller") +Q_LOGGING_CATEGORY(lcFileProviderSettingsController, "hidrivenext.gui.mac.fileprovider.settingscontroller") class FileProviderSettingsController::MacImplementation : public QObject { diff --git a/src/gui/macOS/fileprovidersocketcontroller.cpp b/src/gui/macOS/fileprovidersocketcontroller.cpp index 03eb2d10e55eb..bff8690802e6f 100644 --- a/src/gui/macOS/fileprovidersocketcontroller.cpp +++ b/src/gui/macOS/fileprovidersocketcontroller.cpp @@ -25,7 +25,7 @@ namespace OCC { namespace Mac { -Q_LOGGING_CATEGORY(lcFileProviderSocketController, "nextcloud.gui.macos.fileprovider.socketcontroller", QtInfoMsg) +Q_LOGGING_CATEGORY(lcFileProviderSocketController, "hidrivenext.gui.macos.fileprovider.socketcontroller", QtInfoMsg) FileProviderSocketController::FileProviderSocketController(QLocalSocket * const socket, QObject * const parent) : QObject{parent} diff --git a/src/gui/macOS/fileprovidersocketserver.cpp b/src/gui/macOS/fileprovidersocketserver.cpp index aeebb23ff053b..14f0bd9a533b3 100644 --- a/src/gui/macOS/fileprovidersocketserver.cpp +++ b/src/gui/macOS/fileprovidersocketserver.cpp @@ -25,7 +25,7 @@ namespace OCC { namespace Mac { -Q_LOGGING_CATEGORY(lcFileProviderSocketServer, "nextcloud.gui.macos.fileprovider.socketserver", QtInfoMsg) +Q_LOGGING_CATEGORY(lcFileProviderSocketServer, "hidrivenext.gui.macos.fileprovider.socketserver", QtInfoMsg) FileProviderSocketServer::FileProviderSocketServer(QObject *parent) : QObject{parent} diff --git a/src/gui/macOS/fileproviderutils_mac.mm b/src/gui/macOS/fileproviderutils_mac.mm index 1f3d046d9fcf4..44be0a0090336 100644 --- a/src/gui/macOS/fileproviderutils_mac.mm +++ b/src/gui/macOS/fileproviderutils_mac.mm @@ -25,7 +25,7 @@ namespace FileProviderUtils { -Q_LOGGING_CATEGORY(lcMacFileProviderUtils, "nextcloud.gui.macfileproviderutils", QtInfoMsg) +Q_LOGGING_CATEGORY(lcMacFileProviderUtils, "hidrivenext.gui.macfileproviderutils", QtInfoMsg) NSFileProviderDomain *domainForIdentifier(const QString &domainIdentifier) { diff --git a/src/gui/macOS/fileproviderxpc_mac.mm b/src/gui/macOS/fileproviderxpc_mac.mm index b58fd794331fa..e56cbbb13158e 100644 --- a/src/gui/macOS/fileproviderxpc_mac.mm +++ b/src/gui/macOS/fileproviderxpc_mac.mm @@ -29,7 +29,7 @@ namespace OCC::Mac { -Q_LOGGING_CATEGORY(lcFileProviderXPC, "nextcloud.gui.macos.fileprovider.xpc", QtInfoMsg) +Q_LOGGING_CATEGORY(lcFileProviderXPC, "hidrivenext.gui.macos.fileprovider.xpc", QtInfoMsg) FileProviderXPC::FileProviderXPC(QObject *parent) : QObject{parent} diff --git a/src/gui/macOS/fileproviderxpc_mac_utils.mm b/src/gui/macOS/fileproviderxpc_mac_utils.mm index 0cb24bb1bb17a..cbbbc5d5b5224 100644 --- a/src/gui/macOS/fileproviderxpc_mac_utils.mm +++ b/src/gui/macOS/fileproviderxpc_mac_utils.mm @@ -25,7 +25,7 @@ namespace OCC::Mac::FileProviderXPCUtils { -Q_LOGGING_CATEGORY(lcFileProviderXPCUtils, "nextcloud.gui.macos.fileprovider.xpc.utils", QtInfoMsg) +Q_LOGGING_CATEGORY(lcFileProviderXPCUtils, "hidrivenext.gui.macos.fileprovider.xpc.utils", QtInfoMsg) NSArray *getDomainManagers() { diff --git a/src/gui/navigationpanehelper.cpp b/src/gui/navigationpanehelper.cpp index 027d0ddeaa796..b2c73e9e7c68c 100644 --- a/src/gui/navigationpanehelper.cpp +++ b/src/gui/navigationpanehelper.cpp @@ -22,7 +22,7 @@ namespace OCC { -Q_LOGGING_CATEGORY(lcNavPane, "nextcloud.gui.folder.navigationpane", QtInfoMsg) +Q_LOGGING_CATEGORY(lcNavPane, "hidrivenext.gui.folder.navigationpane", QtInfoMsg) NavigationPaneHelper::NavigationPaneHelper(FolderMan *folderMan) : _folderMan(folderMan) diff --git a/src/gui/notificationconfirmjob.cpp b/src/gui/notificationconfirmjob.cpp index 8071aefddb4ef..1cc514b7c64bb 100644 --- a/src/gui/notificationconfirmjob.cpp +++ b/src/gui/notificationconfirmjob.cpp @@ -20,7 +20,7 @@ namespace OCC { -Q_LOGGING_CATEGORY(lcNotificationsJob, "nextcloud.gui.notifications", QtInfoMsg) +Q_LOGGING_CATEGORY(lcNotificationsJob, "hidrivenext.gui.notifications", QtInfoMsg) NotificationConfirmJob::NotificationConfirmJob(AccountPtr account) : AbstractNetworkJob(account, "") diff --git a/src/gui/ocsjob.cpp b/src/gui/ocsjob.cpp index 487d283a428ce..93436200bd2c4 100644 --- a/src/gui/ocsjob.cpp +++ b/src/gui/ocsjob.cpp @@ -22,7 +22,7 @@ namespace OCC { -Q_LOGGING_CATEGORY(lcOcs, "nextcloud.gui.sharing.ocs", QtInfoMsg) +Q_LOGGING_CATEGORY(lcOcs, "hidrivenext.gui.sharing.ocs", QtInfoMsg) OcsJob::OcsJob(AccountPtr account) : AbstractNetworkJob(account, "") diff --git a/src/gui/owncloudgui.cpp b/src/gui/owncloudgui.cpp index 9c97e02d0b1cc..023ba5b0b7378 100644 --- a/src/gui/owncloudgui.cpp +++ b/src/gui/owncloudgui.cpp @@ -77,7 +77,7 @@ namespace OCC { -Q_LOGGING_CATEGORY(lcOwnCloudGui, "com.ionos.hidrivenext.owncloudgui") +Q_LOGGING_CATEGORY(lcOwnCloudGui, "com.hidrivenext.owncloudgui") const char propertyAccountC[] = "oc_account"; diff --git a/src/gui/proxyauthhandler.cpp b/src/gui/proxyauthhandler.cpp index 360f0dec46450..9cfaa5e221647 100644 --- a/src/gui/proxyauthhandler.cpp +++ b/src/gui/proxyauthhandler.cpp @@ -26,7 +26,7 @@ using namespace OCC; using namespace QKeychain; -Q_LOGGING_CATEGORY(lcProxy, "nextcloud.gui.credentials.proxy", QtInfoMsg) +Q_LOGGING_CATEGORY(lcProxy, "hidrivenext.gui.credentials.proxy", QtInfoMsg) ProxyAuthHandler *ProxyAuthHandler::instance() { diff --git a/src/gui/remotewipe.cpp b/src/gui/remotewipe.cpp index 02180e9a7df4f..e448ac85ac706 100644 --- a/src/gui/remotewipe.cpp +++ b/src/gui/remotewipe.cpp @@ -22,7 +22,7 @@ namespace OCC { -Q_LOGGING_CATEGORY(lcRemoteWipe, "nextcloud.gui.remotewipe", QtInfoMsg) +Q_LOGGING_CATEGORY(lcRemoteWipe, "hidrivenext.gui.remotewipe", QtInfoMsg) RemoteWipe::RemoteWipe(AccountPtr account, QObject *parent) : QObject(parent), diff --git a/src/gui/sharee.cpp b/src/gui/sharee.cpp index 0a45a1e0a1a8e..ab0b48fcdebb1 100644 --- a/src/gui/sharee.cpp +++ b/src/gui/sharee.cpp @@ -22,7 +22,7 @@ namespace OCC { -Q_LOGGING_CATEGORY(lcSharing, "nextcloud.gui.sharing", QtInfoMsg) +Q_LOGGING_CATEGORY(lcSharing, "hidrivenext.gui.sharing", QtInfoMsg) Sharee::Sharee(const QString &shareWith, const QString &displayName, const Type type, const QString &iconUrl) : _shareWith(shareWith) diff --git a/src/gui/sharemanager.cpp b/src/gui/sharemanager.cpp index 74afc9b7c9119..af736ecbe7b5f 100644 --- a/src/gui/sharemanager.cpp +++ b/src/gui/sharemanager.cpp @@ -25,7 +25,7 @@ #include #include -Q_LOGGING_CATEGORY(lcUserGroupShare, "nextcloud.gui.usergroupshare", QtInfoMsg) +Q_LOGGING_CATEGORY(lcUserGroupShare, "hidrivenext.gui.usergroupshare", QtInfoMsg) namespace OCC { diff --git a/src/gui/shellextensionsserver.cpp b/src/gui/shellextensionsserver.cpp index 5f5da92fb16df..0f4c73408fcde 100644 --- a/src/gui/shellextensionsserver.cpp +++ b/src/gui/shellextensionsserver.cpp @@ -31,7 +31,7 @@ constexpr auto isSharedInvalidationInterval = 2 * 60 * 1000; // 2 minutes, so we namespace OCC { -Q_LOGGING_CATEGORY(lcShellExtServer, "nextcloud.gui.shellextensions.server", QtInfoMsg) +Q_LOGGING_CATEGORY(lcShellExtServer, "hidrivenext.gui.shellextensions.server", QtInfoMsg) ShellExtensionsServer::ShellExtensionsServer(QObject *parent) : QObject(parent) diff --git a/src/gui/socketapi/socketapi.cpp b/src/gui/socketapi/socketapi.cpp index c000ca8e20579..c5ed1face4490 100644 --- a/src/gui/socketapi/socketapi.cpp +++ b/src/gui/socketapi/socketapi.cpp @@ -214,8 +214,8 @@ void setClipboardText(const QString &text) namespace OCC { -Q_LOGGING_CATEGORY(lcSocketApi, "nextcloud.gui.socketapi", QtInfoMsg) -Q_LOGGING_CATEGORY(lcPublicLink, "nextcloud.gui.socketapi.publiclink", QtInfoMsg) +Q_LOGGING_CATEGORY(lcSocketApi, "hidrivenext.gui.socketapi", QtInfoMsg) +Q_LOGGING_CATEGORY(lcPublicLink, "hidrivenext.gui.socketapi.publiclink", QtInfoMsg) void SocketListener::sendMessage(const QString &message, bool doWait) const diff --git a/src/gui/sslbutton.cpp b/src/gui/sslbutton.cpp index dede5e1154db6..96286bae08e12 100644 --- a/src/gui/sslbutton.cpp +++ b/src/gui/sslbutton.cpp @@ -26,7 +26,7 @@ namespace OCC { -Q_LOGGING_CATEGORY(lcSsl, "nextcloud.gui.ssl", QtInfoMsg) +Q_LOGGING_CATEGORY(lcSsl, "hidrivenext.gui.ssl", QtInfoMsg) SslButton::SslButton(QWidget *parent) : QToolButton(parent) diff --git a/src/gui/sslerrordialog.cpp b/src/gui/sslerrordialog.cpp index 6dd26b4c4894b..c03269892c562 100644 --- a/src/gui/sslerrordialog.cpp +++ b/src/gui/sslerrordialog.cpp @@ -24,7 +24,7 @@ namespace OCC { -Q_LOGGING_CATEGORY(lcSslErrorDialog, "nextcloud.gui.sslerrordialog", QtInfoMsg) +Q_LOGGING_CATEGORY(lcSslErrorDialog, "hidrivenext.gui.sslerrordialog", QtInfoMsg) namespace Utility { // Used for QSSLCertificate::subjectInfo which returns a QStringList in Qt5, but a QString in Qt4 diff --git a/src/gui/syncconflictsmodel.cpp b/src/gui/syncconflictsmodel.cpp index d6a7e702bcad3..ec3b1eb848743 100644 --- a/src/gui/syncconflictsmodel.cpp +++ b/src/gui/syncconflictsmodel.cpp @@ -20,7 +20,7 @@ namespace OCC { -Q_LOGGING_CATEGORY(lcSyncConflictsModel, "nextcloud.syncconflictsmodel", QtInfoMsg) +Q_LOGGING_CATEGORY(lcSyncConflictsModel, "hidrivenext.syncconflictsmodel", QtInfoMsg) SyncConflictsModel::SyncConflictsModel(QObject *parent) : QAbstractListModel(parent) diff --git a/src/gui/systray.cpp b/src/gui/systray.cpp index 719cd73bc1c89..7f4ca9c7dd753 100644 --- a/src/gui/systray.cpp +++ b/src/gui/systray.cpp @@ -48,7 +48,7 @@ namespace OCC { -Q_LOGGING_CATEGORY(lcSystray, "nextcloud.gui.systray") +Q_LOGGING_CATEGORY(lcSystray, "hidrivenext.gui.systray") Systray *Systray::_instance = nullptr; diff --git a/src/gui/systray_mac_common.mm b/src/gui/systray_mac_common.mm index 8189acd10951e..20c33a588cb05 100644 --- a/src/gui/systray_mac_common.mm +++ b/src/gui/systray_mac_common.mm @@ -18,7 +18,7 @@ #include "systray.h" -Q_LOGGING_CATEGORY(lcMacSystrayCommon, "nextcloud.gui.macsystraycommon") +Q_LOGGING_CATEGORY(lcMacSystrayCommon, "hidrivenext.gui.macsystraycommon") namespace OCC { diff --git a/src/gui/systray_mac_usernotifications.mm b/src/gui/systray_mac_usernotifications.mm index 3d02272c6b312..b1ccf269e5a71 100644 --- a/src/gui/systray_mac_usernotifications.mm +++ b/src/gui/systray_mac_usernotifications.mm @@ -26,7 +26,7 @@ #include "systray.h" #include "tray/talkreply.h" -Q_LOGGING_CATEGORY(lcMacSystrayUserNotifications, "nextcloud.gui.macsystrayusernotifications") +Q_LOGGING_CATEGORY(lcMacSystrayUserNotifications, "hidrivenext.gui.macsystrayusernotifications") /************************* Private utility functions *************************/ diff --git a/src/gui/tray/activitylistmodel.cpp b/src/gui/tray/activitylistmodel.cpp index 996278d895a70..95191e1d89ae8 100644 --- a/src/gui/tray/activitylistmodel.cpp +++ b/src/gui/tray/activitylistmodel.cpp @@ -38,7 +38,7 @@ namespace OCC { -Q_LOGGING_CATEGORY(lcActivity, "nextcloud.gui.activity", QtInfoMsg) +Q_LOGGING_CATEGORY(lcActivity, "hidrivenext.gui.activity", QtInfoMsg) ActivityListModel::ActivityListModel(QObject *parent) : QAbstractListModel(parent) diff --git a/src/gui/tray/notificationhandler.cpp b/src/gui/tray/notificationhandler.cpp index 8701edaf4a693..861d764508955 100644 --- a/src/gui/tray/notificationhandler.cpp +++ b/src/gui/tray/notificationhandler.cpp @@ -11,7 +11,7 @@ namespace OCC { -Q_LOGGING_CATEGORY(lcServerNotification, "nextcloud.gui.servernotification", QtInfoMsg) +Q_LOGGING_CATEGORY(lcServerNotification, "hidrivenext.gui.servernotification", QtInfoMsg) const QString notificationsPath = QLatin1String("ocs/v2.php/apps/notifications/api/v2/notifications"); const char propertyAccountStateC[] = "oc_account_state"; diff --git a/src/gui/tray/svgimageprovider.cpp b/src/gui/tray/svgimageprovider.cpp index b8297b27e6f91..7b45f30e43714 100644 --- a/src/gui/tray/svgimageprovider.cpp +++ b/src/gui/tray/svgimageprovider.cpp @@ -19,7 +19,7 @@ namespace OCC { namespace Ui { - Q_LOGGING_CATEGORY(lcSvgImageProvider, "nextcloud.gui.svgimageprovider", QtInfoMsg) + Q_LOGGING_CATEGORY(lcSvgImageProvider, "hidrivenext.gui.svgimageprovider", QtInfoMsg) SvgImageProvider::SvgImageProvider() : QQuickImageProvider(QQuickImageProvider::Image) diff --git a/src/gui/tray/syncstatussummary.cpp b/src/gui/tray/syncstatussummary.cpp index 0e5d43c921a01..5396b18706d17 100644 --- a/src/gui/tray/syncstatussummary.cpp +++ b/src/gui/tray/syncstatussummary.cpp @@ -43,7 +43,7 @@ OCC::SyncResult::Status determineSyncStatus(const OCC::SyncResult &syncResult) namespace OCC { -Q_LOGGING_CATEGORY(lcSyncStatusModel, "nextcloud.gui.syncstatusmodel", QtInfoMsg) +Q_LOGGING_CATEGORY(lcSyncStatusModel, "hidrivenext.gui.syncstatusmodel", QtInfoMsg) SyncStatusSummary::SyncStatusSummary(QObject *parent) : QObject(parent) diff --git a/src/gui/tray/talkreply.cpp b/src/gui/tray/talkreply.cpp index 732730f172e45..01585b187b98f 100644 --- a/src/gui/tray/talkreply.cpp +++ b/src/gui/tray/talkreply.cpp @@ -9,7 +9,7 @@ namespace OCC { -Q_LOGGING_CATEGORY(lcTalkReply, "nextcloud.gui.talkreply", QtInfoMsg) +Q_LOGGING_CATEGORY(lcTalkReply, "hidrivenext.gui.talkreply", QtInfoMsg) TalkReply::TalkReply(AccountState *accountState, QObject *parent) : QObject(parent) diff --git a/src/gui/tray/unifiedsearchresultslistmodel.cpp b/src/gui/tray/unifiedsearchresultslistmodel.cpp index e7015afead5cf..fc17fa1a30046 100644 --- a/src/gui/tray/unifiedsearchresultslistmodel.cpp +++ b/src/gui/tray/unifiedsearchresultslistmodel.cpp @@ -190,7 +190,7 @@ constexpr int searchTermEditingFinishedSearchStartDelay = 800; constexpr int minimumEntresNumberToShowLoadMore = 5; } namespace OCC { -Q_LOGGING_CATEGORY(lcUnifiedSearch, "nextcloud.gui.unifiedsearch", QtInfoMsg) +Q_LOGGING_CATEGORY(lcUnifiedSearch, "hidrivenext.gui.unifiedsearch", QtInfoMsg) UnifiedSearchResultsListModel::UnifiedSearchResultsListModel(AccountState *accountState, QObject *parent) : QAbstractListModel(parent) diff --git a/src/gui/updater/updater.cpp b/src/gui/updater/updater.cpp index a86a5862356ea..70466a8a8b67a 100644 --- a/src/gui/updater/updater.cpp +++ b/src/gui/updater/updater.cpp @@ -32,7 +32,7 @@ namespace OCC { -Q_LOGGING_CATEGORY(lcUpdater, "nextcloud.gui.updater", QtInfoMsg) +Q_LOGGING_CATEGORY(lcUpdater, "hidrivenext.gui.updater", QtInfoMsg) Updater *Updater::_instance = nullptr; diff --git a/src/gui/userstatusselectormodel.cpp b/src/gui/userstatusselectormodel.cpp index 7bc9172bed4db..722edb047abe3 100644 --- a/src/gui/userstatusselectormodel.cpp +++ b/src/gui/userstatusselectormodel.cpp @@ -27,7 +27,7 @@ namespace OCC { -Q_LOGGING_CATEGORY(lcUserStatusDialogModel, "nextcloud.gui.userstatusdialogmodel", QtInfoMsg) +Q_LOGGING_CATEGORY(lcUserStatusDialogModel, "hidrivenext.gui.userstatusdialogmodel", QtInfoMsg) UserStatusSelectorModel::UserStatusSelectorModel(QObject *parent) : QObject(parent) diff --git a/src/gui/wizard/flow2authwidget.cpp b/src/gui/wizard/flow2authwidget.cpp index 338b7fb04fa70..8c87e91fb52f1 100644 --- a/src/gui/wizard/flow2authwidget.cpp +++ b/src/gui/wizard/flow2authwidget.cpp @@ -32,7 +32,7 @@ namespace OCC { -Q_LOGGING_CATEGORY(lcFlow2AuthWidget, "nextcloud.gui.wizard.flow2authwidget", QtInfoMsg) +Q_LOGGING_CATEGORY(lcFlow2AuthWidget, "hidrivenext.gui.wizard.flow2authwidget", QtInfoMsg) Flow2AuthWidget::Flow2AuthWidget(QWidget *parent) diff --git a/src/gui/wizard/owncloudwizard.cpp b/src/gui/wizard/owncloudwizard.cpp index daa8788254e72..8bfcb1be898a2 100644 --- a/src/gui/wizard/owncloudwizard.cpp +++ b/src/gui/wizard/owncloudwizard.cpp @@ -45,7 +45,7 @@ namespace OCC { -Q_LOGGING_CATEGORY(lcWizard, "nextcloud.gui.wizard", QtInfoMsg) +Q_LOGGING_CATEGORY(lcWizard, "hidrivenext.gui.wizard", QtInfoMsg) OwncloudWizard::OwncloudWizard(QWidget *parent) : QWizard(parent) diff --git a/src/gui/wizard/webview.cpp b/src/gui/wizard/webview.cpp index 0eb0bdb0d1f46..a2fb00b874b90 100644 --- a/src/gui/wizard/webview.cpp +++ b/src/gui/wizard/webview.cpp @@ -21,7 +21,7 @@ namespace OCC { -Q_LOGGING_CATEGORY(lcWizardWebiew, "nextcloud.gui.wizard.webview", QtInfoMsg) +Q_LOGGING_CATEGORY(lcWizardWebiew, "hidrivenext.gui.wizard.webview", QtInfoMsg) class WebViewPageUrlRequestInterceptor : public QWebEngineUrlRequestInterceptor diff --git a/src/gui/wizard/webviewpage.cpp b/src/gui/wizard/webviewpage.cpp index 0d47cb23ee42a..e90d3adb45d4f 100644 --- a/src/gui/wizard/webviewpage.cpp +++ b/src/gui/wizard/webviewpage.cpp @@ -14,7 +14,7 @@ namespace OCC { -Q_LOGGING_CATEGORY(lcWizardWebiewPage, "nextcloud.gui.wizard.webviewpage", QtInfoMsg) +Q_LOGGING_CATEGORY(lcWizardWebiewPage, "hidrivenext.gui.wizard.webviewpage", QtInfoMsg) WebViewPage::WebViewPage(QWidget *parent) diff --git a/src/libsync/abstractnetworkjob.cpp b/src/libsync/abstractnetworkjob.cpp index 86c9e57b5bc34..e865253603e5f 100644 --- a/src/libsync/abstractnetworkjob.cpp +++ b/src/libsync/abstractnetworkjob.cpp @@ -42,7 +42,7 @@ Q_DECLARE_METATYPE(QTimer *) namespace OCC { -Q_LOGGING_CATEGORY(lcNetworkJob, "nextcloud.sync.networkjob", QtInfoMsg) +Q_LOGGING_CATEGORY(lcNetworkJob, "hidrivenext.sync.networkjob", QtInfoMsg) // If not set, it is overwritten by the Application constructor with the value from the config int AbstractNetworkJob::httpTimeout = qEnvironmentVariableIntValue("OWNCLOUD_TIMEOUT"); diff --git a/src/libsync/accessmanager.cpp b/src/libsync/accessmanager.cpp index 865c7ed9a42ee..708c017ff5cff 100644 --- a/src/libsync/accessmanager.cpp +++ b/src/libsync/accessmanager.cpp @@ -30,7 +30,7 @@ namespace OCC { -Q_LOGGING_CATEGORY(lcAccessManager, "nextcloud.sync.accessmanager", QtInfoMsg) +Q_LOGGING_CATEGORY(lcAccessManager, "hidrivenext.sync.accessmanager", QtInfoMsg) AccessManager::AccessManager(QObject *parent) : QNetworkAccessManager(parent) diff --git a/src/libsync/account.cpp b/src/libsync/account.cpp index 3342e5d85a423..3ec88a65c424a 100644 --- a/src/libsync/account.cpp +++ b/src/libsync/account.cpp @@ -71,7 +71,7 @@ constexpr auto isSkipE2eeMetadataChecksumValidationAllowedInClientVersion = MIRA } namespace OCC { -Q_LOGGING_CATEGORY(lcAccount, "nextcloud.sync.account", QtInfoMsg) +Q_LOGGING_CATEGORY(lcAccount, "hidrivenext.sync.account", QtInfoMsg) const char app_password[] = "_app-password"; Account::Account(QObject *parent) diff --git a/src/libsync/bandwidthmanager.cpp b/src/libsync/bandwidthmanager.cpp index 358822e6be443..98b8474ae565a 100644 --- a/src/libsync/bandwidthmanager.cpp +++ b/src/libsync/bandwidthmanager.cpp @@ -29,7 +29,7 @@ namespace OCC { -Q_LOGGING_CATEGORY(lcBandwidthManager, "nextcloud.sync.bandwidthmanager", QtInfoMsg) +Q_LOGGING_CATEGORY(lcBandwidthManager, "hidrivenext.sync.bandwidthmanager", QtInfoMsg) // Because of the many layers of buffering inside Qt (and probably the OS and the network) // we cannot lower this value much more. If we do, the estimated bw will be very high diff --git a/src/libsync/basepropagateremotedeleteencrypted.cpp b/src/libsync/basepropagateremotedeleteencrypted.cpp index 17e5d95aa4828..16d8fa9431fbf 100644 --- a/src/libsync/basepropagateremotedeleteencrypted.cpp +++ b/src/libsync/basepropagateremotedeleteencrypted.cpp @@ -21,7 +21,7 @@ #include "deletejob.h" #include "owncloudpropagator.h" -Q_LOGGING_CATEGORY(ABSTRACT_PROPAGATE_REMOVE_ENCRYPTED, "nextcloud.sync.propagator.remove.encrypted") +Q_LOGGING_CATEGORY(ABSTRACT_PROPAGATE_REMOVE_ENCRYPTED, "hidrivenext.sync.propagator.remove.encrypted") namespace OCC { diff --git a/src/libsync/bulkpropagatorjob.cpp b/src/libsync/bulkpropagatorjob.cpp index 80d17d1c9c196..6bfff2cd94ffe 100644 --- a/src/libsync/bulkpropagatorjob.cpp +++ b/src/libsync/bulkpropagatorjob.cpp @@ -64,7 +64,7 @@ constexpr auto parallelJobsMaximumCount = 1; namespace OCC { -Q_LOGGING_CATEGORY(lcBulkPropagatorJob, "nextcloud.sync.propagator.bulkupload", QtInfoMsg) +Q_LOGGING_CATEGORY(lcBulkPropagatorJob, "hidrivenext.sync.propagator.bulkupload", QtInfoMsg) BulkPropagatorJob::BulkPropagatorJob(OwncloudPropagator *propagator, const std::deque &items) : PropagatorJob(propagator) diff --git a/src/libsync/capabilities.cpp b/src/libsync/capabilities.cpp index 784320dea71b2..e4deecd14758f 100644 --- a/src/libsync/capabilities.cpp +++ b/src/libsync/capabilities.cpp @@ -23,7 +23,7 @@ namespace OCC { -Q_LOGGING_CATEGORY(lcServerCapabilities, "nextcloud.sync.server.capabilities", QtInfoMsg) +Q_LOGGING_CATEGORY(lcServerCapabilities, "hidrivenext.sync.server.capabilities", QtInfoMsg) Capabilities::Capabilities(const QVariantMap &capabilities) diff --git a/src/libsync/caseclashconflictsolver.cpp b/src/libsync/caseclashconflictsolver.cpp index dc758ba4ed4cf..ae6420e4a3732 100644 --- a/src/libsync/caseclashconflictsolver.cpp +++ b/src/libsync/caseclashconflictsolver.cpp @@ -27,7 +27,7 @@ using namespace OCC; -Q_LOGGING_CATEGORY(lcCaseClashConflictSolver, "nextcloud.sync.caseclash.solver", QtInfoMsg) +Q_LOGGING_CATEGORY(lcCaseClashConflictSolver, "hidrivenext.sync.caseclash.solver", QtInfoMsg) CaseClashConflictSolver::CaseClashConflictSolver(const QString &targetFilePath, const QString &conflictFilePath, diff --git a/src/libsync/clientproxy.cpp b/src/libsync/clientproxy.cpp index d407a4ef6c568..04d8f03e73a1d 100644 --- a/src/libsync/clientproxy.cpp +++ b/src/libsync/clientproxy.cpp @@ -31,7 +31,7 @@ namespace { namespace OCC { -Q_LOGGING_CATEGORY(lcClientProxy, "nextcloud.sync.clientproxy", QtInfoMsg) +Q_LOGGING_CATEGORY(lcClientProxy, "hidrivenext.sync.clientproxy", QtInfoMsg) ClientProxy::ClientProxy(QObject *parent) : QObject(parent) diff --git a/src/libsync/clientsideencryption.cpp b/src/libsync/clientsideencryption.cpp index 06432ee295f30..4658a0c50bad8 100644 --- a/src/libsync/clientsideencryption.cpp +++ b/src/libsync/clientsideencryption.cpp @@ -76,9 +76,8 @@ using namespace QKeychain; namespace OCC { -Q_LOGGING_CATEGORY(lcCse, "nextcloud.sync.clientsideencryption", QtInfoMsg) -Q_LOGGING_CATEGORY(lcCseDecryption, "nextcloud.sync.clientsideencryption.decryption", QtInfoMsg) -Q_LOGGING_CATEGORY(lcCseEncryption, "nextcloud.sync.clientsideencryption.encryption", QtInfoMsg) +Q_LOGGING_CATEGORY(lcCse, "hidrivenext.sync.clientsideencryption", QtInfoMsg) +Q_LOGGING_CATEGORY(lcCseDecryption, "hidrivenext.e2e", QtInfoMsg) QString e2eeBaseUrl(const OCC::AccountPtr &account) { diff --git a/src/libsync/clientsideencryptionjobs.cpp b/src/libsync/clientsideencryptionjobs.cpp index ecd3242afac49..f3325daeb080a 100644 --- a/src/libsync/clientsideencryptionjobs.cpp +++ b/src/libsync/clientsideencryptionjobs.cpp @@ -19,10 +19,9 @@ #include "creds/abstractcredentials.h" #include "common/syncjournaldb.h" -Q_LOGGING_CATEGORY(lcSignPublicKeyApiJob, "nextcloud.sync.networkjob.sendcsr", QtInfoMsg) -Q_LOGGING_CATEGORY(lcStorePublicKeyApiJob, "nextcloud.sync.networkjob.storepublickey", QtInfoMsg) -Q_LOGGING_CATEGORY(lcStorePrivateKeyApiJob, "nextcloud.sync.networkjob.storeprivatekey", QtInfoMsg) -Q_LOGGING_CATEGORY(lcCseJob, "nextcloud.sync.networkjob.clientsideencrypt", QtInfoMsg) +Q_LOGGING_CATEGORY(lcSignPublicKeyApiJob, "hidrivenext.sync.networkjob.sendcsr", QtInfoMsg) +Q_LOGGING_CATEGORY(lcStorePrivateKeyApiJob, "hidrivenext.sync.networkjob.storeprivatekey", QtInfoMsg) +Q_LOGGING_CATEGORY(lcCseJob, "hidrivenext.sync.networkjob.clientsideencrypt", QtInfoMsg) namespace { diff --git a/src/libsync/clientstatusreporting.cpp b/src/libsync/clientstatusreporting.cpp index 682ff206e1c31..26fc2d5e22ac8 100644 --- a/src/libsync/clientstatusreporting.cpp +++ b/src/libsync/clientstatusreporting.cpp @@ -20,7 +20,7 @@ namespace OCC { -Q_LOGGING_CATEGORY(lcClientStatusReporting, "nextcloud.sync.clientstatusreporting", QtInfoMsg) +Q_LOGGING_CATEGORY(lcClientStatusReporting, "hidrivenext.sync.clientstatusreporting", QtInfoMsg) ClientStatusReporting::ClientStatusReporting(Account *account) { diff --git a/src/libsync/clientstatusreportingcommon.cpp b/src/libsync/clientstatusreportingcommon.cpp index 16f0b0a1a8f8e..4268fabb1afc5 100644 --- a/src/libsync/clientstatusreportingcommon.cpp +++ b/src/libsync/clientstatusreportingcommon.cpp @@ -16,7 +16,7 @@ #include namespace OCC { -Q_LOGGING_CATEGORY(lcClientStatusReportingCommon, "nextcloud.sync.clientstatusreportingcommon", QtInfoMsg) +Q_LOGGING_CATEGORY(lcClientStatusReportingCommon, "hidrivenext.sync.clientstatusreportingcommon", QtInfoMsg) QByteArray clientStatusstatusStringFromNumber(const ClientStatusReportingStatus status) { diff --git a/src/libsync/clientstatusreportingdatabase.cpp b/src/libsync/clientstatusreportingdatabase.cpp index 169df5e13fffe..7a33a28f77c70 100644 --- a/src/libsync/clientstatusreportingdatabase.cpp +++ b/src/libsync/clientstatusreportingdatabase.cpp @@ -28,7 +28,7 @@ constexpr auto statusNamesHash = "statusNamesHash"; namespace OCC { -Q_LOGGING_CATEGORY(lcClientStatusReportingDatabase, "nextcloud.sync.clientstatusreportingdatabase", QtInfoMsg) +Q_LOGGING_CATEGORY(lcClientStatusReportingDatabase, "hidrivenext.sync.clientstatusreportingdatabase", QtInfoMsg) ClientStatusReportingDatabase::ClientStatusReportingDatabase(const Account *account) { diff --git a/src/libsync/clientstatusreportingnetwork.cpp b/src/libsync/clientstatusreportingnetwork.cpp index 08e6416fadb5d..1be91da8955e9 100644 --- a/src/libsync/clientstatusreportingnetwork.cpp +++ b/src/libsync/clientstatusreportingnetwork.cpp @@ -28,7 +28,7 @@ constexpr auto statusReportCategoryVirus = "virus_detected"; namespace OCC { -Q_LOGGING_CATEGORY(lcClientStatusReportingNetwork, "nextcloud.sync.clientstatusreportingnetwork", QtInfoMsg) +Q_LOGGING_CATEGORY(lcClientStatusReportingNetwork, "hidrivenext.sync.clientstatusreportingnetwork", QtInfoMsg) ClientStatusReportingNetwork::ClientStatusReportingNetwork(Account *account, const QSharedPointer database, QObject *parent) : QObject(parent) diff --git a/src/libsync/configfile.cpp b/src/libsync/configfile.cpp index 56860002d8c25..fb67779370b5d 100644 --- a/src/libsync/configfile.cpp +++ b/src/libsync/configfile.cpp @@ -111,7 +111,7 @@ namespace OCC { namespace chrono = std::chrono; -Q_LOGGING_CATEGORY(lcConfigFile, "nextcloud.sync.configfile", QtInfoMsg) +Q_LOGGING_CATEGORY(lcConfigFile, "hidrivenext.sync.configfile", QtInfoMsg) QString ConfigFile::_confDir = {}; QString ConfigFile::_discoveredLegacyConfigPath = {}; diff --git a/src/libsync/cookiejar.cpp b/src/libsync/cookiejar.cpp index ca87279013a08..8845b0396c235 100644 --- a/src/libsync/cookiejar.cpp +++ b/src/libsync/cookiejar.cpp @@ -25,7 +25,7 @@ namespace OCC { -Q_LOGGING_CATEGORY(lcCookieJar, "nextcloud.sync.cookiejar", QtInfoMsg) +Q_LOGGING_CATEGORY(lcCookieJar, "hidrivenext.sync.cookiejar", QtInfoMsg) namespace { const unsigned int JAR_VERSION = 23; diff --git a/src/libsync/creds/abstractcredentials.cpp b/src/libsync/creds/abstractcredentials.cpp index 2f2b8b49b8c9d..e4f73dd908145 100644 --- a/src/libsync/creds/abstractcredentials.cpp +++ b/src/libsync/creds/abstractcredentials.cpp @@ -21,7 +21,7 @@ namespace OCC { -Q_LOGGING_CATEGORY(lcCredentials, "nextcloud.sync.credentials", QtInfoMsg) +Q_LOGGING_CATEGORY(lcCredentials, "hidrivenext.sync.credentials", QtInfoMsg) AbstractCredentials::AbstractCredentials() = default; diff --git a/src/libsync/creds/httpcredentials.cpp b/src/libsync/creds/httpcredentials.cpp index 2480cb9236f06..765afd5d2e10b 100644 --- a/src/libsync/creds/httpcredentials.cpp +++ b/src/libsync/creds/httpcredentials.cpp @@ -35,7 +35,7 @@ namespace OCC { -Q_LOGGING_CATEGORY(lcHttpCredentials, "nextcloud.sync.credentials.http", QtInfoMsg) +Q_LOGGING_CATEGORY(lcHttpCredentials, "hidrivenext.sync.credentials.http", QtInfoMsg) namespace { const char userC[] = "user"; diff --git a/src/libsync/creds/keychainchunk.cpp b/src/libsync/creds/keychainchunk.cpp index 115c4321dbdc8..10cca29921851 100644 --- a/src/libsync/creds/keychainchunk.cpp +++ b/src/libsync/creds/keychainchunk.cpp @@ -25,7 +25,7 @@ using namespace QKeychain; namespace OCC { -Q_LOGGING_CATEGORY(lcKeychainChunk, "nextcloud.sync.credentials.keychainchunk", QtInfoMsg) +Q_LOGGING_CATEGORY(lcKeychainChunk, "hidrivenext.sync.credentials.keychainchunk", QtInfoMsg) namespace KeychainChunk { diff --git a/src/libsync/creds/tokencredentials.cpp b/src/libsync/creds/tokencredentials.cpp index 85b5032ce5a24..d9dd78e90a088 100644 --- a/src/libsync/creds/tokencredentials.cpp +++ b/src/libsync/creds/tokencredentials.cpp @@ -29,7 +29,7 @@ namespace OCC { -Q_LOGGING_CATEGORY(lcTokenCredentials, "nextcloud.sync.credentials.token", QtInfoMsg) +Q_LOGGING_CATEGORY(lcTokenCredentials, "hidrivenext.sync.credentials.token", QtInfoMsg) namespace { diff --git a/src/libsync/deletejob.cpp b/src/libsync/deletejob.cpp index 67a79756d79bc..2e5874de8a0a8 100644 --- a/src/libsync/deletejob.cpp +++ b/src/libsync/deletejob.cpp @@ -18,7 +18,7 @@ namespace OCC { -Q_LOGGING_CATEGORY(lcDeleteJob, "nextcloud.sync.networkjob.delete", QtInfoMsg) +Q_LOGGING_CATEGORY(lcDeleteJob, "hidrivenext.sync.networkjob.delete", QtInfoMsg) DeleteJob::DeleteJob(AccountPtr account, const QString &path, const QMap &headers, QObject *parent) : SimpleFileJob(account, path, parent) diff --git a/src/libsync/discovery.cpp b/src/libsync/discovery.cpp index c95af63c7674c..bca5258853a88 100644 --- a/src/libsync/discovery.cpp +++ b/src/libsync/discovery.cpp @@ -43,7 +43,7 @@ constexpr auto delayIntervalForSyncRetryForOpenedForSigningFilesSeconds = 60; namespace OCC { -Q_LOGGING_CATEGORY(lcDisco, "nextcloud.sync.discovery", QtInfoMsg) +Q_LOGGING_CATEGORY(lcDisco, "hidrivenext.sync.discovery", QtInfoMsg) ProcessDirectoryJob::ProcessDirectoryJob(DiscoveryPhase *data, PinState basePinState, qint64 lastSyncTimestamp, QObject *parent) : QObject(parent) diff --git a/src/libsync/discoveryphase.cpp b/src/libsync/discoveryphase.cpp index 7edd684675cc9..ee88c2505cd5d 100644 --- a/src/libsync/discoveryphase.cpp +++ b/src/libsync/discoveryphase.cpp @@ -40,7 +40,7 @@ namespace OCC { -Q_LOGGING_CATEGORY(lcDiscovery, "nextcloud.sync.discovery", QtInfoMsg) +Q_LOGGING_CATEGORY(lcDiscovery, "hidrivenext.sync.discovery", QtInfoMsg) bool DiscoveryPhase::isInSelectiveSyncBlackList(const QString &path) const { diff --git a/src/libsync/encryptedfoldermetadatahandler.cpp b/src/libsync/encryptedfoldermetadatahandler.cpp index 7dfcb11e80c1b..535aec744eaff 100644 --- a/src/libsync/encryptedfoldermetadatahandler.cpp +++ b/src/libsync/encryptedfoldermetadatahandler.cpp @@ -25,7 +25,7 @@ namespace OCC { -Q_LOGGING_CATEGORY(lcFetchAndUploadE2eeFolderMetadataJob, "nextcloud.sync.propagator.encryptedfoldermetadatahandler", QtInfoMsg) +Q_LOGGING_CATEGORY(lcFetchAndUploadE2eeFolderMetadataJob, "hidrivenext.sync.propagator.encryptedfoldermetadatahandler", QtInfoMsg) } diff --git a/src/libsync/encryptfolderjob.cpp b/src/libsync/encryptfolderjob.cpp index b78eec7dabf1e..503b434e6dfbc 100644 --- a/src/libsync/encryptfolderjob.cpp +++ b/src/libsync/encryptfolderjob.cpp @@ -21,7 +21,7 @@ namespace OCC { -Q_LOGGING_CATEGORY(lcEncryptFolderJob, "nextcloud.sync.propagator.encryptfolder", QtInfoMsg) +Q_LOGGING_CATEGORY(lcEncryptFolderJob, "hidrivenext.sync.propagator.encryptfolder", QtInfoMsg) EncryptFolderJob::EncryptFolderJob(const AccountPtr &account, SyncJournalDb *journal, const QString &path, const QString &pathNonEncrypted, const QString &remoteSyncRootPath, const QByteArray &fileId, OwncloudPropagator *propagator, SyncFileItemPtr item, QObject * parent) diff --git a/src/libsync/foldermetadata.cpp b/src/libsync/foldermetadata.cpp index 3a32daa73a5f4..e94bfdc8bb425 100644 --- a/src/libsync/foldermetadata.cpp +++ b/src/libsync/foldermetadata.cpp @@ -24,7 +24,7 @@ namespace OCC { -Q_LOGGING_CATEGORY(lcCseMetadata, "nextcloud.sync.clientsideencryption.metadata", QtInfoMsg) +Q_LOGGING_CATEGORY(lcCseMetadata, "hidrivenext.metadata", QtInfoMsg) namespace { diff --git a/src/libsync/lockfilejobs.cpp b/src/libsync/lockfilejobs.cpp index b7506dd4e05b3..45835bd1745b2 100644 --- a/src/libsync/lockfilejobs.cpp +++ b/src/libsync/lockfilejobs.cpp @@ -24,7 +24,7 @@ namespace OCC { -Q_LOGGING_CATEGORY(lcLockFileJob, "nextcloud.sync.networkjob.lockfile", QtInfoMsg) +Q_LOGGING_CATEGORY(lcLockFileJob, "hidrivenext.sync.networkjob.lockfile", QtInfoMsg) LockFileJob::LockFileJob(const AccountPtr account, SyncJournalDb* const journal, diff --git a/src/libsync/logger.cpp b/src/libsync/logger.cpp index 96704782a7be2..b878f2fe9a29e 100644 --- a/src/libsync/logger.cpp +++ b/src/libsync/logger.cpp @@ -69,7 +69,7 @@ static bool compressLog(const QString &originalName, const QString &targetName) namespace OCC { -Q_LOGGING_CATEGORY(lcPermanentLog, "nextcloud.log.permanent") +Q_LOGGING_CATEGORY(lcPermanentLog, "hidrivenext.log.permanent") Logger *Logger::instance() { diff --git a/src/libsync/networkjobs.cpp b/src/libsync/networkjobs.cpp index 5237800a73918..acbcf255ce143 100644 --- a/src/libsync/networkjobs.cpp +++ b/src/libsync/networkjobs.cpp @@ -48,18 +48,18 @@ namespace OCC { -Q_LOGGING_CATEGORY(lcEtagJob, "nextcloud.sync.networkjob.etag", QtInfoMsg) -Q_LOGGING_CATEGORY(lcLsColJob, "nextcloud.sync.networkjob.lscol", QtInfoMsg) -Q_LOGGING_CATEGORY(lcCheckServerJob, "nextcloud.sync.networkjob.checkserver", QtInfoMsg) -Q_LOGGING_CATEGORY(lcCheckRedirectCostFreeUrlJob, "nextcloud.sync.networkjob.checkredirectcostfreeurl", QtInfoMsg) -Q_LOGGING_CATEGORY(lcPropfindJob, "nextcloud.sync.networkjob.propfind", QtInfoMsg) -Q_LOGGING_CATEGORY(lcAvatarJob, "nextcloud.sync.networkjob.avatar", QtInfoMsg) -Q_LOGGING_CATEGORY(lcMkColJob, "nextcloud.sync.networkjob.mkcol", QtInfoMsg) -Q_LOGGING_CATEGORY(lcProppatchJob, "nextcloud.sync.networkjob.proppatch", QtInfoMsg) -Q_LOGGING_CATEGORY(lcJsonApiJob, "nextcloud.sync.networkjob.jsonapi", QtInfoMsg) -Q_LOGGING_CATEGORY(lcSimpleApiJob, "nextcloud.sync.networkjob.simpleapi", QtInfoMsg) -Q_LOGGING_CATEGORY(lcDetermineAuthTypeJob, "nextcloud.sync.networkjob.determineauthtype", QtInfoMsg) -Q_LOGGING_CATEGORY(lcSimpleFileJob, "nextcloud.sync.networkjob.simplefilejob", QtInfoMsg) +Q_LOGGING_CATEGORY(lcEtagJob, "hidrivenext.sync.networkjob.etag", QtInfoMsg) +Q_LOGGING_CATEGORY(lcLsColJob, "hidrivenext.sync.networkjob.lscol", QtInfoMsg) +Q_LOGGING_CATEGORY(lcCheckServerJob, "hidrivenext.sync.networkjob.checkserver", QtInfoMsg) +Q_LOGGING_CATEGORY(lcCheckRedirectCostFreeUrlJob, "hidrivenext.sync.networkjob.checkredirectcostfreeurl", QtInfoMsg) +Q_LOGGING_CATEGORY(lcPropfindJob, "hidrivenext.sync.networkjob.propfind", QtInfoMsg) +Q_LOGGING_CATEGORY(lcAvatarJob, "hidrivenext.sync.networkjob.avatar", QtInfoMsg) +Q_LOGGING_CATEGORY(lcMkColJob, "hidrivenext.sync.networkjob.mkcol", QtInfoMsg) +Q_LOGGING_CATEGORY(lcProppatchJob, "hidrivenext.sync.networkjob.proppatch", QtInfoMsg) +Q_LOGGING_CATEGORY(lcJsonApiJob, "hidrivenext.sync.networkjob.jsonapi", QtInfoMsg) +Q_LOGGING_CATEGORY(lcSimpleApiJob, "hidrivenext.sync.networkjob.simpleapi", QtInfoMsg) +Q_LOGGING_CATEGORY(lcDetermineAuthTypeJob, "hidrivenext.sync.networkjob.determineauthtype", QtInfoMsg) +Q_LOGGING_CATEGORY(lcSimpleFileJob, "hidrivenext.sync.networkjob.simplefilejob", QtInfoMsg) constexpr auto notModifiedStatusCode = 304; constexpr auto propfindPropElementTagName = "prop"; diff --git a/src/libsync/ocsprofileconnector.cpp b/src/libsync/ocsprofileconnector.cpp index c24d5f85f59ef..655bcdbb0e8e5 100644 --- a/src/libsync/ocsprofileconnector.cpp +++ b/src/libsync/ocsprofileconnector.cpp @@ -19,7 +19,7 @@ #include namespace { -Q_LOGGING_CATEGORY(lcOcsProfileConnector, "nextcloud.gui.ocsprofileconnector", QtInfoMsg) +Q_LOGGING_CATEGORY(lcOcsProfileConnector, "hidrivenext.gui.ocsprofileconnector", QtInfoMsg) OCC::HovercardAction jsonToAction(const QJsonObject &jsonActionObject) { diff --git a/src/libsync/ocsuserstatusconnector.cpp b/src/libsync/ocsuserstatusconnector.cpp index ac403d01d3895..0bf063fe35fcf 100644 --- a/src/libsync/ocsuserstatusconnector.cpp +++ b/src/libsync/ocsuserstatusconnector.cpp @@ -33,7 +33,7 @@ namespace { -Q_LOGGING_CATEGORY(lcOcsUserStatusConnector, "nextcloud.gui.ocsuserstatusconnector", QtInfoMsg) +Q_LOGGING_CATEGORY(lcOcsUserStatusConnector, "hidrivenext.gui.ocsuserstatusconnector", QtInfoMsg) OCC::UserStatus::OnlineStatus stringToUserOnlineStatus(const QString &status) { diff --git a/src/libsync/owncloudpropagator.cpp b/src/libsync/owncloudpropagator.cpp index fba85c539ca16..ad2a71ae42600 100644 --- a/src/libsync/owncloudpropagator.cpp +++ b/src/libsync/owncloudpropagator.cpp @@ -50,10 +50,10 @@ namespace OCC { -Q_LOGGING_CATEGORY(lcPropagator, "nextcloud.sync.propagator", QtInfoMsg) -Q_LOGGING_CATEGORY(lcDirectory, "nextcloud.sync.propagator.directory", QtInfoMsg) -Q_LOGGING_CATEGORY(lcRootDirectory, "nextcloud.sync.propagator.root.directory", QtInfoMsg) -Q_LOGGING_CATEGORY(lcCleanupPolls, "nextcloud.sync.propagator.cleanuppolls", QtInfoMsg) +Q_LOGGING_CATEGORY(lcPropagator, "hidrivenext.sync.propagator", QtInfoMsg) +Q_LOGGING_CATEGORY(lcDirectory, "hidrivenext.sync.propagator.directory", QtInfoMsg) +Q_LOGGING_CATEGORY(lcRootDirectory, "hidrivenext.sync.propagator.root.directory", QtInfoMsg) +Q_LOGGING_CATEGORY(lcCleanupPolls, "hidrivenext.sync.propagator.cleanuppolls", QtInfoMsg) qint64 criticalFreeSpaceLimit() { diff --git a/src/libsync/propagatedownload.cpp b/src/libsync/propagatedownload.cpp index 2b05b51f97be3..af0eaed4fffc0 100644 --- a/src/libsync/propagatedownload.cpp +++ b/src/libsync/propagatedownload.cpp @@ -37,8 +37,8 @@ namespace OCC { -Q_LOGGING_CATEGORY(lcGetJob, "nextcloud.sync.networkjob.get", QtInfoMsg) -Q_LOGGING_CATEGORY(lcPropagateDownload, "nextcloud.sync.propagator.download", QtInfoMsg) +Q_LOGGING_CATEGORY(lcGetJob, "hidrivenext.sync.networkjob.get", QtInfoMsg) +Q_LOGGING_CATEGORY(lcPropagateDownload, "hidrivenext.sync.propagator.download", QtInfoMsg) // Always coming in with forward slashes. // In csync_excluded_no_ctx we ignore all files with longer than 254 chars diff --git a/src/libsync/propagatedownloadencrypted.cpp b/src/libsync/propagatedownloadencrypted.cpp index 52abaec5be0ee..59f2423055212 100644 --- a/src/libsync/propagatedownloadencrypted.cpp +++ b/src/libsync/propagatedownloadencrypted.cpp @@ -3,7 +3,7 @@ #include "encryptedfoldermetadatahandler.h" #include "foldermetadata.h" -Q_LOGGING_CATEGORY(lcPropagateDownloadEncrypted, "nextcloud.sync.propagator.download.encrypted", QtInfoMsg) +Q_LOGGING_CATEGORY(lcPropagateDownloadEncrypted, "hidrivenext.sync.propagator.download.encrypted", QtInfoMsg) namespace OCC { diff --git a/src/libsync/propagateremotedelete.cpp b/src/libsync/propagateremotedelete.cpp index 6557394951907..4279191bebb17 100644 --- a/src/libsync/propagateremotedelete.cpp +++ b/src/libsync/propagateremotedelete.cpp @@ -24,7 +24,7 @@ namespace OCC { -Q_LOGGING_CATEGORY(lcPropagateRemoteDelete, "nextcloud.sync.propagator.remotedelete", QtInfoMsg) +Q_LOGGING_CATEGORY(lcPropagateRemoteDelete, "hidrivenext.sync.propagator.remotedelete", QtInfoMsg) void PropagateRemoteDelete::start() { diff --git a/src/libsync/propagateremotedeleteencrypted.cpp b/src/libsync/propagateremotedeleteencrypted.cpp index 0bb8c92e6a4b4..555c007516e52 100644 --- a/src/libsync/propagateremotedeleteencrypted.cpp +++ b/src/libsync/propagateremotedeleteencrypted.cpp @@ -22,7 +22,7 @@ using namespace OCC; -Q_LOGGING_CATEGORY(PROPAGATE_REMOVE_ENCRYPTED, "nextcloud.sync.propagator.remove.encrypted") +Q_LOGGING_CATEGORY(PROPAGATE_REMOVE_ENCRYPTED, "hidrivenext.sync.propagator.remove.encrypted") PropagateRemoteDeleteEncrypted::PropagateRemoteDeleteEncrypted(OwncloudPropagator *propagator, SyncFileItemPtr item, QObject *parent) : BasePropagateRemoteDeleteEncrypted(propagator, item, parent) diff --git a/src/libsync/propagateremotedeleteencryptedrootfolder.cpp b/src/libsync/propagateremotedeleteencryptedrootfolder.cpp index 513c69d892fb4..5dd29af62fdba 100644 --- a/src/libsync/propagateremotedeleteencryptedrootfolder.cpp +++ b/src/libsync/propagateremotedeleteencryptedrootfolder.cpp @@ -40,7 +40,7 @@ namespace { using namespace OCC; -Q_LOGGING_CATEGORY(PROPAGATE_REMOVE_ENCRYPTED_ROOTFOLDER, "nextcloud.sync.propagator.remove.encrypted.rootfolder") +Q_LOGGING_CATEGORY(PROPAGATE_REMOVE_ENCRYPTED_ROOTFOLDER, "hidrivenext.sync.propagator.remove.encrypted.rootfolder") PropagateRemoteDeleteEncryptedRootFolder::PropagateRemoteDeleteEncryptedRootFolder(OwncloudPropagator *propagator, SyncFileItemPtr item, QObject *parent) : BasePropagateRemoteDeleteEncrypted(propagator, item, parent) diff --git a/src/libsync/propagateremotemkdir.cpp b/src/libsync/propagateremotemkdir.cpp index f39f391886106..cca64fb82fe60 100644 --- a/src/libsync/propagateremotemkdir.cpp +++ b/src/libsync/propagateremotemkdir.cpp @@ -28,7 +28,7 @@ namespace OCC { -Q_LOGGING_CATEGORY(lcPropagateRemoteMkdir, "nextcloud.sync.propagator.remotemkdir", QtInfoMsg) +Q_LOGGING_CATEGORY(lcPropagateRemoteMkdir, "hidrivenext.sync.propagator.remotemkdir", QtInfoMsg) PropagateRemoteMkdir::PropagateRemoteMkdir(OwncloudPropagator *propagator, const SyncFileItemPtr &item) : PropagateItemJob(propagator, item) diff --git a/src/libsync/propagateremotemove.cpp b/src/libsync/propagateremotemove.cpp index 63078c69799fe..2d0fa3c13a27d 100644 --- a/src/libsync/propagateremotemove.cpp +++ b/src/libsync/propagateremotemove.cpp @@ -27,8 +27,8 @@ namespace OCC { -Q_LOGGING_CATEGORY(lcMoveJob, "nextcloud.sync.networkjob.move", QtInfoMsg) -Q_LOGGING_CATEGORY(lcPropagateRemoteMove, "nextcloud.sync.propagator.remotemove", QtInfoMsg) +Q_LOGGING_CATEGORY(lcMoveJob, "hidrivenext.sync.networkjob.move", QtInfoMsg) +Q_LOGGING_CATEGORY(lcPropagateRemoteMove, "hidrivenext.sync.propagator.remotemove", QtInfoMsg) MoveJob::MoveJob(AccountPtr account, const QString &path, const QString &destination, QObject *parent) diff --git a/src/libsync/propagateupload.cpp b/src/libsync/propagateupload.cpp index ab7899c525c7d..3ac036f5a04df 100644 --- a/src/libsync/propagateupload.cpp +++ b/src/libsync/propagateupload.cpp @@ -43,11 +43,11 @@ namespace OCC { -Q_LOGGING_CATEGORY(lcPutJob, "nextcloud.sync.networkjob.put", QtInfoMsg) -Q_LOGGING_CATEGORY(lcPollJob, "nextcloud.sync.networkjob.poll", QtInfoMsg) -Q_LOGGING_CATEGORY(lcPropagateUpload, "nextcloud.sync.propagator.upload", QtInfoMsg) -Q_LOGGING_CATEGORY(lcPropagateUploadV1, "nextcloud.sync.propagator.upload.v1", QtInfoMsg) -Q_LOGGING_CATEGORY(lcPropagateUploadNG, "nextcloud.sync.propagator.upload.ng", QtInfoMsg) +Q_LOGGING_CATEGORY(lcPutJob, "hidrivenext.sync.networkjob.put", QtInfoMsg) +Q_LOGGING_CATEGORY(lcPollJob, "hidrivenext.sync.networkjob.poll", QtInfoMsg) +Q_LOGGING_CATEGORY(lcPropagateUpload, "hidrivenext.sync.propagator.upload", QtInfoMsg) +Q_LOGGING_CATEGORY(lcPropagateUploadV1, "hidrivenext.sync.propagator.upload.v1", QtInfoMsg) +Q_LOGGING_CATEGORY(lcPropagateUploadNG, "hidrivenext.sync.propagator.upload.ng", QtInfoMsg) PUTFileJob::~PUTFileJob() { diff --git a/src/libsync/propagateuploadencrypted.cpp b/src/libsync/propagateuploadencrypted.cpp index 0f156b0282d5f..4aa47cbbc098e 100644 --- a/src/libsync/propagateuploadencrypted.cpp +++ b/src/libsync/propagateuploadencrypted.cpp @@ -16,7 +16,7 @@ namespace OCC { -Q_LOGGING_CATEGORY(lcPropagateUploadEncrypted, "nextcloud.sync.propagator.upload.encrypted", QtInfoMsg) +Q_LOGGING_CATEGORY(lcPropagateUploadEncrypted, "hidrivenext.sync.propagator.upload.encrypted", QtInfoMsg) PropagateUploadEncrypted::PropagateUploadEncrypted(OwncloudPropagator *propagator, const QString &remoteParentPath, SyncFileItemPtr item, QObject *parent) : QObject(parent) diff --git a/src/libsync/propagatorjobs.cpp b/src/libsync/propagatorjobs.cpp index ca0919b5f51bd..ecdc50e705dc2 100644 --- a/src/libsync/propagatorjobs.cpp +++ b/src/libsync/propagatorjobs.cpp @@ -38,9 +38,9 @@ namespace OCC { -Q_LOGGING_CATEGORY(lcPropagateLocalRemove, "nextcloud.sync.propagator.localremove", QtInfoMsg) -Q_LOGGING_CATEGORY(lcPropagateLocalMkdir, "nextcloud.sync.propagator.localmkdir", QtInfoMsg) -Q_LOGGING_CATEGORY(lcPropagateLocalRename, "nextcloud.sync.propagator.localrename", QtInfoMsg) +Q_LOGGING_CATEGORY(lcPropagateLocalRemove, "hidrivenext.sync.propagator.localremove", QtInfoMsg) +Q_LOGGING_CATEGORY(lcPropagateLocalMkdir, "hidrivenext.sync.propagator.localmkdir", QtInfoMsg) +Q_LOGGING_CATEGORY(lcPropagateLocalRename, "hidrivenext.sync.propagator.localrename", QtInfoMsg) QByteArray localFileIdFromFullId(const QByteArray &id) { diff --git a/src/libsync/pushnotifications.cpp b/src/libsync/pushnotifications.cpp index 6bfad9d62a535..dbfa25703e668 100644 --- a/src/libsync/pushnotifications.cpp +++ b/src/libsync/pushnotifications.cpp @@ -23,7 +23,7 @@ static constexpr int PING_INTERVAL = 30 * 1000; namespace OCC { -Q_LOGGING_CATEGORY(lcPushNotifications, "nextcloud.sync.pushnotifications", QtInfoMsg) +Q_LOGGING_CATEGORY(lcPushNotifications, "hidrivenext.sync.pushnotifications", QtInfoMsg) PushNotifications::PushNotifications(Account *account, QObject *parent) : QObject(parent) diff --git a/src/libsync/putmultifilejob.cpp b/src/libsync/putmultifilejob.cpp index aa23e9b5ca316..1f41e14e46cb5 100644 --- a/src/libsync/putmultifilejob.cpp +++ b/src/libsync/putmultifilejob.cpp @@ -18,7 +18,7 @@ namespace OCC { -Q_LOGGING_CATEGORY(lcPutMultiFileJob, "nextcloud.sync.networkjob.put.multi", QtInfoMsg) +Q_LOGGING_CATEGORY(lcPutMultiFileJob, "hidrivenext.sync.networkjob.put.multi", QtInfoMsg) PutMultiFileJob::PutMultiFileJob(AccountPtr account, const QUrl &url, diff --git a/src/libsync/syncengine.cpp b/src/libsync/syncengine.cpp index e24ce8a308b1e..e446a42d6d1b3 100644 --- a/src/libsync/syncengine.cpp +++ b/src/libsync/syncengine.cpp @@ -61,7 +61,7 @@ namespace OCC { -Q_LOGGING_CATEGORY(lcEngine, "nextcloud.sync.engine", QtInfoMsg) +Q_LOGGING_CATEGORY(lcEngine, "hidrivenext.sync.engine", QtInfoMsg) bool SyncEngine::s_anySyncRunning = false; diff --git a/src/libsync/syncfileitem.cpp b/src/libsync/syncfileitem.cpp index 86243c34052c8..0914994ac3826 100644 --- a/src/libsync/syncfileitem.cpp +++ b/src/libsync/syncfileitem.cpp @@ -24,7 +24,7 @@ namespace OCC { -Q_LOGGING_CATEGORY(lcFileItem, "nextcloud.sync.fileitem", QtInfoMsg) +Q_LOGGING_CATEGORY(lcFileItem, "hidrivenext.sync.fileitem", QtInfoMsg) namespace EncryptionStatusEnums { diff --git a/src/libsync/syncfilestatustracker.cpp b/src/libsync/syncfilestatustracker.cpp index d671389414dab..6c7034012a115 100644 --- a/src/libsync/syncfilestatustracker.cpp +++ b/src/libsync/syncfilestatustracker.cpp @@ -24,7 +24,7 @@ namespace OCC { -Q_LOGGING_CATEGORY(lcStatusTracker, "nextcloud.sync.statustracker", QtInfoMsg) +Q_LOGGING_CATEGORY(lcStatusTracker, "hidrivenext.sync.statustracker", QtInfoMsg) static int pathCompare( const QString& lhs, const QString& rhs ) { diff --git a/src/libsync/theme.cpp b/src/libsync/theme.cpp index 610a497b682ad..acf37580fab2f 100644 --- a/src/libsync/theme.cpp +++ b/src/libsync/theme.cpp @@ -77,7 +77,7 @@ bool isWindows11OrGreater() { namespace OCC { -Q_LOGGING_CATEGORY(lcTheme, "nextcloud.gui.theme", QtInfoMsg) +Q_LOGGING_CATEGORY(lcTheme, "hidrivenext.gui.theme", QtInfoMsg) Theme *Theme::_instance = nullptr; diff --git a/src/libsync/updatee2eefoldermetadatajob.cpp b/src/libsync/updatee2eefoldermetadatajob.cpp index ecfa7c5d104fe..efb624837a850 100644 --- a/src/libsync/updatee2eefoldermetadatajob.cpp +++ b/src/libsync/updatee2eefoldermetadatajob.cpp @@ -23,7 +23,7 @@ namespace OCC { -Q_LOGGING_CATEGORY(lcUpdateFileDropMetadataJob, "nextcloud.sync.propagator.updatee2eefoldermetadatajob", QtInfoMsg) +Q_LOGGING_CATEGORY(lcUpdateFileDropMetadataJob, "hidrivenext.sync.propagator.updatee2eefoldermetadatajob", QtInfoMsg) } diff --git a/src/libsync/updatee2eefolderusersmetadatajob.cpp b/src/libsync/updatee2eefolderusersmetadatajob.cpp index 065ace9bc28f6..49eb9ea10f1f1 100644 --- a/src/libsync/updatee2eefolderusersmetadatajob.cpp +++ b/src/libsync/updatee2eefolderusersmetadatajob.cpp @@ -22,7 +22,7 @@ namespace OCC { -Q_LOGGING_CATEGORY(lcUpdateE2eeFolderUsersMetadataJob, "nextcloud.gui.updatee2eefolderusersmetadatajob", QtInfoMsg) +Q_LOGGING_CATEGORY(lcUpdateE2eeFolderUsersMetadataJob, "hidrivenext.gui.updatee2eefolderusersmetadatajob", QtInfoMsg) UpdateE2eeFolderUsersMetadataJob::UpdateE2eeFolderUsersMetadataJob(const AccountPtr &account, SyncJournalDb *journalDb, diff --git a/src/libsync/updatemigratede2eemetadatajob.cpp b/src/libsync/updatemigratede2eemetadatajob.cpp index 98d6b41b8ca46..da5863a4b92c6 100644 --- a/src/libsync/updatemigratede2eemetadatajob.cpp +++ b/src/libsync/updatemigratede2eemetadatajob.cpp @@ -22,7 +22,7 @@ namespace OCC { -Q_LOGGING_CATEGORY(lcUpdateMigratedE2eeMetadataJob, "nextcloud.sync.propagator.updatemigratede2eemetadatajob", QtInfoMsg) +Q_LOGGING_CATEGORY(lcUpdateMigratedE2eeMetadataJob, "hidrivenext.sync.propagator.updatemigratede2eemetadatajob", QtInfoMsg) } diff --git a/src/libsync/vfs/cfapi/cfapiwrapper.cpp b/src/libsync/vfs/cfapi/cfapiwrapper.cpp index b088dfcb48838..1f9a974be200e 100644 --- a/src/libsync/vfs/cfapi/cfapiwrapper.cpp +++ b/src/libsync/vfs/cfapi/cfapiwrapper.cpp @@ -35,7 +35,7 @@ #include "config.h" -Q_LOGGING_CATEGORY(lcCfApiWrapper, "nextcloud.sync.vfs.cfapi.wrapper", QtInfoMsg) +Q_LOGGING_CATEGORY(lcCfApiWrapper, "hidrivenext.sync.vfs.cfapi.wrapper", QtInfoMsg) #define FIELD_SIZE( type, field ) ( sizeof( ( (type*)0 )->field ) ) #define CF_SIZE_OF_OP_PARAM( field ) \ diff --git a/src/libsync/vfs/cfapi/hydrationjob.cpp b/src/libsync/vfs/cfapi/hydrationjob.cpp index 32ef42ee1997a..58627eb100c92 100644 --- a/src/libsync/vfs/cfapi/hydrationjob.cpp +++ b/src/libsync/vfs/cfapi/hydrationjob.cpp @@ -26,7 +26,7 @@ #include #include -Q_LOGGING_CATEGORY(lcHydration, "nextcloud.sync.vfs.hydrationjob", QtInfoMsg) +Q_LOGGING_CATEGORY(lcHydration, "hidrivenext.sync.vfs.hydrationjob", QtInfoMsg) OCC::HydrationJob::HydrationJob(QObject *parent) : QObject(parent) diff --git a/src/libsync/vfs/cfapi/vfs_cfapi.cpp b/src/libsync/vfs/cfapi/vfs_cfapi.cpp index 27f8f945792af..53509466701eb 100644 --- a/src/libsync/vfs/cfapi/vfs_cfapi.cpp +++ b/src/libsync/vfs/cfapi/vfs_cfapi.cpp @@ -31,7 +31,7 @@ #include -Q_LOGGING_CATEGORY(lcCfApi, "nextcloud.sync.vfs.cfapi", QtInfoMsg) +Q_LOGGING_CATEGORY(lcCfApi, "hidrivenext.sync.vfs.cfapi", QtInfoMsg) namespace cfapi { using namespace OCC::CfApiWrapper; diff --git a/src/libsync/vfs/suffix/vfs_suffix.cpp b/src/libsync/vfs/suffix/vfs_suffix.cpp index b1c9dcea997f6..75175ca274a87 100644 --- a/src/libsync/vfs/suffix/vfs_suffix.cpp +++ b/src/libsync/vfs/suffix/vfs_suffix.cpp @@ -21,7 +21,7 @@ #include #include -Q_LOGGING_CATEGORY(lcVfsSuffix, "nextcloud.sync.vfs.suffix", QtInfoMsg) +Q_LOGGING_CATEGORY(lcVfsSuffix, "hidrivenext.sync.vfs.suffix", QtInfoMsg) namespace OCC { diff --git a/src/libsync/vfs/xattr/vfs_xattr.cpp b/src/libsync/vfs/xattr/vfs_xattr.cpp index cf81294e9c247..e93857dafd40e 100644 --- a/src/libsync/vfs/xattr/vfs_xattr.cpp +++ b/src/libsync/vfs/xattr/vfs_xattr.cpp @@ -22,7 +22,7 @@ #include #include -Q_LOGGING_CATEGORY(lcVfsXAttr, "nextcloud.sync.vfs.xattr", QtInfoMsg) +Q_LOGGING_CATEGORY(lcVfsXAttr, "hidrivenext.sync.vfs.xattr", QtInfoMsg) namespace xattr { using namespace OCC::XAttrWrapper; diff --git a/src/libsync/vfs/xattr/xattrwrapper_linux.cpp b/src/libsync/vfs/xattr/xattrwrapper_linux.cpp index a9ddc46396daf..f595dfca91353 100644 --- a/src/libsync/vfs/xattr/xattrwrapper_linux.cpp +++ b/src/libsync/vfs/xattr/xattrwrapper_linux.cpp @@ -20,7 +20,7 @@ #include -Q_LOGGING_CATEGORY(lcXAttrWrapper, "nextcloud.sync.vfs.xattr.wrapper", QtInfoMsg) +Q_LOGGING_CATEGORY(lcXAttrWrapper, "hidrivenext.sync.vfs.xattr.wrapper", QtInfoMsg) namespace { constexpr auto hydrateExecAttributeName = "user.nextcloud.hydrate_exec"; diff --git a/test/endtoendtestutils.cpp b/test/endtoendtestutils.cpp index a25a7e145b9b4..cf3bf2c941be4 100644 --- a/test/endtoendtestutils.cpp +++ b/test/endtoendtestutils.cpp @@ -29,7 +29,7 @@ constexpr auto serverUrl = "https://server"; -Q_LOGGING_CATEGORY(lcEndToEndTestUtils, "nextcloud.gui.endtoendtestutils", QtInfoMsg) +Q_LOGGING_CATEGORY(lcEndToEndTestUtils, "hidrivenext.gui.endtoendtestutils", QtInfoMsg) /** End to end test credentials access manager class **/ diff --git a/test/pushnotificationstestutils.cpp b/test/pushnotificationstestutils.cpp index 7df542ec45b1e..3c5798f38fba9 100644 --- a/test/pushnotificationstestutils.cpp +++ b/test/pushnotificationstestutils.cpp @@ -7,7 +7,7 @@ #include "pushnotificationstestutils.h" #include "pushnotifications.h" -Q_LOGGING_CATEGORY(lcFakeWebSocketServer, "nextcloud.test.fakewebserver", QtInfoMsg) +Q_LOGGING_CATEGORY(lcFakeWebSocketServer, "hidrivenext.test.fakewebserver", QtInfoMsg) FakeWebSocketServer::FakeWebSocketServer(quint16 port, QObject *parent) : QObject(parent) From 8f6ea826238cbf1241240065ea1915329d6d1fb3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Christopher=20H=C3=A4tty?= Date: Tue, 4 Feb 2025 14:48:20 +0100 Subject: [PATCH 093/371] SES-307 Hide FileDrop Checkbox --- src/gui/filedetails/ShareDetailsPage.qml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/gui/filedetails/ShareDetailsPage.qml b/src/gui/filedetails/ShareDetailsPage.qml index aa82b6832b726..411a76ac12c22 100644 --- a/src/gui/filedetails/ShareDetailsPage.qml +++ b/src/gui/filedetails/ShareDetailsPage.qml @@ -673,7 +673,7 @@ Page { spacing: scrollContentsColumn.indicatorSpacing padding: scrollContentsColumn.itemPadding onClicked: root.permissionModeChanged(permissionMode) - visible: customPermissionsCheckBox.checked + visible: customPermissionsCheckBox.checked & false // Removed SES-307 font.pixelSize: pixelSize font.weight: fontWeight } From e722bcc28338648f1c072667fc0abdd12b6084d7 Mon Sep 17 00:00:00 2001 From: Kevin Beraz Date: Fri, 24 Jan 2025 14:48:46 +0100 Subject: [PATCH 094/371] SES-282 remove External Storage checkbox from Setup Page --- src/gui/wizard/owncloudadvancedsetuppage.cpp | 44 ++++++++++---------- src/gui/wizard/owncloudadvancedsetuppage.ui | 8 ++-- 2 files changed, 26 insertions(+), 26 deletions(-) diff --git a/src/gui/wizard/owncloudadvancedsetuppage.cpp b/src/gui/wizard/owncloudadvancedsetuppage.cpp index fa8f79c905ed2..6bbc88ce1f38a 100644 --- a/src/gui/wizard/owncloudadvancedsetuppage.cpp +++ b/src/gui/wizard/owncloudadvancedsetuppage.cpp @@ -109,7 +109,7 @@ OwncloudAdvancedSetupPage::OwncloudAdvancedSetupPage(OwncloudWizard *wizard) _ui.lServerIcon->setPixmap(appIcon.pixmap(appIconSize)); if (theme->wizardHideExternalStorageConfirmationCheckbox()) { - _ui.confCheckBoxExternal->hide(); + //_ui.confCheckBoxExternal->hide(); } if (theme->wizardHideFolderSizeLimitCheckbox()) { _ui.confCheckBoxSize->hide(); @@ -217,7 +217,7 @@ void OwncloudAdvancedSetupPage::initializePage() auto newFolderLimit = cfgFile.newBigFolderSizeLimit(); _ui.confCheckBoxSize->setChecked(newFolderLimit.first); _ui.confSpinBox->setValue(newFolderLimit.second); - _ui.confCheckBoxExternal->setChecked(cfgFile.confirmExternalStorage()); + //_ui.confCheckBoxExternal->setChecked(cfgFile.confirmExternalStorage()); SetAvatarIcon(); setUserInformation(); @@ -459,7 +459,7 @@ bool OwncloudAdvancedSetupPage::validatePage() ConfigFile cfgFile; cfgFile.setNewBigFolderSizeLimit(_ui.confCheckBoxSize->isChecked(), _ui.confCheckBoxSize->isChecked() ? _ui.confSpinBox->value() : -1); - cfgFile.setConfirmExternalStorage(_ui.confCheckBoxExternal->isChecked()); + //cfgFile.setConfirmExternalStorage(_ui.confCheckBoxExternal->isChecked()); } else { @@ -544,12 +544,12 @@ void OwncloudAdvancedSetupPage::slotSelectiveSyncClicked() if (result == QDialog::Accepted) { _selectiveSyncBlacklist = dlg->createBlackList(); updateBlacklist = true; - _ui.confCheckBoxExternal->setStyleSheet(IonosTheme::fontConfigurationCss( - IonosTheme::settingsFont(), - IonosTheme::settingsTextSize(), - IonosTheme::settingsTextWeight(), - IonosTheme::loginWizardFontLightGrey() - )); + // _ui.confCheckBoxExternal->setStyleSheet(IonosTheme::fontConfigurationCss( + // IonosTheme::settingsFont(), + // IonosTheme::settingsTextSize(), + // IonosTheme::settingsTextWeight(), + // IonosTheme::loginWizardFontLightGrey() + // )); _ui.confCheckBoxSize->setDisabled(true); } else if (result == QDialog::Rejected && _selectiveSyncBlacklist == QStringList("/")) { @@ -593,12 +593,12 @@ void OwncloudAdvancedSetupPage::slotVirtualFileSyncClicked() }); } - _ui.confCheckBoxExternal->setStyleSheet(IonosTheme::fontConfigurationCss( - IonosTheme::settingsFont(), - IonosTheme::settingsTextSize(), - IonosTheme::settingsTextWeight(), - IonosTheme::loginWizardFontLightGrey() - )); + // _ui.confCheckBoxExternal->setStyleSheet(IonosTheme::fontConfigurationCss( + // IonosTheme::settingsFont(), + // IonosTheme::settingsTextSize(), + // IonosTheme::settingsTextWeight(), + // IonosTheme::loginWizardFontLightGrey() + // )); _ui.confCheckBoxSize->setDisabled(true); } @@ -612,12 +612,12 @@ void OwncloudAdvancedSetupPage::slotSyncEverythingClicked() QString errorStr = checkLocalSpace(_rSize); setErrorString(errorStr); - _ui.confCheckBoxExternal->setStyleSheet(IonosTheme::fontConfigurationCss( - IonosTheme::settingsFont(), - IonosTheme::settingsTextSize(), - IonosTheme::settingsTextWeight(), - IonosTheme::titleColor() - )); + // _ui.confCheckBoxExternal->setStyleSheet(IonosTheme::fontConfigurationCss( + // IonosTheme::settingsFont(), + // IonosTheme::settingsTextSize(), + // IonosTheme::settingsTextWeight(), + // IonosTheme::titleColor() + // )); } @@ -675,7 +675,7 @@ void OwncloudAdvancedSetupPage::customizeStyle() _ui.mainHBox->setContentsMargins(0, 0, 0, 0); _ui.wSyncStrategySynchronizeEverything->setContentsMargins(0, 0, 0, 0); _ui.lVirtualFileSync->setContentsMargins(0, 0, 0, 0); - _ui.horizontalLayout_8->setContentsMargins(32, 0, 0, 0); + //_ui.horizontalLayout_8->setContentsMargins(32, 0, 0, 0); _ui.horizontalLayout_10->setContentsMargins(0, 8, 0, 0); _ui.wSyncStrategy->setSpacing(16); diff --git a/src/gui/wizard/owncloudadvancedsetuppage.ui b/src/gui/wizard/owncloudadvancedsetuppage.ui index dc9eedfad6610..dcc7567201a4b 100644 --- a/src/gui/wizard/owncloudadvancedsetuppage.ui +++ b/src/gui/wizard/owncloudadvancedsetuppage.ui @@ -480,7 +480,7 @@ - + @@ -801,7 +801,7 @@ - +
      From b1deee5bd94a734d25b5038b27f869b85f0d8222 Mon Sep 17 00:00:00 2001 From: Emil Bohleber Date: Mon, 27 Jan 2025 14:53:54 +0100 Subject: [PATCH 095/371] SES-282 add link to issue for commented out code --- src/gui/wizard/owncloudadvancedsetuppage.cpp | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) diff --git a/src/gui/wizard/owncloudadvancedsetuppage.cpp b/src/gui/wizard/owncloudadvancedsetuppage.cpp index 6bbc88ce1f38a..fd41e2b3274b0 100644 --- a/src/gui/wizard/owncloudadvancedsetuppage.cpp +++ b/src/gui/wizard/owncloudadvancedsetuppage.cpp @@ -109,7 +109,7 @@ OwncloudAdvancedSetupPage::OwncloudAdvancedSetupPage(OwncloudWizard *wizard) _ui.lServerIcon->setPixmap(appIcon.pixmap(appIconSize)); if (theme->wizardHideExternalStorageConfirmationCheckbox()) { - //_ui.confCheckBoxExternal->hide(); + //_ui.confCheckBoxExternal->hide(); // commented out for https://bmjira.atlassian.net/browse/SES-282 } if (theme->wizardHideFolderSizeLimitCheckbox()) { _ui.confCheckBoxSize->hide(); @@ -217,7 +217,7 @@ void OwncloudAdvancedSetupPage::initializePage() auto newFolderLimit = cfgFile.newBigFolderSizeLimit(); _ui.confCheckBoxSize->setChecked(newFolderLimit.first); _ui.confSpinBox->setValue(newFolderLimit.second); - //_ui.confCheckBoxExternal->setChecked(cfgFile.confirmExternalStorage()); + //_ui.confCheckBoxExternal->setChecked(cfgFile.confirmExternalStorage()); // commented out for https://bmjira.atlassian.net/browse/SES-282 SetAvatarIcon(); setUserInformation(); @@ -459,7 +459,7 @@ bool OwncloudAdvancedSetupPage::validatePage() ConfigFile cfgFile; cfgFile.setNewBigFolderSizeLimit(_ui.confCheckBoxSize->isChecked(), _ui.confCheckBoxSize->isChecked() ? _ui.confSpinBox->value() : -1); - //cfgFile.setConfirmExternalStorage(_ui.confCheckBoxExternal->isChecked()); + //cfgFile.setConfirmExternalStorage(_ui.confCheckBoxExternal->isChecked()); // commented out for https://bmjira.atlassian.net/browse/SES-282 } else { @@ -544,6 +544,7 @@ void OwncloudAdvancedSetupPage::slotSelectiveSyncClicked() if (result == QDialog::Accepted) { _selectiveSyncBlacklist = dlg->createBlackList(); updateBlacklist = true; + // commented out for https://bmjira.atlassian.net/browse/SES-282 // _ui.confCheckBoxExternal->setStyleSheet(IonosTheme::fontConfigurationCss( // IonosTheme::settingsFont(), // IonosTheme::settingsTextSize(), @@ -592,7 +593,7 @@ void OwncloudAdvancedSetupPage::slotVirtualFileSyncClicked() setRadioChecked(_ui.rVirtualFileSync); }); } - +// commented out for https://bmjira.atlassian.net/browse/SES-282 // _ui.confCheckBoxExternal->setStyleSheet(IonosTheme::fontConfigurationCss( // IonosTheme::settingsFont(), // IonosTheme::settingsTextSize(), @@ -612,6 +613,7 @@ void OwncloudAdvancedSetupPage::slotSyncEverythingClicked() QString errorStr = checkLocalSpace(_rSize); setErrorString(errorStr); +// commented out for https://bmjira.atlassian.net/browse/SES-282 // _ui.confCheckBoxExternal->setStyleSheet(IonosTheme::fontConfigurationCss( // IonosTheme::settingsFont(), // IonosTheme::settingsTextSize(), @@ -675,7 +677,7 @@ void OwncloudAdvancedSetupPage::customizeStyle() _ui.mainHBox->setContentsMargins(0, 0, 0, 0); _ui.wSyncStrategySynchronizeEverything->setContentsMargins(0, 0, 0, 0); _ui.lVirtualFileSync->setContentsMargins(0, 0, 0, 0); - //_ui.horizontalLayout_8->setContentsMargins(32, 0, 0, 0); + //_ui.horizontalLayout_8->setContentsMargins(32, 0, 0, 0); // commented out for https://bmjira.atlassian.net/browse/SES-282 _ui.horizontalLayout_10->setContentsMargins(0, 8, 0, 0); _ui.wSyncStrategy->setSpacing(16); From 96fa8f017ec97ea051f892f8e46163598bdec0ac Mon Sep 17 00:00:00 2001 From: EmilBohleber Date: Thu, 6 Feb 2025 16:19:25 +0100 Subject: [PATCH 096/371] SES-306 add primary and secondary pill button --- resources.qrc | 2 ++ src/gui/tray/PrimaryPillButton.qml | 48 ++++++++++++++++++++++++++++ src/gui/tray/SecondaryPillButton.qml | 48 ++++++++++++++++++++++++++++ theme/Style/Style.qml | 8 +++++ 4 files changed, 106 insertions(+) create mode 100644 src/gui/tray/PrimaryPillButton.qml create mode 100644 src/gui/tray/SecondaryPillButton.qml diff --git a/resources.qrc b/resources.qrc index 0e1056bb2df92..c20a70971199b 100644 --- a/resources.qrc +++ b/resources.qrc @@ -71,6 +71,8 @@ src/gui/SesComponents/SesTrayHeader.qml src/gui/tray/TrayWindowAccountMenu.qml src/gui/tray/SesCustomButton.qml + src/gui/tray/PrimaryPillButton.qml + src/gui/tray/SecondaryPillButton.qml src/gui/tray/SesButtonContents.qml src/gui/tray/AccountMenuItem.qml diff --git a/src/gui/tray/PrimaryPillButton.qml b/src/gui/tray/PrimaryPillButton.qml new file mode 100644 index 0000000000000..a76dec61a82d2 --- /dev/null +++ b/src/gui/tray/PrimaryPillButton.qml @@ -0,0 +1,48 @@ +import QtQuick +import QtQuick.Controls +import com.ionos.hidrivenext.desktopclient + +import Style + +Button{ + id: root + property string iconSource + + property bool isMouseOver: false + + hoverEnabled: false // turn off default button hover + + contentItem: Row { + spacing: Style.sesPillButtonVerticalPadding + padding: Style.sesPillButtonVerticalPadding + leftPadding: Style.sesPillButtonHorizontalPadding + rightPadding: Style.sesPillButtonHorizontalPadding + anchors.centerIn: parent + Text { + text: root.text + color: "white" + font.weight: Style.sesFontNormalWeight + font.pointSize: Style.sesFontPointSize + } + Image { + visible: root.iconSource + source: root.iconSource + width: Style.sesPillIconSize + height: Style.sesPillIconSize + } + } + + background: Rectangle { + color: Style.sesPillButtonPrimaryBackgroundColor + opacity: root.isMouseOver ? Style.sesPillButtonHoverOpacity : 1.0 + border.width: 2 + border.color: Style.sesPillButtonBorderColor + radius: height / 2 + MouseArea { + anchors.fill: parent + hoverEnabled: true + onExited: root.isMouseOver = false + onEntered: root.isMouseOver = true + } + } +} \ No newline at end of file diff --git a/src/gui/tray/SecondaryPillButton.qml b/src/gui/tray/SecondaryPillButton.qml new file mode 100644 index 0000000000000..54bdb3089dba4 --- /dev/null +++ b/src/gui/tray/SecondaryPillButton.qml @@ -0,0 +1,48 @@ +import QtQuick +import QtQuick.Controls +import com.ionos.hidrivenext.desktopclient + +import Style + +Button{ + id: root + hoverEnabled: false // turn off default button hover + + property string iconSource + + property bool isMouseOver: false + + contentItem: Row { + spacing: Style.sesPillButtonVerticalPadding + padding: Style.sesPillButtonVerticalPadding + leftPadding: Style.sesPillButtonHorizontalPadding + rightPadding: Style.sesPillButtonHorizontalPadding + anchors.centerIn: parent + Text { + text: root.text + color: "black" + font.weight: Style.sesFontNormalWeight + font.pointSize: Style.sesFontPointSize + } + Image { + visible: root.iconSource + source: root.iconSource + width: Style.sesPillIconSize + height: Style.sesPillIconSize + } + } + + background: Rectangle { + color: Style.sesPillButtonSecondaryBackgroundColor + opacity: root.isMouseOver ? Style.sesPillButtonHoverOpacity : 1.0 + border.width: 2 + border.color: Style.sesPillButtonBorderColor + radius: height / 2 + MouseArea { + anchors.fill: parent + hoverEnabled: true + onExited: root.isMouseOver = false + onEntered: root.isMouseOver = true + } + } +} \ No newline at end of file diff --git a/theme/Style/Style.qml b/theme/Style/Style.qml index 50e73d05a8953..de43e68ec55c5 100644 --- a/theme/Style/Style.qml +++ b/theme/Style/Style.qml @@ -299,4 +299,12 @@ QtObject { property int sesAccountLabelWidth: 157 property int sesTrayHeaderMargin: 11 property int sesTrayWindowWidth: 464 + + property color sesPillButtonPrimaryBackgroundColor: "#0B2A63" + property color sesPillButtonSecondaryBackgroundColor: "white" + property color sesPillButtonBorderColor: "#0B2A63" + property real sesPillIconSize: 16 + property int sesPillButtonVerticalPadding: 4 + property int sesPillButtonHorizontalPadding: 10 + property real sesPillButtonHoverOpacity: 0.7 } From 945666e873f194ca0da8cf375c0a373c09469f53 Mon Sep 17 00:00:00 2001 From: EmilBohleber Date: Thu, 6 Feb 2025 16:20:20 +0100 Subject: [PATCH 097/371] SES-306 reset ActivityItemAction button to NC style --- src/gui/tray/ActivityItemActions.qml | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/src/gui/tray/ActivityItemActions.qml b/src/gui/tray/ActivityItemActions.qml index 269bdd6d86f87..4f3744e804ca8 100644 --- a/src/gui/tray/ActivityItemActions.qml +++ b/src/gui/tray/ActivityItemActions.qml @@ -34,6 +34,7 @@ Repeater { Layout.alignment: Qt.AlignTop | Qt.AlignRight + hoverEnabled: false padding: Style.smallSpacing display: Button.TextOnly @@ -43,10 +44,6 @@ Repeater { onClicked: isTalkReplyButton ? root.showReplyField() : root.triggerAction(model.index) - bgColor: Style.sesActionPressed - bgNormalOpacity: 1.0 - bgHoverOpacity: Style.hoverOpacity - visible: verb !== "REPLY" || (verb === "REPLY" && root.talkReplyButtonVisible) } } From 80b7ac2cec2d558e3add64e592d4232090f713a4 Mon Sep 17 00:00:00 2001 From: EmilBohleber Date: Thu, 6 Feb 2025 16:20:47 +0100 Subject: [PATCH 098/371] SES-306 replace button with primary pill button --- src/gui/tray/ActivityItemActions.qml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/gui/tray/ActivityItemActions.qml b/src/gui/tray/ActivityItemActions.qml index 4f3744e804ca8..ecbd72c1d0ca7 100644 --- a/src/gui/tray/ActivityItemActions.qml +++ b/src/gui/tray/ActivityItemActions.qml @@ -26,7 +26,7 @@ Repeater { model: root.linksForActionButtons - SesCustomButton { + PrimaryPillButton { id: activityActionButton property string verb: model.modelData.verb From 13fabc919fbb496c42f3f94bef03ae4c6090e4ab Mon Sep 17 00:00:00 2001 From: EmilBohleber Date: Thu, 6 Feb 2025 18:16:04 +0100 Subject: [PATCH 099/371] SES-306 add white icons for share details view --- theme.qrc.in | 2 ++ theme/Style/Style.qml | 2 ++ theme/ses/ses-lightClipboard.svg | 10 ++++++++++ theme/ses/ses-lightPlus.svg | 10 ++++++++++ 4 files changed, 24 insertions(+) create mode 100644 theme/ses/ses-lightClipboard.svg create mode 100644 theme/ses/ses-lightPlus.svg diff --git a/theme.qrc.in b/theme.qrc.in index a6ebba6422196..18d513546e16c 100644 --- a/theme.qrc.in +++ b/theme.qrc.in @@ -256,7 +256,9 @@ theme/ses/ses-activity.svg theme/ses/ses-chevron.svg theme/ses/ses-clipboard.svg + theme/ses/ses-lightClipboard.svg theme/ses/ses-darkPlus.svg + theme/ses/ses-lightPlus.svg theme/ses/ses-addlivebackup.svg theme/ses/ses-file.svg theme/ses/ses-folderIcon.svg diff --git a/theme/Style/Style.qml b/theme/Style/Style.qml index de43e68ec55c5..0671880b7f4b0 100644 --- a/theme/Style/Style.qml +++ b/theme/Style/Style.qml @@ -228,11 +228,13 @@ QtObject { readonly property string sesAccountQuit: "qrc:///client/theme/ses/ses-accountQuit.svg" readonly property string sesAccountPause: "qrc:///client/theme/ses/ses-accountPause.svg" readonly property string sesDarkPlus: "qrc:///client/theme/ses/ses-darkPlus.svg" + readonly property string sesLightPlus: "qrc:///client/theme/ses/ses-lightPlus.svg" readonly property string sesAccountSettings: "qrc:///client/theme/ses/ses-settings.svg" readonly property string sesAccountResume: "qrc:///client/theme/ses/ses-accountResume.svg" readonly property string sesLogout: "qrc:///client/theme/ses/ses-accountLogout.svg" readonly property string sesDelete: "qrc:///client/theme/ses/ses-accountDelete.svg" readonly property string sesClipboard: "qrc:///client/theme/ses/ses-clipboard.svg" + readonly property string sesLightClipboard: "qrc:///client/theme/ses/ses-lightClipboard.svg" readonly property string sesSyncErrorIcon: "qrc:///client/theme/ses/ses-syncstate-error.svg" readonly property string sesErrorBoxIcon: "qrc:///client/theme/ses/ses-snackbar-error.svg" readonly property string sesSyncSuccessIcon: "qrc:///client/theme/ses/ses-syncstate-success.svg" diff --git a/theme/ses/ses-lightClipboard.svg b/theme/ses/ses-lightClipboard.svg new file mode 100644 index 0000000000000..cf099bb8fd6b1 --- /dev/null +++ b/theme/ses/ses-lightClipboard.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/theme/ses/ses-lightPlus.svg b/theme/ses/ses-lightPlus.svg new file mode 100644 index 0000000000000..b19ae735102f4 --- /dev/null +++ b/theme/ses/ses-lightPlus.svg @@ -0,0 +1,10 @@ + + + + + + + + + + From a1212af0a5808d1874bf033c3ba04bc4372bf0fc Mon Sep 17 00:00:00 2001 From: EmilBohleber Date: Thu, 6 Feb 2025 18:16:36 +0100 Subject: [PATCH 100/371] SES-306 remove animations from share details page --- src/gui/filedetails/ShareDetailsPage.qml | 12 ------------ 1 file changed, 12 deletions(-) diff --git a/src/gui/filedetails/ShareDetailsPage.qml b/src/gui/filedetails/ShareDetailsPage.qml index 411a76ac12c22..ad4d5c73390c6 100644 --- a/src/gui/filedetails/ShareDetailsPage.qml +++ b/src/gui/filedetails/ShareDetailsPage.qml @@ -870,18 +870,6 @@ Page { Layout.rightMargin: 20 Layout.row: 1 - Behavior on bgColor { - ColorAnimation { duration: Style.shortAnimationDuration } - } - - Behavior on bgHoverOpacity { - NumberAnimation { duration: Style.shortAnimationDuration } - } - - Behavior on Layout.preferredWidth { - SmoothedAnimation { duration: Style.shortAnimationDuration } - } - TextEdit { id: clipboardHelper visible: false From 5547eb444a9900283bba10dd878c8dd8b0e1e430 Mon Sep 17 00:00:00 2001 From: EmilBohleber Date: Thu, 6 Feb 2025 18:17:04 +0100 Subject: [PATCH 101/371] SES-306 use pill buttons on share details page --- src/gui/filedetails/ShareDetailsPage.qml | 28 +++++------------------- 1 file changed, 5 insertions(+), 23 deletions(-) diff --git a/src/gui/filedetails/ShareDetailsPage.qml b/src/gui/filedetails/ShareDetailsPage.qml index ad4d5c73390c6..767745701305e 100644 --- a/src/gui/filedetails/ShareDetailsPage.qml +++ b/src/gui/filedetails/ShareDetailsPage.qml @@ -790,19 +790,15 @@ Page { columns: 1 rows: 2 - SesCustomButton { + PrimaryPillButton { Layout.columnSpan: buttonGrid.columns - icon.source: Style.sesDarkPlus + iconSource: Style.sesLightPlus font.pixelSize: pixelSize font.weight: fontWeight text: qsTr("Add another link") - bgColor: Style.sesActionPressed - bgNormalOpacity: 1.0 - bgHoverOpacity: Style.hoverOpacity - visible: root.isLinkShare && root.canCreateLinkShares enabled: visible @@ -813,20 +809,12 @@ Page { onClicked: root.createNewLinkShare() } - SesCustomButton { + SecondaryPillButton { id: unshareButton font.pixelSize: pixelSize font.weight: fontWeight text: qsTr("Unshare") - textColor: Style.sesActionPressed - - bgColor: palette.highlight - bgNormalOpacity: 1.0 - - bgBorderWidth: 2 - bgBorderColor: Style.sesActionPressed - bgHoverOpacity: Style.hoverOpacity Layout.bottomMargin: 16 Layout.leftMargin: 16 @@ -835,7 +823,7 @@ Page { onClicked: root.deleteShare() } - SesCustomButton { + PrimaryPillButton { id: copyShareLinkButton function copyShareLink() { @@ -850,16 +838,10 @@ Page { property bool shareLinkCopied: false - icon.source: Style.sesClipboard + iconSource: Style.sesLightClipboard - font.pixelSize: pixelSize - font.weight: fontWeight text: shareLinkCopied ? qsTr("Share link copied!") : qsTr("Copy share link") - bgColor: Style.sesActionPressed - bgNormalOpacity: 1.0 - bgHoverOpacity: shareLinkCopied ? 1.0 : Style.hoverOpacity - visible: root.isLinkShare enabled: visible From 90ede41dd210cf8221d73ef46f3e0f322f63e389 Mon Sep 17 00:00:00 2001 From: EmilBohleber Date: Thu, 6 Feb 2025 18:28:13 +0100 Subject: [PATCH 102/371] SES-306 set color for subtext in sync state --- src/gui/tray/SyncStatus.qml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/gui/tray/SyncStatus.qml b/src/gui/tray/SyncStatus.qml index f8479c3da169e..bdd243b9688ef 100644 --- a/src/gui/tray/SyncStatus.qml +++ b/src/gui/tray/SyncStatus.qml @@ -72,7 +72,7 @@ RowLayout { text: syncStatus.syncStatusDetailString visible: syncStatus.syncStatusDetailString !== "" - color: palette.midlight + color: Style.sesTrayFontColor font: root.font wrapMode: Text.Wrap } From 5c5fbd499e1b2d519a9093f72dbef2ee97cc6a10 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Christopher=20H=C3=A4tty?= Date: Fri, 7 Feb 2025 09:41:58 +0100 Subject: [PATCH 103/371] SES-279 Fixed Sizeing and clipping of FolderCreationDialog --- src/gui/foldercreationdialog.cpp | 15 ++++++++++----- src/gui/foldercreationdialog.h | 1 + 2 files changed, 11 insertions(+), 5 deletions(-) diff --git a/src/gui/foldercreationdialog.cpp b/src/gui/foldercreationdialog.cpp index ca0d6828ac309..1fab6af0348b1 100644 --- a/src/gui/foldercreationdialog.cpp +++ b/src/gui/foldercreationdialog.cpp @@ -92,27 +92,31 @@ void FolderCreationDialog::slotNewFolderNameEditTextEdited() if (!ui->newFolderNameEdit->text().isEmpty() && QDir(_destination + "/" + ui->newFolderNameEdit->text()).exists()) { ui->errorSnackbar->setVisible(true); ui->buttonBox->button(QDialogButtonBox::Ok)->setEnabled(false); + sizeDialog(); + } else { ui->errorSnackbar->setVisible(false); ui->buttonBox->button(QDialogButtonBox::Ok)->setEnabled(true); + sizeDialog(); } } +void FolderCreationDialog::sizeDialog(){ + adjustSize(); + setFixedWidth(626); + setFixedHeight(sizeHint().height()); +} + void FolderCreationDialog::customizeStyle() { ui->buttonBox->setLayoutDirection(Qt::RightToLeft); - QDialog *dialog = qobject_cast(this); - dialog->setMinimumSize(626, 156); - QPushButton *okButton = ui->buttonBox->button(QDialogButtonBox::Ok); okButton->setProperty("buttonStyle", QVariant::fromValue(OCC::ButtonStyleName::Primary)); QHBoxLayout* buttonlayout = qobject_cast(ui->buttonBox->layout()); buttonlayout->setSpacing(16); - ui->errorSnackbar->setFixedHeight(46); - ui->newFolderNameEdit->setStyleSheet( QStringLiteral( "color: %1; font-family: %2; font-size: %3; font-weight: %4; border-radius: %5; border: 1px " @@ -131,5 +135,6 @@ void FolderCreationDialog::customizeStyle() buttonlayout->setSpacing(32); #endif + sizeDialog(); } } \ No newline at end of file diff --git a/src/gui/foldercreationdialog.h b/src/gui/foldercreationdialog.h index 78d582a41e24d..d03034028cd7b 100644 --- a/src/gui/foldercreationdialog.h +++ b/src/gui/foldercreationdialog.h @@ -45,6 +45,7 @@ private slots: QString _destination; void customizeStyle(); + void sizeDialog(); }; } From 0429a49547c848fc093cd7d6c5f25afd77751cf2 Mon Sep 17 00:00:00 2001 From: EmilBohleber Date: Mon, 10 Feb 2025 15:36:35 +0100 Subject: [PATCH 104/371] SES-303 add standalone icon button --- resources.qrc | 1 + src/gui/tray/IconButton.qml | 41 +++++++++++++++++++++++++++++++++++++ 2 files changed, 42 insertions(+) create mode 100644 src/gui/tray/IconButton.qml diff --git a/resources.qrc b/resources.qrc index c20a70971199b..1edb66e005b4c 100644 --- a/resources.qrc +++ b/resources.qrc @@ -73,6 +73,7 @@ src/gui/tray/SesCustomButton.qml src/gui/tray/PrimaryPillButton.qml src/gui/tray/SecondaryPillButton.qml + src/gui/tray/IconButton.qml src/gui/tray/SesButtonContents.qml src/gui/tray/AccountMenuItem.qml diff --git a/src/gui/tray/IconButton.qml b/src/gui/tray/IconButton.qml new file mode 100644 index 0000000000000..a9741b33ee6ed --- /dev/null +++ b/src/gui/tray/IconButton.qml @@ -0,0 +1,41 @@ +import QtQuick +import QtQuick.Controls +import com.ionos.hidrivenext.desktopclient + +import Style + +Button{ + id: root + property string iconSource + property string iconSourceHovered + + property bool isMouseOver: false + property bool isActive: root.pressed + + hoverEnabled: false // turn off default button hover + + Image { + id: icon + visible: true + source: root.isMouseOver ? root.iconSourceHovered : root.iconSource + anchors.centerIn: parent + fillMode: Image.PreserveAspectFit + width: Style.sesPillIconSize + height: Style.sesPillIconSize + } + + background: Rectangle { + anchors.centerIn: parent + color: root.isMouseOver ? root.pressed ? Style.sesActionPressed : Style.sesActionHover : "transparent" + opacity: 1.0 + radius: height / 2 + width: 24 + height: 24 + MouseArea { + anchors.fill: parent + hoverEnabled: true + onExited: root.isMouseOver = false + onEntered: root.isMouseOver = true + } + } +} \ No newline at end of file From 5aade6247818f313de7d915365e422c284f30928 Mon Sep 17 00:00:00 2001 From: EmilBohleber Date: Mon, 10 Feb 2025 15:37:36 +0100 Subject: [PATCH 105/371] SES-303 use IconButton in activity view --- src/gui/tray/ActivityItemContent.qml | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/src/gui/tray/ActivityItemContent.qml b/src/gui/tray/ActivityItemContent.qml index 0be9914b61839..3f2acf2f42e7f 100644 --- a/src/gui/tray/ActivityItemContent.qml +++ b/src/gui/tray/ActivityItemContent.qml @@ -161,8 +161,9 @@ RowLayout { Layout.alignment: Qt.AlignVCenter | Qt.AlignHCenter spacing: Style.extraSmallSpacing - Button { - id: fileDetailsButton + IconButton { + id: fileDetailsButton + property bool isHovered: fileDetailsButton.hovered || fileDetailsButton.visualFocus property bool isActive: fileDetailsButton.pressed From 98890ffecd23989ca9f02a989692545df67a0c77 Mon Sep 17 00:00:00 2001 From: EmilBohleber Date: Mon, 10 Feb 2025 16:06:45 +0100 Subject: [PATCH 106/371] SES-303 add white version of icon --- theme.qrc.in | 1 + theme/Style/Style.qml | 2 ++ theme/ses/ses-more-white.svg | 3 +++ 3 files changed, 6 insertions(+) create mode 100644 theme/ses/ses-more-white.svg diff --git a/theme.qrc.in b/theme.qrc.in index 18d513546e16c..cef972e960e80 100644 --- a/theme.qrc.in +++ b/theme.qrc.in @@ -273,6 +273,7 @@ theme/ses/ses-snackbar-warning.svg theme/ses/ses-snackbar-error.svg theme/ses/ses-more.svg + theme/ses/ses-more-white.svg theme/ses/ses-questionmark.svg theme/ses/ses-refresh.svg theme/ses/ses-settings.svg diff --git a/theme/Style/Style.qml b/theme/Style/Style.qml index 0671880b7f4b0..c2980ddebea65 100644 --- a/theme/Style/Style.qml +++ b/theme/Style/Style.qml @@ -240,6 +240,8 @@ QtObject { readonly property string sesSyncSuccessIcon: "qrc:///client/theme/ses/ses-syncstate-success.svg" readonly property string sesOfflineIcon: "qrc:///client/theme/ses/ses-state-offline.svg" readonly property string sesChevron: "qrc:///client/theme/ses/ses-chevron.svg" + readonly property string sesMore: "qrc:///client/theme/ses/ses-more.svg" + readonly property string sesMoreWhite: "qrc:///client/theme/ses/ses-more-white.svg" readonly property color sesIconDarkColor: "#001B41" readonly property color sesIconColor: "#1474C4" diff --git a/theme/ses/ses-more-white.svg b/theme/ses/ses-more-white.svg new file mode 100644 index 0000000000000..a3d50d82f5c82 --- /dev/null +++ b/theme/ses/ses-more-white.svg @@ -0,0 +1,3 @@ + + + From 7045f4daf517228af1a13bf5777b431a86d1b458 Mon Sep 17 00:00:00 2001 From: EmilBohleber Date: Mon, 10 Feb 2025 16:33:24 +0100 Subject: [PATCH 107/371] SES-303 configure button to match design --- src/gui/tray/ActivityItemContent.qml | 10 ++-------- theme/Style/Style.qml | 2 +- 2 files changed, 3 insertions(+), 9 deletions(-) diff --git a/src/gui/tray/ActivityItemContent.qml b/src/gui/tray/ActivityItemContent.qml index 3f2acf2f42e7f..093df1b275973 100644 --- a/src/gui/tray/ActivityItemContent.qml +++ b/src/gui/tray/ActivityItemContent.qml @@ -173,7 +173,8 @@ RowLayout { width: Style.activityListButtonWidth height: Style.activityListButtonHeight - icon.source: "image://svgimage-custom-color/more.svg/" + (isHovered ? Style.sesWhite : Style.sesActionHover) + iconSource: Style.sesMore + iconSourceHovered: Style.sesMoreWhite icon.width: Style.activityListButtonIconSize icon.height: Style.activityListButtonIconSize @@ -182,14 +183,7 @@ RowLayout { text: qsTr("Open file details") visible: parent.hovered } - background: Rectangle { - anchors.fill: parent - anchors.margins: 1 - color: parent.isActive ? Style.sesActionPressed : parent.isHovered ? Style.sesActionHover : "transparent" - radius: width / 2 - } - display: Button.IconOnly leftPadding: 0 rightPadding: 0 diff --git a/theme/Style/Style.qml b/theme/Style/Style.qml index c2980ddebea65..cc2fb59d41eb6 100644 --- a/theme/Style/Style.qml +++ b/theme/Style/Style.qml @@ -106,7 +106,7 @@ QtObject { property int headerButtonIconSize: sesIconSize property int dismissButtonSize: 26 - property int activityListButtonWidth: 42 + property int activityListButtonWidth: 32 property int activityListButtonHeight: 32 property int activityListButtonIconSize: 18 property int minimumActivityItemHeight: 24 From 9daf524ff0b182003dc3a858ca51df0eb986d589 Mon Sep 17 00:00:00 2001 From: EmilBohleber Date: Mon, 10 Feb 2025 16:42:35 +0100 Subject: [PATCH 108/371] SES-303 replace dismiss button in activity view --- src/gui/tray/ActivityItemContent.qml | 4 +++- src/gui/tray/IconButton.qml | 3 ++- 2 files changed, 5 insertions(+), 2 deletions(-) diff --git a/src/gui/tray/ActivityItemContent.qml b/src/gui/tray/ActivityItemContent.qml index 093df1b275973..36b947d496e44 100644 --- a/src/gui/tray/ActivityItemContent.qml +++ b/src/gui/tray/ActivityItemContent.qml @@ -191,9 +191,11 @@ RowLayout { onClicked: Systray.presentShareViewInTray(model.openablePath) } - Button { + IconButton { id: dismissActionButton + customHoverEnabled: false + width: Style.activityListButtonWidth height: Style.activityListButtonHeight diff --git a/src/gui/tray/IconButton.qml b/src/gui/tray/IconButton.qml index a9741b33ee6ed..fc4079b21432c 100644 --- a/src/gui/tray/IconButton.qml +++ b/src/gui/tray/IconButton.qml @@ -11,6 +11,7 @@ Button{ property bool isMouseOver: false property bool isActive: root.pressed + property bool customHoverEnabled: true hoverEnabled: false // turn off default button hover @@ -33,7 +34,7 @@ Button{ height: 24 MouseArea { anchors.fill: parent - hoverEnabled: true + hoverEnabled: root.customHoverEnabled onExited: root.isMouseOver = false onEntered: root.isMouseOver = true } From 87f201cd66e975a740488fb7ca96407e72a1121e Mon Sep 17 00:00:00 2001 From: EmilBohleber Date: Mon, 10 Feb 2025 16:59:33 +0100 Subject: [PATCH 109/371] SES-300 readd animations on hover to pill buttons --- src/gui/tray/IconButton.qml | 11 +++++++++++ src/gui/tray/PrimaryPillButton.qml | 5 +++++ src/gui/tray/SecondaryPillButton.qml | 5 +++++ 3 files changed, 21 insertions(+) diff --git a/src/gui/tray/IconButton.qml b/src/gui/tray/IconButton.qml index fc4079b21432c..4ed08146f3fc1 100644 --- a/src/gui/tray/IconButton.qml +++ b/src/gui/tray/IconButton.qml @@ -12,6 +12,7 @@ Button{ property bool isMouseOver: false property bool isActive: root.pressed property bool customHoverEnabled: true + property string toolTipText hoverEnabled: false // turn off default button hover @@ -25,6 +26,11 @@ Button{ height: Style.sesPillIconSize } + ToolTip { + text: root.toolTipText + visible: root.isMouseOver + } + background: Rectangle { anchors.centerIn: parent color: root.isMouseOver ? root.pressed ? Style.sesActionPressed : Style.sesActionHover : "transparent" @@ -32,6 +38,11 @@ Button{ radius: height / 2 width: 24 height: 24 + + Behavior on color { + ColorAnimation { duration: Style.shortAnimationDuration } + } + MouseArea { anchors.fill: parent hoverEnabled: root.customHoverEnabled diff --git a/src/gui/tray/PrimaryPillButton.qml b/src/gui/tray/PrimaryPillButton.qml index a76dec61a82d2..dae050d20ea1f 100644 --- a/src/gui/tray/PrimaryPillButton.qml +++ b/src/gui/tray/PrimaryPillButton.qml @@ -38,6 +38,11 @@ Button{ border.width: 2 border.color: Style.sesPillButtonBorderColor radius: height / 2 + + Behavior on opacity { + NumberAnimation { duration: Style.shortAnimationDuration } + } + MouseArea { anchors.fill: parent hoverEnabled: true diff --git a/src/gui/tray/SecondaryPillButton.qml b/src/gui/tray/SecondaryPillButton.qml index 54bdb3089dba4..9315cf1ef9776 100644 --- a/src/gui/tray/SecondaryPillButton.qml +++ b/src/gui/tray/SecondaryPillButton.qml @@ -38,6 +38,11 @@ Button{ border.width: 2 border.color: Style.sesPillButtonBorderColor radius: height / 2 + + Behavior on opacity { + NumberAnimation { duration: Style.shortAnimationDuration } + } + MouseArea { anchors.fill: parent hoverEnabled: true From 69793ab1caa2a623ac0bc8d8eeb9ef28b6a4ac7f Mon Sep 17 00:00:00 2001 From: EmilBohleber Date: Mon, 10 Feb 2025 17:00:01 +0100 Subject: [PATCH 110/371] SES-300 replace close button in share details page --- src/gui/filedetails/ShareDetailsPage.qml | 17 ++++++++--------- 1 file changed, 8 insertions(+), 9 deletions(-) diff --git a/src/gui/filedetails/ShareDetailsPage.qml b/src/gui/filedetails/ShareDetailsPage.qml index 767745701305e..5b22a15ab203b 100644 --- a/src/gui/filedetails/ShareDetailsPage.qml +++ b/src/gui/filedetails/ShareDetailsPage.qml @@ -239,22 +239,17 @@ Page { wrapMode: Text.Wrap } - SesCustomButton { + IconButton { id: placeholder + customHoverEnabled: false + Layout.rowSpan: headerGridLayout.rows Layout.preferredWidth: Style.iconButtonWidth Layout.preferredHeight: width Layout.rightMargin: root.padding - icon.source: "image://svgimage-custom-color/clear.svg" + "/" + palette.buttonText - bgColor: palette.highlight - bgNormalOpacity: 0 - toolTipText: qsTr("Dismiss") - - font.pixelSize: pixelSize - font.weight: fontWeight - + iconSource: Style.sesAccountQuit onClicked: root.closeShareDetails() } @@ -852,6 +847,10 @@ Page { Layout.rightMargin: 20 Layout.row: 1 + Behavior on Layout.preferredWidth { + SmoothedAnimation { duration: Style.shortAnimationDuration } + } + TextEdit { id: clipboardHelper visible: false From e73cbb168636d71ec98e9b11e3dd193bb8c787df Mon Sep 17 00:00:00 2001 From: EmilBohleber Date: Mon, 10 Feb 2025 18:03:31 +0100 Subject: [PATCH 111/371] SES-300 hide tooltip if there is none --- src/gui/tray/IconButton.qml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/gui/tray/IconButton.qml b/src/gui/tray/IconButton.qml index 4ed08146f3fc1..95d84055f40bc 100644 --- a/src/gui/tray/IconButton.qml +++ b/src/gui/tray/IconButton.qml @@ -28,7 +28,7 @@ Button{ ToolTip { text: root.toolTipText - visible: root.isMouseOver + visible: root.toolTipText && root.isMouseOver } background: Rectangle { From 36e2459b5dc33ad9ced036de9fd1bd8cc5c73ad8 Mon Sep 17 00:00:00 2001 From: EmilBohleber Date: Mon, 10 Feb 2025 18:03:55 +0100 Subject: [PATCH 112/371] SES-300 replace close button on details page --- src/gui/filedetails/FileDetailsPage.qml | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/src/gui/filedetails/FileDetailsPage.qml b/src/gui/filedetails/FileDetailsPage.qml index 4f45650c556ba..9a08969308510 100644 --- a/src/gui/filedetails/FileDetailsPage.qml +++ b/src/gui/filedetails/FileDetailsPage.qml @@ -137,17 +137,18 @@ Page { wrapMode: Text.Wrap } - SesCustomButton { + IconButton { id: closeButton + customHoverEnabled: false + + Layout.rowSpan: headerGridLayout.rows Layout.preferredWidth: Style.iconButtonWidth Layout.preferredHeight: width Layout.rightMargin: headerGridLayout.textRightMargin - icon.source: "image://svgimage-custom-color/clear.svg" + "/" + palette.buttonText - bgColor: palette.highlight - bgNormalOpacity: 0 + iconSource: Style.sesAccountQuit toolTipText: qsTr("Dismiss") font.pixelSize: Style.sesFontPixelSize From 425ec1841f22ea5f1d68ffcecbc2fa68903ceb09 Mon Sep 17 00:00:00 2001 From: EmilBohleber Date: Mon, 10 Feb 2025 18:04:34 +0100 Subject: [PATCH 113/371] SES-300 replace add and more oprions buttons on share delegate page --- src/gui/filedetails/ShareDelegate.qml | 28 ++++++++------------------- 1 file changed, 8 insertions(+), 20 deletions(-) diff --git a/src/gui/filedetails/ShareDelegate.qml b/src/gui/filedetails/ShareDelegate.qml index 10222fea551dc..68c02bd658157 100644 --- a/src/gui/filedetails/ShareDelegate.qml +++ b/src/gui/filedetails/ShareDelegate.qml @@ -152,7 +152,7 @@ GridLayout { spacing: 0 - SesCustomButton { + IconButton { id: createLinkButton Layout.alignment: Qt.AlignCenter @@ -161,13 +161,10 @@ GridLayout { toolTipText: qsTr("Create a new share link") - bgColor: palette.highlight - bgNormalOpacity: 0 - - icon.source: Style.sesDarkPlus + palette.buttonText + iconSource: Style.sesDarkPlus + palette.buttonText icon.width: Style.smallIconSize icon.height: Style.smallIconSize - // display: AbstractButton.IconOnly + customHoverEnabled: false visible: (root.isPlaceholderLinkShare || root.isSecureFileDropPlaceholderLinkShare) && root.canCreateLinkShares enabled: visible @@ -229,7 +226,7 @@ GridLayout { } } - SesCustomButton { + IconButton { id: moreButton property bool isHovered: moreButton.hovered || moreButton.visualFocus @@ -241,22 +238,13 @@ GridLayout { toolTipText: qsTr("Share options") - bgColor: palette.highlight - bgNormalOpacity: 0 - - icon.source: "image://svgimage-custom-color/more.svg/" + (moreButton.isActive || moreButton.isHovered ? Style.sesWhite : Style.sesIconColor) - icon.width: Style.smallIconSize - icon.height: Style.smallIconSize + iconSource: Style.sesMore + iconSourceHovered: Style.sesMoreWhite + width: Style.smallIconSize + height: Style.smallIconSize visible: !root.isPlaceholderLinkShare && !root.isSecureFileDropPlaceholderLinkShare && !root.isInternalLinkShare enabled: visible - - background: Rectangle { - anchors.fill: parent - anchors.margins: 1 - color: moreButton.isActive ? Style.sesActionPressed : moreButton.isHovered ? Style.sesActionHover : "transparent" - radius: width / 2 - } onClicked: root.rootStackView.push(shareDetailsPageComponent, {}, StackView.PushTransition) From 688fb25b8089cca2ed21a877fc1994b1d18ef5ac Mon Sep 17 00:00:00 2001 From: Kevin Beraz Date: Tue, 11 Feb 2025 09:58:25 +0100 Subject: [PATCH 114/371] Add ApplicationName to friendlyUserAgentString --- src/common/utility.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/common/utility.cpp b/src/common/utility.cpp index 782a71b01cf62..d4abb40c2d4f9 100644 --- a/src/common/utility.cpp +++ b/src/common/utility.cpp @@ -179,8 +179,8 @@ QByteArray Utility::userAgentString() QByteArray Utility::friendlyUserAgentString() { - const auto pattern = QStringLiteral("%1 (Desktop Client - %2)"); - const auto userAgent = pattern.arg(QSysInfo::machineHostName(), platform()); + const auto pattern = QStringLiteral("%1 (%2 Desktop Client - %3)"); + const auto userAgent = pattern.arg(QSysInfo::machineHostName(), qApp->applicationName(), platform()); return userAgent.toUtf8(); } From 86d13915905ef5a7f0a981a045fc7590936134e9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Christopher=20H=C3=A4tty?= Date: Tue, 11 Feb 2025 10:45:01 +0100 Subject: [PATCH 115/371] SES-316 Added CompilerFlag for IONOS-Builds to remove certain code without using comments --- .vscode/c_cpp_properties.json | 14 ++++++++++++++ CMakeLists.txt | 2 ++ 2 files changed, 16 insertions(+) create mode 100644 .vscode/c_cpp_properties.json diff --git a/.vscode/c_cpp_properties.json b/.vscode/c_cpp_properties.json new file mode 100644 index 0000000000000..3f0c64ea209b8 --- /dev/null +++ b/.vscode/c_cpp_properties.json @@ -0,0 +1,14 @@ +{ + "configurations": [ + { + "name": "Linux", + "compileCommands": [ + "${workspaceFolder}/../build/win32-MSVC-x64/RelWithDebInfo/compile_commands.json" + ], + "intelliSenseMode": "linux-gcc-x64", + "cStandard": "c17", + "cppStandard": "c++17" + } + ], + "version": 4 +} \ No newline at end of file diff --git a/CMakeLists.txt b/CMakeLists.txt index 63403f560486e..3798b9a3d85ef 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -3,6 +3,8 @@ cmake_policy(SET CMP0071 NEW) # Enable use of QtQuick compiler/generated code project(client) +add_compile_definitions(IONOS_BUILD) +set(CMAKE_EXPORT_COMPILE_COMMANDS ON) if(APPLE) set(CMAKE_OSX_DEPLOYMENT_TARGET "12.0" CACHE STRING "Minimum OSX deployment version") endif() From 3db5b992b531aa8306dae82ad2aad64f55cf4b2b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Christopher=20H=C3=A4tty?= Date: Tue, 11 Feb 2025 10:45:45 +0100 Subject: [PATCH 116/371] SES-316 switched some comments to #ifdef --- src/gui/accountsettings.cpp | 41 ++++++++++++++++++++----------------- src/gui/generalsettings.cpp | 2 ++ src/gui/settingsdialog.cpp | 13 +++++++----- 3 files changed, 32 insertions(+), 24 deletions(-) diff --git a/src/gui/accountsettings.cpp b/src/gui/accountsettings.cpp index 3be5dcd4fec3e..62771fdef88ed 100644 --- a/src/gui/accountsettings.cpp +++ b/src/gui/accountsettings.cpp @@ -1272,25 +1272,28 @@ void AccountSettings::migrateCertificateForAccount(const AccountPtr &account) void AccountSettings::showConnectionLabel(const QString &message, QStringList errors) { - // SES-4 Removed - // const auto errStyle = QLatin1String("color:#ffffff; background-color:#bb4d4d;padding:5px;" - // "border-width: 1px; border-style: solid; border-color: #aaaaaa;" - // "border-radius:5px;"); - // if (errors.isEmpty()) { - // auto msg = message; - // Theme::replaceLinkColorStringBackgroundAware(msg); - // _ui->connectLabel->setText(msg); - // _ui->connectLabel->setToolTip({}); - // _ui->connectLabel->setStyleSheet({}); - // } else { - // errors.prepend(message); - // auto userFriendlyMsg = errors.join(QLatin1String("
      ")); - // qCDebug(lcAccountSettings) << userFriendlyMsg; - // Theme::replaceLinkColorString(userFriendlyMsg, QColor("#c1c8e6")); - // _ui->connectLabel->setText(userFriendlyMsg); - // _ui->connectLabel->setToolTip({}); - // _ui->connectLabel->setStyleSheet(errStyle); - // } + + #ifndef IONOS_BUILD + //SES-4 Removed + const auto errStyle = QLatin1String("color:#ffffff; background-color:#bb4d4d;padding:5px;" + "border-width: 1px; border-style: solid; border-color: #aaaaaa;" + "border-radius:5px;"); + if (errors.isEmpty()) { + auto msg = message; + Theme::replaceLinkColorStringBackgroundAware(msg); + _ui->connectLabel->setText(msg); + _ui->connectLabel->setToolTip({}); + _ui->connectLabel->setStyleSheet({}); + } else { + errors.prepend(message); + auto userFriendlyMsg = errors.join(QLatin1String("
      ")); + qCDebug(lcAccountSettings) << userFriendlyMsg; + Theme::replaceLinkColorString(userFriendlyMsg, QColor("#c1c8e6")); + _ui->connectLabel->setText(userFriendlyMsg); + _ui->connectLabel->setToolTip({}); + _ui->connectLabel->setStyleSheet(errStyle); + } + #endif _ui->accountStatus->setVisible(false); } diff --git a/src/gui/generalsettings.cpp b/src/gui/generalsettings.cpp index c1690278f5f2a..daca52afafeff 100644 --- a/src/gui/generalsettings.cpp +++ b/src/gui/generalsettings.cpp @@ -763,11 +763,13 @@ void GeneralSettings::customizeStyle() // _ui->dataProtectionBoxLayout->setMargin(16); #endif +#ifdef IONOS_BUILD // SES-4 removed _ui->monoIconsCheckBox->hide(); _ui->callNotificationsCheckBox->hide(); _ui->advanced_groupBox->hide(); _ui->updates_frame->hide(); +#endif #if defined(BUILD_UPDATER) // updater info diff --git a/src/gui/settingsdialog.cpp b/src/gui/settingsdialog.cpp index 7ba422e233d3f..b18c16a2eeb6b 100644 --- a/src/gui/settingsdialog.cpp +++ b/src/gui/settingsdialog.cpp @@ -143,12 +143,15 @@ SettingsDialog::SettingsDialog(ownCloudGui *gui, QWidget *parent) connect(AccountManager::instance(), &AccountManager::capabilitiesChanged, generalSettings, &GeneralSettings::loadUpdateChannelsList); #endif + #ifndef IONOS_BUILD // SES-4 removed network settings - // QAction *networkAction = createColorAwareAction(QLatin1String(":/client/theme/network.svg"), tr("Network")); - // _actionGroup->addAction(networkAction); - // _toolBar->addAction(networkAction); - // auto *networkSettings = new NetworkSettings; - // _ui->stack->addWidget(networkSettings); + QAction *networkAction = createColorAwareAction(QLatin1String(":/client/theme/network.svg"), tr("Network")); + _actionGroup->addAction(networkAction); + _toolBar->addAction(networkAction); + auto *networkSettings = new NetworkSettings; + _ui->stack->addWidget(networkSettings); + + #endif _actionGroupWidgets.insert(generalAction, generalSettings); // _actionGroupWidgets.insert(networkAction, networkSettings); From d916163efa7586e67e7407246c6b54b640791a83 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Christopher=20H=C3=A4tty?= Date: Tue, 11 Feb 2025 10:46:08 +0100 Subject: [PATCH 117/371] SES-316 Removed "Activity" Item from ContextMenu --- src/gui/socketapi/socketapi.cpp | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/gui/socketapi/socketapi.cpp b/src/gui/socketapi/socketapi.cpp index c5ed1face4490..98dc358202989 100644 --- a/src/gui/socketapi/socketapi.cpp +++ b/src/gui/socketapi/socketapi.cpp @@ -1360,9 +1360,11 @@ void SocketApi::command_GET_MENU_ITEMS(const QString &argument, OCC::SocketListe const QFileInfo fileInfo(fileData.localPath); sendLockFileInfoMenuEntries(fileInfo, syncFolder, fileData, listener, record); + #ifndef IONOS_BUILD if (!FileSystem::isDir(fileData.localPath)) { listener->sendMessage(QLatin1String("MENU_ITEM:ACTIVITY") + flagString + tr("Activity")); } + #endif DirectEditor* editor = getDirectEditorForLocalFile(fileData.localPath); if (editor) { From 855321faf8eede91f26a9cbdfd5fd4db8bc0f1ac Mon Sep 17 00:00:00 2001 From: EmilBohleber Date: Tue, 11 Feb 2025 14:14:04 +0100 Subject: [PATCH 118/371] SES-300 replace copy link button with secondary pill button with animation --- src/gui/filedetails/ShareDelegate.qml | 9 ++++----- src/gui/tray/SecondaryPillButton.qml | 12 ++++++++++-- 2 files changed, 14 insertions(+), 7 deletions(-) diff --git a/src/gui/filedetails/ShareDelegate.qml b/src/gui/filedetails/ShareDelegate.qml index 68c02bd658157..eafbe9033212e 100644 --- a/src/gui/filedetails/ShareDelegate.qml +++ b/src/gui/filedetails/ShareDelegate.qml @@ -172,7 +172,7 @@ GridLayout { onClicked: root.createNewLinkShare() } - SesCustomButton { + SecondaryPillButton { id: copyLinkButton function copyShareLink() { @@ -187,6 +187,8 @@ GridLayout { property bool shareLinkCopied: false + removeBorder: true + Layout.alignment: Qt.AlignCenter Layout.preferredWidth: shareLinkCopied ? implicitWidth : Style.iconButtonWidth Layout.preferredHeight: Style.iconButtonWidth @@ -196,10 +198,7 @@ GridLayout { text: shareLinkCopied ? qsTr("Copied!") : "" textColor: Style.sesDarkGreen - bgColor: palette.highlight - bgNormalOpacity: 0 - - icon.source: shareLinkCopied ? Style.sesSyncSuccessIcon + Style.positiveColor : + iconSource: shareLinkCopied ? Style.sesSyncSuccessIcon + Style.positiveColor : Style.sesClipboard + palette.brightText icon.width: Style.smallIconSize diff --git a/src/gui/tray/SecondaryPillButton.qml b/src/gui/tray/SecondaryPillButton.qml index 9315cf1ef9776..e15bdfb40cea7 100644 --- a/src/gui/tray/SecondaryPillButton.qml +++ b/src/gui/tray/SecondaryPillButton.qml @@ -9,8 +9,11 @@ Button{ hoverEnabled: false // turn off default button hover property string iconSource + property string toolTipText property bool isMouseOver: false + property bool removeBorder: false + property color textColor: "black" contentItem: Row { spacing: Style.sesPillButtonVerticalPadding @@ -20,7 +23,7 @@ Button{ anchors.centerIn: parent Text { text: root.text - color: "black" + color: textColor font.weight: Style.sesFontNormalWeight font.pointSize: Style.sesFontPointSize } @@ -35,7 +38,7 @@ Button{ background: Rectangle { color: Style.sesPillButtonSecondaryBackgroundColor opacity: root.isMouseOver ? Style.sesPillButtonHoverOpacity : 1.0 - border.width: 2 + border.width: root.removeBorder ? 0 : 2 border.color: Style.sesPillButtonBorderColor radius: height / 2 @@ -50,4 +53,9 @@ Button{ onEntered: root.isMouseOver = true } } + + ToolTip { + text: root.toolTipText + visible: root.toolTipText && root.isMouseOver + } } \ No newline at end of file From ab5a8f45fd95ac3d3ad2edf0e7afaadf2a922e52 Mon Sep 17 00:00:00 2001 From: EmilBohleber Date: Tue, 11 Feb 2025 14:52:43 +0100 Subject: [PATCH 119/371] SES-300 replace other sescustombuttons with new buttons --- src/gui/ResolveConflictsDialog.qml | 16 ++-------------- src/gui/filedetails/FileDetailsPage.qml | 1 - src/gui/tray/SyncStatus.qml | 12 ++---------- 3 files changed, 4 insertions(+), 25 deletions(-) diff --git a/src/gui/ResolveConflictsDialog.qml b/src/gui/ResolveConflictsDialog.qml index 91f748ee7be18..818d8f68819b4 100644 --- a/src/gui/ResolveConflictsDialog.qml +++ b/src/gui/ResolveConflictsDialog.qml @@ -153,30 +153,18 @@ ApplicationWindow { readonly property int pixelSize: Style.sesFontPixelSize readonly property int fontWeight: Style.sesFontNormalWeight - SesCustomButton { + PrimaryPillButton { font.pixelSize: pixelSize font.weight: fontWeight text: qsTr("Resolve conflicts") - bgColor: Style.sesActionPressed - bgNormalOpacity: 1.0 - bgHoverOpacity: Style.hoverOpacity - onClicked: buttonBox.onRejected() } - SesCustomButton { + SecondaryPillButton { font.pixelSize: pixelSize font.weight: fontWeight text: qsTr("Cancel") - textColor: Style.sesActionPressed - - bgColor: palette.highlight - bgNormalOpacity: 1.0 - - bgBorderWidth: 2 - bgBorderColor: Style.sesActionPressed - bgHoverOpacity: Style.hoverOpacity onClicked: buttonBox.onRejected() } diff --git a/src/gui/filedetails/FileDetailsPage.qml b/src/gui/filedetails/FileDetailsPage.qml index 9a08969308510..efd94a49d7066 100644 --- a/src/gui/filedetails/FileDetailsPage.qml +++ b/src/gui/filedetails/FileDetailsPage.qml @@ -142,7 +142,6 @@ Page { customHoverEnabled: false - Layout.rowSpan: headerGridLayout.rows Layout.preferredWidth: Style.iconButtonWidth Layout.preferredHeight: width diff --git a/src/gui/tray/SyncStatus.qml b/src/gui/tray/SyncStatus.qml index bdd243b9688ef..8e22ef8c88790 100644 --- a/src/gui/tray/SyncStatus.qml +++ b/src/gui/tray/SyncStatus.qml @@ -78,18 +78,13 @@ RowLayout { } } - SesCustomButton { + PrimaryPillButton { id: syncNowButton Layout.rightMargin: Style.trayHorizontalMargin text: qsTr("Sync now") - padding: Style.smallSpacing - textColor: Style.adjustedCurrentUserHeaderColor - textColorHovered: Style.currentUserHeaderTextColor - bgColor: Style.currentUserHeaderColor - visible: false // SES-4 removed enabled: visible onClicked: { @@ -99,16 +94,13 @@ RowLayout { } } - SesCustomButton { + SecondaryPillButton { Layout.rightMargin: Style.trayHorizontalMargin font.pixelSize: pixelSize font.weight: fontWeight text: qsTr("Resolve conflicts") - bgColor: Style.sesActionPressed - bgNormalOpacity: 1.0 - bgHoverOpacity: Style.hoverOpacity visible: activityModel.hasSyncConflicts && !syncStatus.syncing && From 236d0c439e280ebf274918a7cacbbd433970e493 Mon Sep 17 00:00:00 2001 From: EmilBohleber Date: Tue, 11 Feb 2025 14:52:57 +0100 Subject: [PATCH 120/371] SES-300 remove sesCustomButton --- resources.qrc | 2 - src/gui/tray/SesButtonContents.qml | 71 -------------------------- src/gui/tray/SesCustomButton.qml | 82 ------------------------------ 3 files changed, 155 deletions(-) delete mode 100644 src/gui/tray/SesButtonContents.qml delete mode 100644 src/gui/tray/SesCustomButton.qml diff --git a/resources.qrc b/resources.qrc index 1edb66e005b4c..d85ff0a581f09 100644 --- a/resources.qrc +++ b/resources.qrc @@ -70,11 +70,9 @@ src/gui/SesComponents/SesErrorBox.qml src/gui/SesComponents/SesTrayHeader.qml src/gui/tray/TrayWindowAccountMenu.qml - src/gui/tray/SesCustomButton.qml src/gui/tray/PrimaryPillButton.qml src/gui/tray/SecondaryPillButton.qml src/gui/tray/IconButton.qml - src/gui/tray/SesButtonContents.qml src/gui/tray/AccountMenuItem.qml diff --git a/src/gui/tray/SesButtonContents.qml b/src/gui/tray/SesButtonContents.qml deleted file mode 100644 index 302252c622a22..0000000000000 --- a/src/gui/tray/SesButtonContents.qml +++ /dev/null @@ -1,71 +0,0 @@ -/* - * Copyright (C) by Claudio Cambra - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, but - * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY - * or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License - * for more details. - */ - -import QtQuick 2.15 -import QtQuick.Controls 2.15 -import QtQuick.Layouts 1.15 - -import Style 1.0 -RowLayout { - id: root - - property bool hovered: false - property string imageSourceHover: "" - property string imageSource: "" - property int imageSourceWidth: undefined - property int imageSourceHeight: undefined - property string text: "" - property var display - - property color textColor: palette.buttonText - property color textColorHovered: textColor - property alias font: buttonLabel.font - - height: parent.height - - EnforcedPlainTextLabel { - id: buttonLabel - - Layout.alignment: Qt.AlignVCenter - - text: root.text - - visible: root.text !== "" - - color: root.hovered ? root.textColorHovered : root.textColor - - elide: Text.ElideRight - } - - Image { - id: icon - - Layout.alignment: Qt.AlignVCenter - - source: root.hovered ? root.imageSourceHover : root.imageSource - - sourceSize { - width: root.imageSourceWidth - height: root.imageSourceHeight - } - - fillMode: Image.PreserveAspectFit - visible: root.display === Button.TextOnly ? false : root.hovered ? root.imageSourceHover !== "" : root.imageSource !== "" - - layer.enabled: true - // layer.effect: ColorOverlay { - // color: "white" - // } - } -} \ No newline at end of file diff --git a/src/gui/tray/SesCustomButton.qml b/src/gui/tray/SesCustomButton.qml deleted file mode 100644 index 934d9bed6974c..0000000000000 --- a/src/gui/tray/SesCustomButton.qml +++ /dev/null @@ -1,82 +0,0 @@ -/* - * Copyright (C) 2022 by Oleksandr Zolotov - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, but - * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY - * or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License - * for more details. - */ - -import QtQuick -import QtQuick.Controls -import QtQuick.Layouts -import Style -import com.ionos.hidrivenext.desktopclient -Button { - id: root - - property string imageSourceHover: root.icon.source - property var iconItem: icon - - property string toolTipText: "" - - property color textColor: palette.buttonText - property color textColorHovered: textColor - - property alias contentsFont: root.font - - property alias bgColor: bgRectangle.color - property alias bgNormalColor: bgRectangle.normalColor - property alias bgHoverColor: bgRectangle.hoverColor - property alias bgNormalOpacity: bgRectangle.normalOpacity - property alias bgHoverOpacity: bgRectangle.hoverOpacity - - property int bgBorderWidth - property string bgBorderColor - - Rectangle { - id: bgRectangle - property bool isHovered: root.hovered - property real normalOpacity: 0.3 - property real hoverOpacity: 1.0 - property color normalColor: palette.button - property color hoverColor: palette.button - height: 36 - border.width: root.bgBorderWidth - border.color: root.bgBorderColor - color: isHovered ? hoverColor : normalColor - opacity: isHovered ? hoverOpacity : normalOpacity - radius: width / 2 - } - - leftPadding: root.text === "" ? Style.smallSpacing : 20 - rightPadding: root.text === "" ? Style.smallSpacing : 20 - - implicitHeight: 36 - implicitWidth: contentItem.implicitWidth + leftPadding + rightPadding - - hoverEnabled: true - - NCToolTip { - text: root.toolTipText - visible: root.toolTipText !== "" && root.hovered - } - - contentItem: SesButtonContents { - id: contents - display: root.display - hovered: root.hovered - imageSourceHover: root.imageSourceHover - imageSource: root.icon.source - imageSourceWidth: 12 - imageSourceHeight: 16 - text: root.text - textColor: root.textColor - textColorHovered: root.textColorHovered - } -} From 1109fdbdd0bddb66cbc1f29b588de6ac50dd229b Mon Sep 17 00:00:00 2001 From: EmilBohleber Date: Tue, 11 Feb 2025 14:54:22 +0100 Subject: [PATCH 121/371] SES-300 accept solution instead of reject --- src/gui/ResolveConflictsDialog.qml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/gui/ResolveConflictsDialog.qml b/src/gui/ResolveConflictsDialog.qml index 818d8f68819b4..5285e4a4f53e4 100644 --- a/src/gui/ResolveConflictsDialog.qml +++ b/src/gui/ResolveConflictsDialog.qml @@ -158,7 +158,7 @@ ApplicationWindow { font.weight: fontWeight text: qsTr("Resolve conflicts") - onClicked: buttonBox.onRejected() + onClicked: buttonBox.onAccepted() } SecondaryPillButton { From b0beb85c2bdcca1c58362b628ac73291944b4a00 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Christopher=20H=C3=A4tty?= Date: Tue, 11 Feb 2025 15:11:26 +0100 Subject: [PATCH 122/371] SES-307 Fixed Custom Permission Box Since one of the 2 (3) modes is alway selected, there is no case in which this checkbox should not be checked --- src/gui/filedetails/ShareDetailsPage.qml | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/gui/filedetails/ShareDetailsPage.qml b/src/gui/filedetails/ShareDetailsPage.qml index 5b22a15ab203b..c6ab8f6548cb1 100644 --- a/src/gui/filedetails/ShareDetailsPage.qml +++ b/src/gui/filedetails/ShareDetailsPage.qml @@ -608,7 +608,8 @@ Page { id: customPermissionsCheckBox Layout.fillWidth: true enabled: !root.isSharePermissionChangeInProgress - checked: root.currentPermissionMode === permissionMode + checkable: false + checked: true text: qsTr("Custom Permissions") spacing: scrollContentsColumn.indicatorSpacing padding: scrollContentsColumn.itemPadding From 1202d182bd86bb57b9cf19a8ebe45eda2d4bc07a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Christopher=20H=C3=A4tty?= Date: Tue, 11 Feb 2025 15:12:42 +0100 Subject: [PATCH 123/371] SES-307 Hide Checkbox for Filedrop only on "Internal Shares" https://docs.nextcloud.com/server/latest/user_manual/en/files/sharing.html --- src/gui/filedetails/ShareDetailsPage.qml | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/gui/filedetails/ShareDetailsPage.qml b/src/gui/filedetails/ShareDetailsPage.qml index c6ab8f6548cb1..162a493d43291 100644 --- a/src/gui/filedetails/ShareDetailsPage.qml +++ b/src/gui/filedetails/ShareDetailsPage.qml @@ -86,6 +86,7 @@ Page { readonly property bool isHideDownloadInProgress: shareModelData.isHideDownloadInProgress readonly property int currentPermissionMode: shareModelData.currentPermissionMode + readonly property bool isInternalShare: shareModelData.shareType === ShareModel.ShareTypeUser || shareModelData.shareType === ShareModel.ShareTypeGroup || shareModelData.shareType === ShareModel.ShareTypeCircle readonly property bool isLinkShare: shareModelData.shareType === ShareModel.ShareTypeLink readonly property bool isEmailShare: shareModelData.shareType === ShareModel.ShareTypeEmail readonly property bool shareSupportsPassword: isLinkShare || isEmailShare @@ -669,7 +670,7 @@ Page { spacing: scrollContentsColumn.indicatorSpacing padding: scrollContentsColumn.itemPadding onClicked: root.permissionModeChanged(permissionMode) - visible: customPermissionsCheckBox.checked & false // Removed SES-307 + visible: customPermissionsCheckBox.checked && !root.isInternalShare // Removed SES-307 font.pixelSize: pixelSize font.weight: fontWeight } From 766ef91ed22f3c34442c21c38cbb5c51e439effa Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Christopher=20H=C3=A4tty?= Date: Thu, 13 Feb 2025 08:24:39 +0100 Subject: [PATCH 124/371] Reduced merge conflicts by using mostly additive changes --- src/gui/settingsdialog.cpp | 51 +++++++++++++++++++++++++++++++++++--- 1 file changed, 48 insertions(+), 3 deletions(-) diff --git a/src/gui/settingsdialog.cpp b/src/gui/settingsdialog.cpp index b18c16a2eeb6b..ced1acb9ce159 100644 --- a/src/gui/settingsdialog.cpp +++ b/src/gui/settingsdialog.cpp @@ -46,6 +46,7 @@ namespace { const QString TOOLBAR_CSS() { +#ifdef IONOS_BUILD return QStringLiteral("QToolBar { background: %1; border: none; border-bottom: 1px solid %2; } " "QToolBar QToolButton { background: %1; border: none; margin: 2px 0px 7px 12px; padding: 11px 4px 4px 4px; border-radius: %5; %8; } " "QToolBar QToolButton:checked { background: %7; color: %4; }" @@ -58,6 +59,12 @@ const QString TOOLBAR_CSS() "QMenu::item::selected { background: %3; color: %4; }" "QMenu::item::pressed { background: %6; color: %4; }" ); +#else + return QStringLiteral("QToolBar { background: %1; margin: 0; padding: 0; border: none; border-bottom: 1px solid %2; spacing: 0; } " + "QToolBar QToolButton { background: %1; border: none; border-bottom: 1px solid %2; margin: 0; padding: 5px; } " + "QToolBar QToolBarExtension { padding:0; } " + "QToolBar QToolButton:checked { background: %3; color: %4; }"); +#endif } const float buttonSizeRatio = 1.618f; // golden ratio @@ -127,6 +134,14 @@ SettingsDialog::SettingsDialog(ownCloudGui *gui, QWidget *parent) _actionGroup->addAction(newAccountAction); _toolBar->addAction(newAccountAction); connect(newAccountAction, &QAction::triggered, _gui, &ownCloudGui::slotNewAccountWizard); + +#ifndef IONOS_BUILD + // Adds space between users + activities and general + network actions + auto *spacer = new QWidget(); + spacer->setMinimumWidth(10); + spacer->setSizePolicy(QSizePolicy::MinimumExpanding, QSizePolicy::Minimum); + _toolBar->addWidget(spacer); +#endif QAction *generalAction = createColorAwareAction(QLatin1String(":/client/theme/ses/ses-settings.svg"), tr("General")); _actionGroup->addAction(generalAction); @@ -150,12 +165,11 @@ SettingsDialog::SettingsDialog(ownCloudGui *gui, QWidget *parent) _toolBar->addAction(networkAction); auto *networkSettings = new NetworkSettings; _ui->stack->addWidget(networkSettings); - #endif _actionGroupWidgets.insert(generalAction, generalSettings); - // _actionGroupWidgets.insert(networkAction, networkSettings); _toolBar->addSeparator(); + const auto accountsList = AccountManager::instance()->accounts(); for (const auto &account : accountsList) { accountAdded(account.data()); @@ -297,7 +311,18 @@ void SettingsDialog::accountAdded(AccountState *s) void SettingsDialog::slotAccountAvatarChanged() { - +#ifndef IONOS_BUILD + auto *account = dynamic_cast(sender()); + if (account && _actionForAccount.contains(account)) { + QAction *action = _actionForAccount[account]; + if (action) { + QImage pix = account->avatar(); + if (!pix.isNull()) { + action->setIcon(QPixmap::fromImage(AvatarJob::makeCircularAvatar(pix))); + } + } + } +#endif } void SettingsDialog::slotAccountDisplayNameChanged() @@ -347,6 +372,8 @@ void SettingsDialog::accountRemoved(AccountState *s) } } +#ifdef IONOS_BUILD + void SettingsDialog::customizeStyle() { QVariantMap palette = Theme::instance()->systemPalette(); @@ -389,6 +416,24 @@ void SettingsDialog::customizeStyle() } } } +#else +void SettingsDialog::customizeStyle() +{ + QString highlightColor(palette().highlight().color().name()); + QString highlightTextColor(palette().highlightedText().color().name()); + QString dark(palette().dark().color().name()); + QString background(palette().base().color().name()); + _toolBar->setStyleSheet(TOOLBAR_CSS().arg(background, dark, highlightColor, highlightTextColor)); + + Q_FOREACH (QAction *a, _actionGroup->actions()) { + QIcon icon = Theme::createColorAwareIcon(a->property("iconPath").toString(), palette()); + a->setIcon(icon); + auto *btn = qobject_cast(_toolBar->widgetForAction(a)); + if (btn) + btn->setIcon(icon); + } +} +#endif class ToolButtonAction : public QWidgetAction { From f41fb2145cd907bb3f9bbc2d583f27e8c82b3fd3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Christopher=20H=C3=A4tty?= Date: Fri, 14 Feb 2025 16:17:03 +0100 Subject: [PATCH 125/371] SES-209 Added path to fix pkg-config error --- .vscode/settings.json | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/.vscode/settings.json b/.vscode/settings.json index dde3108064331..f7a73fe3ec0cd 100644 --- a/.vscode/settings.json +++ b/.vscode/settings.json @@ -1,7 +1,10 @@ { "cmake.generator": "Ninja", "cmake.configureSettings": { - "CMAKE_PREFIX_PATH": "C:/CraftRoot", + "CMAKE_PREFIX_PATH": [ + "C:/CraftRoot", + "C:/CraftRoot/dev-utils/bin" + ], "BUILD_TESTING":"OFF", }, "cmake.buildDirectory": "${workspaceFolder}/../build/${buildKitTargetOs}-${buildKitVendor}-${buildKitTargetArch}/${buildType}", From 979ae843c91bc9326d19e0189dbcbff8d7f1c867 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Christopher=20H=C3=A4tty?= Date: Fri, 14 Feb 2025 16:18:19 +0100 Subject: [PATCH 126/371] SES-209 Added Craft64 path to not break build on diffrent systems --- .vscode/launch.json | 6 +++--- .vscode/settings.json | 4 +++- 2 files changed, 6 insertions(+), 4 deletions(-) diff --git a/.vscode/launch.json b/.vscode/launch.json index 92c2c2e0b629a..59bb384907259 100644 --- a/.vscode/launch.json +++ b/.vscode/launch.json @@ -16,7 +16,7 @@ "environment": [ { "name": "PATH", - "value": "C:/CraftRoot/bin;%PATH%" + "value": "C:/CraftRoot/bin;C:/Craft64/bin;%PATH%" }, { "name": "QML_IMPORT_TRACE", "value": "1" }, { "name": "QT_LOGGING_RULES", "value": "qt.qml.debug=true" } @@ -33,7 +33,7 @@ "environment": [ { "name": "PATH", - "value": "C:/CraftRoot/bin;%PATH%" + "value": "C:/CraftRoot/bin;C:/Craft64/bin;%PATH%" }, ], }, @@ -48,7 +48,7 @@ "environment": [ { "name": "PATH", - "value": "C:/CraftRoot/bin;%PATH%" + "value": "C:/CraftRoot/bin;C:/Craft64/bin;%PATH%" }, ], }, diff --git a/.vscode/settings.json b/.vscode/settings.json index f7a73fe3ec0cd..34991612e4a42 100644 --- a/.vscode/settings.json +++ b/.vscode/settings.json @@ -3,7 +3,9 @@ "cmake.configureSettings": { "CMAKE_PREFIX_PATH": [ "C:/CraftRoot", - "C:/CraftRoot/dev-utils/bin" + "C:/CraftRoot/dev-utils/bin", + "C:/Craft64", + "C:/Craft64/dev-utils/bin" ], "BUILD_TESTING":"OFF", }, From 515b1807f512c236ebe85d2fa54683423b65ae85 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Christopher=20H=C3=A4tty?= Date: Fri, 14 Feb 2025 16:20:16 +0100 Subject: [PATCH 127/371] SES-209 Fixed Logging Category related build errors --- src/libsync/clientsideencryption.cpp | 3 ++- src/libsync/clientsideencryptionjobs.cpp | 3 ++- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/src/libsync/clientsideencryption.cpp b/src/libsync/clientsideencryption.cpp index 4658a0c50bad8..0451c3a6b4844 100644 --- a/src/libsync/clientsideencryption.cpp +++ b/src/libsync/clientsideencryption.cpp @@ -77,7 +77,8 @@ namespace OCC { Q_LOGGING_CATEGORY(lcCse, "hidrivenext.sync.clientsideencryption", QtInfoMsg) -Q_LOGGING_CATEGORY(lcCseDecryption, "hidrivenext.e2e", QtInfoMsg) +Q_LOGGING_CATEGORY(lcCseDecryption, "hidrivenext.sync.clientsideencryption.decryption", QtInfoMsg) +Q_LOGGING_CATEGORY(lcCseEncryption, "hidrivenext.sync.clientsideencryption.encryption", QtInfoMsg) QString e2eeBaseUrl(const OCC::AccountPtr &account) { diff --git a/src/libsync/clientsideencryptionjobs.cpp b/src/libsync/clientsideencryptionjobs.cpp index f3325daeb080a..ebedee94d96e9 100644 --- a/src/libsync/clientsideencryptionjobs.cpp +++ b/src/libsync/clientsideencryptionjobs.cpp @@ -20,10 +20,11 @@ #include "common/syncjournaldb.h" Q_LOGGING_CATEGORY(lcSignPublicKeyApiJob, "hidrivenext.sync.networkjob.sendcsr", QtInfoMsg) +Q_LOGGING_CATEGORY(lcStorePublicKeyApiJob, "hidrivenext.sync.networkjob.storepublickey", QtInfoMsg) Q_LOGGING_CATEGORY(lcStorePrivateKeyApiJob, "hidrivenext.sync.networkjob.storeprivatekey", QtInfoMsg) Q_LOGGING_CATEGORY(lcCseJob, "hidrivenext.sync.networkjob.clientsideencrypt", QtInfoMsg) - namespace + { constexpr auto e2eeSignatureHeaderName = "X-NC-E2EE-SIGNATURE"; } From cc351698ea574a43544679f4e9d4d0ec81e7ea89 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Christopher=20H=C3=A4tty?= Date: Fri, 14 Feb 2025 16:20:39 +0100 Subject: [PATCH 128/371] SES-209 Fixed merge related errors in Style Context --- src/gui/main.cpp | 26 +++++++++++++++----------- 1 file changed, 15 insertions(+), 11 deletions(-) diff --git a/src/gui/main.cpp b/src/gui/main.cpp index 0be2fc9eab27e..873c14af376e0 100644 --- a/src/gui/main.cpp +++ b/src/gui/main.cpp @@ -88,28 +88,32 @@ int main(int argc, char **argv) #if defined Q_OS_MAC qmlStyle = QStringLiteral("macOS"); #elif defined Q_OS_WIN - qmlStyle = QStringLiteral("Fusion"); + if (QOperatingSystemVersion::current().version() < QOperatingSystemVersion::Windows11.version()) { + qmlStyle = QStringLiteral("Universal"); + widgetsStyle = QStringLiteral("Fusion"); + } else { + qmlStyle = QStringLiteral("FluentWinUI3"); + widgetsStyle = QStringLiteral("windows11"); + } QApplication::setFont(IonosTheme::settingsFontDefault()); #endif - QApplication::setStyle(new sesStyle); +#ifdef IONOS_BUILD + OCC::Application app(argc, argv); + app.setStyle(new sesStyle(QStyleFactory::create("WindowsVista"))); + + QQuickStyle::setStyle(qmlStyle); + QQuickStyle::setFallbackStyle(QStringLiteral("Fusion")); +#elif QQuickStyle::setStyle(qmlStyle); QQuickStyle::setFallbackStyle(QStringLiteral("Fusion")); -// Comment in again when Ionos Compiler Switch is available -// #if defined Q_OS_WIN -// if (QOperatingSystemVersion::current().version() < QOperatingSystemVersion::Windows11.version()) { -// QApplication::setStyle(QStyleFactory::create("Fusion")); -// } -// #endif OCC::Application app(argc, argv); - app.setStyle(new sesStyle(QStyleFactory::create("WindowsVista"))); - QQuickStyle::setStyle(style); - QQuickStyle::setFallbackStyle(QStringLiteral("Fusion")); if (!widgetsStyle.isEmpty()) { QApplication::setStyle(QStyleFactory::create(widgetsStyle)); } +#endif #ifndef Q_OS_WIN signal(SIGPIPE, SIG_IGN); From 2ddc49aa3056ecbf95c9549c94d0dca65afc922c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Christopher=20H=C3=A4tty?= Date: Mon, 17 Feb 2025 11:38:27 +0100 Subject: [PATCH 129/371] SES-209 Reverted installer banner changes --- admin/win/msi/gui/banner.bmp | Bin 85978 -> 85894 bytes admin/win/msi/gui/dialog.bmp | Bin 619346 -> 464774 bytes 2 files changed, 0 insertions(+), 0 deletions(-) diff --git a/admin/win/msi/gui/banner.bmp b/admin/win/msi/gui/banner.bmp index 5270a99dea084175b16de1eb879f42cbc2d9bea2..7eba2ce1a7700f2010105784749f73ba19ef0247 100644 GIT binary patch literal 85894 zcmeI5XKWlr7>3V4Korpt5gmR&AVLHYf)qLeAt6cv3KB>Z0TM+ZibVYbN^hi+-bsTb zMCly^H|^Qedz){*oq6V^ z@vkKK&i)yOpF#MkLUuU*P4ErGZ=Y`jt{=M6*Ynd;fM4DGLjoi~0wfU61gPWjeD^qZ z5+DH*=0wh2J@lAj_9^dzmqbC6pAOY$)KLaE{0wfUM1gPWjeg8Om5+DH*ppNr1KmsH{ z0`X0NIv(HmkE1665{NBW^kGnW!`pp>&hvaV~+U@zao)s*QsRp zOiLV{pp<5}g;)q}tv;b^GSqQhF?kU(q*gu|WnMSo+767eKi%O1^M{x}lB!;_lI z(rh}Y$=wpwA&xcA^m+GXE*_RL^EO1S*o%AmyuqDq^;SLNQYd{@;f_y^uYNvr(a_vA zFPz-+UPa21j;0E$D$dKPhm%IYW-B3Nqjwjl!D%GfB!!+u%PFG5Gov($0ttY}FBB;XYSjV1oT)Ef*PjGD+= z@(7-%Bcrd*-K?}n)JkJ8;B1EBGy8v3`qoot-PzUA5^1F3*rKSe8}mrub?NR7I~zbR zE9!VJ9L$ga33#7CTV3(7X#>p)=p>!J;z{^nFgxW_d|>i5aJIObdykYW-WYZq#4VSjq&9zt`zeK$4wlTt z54SgzI(aWtF_JMC)E6IgI}+-+TVk{)0TR$jpelR4LjL}HlfEaa#PTUPY5b*m>t2UiI7A8U~S3Fsk^vG74z`{1fB-2PE> zMJC1s=Sf}RK6p`7W(qe5%o>A9eVz;=SR8hQ2$|BOQ}L*dzB*g$Lg_10XWp)?TU)T( z)p)4mu5i(q1V}(90mSF2gfF2ob-6Gs1eF(TdRt{IN;y_0g}Sb?HTm0}^aB5T*x@#%8)!tEcM&7!8M<53aOfCNauD+I8FD63xnhS!zj!w$4Iq2)$9c#v0CcUXw% z6s2p$Xg`vu2rN`Ki2n)*mdGN2U1@ApNFBE#!*UWJ0nZUQz3&HE^=y_Xi*|h}+Y2SZ z!xQ^CPrU6Zv?*la5Ela2%{^w!zhAT;I{@w>vyFY4I&RO0S4n^bJVfB+*7pU;L$;+V z&uWO}$@64;p`;>Zsa17{v+l5IDu4ZJf<3YwO_erPgiF+M0SL1sKmy(+ zP_*j{S@LXFDT9Y5$o4`>nSWM4C!98SkkF=(4NSS#CIlsC<+Fl4mTirfiJXj$I_`uL zZAgFwJV5~4o=B4CD>*pMYH&E4O|}_$XxIOPh0dQ)!B6py5!)>g0)6$d+=6 zf9ys5InW2oq;i|e66}U(-lZ1DdlvuowbBx9ebZc`C#mDn8PS3SNWeP;igtgc)IRJ; zmA(9lQ#(IBx%C5_gRHh0?Nde~mK+@0w+Ui1TZEs>eaWtphz-i2=6D7_vGGl-eZJtO zL0q}3@leNI;i54Kkbq_a(6~NsT{7AScX=pdjV!xorPED(h=HKzL?Q9TB6znQx^(1` zpag5PM*9vE)NzNPXhs4g;1vRRqg|gh zu~Uk3DaUC+IFr+;Yb5Y)XXGFud||-PW0X5dq|CUry&>2K;?(gzKw}jWAOZaZf=4Dh zJf#6kqvq4y5bAgA=Npy6icoIzQl!-+amtUCZwC?XMlHO}eIjf^&#)M6%i5 zoW|EfXG=}*zQW~6bL@|H!(npRZveZ&^seY4M;&(oi>4$%0-hrf?yAn&h@*-HuQy(W z#|BuCU8?~XY<|Zq!9p6rh=}-x_oggyCQh}-F+FGvZ3<@QEIcapMF*7K;YhhM|Lp8# zkM-VpJRx(@P`t#{R)0oW%XuMn+&L>+k^l*KngC)>n#(hqE3%vfpI|vLbMY{<5ce}3 zInK=<5KeGztuDXbPG1?41NiKtF-1taaF=MJdzvg?OBA z3FT^^0CimZE#Lr1fCTgtXm2dXZYNgJgtD4ri87SA)@C=_b2%mI__?IbzDR%sJWZgp zt)V=yAaC7BUMB2BtQb*AQ0|qsm!TAwI41Q1e@37 zZEZMn)X6JCT1HPD*Mgm$k^l*iK+FhG$76<)4Uqr|kbo8f)Nw7?*(nK-013p50ChZO zDA^DRkN^p2AwV71f}Nd`011#l%m`4&V}_CqkpKyhfEEJOaV^-{DG87O3B-&5bv$M$ z*$@ek010RzKpoeDot=^Z36Ma{2vEmkhLR1D011$Q76R09E!f#936KB@#EgLNU$J+7 Apa1{> delta 160 zcmZph&w6Vi!jg5_k)6&w^fS7IO%$c0FT-TX3V)~5``WYBlz?_XbTU{mwY}x#m^@$yRdLlOf DQ!g+p diff --git a/admin/win/msi/gui/dialog.bmp b/admin/win/msi/gui/dialog.bmp index b870b472556dfb47177bd600b204c1453d492fd6..f548941594d7772eb466a98a2a3b3e6e037548a0 100644 GIT binary patch literal 464774 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 literal 619346 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 F{C`t&OI82? From 89fa348b68e94c2c5787975cc4e45dbe2190e2ed Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Christopher=20H=C3=A4tty?= Date: Mon, 17 Feb 2025 14:48:45 +0100 Subject: [PATCH 130/371] SES-327 Used IconButton for correct HoverEffect --- src/gui/tray/UserLine.qml | 12 +++--------- 1 file changed, 3 insertions(+), 9 deletions(-) diff --git a/src/gui/tray/UserLine.qml b/src/gui/tray/UserLine.qml index a65293140ac97..70953ea5edf03 100644 --- a/src/gui/tray/UserLine.qml +++ b/src/gui/tray/UserLine.qml @@ -99,7 +99,7 @@ AbstractButton { } } - Button { + IconButton { id: userMoreButton Layout.preferredWidth: Style.headerButtonIconSize Layout.preferredHeight: Layout.preferredWidth @@ -109,20 +109,14 @@ AbstractButton { property bool isHovered: userMoreButton.hovered || userMoreButton.visualFocus property bool isActive: userMoreButton.pressed || userMoreButtonMenu.visible - icon.source: "qrc:///client/theme/more.svg" - icon.color: userMoreButton.isActive || userMoreButton.isHovered ? Style.sesWhite : Style.sesIconDarkColor + iconSource: Style.sesMore + iconSourceHovered: Style.sesMoreWhite Accessible.role: Accessible.ButtonMenu Accessible.name: qsTr("Account actions") Accessible.onPressAction: userMoreButtonMouseArea.clicked() onClicked: userMoreButtonMenu.visible ? userMoreButtonMenu.close() : userMoreButtonMenu.popup() - background: Rectangle { - anchors.fill: parent - anchors.margins: 1 - color: userMoreButton.isActive ? Style.sesActionPressed : userMoreButton.isHovered ? Style.sesActionHover : "transparent" - radius: width / 2 - } Menu { id: userMoreButtonMenu From b82085d50da3774868f3e693d6ba619df8d25aa1 Mon Sep 17 00:00:00 2001 From: EmilBohleber Date: Mon, 17 Feb 2025 15:58:52 +0100 Subject: [PATCH 131/371] SES-326 remove gray area around buttons --- src/gui/ResolveConflictsDialog.qml | 6 ------ 1 file changed, 6 deletions(-) diff --git a/src/gui/ResolveConflictsDialog.qml b/src/gui/ResolveConflictsDialog.qml index 5285e4a4f53e4..cc41249ae1f5f 100644 --- a/src/gui/ResolveConflictsDialog.qml +++ b/src/gui/ResolveConflictsDialog.qml @@ -179,10 +179,4 @@ ApplicationWindow { } } } - - Rectangle { - color: palette.base - anchors.fill: parent - z: 1 - } } From 6d90034e0a12aa9f985fd3d978dc566cee9f1a4c Mon Sep 17 00:00:00 2001 From: EmilBohleber Date: Mon, 17 Feb 2025 16:05:14 +0100 Subject: [PATCH 132/371] SES-326 make resolve conflicts button a primary button --- src/gui/tray/SyncStatus.qml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/gui/tray/SyncStatus.qml b/src/gui/tray/SyncStatus.qml index 8e22ef8c88790..5e795a722fed7 100644 --- a/src/gui/tray/SyncStatus.qml +++ b/src/gui/tray/SyncStatus.qml @@ -94,7 +94,7 @@ RowLayout { } } - SecondaryPillButton { + PrimaryPillButton { Layout.rightMargin: Style.trayHorizontalMargin font.pixelSize: pixelSize From 7225e307f9eb652a8efba0a6194818761433b147 Mon Sep 17 00:00:00 2001 From: Emil Bohleber Date: Mon, 17 Feb 2025 16:22:02 +0100 Subject: [PATCH 133/371] SES-209 make failing, not needed github workflows manual --- .github/workflows/clang-tidy-review.yml | 3 +-- .github/workflows/linux-appimage.yml | 3 +-- .github/workflows/linux-clang-compile-tests.yml | 3 +-- .github/workflows/linux-gcc-compile-tests.yml | 3 +-- .github/workflows/sonarcloud.yml | 3 +-- 5 files changed, 5 insertions(+), 10 deletions(-) diff --git a/.github/workflows/clang-tidy-review.yml b/.github/workflows/clang-tidy-review.yml index 547fcf415fe62..63a179250d571 100644 --- a/.github/workflows/clang-tidy-review.yml +++ b/.github/workflows/clang-tidy-review.yml @@ -1,8 +1,7 @@ name: clang-tidy-review on: - pull_request: - types: [opened, synchronize, reopened] + workflow_dispatch: jobs: clang-tidy: diff --git a/.github/workflows/linux-appimage.yml b/.github/workflows/linux-appimage.yml index 020598b9ee6a3..576a7ead54a16 100644 --- a/.github/workflows/linux-appimage.yml +++ b/.github/workflows/linux-appimage.yml @@ -1,7 +1,6 @@ name: Linux Appimage Package on: - pull_request: - types: [opened, synchronize, reopened] + workflow_dispatch: jobs: build: name: Linux Appimage Package diff --git a/.github/workflows/linux-clang-compile-tests.yml b/.github/workflows/linux-clang-compile-tests.yml index ff3b4965102b6..e97864cc164a0 100644 --- a/.github/workflows/linux-clang-compile-tests.yml +++ b/.github/workflows/linux-clang-compile-tests.yml @@ -1,7 +1,6 @@ name: Linux Clang compilation and tests on: - pull_request: - types: [opened, synchronize, reopened] + workflow_dispatch: jobs: build: name: Linux Clang compilation and tests diff --git a/.github/workflows/linux-gcc-compile-tests.yml b/.github/workflows/linux-gcc-compile-tests.yml index 679ea2472c577..10c8ac628b03c 100644 --- a/.github/workflows/linux-gcc-compile-tests.yml +++ b/.github/workflows/linux-gcc-compile-tests.yml @@ -1,7 +1,6 @@ name: Linux GCC compilation and tests on: - pull_request: - types: [opened, synchronize, reopened] + workflow_dispatch: jobs: build: name: Linux GCC compilation and tests diff --git a/.github/workflows/sonarcloud.yml b/.github/workflows/sonarcloud.yml index 63652e10d89ed..9e0fdc24f6a1a 100644 --- a/.github/workflows/sonarcloud.yml +++ b/.github/workflows/sonarcloud.yml @@ -1,7 +1,6 @@ name: SonarCloud analysis on: - pull_request: - types: [opened, synchronize, reopened] + workflow_dispatch: jobs: build: name: SonarCloud analysis From 1f95b99eb35b2bf92d26d8d7e282fa4d6378720e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Christopher=20H=C3=A4tty?= Date: Tue, 18 Feb 2025 08:10:55 +0100 Subject: [PATCH 134/371] SES-209 adjusted Application Names in Cmake to fit Customization Service --- IONOS.cmake | 9 +++++---- theme/colored/ionoshidrivenext-icon.svg | 4 ++++ 2 files changed, 9 insertions(+), 4 deletions(-) create mode 100644 theme/colored/ionoshidrivenext-icon.svg diff --git a/IONOS.cmake b/IONOS.cmake index b0222d133a146..1f2b4d4b40e5b 100644 --- a/IONOS.cmake +++ b/IONOS.cmake @@ -1,7 +1,8 @@ -set( APPLICATION_NAME "HiDrive Next" ) -set( APPLICATION_SHORTNAME "HiDriveNext" ) -set( APPLICATION_EXECUTABLE "HiDriveNext" ) -set( APPLICATION_CONFIG_NAME "${APPLICATION_EXECUTABLE}" ) +set( APPLICATION_NAME "IONOS HiDrive Next" ) +set( APPLICATION_SHORTNAME "IONOSHiDriveNext" ) +set( APPLICATION_EXECUTABLE "IONOS_HiDrive_Next" ) +# set( APPLICATION_CONFIG_NAME "${APPLICATION_EXECUTABLE}" ) +set( APPLICATION_CONFIG_NAME "IONOS-HiDrive-Next" ) set( APPLICATION_DOMAIN "ionos.com" ) set( APPLICATION_VENDOR "IONOS SE" ) set( APPLICATION_UPDATE_URL "https://customerupdates.nextcloud.com/client/" CACHE STRING "URL for updater" ) diff --git a/theme/colored/ionoshidrivenext-icon.svg b/theme/colored/ionoshidrivenext-icon.svg new file mode 100644 index 0000000000000..e768c954e7e46 --- /dev/null +++ b/theme/colored/ionoshidrivenext-icon.svg @@ -0,0 +1,4 @@ + + + + From c3df9bb07bb825d0fb6ea08804318a8ae38d34ab Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Christopher=20H=C3=A4tty?= Date: Tue, 18 Feb 2025 11:00:04 +0100 Subject: [PATCH 135/371] SES-209 modify value of APPLICATION_ICON_NAME, to fit Customization Service --- IONOS.cmake | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/IONOS.cmake b/IONOS.cmake index 1f2b4d4b40e5b..53448ebc4d0fc 100644 --- a/IONOS.cmake +++ b/IONOS.cmake @@ -12,7 +12,8 @@ if(APPLE AND APPLICATION_NAME STREQUAL "HiDrive Next" AND EXISTS "${CMAKE_SOURCE set( APPLICATION_ICON_NAME "hidrivenext-macOS" ) message("Using macOS-specific application icon: ${APPLICATION_ICON_NAME}") else() - set( APPLICATION_ICON_NAME "${APPLICATION_SHORTNAME}" ) + # set( APPLICATION_ICON_NAME "${APPLICATION_SHORTNAME}" ) + set( APPLICATION_ICON_NAME "ionos_hidrive_next" ) endif() set( APPLICATION_ICON_SET "SVG" ) From 866acf218ab4831502a958385dae30060103d3b0 Mon Sep 17 00:00:00 2001 From: Emil Bohleber Date: Tue, 18 Feb 2025 11:56:21 +0100 Subject: [PATCH 136/371] SES-322 Removed obsolete palettes --- src/gui/filedetails/ShareDetailsPage.qml | 133 +++-------------------- 1 file changed, 18 insertions(+), 115 deletions(-) diff --git a/src/gui/filedetails/ShareDetailsPage.qml b/src/gui/filedetails/ShareDetailsPage.qml index 162a493d43291..3855c9872c811 100644 --- a/src/gui/filedetails/ShareDetailsPage.qml +++ b/src/gui/filedetails/ShareDetailsPage.qml @@ -451,58 +451,32 @@ Page { height: visible ? implicitHeight : 0 spacing: Style.extraSmallSpacing - CheckBox { - id: noteEnabledMenuItem - - Layout.fillWidth: true + CheckBox { + id: noteEnabledMenuItem - // TODO: Rather than setting all these palette colours manually, - // create a custom style and do it for all components globally. - // - // Additionally, we need to override the entire palette when we - // set one palette property, as otherwise we default back to the - // theme palette -- not the parent palette - palette { - text: Style.ncTextColor - windowText: Style.ncTextColor - buttonText: Style.ncTextColor - brightText: Style.ncTextBrightColor - highlight: Style.lightHover - highlightedText: Style.ncTextColor - light: Style.lightHover - midlight: Style.ncSecondaryTextColor - mid: Style.darkerHover - dark: Style.menuBorder - button: Style.buttonBackgroundColor - window: Style.menuBorder - base: Style.backgroundColor - toolTipBase: Style.backgroundColor - toolTipText: Style.ncTextColor - } + Layout.fillWidth: true - font.pixelSize: pixelSize - font.weight: fontWeight + font.pixelSize: pixelSize + font.weight: fontWeight - spacing: scrollContentsColumn.indicatorSpacing - padding: scrollContentsColumn.itemPadding - indicator.width: scrollContentsColumn.indicatorItemWidth - indicator.height: scrollContentsColumn.indicatorItemWidth + spacing: scrollContentsColumn.indicatorSpacing + padding: scrollContentsColumn.itemPadding + indicator.width: scrollContentsColumn.indicatorItemWidth + indicator.height: scrollContentsColumn.indicatorItemWidth - checkable: true - checked: root.noteEnabled - text: qsTr("Note to recipient") - enabled: !root.waitingForNoteChange + checkable: true + checked: root.noteEnabled + text: qsTr("Note to recipient") + enabled: !root.waitingForNoteEnabledChange - onClicked: { - if (!checked && root.note !== "") { - root.setNote(""); - root.waitingForNoteChange = true; + onClicked: { + root.toggleNoteToRecipient(checked); + root.waitingForNoteEnabledChange = true; } } - } - Text{ + Text{ text: qsTr("Enter the note to recipient") color: Style.sesGray padding: scrollContentsColumn.itemPadding @@ -510,7 +484,7 @@ Page { font.family: root.font.family font.pixelSize: pixelSize font.weight: fontWeight - } + } TextEdit { id: noteTextEdit @@ -551,29 +525,6 @@ Page { active: !root.isFolderItem && !root.isEncryptedItem visible: active sourceComponent: CheckBox { - // TODO: Rather than setting all these palette colours manually, - // create a custom style and do it for all components globally. - // - // Additionally, we need to override the entire palette when we - // set one palette property, as otherwise we default back to the - // theme palette -- not the parent palette - palette { - text: Style.ncTextColor - windowText: Style.ncTextColor - buttonText: Style.ncTextColor - brightText: Style.ncTextBrightColor - highlight: Style.lightHover - highlightedText: Style.ncTextColor - light: Style.lightHover - midlight: Style.ncSecondaryTextColor - mid: Style.darkerHover - dark: Style.menuBorder - button: Style.buttonBackgroundColor - window: Style.menuBorder - base: Style.backgroundColor - toolTipBase: Style.backgroundColor - toolTipText: Style.ncTextColor - } font.pixelSize: pixelSize font.weight: fontWeight @@ -682,30 +633,6 @@ Page { Layout.fillWidth: true - // TODO: Rather than setting all these palette colours manually, - // create a custom style and do it for all components globally. - // - // Additionally, we need to override the entire palette when we - // set one palette property, as otherwise we default back to the - // theme palette -- not the parent palette - palette { - text: Style.ncTextColor - windowText: Style.ncTextColor - buttonText: Style.ncTextColor - brightText: Style.ncTextBrightColor - highlight: Style.lightHover - highlightedText: Style.ncTextColor - light: Style.lightHover - midlight: Style.ncSecondaryTextColor - mid: Style.darkerHover - dark: Style.menuBorder - button: Style.buttonBackgroundColor - window: palette.dark // NOTE: Fusion theme uses darker window colour for the border of the checkbox - base: Style.backgroundColor - toolTipBase: Style.backgroundColor - toolTipText: Style.ncTextColor - } - font.pixelSize: pixelSize font.weight: fontWeight @@ -739,30 +666,6 @@ Page { anchors.left: parent.left anchors.right: parent.right - // TODO: Rather than setting all these palette colours manually, - // create a custom style and do it for all components globally. - // - // Additionally, we need to override the entire palette when we - // set one palette property, as otherwise we default back to the - // theme palette -- not the parent palette - palette { - text: Style.ncTextColor - windowText: Style.ncTextColor - buttonText: Style.ncTextColor - brightText: Style.ncTextBrightColor - highlight: Style.lightHover - highlightedText: Style.ncTextColor - light: Style.lightHover - midlight: Style.ncSecondaryTextColor - mid: Style.darkerHover - dark: Style.menuBorder - button: Style.buttonBackgroundColor - window: palette.dark // NOTE: Fusion theme uses darker window colour for the border of the checkbox - base: Style.backgroundColor - toolTipBase: Style.backgroundColor - toolTipText: Style.ncTextColor - } - font.pixelSize: pixelSize font.weight: fontWeight From bb56a48b0718f7e004f08ebdf7a139b3b8f88be3 Mon Sep 17 00:00:00 2001 From: Emil Bohleber Date: Tue, 18 Feb 2025 11:57:00 +0100 Subject: [PATCH 137/371] SES-322 Explicit set the palette here This is actual the fix which propagtes the palette correctly to its children --- src/gui/tray/MainWindow.qml | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/gui/tray/MainWindow.qml b/src/gui/tray/MainWindow.qml index b4da47d68587b..f0a17a539838c 100644 --- a/src/gui/tray/MainWindow.qml +++ b/src/gui/tray/MainWindow.qml @@ -259,7 +259,8 @@ ApplicationWindow { clip: true radius: Systray.useNormalWindow ? 0.0 : Style.trayWindowRadius - color: Style.colorWithoutTransparency(palette.base) + palette: trayWindow.palette + color: palette.base Accessible.role: Accessible.Grouping Accessible.name: qsTr("Nextcloud desktop main dialog") From b2963c8765c03dc297127981a31be335d35c9be0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Christopher=20H=C3=A4tty?= Date: Fri, 14 Feb 2025 08:01:29 +0100 Subject: [PATCH 138/371] SES-322 Set color in the system palette of the Application Since nearly every color in the application should have the same color, this should be no problem. At many places we set the color explicit, which can be removed now. In case that another color is needed, it can be overwritten locally --- src/libsync/theme.cpp | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/libsync/theme.cpp b/src/libsync/theme.cpp index acf37580fab2f..518d832cab080 100644 --- a/src/libsync/theme.cpp +++ b/src/libsync/theme.cpp @@ -426,6 +426,10 @@ Theme::Theme() IONOSPalette.setColor(QPalette::HighlightedText, QColor(0,0,0)); IONOSPalette.setColor(QPalette::Disabled, QPalette::HighlightedText, QColor(0,0,0)); + auto systemPalette = QGuiApplication::palette(); + systemPalette.setColor(QPalette::WindowText, QColor("#001B40")); + QGuiApplication::setPalette(systemPalette); + connectToPaletteSignal(); #ifdef APPLICATION_SERVER_URL_ENFORCE From 09963d1053fa02f0a64d50c930362801b4735a30 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Christopher=20H=C3=A4tty?= Date: Fri, 14 Feb 2025 08:41:15 +0100 Subject: [PATCH 139/371] SES-322 Removed obsolete explicit color --- src/gui/tray/ActivityItemContent.qml | 1 - src/gui/tray/SyncStatus.qml | 1 - 2 files changed, 2 deletions(-) diff --git a/src/gui/tray/ActivityItemContent.qml b/src/gui/tray/ActivityItemContent.qml index 36b947d496e44..576a81db7a428 100644 --- a/src/gui/tray/ActivityItemContent.qml +++ b/src/gui/tray/ActivityItemContent.qml @@ -153,7 +153,6 @@ RowLayout { text: root.activityData.dateTime font.family: Style.sesOpenSansRegular font.pixelSize: Style.sesFontHintPixelSize - color: Style.sesTrayFontColor visible: text !== "" } diff --git a/src/gui/tray/SyncStatus.qml b/src/gui/tray/SyncStatus.qml index 5e795a722fed7..257416443de98 100644 --- a/src/gui/tray/SyncStatus.qml +++ b/src/gui/tray/SyncStatus.qml @@ -72,7 +72,6 @@ RowLayout { text: syncStatus.syncStatusDetailString visible: syncStatus.syncStatusDetailString !== "" - color: Style.sesTrayFontColor font: root.font wrapMode: Text.Wrap } From 63ac28f45f563f170f8f3d36ae3965b0b9e94ac3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Christopher=20H=C3=A4tty?= Date: Fri, 14 Feb 2025 08:43:44 +0100 Subject: [PATCH 140/371] SES-322 Set explicit color It seems Text and Text Fields is not controlled by the palette as expceted --- src/gui/filedetails/ShareDetailsPage.qml | 1 + 1 file changed, 1 insertion(+) diff --git a/src/gui/filedetails/ShareDetailsPage.qml b/src/gui/filedetails/ShareDetailsPage.qml index 3855c9872c811..7b4ead826f663 100644 --- a/src/gui/filedetails/ShareDetailsPage.qml +++ b/src/gui/filedetails/ShareDetailsPage.qml @@ -492,6 +492,7 @@ Page { font.family: root.font.family font.pixelSize: pixelSize font.weight: fontWeight + color: Style.sesTrayFontColor Layout.fillWidth: true Layout.leftMargin: 3 Layout.rightMargin: 3 From 5d9078ac2fc38b94285109ce1138be195f668bc6 Mon Sep 17 00:00:00 2001 From: Kevin Beraz Date: Thu, 13 Feb 2025 14:49:27 +0100 Subject: [PATCH 141/371] SES-323 hide share options for virtual files --- .../FileProviderUIExt/Sharing/ShareViewController.xib | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/shell_integration/MacOSX/NextcloudIntegration/FileProviderUIExt/Sharing/ShareViewController.xib b/shell_integration/MacOSX/NextcloudIntegration/FileProviderUIExt/Sharing/ShareViewController.xib index 7a61de7033656..f64580297a7d3 100644 --- a/shell_integration/MacOSX/NextcloudIntegration/FileProviderUIExt/Sharing/ShareViewController.xib +++ b/shell_integration/MacOSX/NextcloudIntegration/FileProviderUIExt/Sharing/ShareViewController.xib @@ -242,6 +242,8 @@ + From 3ae449fff8e4afe8149379d9ea4438604c3d2a63 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Christopher=20H=C3=A4tty?= Date: Wed, 19 Feb 2025 14:22:28 +0100 Subject: [PATCH 142/371] SES-209 renamed icon for CS --- theme/colored/ionos_hidrive_next-icon.svg | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 theme/colored/ionos_hidrive_next-icon.svg diff --git a/theme/colored/ionos_hidrive_next-icon.svg b/theme/colored/ionos_hidrive_next-icon.svg new file mode 100644 index 0000000000000..e768c954e7e46 --- /dev/null +++ b/theme/colored/ionos_hidrive_next-icon.svg @@ -0,0 +1,4 @@ + + + + From 903a545c22f3cc6d0167674e2d90a648adfebc6a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Christopher=20H=C3=A4tty?= Date: Wed, 19 Feb 2025 14:30:55 +0100 Subject: [PATCH 143/371] SES-209 Reverted Mac Installer image changes for CS compatibility reverted ed1fe294892e8f0c383c277ab360be4eb38a0091 --- admin/osx/installer-background.png | Bin 794 -> 4028 bytes admin/osx/installer-background.svg | 35 +------------------------- admin/osx/installer-background_2x.png | Bin 1994 -> 7190 bytes 3 files changed, 1 insertion(+), 34 deletions(-) diff --git a/admin/osx/installer-background.png b/admin/osx/installer-background.png index 7833f187dcaa842b2795d45b0affbdec7cb19b6a..ca273880b37aa34ff8fca33a53677cc779b6fa37 100644 GIT binary patch literal 4028 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 B2BiQ1 literal 794 zcmeAS@N?(olHy`uVBq!ia0y~yU~~YoPjIjS$(bw`tAP|}fk$L90|Vb-5N14{zaj-F zC|TkfQ4*Y=R#Ki=l*&+EUaps!mtCBkSdglhUz9%kosAR&1JiO(7srr_Id88RGBPOe z956Vr|G8qayD;nCs`O_JB75I5H0ZK%q(~}ENNsSK#>f;o${7s<`lo}hj8?2Hy-9+K R4Zw8G;OXk;vd$@?2>`qv&*cCB diff --git a/admin/osx/installer-background.svg b/admin/osx/installer-background.svg index 6a25f5f66f099..73af25b6d05d6 100644 --- a/admin/osx/installer-background.svg +++ b/admin/osx/installer-background.svg @@ -1,35 +1,2 @@ - + diff --git a/admin/osx/installer-background_2x.png b/admin/osx/installer-background_2x.png index 210f1b91845e5b56f5e2efc6533c8d4854f0e943..0117c4974989a1e4286f0490ce98e18e0f2d33b9 100644 GIT binary patch literal 7190 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 literal 1994 zcmeAS@N?(olHy`uVBq!ia0y~yU}|7sV4T3g1{AUTd{GrhaTa()7Beu&wu3NZ|I?4D zKtah8*NBqf{Irtt#G+J&^73-M%)IR4;rvVPaVD_zxcg!vkGr4hDf_21bS?9t8%69!3_14nv?D4A}%2 z6pk@4F&vR_U}%sSRWup|qp4stBaD^>qs8F}uMwUxu?Voq?%Wvws Date: Thu, 20 Feb 2025 09:44:06 +0100 Subject: [PATCH 144/371] SES-209 added alternative banner and dialog --- admin/win/msi/CMakeLists.txt | 4 ++-- admin/win/msi/OEM.wxi.in | 4 ++-- admin/win/msi/gui/banner_2.bmp | Bin 0 -> 85978 bytes admin/win/msi/gui/dialog_2.bmp | Bin 0 -> 619346 bytes 4 files changed, 4 insertions(+), 4 deletions(-) create mode 100644 admin/win/msi/gui/banner_2.bmp create mode 100644 admin/win/msi/gui/dialog_2.bmp diff --git a/admin/win/msi/CMakeLists.txt b/admin/win/msi/CMakeLists.txt index a2b40c1a85372..6d3229ad3fbe5 100644 --- a/admin/win/msi/CMakeLists.txt +++ b/admin/win/msi/CMakeLists.txt @@ -30,6 +30,6 @@ install(FILES Ionos.wxs ${CMAKE_CURRENT_BINARY_DIR}/RegistryCleanup.vbs RegistryCleanupCustomAction.wxs - gui/banner.bmp - gui/dialog.bmp + gui/banner_2.bmp + gui/dialog_2.bmp DESTINATION msi/) diff --git a/admin/win/msi/OEM.wxi.in b/admin/win/msi/OEM.wxi.in index e35451eef2904..101dfa1379f2e 100644 --- a/admin/win/msi/OEM.wxi.in +++ b/admin/win/msi/OEM.wxi.in @@ -50,7 +50,7 @@ - - + + diff --git a/admin/win/msi/gui/banner_2.bmp b/admin/win/msi/gui/banner_2.bmp new file mode 100644 index 0000000000000000000000000000000000000000..5270a99dea084175b16de1eb879f42cbc2d9bea2 GIT binary patch literal 85978 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 F{C`t&OI82? literal 0 HcmV?d00001 From cd404c1a5ae6576368c3c37b397532877724d49d Mon Sep 17 00:00:00 2001 From: Emil Bohleber Date: Thu, 20 Feb 2025 18:20:24 +0100 Subject: [PATCH 145/371] SES-209 remove styling to fix build and app run --- src/gui/selectivesyncdialog.cpp | 16 ---------------- 1 file changed, 16 deletions(-) diff --git a/src/gui/selectivesyncdialog.cpp b/src/gui/selectivesyncdialog.cpp index 1c05860473516..a9a9cc9536301 100644 --- a/src/gui/selectivesyncdialog.cpp +++ b/src/gui/selectivesyncdialog.cpp @@ -579,22 +579,6 @@ void SelectiveSyncDialog::customizeStyle() ) ); -#ifdef Q_OS_MAC - button->setStyleSheet( - button->styleSheet() + QStringLiteral("QPushButton { %1; } ").arg( - IonosTheme::fontConfigurationCss( - IonosTheme::settingsFont(), - IonosTheme::settingsTextSize(), - IonosTheme::settingsTitleWeight500(), - IonosTheme::titleColor() - ) - ) - ); - - buttonBox->layout()->setSpacing(24); -#endif - - // Set background colors auto dialogPalette = palette(); const auto backgroundColor = QColor(IonosTheme::dialogBackgroundColor()); From ef59625c5d284b7f105a46b0024ff5bcd68d2acf Mon Sep 17 00:00:00 2001 From: Emil Bohleber Date: Mon, 24 Feb 2025 14:54:05 +0100 Subject: [PATCH 146/371] SES-209 add missing import --- src/gui/wizard/owncloudwizard.cpp | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/gui/wizard/owncloudwizard.cpp b/src/gui/wizard/owncloudwizard.cpp index 8bfcb1be898a2..7b0cb091c72c8 100644 --- a/src/gui/wizard/owncloudwizard.cpp +++ b/src/gui/wizard/owncloudwizard.cpp @@ -31,6 +31,8 @@ #include "wizard/owncloudwizard.h" #include "wizard/webviewpage.h" #include "wizard/welcomepage.h" +#include "wizard/termsofservicewizardpage.h" + #include "common/vfs.h" From ae964e7ddda5534ce843054ae8e262f684f22f4e Mon Sep 17 00:00:00 2001 From: EmilBohleber Date: Thu, 27 Feb 2025 17:16:41 +0100 Subject: [PATCH 147/371] SES-209 fix a bug --- src/gui/settingsdialog.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/gui/settingsdialog.cpp b/src/gui/settingsdialog.cpp index ced1acb9ce159..0cd74d72f3e90 100644 --- a/src/gui/settingsdialog.cpp +++ b/src/gui/settingsdialog.cpp @@ -402,7 +402,7 @@ void SettingsDialog::customizeStyle() ); for (const auto a : _actionGroup->actions()) { - QIcon icon = Theme::createColorAwareIcon(a->property("iconPath").toString(), palette()); + QIcon icon = Theme::createColorAwareIcon(a->property("iconPath").toString(), this->palette()); a->setIcon(icon); auto *btn = qobject_cast(_toolBar->widgetForAction(a)); if (btn) { From 11c903a124ed9f276bde356c6177458056d2334f Mon Sep 17 00:00:00 2001 From: EmilBohleber Date: Thu, 27 Feb 2025 17:27:54 +0100 Subject: [PATCH 148/371] SES-209 remove not needed new functions --- src/gui/generalsettings.cpp | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/src/gui/generalsettings.cpp b/src/gui/generalsettings.cpp index daca52afafeff..336d3006ad89a 100644 --- a/src/gui/generalsettings.cpp +++ b/src/gui/generalsettings.cpp @@ -194,6 +194,13 @@ GeneralSettings::GeneralSettings(QWidget *parent) updatePollIntervalVisibility(); +#ifndef IONOS_BUILD + _ui->labelInterval->setText("seconds (if
      Client Push is unavailable)"); + _ui->labelInterval->setTextFormat(Qt::RichText); + _ui->labelInterval->setTextInteractionFlags(Qt::TextBrowserInteraction); + _ui->labelInterval->setOpenExternalLinks(true); +#endif + connect(_ui->serverNotificationsCheckBox, &QAbstractButton::toggled, this, &GeneralSettings::slotToggleOptionalServerNotifications); _ui->serverNotificationsCheckBox->setToolTip(tr("Server notifications that require attention.")); @@ -402,8 +409,9 @@ void GeneralSettings::loadMiscSettings() _ui->monoIconsCheckBox->setChecked(cfgFile.monoIcons()); const auto interval = cfgFile.remotePollInterval(); - _ui->remotePollIntervalSpinBox->setValue(static_cast(interval.count() / 1000)); - updatePollIntervalVisibility(); +#ifndef IONOS_BUILD + _ui->remotePollIntervalSpinBox->setValue(static_cast(interval.count() / 1000)); +#endif } #if defined(BUILD_UPDATER) From 3c983df0579427e920e1a3a24ae6f6ff7a2af1e1 Mon Sep 17 00:00:00 2001 From: EmilBohleber Date: Thu, 27 Feb 2025 17:29:07 +0100 Subject: [PATCH 149/371] SES-209 add IONOS to name of app in mac branch --- IONOS.cmake | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/IONOS.cmake b/IONOS.cmake index 53448ebc4d0fc..130d56f0930db 100644 --- a/IONOS.cmake +++ b/IONOS.cmake @@ -8,7 +8,7 @@ set( APPLICATION_VENDOR "IONOS SE" ) set( APPLICATION_UPDATE_URL "https://customerupdates.nextcloud.com/client/" CACHE STRING "URL for updater" ) set( APPLICATION_HELP_URL "" CACHE STRING "URL for the help menu" ) -if(APPLE AND APPLICATION_NAME STREQUAL "HiDrive Next" AND EXISTS "${CMAKE_SOURCE_DIR}/theme/colored/hidrivenext-macOS-icon.svg") +if(APPLE AND APPLICATION_NAME STREQUAL "IONOS HiDrive Next" AND EXISTS "${CMAKE_SOURCE_DIR}/theme/colored/hidrivenext-macOS-icon.svg") set( APPLICATION_ICON_NAME "hidrivenext-macOS" ) message("Using macOS-specific application icon: ${APPLICATION_ICON_NAME}") else() From 5d08aef3ebe47d3065e81f996d38ff4ce29514f6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Christopher=20H=C3=A4tty?= Date: Fri, 28 Feb 2025 14:51:51 +0100 Subject: [PATCH 150/371] SES-286 some translations modifications --- src/gui/accountsettings.cpp | 6 ++--- .../cloudproviders/cloudproviderwrapper.cpp | 2 +- src/gui/folder.cpp | 6 ++--- src/gui/folderman.cpp | 4 ++-- src/gui/folderwizard.cpp | 8 +++---- src/gui/generalsettings.ui | 23 +++++++------------ src/gui/ignorelisttablewidget.cpp | 10 ++++---- .../FileProviderFastEnumerationSettings.qml | 2 +- src/gui/settingsdialog.cpp | 2 +- src/gui/sslbutton.cpp | 4 ++-- src/gui/wizard/owncloudadvancedsetuppage.ui | 14 ++++------- src/libsync/theme.cpp | 4 ++-- 12 files changed, 36 insertions(+), 49 deletions(-) diff --git a/src/gui/accountsettings.cpp b/src/gui/accountsettings.cpp index 62771fdef88ed..f7d94b25761cd 100644 --- a/src/gui/accountsettings.cpp +++ b/src/gui/accountsettings.cpp @@ -1777,9 +1777,9 @@ void AccountSettings::refreshSelectiveSyncStatus() QString infoString; if (!unsyncedFoldersString.isEmpty()) { - infoString += !cfg.confirmExternalStorage() ? tr("There are folders that were not synchronized because they are too big: ") - : !cfg.newBigFolderSizeLimit().first ? tr("There are folders that were not synchronized because they are external storages: ") - : tr("There are folders that were not synchronized because they are too big or external storages: "); + infoString += !cfg.confirmExternalStorage() ? tr("There are folders that were not synchronized because they are too big:") + " " + : !cfg.newBigFolderSizeLimit().first ? tr("There are folders that were not synchronized because they are external storages:") + " " + : tr("There are folders that were not synchronized because they are too big or external storages:") + " "; infoString += unsyncedFoldersString; } diff --git a/src/gui/cloudproviders/cloudproviderwrapper.cpp b/src/gui/cloudproviders/cloudproviderwrapper.cpp index 39d24b7956f5b..52033ad57053e 100644 --- a/src/gui/cloudproviders/cloudproviderwrapper.cpp +++ b/src/gui/cloudproviders/cloudproviderwrapper.cpp @@ -125,7 +125,7 @@ void CloudProviderWrapper::slotUpdateProgress(const QString &folder, const Progr qint64 currentFile = progress.currentFile(); qint64 totalFileCount = qMax(progress.totalFiles(), currentFile); if (progress.trustEta()) { - msg = tr("Syncing %1 of %2 (%3 left)") + msg = tr("Syncing %1 of %2 (%3 left)") .arg(currentFile) .arg(totalFileCount) .arg(Utility::durationToDescriptiveString2(progress.totalProgress().estimatedEta)); diff --git a/src/gui/folder.cpp b/src/gui/folder.cpp index e8feba21193ad..39d38af2ef760 100644 --- a/src/gui/folder.cpp +++ b/src/gui/folder.cpp @@ -1408,10 +1408,10 @@ void Folder::slotNewBigFolderDiscovered(const QString &newF, bool isExternal) journal->setSelectiveSyncList(SyncJournalDb::SelectiveSyncUndecidedList, undecidedList); emit newBigFolderDiscovered(newFolder); } - QString message = !isExternal ? (tr("A new folder larger than %1 MB has been added: %2.\n") + QString message = !isExternal ? (tr("A new folder larger than %1 MB has been added: %2.") .arg(ConfigFile().newBigFolderSizeLimit().second) - .arg(newF)) - : (tr("A folder from an external storage has been added.\n")); + .arg(newF) + "\n") + : (tr("A folder from an external storage has been added.") + "\n"); message += tr("Please go in the settings to select it if you wish to download it."); auto logger = Logger::instance(); diff --git a/src/gui/folderman.cpp b/src/gui/folderman.cpp index 82ec3e34b69c9..c0521d248f40c 100644 --- a/src/gui/folderman.cpp +++ b/src/gui/folderman.cpp @@ -1435,12 +1435,12 @@ QString FolderMan::getBackupName(QString fullPathName) const if (fullPathName.isEmpty()) return QString(); - QString newName = fullPathName + tr(" (backup)"); + QString newName = fullPathName + " " + tr("(backup)"); QFileInfo fi(newName); int cnt = 2; do { if (fi.exists()) { - newName = fullPathName + tr(" (backup %1)").arg(cnt++); + newName = fullPathName + " " + tr("(backup %1)").arg(cnt++); fi.setFile(newName); } } while (fi.exists()); diff --git a/src/gui/folderwizard.cpp b/src/gui/folderwizard.cpp index 21371fb28594a..c3a92e12d2161 100644 --- a/src/gui/folderwizard.cpp +++ b/src/gui/folderwizard.cpp @@ -67,11 +67,11 @@ QString FormatWarningsWizardPage::formatWarnings(const QStringList &warnings) co { QString formattedWarning; if (warnings.count() == 1) { - formattedWarning = tr("%1").arg(warnings.first()); + ret = QString("%1").arg(warnings.first()); } else if (warnings.count() > 1) { - formattedWarning = tr("") + "
        "; - for (const auto &warning : warnings) { - formattedWarning += QString::fromLatin1("
      • %1
      • ").arg(warning); + ret = "
          "; + Q_FOREACH (QString warning, warnings) { + ret += QString::fromLatin1("
        • %1
        • ").arg(warning); } formattedWarning += "
        "; } diff --git a/src/gui/generalsettings.ui b/src/gui/generalsettings.ui index 234888ab72e8e..4ac3e44d4ea10 100644 --- a/src/gui/generalsettings.ui +++ b/src/gui/generalsettings.ui @@ -146,10 +146,9 @@ - - Ask for confirmation before - synchronizing new folders larger than - + + Ask for confirmation before synchronizing new folders larger than + true @@ -184,9 +183,7 @@ - - MB + MB @@ -214,8 +211,7 @@ - Notify when synchronised folders grow - larger than specified limit + Notify when synchronised folders grow larger than specified limit @@ -243,8 +239,7 @@ - Automatically disable synchronisation of - folders that overcome limit + Automatically disable synchronisation of folders that overcome limit @@ -257,8 +252,7 @@ - Ask for confirmation before synchronizing - external storages + Ask for confirmation before synchronizing external storages @@ -281,8 +275,7 @@ - Show sync folders in &Explorer's navigation - pane + Show sync folders in &Explorer's navigation pane diff --git a/src/gui/ignorelisttablewidget.cpp b/src/gui/ignorelisttablewidget.cpp index 5991db8fc6bf5..a827b186d8753 100644 --- a/src/gui/ignorelisttablewidget.cpp +++ b/src/gui/ignorelisttablewidget.cpp @@ -25,10 +25,10 @@ IgnoreListTableWidget::IgnoreListTableWidget(QWidget *parent) customizeIgnoreListDialogStyle(); - ui->descriptionLabel->setText(tr("Files or folders that match this pattern will not be synchronized.\n\n" - "Objects that are allowed to be deleted will be deleted if they would " - "prevent a folder from being deleted. " - "This is useful for metadata.")); + ui->descriptionLabel->setText(tr("Files or folders matching a pattern will not be synchronized.\n\n" + "Items where deletion is allowed will be deleted if they prevent a " + "directory from being removed. " + "This is useful for meta data.")); connect(ui->tableWidget, &QTableWidget::itemSelectionChanged, this, &IgnoreListTableWidget::slotItemSelectionChanged); @@ -231,7 +231,7 @@ void IgnoreListTableWidget::customizeIgnoreListDialogStyle(){ void IgnoreListTableWidget::customizeAddIgnorePatternDialogStyle(QInputDialog &inputDialog){ inputDialog.setWindowTitle(tr("Ignore Pattern")); - inputDialog.setLabelText(tr("Add New Ignore Pattern")); + inputDialog.setLabelText(tr("Add a new ignore pattern:")); inputDialog.setTextValue(QString()); inputDialog.resize(626, 196); inputDialog.setVisible(true); diff --git a/src/gui/macOS/ui/FileProviderFastEnumerationSettings.qml b/src/gui/macOS/ui/FileProviderFastEnumerationSettings.qml index 46ec374eed544..a153b740f3bb1 100644 --- a/src/gui/macOS/ui/FileProviderFastEnumerationSettings.qml +++ b/src/gui/macOS/ui/FileProviderFastEnumerationSettings.qml @@ -51,7 +51,7 @@ Column { padding: Style.smallSpacing text: qsTr("Fast sync will only sync changes in files and folders within folders that have been explored. " + "This can significantly increase responsiveness on initial configuration of virtual files. " + - "However, it will cause redundant downloads of files moved to an unexplored folder. ") + "However, it will cause redundant downloads of files moved to an unexplored folder.") wrapMode: Text.Wrap visible: fastEnumerationEnabled } diff --git a/src/gui/settingsdialog.cpp b/src/gui/settingsdialog.cpp index 0cd74d72f3e90..460c2a51d1384 100644 --- a/src/gui/settingsdialog.cpp +++ b/src/gui/settingsdialog.cpp @@ -130,7 +130,7 @@ SettingsDialog::SettingsDialog(ownCloudGui *gui, QWidget *parent) _actionGroup->setExclusive(true); connect(_actionGroup, &QActionGroup::triggered, this, &SettingsDialog::slotSwitchPage); - QAction *newAccountAction = createColorAwareAction(QLatin1String(":/client/theme/ses/ses-darkPlus.svg"), tr("New Account")); + QAction *newAccountAction = createColorAwareAction(QLatin1String(":/client/theme/ses/ses-darkPlus.svg"), tr("New account")); _actionGroup->addAction(newAccountAction); _toolBar->addAction(newAccountAction); connect(newAccountAction, &QAction::triggered, _gui, &ownCloudGui::slotNewAccountWizard); diff --git a/src/gui/sslbutton.cpp b/src/gui/sslbutton.cpp index 96286bae08e12..859002c014228 100644 --- a/src/gui/sslbutton.cpp +++ b/src/gui/sslbutton.cpp @@ -171,10 +171,10 @@ void SslButton::updateAccountState(AccountState *accountState) if (account->url().scheme() == QLatin1String("https")) { setIcon(QIcon(QLatin1String(":/client/theme/lock-https.svg"))); QSslCipher cipher = account->_sessionCipher; - setToolTip(tr("This connection is encrypted using %1 bit %2.\n").arg(cipher.usedBits()).arg(cipher.name())); + setToolTip(QString(tr("This connection is encrypted using %1 bit %2.") + "\n").arg(cipher.usedBits()).arg(cipher.name())); } else { setIcon(QIcon(QLatin1String(":/client/theme/lock-broken.svg"))); - setToolTip(tr("This connection is NOT secure as it is not encrypted.\n")); + setToolTip(tr("This connection is NOT secure as it is not encrypted.") + "\n"); } } diff --git a/src/gui/wizard/owncloudadvancedsetuppage.ui b/src/gui/wizard/owncloudadvancedsetuppage.ui index dcc7567201a4b..39a892bf57f84 100644 --- a/src/gui/wizard/owncloudadvancedsetuppage.ui +++ b/src/gui/wizard/owncloudadvancedsetuppage.ui @@ -456,9 +456,7 @@ - - MB - + MB Qt::PlainText @@ -672,13 +670,9 @@ 0 - - <html><head/><body><p>If this box is checked, - existing content in the local folder will be erased to start a clean sync - from the server.</p><p>Do not check this if the local content - should be uploaded to the servers folder.</p></body></html> - - + + <html><head/><body><p>If this box is checked, existing content in the local folder will be erased to start a clean sync from the server.</p><p>Do not check this if the local content should be uploaded to the servers folder.</p></body></html> + Erase local folder and start a clean sync diff --git a/src/libsync/theme.cpp b/src/libsync/theme.cpp index 518d832cab080..389e558b1dd85 100644 --- a/src/libsync/theme.cpp +++ b/src/libsync/theme.cpp @@ -474,7 +474,7 @@ QString Theme::helpUrl() const #ifdef APPLICATION_HELP_URL return QString::fromLatin1(APPLICATION_HELP_URL); #else - return QString::fromLatin1("https://wl.hidrive.com/%1").arg(tr("easy/0118", "Redirect URL Parameter")); + return QString::fromLatin1("https://wl.hidrive.com/%1").arg(tr("easy/0118")); #endif } @@ -647,7 +647,7 @@ QString Theme::aboutInfo() const QString Theme::about() const { //: Example text: "

        Nextcloud Desktop Client

        " (%1 is the application name) - const auto devString = tr("

        %1 %2

        ").arg(APPLICATION_NAME, QString::fromLatin1(MIRALL_STRINGIFY(MIRALL_VERSION))); + const auto devString = QString("

        %1 %2

        ").arg(APPLICATION_NAME, QString::fromLatin1(MIRALL_STRINGIFY(MIRALL_VERSION))); return devString; } From 43518a07a2443b744f2a22c150182e8f5cac277a Mon Sep 17 00:00:00 2001 From: Emil Bohleber Date: Mon, 3 Mar 2025 18:31:04 +0100 Subject: [PATCH 151/371] SES-209 fix mac naming --- IONOS.cmake | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/IONOS.cmake b/IONOS.cmake index 130d56f0930db..831d930846971 100644 --- a/IONOS.cmake +++ b/IONOS.cmake @@ -8,8 +8,8 @@ set( APPLICATION_VENDOR "IONOS SE" ) set( APPLICATION_UPDATE_URL "https://customerupdates.nextcloud.com/client/" CACHE STRING "URL for updater" ) set( APPLICATION_HELP_URL "" CACHE STRING "URL for the help menu" ) -if(APPLE AND APPLICATION_NAME STREQUAL "IONOS HiDrive Next" AND EXISTS "${CMAKE_SOURCE_DIR}/theme/colored/hidrivenext-macOS-icon.svg") - set( APPLICATION_ICON_NAME "hidrivenext-macOS" ) +if(APPLE AND APPLICATION_NAME STREQUAL "IONOS HiDrive Next" AND EXISTS "${CMAKE_SOURCE_DIR}/theme/colored/ionoshidrivenext-macOS-icon.svg") + set( APPLICATION_ICON_NAME "ionoshidrivenext-macOS" ) message("Using macOS-specific application icon: ${APPLICATION_ICON_NAME}") else() # set( APPLICATION_ICON_NAME "${APPLICATION_SHORTNAME}" ) From 2f96c45cd2b8a824c953b967a02f0eafa4cf39cf Mon Sep 17 00:00:00 2001 From: Emil Bohleber Date: Mon, 3 Mar 2025 18:31:36 +0100 Subject: [PATCH 152/371] SES-209 remove thumbnailjob --- src/gui/CMakeLists.txt | 2 -- src/gui/tray/usermodel.cpp | 1 - 2 files changed, 3 deletions(-) diff --git a/src/gui/CMakeLists.txt b/src/gui/CMakeLists.txt index 0523a365c8f64..4a74b5c5d078e 100644 --- a/src/gui/CMakeLists.txt +++ b/src/gui/CMakeLists.txt @@ -151,8 +151,6 @@ set(client_SRCS systray.cpp EncryptionTokenSelectionWindow.qml buttonstyle.h - thumbnailjob.h - thumbnailjob.cpp userinfo.h userinfo.cpp vfsdownloaderrordialog.h diff --git a/src/gui/tray/usermodel.cpp b/src/gui/tray/usermodel.cpp index d367825534289..b5e93ab72efcb 100644 --- a/src/gui/tray/usermodel.cpp +++ b/src/gui/tray/usermodel.cpp @@ -18,7 +18,6 @@ #include "tray/unifiedsearchresultslistmodel.h" #include "tray/talkreply.h" #include "userstatusconnector.h" -#include "thumbnailjob.h" #include "buttonstyle.h" #include From f09630222b94f54f20bc3fb058460623ba250e9f Mon Sep 17 00:00:00 2001 From: Emil Bohleber Date: Mon, 3 Mar 2025 18:32:10 +0100 Subject: [PATCH 153/371] SES-209 fix wrong rename --- src/gui/folderwizard.cpp | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/gui/folderwizard.cpp b/src/gui/folderwizard.cpp index c3a92e12d2161..fc873f9bf4b59 100644 --- a/src/gui/folderwizard.cpp +++ b/src/gui/folderwizard.cpp @@ -67,11 +67,11 @@ QString FormatWarningsWizardPage::formatWarnings(const QStringList &warnings) co { QString formattedWarning; if (warnings.count() == 1) { - ret = QString("%1").arg(warnings.first()); + formattedWarning = QString("%1").arg(warnings.first()); } else if (warnings.count() > 1) { - ret = "
          "; + formattedWarning = "
            "; Q_FOREACH (QString warning, warnings) { - ret += QString::fromLatin1("
          • %1
          • ").arg(warning); + formattedWarning += QString::fromLatin1("
          • %1
          • ").arg(warning); } formattedWarning += "
          "; } From 8823115b9a17189ee70d5dd0d788438de3563e97 Mon Sep 17 00:00:00 2001 From: Emil Bohleber Date: Mon, 3 Mar 2025 18:32:30 +0100 Subject: [PATCH 154/371] SES-209 remove not needed feature --- src/gui/generalsettings.cpp | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/gui/generalsettings.cpp b/src/gui/generalsettings.cpp index 336d3006ad89a..139ff844bdd02 100644 --- a/src/gui/generalsettings.cpp +++ b/src/gui/generalsettings.cpp @@ -811,8 +811,9 @@ void GeneralSettings::updatePollIntervalVisibility() } return accountPtr->capabilities().availablePushNotifications().testFlag(PushNotificationType::Files); }); - +#ifndef IONOS_BUILD _ui->horizontalLayoutWidget_remotePollInterval->setVisible(!pushAvailable); +#endif } } // namespace OCC From 3024d6a5999f8ae2f7cb14b7f2b65ae1d912722c Mon Sep 17 00:00:00 2001 From: Emil Bohleber Date: Fri, 7 Mar 2025 12:48:04 +0100 Subject: [PATCH 155/371] SES-286 some more translations modifications --- src/gui/folder.cpp | 4 ++-- src/gui/folderwizard.cpp | 2 +- src/gui/sslbutton.cpp | 2 +- 3 files changed, 4 insertions(+), 4 deletions(-) diff --git a/src/gui/folder.cpp b/src/gui/folder.cpp index 39d38af2ef760..06703b4013fbb 100644 --- a/src/gui/folder.cpp +++ b/src/gui/folder.cpp @@ -1408,9 +1408,9 @@ void Folder::slotNewBigFolderDiscovered(const QString &newF, bool isExternal) journal->setSelectiveSyncList(SyncJournalDb::SelectiveSyncUndecidedList, undecidedList); emit newBigFolderDiscovered(newFolder); } - QString message = !isExternal ? (tr("A new folder larger than %1 MB has been added: %2.") + QString message = !isExternal ? (tr("A new folder larger than %1 MB has been added: %2.") + "\n" .arg(ConfigFile().newBigFolderSizeLimit().second) - .arg(newF) + "\n") + .arg(newF)) : (tr("A folder from an external storage has been added.") + "\n"); message += tr("Please go in the settings to select it if you wish to download it."); diff --git a/src/gui/folderwizard.cpp b/src/gui/folderwizard.cpp index fc873f9bf4b59..6a82b14b3b29a 100644 --- a/src/gui/folderwizard.cpp +++ b/src/gui/folderwizard.cpp @@ -70,7 +70,7 @@ QString FormatWarningsWizardPage::formatWarnings(const QStringList &warnings) co formattedWarning = QString("%1").arg(warnings.first()); } else if (warnings.count() > 1) { formattedWarning = "
            "; - Q_FOREACH (QString warning, warnings) { + for (const auto &warning : warnings) { formattedWarning += QString::fromLatin1("
          • %1
          • ").arg(warning); } formattedWarning += "
          "; diff --git a/src/gui/sslbutton.cpp b/src/gui/sslbutton.cpp index 859002c014228..0942cc5a13dbb 100644 --- a/src/gui/sslbutton.cpp +++ b/src/gui/sslbutton.cpp @@ -171,7 +171,7 @@ void SslButton::updateAccountState(AccountState *accountState) if (account->url().scheme() == QLatin1String("https")) { setIcon(QIcon(QLatin1String(":/client/theme/lock-https.svg"))); QSslCipher cipher = account->_sessionCipher; - setToolTip(QString(tr("This connection is encrypted using %1 bit %2.") + "\n").arg(cipher.usedBits()).arg(cipher.name())); + setToolTip((tr("This connection is encrypted using %1 bit %2.") + "\n").arg(cipher.usedBits()).arg(cipher.name())); } else { setIcon(QIcon(QLatin1String(":/client/theme/lock-broken.svg"))); setToolTip(tr("This connection is NOT secure as it is not encrypted.") + "\n"); From c713cc4bf1d047d60294e8d3144c41a1b0eabf92 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Christopher=20H=C3=A4tty?= Date: Fri, 28 Feb 2025 14:45:12 +0100 Subject: [PATCH 156/371] SES-286 added diff files and merge script --- translation_scripts/de_DE.ts | 614 ++++++++++++++++++++++ translation_scripts/en.ts | 614 ++++++++++++++++++++++ translation_scripts/en_GB.ts | 614 ++++++++++++++++++++++ translation_scripts/es.ts | 615 +++++++++++++++++++++++ translation_scripts/fr.ts | 615 +++++++++++++++++++++++ translation_scripts/merge_translation.py | 350 +++++++++++++ translation_scripts/nl.ts | 614 ++++++++++++++++++++++ translation_scripts/sort.py | 145 ++++++ 8 files changed, 4181 insertions(+) create mode 100644 translation_scripts/de_DE.ts create mode 100644 translation_scripts/en.ts create mode 100644 translation_scripts/en_GB.ts create mode 100644 translation_scripts/es.ts create mode 100644 translation_scripts/fr.ts create mode 100644 translation_scripts/merge_translation.py create mode 100644 translation_scripts/nl.ts create mode 100644 translation_scripts/sort.py diff --git a/translation_scripts/de_DE.ts b/translation_scripts/de_DE.ts new file mode 100644 index 0000000000000..bab6f711f3b27 --- /dev/null +++ b/translation_scripts/de_DE.ts @@ -0,0 +1,614 @@ + + + + BasicComboBox + + Clear status message menu + Statusmeldungs-Menü löschen + + + + CallNotificationDialog + + Answer Talk call notification + Benachrichtigung zu Talk-Anruf beantworten + + + Decline Talk call notification + Benachrichtigung zu Talk-Anruf ablehnen + + + Talk notification caller avatar + Avatar zu Benachrichtigung über Talk-Anrufer + + + + CloudProviderWrapper + + Quit sync client + Leading Space in Translation geändert + Sync-Client beenden + + + + ConflictDelegate + + Local version + Lokale Version + + + Server version + Serverversion + + + + FileProviderFastEnumerationSettings + + Fast sync will only sync changes in files and folders within folders that have been explored. This can significantly increase responsiveness on initial configuration of virtual files. However, it will cause redundant downloads of files moved to an unexplored folder. + Trailing Space in Translation + Bei der schnellen Synchronisierung werden nur Änderungen an Dateien und Ordnern innerhalb der Ordner synchronisiert, die bereits untersucht wurden. Dies kann die Reaktionsfähigkeit bei der Ersteinrichtung virtueller Dateien erheblich erhöhen. Allerdings führt dies zu redundanten Downloads von Dateien, die in einen noch nicht erfassten Ordner verschoben wurden. + + + + FileProviderFileDelegate + + Delete + Löschen + + + + FileProviderSettings + + Signal file provider domain + Translated by us + Domain des Signaldateianbieters + + + + FileProviderStorageInfo + + Evict local copies... + Lokale Kopien entfernen... + + + + FileProviderSyncStatus + + All synced! + Alles synchronisiert! + + + + FolderWizardSelectiveSync + + Add Folder Sync + Added by us + Ordner Sync hinzufügen + + + Step 3 of 3: Selektive Synchronisation + Added by us + Schritt 3 von 3: Selektive Synchronisierung + + + + FolderWizardSourcePage + + &Choose + Added by us + &Wählen + + + Select a folder on your hard drive that should be permanetly connected to your %1. All files and subfolders are automatically uploaded and synchronized + Added by us + Wählen Sie einen Ordner auf Ihrer Festplatte, der dauerhaft mit Ihrem %1 verbunden sein soll. Alle Dateien und Unterordner werden automatisch hochgeladen und synchronisiert. + + + Step 1 of 3: Select local folder + Added by us + Schritt 1 von 3: Lokalen Ordner auswählen + + + + FolderWizardTargetPage + + Both folders are permanently linked and the respective contents are automatically synchronized and updated. + Added by us + Beide Ordner sind dauerhaft miteinander verknüpft und die jeweiligen Inhalte werden automatisch synchronisiert und aktualisiert. + + + Create folder + Removed trailing space in translation + Ordner erstellen + + + Please now select or create a target folder in your %1 where the content should be uploaded and synchronized. + Added by us + Bitte wählen oder erstellen Sie nun einen Zielordner in Ihrem %1, in den der Inhalt hochgeladen und synchronisiert werden soll. + + + Step 2 of 3: Directory in your %1 + Added by us + Schritt 2 von 3: Verzeichnis in Ihrem %1 + + + + OCC::AccountManager + + %1 accounts were detected from a legacy desktop client. +Should the accounts be imported? + %1 Konten wurden von einem älteren Desktop-Client erkannt. + Sollen die Konten importiert werden? + + + + OCC::AccountSettings + + %1 (%3%) of %2 in use. Some folders, including network mounted or shared folders, might have different limits. + Trailing Space in Translation + %1 (%3%) von %2 Serverkapazität verwendet. Einige Ordner, einschließlich über das Netzwerk verbundene oder geteilte Ordner, können unterschiedliche Beschränkungen aufweisen. + + + Expand Memory + Added by us + Speicher erweitern + + + Force sync now + Trailing Space in Translation + Synchronisierung jetzt erzwingen + + + Storage space %1% occupied + Added by us + Speicherplatz %1% belegt + + + There are folders that were not synchronized because they are external storages: + Trailing Space in Source + Es gibt Ordner, die nicht synchronisiert werden konnten, da sie externe Speicher sind: + + + There are folders that were not synchronized because they are too big or external storages: + Trailing Space in Source + Es gibt Ordner, die nicht synchronisiert werden konnten, da sie zu groß oder externe Speicher sind: + + + There are folders that were not synchronized because they are too big: + Trailing Space in Source + Einige Ordner konnten nicht synchronisiert werden, da sie zu groß sind: + + + This will encrypt your folder and all files within it. These files will no longer be accessible without your encryption mnemonic key. +<b>This process is not reversible. Are you sure you want to proceed?</b> + Modifed by us + Dadurch werden Ihr Ordner und alle darin enthaltenen Dateien verschlüsselt. Auf diese Dateien kann ohne Ihren mnemonischen Verschlüsselungsschlüssel nicht mehr zugegriffen werden. +<b>Dies kann nicht rückgängig gemacht werden. Sind Sie sicher, dass Sie fortfahren möchten?</b> + + + To protect your Cryptographic Identity, we encrypt it with a mnemonic of 12 dictionary words. Please note these down and keep them safe. They will be needed to add other devices to your account (like your mobile phone or laptop). + Trailing Space in Translation + Um Ihre kryptografische Identität zu schützen, verschlüsseln wir sie mit einer Gedächtnisstütze von 12 Wörterbuchwörtern. Bitte notieren Sie sich diese und bewahren Sie sie auf. Sie werden benötigt, um Ihrem Konto weitere Geräte hinzuzufügen (z. B. Ihr Mobiltelefon oder Laptop). + + + https://wl.hidrive.com/easy/0057 + Added by us + https://wl.hidrive.com/easy/0067 + + + + OCC::CaseClashFilenameDialog + + Existing file + modifed by us french + Vorhandene Datei + + + The file could not be synced because it generates a case clash conflict with an existing file on this system. + modifed by us french + Die Datei konnte nicht synchronisiert werden, da diese einen Konflikt bezüglich Groß- und Kleinschreibung mit einer vorhandenen Datei auf diesem System erzeugt. + + + + OCC::DiscoverySingleDirectoryJob + + Encrypted metadata setup error! + added by us french + Einrichtungsfehler für verschlüsselte Metadaten! + + + Encrypted metadata setup error: initial signature from server is empty. + Translated by us + Fehler bei der Einrichtung der verschlüsselten Metadaten: Die ursprüngliche Signatur vom Server ist leer. + + + + OCC::Flow2AuthWidget + + Open Browser + Added by us + Im Browser öffnen + + + + OCC::Folder + + A folder from an external storage has been added. + Removed trailing linebreak + Ein Ordner von einem externen Speicher wurde hinzugefügt. + + + A large number of files in the server have been deleted. +Please confirm if you'd like to proceed with these deletions. +Alternatively, you can restore all deleted files by uploading from '%1' folder to the server. + Translated by us + Eine große Anzahl von Dateien wurde auf dem Server gelöscht. +Bitte bestätigen Sie, ob Sie mit diesen Löschungen fortfahren möchten. +Alternativ können Sie alle gelöschten Dateien wiederherstellen, indem Sie sie aus dem Ordner "%1" auf den Server hochladen. + + + A large number of files in your local '%1' folder have been deleted. +Please confirm if you'd like to proceed with these deletions. +Alternatively, you can restore all deleted files by downloading them from the server. + Translated by us + Eine große Anzahl von Dateien in Ihrem lokalen Ordner "%1" wurde gelöscht. +Bitte bestätigen Sie, ob Sie mit diesen Löschungen fortfahren möchten. +Alternativ können Sie alle gelöschten Dateien wiederherstellen, indem Sie sie vom Server herunterladen. + + + A new folder larger than %1 MB has been added: %2. + Removed trailing linebreak + Ein neuer Ordner größer als %1 MB wurde hinzugefügt: %2. + + + Proceed with Deletion + Translated by us + Mit der Löschung fortfahren + + + Remove all files? + Translated by us + Alle Dateien entfernen? + + + Restore Files from Server + Translated by us + Dateien vom Server wiederherstellen + + + Restore Files to Server + Translated by us + Dateien auf dem Server wiederherstellen + + + + OCC::FolderCreationDialog + + %1 Create new folder + Added by us + %1 Neuen Ordner erstellen + + + + OCC::FolderMan + + (backup %1) + Removed leading space + (Sicherung %1) + + + (backup) + Removed leading space + (Sicherung) + + + + OCC::FolderStatusDelegate + + Synchronize any other local folder with your %1 + Added by us + Synchronisieren Sie jeden anderen lokalen Ordner mit Ihrem %1 + + + + OCC::FolderWizardLocalPath + + Choose + Added by us + Wählen Sie + + + + OCC::FolderWizardRemotePath + + Enter the name of the new folder to be created below "%1": + Removed trailing space + Geben Sie den Namen des neuen, unter "%1" zu erstellenden Ordners ein: + + + + OCC::FolderWizardSelectiveSync + + Use virtual files instead of downloading content immediately %1 + Virtuelle Dateien verwenden, anstatt den Inhalt sofort herunterzuladen %1 + + + + OCC::GeneralSettings + + &Analysis data collection for needs-based design + Added by us + &Analyse der Datenerhebung für bedarfsgerechte Gestaltung + + + Ask for confirmation before synchronizing external storages + Has to be repaired in code + Bestätigung erfragen, bevor externe Speicher synchronisiert werden + + + Ask for confirmation before synchronizing new folders larger than + Has to be repaired in code + Um eine Bestätigung bitten, bevor Sie neue Ordner synchronisieren, die größer sind als + + + Automatically disable synchronisation of folders that overcome limit + Has to be repaired in code + Automatisch die Synchronisierung von Ordnern beenden, die das Limit überschreiten + + + Data Protection + Added by us + Datenschutzbestimmungen + + + More Information + Added by us + Mehr Informationen + + + Open Source Software + Added by us + Open-Source-Software + + + Privacy Policy + Added by us + Datenschutzerklärung + + + Show sync folders in &Explorer's navigation pane + Synchronisierungsordner im Navigationsbereich des &Explorers anzeigen + + + Updates + Still used by us + Aktualisierungen + + + https://wl.hidrive.com/easy/0004 + https://wl.hidrive.com/easy/0004 + + + https://wl.hidrive.com/easy/0005 + https://wl.hidrive.com/easy/0005 + + + https://wl.hidrive.com/easy/0006 + https://wl.hidrive.com/easy/0006 + + + https://wl.hidrive.com/easy/0007 + https://wl.hidrive.com/easy/0007 + + + + OCC::IgnoreListTableWidget + + Add a new ignore pattern: + modifed by us spanish + Neues Ignoriermuster hinzufügen + + + Files or folders matching a pattern will not be synchronized. + +Items where deletion is allowed will be deleted if they prevent a directory from being removed. This is useful for meta data. + Modifed by us spanish + Dateien oder Ordner, die diesem Muster entsprechen, werden nicht synchronisiert. + +Objekte, die gelöscht werden dürfen, werden gelöscht, wenn sie das Löschen eines Ordners verhindern würden. Dies ist nützlich für Metadaten. + + + Ignore Pattern + Added by us + Muster ignorieren + + + + OCC::NetworkSettings + + No proxy + Kein Proxy + + + + OCC::PropagateLocalMkdir + + Could not create folder %1 + Trailing space in translation removed + Ordner %1 konnte nicht erstellt werden + + + + OCC::PropagateLocalRename + + Folder %1 cannot be renamed because of a local file or folder name clash! + Translated by us + Ordner %1 kann nicht umbenannt werden, da ein Konflikt zwischen lokalen Datei- oder Ordnernamen besteht! + + + + OCC::PropagateUploadFileCommon + + Upload of %1 exceeds the quota for the folder + Trailing space in translation removed + Das Hochladen von %1 überschreitet das Speicherkontingent des Ordners + + + + OCC::sesSnackBar + + Success + Added by us + Erfolg + + + + OCC::SettingsDialog + + New account + Added by us + Neues Konto + + + + OCC::SslButton + + This connection is NOT secure as it is not encrypted. + Removed trailing linebreak + Diese Verbindung ist NICHT sicher, da diese nicht verschlüsselt ist. + + + This connection is encrypted using %1 bit %2. + Removed trailing linebreak + Diese Verbindung ist verschlüsselt mit %1 Bit %2. + + + + OCC::Theme + + easy/0118 + Added by us + easy/0108 + + + + OCC::UpdateE2eeFolderMetadataJob + + Failed to finalize item. + Modifed by us + Fehler beim Fertigstellen des Elements. + + + Failed to unlock encrypted folder. + Modifed by us + Verschlüsselter Ordner konnte nicht entsperrt werden. + + + + OCC::UpdateE2eeFolderUsersMetadataJob + + Could not add or remove user %1 to access folder %2 + Translated by us + Benutzer %1 konnte nicht zum Zugriffsordner %2 hinzugefügt oder entfernt werden + + + + OCC::User + + %1 notifications + Translated by us + %1 Benachrichtigungen + + + + OCC::WebFlowCredentials + + <b>You have been logged out of your account %1 at %2. Please login again.</b> + Modifed by us + <b>Sie wurden von Ihrem Konto %1 bei %2 abgemeldet. Bitte melden Sie sich erneut an.</b> + + + + OwncloudAdvancedSetupPage + + <html><head/><body><p>If this box is checked, existing content in the local folder will be erased to start a clean sync from the server.</p><p>Do not check this if the local content should be uploaded to the servers folder.</p></body></html> + Modifed by us + <html><head/><body><p>Wenn diese Option gesetzt ist, werden bestehende Inhalte im lokalen Ordner gelöscht, um eine saubere Synchronisierung nur der Serverdaten zu ermöglichen.</p><p>Wählen Sie diese Option nicht, wenn die lokalen Inhalte auf den Server übertragen werden sollen.</p></body></html> + + + + progress + + Updated local virtual files metadata + Translated by us + Aktualisierte Metadaten für lokale virtuelle Dateien + + + updating local virtual files metadata + Translated by us + Aktualisierung der Metadaten lokaler virtueller Dateien + + + + QObject + + Could not create debug archive in selected location! + Translated by us + Es konnte kein Debug-Archiv am ausgewählten Ort erstellt werden! + + + Failed to create debug archive + Translated by us + Fehler beim Erstellen des Debug-Archivs + + + The directory %1 cannot be part of your sync directory. Please choose another folder. + Added by us + Das Verzeichnis %1 kann nicht Teil Ihres Synchronisationsverzeichnisses sein. Bitte wählen Sie einen anderen Ordner. + + + + SesTrayHeader + + Open Nextcloud in browser + Added by us + HiDrive Next im Browser öffnen + + + Website + Added by us + Website + + + + ShareDetailsPage + + Copy share link + modifed by us + Freigabe-Link kopieren + + + Custom Permissions + Added by us + Benutzerdefinierte Berechtigungen + + + Enter the note to recipient + Added by us + Geben Sie eine Notiz an den Empfänger ein + + + Share link copied! + modifed by us + Freigabelink kopiert! + + + + TrayFoldersMenuButton + + Files + Added by us + Dateien + + + \ No newline at end of file diff --git a/translation_scripts/en.ts b/translation_scripts/en.ts new file mode 100644 index 0000000000000..fb73efe9de199 --- /dev/null +++ b/translation_scripts/en.ts @@ -0,0 +1,614 @@ + + + + BasicComboBox + + Clear status message menu + Delete status message menu + + + + CallNotificationDialog + + Answer Talk call notification + Answer Talk call notification + + + Decline Talk call notification + Decline Talk call notification + + + Talk notification caller avatar + Talk notification caller avatar + + + + CloudProviderWrapper + + Quit sync client + Leading Space in Translation geändert + Quit sync client + + + + ConflictDelegate + + Local version + Local version + + + Server version + Server version + + + + FileProviderFastEnumerationSettings + + Fast sync will only sync changes in files and folders within folders that have been explored. This can significantly increase responsiveness on initial configuration of virtual files. However, it will cause redundant downloads of files moved to an unexplored folder. + Trailing Space in Translation + Fast sync will only sync changes in files and folders within folders that have been explored. This can significantly increase responsiveness on initial configuration of virtual files. However, it will cause redundant downloads of files moved to an unexplored folder. + + + + FileProviderFileDelegate + + Delete + Delete + + + + FileProviderSettings + + Signal file provider domain + Translated by us + Signal file provider domain + + + + FileProviderStorageInfo + + Evict local copies... + Evict local copies... + + + + FileProviderSyncStatus + + All synced! + All synced! + + + + FolderWizardSelectiveSync + + Add Folder Sync + Added by us + Add Folder Sync + + + Step 3 of 3: Selektive Synchronisation + Added by us + Step 3 of 3: Selektive Synchronisation + + + + FolderWizardSourcePage + + &Choose + Added by us + &Choose + + + Select a folder on your hard drive that should be permanetly connected to your %1. All files and subfolders are automatically uploaded and synchronized + Added by us + Select a folder on your hard drive that should be permanetly connected to your %1. All files and subfolders are automatically uploaded and synchronized. + + + Step 1 of 3: Select local folder + Added by us + Step 1 of 3: Select local folder + + + + FolderWizardTargetPage + + Both folders are permanently linked and the respective contents are automatically synchronized and updated. + Added by us + Both folders are permanently linked and the respective contents are automatically synchronized and updated. + + + Create folder + Removed trailing space in translation + Create folder + + + Please now select or create a target folder in your %1 where the content should be uploaded and synchronized. + Added by us + Please now select or create a target folder in your %1 where the content should be uploaded and synchronized. + + + Step 2 of 3: Directory in your %1 + Added by us + Step 2 of 3: Directory in your %1 + + + + OCC::AccountManager + + %1 accounts were detected from a legacy desktop client. +Should the accounts be imported? + %1 accounts were detected from a legacy desktop client. +Should the accounts be imported? + + + + OCC::AccountSettings + + %1 (%3%) of %2 in use. Some folders, including network mounted or shared folders, might have different limits. + Trailing Space in Translation + %1 (%3%) of %2 in use. Some folders, including network mounted or shared folders, might have different limits. + + + Expand Memory + Added by us + Expand Memory + + + Force sync now + Trailing Space in Translation + Force sync now + + + Storage space %1% occupied + Added by us + Storage space %1% occupied + + + There are folders that were not synchronized because they are external storages: + Trailing Space in Source + There are folders that were not synchronised because they are external storages: + + + There are folders that were not synchronized because they are too big or external storages: + Trailing Space in Source + There are folders that were not synchronised because they are too big or external storages: + + + There are folders that were not synchronized because they are too big: + Trailing Space in Source + There are folders that were not synchronised because they are too big: + + + This will encrypt your folder and all files within it. These files will no longer be accessible without your encryption mnemonic key. +<b>This process is not reversible. Are you sure you want to proceed?</b> + Modifed by us + This will encrypt your folder and all files within it. These files will no longer be accessible without your encryption mnemonic key. +<b>This process is not reversible. Are you sure you want to proceed?</b> + + + To protect your Cryptographic Identity, we encrypt it with a mnemonic of 12 dictionary words. Please note these down and keep them safe. They will be needed to add other devices to your account (like your mobile phone or laptop). + Trailing Space in Translation + To protect your Cryptographic Identity, we encrypt it with a mnemonic of 12 dictionary words. Please note these down and keep them safe. They will be needed to add other devices to your account (like your mobile phone or laptop). + + + https://wl.hidrive.com/easy/0057 + Added by us + https://wl.hidrive.com/easy/0077 + + + + OCC::CaseClashFilenameDialog + + Existing file + modifed by us french + Existing file + + + The file could not be synced because it generates a case clash conflict with an existing file on this system. + modifed by us french + The file could not be synced because it generates a case clash conflict with an existing file on this system. + + + + OCC::DiscoverySingleDirectoryJob + + Encrypted metadata setup error! + added by us french + Encrypted metadata setup error! + + + Encrypted metadata setup error: initial signature from server is empty. + Translated by us + Encrypted metadata setup error: initial signature from server is empty. + + + + OCC::Flow2AuthWidget + + Open Browser + Added by us + Open Browser + + + + OCC::Folder + + A folder from an external storage has been added. + Removed trailing linebreak + A folder from an external storage has been added. + + + A large number of files in the server have been deleted. +Please confirm if you'd like to proceed with these deletions. +Alternatively, you can restore all deleted files by uploading from '%1' folder to the server. + Translated by us + Eine große Anzahl von Dateien wurde auf dem Server gelöscht. +Bitte bestätigen Sie, ob Sie mit diesen Löschungen fortfahren möchten. +Alternativ können Sie alle gelöschten Dateien wiederherstellen, indem Sie sie aus dem Ordner "%1" auf den Server hochladen. + + + A large number of files in your local '%1' folder have been deleted. +Please confirm if you'd like to proceed with these deletions. +Alternatively, you can restore all deleted files by downloading them from the server. + Translated by us + Eine große Anzahl von Dateien in Ihrem lokalen Ordner "%1" wurde gelöscht. +Bitte bestätigen Sie, ob Sie mit diesen Löschungen fortfahren möchten. +Alternativ können Sie alle gelöschten Dateien wiederherstellen, indem Sie sie vom Server herunterladen. + + + A new folder larger than %1 MB has been added: %2. + Removed trailing linebreak + A new folder larger than %1 MB has been added: %2. + + + Proceed with Deletion + Translated by us + Proceed with deletion + + + Remove all files? + Translated by us + Remove all files? + + + Restore Files from Server + Translated by us + Restore files from server + + + Restore Files to Server + Translated by us + Restore files to server + + + + OCC::FolderCreationDialog + + %1 Create new folder + Added by us + %1 Create new folder + + + + OCC::FolderMan + + (backup %1) + Removed leading space + (backup %1) + + + (backup) + Removed leading space + (backup) + + + + OCC::FolderStatusDelegate + + Synchronize any other local folder with your %1 + Added by us + Synchronize any other local folder with your %1 + + + + OCC::FolderWizardLocalPath + + Choose + Added by us + Choose + + + + OCC::FolderWizardRemotePath + + Enter the name of the new folder to be created below "%1": + Removed trailing space + Enter the name of the new folder to be created below "%1": + + + + OCC::FolderWizardSelectiveSync + + Use virtual files instead of downloading content immediately %1 + Use virtual files instead of downloading content immediately %1 + + + + OCC::GeneralSettings + + &Analysis data collection for needs-based design + Added by us + &Analysis data collection for needs-based design + + + Ask for confirmation before synchronizing external storages + Has to be repaired in code + Ask for confirmation before synchronizing external storages + + + Ask for confirmation before synchronizing new folders larger than + Has to be repaired in code + Ask for confirmation before synchronizing new folders larger than + + + Automatically disable synchronisation of folders that overcome limit + Has to be repaired in code + Automatically disable synchronisation of folders that overcome limit + + + Data Protection + Added by us + Data Protection + + + More Information + Added by us + More Information + + + Open Source Software + Added by us + Open Source Software + + + Privacy Policy + Added by us + Privacy Policy + + + Show sync folders in &Explorer's navigation pane + Show sync folders in &Explorer's navigation pane + + + Updates + Still used by us + Updates + + + https://wl.hidrive.com/easy/0004 + https://wl.hidrive.com/easy/0004 + + + https://wl.hidrive.com/easy/0005 + https://wl.hidrive.com/easy/0005 + + + https://wl.hidrive.com/easy/0006 + https://wl.hidrive.com/easy/0006 + + + https://wl.hidrive.com/easy/0007 + https://wl.hidrive.com/easy/0007 + + + + OCC::IgnoreListTableWidget + + Add a new ignore pattern: + modifed by us spanish + Add a new ignore pattern: + + + Files or folders matching a pattern will not be synchronized. + +Items where deletion is allowed will be deleted if they prevent a directory from being removed. This is useful for meta data. + Modifed by us spanish + Files or folders matching a pattern will not be synchronized. + +Items where deletion is allowed will be deleted if they prevent a directory from being removed. This is useful for meta data. + + + Ignore Pattern + Added by us + Ignore Pattern + + + + OCC::NetworkSettings + + No proxy + No proxy + + + + OCC::PropagateLocalMkdir + + Could not create folder %1 + Trailing space in translation removed + Could not create folder %1 + + + + OCC::PropagateLocalRename + + Folder %1 cannot be renamed because of a local file or folder name clash! + Translated by us + Folder %1 cannot be renamed because of a local file or folder name clash! + + + + OCC::PropagateUploadFileCommon + + Upload of %1 exceeds the quota for the folder + Trailing space in translation removed + Upload of %1 exceeds the quota for the folder + + + + OCC::sesSnackBar + + Success + Added by us + Success + + + + OCC::SettingsDialog + + New account + Added by us + New Account + + + + OCC::SslButton + + This connection is NOT secure as it is not encrypted. + Removed trailing linebreak + This connection is NOT secure as it is not encrypted. + + + This connection is encrypted using %1 bit %2. + Removed trailing linebreak + This connection is encrypted using %1 bit %2. + + + + OCC::Theme + + easy/0118 + Added by us + + + + + OCC::UpdateE2eeFolderMetadataJob + + Failed to finalize item. + Modifed by us + Failed to finalize item. + + + Failed to unlock encrypted folder. + Modifed by us + Failed to unlock encrypted folder. + + + + OCC::UpdateE2eeFolderUsersMetadataJob + + Could not add or remove user %1 to access folder %2 + Translated by us + Could not add or remove user %1 to access folder %2 + + + + OCC::User + + %1 notifications + Translated by us + %1 notifications + + + + OCC::WebFlowCredentials + + <b>You have been logged out of your account %1 at %2. Please login again.</b> + Modifed by us + <b>You have been logged out of your account %1 at %2. Please login again.</b> + + + + OwncloudAdvancedSetupPage + + <html><head/><body><p>If this box is checked, existing content in the local folder will be erased to start a clean sync from the server.</p><p>Do not check this if the local content should be uploaded to the servers folder.</p></body></html> + Modifed by us + <html><head/><body><p>If this box is checked, existing content in the local folder will be erased to start a clean sync from the server.</p><p>Do not check this if the local content should be uploaded to the servers folder.</p></body></html> + + + + progress + + Updated local virtual files metadata + Translated by us + Updated local virtual files metadata + + + updating local virtual files metadata + Translated by us + Updating local virtual files metadata + + + + QObject + + Could not create debug archive in selected location! + Translated by us + Could not create debug archive in selected location! + + + Failed to create debug archive + Translated by us + Failed to create debug archive + + + The directory %1 cannot be part of your sync directory. Please choose another folder. + Added by us + The directory %1 cannot be part of your sync directory. Please choose another folder. + + + + SesTrayHeader + + Open Nextcloud in browser + Added by us + Open HiDrive Next in browser + + + Website + Added by us + Website + + + + ShareDetailsPage + + Copy share link + modifed by us + Copy share link + + + Custom Permissions + Added by us + Custom Permissions + + + Enter the note to recipient + Added by us + Enter the note to recipient + + + Share link copied! + modifed by us + Share link copied! + + + + TrayFoldersMenuButton + + Files + Added by us + Files + + + \ No newline at end of file diff --git a/translation_scripts/en_GB.ts b/translation_scripts/en_GB.ts new file mode 100644 index 0000000000000..ad55de9624e0d --- /dev/null +++ b/translation_scripts/en_GB.ts @@ -0,0 +1,614 @@ + + + + BasicComboBox + + Clear status message menu + Delete status message menu + + + + CallNotificationDialog + + Answer Talk call notification + Answer Talk call notification + + + Decline Talk call notification + Decline Talk call notification + + + Talk notification caller avatar + Talk notification caller avatar + + + + CloudProviderWrapper + + Quit sync client + Leading Space in Translation geändert + Quit sync client + + + + ConflictDelegate + + Local version + Local version + + + Server version + Server version + + + + FileProviderFastEnumerationSettings + + Fast sync will only sync changes in files and folders within folders that have been explored. This can significantly increase responsiveness on initial configuration of virtual files. However, it will cause redundant downloads of files moved to an unexplored folder. + Trailing Space in Translation + Fast sync will only sync changes in files and folders within folders that have been explored. This can significantly increase responsiveness on initial configuration of virtual files. However, it will cause redundant downloads of files moved to an unexplored folder. + + + + FileProviderFileDelegate + + Delete + Delete + + + + FileProviderSettings + + Signal file provider domain + Translated by us + Signal file provider domain + + + + FileProviderStorageInfo + + Evict local copies... + Evict local copies... + + + + FileProviderSyncStatus + + All synced! + All synced! + + + + FolderWizardSelectiveSync + + Add Folder Sync + Added by us + + + + Step 3 of 3: Selektive Synchronisation + Added by us + + + + + FolderWizardSourcePage + + &Choose + Added by us + + + + Select a folder on your hard drive that should be permanetly connected to your %1. All files and subfolders are automatically uploaded and synchronized + Added by us + + + + Step 1 of 3: Select local folder + Added by us + + + + + FolderWizardTargetPage + + Both folders are permanently linked and the respective contents are automatically synchronized and updated. + Added by us + + + + Create folder + Removed trailing space in translation + Create folder + + + Please now select or create a target folder in your %1 where the content should be uploaded and synchronized. + Added by us + + + + Step 2 of 3: Directory in your %1 + Added by us + + + + + OCC::AccountManager + + %1 accounts were detected from a legacy desktop client. +Should the accounts be imported? + %1 accounts were detected from a legacy desktop client. +Should the accounts be imported? + + + + OCC::AccountSettings + + %1 (%3%) of %2 in use. Some folders, including network mounted or shared folders, might have different limits. + Trailing Space in Translation + %1 (%3%) of %2 in use. Some folders, including network mounted or shared folders, might have different limits. + + + Expand Memory + Added by us + + + + Force sync now + Trailing Space in Translation + Force sync now + + + Storage space %1% occupied + Added by us + + + + There are folders that were not synchronized because they are external storages: + Trailing Space in Source + There are folders that were not synchronised because they are external storages: + + + There are folders that were not synchronized because they are too big or external storages: + Trailing Space in Source + There are folders that were not synchronised because they are too big or external storages: + + + There are folders that were not synchronized because they are too big: + Trailing Space in Source + There are folders that were not synchronised because they are too big: + + + This will encrypt your folder and all files within it. These files will no longer be accessible without your encryption mnemonic key. +<b>This process is not reversible. Are you sure you want to proceed?</b> + Modifed by us + This will encrypt your folder and all files within it. These files will no longer be accessible without your encryption mnemonic key. +<b>This process is not reversible. Are you sure you want to proceed?</b> + + + To protect your Cryptographic Identity, we encrypt it with a mnemonic of 12 dictionary words. Please note these down and keep them safe. They will be needed to add other devices to your account (like your mobile phone or laptop). + Trailing Space in Translation + To protect your Cryptographic Identity, we encrypt it with a mnemonic of 12 dictionary words. Please note these down and keep them safe. They will be needed to add other devices to your account (like your mobile phone or laptop). + + + https://wl.hidrive.com/easy/0057 + Added by us + https://wl.hidrive.com/easy/0057 + + + + OCC::CaseClashFilenameDialog + + Existing file + modifed by us french + Existing file + + + The file could not be synced because it generates a case clash conflict with an existing file on this system. + modifed by us french + The file could not be synced because it generates a case clash conflict with an existing file on this system. + + + + OCC::DiscoverySingleDirectoryJob + + Encrypted metadata setup error! + added by us french + Encrypted metadata setup error! + + + Encrypted metadata setup error: initial signature from server is empty. + Translated by us + + + + + OCC::Flow2AuthWidget + + Open Browser + Added by us + + + + + OCC::Folder + + A folder from an external storage has been added. + Removed trailing linebreak + A folder from an external storage has been added. + + + A large number of files in the server have been deleted. +Please confirm if you'd like to proceed with these deletions. +Alternatively, you can restore all deleted files by uploading from '%1' folder to the server. + Translated by us + Eine große Anzahl von Dateien wurde auf dem Server gelöscht. +Bitte bestätigen Sie, ob Sie mit diesen Löschungen fortfahren möchten. +Alternativ können Sie alle gelöschten Dateien wiederherstellen, indem Sie sie aus dem Ordner "%1" auf den Server hochladen. + + + A large number of files in your local '%1' folder have been deleted. +Please confirm if you'd like to proceed with these deletions. +Alternatively, you can restore all deleted files by downloading them from the server. + Translated by us + Eine große Anzahl von Dateien in Ihrem lokalen Ordner "%1" wurde gelöscht. +Bitte bestätigen Sie, ob Sie mit diesen Löschungen fortfahren möchten. +Alternativ können Sie alle gelöschten Dateien wiederherstellen, indem Sie sie vom Server herunterladen. + + + A new folder larger than %1 MB has been added: %2. + Removed trailing linebreak + A new folder larger than %1 MB has been added: %2. + + + Proceed with Deletion + Translated by us + + + + Remove all files? + Translated by us + + + + Restore Files from Server + Translated by us + + + + Restore Files to Server + Translated by us + + + + + OCC::FolderCreationDialog + + %1 Create new folder + Added by us + + + + + OCC::FolderMan + + (backup %1) + Removed leading space + (backup %1) + + + (backup) + Removed leading space + (backup) + + + + OCC::FolderStatusDelegate + + Synchronize any other local folder with your %1 + Added by us + + + + + OCC::FolderWizardLocalPath + + Choose + Added by us + + + + + OCC::FolderWizardRemotePath + + Enter the name of the new folder to be created below "%1": + Removed trailing space + Enter the name of the new folder to be created below "%1": + + + + OCC::FolderWizardSelectiveSync + + Use virtual files instead of downloading content immediately %1 + Use virtual files instead of downloading content immediately %1 + + + + OCC::GeneralSettings + + &Analysis data collection for needs-based design + Added by us + + + + Ask for confirmation before synchronizing external storages + Has to be repaired in code + Ask for confirmation before synchronising external storages + + + Ask for confirmation before synchronizing new folders larger than + Has to be repaired in code + Ask for confirmation before synchronizing new folders larger than + + + Automatically disable synchronisation of folders that overcome limit + Has to be repaired in code + Automatically disable synchronisation of folders that overcome limit + + + Data Protection + Added by us + + + + More Information + Added by us + + + + Open Source Software + Added by us + + + + Privacy Policy + Added by us + + + + Show sync folders in &Explorer's navigation pane + Show sync folders in &Explorer's navigation pane + + + Updates + Still used by us + Updates + + + https://wl.hidrive.com/easy/0004 + https://wl.hidrive.com/easy/0004 + + + https://wl.hidrive.com/easy/0005 + https://wl.hidrive.com/easy/0005 + + + https://wl.hidrive.com/easy/0006 + https://wl.hidrive.com/easy/0006 + + + https://wl.hidrive.com/easy/0007 + https://wl.hidrive.com/easy/0007 + + + + OCC::IgnoreListTableWidget + + Add a new ignore pattern: + modifed by us spanish + Add a new ignore pattern: + + + Files or folders matching a pattern will not be synchronized. + +Items where deletion is allowed will be deleted if they prevent a directory from being removed. This is useful for meta data. + Modifed by us spanish + Files or folders matching a pattern will not be synchronized. + +Items where deletion is allowed will be deleted if they prevent a directory from being removed. This is useful for meta data. + + + Ignore Pattern + Added by us + + + + + OCC::NetworkSettings + + No proxy + No proxy + + + + OCC::PropagateLocalMkdir + + Could not create folder %1 + Trailing space in translation removed + Could not create folder %1 + + + + OCC::PropagateLocalRename + + Folder %1 cannot be renamed because of a local file or folder name clash! + Translated by us + + + + + OCC::PropagateUploadFileCommon + + Upload of %1 exceeds the quota for the folder + Trailing space in translation removed + Upload of %1 exceeds the quota for the folder + + + + OCC::sesSnackBar + + Success + Added by us + + + + + OCC::SettingsDialog + + New account + Added by us + + + + + OCC::SslButton + + This connection is NOT secure as it is not encrypted. + Removed trailing linebreak + This connection is NOT secure as it is not encrypted. + + + This connection is encrypted using %1 bit %2. + Removed trailing linebreak + This connection is encrypted using %1 bit %2. + + + + OCC::Theme + + easy/0118 + Added by us + + + + + OCC::UpdateE2eeFolderMetadataJob + + Failed to finalize item. + Modifed by us + Failed to finalize item. + + + Failed to unlock encrypted folder. + Modifed by us + Failed to unlock encrypted folder. + + + + OCC::UpdateE2eeFolderUsersMetadataJob + + Could not add or remove user %1 to access folder %2 + Translated by us + + + + + OCC::User + + %1 notifications + Translated by us + + + + + OCC::WebFlowCredentials + + <b>You have been logged out of your account %1 at %2. Please login again.</b> + Modifed by us + + + + + OwncloudAdvancedSetupPage + + <html><head/><body><p>If this box is checked, existing content in the local folder will be erased to start a clean sync from the server.</p><p>Do not check this if the local content should be uploaded to the servers folder.</p></body></html> + Modifed by us + <html><head/><body><p>If this box is checked, existing content in the local folder will be erased to start a clean sync from the server.</p><p>Do not check this if the local content should be uploaded to the servers folder.</p></body></html> + + + + progress + + Updated local virtual files metadata + Translated by us + + + + updating local virtual files metadata + Translated by us + + + + + QObject + + Could not create debug archive in selected location! + Translated by us + + + + Failed to create debug archive + Translated by us + + + + The directory %1 cannot be part of your sync directory. Please choose another folder. + Added by us + + + + + SesTrayHeader + + Open Nextcloud in browser + Added by us + + + + Website + Added by us + + + + + ShareDetailsPage + + Copy share link + modifed by us + Copy share link + + + Custom Permissions + Added by us + + + + Enter the note to recipient + Added by us + + + + Share link copied! + modifed by us + Share link copied! + + + + TrayFoldersMenuButton + + Files + Added by us + + + + \ No newline at end of file diff --git a/translation_scripts/es.ts b/translation_scripts/es.ts new file mode 100644 index 0000000000000..f1a068dbd2606 --- /dev/null +++ b/translation_scripts/es.ts @@ -0,0 +1,615 @@ + + + + BasicComboBox + + Clear status message menu + Borrar el menú de mensajes de estado + + + + CallNotificationDialog + + Answer Talk call notification + Aviso de llamada de Answer Talk + + + Decline Talk call notification + Rechazar la notificación de llamadas de Talk + + + Talk notification caller avatar + Avatar de la notificación de llamada + + + + CloudProviderWrapper + + Quit sync client + Leading Space in Translation geändert + Cerrar cliente de sincronización + + + + ConflictDelegate + + Local version + Versión local + + + Server version + Versión del servidor + + + + FileProviderFastEnumerationSettings + + Fast sync will only sync changes in files and folders within folders that have been explored. This can significantly increase responsiveness on initial configuration of virtual files. However, it will cause redundant downloads of files moved to an unexplored folder. + Trailing Space in Translation / Source + La sincronización rápida sólo sincronizará los cambios en archivos y carpetas dentro de las carpetas que se han explorado. Esto puede incrementar significativamente la capacidad de respuesta en la configuración inicial de archivos virtuales. Sin embargo, esto provocará descargas redundantes de archivos movidos a carpetas inexploradas. + + + + FileProviderFileDelegate + + Delete + Borrar + + + + FileProviderSettings + + Signal file provider domain + Translated by us + Dominio del proveedor de archivos de firmas + + + + FileProviderStorageInfo + + Evict local copies... + Desalojar las copias locales... + + + + FileProviderSyncStatus + + All synced! + ¡Todo está sincronizado! + + + + FolderWizardSelectiveSync + + Add Folder Sync + Added by us + Añadir sincronización de carpetas + + + Step 3 of 3: Selektive Synchronisation + Added by us + Paso 3 de 3: Sincronización selectiva + + + + FolderWizardSourcePage + + &Choose + Added by us + &Elegir + + + Select a folder on your hard drive that should be permanetly connected to your %1. All files and subfolders are automatically uploaded and synchronized + Added by us + Selecciona una carpeta de tu disco duro que deba estar permanentemente conectada a tu %1. Todos los archivos y subcarpetas se cargan y sincronizan automáticamente. + + + Step 1 of 3: Select local folder + Added by us + Paso 1 de 3: Seleccionar carpeta local + + + + FolderWizardTargetPage + + Both folders are permanently linked and the respective contents are automatically synchronized and updated. + Added by us + Ambas carpetas están permanentemente vinculadas y sus respectivos contenidos se sincronizan y actualizan automáticamente. + + + Create folder + Removed trailing space in translation + Crear carpeta + + + Please now select or create a target folder in your %1 where the content should be uploaded and synchronized. + Added by us + Por favor, ahora seleccione o cree una carpeta de destino en su %1 donde el contenido debe ser cargado y sincronizado. + + + Step 2 of 3: Directory in your %1 + Added by us + Paso 2 de 3: Directorio en su %1 + + + + OCC::AccountManager + + %1 accounts were detected from a legacy desktop client. +Should the accounts be imported? + %1 cuentas se detectaron con un cliente de escritorio antiguo. +¿Deben estas cuentas ser importadas? + + + + OCC::AccountSettings + + %1 (%3%) of %2 in use. Some folders, including network mounted or shared folders, might have different limits. + Trailing Space in Translation + %1 (%3%) de %2 en uso. Algunas carpetas, como carpetas de red o compartidas, podrían tener límites diferentes. + + + Expand Memory + Added by us + Ampliar la memoria + + + Force sync now + Trailing Space in Translation + Forzar la sincronización ahora + + + Storage space %1% occupied + Added by us + Espacio de almacenamiento %1% ocupado + + + There are folders that were not synchronized because they are external storages: + Trailing Space in Source + Hay carpetas que no se han sincronizado porque están en el almacenamiento externo: + + + There are folders that were not synchronized because they are too big or external storages: + Trailing Space in Source + Hay carpetas que no se han sincronizado porque son demasiado grandes o están en el almacenamiento externo: + + + There are folders that were not synchronized because they are too big: + Trailing Space in Source + Hay carpetas que no se han sincronizado porque son demasiado grandes: + + + This will encrypt your folder and all files within it. These files will no longer be accessible without your encryption mnemonic key. +<b>This process is not reversible. Are you sure you want to proceed?</b> + Modifed by us + Esto cifrará su carpeta y todos los archivos contenidos en ella. Ya no se podrá acceder a estos archivos sin su clave de cifrado. +<b>Este proceso no es reversible. ¿Seguro que quiere continuar?</b> + + + To protect your Cryptographic Identity, we encrypt it with a mnemonic of 12 dictionary words. Please note these down and keep them safe. They will be needed to add other devices to your account (like your mobile phone or laptop). + Trailing Space in Translation + Para proteger tu identidad criptográfica, la ciframos con una regla mnemotécnica de 12 palabras del diccionario. Por favor, anótalas y mantenlas a salvo. Estas palabras serán necesarias para añadir otros dispositivos a su cuenta (como un teléfono móvil o un portátil). + + + https://wl.hidrive.com/easy/0057 + Added by us + https://wl.hidrive.com/easy/0087 + + + + OCC::CaseClashFilenameDialog + + Existing file + modifed by us french + Archivo existente + + + The file could not be synced because it generates a case clash conflict with an existing file on this system. + modifed by us french + El archivo no puede ser sincronizado porque genera un conflicto de capitalización con un archivo que ya existe en este sistema. + + + + OCC::DiscoverySingleDirectoryJob + + Encrypted metadata setup error! + added by us french + ¡Hubo un error al configurar los metadatos cifrados! + + + Encrypted metadata setup error: initial signature from server is empty. + Translated by us + Error de configuración de metadatos encriptados: la firma inicial del servidor está vacía. + + + + OCC::Flow2AuthWidget + + Open Browser + Added by us + Abrir en el navegador + + + + OCC::Folder + + A folder from an external storage has been added. + Removed trailing linebreak + Una carpeta de almacenamiento externo ha sido añadida. + + + A large number of files in the server have been deleted. +Please confirm if you'd like to proceed with these deletions. +Alternatively, you can restore all deleted files by uploading from '%1' folder to the server. + Translated by us + Se ha eliminado un gran número de archivos del servidor. +Por favor, confirme si desea proceder con estos borrados. +Alternativamente, puede restaurar todos los archivos borrados subiendo desde la carpeta '%1' al servidor. + + + A large number of files in your local '%1' folder have been deleted. +Please confirm if you'd like to proceed with these deletions. +Alternatively, you can restore all deleted files by downloading them from the server. + Translated by us + Se ha eliminado un gran número de archivos de tu carpeta local '%1'. +Por favor, confirme si desea proceder con estos borrados. +Alternativamente, puedes restaurar todos los archivos borrados descargándolos del servidor. + + + A new folder larger than %1 MB has been added: %2. + Removed trailing linebreak + Una carpeta mayor de %1 MB ha sido añadida: %2. + + + Proceed with Deletion + Translated by us + Proceder a la supresión + + + Remove all files? + Translated by us + ¿Eliminar todos los archivos? + + + Restore Files from Server + Translated by us + Restaurar archivos del servidor + + + Restore Files to Server + Translated by us + Restaurar archivos en el servidor + + + + OCC::FolderCreationDialog + + %1 Create new folder + Added by us + %1 Crear nueva carpeta + + + + OCC::FolderMan + + (backup %1) + Removed leading space + (copia de seguridad %1) + + + (backup) + Removed leading space + (copia de seguridad) + + + + OCC::FolderStatusDelegate + + Synchronize any other local folder with your %1 + Added by us + Sincroniza cualquier otra carpeta local con tu %1 + + + + OCC::FolderWizardLocalPath + + Choose + Added by us + Seleccione + + + + OCC::FolderWizardRemotePath + + Enter the name of the new folder to be created below "%1": + Removed trailing space + Introduce el nombre de la nueva carpeta que se creará debajo de "%1": + + + + OCC::FolderWizardSelectiveSync + + Use virtual files instead of downloading content immediately %1 + Usa archivos virtuales en vez de descargar el contenido inmediatamente %1 + + + + OCC::GeneralSettings + + &Analysis data collection for needs-based design + Added by us + &Recogida de datos de análisis para un diseño basado en las necesidades + + + Ask for confirmation before synchronizing external storages + modifed by us + Pide confirmación antes de sincronizar almacenamientos externos + + + Ask for confirmation before synchronizing new folders larger than + Pedir confirmación antes de sincronizar carpetas nuevas mayores a + + + Automatically disable synchronisation of folders that overcome limit + modifed by us + Desactivar automáticamente la sincronización de carpetas que superen el límite + + + Data Protection + Added by us + + + + More Information + Added by us + Más información + + + Open Source Software + Added by us + Software de código abierto + + + Privacy Policy + Added by us + Política de privacidad + + + Show sync folders in &Explorer's navigation pane + Modifed by us + Mostrar carpetas de sincronización en el panel de navegación de &Explorer + + + Updates + Still used by us + Actualizaciones + + + https://wl.hidrive.com/easy/0004 + https://wl.hidrive.com/easy/0004 + + + https://wl.hidrive.com/easy/0005 + https://wl.hidrive.com/easy/0005 + + + https://wl.hidrive.com/easy/0006 + https://wl.hidrive.com/easy/0006 + + + https://wl.hidrive.com/easy/0007 + https://wl.hidrive.com/easy/0007 + + + + OCC::IgnoreListTableWidget + + Add a new ignore pattern: + modifed by us + Añadir un nuevo patrón de ignorar: + + + Files or folders matching a pattern will not be synchronized. + +Items where deletion is allowed will be deleted if they prevent a directory from being removed. This is useful for meta data. + Modifed by us + Los archivos o carpetas que coincidan con este patrón no se sincronizarán. + +Los objetos cuyo borrado esté permitido se eliminarán si impiden que se borre una carpeta. Esto es útil para los metadatos. + + + Ignore Pattern + Added by us + Ignorar patrón + + + + OCC::NetworkSettings + + No proxy + Sin proxy + + + + OCC::PropagateLocalMkdir + + Could not create folder %1 + Trailing space in translation removed + No se pudo crear la carpeta %1 + + + + OCC::PropagateLocalRename + + Folder %1 cannot be renamed because of a local file or folder name clash! + Translated by us + La carpeta %1 no puede renombrarse debido a un conflicto de nombres de archivos o carpetas locales. + + + + OCC::PropagateUploadFileCommon + + Upload of %1 exceeds the quota for the folder + Trailing space in translation removed + La subida %1 excede el límite de tamaño de la carpeta + + + + OCC::sesSnackBar + + Success + Added by us + Éxito + + + + OCC::SettingsDialog + + New account + Added by us + Nueva cuenta + + + + OCC::SslButton + + This connection is NOT secure as it is not encrypted. + Removed trailing linebreak + Esta conexión NO ES SEGURA, pues no está cifrada. + + + This connection is encrypted using %1 bit %2. + Removed trailing linebreak + Esta conexión está cifrada con %1 bit %2. + + + + OCC::Theme + + easy/0118 + Added by us + easy/0138 + + + + OCC::UpdateE2eeFolderMetadataJob + + Failed to finalize item. + Modifed by us + Fallo al finalizar ítem. + + + Failed to unlock encrypted folder. + Modifed by us + Fallo al desbloquear carpeta cifrada. + + + + OCC::UpdateE2eeFolderUsersMetadataJob + + Could not add or remove user %1 to access folder %2 + Translated by us + No se ha podido añadir o eliminar el usuario %1 para acceder a la carpeta %2 + + + + OCC::User + + %1 notifications + Translated by us + %1 notificaciones + + + + OCC::WebFlowCredentials + + <b>You have been logged out of your account %1 at %2. Please login again.</b> + Modifed by us + <b>Se ha cerrado la sesión de su cuenta %1 en %2. Vuelva a iniciar sesión.</b> + + + + OwncloudAdvancedSetupPage + + <html><head/><body><p>If this box is checked, existing content in the local folder will be erased to start a clean sync from the server.</p><p>Do not check this if the local content should be uploaded to the servers folder.</p></body></html> + Modifed by us + <html><head/><body><p>Si esta casilla está marcada, el contenido existente en la carpeta local se borrará para iniciar una sincronización limpia desde el servidor.</p><p>No marque esta casilla si el contenido local debe cargarse en la carpeta de los servidores.</p></body></html>. + + + + progress + + Updated local virtual files metadata + Translated by us + Actualizados los metadatos de los archivos virtuales locales + + + updating local virtual files metadata + Translated by us + Actualización de los metadatos de los archivos virtuales locales + + + + QObject + + Could not create debug archive in selected location! + Translated by us + No se ha podido crear el archivo de depuración en la ubicación seleccionada. + + + Failed to create debug archive + Translated by us + Error al crear el archivo de depuración + + + The directory %1 cannot be part of your sync directory. Please choose another folder. + Added by us + El directorio %1 no puede formar parte de su directorio de sincronización. Por favor, elija otra carpeta. + + + + SesTrayHeader + + Open Nextcloud in browser + Added by us + Abrir HiDrive Next en el navegador + + + Website + Added by us + Sitio web + + + + ShareDetailsPage + + Copy share link + modifed by us + Copiar enlace de recurso compartido + + + Custom Permissions + Added by us + Permisos personalizados + + + Enter the note to recipient + Added by us + Introducir la nota al destinatario + + + Share link copied! + modifed by us + ¡Enlace compartido copiado! + + + + TrayFoldersMenuButton + + Files + Added by us + Archivos + + + + \ No newline at end of file diff --git a/translation_scripts/fr.ts b/translation_scripts/fr.ts new file mode 100644 index 0000000000000..e9ad7909cfe7f --- /dev/null +++ b/translation_scripts/fr.ts @@ -0,0 +1,615 @@ + + + + BasicComboBox + + Clear status message menu + Menu d'effacement du message de statut + + + + CallNotificationDialog + + Answer Talk call notification + Répondre à la notification d'appel de Talk + + + Decline Talk call notification + Décliner la notification d'appel de Talk + + + Talk notification caller avatar + Avatar de l'appelant de la notification Talk + + + + CloudProviderWrapper + + Quit sync client + Leading Space in Translation geändert + Quitter le client de synchro + + + + ConflictDelegate + + Local version + Version locale + + + Server version + Version du serveur + + + + FileProviderFastEnumerationSettings + + Fast sync will only sync changes in files and folders within folders that have been explored. This can significantly increase responsiveness on initial configuration of virtual files. However, it will cause redundant downloads of files moved to an unexplored folder. + Trailing Space in Translation + La synchronisation rapide va uniquement synchroniser les modifications des fichiers et des dossiers dans les dossiers qui ont été explorés. Ceci peut significativement augmenter la réactivité sur la configuration initiale des fichiers virtuelles. Cependant, cela va causer des téléchargements redondants de fichiers déplacés dans un dossier non exploré. + + + + FileProviderFileDelegate + + Delete + Supprimer + + + + FileProviderSettings + + Signal file provider domain + Translated by us + Indiquer le domaine du fournisseur de fichiers + + + + FileProviderStorageInfo + + Evict local copies... + Supprimer les copies locales + + + + FileProviderSyncStatus + + All synced! + Tout est synchronisé ! + + + + FolderWizardSelectiveSync + + Add Folder Sync + Added by us + Ajouter une synchronisation de dossiers + + + Step 3 of 3: Selektive Synchronisation + Added by us + Étape 3 sur 3 : synchronisation sélective + + + + FolderWizardSourcePage + + &Choose + Added by us + &Choisir + + + Select a folder on your hard drive that should be permanetly connected to your %1. All files and subfolders are automatically uploaded and synchronized + Added by us + Sélectionnez sur votre disque dur un dossier qui doit être en permanence rattaché à votre %1. Tous les fichiers et sous-dossiers sont automatiquement importés et synchronisés. + + + Step 1 of 3: Select local folder + Added by us + Étape 1 sur 3 : sélectionner un dossier local + + + + FolderWizardTargetPage + + Both folders are permanently linked and the respective contents are automatically synchronized and updated. + Added by us + Les deux dossiers sont en permanence rattachés et leur contenu respectif est automatiquement synchronisé et importé. + + + Create folder + Removed trailing space in translation + Créer un dossier + + + Please now select or create a target folder in your %1 where the content should be uploaded and synchronized. + Added by us + À présent, sélectionnez ou créez dans votre %1 un dossier cible dans lequel le contenu doit être importé et synchronisé. + + + Step 2 of 3: Directory in your %1 + Added by us + Étape 2 sur 3 : répertoire dans votre %1 + + + + OCC::AccountManager + + %1 accounts were detected from a legacy desktop client. +Should the accounts be imported? + %1 comptes ont été détectés à partir d'un ancien client de bureau. +Doivent-ils être importés ? + + + + OCC::AccountSettings + + %1 (%3%) of %2 in use. Some folders, including network mounted or shared folders, might have different limits. + Trailing Space in Translation + %1 (%3%) utilisés sur %2. Certains dossiers, montés depuis le réseau ou partagés, peuvent avoir des limites différentes. + + + Expand Memory + Added by us + Augmenter la mémoire + + + Force sync now + Trailing Space in Translation + Forcer la synchronisation maintenant + + + Storage space %1% occupied + Added by us + Espace de stockage %1% occupé + + + There are folders that were not synchronized because they are external storages: + Trailing Space in Source + Certains dossiers n'ont pas été synchronisés parce qu'ils sont localisés sur un stockage externe : + + + There are folders that were not synchronized because they are too big or external storages: + Trailing Space in Source + Certains dossiers n'ont pas été synchronisés parce qu'ils sont localisés sur un stockage externe ou qu'ils sont de taille trop importante : + + + There are folders that were not synchronized because they are too big: + Trailing Space in Source + Certains dossiers n'ont pas été synchronisés parce qu'ils sont de taille trop importante : + + + This will encrypt your folder and all files within it. These files will no longer be accessible without your encryption mnemonic key. +<b>This process is not reversible. Are you sure you want to proceed?</b> + Modifed by us + Cette opération cryptera votre dossier et tous les fichiers qu'il contient. Ces fichiers ne seront plus accessibles sans votre clé mnémonique de cryptage. +<b>Ce processus n'est pas réversible. Êtes-vous sûr de vouloir continuer ? + + + To protect your Cryptographic Identity, we encrypt it with a mnemonic of 12 dictionary words. Please note these down and keep them safe. They will be needed to add other devices to your account (like your mobile phone or laptop). + Trailing Space in Translation + Pour protéger votre identité cryptographique, nous la chiffrons avec une phrase secrète de 12 mots du dictionnaire. Veuillez la noter et la garder en sécurité. Elle sera nécessaire pour ajouter d’autres appareils à votre compte (comme votre smartphone ou votre ordinateur portable). + + + https://wl.hidrive.com/easy/0057 + Added by us + https://wl.hidrive.com/easy/0057 + + + + OCC::CaseClashFilenameDialog + + Existing file + modifed by us french + Dossier existant + + + The file could not be synced because it generates a case clash conflict with an existing file on this system. + modifed by us french + Le fichier n'a pas pu être synchronisé car il génère un conflit de cas avec un fichier existant sur ce système. + + + + OCC::DiscoverySingleDirectoryJob + + Encrypted metadata setup error! + added by us french + Erreur de configuration des métadonnées chiffrées ! + + + Encrypted metadata setup error: initial signature from server is empty. + Translated by us + Erreur de configuration des métadonnées cryptées : la signature initiale du serveur est vide. + + + + OCC::Flow2AuthWidget + + Open Browser + Added by us + Ouvrir le navigateur + + + + OCC::Folder + + A folder from an external storage has been added. + Removed trailing linebreak + Un nouveau dossier localisé sur un stockage externe a été ajouté. + + +A large number of files in the server have been deleted. +Please confirm if you'd like to proceed with these deletions. +Alternatively, you can restore all deleted files by uploading from '%1' folder to the server. + Translated by us + Un grand nombre de fichiers ont été supprimés sur le serveur. +Veuillez confirmer si vous souhaitez procéder à ces suppressions. +Vous pouvez également restaurer tous les fichiers supprimés en les téléchargeant depuis le dossier '%1' vers le serveur. + + + A large number of files in your local '%1' folder have been deleted. +Please confirm if you'd like to proceed with these deletions. +Alternatively, you can restore all deleted files by downloading them from the server. + Translated by us + Un grand nombre de fichiers de votre dossier local "%1" ont été supprimés. +Veuillez confirmer si vous souhaitez procéder à ces suppressions. +Vous pouvez également restaurer tous les fichiers supprimés en les téléchargeant depuis le serveur. + + + A new folder larger than %1 MB has been added: %2. + Removed trailing linebreak + Un nouveau dossier de taille supérieure à %1 Mo a été ajouté : %2. + + + Proceed with Deletion + Translated by us + Procéder à la suppression + + + Remove all files? + Translated by us + Supprimer tous les fichiers ? + + + Restore Files from Server + Translated by us + Restaurer des fichiers à partir du serveur + + + Restore Files to Server + Translated by us + Restaurer les fichiers sur le serveur + + + + OCC::FolderCreationDialog + + %1 Create new folder + Added by us + %1 Créer un nouveau dossier + + + + OCC::FolderMan + + (backup %1) + Removed leading space + (sauvegarde %1) + + + (backup) + Removed leading space + (sauvegarde) + + + + OCC::FolderStatusDelegate + + Synchronize any other local folder with your %1 + Added by us + Synchronisez n’importe quel autre dossier local avec votre %1 + + + + OCC::FolderWizardLocalPath + + Choose + Added by us + Choisissez + + + + OCC::FolderWizardRemotePath + + Enter the name of the new folder to be created below "%1": + Removed trailing space + Entrez le nom du nouveau dossier à créer dans "%1" : + + + + OCC::FolderWizardSelectiveSync + + Use virtual files instead of downloading content immediately %1 + Utiliser les fichiers virtuels %1 + + + + OCC::GeneralSettings + + &Analysis data collection for needs-based design + Added by us + &Collecte des données d’analyse pour une conception basée sur les besoins + + + Ask for confirmation before synchronizing external storages + Has to be repaired in code + Confirmation avant de synchroniser des stockages externes + + + Ask for confirmation before synchronizing new folders larger than + Has to be repaired in code + Demander la confirmation avant de synchroniser les dossiers plus grands que + + + Automatically disable synchronisation of folders that overcome limit + Has to be repaired in code + Désactiver automatiquement la synchronisation des dossiers qui dépassent la limite + + + Data Protection + Added by us + Protection des données + + + More Information + Added by us + Plus d’informations + + + Open Source Software + Added by us + Logiciel libre + + + Privacy Policy + Added by us + Politique de confidentialité + + + Show sync folders in &Explorer's navigation pane + Afficher les dossiers synchronisés dans le panneau de navigation de l'&Explorateur de fichiers + + + Updates + Still used by us + Mises à jour + + + https://wl.hidrive.com/easy/0004 + https://wl.hidrive.com/easy/0004 + + + https://wl.hidrive.com/easy/0005 + https://wl.hidrive.com/easy/0005 + + + https://wl.hidrive.com/easy/0006 + https://wl.hidrive.com/easy/0006 + + + https://wl.hidrive.com/easy/0007 + https://wl.hidrive.com/easy/0007 + + + + OCC::IgnoreListTableWidget + + Add a new ignore pattern: + modifed by us spanish + Ajouter un nouveau motif d'exclusion: + + + Files or folders matching a pattern will not be synchronized. + +Items where deletion is allowed will be deleted if they prevent a directory from being removed. This is useful for meta data. + Modifed by us spanish + Les fichiers ou dossiers qui correspondent à ce modèle ne seront pas synchronisés. + +Les objets autorisés à être supprimés le seront s'ils empêchent la suppression d'un dossier. Ceci est utile pour les métadonnées. + + + Ignore Pattern + Added by us + Ignorer le modèle + + + + OCC::NetworkSettings + + No proxy + Aucun serveur proxy + + + + OCC::PropagateLocalMkdir + + Could not create folder %1 + Trailing space in translation removed + Impossible de créer le dossier %1 + + + + OCC::PropagateLocalRename + + Folder %1 cannot be renamed because of a local file or folder name clash! + Translated by us + Le dossier %1 ne peut pas être renommé en raison d’un conflit de nom avec un fichier ou un dossier local ! + + + + OCC::PropagateUploadFileCommon + + Upload of %1 exceeds the quota for the folder + Trailing space in translation removed + L'envoi de %1 amène un dépassement de quota pour le dossier + + + + OCC::sesSnackBar + + Success + Added by us + Réussite + + + + OCC::SettingsDialog + + New account + Added by us + Nouveau compte + + + + OCC::SslButton + + This connection is NOT secure as it is not encrypted. + Removed trailing linebreak + Cette connexion n'est PAS sécurisée car elle n'est pas chiffrée. + + + This connection is encrypted using %1 bit %2. + Removed trailing linebreak + Cette connexion est chiffrée en utilisant %1 bit %2. + + + + OCC::Theme + + easy/0118 + Added by us + easy/0128 + + + + OCC::UpdateE2eeFolderMetadataJob + + Failed to finalize item. + Modifed by us + Échec de finalisation de l’élément. + + + Failed to unlock encrypted folder. + Modifed by us + Échec du déverrouillage du dossier chiffré. + + + + OCC::UpdateE2eeFolderUsersMetadataJob + + Could not add or remove user %1 to access folder %2 + Translated by us + Impossible de supprimer l’utilisateur %1 au dossier d’accès %2 ou de l’y ajouter + + + + OCC::User + + %1 notifications + Translated by us + %1 notifications + + + + OCC::WebFlowCredentials + + <b>You have been logged out of your account %1 at %2. Please login again.</b> + Modifed by us + <b>Vous avez été déconnecté(e) de votre compte %1 à %2. Veuillez vous reconnecter.</b> + + + + OwncloudAdvancedSetupPage + + <html><head/><body><p>If this box is checked, existing content in the local folder will be erased to start a clean sync from the server.</p><p>Do not check this if the local content should be uploaded to the servers folder.</p></body></html> + Modifed by us + <html><head/><body><p>Si cette case est cochée, le contenu existant du dossier local sera supprimé pour démarrer une synchronisation propre depuis le serveur.</p><p>Ne pas cocher si le contenu local doit être téléversé vers le serveur.</p></body></html> + + + + progress + + Updated local virtual files metadata + Translated by us + Métadonnées des fichiers virtuels locaux mises à jour + + + updating local virtual files metadata + Translated by us + Mise à jour des métadonnées des fichiers virtuels locaux + + + + QObject + + Could not create debug archive in selected location! + Translated by us + Impossible de créer une archive de débogage à l’emplacement sélectionné ! + + + Failed to create debug archive + Translated by us + Échec de création de l’archive de débogage + + + The directory %1 cannot be part of your sync directory. Please choose another folder. + Added by us + La répertoire %1 ne peut pas faire partie de votre répertoire de synchronisation. Veuillez choisir un autre dossier. + + + + SesTrayHeader + + Open Nextcloud in browser + Added by us + Ouvrir HiDrive Next dans le navigateur + + + Website + Added by us + Site Web + + + + ShareDetailsPage + + Copy share link + modifed by us + Copier le lien + + + Custom Permissions + Added by us + Autorisations personnalisées + + + Enter the note to recipient + Added by us + Saisir la remarque à l’attention du destinataire + + + Share link copied! + modifed by us + Lien copié ! + + + + TrayFoldersMenuButton + + Files + Added by us + Fichiers + + + + \ No newline at end of file diff --git a/translation_scripts/merge_translation.py b/translation_scripts/merge_translation.py new file mode 100644 index 0000000000000..80dddbeb35484 --- /dev/null +++ b/translation_scripts/merge_translation.py @@ -0,0 +1,350 @@ +import sys +import subprocess +import xml.etree.ElementTree as ET + +def load_source_messages(source_file): + """Load messages from the source XML file into a dictionary organized by context.""" + tree = ET.parse(source_file) + root = tree.getroot() + messages = {} + + for context in root.findall("context"): + context_name = context.find("name").text if context.find("name") is not None else "" + if context_name not in messages: + messages[context_name] = {} + + for message in context.findall("message"): + source = message.find("source") + translation = message.find("translation") + if source is not None and translation is not None: + messages[context_name][source.text] = translation.text + + return messages + +def update_target_messages(target_file, source_messages): + """Update messages in the target XML file and insert missing ones in the correct context.""" + tree = ET.parse(target_file) + root = tree.getroot() + + existing_messages = {} + for context in root.findall("context"): + context_name = context.find("name").text if context.find("name") is not None else "" + if context_name not in existing_messages: + existing_messages[context_name] = set() + + for message in context.findall("message"): + source = message.find("source") + translation = message.find("translation") + if source is not None and translation is not None: + existing_messages[context_name].add(source.text) + if context_name in source_messages and source.text in source_messages[context_name]: + translation.text = source_messages[context_name][source.text] + translation.attrib.pop("type", None) # Remove type="unfinished" attribute + + # Insert missing messages into corresponding contexts + for context_name, messages in source_messages.items(): + target_context = None + for context in root.findall("context"): + if (context.find("name") is not None and context.find("name").text == context_name): + target_context = context + break + + if target_context is None: + target_context = ET.SubElement(root, "context") + context_name_elem = ET.SubElement(target_context, "name") + context_name_elem.text = context_name + + for source_text, translation_text in messages.items(): + if source_text not in existing_messages.get(context_name, set()): + message = ET.SubElement(target_context, "message") + source = ET.SubElement(message, "source") + source.text = source_text + translation = ET.SubElement(message, "translation") + translation.text = translation_text + + tree.write(target_file, encoding="utf-8", xml_declaration=True) + +def merge(source, target): + source_messages = load_source_messages(source) + update_target_messages(target, source_messages) + +def pop_vanished(target_file): + tree = ET.parse(target_file) + root = tree.getroot() + + + for context in root.findall("context"): + for message in context.findall("message"): + source = message.find("source") + translation = message.find("translation") + + if translation.attrib.get("type") == "vanished": + translation.attrib.pop("type") # Remove type="vanished" attribute + + tree.write(target_file, encoding="utf-8", xml_declaration=True) + +def replace_in_file(file_path): + try: + # Open the file, read its contents, and replace the string + with open(file_path, 'r', encoding='utf-8', newline='') as file: + content = file.read() + + # Replace the old string with the new string + updated_content = content.replace("&quot;", """).replace("&apos;", "'") + + # Write the updated content back to the file + with open(file_path, 'w', encoding='utf-8', newline='') as file: + file.write(updated_content) + + # print(f"Successfully replaced '{old_string}' with '{new_string}' in '{file_path}'.") + except FileNotFoundError: + print(f"Error: File '{file_path}' not found.") + except Exception as e: + print(f"An error occurred: {e}") + +def replace_quotes_and_apostrophes(text): + """Replace quotes and apostrophes with their HTML encodings.""" + # return html.escape(text) + # return text.replace('"', '"') + return text.replace('"', '"').replace("'", ''') + +def process_file(input_file, output_file): + try: + # Parse the XML file + tree = ET.parse(input_file) + root = tree.getroot() + + # Process and tags + for tag in root.findall(".//source") + root.findall(".//translation") + root.findall(".//extracomment"): + if tag.text: # Check if there's any text inside the tag + tag.text = replace_quotes_and_apostrophes(tag.text) + + # Write the updated XML to the output file + with open(output_file, "w", encoding="utf-8", newline="\n") as outfile: + tree.write(outfile, encoding="unicode", xml_declaration=True) + + # with open(output_file, "wb", newline="") as f: + # tree.write(f, encoding="utf-8", xml_declaration=True) + # # tree.write(output_file, encoding="utf-8", xml_declaration=True) + except ET.ParseError as e: + print(f"Error parsing XML file: {e}") + except Exception as e: + print(f"An error occurred: {e}") + +def repair_file(file): + process_file(file, file) + replace_in_file(file) + +def sort_contexts(input_file, output_file): + # Parse the XML file + tree = ET.parse(input_file) + root = tree.getroot() + + # Find all elements + contexts = root.findall("context") + + # Sort elements based on the text inside their child + def get_name_text(ctx): + name_element = ctx.find("name") + # If is missing or its text is None, treat it as an empty string + return name_element.text.strip().lower() if name_element is not None and name_element.text else "" + + contexts.sort(key=get_name_text) + + # Remove all existing elements from the root + for context in root.findall("context"): + root.remove(context) + + # Append sorted elements back to the root + for context in contexts: + root.append(context) + + # Write the updated XML to the output file + tree.write(output_file, encoding="utf-8", xml_declaration=True) + + +def sort_messages(input_file, output_file): + # Parse the XML file + tree = ET.parse(input_file) + root = tree.getroot() + + # Traverse all tags + for context in root.findall("context"): + # Find all tags within the current + messages = context.findall("message") + + # Define the sorting key + def message_sort_key(message): + # Get the tag and its filename attribute + location = message.find("location") + filename = location.get("filename") if location is not None else "" + + # Get the text of the tag + source = message.find("source") + source_text = source.text.strip() if source is not None and source.text else "" + + # Return a tuple for sorting: primary (filename), secondary (source_text) + return (filename, source_text) + + # Sort messages by the defined key + messages.sort(key=message_sort_key) + + # Remove existing tags from the + for message in messages: + context.remove(message) + + # Re-add sorted tags to the + for message in messages: + context.append(message) + + # Write the updated XML to the output file + tree.write(output_file, encoding="utf-8", xml_declaration=True) + +def full_sort(file): + sort_contexts(file, file) + sort_messages(file, file) + +def sort_and_repair(file): + full_sort(file) + repair_file(file) + +def run_script(script_name, input_file, output_file): + try: + # Running each script with input and output file arguments + subprocess.run(['python', script_name, input_file, output_file], check=True) + # print(f"{script_name} executed successfully with input '{input_file}' and output '{output_file}'.") + except subprocess.CalledProcessError as e: + print(f"An error occurred while running {script_name} with input '{input_file}' and output '{output_file}': {e}") + +def run_lupdate(ts_files, mode="default"): + command = [ + r"C:\Craft64\bin\lupdate.exe", + "-locations", "none", + "-no-ui-lines", + "-no-sort", + r"..\src\libsync", + r"..\src\gui", + r"..\src\csync", + r"..\src\common", + r"..\src\cmd", + "-ts" + ] + + command_no_obs = [ + r"C:\Craft64\bin\lupdate.exe", + "-locations", "none", + "-no-ui-lines", + "-no-sort", + "-no-obsolete", + r"..\src\libsync", + r"..\src\gui", + r"..\src\csync", + r"..\src\common", + r"..\src\cmd", + "-ts" + ] + + command_location = [ + r"C:\Craft64\bin\lupdate.exe", + "-locations", "absolute", + "-no-sort", + "-no-obsolete", + r"..\src\libsync", + r"..\src\gui", + r"..\src\csync", + r"..\src\common", + r"..\src\cmd", + "-ts" + ] + + # Append all ts_files paths to the command list + command.extend(ts_files) + command_no_obs.extend(ts_files) + command_location.extend(ts_files) + + try: + if mode == "default": + result = subprocess.run(command, stdout=subprocess.PIPE, stderr=subprocess.PIPE, text=True, check=True) + elif mode == "no_obs": + result = subprocess.run(command_no_obs, stdout=subprocess.PIPE, stderr=subprocess.PIPE, text=True, check=True) + elif mode == "location": + result = subprocess.run(command_location, stdout=subprocess.PIPE, stderr=subprocess.PIPE, text=True, check=True) + print("Output:", result.stdout) + except subprocess.CalledProcessError as e: + print("Error:", e.stderr) + + +if __name__ == "__main__": + ts_files = [r"..\translations\client_de.ts" + , r"..\translations\client_es.ts" + , r"..\translations\client_fr.ts" + , r"..\translations\client_nl.ts" + , r"..\translations\client_en.ts" + , r"..\translations\client_en_GB.ts" + ] + + diff_files = [r".\de_DE.ts" + , r".\es.ts" + , r".\fr.ts" + , r".\nl.ts" + , r".\en.ts" + , r".\en_GB.ts" + ] + + if len(sys.argv) == 1: + print("Usage: python merge.py ") + sys.exit() + if len(sys.argv) == 3: + print("Usage: python remove_line_attributes.py ") + sys.exit() + if len(sys.argv) == 2: + step = sys.argv[1] + try: + + if step == "0" or step == "all": + # Step 0 full sort + for ts_file in ts_files: + sort_and_repair(ts_file) + print("Step 0 completed: sorted") + + if step == "1" or step == "all": + # Step 1 lupdate Nextcloud in our latest change state, keep obsolete + run_lupdate(ts_files) + + # Step 2 full sort + for ts_file in ts_files: + pop_vanished(ts_file) + sort_and_repair(ts_file) + + print("Step 1 completed: lupdate (keep obsolete), pop vanished, full sort, you should commit now") + + if step == "2" or step == "all": + run_lupdate(ts_files, "no_obs") + for ts_file in ts_files: + sort_and_repair(ts_file) + print("Step 2 completed: lupdate removed obsolete, you should commit now") + + # Step 3 merge diff into + if step == "3" or step == "all": + + for ts_file in ts_files: + merge(diff_files[ts_files.index(ts_file)], ts_file) + sort_and_repair(ts_file) + print("Step 3 completed: merged, sorted, you should commit now") + + if step == "4" or step == "all": + run_lupdate(ts_files) + for ts_file in ts_files: + pop_vanished(ts_file) + sort_and_repair(ts_file) + print("Step 4 completed: lupdate fill duplicates, format, you should commit now") + + if step == "5" or step == "all": + run_lupdate(ts_files, "location") + for ts_file in ts_files: + sort_and_repair(ts_file) + print("Step 5 completed: lupdate remove obsolete, sort, you should commit now") + + except Exception as e: + print(f"An error occurred: {e}") + diff --git a/translation_scripts/nl.ts b/translation_scripts/nl.ts new file mode 100644 index 0000000000000..a38e060d3499f --- /dev/null +++ b/translation_scripts/nl.ts @@ -0,0 +1,614 @@ + + + + BasicComboBox + + Clear status message menu + Statusbericht wissen + + + + CallNotificationDialog + + Answer Talk call notification + Answer Talk call notification + + + Decline Talk call notification + Afwijzingsmelding voor gesprek + + + Talk notification caller avatar + Spraakmelding beller avatar + + + + CloudProviderWrapper + + Quit sync client + Leading Space in Translation geändert + Afsluiten synchronisatieclient + + + + ConflictDelegate + + Local version + Lokale versie + + + Server version + Serverversie + + + + FileProviderFastEnumerationSettings + + Fast sync will only sync changes in files and folders within folders that have been explored. This can significantly increase responsiveness on initial configuration of virtual files. However, it will cause redundant downloads of files moved to an unexplored folder. + Trailing Space in Translation + Fast sync will only sync changes in files and folders within folders that have been explored. This can significantly increase responsiveness on initial configuration of virtual files. However, it will cause redundant downloads of files moved to an unexplored folder. + + + + FileProviderFileDelegate + + Delete + Verwijderen + + + + FileProviderSettings + + Signal file provider domain + Translated by us + Signal file provider domain + + + + FileProviderStorageInfo + + Evict local copies... + Lokale kopieën verwijderen... + + + + FileProviderSyncStatus + + All synced! + Alles gesynchroniseerd! + + + + FolderWizardSelectiveSync + + Add Folder Sync + Added by us + Mapsynchronisatie toevoegen + + + Step 3 of 3: Selektive Synchronisation + Added by us + Stap 3 van 3: Selektieve synchronisatie + + + + FolderWizardSourcePage + + &Choose + Added by us + &Kiezen + + + Select a folder on your hard drive that should be permanetly connected to your %1. All files and subfolders are automatically uploaded and synchronized + Added by us + Selecteer een map op je harde schijf die permanent verbonden moet zijn met je %1. Alle bestanden en submappen worden automatisch geüpload en gesynchroniseerd. + + + Step 1 of 3: Select local folder + Added by us + Stap 1 van 3: Selecteer lokale map + + + + FolderWizardTargetPage + + Both folders are permanently linked and the respective contents are automatically synchronized and updated. + Added by us + Beide mappen zijn permanent gekoppeld en de respectieve inhoud wordt automatisch gesynchroniseerd en bijgewerkt. + + + Create folder + Removed trailing space in translation + Maak map + + + Please now select or create a target folder in your %1 where the content should be uploaded and synchronized. + Added by us + Selecteer of maak nu een doelmap in uw %1 waar de inhoud moet worden geüpload en gesynchroniseerd. + + + Step 2 of 3: Directory in your %1 + Added by us + Stap 2 van 3: Directory in uw %1 + + + + OCC::AccountManager + + %1 accounts were detected from a legacy desktop client. +Should the accounts be imported? + Er zijn %1 accounts gedetecteerd van een oudere desktopclient. +Moeten de accounts worden geïmporteerd? + + + + OCC::AccountSettings + + %1 (%3%) of %2 in use. Some folders, including network mounted or shared folders, might have different limits. + Trailing Space in Translation + %1 (%3%) van %2 in gebruik. Sommige mappen, inclusief netwerkmappen en gedeelde mappen, kunnen andere limieten hebben. + + + Expand Memory + Added by us + Geheugen uitbreiden + + + Force sync now + Trailing Space in Translation + Synchronisatie nu forceren + + + Storage space %1% occupied + Added by us + Opslagruimte %1% bezet + + + There are folders that were not synchronized because they are external storages: + Trailing Space in Source + Er zijn mappen die niet gesynchroniseerd zijn, omdat ze op externe opslag staan: + + + There are folders that were not synchronized because they are too big or external storages: + Trailing Space in Source + Er zijn mappen die niet gesynchroniseerd zijn, omdat ze te groot zijn of op externe opslag staan: + + + There are folders that were not synchronized because they are too big: + Trailing Space in Source + Er zijn mappen die niet gesynchroniseerd zijn, omdat ze te groot zijn: + + + This will encrypt your folder and all files within it. These files will no longer be accessible without your encryption mnemonic key. +<b>This process is not reversible. Are you sure you want to proceed?</b> + Modifed by us + Dit zal je map en alle bestanden erin versleutelen. Deze bestanden zullen niet langer toegankelijk zijn zonder je coderingssleutel. +<b>Dit proces is niet omkeerbaar. Weet u zeker dat u wilt doorgaan? + + + To protect your Cryptographic Identity, we encrypt it with a mnemonic of 12 dictionary words. Please note these down and keep them safe. They will be needed to add other devices to your account (like your mobile phone or laptop). + Trailing Space in Translation + To protect your Cryptographic Identity, we encrypt it with a mnemonic of 12 dictionary words. Please note these down and keep them safe. They will be needed to add other devices to your account (like your mobile phone or laptop). + + + https://wl.hidrive.com/easy/0057 + Added by us + https://wl.hidrive.com/easy/0097 + + + + OCC::CaseClashFilenameDialog + + Existing file + modifed by us french + Bestaand bestand + + + The file could not be synced because it generates a case clash conflict with an existing file on this system. + modifed by us french + The file could not be synced because it generates a case clash conflict with an existing file on this system. + + + + OCC::DiscoverySingleDirectoryJob + + Encrypted metadata setup error! + added by us french + Encrypted metadata setup error! + + + Encrypted metadata setup error: initial signature from server is empty. + Translated by us + Fout bij opzetten versleutelde metagegevens: initiële handtekening van server is leeg. + + + + OCC::Flow2AuthWidget + + Open Browser + Added by us + Browser openen + + + + OCC::Folder + + A folder from an external storage has been added. + Removed trailing linebreak + Er is een map op externe opslag toegevoegd. + + + A large number of files in the server have been deleted. +Please confirm if you'd like to proceed with these deletions. +Alternatively, you can restore all deleted files by uploading from '%1' folder to the server. + Translated by us + Een groot aantal bestanden op de server is verwijderd. +Bevestig alstublieft of u door wilt gaan met deze verwijderingen. +U kunt ook alle verwijderde bestanden terugzetten door vanuit de map '%1' te uploaden naar de server. + + + A large number of files in your local '%1' folder have been deleted. +Please confirm if you'd like to proceed with these deletions. +Alternatively, you can restore all deleted files by downloading them from the server. + Translated by us + Een groot aantal bestanden in uw lokale map '%1' is verwijderd. +Bevestig alstublieft of u door wilt gaan met deze verwijderingen. +U kunt ook alle verwijderde bestanden herstellen door ze van de server te downloaden. + + + A new folder larger than %1 MB has been added: %2. + Removed trailing linebreak + Er is een nieuwe map groter dan %1 MB toegevoegd: %2. + + + Proceed with Deletion + Translated by us + Doorgaan met verwijderen + + + Remove all files? + Translated by us + Alle bestanden verwijderen? + + + Restore Files from Server + Translated by us + Bestanden terugzetten van server + + + Restore Files to Server + Translated by us + Bestanden terugzetten naar server + + + + OCC::FolderCreationDialog + + %1 Create new folder + Added by us + %1 Nieuwe map maken + + + + OCC::FolderMan + + (backup %1) + Removed leading space + (backup %1) + + + (backup) + Removed leading space + (backup) + + + + OCC::FolderStatusDelegate + + Synchronize any other local folder with your %1 + Added by us + Synchroniseer een andere lokale map met uw %1 + + + + OCC::FolderWizardLocalPath + + Choose + Added by us + Kies + + + + OCC::FolderWizardRemotePath + + Enter the name of the new folder to be created below "%1": + Removed trailing space + Voer de naam van de hieronder te maken nieuwe map in "%1": + + + + OCC::FolderWizardSelectiveSync + + Use virtual files instead of downloading content immediately %1 + Gebruik virtuele bestanden in plaats van direct downloaden content%1 + + + + OCC::GeneralSettings + + &Analysis data collection for needs-based design + Added by us + &Analyse van gegevensverzameling voor een op behoeften gebaseerd ontwerp + + + Ask for confirmation before synchronizing external storages + Has to be repaired in code + Vraag bevestiging voor synchronisatie van mappen op externe opslag + + + Ask for confirmation before synchronizing new folders larger than + Has to be repaired in code + Ask for confirmation before synchronizing new folders larger than + + + Automatically disable synchronisation of folders that overcome limit + Has to be repaired in code + Automatically disable synchronisation of folders that overcome limit + + + Data Protection + Added by us + Gegevensbescherming + + + More Information + Added by us + Meer informatie + + + Open Source Software + Added by us + Open source software + + + Privacy Policy + Added by us + Privacybeleid + + + Show sync folders in &Explorer's navigation pane + Show sync folders in &Explorer's navigation pane + + + Updates + Still used by us + Updates + + + https://wl.hidrive.com/easy/0004 + https://wl.hidrive.com/easy/0004 + + + https://wl.hidrive.com/easy/0005 + https://wl.hidrive.com/easy/0005 + + + https://wl.hidrive.com/easy/0006 + https://wl.hidrive.com/easy/0006 + + + https://wl.hidrive.com/easy/0007 + https://wl.hidrive.com/easy/0007 + + + + OCC::IgnoreListTableWidget + + Add a new ignore pattern: + modifed by us spanish + Voeg nieuw negeerpatroon toe: + + + Files or folders matching a pattern will not be synchronized. + +Items where deletion is allowed will be deleted if they prevent a directory from being removed. This is useful for meta data. + Modifed by us spanish + Bestanden of mappen die overeenkomen met dit patroon worden niet gesynchroniseerd. + +Objecten die verwijderd mogen worden, worden verwijderd als ze zouden verhinderen dat een map verwijderd wordt. Dit is nuttig voor metadata. + + + Ignore Pattern + Added by us + Patroon negeren + + + + OCC::NetworkSettings + + No proxy + Geen proxy + + + + OCC::PropagateLocalMkdir + + Could not create folder %1 + Trailing space in translation removed + Kon map %1 niet maken + + + + OCC::PropagateLocalRename + + Folder %1 cannot be renamed because of a local file or folder name clash! + Translated by us + Map %1 kan niet hernoemd worden vanwege een lokale bestands- of mapnaamclash! + + + + OCC::PropagateUploadFileCommon + + Upload of %1 exceeds the quota for the folder + Trailing space in translation removed + Upload van %1 overschrijdt het quotum voor de map + + + + OCC::sesSnackBar + + Success + Added by us + Succes + + + + OCC::SettingsDialog + + New account + Added by us + Nieuw account + + + + OCC::SslButton + + This connection is NOT secure as it is not encrypted. + Removed trailing linebreak + Deze verbinding is NIET veilig, omdat deze niet versleuteld is. + + + This connection is encrypted using %1 bit %2. + Removed trailing linebreak + Deze verbinding is versleuteld via %1 bit %2. + + + + OCC::Theme + + easy/0118 + Added by us + + + + + OCC::UpdateE2eeFolderMetadataJob + + Failed to finalize item. + Modifed by us + Failed to finalize item. + + + Failed to unlock encrypted folder. + Modifed by us + Kon versleutelde map niet ontgrendelen. + + + + OCC::UpdateE2eeFolderUsersMetadataJob + + Could not add or remove user %1 to access folder %2 + Translated by us + Kan gebruiker %1 niet toevoegen of verwijderen voor toegang tot map %2 + + + + OCC::User + + %1 notifications + Translated by us + %1 kennisgevingen + + + + OCC::WebFlowCredentials + + <b>You have been logged out of your account %1 at %2. Please login again.</b> + Modifed by us + <b>U bent afgemeld bij uw account %1 op %2. Log opnieuw in.</b> + + + + OwncloudAdvancedSetupPage + + <html><head/><body><p>If this box is checked, existing content in the local folder will be erased to start a clean sync from the server.</p><p>Do not check this if the local content should be uploaded to the servers folder.</p></body></html> + Modifed by us + <html><head/><body><p>Als deze checkbox is aangevinkt zullen bestaande bestanden in de lokale map worden gewist om een schone sync vanaf de server te starten.</p><p>Vink dit niet aan als de lokale bestanden naar de map op de server zouden moeten worden geüploadet.</p></body></html> + + + + progress + + Updated local virtual files metadata + Translated by us + Metagegevens van lokale virtuele bestanden bijgewerkt + + + updating local virtual files metadata + Translated by us + Metagegevens van lokale virtuele bestanden bijwerken + + + + QObject + + Could not create debug archive in selected location! + Translated by us + Kon geen debug-archief aanmaken op geselecteerde locatie! + + + Failed to create debug archive + Translated by us + Debug-archief is niet aangemaakt + + + The directory %1 cannot be part of your sync directory. Please choose another folder. + Added by us + De map %1 kan geen deel uitmaken van je synchronisatiemap. Kies een andere map. + + + + SesTrayHeader + + Open Nextcloud in browser + Added by us + HiDrive Next in browser openen + + + Website + Added by us + Website + + + + ShareDetailsPage + + Copy share link + modifed by us + Copy share link + + + Custom Permissions + Added by us + Aangepaste machtigingen + + + Enter the note to recipient + Added by us + Voer de notitie aan de ontvanger in + + + Share link copied! + modifed by us + Share link copied! + + + + TrayFoldersMenuButton + + Files + Added by us + Bestanden + + + \ No newline at end of file diff --git a/translation_scripts/sort.py b/translation_scripts/sort.py new file mode 100644 index 0000000000000..d9bceda712115 --- /dev/null +++ b/translation_scripts/sort.py @@ -0,0 +1,145 @@ +import sys +import subprocess +import xml.etree.ElementTree as ET + +def replace_in_file(file_path): + try: + # Open the file, read its contents, and replace the string + with open(file_path, 'r', encoding='utf-8', newline='') as file: + content = file.read() + + # Replace the old string with the new string + updated_content = content.replace("&quot;", """).replace("&apos;", "'") + + # Write the updated content back to the file + with open(file_path, 'w', encoding='utf-8', newline='') as file: + file.write(updated_content) + + # print(f"Successfully replaced '{old_string}' with '{new_string}' in '{file_path}'.") + except FileNotFoundError: + print(f"Error: File '{file_path}' not found.") + except Exception as e: + print(f"An error occurred: {e}") + +def replace_quotes_and_apostrophes(text): + """Replace quotes and apostrophes with their HTML encodings.""" + # return html.escape(text) + # return text.replace('"', '"') + return text.replace('"', '"').replace("'", ''') + +def process_file(input_file, output_file): + try: + # Parse the XML file + tree = ET.parse(input_file) + root = tree.getroot() + + # Process and tags + for tag in root.findall(".//source") + root.findall(".//translation") + root.findall(".//extracomment"): + if tag.text: # Check if there's any text inside the tag + tag.text = replace_quotes_and_apostrophes(tag.text) + + # Write the updated XML to the output file + with open(output_file, "w", encoding="utf-8", newline="\n") as outfile: + tree.write(outfile, encoding="unicode", xml_declaration=True) + + # with open(output_file, "wb", newline="") as f: + # tree.write(f, encoding="utf-8", xml_declaration=True) + # # tree.write(output_file, encoding="utf-8", xml_declaration=True) + except ET.ParseError as e: + print(f"Error parsing XML file: {e}") + except Exception as e: + print(f"An error occurred: {e}") + +def repair_file(file): + process_file(file, file) + replace_in_file(file) + +def sort_contexts(input_file, output_file): + # Parse the XML file + tree = ET.parse(input_file) + root = tree.getroot() + + # Find all elements + contexts = root.findall("context") + + # Sort elements based on the text inside their child + def get_name_text(ctx): + name_element = ctx.find("name") + # If is missing or its text is None, treat it as an empty string + return name_element.text.strip().lower() if name_element is not None and name_element.text else "" + + contexts.sort(key=get_name_text) + + # Remove all existing elements from the root + for context in root.findall("context"): + root.remove(context) + + # Append sorted elements back to the root + for context in contexts: + root.append(context) + + # Write the updated XML to the output file + tree.write(output_file, encoding="utf-8", xml_declaration=True) + + +def sort_messages(input_file, output_file): + # Parse the XML file + tree = ET.parse(input_file) + root = tree.getroot() + + # Traverse all tags + for context in root.findall("context"): + # Find all tags within the current + messages = context.findall("message") + + # Define the sorting key + def message_sort_key(message): + # Get the tag and its filename attribute + location = message.find("location") + filename = location.get("filename") if location is not None else "" + + # Get the text of the tag + source = message.find("source") + source_text = source.text.strip() if source is not None and source.text else "" + + # Return a tuple for sorting: primary (filename), secondary (source_text) + return (filename, source_text) + + # Sort messages by the defined key + messages.sort(key=message_sort_key) + + # Remove existing tags from the + for message in messages: + context.remove(message) + + # Re-add sorted tags to the + for message in messages: + context.append(message) + + # Write the updated XML to the output file + tree.write(output_file, encoding="utf-8", xml_declaration=True) + +def full_sort(file): + sort_contexts(file, file) + sort_messages(file, file) + +def sort_and_repair(file): + full_sort(file) + repair_file(file) + + +if __name__ == "__main__": + if len(sys.argv) == 1: + print("Usage: python sort.py ") + sys.exit() + if len(sys.argv) == 2: + input_xml = sys.argv[1] + output_xml = sys.argv[1] + else: + sys.exit() + + try: + sort_and_repair(input_xml) + print(f"{input_xml} sorted.") + except Exception as e: + print(f"An error occurred: {e}") \ No newline at end of file From c8f0a916f7f75214961fe689cc4162578f40fd70 Mon Sep 17 00:00:00 2001 From: Emil Bohleber Date: Thu, 6 Mar 2025 15:58:23 +0100 Subject: [PATCH 157/371] SES-286 add readme containing instructions --- translation_scripts/Readme.md | 94 +++++++++++++++++++++++++++++++++++ 1 file changed, 94 insertions(+) create mode 100644 translation_scripts/Readme.md diff --git a/translation_scripts/Readme.md b/translation_scripts/Readme.md new file mode 100644 index 0000000000000..96cba34a68080 --- /dev/null +++ b/translation_scripts/Readme.md @@ -0,0 +1,94 @@ +# Lokalisierung des HiDrive Next Clients auf Basis einer Diff-Datei + +Diese Anleitung beschreibt den Prozess zur Lokalisierung des HiDrive Next Clients mithilfe einer von uns erstellten Diff-Datei. Die Lokalisierung erfolgt auf Basis von `.ts`-Dateien, welche die Ressourcen der Anwendung in XML-Form enthalten. + +## Voraussetzungen + +- Nextcloud Stable Client Quellcode +- Python-Script `merge_translation.py` +- Qt Linguist Tools (insbesondere `lupdate`) + +## Allgemeines + +Die Lokalisierung erfolgt in mehreren Schritten. Für eine bessere Vergleichbarkeit werden der Dateiname (Location) und die Zeilennummer in den `.ts`-Dateien entfernt. Die `.ts`-Dateien müssen vor jedem Merge-Schritt sortiert werden. + +## Schritte + +### 1. Nextcloud-Grundstand aktualisieren + +- Den **unveränderten Nextcloud Stable Client** verwenden. +- Mit folgendem Befehl die `.ts`Dateien auf den neuesten Stand bringen: + +``` +C:\Craft64\bin\lupdate.exe -locations none -no-obsolete -no-ui-lines C:\repos\nc\nc-desktop\src\libsync\ C:\repos\nc\nc-desktop\src\gui\ C:\repos\nc\nc-desktop\src\csync\ C:\repos\nc\nc-desktop\src\common\ C:\repos\nc\nc-desktop\src\cmd\ -ts .\translations\client_de.ts .\translations\client_en.ts .\translations\client_en_GB.ts .\translations\client_fr.ts .\translations\client_es.ts .\translations\client_nl.ts +``` + +- Wichtig: **Obsolete Keys entfernen**. +- Die `.ts`Datei manuell per Skript sortieren. +- Datei in den **Translation Branch** legen und committen. + +### 2. Merge-Schritt 1 + +- Verwenden des Python-Skripts `merge_translation.py` mit Parameter `1`: + +``` +python3 merge_translation.py 1 +``` + +- Führt ein `lupdate` auf dem **HiDrive Next Client** aus. +- Obsolete Einträge werden **nicht gelöscht**. +- Neue Keys werden hinzugefügt. +- Obsolete-Markierungen werden entfernt und die Datei wird sortiert. +- Commit durchführen. + +### 3. Merge-Schritt 2 + +- Verwenden des Skripts mit Parameter `2`: + +``` +python3 merge_translation.py 2 +``` + +- Führt ein `lupdate` aus. +- **Obsolete Keys werden entfernt**. +- Die Datei enthält jetzt nur die aktuellen Keys (unsere Keys ohne Übersetzungen). +- Commit durchführen. + +### 4. Merge-Schritt 3 + +- Verwenden des Skripts mit Parameter `3`: + +``` +python3 merge_translation.py 3 +``` + +- Sprachabhängige Diff-Dateien werden in die `.ts`Dateien gemergt. +- Leere Keys werden mit Übersetzungen gefüllt. +- Obsolete Keys aus der Diff-Datei werden gegebenenfalls eingefügt. +- Commit durchführen. + +### 5. Merge-Schritt 4 + +- Verwenden des Skripts mit Parameter `4`: + +``` +python3 merge_translation.py 4 +``` + +- Ein weiteres `lupdate` wird ausgeführt. +- Heuristische Füllung von doppelten Keys mit unseren Übersetzungen. + +### 6. Merge-Schritt 5 + +- Verwenden des Skripts mit Parameter `5`: + +``` +python3 merge_translation.py 5 +``` + +- **Obsolete Keys werden endgültig entfernt**. +- Commit durchführen. + +## Abschluss + +Nach dem letzten Schritt sind die `.ts`-Dateien vollständig lokalisiert, enthalten unsere Keys und Übersetzungen und sind frei von obsolete Keys. \ No newline at end of file From c4905c999f49e2e74974b385566cbc07622dbf13 Mon Sep 17 00:00:00 2001 From: Emil Bohleber Date: Fri, 7 Mar 2025 17:15:06 +0100 Subject: [PATCH 158/371] SES-286 add branching description --- translation_scripts/Readme.md | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/translation_scripts/Readme.md b/translation_scripts/Readme.md index 96cba34a68080..bee27d6fe349f 100644 --- a/translation_scripts/Readme.md +++ b/translation_scripts/Readme.md @@ -8,6 +8,18 @@ Diese Anleitung beschreibt den Prozess zur Lokalisierung des HiDrive Next Client - Python-Script `merge_translation.py` - Qt Linguist Tools (insbesondere `lupdate`) +# Vorgehen bei Release + +Um in einem Release zu erstellen und einen valider PR zur übersetuen zu haben ist folgendes Vorgehen notwendig: + +0. (Optional) Einbeziehen unserer Änderungen aus Phrase. Dieser Schritt ist optional, da die Änderungen in der Regel schon in der Diff-Datei enthalten sind. Sollte es dennoch notwendig sein, können die Änderungen aus Phrase in die `.ts`-Diff-Dateien gemerged werden. +1. Es wird ein neuer `treanslations_` branch erstellt. Abgeleitet vom entsprechenden `develop_`. (z.b. translations_stable-3.16) +2. Durchlaufen der unter stehen den Schritte 1-6 +3. Erstellen eines "approved" PRs von `translations_` nach ``, also in Richtung der eigentlichen Basisversion von nc (z.B. [stable-3.16] Translations) +4. Der PR wird dann hoffentlich vom Brander gemerged + +Das Rebasedn der translations branches lohnt sich eigentlich nicht, weil der nextcloud master sich relativ jäufig Ändert, was zu vielen Konflikten führen würde. + ## Allgemeines Die Lokalisierung erfolgt in mehreren Schritten. Für eine bessere Vergleichbarkeit werden der Dateiname (Location) und die Zeilennummer in den `.ts`-Dateien entfernt. Die `.ts`-Dateien müssen vor jedem Merge-Schritt sortiert werden. From 046ab112c9f783ae4e5ab01043d5dda8bc540619 Mon Sep 17 00:00:00 2001 From: Emil Bohleber Date: Fri, 7 Mar 2025 17:24:04 +0100 Subject: [PATCH 159/371] SES-286 fix paths in lupdate call --- translation_scripts/Readme.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/translation_scripts/Readme.md b/translation_scripts/Readme.md index bee27d6fe349f..3af62be32ed1f 100644 --- a/translation_scripts/Readme.md +++ b/translation_scripts/Readme.md @@ -32,7 +32,7 @@ Die Lokalisierung erfolgt in mehreren Schritten. Für eine bessere Vergleichbark - Mit folgendem Befehl die `.ts`Dateien auf den neuesten Stand bringen: ``` -C:\Craft64\bin\lupdate.exe -locations none -no-obsolete -no-ui-lines C:\repos\nc\nc-desktop\src\libsync\ C:\repos\nc\nc-desktop\src\gui\ C:\repos\nc\nc-desktop\src\csync\ C:\repos\nc\nc-desktop\src\common\ C:\repos\nc\nc-desktop\src\cmd\ -ts .\translations\client_de.ts .\translations\client_en.ts .\translations\client_en_GB.ts .\translations\client_fr.ts .\translations\client_es.ts .\translations\client_nl.ts +C:\Craft64\bin\lupdate.exe -locations none -no-obsolete -no-ui-lines .\src\libsync\ .\src\gui\ .\src\csync\ .\src\common\ .\src\cmd\ -ts .\translations\client_de.ts .\translations\client_en.ts .\translations\client_en_GB.ts .\translations\client_fr.ts .\translations\client_es.ts .\translations\client_nl.ts ``` - Wichtig: **Obsolete Keys entfernen**. From 47a9c976377f5910f838f2dc570cc1706f661c3d Mon Sep 17 00:00:00 2001 From: Emil Bohleber Date: Fri, 7 Mar 2025 17:28:14 +0100 Subject: [PATCH 160/371] SES-286 add stash workflow --- translation_scripts/Readme.md | 1 + 1 file changed, 1 insertion(+) diff --git a/translation_scripts/Readme.md b/translation_scripts/Readme.md index 3af62be32ed1f..6e1dc5d7678e3 100644 --- a/translation_scripts/Readme.md +++ b/translation_scripts/Readme.md @@ -29,6 +29,7 @@ Die Lokalisierung erfolgt in mehreren Schritten. Für eine bessere Vergleichbark ### 1. Nextcloud-Grundstand aktualisieren - Den **unveränderten Nextcloud Stable Client** verwenden. +- Am Einfachsten ist es den branch auschecken, den befehl laufen lassen, stashen und dann wieder auf den alten branch wechseln. Stash poppen. - Mit folgendem Befehl die `.ts`Dateien auf den neuesten Stand bringen: ``` From d8c57e76dcf62fc899235a555b266be634df1982 Mon Sep 17 00:00:00 2001 From: Emil Bohleber Date: Wed, 12 Mar 2025 14:30:18 +0100 Subject: [PATCH 161/371] SES-340 wrap string in QString so params work --- src/gui/folder.cpp | 4 ++-- src/gui/sslbutton.cpp | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/src/gui/folder.cpp b/src/gui/folder.cpp index 06703b4013fbb..d3aee549b7d6b 100644 --- a/src/gui/folder.cpp +++ b/src/gui/folder.cpp @@ -1408,9 +1408,9 @@ void Folder::slotNewBigFolderDiscovered(const QString &newF, bool isExternal) journal->setSelectiveSyncList(SyncJournalDb::SelectiveSyncUndecidedList, undecidedList); emit newBigFolderDiscovered(newFolder); } - QString message = !isExternal ? (tr("A new folder larger than %1 MB has been added: %2.") + "\n" + QString message = !isExternal ? QString(tr("A new folder larger than %1 MB has been added: %2.") + "\n") .arg(ConfigFile().newBigFolderSizeLimit().second) - .arg(newF)) + .arg(newF) : (tr("A folder from an external storage has been added.") + "\n"); message += tr("Please go in the settings to select it if you wish to download it."); diff --git a/src/gui/sslbutton.cpp b/src/gui/sslbutton.cpp index 0942cc5a13dbb..859002c014228 100644 --- a/src/gui/sslbutton.cpp +++ b/src/gui/sslbutton.cpp @@ -171,7 +171,7 @@ void SslButton::updateAccountState(AccountState *accountState) if (account->url().scheme() == QLatin1String("https")) { setIcon(QIcon(QLatin1String(":/client/theme/lock-https.svg"))); QSslCipher cipher = account->_sessionCipher; - setToolTip((tr("This connection is encrypted using %1 bit %2.") + "\n").arg(cipher.usedBits()).arg(cipher.name())); + setToolTip(QString(tr("This connection is encrypted using %1 bit %2.") + "\n").arg(cipher.usedBits()).arg(cipher.name())); } else { setIcon(QIcon(QLatin1String(":/client/theme/lock-broken.svg"))); setToolTip(tr("This connection is NOT secure as it is not encrypted.") + "\n"); From adfe1b7a3525ab797181ba04023532600a8d9a20 Mon Sep 17 00:00:00 2001 From: Emil Bohleber Date: Wed, 12 Mar 2025 14:34:00 +0100 Subject: [PATCH 162/371] Adjusted every icon to use the new correct name --- IONOS.cmake | 5 ++--- ...idrivenext-icon.svg => ionos_hidrive_next-icon.svg} | 0 ...acOS-icon.svg => ionos_hidrive_next-macOS-icon.svg} | 0 theme/black/ionos_hidrive_next-macOS-sidebar.svg | 10 ++++++++++ ...acOS-icon.svg => ionos_hidrive_next-macOS-icon.svg} | 0 theme/colored/ionos_hidrive_next-macOS-sidebar.svg | 10 ++++++++++ theme/colored/ionoshidrivenext-icon.svg | 4 ---- theme/white/hidrivenext-icon.svg | 4 ---- .../ionos_hidrive_next-icon.svg} | 0 ...acOS-icon.svg => ionos_hidrive_next-macOS-icon.svg} | 0 theme/white/ionos_hidrive_next-macOS-sidebar.svg | 10 ++++++++++ 11 files changed, 32 insertions(+), 11 deletions(-) rename theme/black/{hidrivenext-icon.svg => ionos_hidrive_next-icon.svg} (100%) rename theme/black/{hidrivenext-macOS-icon.svg => ionos_hidrive_next-macOS-icon.svg} (100%) create mode 100644 theme/black/ionos_hidrive_next-macOS-sidebar.svg rename theme/colored/{hidrivenext-macOS-icon.svg => ionos_hidrive_next-macOS-icon.svg} (100%) create mode 100644 theme/colored/ionos_hidrive_next-macOS-sidebar.svg delete mode 100644 theme/colored/ionoshidrivenext-icon.svg delete mode 100644 theme/white/hidrivenext-icon.svg rename theme/{colored/hidrivenext-icon.svg => white/ionos_hidrive_next-icon.svg} (100%) rename theme/white/{hidrivenext-macOS-icon.svg => ionos_hidrive_next-macOS-icon.svg} (100%) create mode 100644 theme/white/ionos_hidrive_next-macOS-sidebar.svg diff --git a/IONOS.cmake b/IONOS.cmake index 831d930846971..dff1920b35123 100644 --- a/IONOS.cmake +++ b/IONOS.cmake @@ -8,11 +8,10 @@ set( APPLICATION_VENDOR "IONOS SE" ) set( APPLICATION_UPDATE_URL "https://customerupdates.nextcloud.com/client/" CACHE STRING "URL for updater" ) set( APPLICATION_HELP_URL "" CACHE STRING "URL for the help menu" ) -if(APPLE AND APPLICATION_NAME STREQUAL "IONOS HiDrive Next" AND EXISTS "${CMAKE_SOURCE_DIR}/theme/colored/ionoshidrivenext-macOS-icon.svg") - set( APPLICATION_ICON_NAME "ionoshidrivenext-macOS" ) +if(APPLE AND APPLICATION_NAME STREQUAL "IONOS HiDrive Next") + set( APPLICATION_ICON_NAME "ionos_hidrive_next-macOS" ) message("Using macOS-specific application icon: ${APPLICATION_ICON_NAME}") else() - # set( APPLICATION_ICON_NAME "${APPLICATION_SHORTNAME}" ) set( APPLICATION_ICON_NAME "ionos_hidrive_next" ) endif() diff --git a/theme/black/hidrivenext-icon.svg b/theme/black/ionos_hidrive_next-icon.svg similarity index 100% rename from theme/black/hidrivenext-icon.svg rename to theme/black/ionos_hidrive_next-icon.svg diff --git a/theme/black/hidrivenext-macOS-icon.svg b/theme/black/ionos_hidrive_next-macOS-icon.svg similarity index 100% rename from theme/black/hidrivenext-macOS-icon.svg rename to theme/black/ionos_hidrive_next-macOS-icon.svg diff --git a/theme/black/ionos_hidrive_next-macOS-sidebar.svg b/theme/black/ionos_hidrive_next-macOS-sidebar.svg new file mode 100644 index 0000000000000..4bb3ad7670764 --- /dev/null +++ b/theme/black/ionos_hidrive_next-macOS-sidebar.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/theme/colored/hidrivenext-macOS-icon.svg b/theme/colored/ionos_hidrive_next-macOS-icon.svg similarity index 100% rename from theme/colored/hidrivenext-macOS-icon.svg rename to theme/colored/ionos_hidrive_next-macOS-icon.svg diff --git a/theme/colored/ionos_hidrive_next-macOS-sidebar.svg b/theme/colored/ionos_hidrive_next-macOS-sidebar.svg new file mode 100644 index 0000000000000..4bb3ad7670764 --- /dev/null +++ b/theme/colored/ionos_hidrive_next-macOS-sidebar.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/theme/colored/ionoshidrivenext-icon.svg b/theme/colored/ionoshidrivenext-icon.svg deleted file mode 100644 index e768c954e7e46..0000000000000 --- a/theme/colored/ionoshidrivenext-icon.svg +++ /dev/null @@ -1,4 +0,0 @@ - - - - diff --git a/theme/white/hidrivenext-icon.svg b/theme/white/hidrivenext-icon.svg deleted file mode 100644 index e768c954e7e46..0000000000000 --- a/theme/white/hidrivenext-icon.svg +++ /dev/null @@ -1,4 +0,0 @@ - - - - diff --git a/theme/colored/hidrivenext-icon.svg b/theme/white/ionos_hidrive_next-icon.svg similarity index 100% rename from theme/colored/hidrivenext-icon.svg rename to theme/white/ionos_hidrive_next-icon.svg diff --git a/theme/white/hidrivenext-macOS-icon.svg b/theme/white/ionos_hidrive_next-macOS-icon.svg similarity index 100% rename from theme/white/hidrivenext-macOS-icon.svg rename to theme/white/ionos_hidrive_next-macOS-icon.svg diff --git a/theme/white/ionos_hidrive_next-macOS-sidebar.svg b/theme/white/ionos_hidrive_next-macOS-sidebar.svg new file mode 100644 index 0000000000000..4bb3ad7670764 --- /dev/null +++ b/theme/white/ionos_hidrive_next-macOS-sidebar.svg @@ -0,0 +1,10 @@ + + + + + + + + + + From a0b31162af1d4ab2fc0d0b87e9a373cb1c047ecf Mon Sep 17 00:00:00 2001 From: Emil Bohleber Date: Wed, 12 Mar 2025 15:02:38 +0100 Subject: [PATCH 163/371] SES-340 hardcode names in maccrafter --- admin/osx/mac-crafter/Sources/main.swift | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/admin/osx/mac-crafter/Sources/main.swift b/admin/osx/mac-crafter/Sources/main.swift index 11338ff51cf8b..3b55ba0b64c28 100644 --- a/admin/osx/mac-crafter/Sources/main.swift +++ b/admin/osx/mac-crafter/Sources/main.swift @@ -56,7 +56,7 @@ struct Build: ParsableCommand { var buildType = "RelWithDebInfo" @Option(name: [.long], help: "The application's branded name.") - var appName = "Nextcloud" + var appName = "IONOS HiDrive Next" @Option(name: [.long], help: "Sparkle download URL.") var sparkleDownloadUrl = @@ -286,7 +286,7 @@ struct Codesign: ParsableCommand { static let configuration = CommandConfiguration(abstract: "Codesigning script for the client.") @Argument(help: "Path to the Nextcloud Desktop Client app bundle.") - var appBundlePath = "\(FileManager.default.currentDirectoryPath)/product/Nextcloud.app" + var appBundlePath = "\(FileManager.default.currentDirectoryPath)/product/IONOS HiDrive Next.app" @Option(name: [.short, .long], help: "Code signing identity for desktop client and libs.") var codeSignIdentity: String @@ -323,7 +323,7 @@ struct Package: ParsableCommand { var craftBlueprintName = "nextcloud-client" @Option(name: [.long], help: "The application's branded name.") - var appName = "Nextcloud" + var appName = "IONOS HiDrive Next" @Option(name: [.long], help: "Apple ID, used for notarisation.") var appleId: String? From ed5759c34f33b70b29dd23f115618f1ac1550103 Mon Sep 17 00:00:00 2001 From: Emil Bohleber Date: Wed, 12 Mar 2025 16:53:28 +0100 Subject: [PATCH 164/371] SES-340 use IONOS.cmake --- CMakeLists.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 3798b9a3d85ef..84b0a76e81c77 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -23,7 +23,7 @@ set(CMAKE_XCODE_ATTRIBUTE_ENABLE_HARDENED_RUNTIME YES) set(BIN_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}/bin") -include(${CMAKE_SOURCE_DIR}/NEXTCLOUD.cmake) +include(${CMAKE_SOURCE_DIR}/IONOS.cmake) set(QT_VERSION_MAJOR "6") set(REQUIRED_QT_VERSION "6.8.0") From 70fdea0d1fe13d1257a82634061f7e8fdc4778db Mon Sep 17 00:00:00 2001 From: Emil Bohleber Date: Fri, 14 Mar 2025 18:50:59 +0100 Subject: [PATCH 165/371] SES-340 use IONOS.cmake in CPack --- CPackOptions.cmake.in | 2 +- NextcloudCPack.cmake | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/CPackOptions.cmake.in b/CPackOptions.cmake.in index 109af43d21514..ac7e214aec20b 100644 --- a/CPackOptions.cmake.in +++ b/CPackOptions.cmake.in @@ -10,7 +10,7 @@ endif(CPACK_GENERATOR MATCHES "NSIS") set( CMAKE_SOURCE_DIR @CMAKE_SOURCE_DIR@ ) set( CMAKE_BINARY_DIR @CMAKE_BINARY_DIR@ ) -include("${CMAKE_SOURCE_DIR}/NEXTCLOUD.cmake") +include("${CMAKE_SOURCE_DIR}/IONOS.cmake") set( CRASHREPORTER_EXECUTABLE @CRASHREPORTER_EXECUTABLE@) diff --git a/NextcloudCPack.cmake b/NextcloudCPack.cmake index 0682090c06d4c..db2dcf5ea2e50 100644 --- a/NextcloudCPack.cmake +++ b/NextcloudCPack.cmake @@ -2,7 +2,7 @@ include( InstallRequiredSystemLibraries ) set( CPACK_PACKAGE_CONTACT "Dominik Schmidt " ) -include("${CMAKE_SOURCE_DIR}/NEXTCLOUD.cmake") +include("${CMAKE_SOURCE_DIR}/IONOS.cmake") include( VERSION.cmake ) set( CPACK_PACKAGE_VERSION_MAJOR ${MIRALL_VERSION_MAJOR} ) From 10704ea7cc25f1838880e8607422f57f6c030e14 Mon Sep 17 00:00:00 2001 From: Emil Bohleber Date: Fri, 14 Mar 2025 18:51:24 +0100 Subject: [PATCH 166/371] SES-340 fix merge bug in file provider --- src/gui/macOS/fileproviderdomainmanager_mac.mm | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/gui/macOS/fileproviderdomainmanager_mac.mm b/src/gui/macOS/fileproviderdomainmanager_mac.mm index 9d615d1cdb87b..898c1a01b755e 100644 --- a/src/gui/macOS/fileproviderdomainmanager_mac.mm +++ b/src/gui/macOS/fileproviderdomainmanager_mac.mm @@ -29,7 +29,8 @@ namespace OCC { -Q_LOGGING_CATEGORY(lcMacFileProviderDomainManager, "nextcloud.gui.macfileproviderdomainmanager", QtInfoMsg) +Q_LOGGING_CATEGORY(lcMacFileProviderDomainManager, "hidrivenext.gui.macfileproviderdomainmanager", QtInfoMsg) + } @@ -138,7 +139,6 @@ inline QString accountIdFromDomain(NSFileProviderDomain * const domain) namespace OCC { -Q_LOGGING_CATEGORY(lcMacFileProviderDomainManager, "hidrivenext.gui.macfileproviderdomainmanager", QtInfoMsg) namespace Mac { From beb60b08a1e678777153fe65d53490ddee707443 Mon Sep 17 00:00:00 2001 From: Kevin Beraz Date: Thu, 17 Apr 2025 09:29:24 +0200 Subject: [PATCH 167/371] [SES-359] replaced app icon for windows and macOS --- theme/colored/ionos_hidrive_next-icon.svg | 19 ++++++++++-- .../colored/ionos_hidrive_next-macOS-icon.svg | 30 +++++++++++++++---- 2 files changed, 40 insertions(+), 9 deletions(-) diff --git a/theme/colored/ionos_hidrive_next-icon.svg b/theme/colored/ionos_hidrive_next-icon.svg index e768c954e7e46..45cf3e0e8243c 100644 --- a/theme/colored/ionos_hidrive_next-icon.svg +++ b/theme/colored/ionos_hidrive_next-icon.svg @@ -1,4 +1,17 @@ - - - + + + + + + + + + + + + + + + + diff --git a/theme/colored/ionos_hidrive_next-macOS-icon.svg b/theme/colored/ionos_hidrive_next-macOS-icon.svg index 09456b02f9815..c7e0c87b90b2d 100644 --- a/theme/colored/ionos_hidrive_next-macOS-icon.svg +++ b/theme/colored/ionos_hidrive_next-macOS-icon.svg @@ -1,9 +1,27 @@ - - + + + + + + + + + + + + + + + + + + - - - - + + + + + + From 0dcba65a511c39a67b1e67f6a979a9e69fcaac72 Mon Sep 17 00:00:00 2001 From: Kevin Beraz Date: Thu, 17 Apr 2025 09:41:45 +0200 Subject: [PATCH 168/371] [SES-359] replace app icons in black and white folder --- theme/black/ionos_hidrive_next-icon.svg | 19 ++++++++++-- theme/black/ionos_hidrive_next-macOS-icon.svg | 30 +++++++++++++++---- theme/white/ionos_hidrive_next-icon.svg | 19 ++++++++++-- theme/white/ionos_hidrive_next-macOS-icon.svg | 30 +++++++++++++++---- 4 files changed, 80 insertions(+), 18 deletions(-) diff --git a/theme/black/ionos_hidrive_next-icon.svg b/theme/black/ionos_hidrive_next-icon.svg index e768c954e7e46..45cf3e0e8243c 100644 --- a/theme/black/ionos_hidrive_next-icon.svg +++ b/theme/black/ionos_hidrive_next-icon.svg @@ -1,4 +1,17 @@ - - - + + + + + + + + + + + + + + + + diff --git a/theme/black/ionos_hidrive_next-macOS-icon.svg b/theme/black/ionos_hidrive_next-macOS-icon.svg index 09456b02f9815..c7e0c87b90b2d 100644 --- a/theme/black/ionos_hidrive_next-macOS-icon.svg +++ b/theme/black/ionos_hidrive_next-macOS-icon.svg @@ -1,9 +1,27 @@ - - + + + + + + + + + + + + + + + + + + - - - - + + + + + + diff --git a/theme/white/ionos_hidrive_next-icon.svg b/theme/white/ionos_hidrive_next-icon.svg index e768c954e7e46..45cf3e0e8243c 100644 --- a/theme/white/ionos_hidrive_next-icon.svg +++ b/theme/white/ionos_hidrive_next-icon.svg @@ -1,4 +1,17 @@ - - - + + + + + + + + + + + + + + + + diff --git a/theme/white/ionos_hidrive_next-macOS-icon.svg b/theme/white/ionos_hidrive_next-macOS-icon.svg index 09456b02f9815..c7e0c87b90b2d 100644 --- a/theme/white/ionos_hidrive_next-macOS-icon.svg +++ b/theme/white/ionos_hidrive_next-macOS-icon.svg @@ -1,9 +1,27 @@ - - + + + + + + + + + + + + + + + + + + - - - - + + + + + + From a30048926217316cac277e0885ddf8626ae922e1 Mon Sep 17 00:00:00 2001 From: Kevin Beraz Date: Tue, 28 Jan 2025 13:56:26 +0100 Subject: [PATCH 169/371] SES-284 add flag to cmake command to use custom sidebar icon on macOS --- admin/osx/ionos_macmaker/start.sh | 1 + 1 file changed, 1 insertion(+) diff --git a/admin/osx/ionos_macmaker/start.sh b/admin/osx/ionos_macmaker/start.sh index 978a921c53138..8874a882d7f42 100755 --- a/admin/osx/ionos_macmaker/start.sh +++ b/admin/osx/ionos_macmaker/start.sh @@ -106,6 +106,7 @@ cmake -S $REPO_ROOT_DIR/ -B $BUILD_DIR \ -DCMAKE_PREFIX_PATH=$CRAFT_DIR \ -DSPARKLE_LIBRARY=$SPARKLE_DIR/Sparkle.framework \ -DSOCKETAPI_TEAM_IDENTIFIER_PREFIX="$TEAM_IDENTIFIER." \ + -DARG_SIDEBAR_ICONS=ON \ make install -C $BUILD_DIR -j4 From 89b4c72f5813074b1d43ce75a5d49c99e79302c6 Mon Sep 17 00:00:00 2001 From: Emil Bohleber Date: Wed, 29 Jan 2025 11:57:48 +0100 Subject: [PATCH 170/371] SES-290 set release suffix to stable --- admin/osx/ionos_macmaker/start.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/admin/osx/ionos_macmaker/start.sh b/admin/osx/ionos_macmaker/start.sh index 8874a882d7f42..18cd34c916ccf 100755 --- a/admin/osx/ionos_macmaker/start.sh +++ b/admin/osx/ionos_macmaker/start.sh @@ -99,7 +99,7 @@ cmake -S $REPO_ROOT_DIR/ -B $BUILD_DIR \ -DBUILD_TESTING=OFF \ -DBUILD_UPDATER=$(if [ $BUILD_UPDATER == true ]; then echo "ON"; else echo "OFF"; fi) \ -DMIRALL_VERSION_BUILD=`date +%Y%m%d` \ - -DMIRALL_VERSION_SUFFIX="release" \ + -DMIRALL_VERSION_SUFFIX="stable" \ -DBUILD_OWNCLOUD_OSX_BUNDLE=ON \ -DCMAKE_OSX_ARCHITECTURES=x86_64 \ -DBUILD_FILE_PROVIDER_MODULE=ON \ From 56b067d910c517e9d00ea15f46e2ecd616c9bb7a Mon Sep 17 00:00:00 2001 From: Emil Bohleber Date: Wed, 12 Feb 2025 16:21:01 +0100 Subject: [PATCH 171/371] SES-209 add adr --- doc/ADR/20250212_UseCostomizationService.md | 69 +++++++++++++++++++++ 1 file changed, 69 insertions(+) create mode 100644 doc/ADR/20250212_UseCostomizationService.md diff --git a/doc/ADR/20250212_UseCostomizationService.md b/doc/ADR/20250212_UseCostomizationService.md new file mode 100644 index 0000000000000..2131d2188ea8f --- /dev/null +++ b/doc/ADR/20250212_UseCostomizationService.md @@ -0,0 +1,69 @@ +# Use Customization Service + +## Status + +accepted + +## Context + +Nextcloud (NC) offers a customization service. The service is a Nextcloud white-labeling offering. It allows customers and their forks to be redesigned according to their own specifications. There are two levels. + +### Brander + +Here, the icons, names, and technical aspects are being adjusted to release a simply redesigned, color-enhanced Nextcloud. + +### Actual Customization Service + +This will integrate deeper changes into the branded client. This could be anything, in principle. + +For this to work we need to create Pull-Requests against the branches of the nextcloud repo. These pull requests can not depend on the same code line. + +More information can be read [here](https://portal.nextcloud.com/article/Branding/Customization-Service) + +### Workflow on the Repo + +A PR always has a source branch and a target branch. The target branch must be `master` in our case. Source branches can follow our established workflow. However, there are some conditions: + +- Concurrent work on different features must be possible. +- Local builds must be possible for testing purposes. +- A nightly/onPush build might be desirable. +- It must be ensured that everyone has an up-to-date status with all PRs. + +There are two possible Solutions: + +1. We use one Pull-Request containing all changes. +2. We use multiple Pull requests containing changes grouped by files. + +## Decision + +We will use only one PR containing all our changes. + +At this point in time, it would be too much work to split all Changes into separate branches/PRs. + +## Implementation Details + +### Branching + +- We use the master branch only for pulling the updated nc/master branch. +- We have a separate develop branch to develop changes. +- We create a PR to nc/masetr from develop. + +## Consequences + +### Positive + +- We can use our existing git-workflow +- We have a simple repo-structure with only 2 really needed branches +- It is easy to build locally, because all changes are on one branch +- Less Branches to backport +- We do not need to sort every change to a separate PR + +### Negative + +- Merge conflicts can be complex +- The PR will contain all the changes, this could be overwhelming to check + +### Further Thoughts + +- We need to see how this works in practice +- This is not final \ No newline at end of file From 62d59de281e3ccf8af52363ac912e6bea32110d6 Mon Sep 17 00:00:00 2001 From: Emil Bohleber Date: Wed, 12 Feb 2025 16:21:15 +0100 Subject: [PATCH 172/371] SES-207 lint other adr --- doc/ADR/20241007_TrackingWithGA4.md | 1 + 1 file changed, 1 insertion(+) diff --git a/doc/ADR/20241007_TrackingWithGA4.md b/doc/ADR/20241007_TrackingWithGA4.md index 522a6f3c87c79..8422656e3ddc1 100644 --- a/doc/ADR/20241007_TrackingWithGA4.md +++ b/doc/ADR/20241007_TrackingWithGA4.md @@ -28,4 +28,5 @@ GAnalytics acts as an intermediary between the outer layer (DataCollectionWrappe The GAnalyticsWorker contains a queue, a message loop, and a QNetworkAccessManager. At fixed intervals, the queue is checked for tracking calls, which are then sent to the GA4 interface. If multiple calls are present, the connection is kept alive until all tracking calls have been sent. ## Consequences + This approach allows client-side tracking using GA4, bridging the gap between web and desktop tracking. The modular design simplifies maintenance by separating tracking logic from communication handling. Usage is straightforward; the application simply calls the DataCollectionWrapper at points where tracking should occur, ensuring that actions and events are recorded seamlessly. However, relying on a reverse-engineered solution introduces risks of future incompatibility with GA4 updates. Managing a queue and network connection adds complexity, and there might be latency when batching tracking calls. Overall, the solution balances functionality with maintainability but carries some technical risks. From e8c1887b800bf6fa869d41defaee221cdffb7d1f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Christopher=20H=C3=A4tty?= Date: Thu, 27 Feb 2025 09:13:41 +0100 Subject: [PATCH 173/371] SES-332 Removed trailing "/" and used localization for urls --- src/gui/generalsettings.cpp | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/gui/generalsettings.cpp b/src/gui/generalsettings.cpp index 139ff844bdd02..855264ea13ee7 100644 --- a/src/gui/generalsettings.cpp +++ b/src/gui/generalsettings.cpp @@ -354,22 +354,22 @@ void GeneralSettings::connectToTracking() void GeneralSettings::slotOpenMoreInformationLink() { - QDesktopServices::openUrl(QUrl("https://wl.hidrive.com/easy/0007/")); + QDesktopServices::openUrl(QUrl(tr("https://wl.hidrive.com/easy/0007"))); } void GeneralSettings::slotOpenLegalNoticeLink() { - QDesktopServices::openUrl(QUrl("https://wl.hidrive.com/easy/0004/")); + QDesktopServices::openUrl(QUrl(tr("https://wl.hidrive.com/easy/0004"))); } void GeneralSettings::slotOpenOpenSourceLink() { - QDesktopServices::openUrl(QUrl("https://wl.hidrive.com/easy/0006")); + QDesktopServices::openUrl(QUrl(tr("https://wl.hidrive.com/easy/0006"))); } void GeneralSettings::slotOpenPrivacyLink() { - QDesktopServices::openUrl(QUrl("https://wl.hidrive.com/easy/0005/")); + QDesktopServices::openUrl(QUrl(tr("https://wl.hidrive.com/easy/0005"))); } QSize GeneralSettings::sizeHint() const From 606fea6da104916805b646c2ba097c07904f46e4 Mon Sep 17 00:00:00 2001 From: Emil Bohleber Date: Thu, 27 Feb 2025 18:24:27 +0100 Subject: [PATCH 174/371] SES-209 use new naming scheme in start.sh --- admin/osx/ionos_macmaker/start.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/admin/osx/ionos_macmaker/start.sh b/admin/osx/ionos_macmaker/start.sh index 18cd34c916ccf..09a6fb896f469 100755 --- a/admin/osx/ionos_macmaker/start.sh +++ b/admin/osx/ionos_macmaker/start.sh @@ -41,7 +41,7 @@ done export MACOSX_DEPLOYMENT_TARGET=10.15 # Some variables -PRODUCT_NAME="HiDrive Next" +PRODUCT_NAME="IONOS HiDrive Next" REPO_ROOT_DIR="../../.." CRAFT_DIR=~/Craft64 PRODUCT_DIR=$BUILD_DIR/product From 06b1d50c6ca371cc43139381c190f181f47070b0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Christopher=20H=C3=A4tty?= Date: Tue, 4 Mar 2025 11:26:30 +0100 Subject: [PATCH 175/371] Reverted changes to Installer banner & dialog.bmp --- admin/win/msi/gui/banner.bmp | Bin 85894 -> 85978 bytes admin/win/msi/gui/dialog.bmp | Bin 464774 -> 619346 bytes 2 files changed, 0 insertions(+), 0 deletions(-) diff --git a/admin/win/msi/gui/banner.bmp b/admin/win/msi/gui/banner.bmp index 7eba2ce1a7700f2010105784749f73ba19ef0247..5270a99dea084175b16de1eb879f42cbc2d9bea2 100644 GIT binary patch delta 160 zcmZph&w6Vi!jg5_k)6&w^fS7IO%$c0FT-TX3V)~5``WYBlz?_XbTU{mwY}x#m^@$yRdLlOf DQ!g+p literal 85894 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 Apa1{> diff --git a/admin/win/msi/gui/dialog.bmp b/admin/win/msi/gui/dialog.bmp index f548941594d7772eb466a98a2a3b3e6e037548a0..b870b472556dfb47177bd600b204c1453d492fd6 100644 GIT binary patch literal 619346 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 F{C`t&OI82? literal 464774 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 From 768e9163d90f1474a5f7ca94746b6439d4bc8fda Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Christopher=20H=C3=A4tty?= Date: Tue, 4 Mar 2025 14:04:11 +0100 Subject: [PATCH 176/371] SES-331 renamed VisualElementsManifest, it must have the same name as the application --- ...Manifest.xml => ionos_hidrive_next.VisualElementsManifest.xml} | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename theme/{hidrivenext.VisualElementsManifest.xml => ionos_hidrive_next.VisualElementsManifest.xml} (100%) diff --git a/theme/hidrivenext.VisualElementsManifest.xml b/theme/ionos_hidrive_next.VisualElementsManifest.xml similarity index 100% rename from theme/hidrivenext.VisualElementsManifest.xml rename to theme/ionos_hidrive_next.VisualElementsManifest.xml From 439e8e00bfe5cd5a036d407db2ce0e29d5299018 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Christopher=20H=C3=A4tty?= Date: Tue, 4 Mar 2025 14:04:57 +0100 Subject: [PATCH 177/371] SES-311 changed GUIDs to match Brander/CS GUIDs --- IONOS.cmake | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/IONOS.cmake b/IONOS.cmake index dff1920b35123..843f9d28c074f 100644 --- a/IONOS.cmake +++ b/IONOS.cmake @@ -61,20 +61,20 @@ option( APPLICATION_WIZARD_USE_CUSTOM_LOGO "Use the logo from ':/client/theme/co # if(WIN32) # Context Menu - set( WIN_SHELLEXT_CONTEXT_MENU_GUID "{28F7B423-F04D-4035-9163-742ABAB2C09D}" ) + set( WIN_SHELLEXT_CONTEXT_MENU_GUID "{6B16FF7B-F242-4CE3-8FB9-F06EF127E0DC}" ) # Overlays - set( WIN_SHELLEXT_OVERLAY_GUID_ERROR "{69E48F56-3877-4D15-BE6C-148D20D9AD39}" ) - set( WIN_SHELLEXT_OVERLAY_GUID_OK "{66163328-2F7D-4727-8557-07AA1A4951D4}" ) - set( WIN_SHELLEXT_OVERLAY_GUID_OK_SHARED "{FE8E7808-F772-402A-96C5-5998ADAE34B7}" ) - set( WIN_SHELLEXT_OVERLAY_GUID_SYNC "{BE95EBD1-B334-4D70-8797-F3827DBA7884}" ) - set( WIN_SHELLEXT_OVERLAY_GUID_WARNING "{F5D52817-2813-4CF7-94E6-4D58D96E5EB3}" ) + set( WIN_SHELLEXT_OVERLAY_GUID_ERROR "{243D887B-9F74-41DD-BACA-BC5501AF10AC}" ) + set( WIN_SHELLEXT_OVERLAY_GUID_OK "{2D88D499-3272-4A76-84BF-D252254B40D6}" ) + set( WIN_SHELLEXT_OVERLAY_GUID_OK_SHARED "{7BEF6B56-5B5B-4284-A70C-56D62254C97A}" ) + set( WIN_SHELLEXT_OVERLAY_GUID_SYNC "{5F2F493D-A683-426F-925E-4CA25F17C4A9}" ) + set( WIN_SHELLEXT_OVERLAY_GUID_WARNING "{7F256BB6-29D2-4E40-A6C4-E5E756E64C82}" ) # MSI Upgrade Code (without brackets) - set( WIN_MSI_UPGRADE_CODE "DB5332BA-8B5B-43A9-8594-48263DE4E7EA" ) + set( WIN_MSI_UPGRADE_CODE "6C9E5670-E8A9-4BBD-9BDF-D003794AC177" ) # Windows build options - option( BUILD_WIN_MSI "Build MSI scripts and helper DLL" OFF ) + option( BUILD_WIN_MSI "Build MSI scripts and helper DLL" ON ) option( BUILD_WIN_TOOLS "Build Win32 migration tools" OFF ) endif() From bb5be71b71d5f8f02c73cd3e78821544080f3954 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Christopher=20H=C3=A4tty?= Date: Mon, 10 Mar 2025 12:11:50 +0100 Subject: [PATCH 178/371] Changed URL to pre-live-system --- IONOS.cmake | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/IONOS.cmake b/IONOS.cmake index 843f9d28c074f..6914d2fe84b69 100644 --- a/IONOS.cmake +++ b/IONOS.cmake @@ -16,7 +16,7 @@ else() endif() set( APPLICATION_ICON_SET "SVG" ) -set( APPLICATION_SERVER_URL "https://easy-qa-1.nextcloud-ionos.com" CACHE STRING "URL for the server to use. If entered, the UI field will be pre-filled with it" ) +set( APPLICATION_SERVER_URL "https://storage.ionos.fr" CACHE STRING "URL for the server to use. If entered, the UI field will be pre-filled with it" ) set( APPLICATION_SERVER_URL_ENFORCE ON ) # If set and APPLICATION_SERVER_URL is defined, the server can only connect to the pre-defined URL set( APPLICATION_REV_DOMAIN "com.ionos.hidrivenext.desktopclient" ) # set( APPLICATION_VIRTUALFILE_SUFFIX "nextcloud" CACHE STRING "Virtual file suffix (not including the .)") @@ -74,7 +74,7 @@ if(WIN32) set( WIN_MSI_UPGRADE_CODE "6C9E5670-E8A9-4BBD-9BDF-D003794AC177" ) # Windows build options - option( BUILD_WIN_MSI "Build MSI scripts and helper DLL" ON ) + option( BUILD_WIN_MSI "Build MSI scripts and helper DLL" OFF ) option( BUILD_WIN_TOOLS "Build Win32 migration tools" OFF ) endif() From cbaf3712157e395f78df0747c3a318310e3edb36 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Christopher=20H=C3=A4tty?= Date: Thu, 17 Apr 2025 13:51:08 +0200 Subject: [PATCH 179/371] SES-285 SES-354 Fixed Acces Violation / Null Point (introduced with SES-297) --- src/gui/folderwizard.cpp | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/gui/folderwizard.cpp b/src/gui/folderwizard.cpp index 6a82b14b3b29a..9547ca87692f2 100644 --- a/src/gui/folderwizard.cpp +++ b/src/gui/folderwizard.cpp @@ -808,6 +808,8 @@ FolderWizardSelectiveSync::FolderWizardSelectiveSync(const AccountPtr &account) IonosTheme::folderWizardSubtitleColor())); _uiSelectiveSync.subTitle->setProperty("text", tr("Step 3 of 3: Selektive Synchronisation")); + + setupVirtualFilesCheckbox(); } FolderWizardSelectiveSync::~FolderWizardSelectiveSync() = default; From 38ed52f23e7bfa813c11af906ec617116500a31f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Christopher=20H=C3=A4tty?= Date: Tue, 22 Apr 2025 13:55:06 +0200 Subject: [PATCH 180/371] SES-354 SES-366 Adjusted to Brander --- admin/win/msi/gui/banner.bmp | Bin 85978 -> 85894 bytes admin/win/msi/gui/dialog.bmp | Bin 619346 -> 464774 bytes ...=> hidrivenext.VisualElementsManifest.xml} | 0 3 files changed, 0 insertions(+), 0 deletions(-) rename theme/{ionos_hidrive_next.VisualElementsManifest.xml => hidrivenext.VisualElementsManifest.xml} (100%) diff --git a/admin/win/msi/gui/banner.bmp b/admin/win/msi/gui/banner.bmp index 5270a99dea084175b16de1eb879f42cbc2d9bea2..7eba2ce1a7700f2010105784749f73ba19ef0247 100644 GIT binary patch literal 85894 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 Apa1{> delta 160 zcmZph&w6Vi!jg5_k)6&w^fS7IO%$c0FT-TX3V)~5``WYBlz?_XbTU{mwY}x#m^@$yRdLlOf DQ!g+p diff --git a/admin/win/msi/gui/dialog.bmp b/admin/win/msi/gui/dialog.bmp index b870b472556dfb47177bd600b204c1453d492fd6..f548941594d7772eb466a98a2a3b3e6e037548a0 100644 GIT binary patch literal 464774 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 literal 619346 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 F{C`t&OI82? diff --git a/theme/ionos_hidrive_next.VisualElementsManifest.xml b/theme/hidrivenext.VisualElementsManifest.xml similarity index 100% rename from theme/ionos_hidrive_next.VisualElementsManifest.xml rename to theme/hidrivenext.VisualElementsManifest.xml From 732736ebda8f4a22173714008c6a3173158def10 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Christopher=20H=C3=A4tty?= Date: Sat, 26 Apr 2025 00:19:19 +0100 Subject: [PATCH 181/371] SES-354 SES-366 Fixed clipped descender --- src/gui/settingsdialog.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/gui/settingsdialog.cpp b/src/gui/settingsdialog.cpp index 460c2a51d1384..e41bb2e274e06 100644 --- a/src/gui/settingsdialog.cpp +++ b/src/gui/settingsdialog.cpp @@ -48,7 +48,7 @@ const QString TOOLBAR_CSS() { #ifdef IONOS_BUILD return QStringLiteral("QToolBar { background: %1; border: none; border-bottom: 1px solid %2; } " - "QToolBar QToolButton { background: %1; border: none; margin: 2px 0px 7px 12px; padding: 11px 4px 4px 4px; border-radius: %5; %8; } " + "QToolBar QToolButton { background: %1; border: none; margin: 2px 0px 7px 12px; padding: 10px 4px 4px 4px; border-radius: %5; %8; } " "QToolBar QToolButton:checked { background: %7; color: %4; }" "QToolBar QToolButton:hover { background: %3; }" "QToolBar QToolButton:pressed { background: %6; color: %4; }" From 0aecae5d28932ae051b2c6dd56747d519a64a635 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Christopher=20H=C3=A4tty?= Date: Sat, 26 Apr 2025 22:04:16 +0100 Subject: [PATCH 182/371] SES-354 SES-366 FolderWizardSelectiveSync restored Checkbox function --- src/gui/folderwizard.cpp | 45 ++++++++++++++++++++++++++-------------- 1 file changed, 29 insertions(+), 16 deletions(-) diff --git a/src/gui/folderwizard.cpp b/src/gui/folderwizard.cpp index 9547ca87692f2..bdfb544b43e0f 100644 --- a/src/gui/folderwizard.cpp +++ b/src/gui/folderwizard.cpp @@ -769,22 +769,27 @@ FolderWizardSelectiveSync::FolderWizardSelectiveSync(const AccountPtr &account) layout->addWidget(_selectiveSync); if (!Theme::instance()->disableVirtualFilesSyncFolder() && Theme::instance()->showVirtualFilesOption() && bestAvailableVfsMode() != Vfs::Off) { - _virtualFilesCheckBox = new QCheckBox(tr("Use virtual files instead of downloading content immediately %1").arg(bestAvailableVfsMode() == Vfs::WindowsCfApi ? QString() : tr("(experimental)"))); - connect(_virtualFilesCheckBox, &QCheckBox::clicked, this, &FolderWizardSelectiveSync::virtualFilesCheckboxClicked); - connect(_virtualFilesCheckBox, &QCheckBox::stateChanged, this, [this](int state) { - _selectiveSync->setEnabled(state == Qt::Unchecked); - }); - _virtualFilesCheckBox->setChecked(bestAvailableVfsMode() == Vfs::WindowsCfApi); - _virtualFilesCheckBox->setStyleSheet("margin-top: 5px;"); - - QFont f; - QFont::Weight w; - f.setFamily(IonosTheme::settingsFont()); - f.setWeight( QFont::Weight::Normal); - f.setPixelSize(IonosTheme::settingsTextPixel()); - _virtualFilesCheckBox->setFont(f); + #ifdef IONOS_BUILD + setupVirtualFilesCheckbox(); + #else + _virtualFilesCheckBox = new QCheckBox(tr("Use virtual files instead of downloading content immediately %1").arg(bestAvailableVfsMode() == Vfs::WindowsCfApi ? QString() : tr("(experimental)"))); + connect(_virtualFilesCheckBox, &QCheckBox::clicked, this, &FolderWizardSelectiveSync::virtualFilesCheckboxClicked); + connect(_virtualFilesCheckBox, &QCheckBox::stateChanged, this, [this](int state) { + _selectiveSync->setEnabled(state == Qt::Unchecked); + }); + _virtualFilesCheckBox->setChecked(bestAvailableVfsMode() == Vfs::WindowsCfApi); + _virtualFilesCheckBox->setStyleSheet("margin-top: 5px;"); + + QFont f; + QFont::Weight w; + f.setFamily(IonosTheme::settingsFont()); + f.setWeight( QFont::Weight::Normal); + f.setPixelSize(IonosTheme::settingsTextPixel()); + _virtualFilesCheckBox->setFont(f); + #endif + layout->addLayout(_virtualFilesHBox); } @@ -808,26 +813,34 @@ FolderWizardSelectiveSync::FolderWizardSelectiveSync(const AccountPtr &account) IonosTheme::folderWizardSubtitleColor())); _uiSelectiveSync.subTitle->setProperty("text", tr("Step 3 of 3: Selektive Synchronisation")); - - setupVirtualFilesCheckbox(); } FolderWizardSelectiveSync::~FolderWizardSelectiveSync() = default; void FolderWizardSelectiveSync::setupVirtualFilesCheckbox(){ + _virtualFilesHBox = new QHBoxLayout(); _virtualFilesHBox->setSpacing(5); _virtualFilesHBox->setAlignment(Qt::AlignLeft); + _virtualFilesCheckBox = new QCheckBox(); _virtualFilesCheckBox->setSizePolicy(QSizePolicy::Maximum, QSizePolicy::Preferred); + connect(_virtualFilesCheckBox, &QCheckBox::clicked, this, &FolderWizardSelectiveSync::virtualFilesCheckboxClicked); + connect(_virtualFilesCheckBox, &QCheckBox::stateChanged, this, [this](int state) { + _selectiveSync->setEnabled(state == Qt::Unchecked); + }); + + _virtualFilesCheckBox->setChecked(bestAvailableVfsMode() == Vfs::WindowsCfApi); + _virtualFilesCheckBoxLabel = new ClickableLabel(tr("Use virtual files instead of downloading content immediately %1") .arg(bestAvailableVfsMode() == Vfs::WindowsCfApi ? QString() : tr("(experimental)"))); _virtualFilesCheckBoxLabel->setWordWrap(true); _virtualFilesCheckBoxLabel->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Preferred); connect(_virtualFilesCheckBoxLabel, &ClickableLabel::clicked, this, &FolderWizardSelectiveSync::virtualFilesCheckboxLabelClicked); + connect(_virtualFilesCheckBoxLabel, &ClickableLabel::clicked, this, &FolderWizardSelectiveSync::virtualFilesCheckboxClicked); _virtualFilesHBox->addWidget(_virtualFilesCheckBox, 0); _virtualFilesHBox->addWidget(_virtualFilesCheckBoxLabel, 1); From 942706f7407cadb402489f518751f16adf55750e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Christopher=20H=C3=A4tty?= Date: Sat, 26 Apr 2025 23:48:16 +0100 Subject: [PATCH 183/371] SES-354 SES-366 Fixed Icon presentation --- src/gui/filedetails/FileDetailsPage.qml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/gui/filedetails/FileDetailsPage.qml b/src/gui/filedetails/FileDetailsPage.qml index efd94a49d7066..604a3091edcba 100644 --- a/src/gui/filedetails/FileDetailsPage.qml +++ b/src/gui/filedetails/FileDetailsPage.qml @@ -111,15 +111,15 @@ Page { id: fileIcon Layout.rowSpan: headerGridLayout.rows - Layout.preferredWidth: Style.sesFileDetailsIconSize + Layout.preferredWidth: Style.trayListItemIconSize Layout.leftMargin: Style.sesMediumMargin Layout.fillHeight: true verticalAlignment: Image.AlignVCenter horizontalAlignment: Image.AlignHCenter source: root.fileDetails.iconUrl - sourceSize.width: Style.sesFileDetailsIconSize - sourceSize.height: Style.sesFileDetailsIconSize + sourceSize.width: Style.trayListItemIconSize + sourceSize.height: Style.trayListItemIconSize fillMode: Image.PreserveAspectFit } From 7499b1b2dcf6afdc84e1dbd819a03e877ce320e9 Mon Sep 17 00:00:00 2001 From: Kevin Beraz Date: Wed, 30 Apr 2025 08:47:40 +0200 Subject: [PATCH 184/371] SES-352 add data Protection Slide files and resources --- src/gui/CMakeLists.txt | 6 +- src/gui/wizard/dataprotectionpage.cpp | 79 +++++++++++++++++++++++ src/gui/wizard/dataprotectionpage.h | 39 +++++++++++ src/gui/wizard/dataprotectionpage.ui | 86 +++++++++++++++++++++++++ theme.qrc.in | 1 + theme/colored/data-protection-logo.png | Bin 0 -> 7590 bytes 6 files changed, 208 insertions(+), 3 deletions(-) create mode 100644 src/gui/wizard/dataprotectionpage.cpp create mode 100644 src/gui/wizard/dataprotectionpage.h create mode 100644 src/gui/wizard/dataprotectionpage.ui create mode 100644 theme/colored/data-protection-logo.png diff --git a/src/gui/CMakeLists.txt b/src/gui/CMakeLists.txt index 4a74b5c5d078e..c54ab56ad7ab5 100644 --- a/src/gui/CMakeLists.txt +++ b/src/gui/CMakeLists.txt @@ -49,7 +49,7 @@ set(client_UI_SRCS wizard/termsofservicecheckwidget.ui wizard/webview.ui wizard/welcomepage.ui -) + wizard/dataprotectionpage.ui qt_add_resources(client_UI_SRCS ../../resources.qrc ${CMAKE_SOURCE_DIR}/theme.qrc) @@ -277,8 +277,8 @@ set(client_SRCS wizard/welcomepage.cpp wizard/linklabel.h wizard/linklabel.cpp - ) - + wizard/dataprotectionpage.h + wizard/dataprotectionpage.cpp if (WITH_WEBENGINE) list(APPEND client_SRCS wizard/webviewpage.h diff --git a/src/gui/wizard/dataprotectionpage.cpp b/src/gui/wizard/dataprotectionpage.cpp new file mode 100644 index 0000000000000..9e47ccd4e19e5 --- /dev/null +++ b/src/gui/wizard/dataprotectionpage.cpp @@ -0,0 +1,79 @@ +#include "dataprotectionpage.h" +#include "buttonstyle.h" +#include "guiutility.h" +#include "theme.h" +#include "ui_dataprotectionpage.h" +#include "wizard/owncloudwizard.h" +#include "wizard/slideshow.h" + +namespace OCC{ + + DataProtectionPage::DataProtectionPage(OwncloudWizard *ocWizard) + : QWizardPage() + , _ui(new Ui::DataProtectionPage) + , _ocWizard(ocWizard) + { + setupUi(); + } + + DataProtectionPage::~DataProtectionPage() = default; + + void DataProtectionPage::setupUi() + { + _ui->setupUi(this); + setupSlideShow(); + } + + void DataProtectionPage::initializePage() + { + customizeStyle(); + } + + void DataProtectionPage::styleSlideShow() + { + const auto dataProtectionLogoFileName = Theme::hidpiFileName(":/client/theme/colored/data-protection-logo.png"); + + _ui->slideShow->addSlide(dataProtectionLogoFileName, tr("This application uses tracking technologies. By clicking on Agree, you accept the processing of your anonymized data. You can adjust your choices at any time via the settings.Information on data processing and more can be found in our privacy policy")); + } + + void DataProtectionPage::setupSlideShow() + { + connect(_ui->agreeButton, &QPushButton::clicked, this, [this]() { + _nextPage = WizardCommon::Page_AdvancedSetup; + _ocWizard->next(); + }); + + connect(_ui->settingsButton, &QPushButton::clicked, this, [this](){ + _nextPage = WizardCommon::Page_DataProtectionSettings; + _ocWizard->next(); + }); + } + + int DataProtectionPage::nextId() const + { + return _nextPage; + } + + void DataProtectionPage::customizeStyle() + { + _ui->slideShow->setStyleSheet( + QStringLiteral("QLabel { %1; }").arg( + IonosTheme::fontConfigurationCss( + IonosTheme::settingsFont(), + IonosTheme::settingsTextSize(), + "0", + IonosTheme::titleColor() + ) + ) + ); + _ocWizard->setFixedSize(626, 460); + _ui->mainVBox->setContentsMargins(24, 0, 24, 24); + _ui->agreeButton->setMinimumWidth(80); + _ui->settingsButton->setMinimumWidth(80); + + styleSlideShow(); + + _ui->buttonLayout->setContentsMargins(160, 0, 160, 0); + _ui->agreeButton->setProperty("buttonStyle", QVariant::fromValue(OCC::ButtonStyleName::Primary)); + } +} \ No newline at end of file diff --git a/src/gui/wizard/dataprotectionpage.h b/src/gui/wizard/dataprotectionpage.h new file mode 100644 index 0000000000000..7f89428037f24 --- /dev/null +++ b/src/gui/wizard/dataprotectionpage.h @@ -0,0 +1,39 @@ +#pragma once + +#include + +#include "wizard/owncloudwizardcommon.h" + +namespace OCC { + +class OwncloudWizard; + +namespace Ui { + class DataProtectionPage; +} + +class DataProtectionPage : public QWizardPage +{ + Q_OBJECT + +public: + explicit DataProtectionPage(OwncloudWizard *ocWizard); + ~DataProtectionPage() override; + [[nodiscard]] int nextId() const override; + void initializePage() override; + +private: + void setupUi(); + void customizeStyle(); + void styleSlideShow(); + void setupSlideShow(); + + QScopedPointer _ui; + + OwncloudWizard *_ocWizard; + + //SES-TODO ADJUST NEXTPAGE + WizardCommon::Pages _nextPage = WizardCommon::Page_AdvancedSetup; +}; + +} \ No newline at end of file diff --git a/src/gui/wizard/dataprotectionpage.ui b/src/gui/wizard/dataprotectionpage.ui new file mode 100644 index 0000000000000..39b397dca9f57 --- /dev/null +++ b/src/gui/wizard/dataprotectionpage.ui @@ -0,0 +1,86 @@ + + + OCC::DataProtectionPage + + + + 0 + 0 + 626 + 450 + + + + + 0 + 0 + + + + Form + + + + + + + 12 + true + + + + + -1 + -1 + + + + + + + + + + + 80 + 16777215 + + + + Settings + + + + + + + + 80 + 16777215 + + + + Agree + + + + + + + + + + OCC::SlideShow + QWidget +
          wizard/slideshow.h
          +
          + + OCC::LinkLabel + QWidget +
          wizard/linklabel.h
          + 1 +
          +
          + + +
          diff --git a/theme.qrc.in b/theme.qrc.in index cef972e960e80..5f3d29d4e776a 100644 --- a/theme.qrc.in +++ b/theme.qrc.in @@ -9,6 +9,7 @@ theme/colored/256-@APPLICATION_ICON_NAME@-icon.png theme/colored/512-@APPLICATION_ICON_NAME@-icon.png theme/colored/1024-@APPLICATION_ICON_NAME@-icon.png + theme/colored/data-protection-logo.png theme/colored/state-error-32.png theme/colored/state-error-64.png theme/colored/state-error-128.png diff --git a/theme/colored/data-protection-logo.png b/theme/colored/data-protection-logo.png new file mode 100644 index 0000000000000000000000000000000000000000..1e609a11af747952d920720409a8dd08b29e511f GIT binary patch literal 7590 zcmbt(RZyHy^d&H8a2VVnxCNI0gA5wnoj}l_!I^=<-9oTn!Ciy96CgMQCb+vxa9Mu; z+S-?W*oS@S?&|)&u0HqPbGy1vN2;sJW4|GPgMfg5t*8Ljd~G{lOC37uYb|t8B=g!} zxF{I7As}E9{#OtY(lbe42NB&g<)sm-#wqt-JIFRtDpCjtKjSeU%~22#sNO4rrL?^f zkFzk{leW_avz@KK4QFArAYh~-%c|oAZRZiCzWw2(Q$Jl5)K<({V&iDvlx$dESxmHa zO}T97xa1@*-}c7j`lzu%7s6qxT8{BXH-RW9FT@Cy4k#@hw!}9)+I0Go*h(Z37@4WYx%qHkH+|K49U6&)vi)W21}D5)^ve%r+O7|N3sv0^_3=`mILOko4$<9s2WVYk3%t!9+wfPn-E%032`81$pc+nuRCG17N}N_ekm&%LeObm3!6i|v}ZcZ!{G{ejE$L9I{ zBITCL_Mz#vx}$bi>G1}JkO+%L7e0@2UTK9r(9FJ}Si$7keC9FQ2ih|ZAlZ9AL0Kr1 zg9P*QO@s;(jIPN9%8^&yBhUWLlqlv)>ra%$ZWPh;RInB=Q5(mLsWjtfD6hXv@mnHN;9R z|84+ZKY;&ON1@54fl+&2VTUQ5>lm?_hB}@9$BQt7TyL#(9r{AMi0p~~`Xf|nXGDz6 z9GsRh|1(biFZv^(UUV5YU-A5Xd>u+m^EgK9&%yBz~)isihSXWkqNtx1` z|AqSJI)CTNG6lm&xeLuxMb`fDW+Yb_P`5*net;VUwD$H>aUL?e9(Fzy&fcKb zb+^nv&3bWF#SLH7#ZQn19j-BCC=qak|-2hjUEamrs0bRzhDjo1|$n#gnRXI}$PN zf=Jm-PG~C^Jv1KK$Fdf`Mi7hEw?zN*L5_5x&5=ljgywg0B9!0@iP=g?P`*;@fA-rCvW0O+`gx zJ-u$3U`1)FGsYuy>DJd*aQ8CZgD)hGW&T&Q24hqxB*s+jtg1y}AwW zUFDx+7C$RUiUqYu*EX3e?j#aLjPZJ5*PCgGyEZ_qN%2%Pu7=P(=*kmdegbFO=Hw~h z1hP@{h;tr1n8BUk6}p?DsOY#j$UQRfh|Wc2)B>rH@XV z{zV@JNehj$=Kap&V5?6r;h&)I&z5N#&*d0ycOOGmt%uqW0euZ z+jFWh-|Lm1EK&-ZCrZ4*oAJiGoBl2K`H+klK&N(7OTT^z*CQcF)F;n^kDTH?WvSKg znG#m+39OKHI&rAaefqm)sAjG}u}&k*Cs|FkpTeb@@cq8gFo@)bMSwBu37+!Co<{Uu z0{jAtL_A;*L}>uL@`xS=dWPy6E?>sK&vaiqLTC^TD;eC!@j2%GV)HST`3vpWCphX; z+MGAIdOeH!A2Wd$Gbc$NR*UumY%geZOB-nV$lNz!zDZ@?@z6uzj89U$}UdVsAFKHum&sADTZ~s9@LUlk|AY=p` z#K8(PVSe~k)g!s~5w0&C*|~0{H(78%PEPJQ)lwxTI=dqOU?l3t#+#2w_QOr){-?39 z7xU)xMg+Q`f#^55C< z&nsSZE|y=-AUq@ge71hk|Avjvzfgc_gBsi{)>=CKT4Sz;k_RAA=>g63t>d@wcIC&0W}$- zQr;@QQ#|fx7Z7Ok^t9%libvNm4++RRGfOWl_f@P-I0KT!C4w+b#Q=_f-@`Z)J;ZWV z0jn`E_H_7!tV`7(`Jo?7Y8{gxF(6seXkce2OFhP^xGI1x7eTFzJ1xnk`|``h zEr(7MWX!|2T9d@ML`GTtrl%?5??=~8**Wx{gM3;XMtt~dJ_%ep+U;KV(?j^bPJg-! z;^j@>HL@1;0pX_1jiRrUM7cBio(W(^VdK*u1XxOC)*RJbu|Vel0CRKlS>%Dw`%mwS z0=F@Lhn6R*$X(WUI24zabzO^EQ3$pn)xNhojgj8NW1db$m#!Odqg?;&BaH|zYW>S* zWUfsd`n<`Rna*zWb@R@rhjj0-xQ~Xa;PUwRk55(bJ@mmgr^_t!G=JF2DoO9F8lzPq ze@AP&((e&lSDzzdLFya1L)VHxEk#AI$p%}SE1T{$Z zH_}hcb0}SyY}P;dElo!2i%uv4jUbvQsWkRUsOeYz!ZpWV^vf=RXu&flnpkBRpC`oN zkuu(DFiSF;b&c5MJp*Vb5S8|ps>@HxH@+$(K!}t@nA~iI?i4|&vcn{zQE&?ygKk+} z5*A(g=0mo@U1BaghnI=jd&|Pw*LO(z4{_W^^<)!$5A<=|EpaA(K zJqTx{f27jztK)GVwI&8Vzh!6pFjt_$kL0AwgQE=#S=pwJ=J3O#c13Dh{0u3KktBE7+m-0^~nBi{oTcB}Fd@ z)GMp8kd&)5GfaqGHv_F$c1F9TZ;$j8R;lC_eOe|CpXi4|?Sm&|@O-z{23;lh=@wxT z_9u7GfD7?bHpoZK+0Oz)bGR1jOU%AcVKHat_-piu!3Ksef(&O}UF|jBaWcsY;t=CK z96_-b&&cU8bBGNf|N1K4Lx~JI8vt=&JyC|a)x?A)L!6l%?55wrl8z&zg(#fxHs+8Kh$3E{< z79^5{?JqY<9FSvW4uc`CBZ+GJo&M{!jP>ix8FtS)(X8x?iRArj4c~#iu^3<8z~uOa zSes@4U2x?b82URi)$ZLawhgbh1=;Twt5q$n+?`Z6sdZW}V}t_#Y(0!Gu_>wka(qUG zqoo)Fs&I|z3WT0Mkki7@N70*XY{CCngRfC_Z@T=?KPOG#`6+!qhA?Ku})M`U#uUuv5Dq2%2eleq}SK6-Nh1{zt_kTc=}|oBt-{Jk^BT zm{u*VR(d~s76Yw6!eH5PYvL!Z*Z+I;nQ`JlH^`x-1^kO z<-99r;4HyIHUVE71*~1s%lf9{SC$lDLmLs0vpw9p(5E)X){9*x@d!S)s2aaQ3S>bI z(9Mr`x6GSA&meKH6KYy+P&G7M3O(s815+msWMRzH?nc<`+%|1^^#=%ZR`^|}JvaZ( zUBBOpr0H5@x1gpo5$12TLq2sYmwA`kZ##~LPqakAi3wPx@}k2+7zNO(OSn6!r$}|* zKg@`WYAsKbJw@?Gyx6a)7Fi+~?Yf=D<(Yl8Qx7KJ0+1j9AP{~;A2L72|C2W=N{K%A$uTj)0T(q#s8*OO zkZ))>ER+V#1yn1mgkOd7c!X4~>bP$EIKz&(yS8ClSG{6F`*C15WoNRTz#g0j53mOw z-Unx#G>fkpiyHV5!zh7qs=iW3=z{R^CPksQ#^N}>P-We_y7ns1BOWAs%e1wXHCqp1 zJ0}D8OZHo;6z%@T?-X?%5M9tLpBOpEqi|pY=q-|BGZXo`t|`^r7qS$1C00p8&&MEW zFyInbRqv{9$i>Hkvwx=U9s&>~GG8B*+TSxYDtGaEG{LKAe`EbG!^8K%{=lA<61rfK zp(h!G7d-+fkJrR-PQN+Ib$@ja8kHY|>o4tUJUnU46g}rlBazT0pSPvbzzK60-NKGu z1b&UM1aZ~1Ygc#a9AOfU3pEIb7JR$nB6Ah+5WF3?QrDx8dk8WY=qQV#mt}AH>sOnq zIHhUxa#@Os3Bpl zbM^#K$cNFq#7&Yfgpnqowm)wS{;tvv=j;rWbXW;>bYY*=RBt5axK831b`Jr~bH~~N z{~`nIbi@NmVg=`;3P-@rj0vR(Mvut6{D!i32UAY-LCAqFn*N>R5(q0H2WY@I{AEfW z`nQTmUI0t)IBc{i)T~JYlnU58GYJJ=HjWmbUv1W})B+(Y6dWRyzeJI`KnTso=uS{q zZeL*M6?a)IHD`%2rsV1)-*O0z=qH&v>uYy@&^5)#8j4C+GmjJSO&1>r66#LX(`1&o zxMWyfO$V1Om$q#)xt5n1BdmfPe1i=*4}sWLcf-bngQ}Qm7IW$K#iePd*U(PEHLE3Of> zm=Qu&moMrzTcqwN91`c;I;uMQx0~I)+kuN_g7JoPmjJHX?eA7CGW8!zHd<1lx@#MbJ{Fj)pz3vK|M zgTvZ7pG-J?Z>r!R6Ypt#3Y(=}kwgfs=4>z$k}z=IbZ@(vd+h33yU1Dz>IW5e69}$_ zdVp58laf>Sh62bw)ssuv@f*`}h~e%$(2tKsvG$>UKK+M%H!Rob>q z=YN57{GR&C!dd(OfUU_}kn71Tphd0-8_&-jFGbm^p{bkShykB9{%m%mwBi7|t0BN( z41)qT^Zl_6o)cahXt+m)vENA;q%2)xwkC^VkmA)Wr1H~j!teqAbDxPKKa!B`+5T+t z1qnRH0mzusB18<{GteUq?1;lM)G2cOgPpGRjT1F_mpo$S#N{{2_OnV=kqUe9%kBEI zYu|gUqSvej#dRO}ZyVj9W`>XCN1i@*M@$3}TKay>wZX*Sz(H6w?ksMQH}q*19RW{+%Oo8yA)pH?}iPz3_l{wYn8EC|4$Pwa1Y>fqz_$HEzv{>5PA=P$;e=c`> z<>EYf0j~DpYy~Y{#tYqRyVBc-+|o@Ca1i1*-Vz2Zo^)z8J)>;EIY7S83|TU~o13`5 zq*K(}YzkA8xw0rbm%PJB`I$qK!}q2#UZx&s(9aIn!=4u7Pi8sI=9Y^73y{>`v(2$q zfp>VI#@#6hoMF~`>+$PoJ60RFuJH+oPqMf*yl{kf17|e|T*PG};~LyzLjx7-o>nVo zDb5yr4AC_uZs$VV=;D?2ax_*Y#;F^{~?Z0XU|{r z`fZ|NU;Xj#ENR24)$~2-5__D~rz6*mO^)=I8o|r0TD52uE)E!s5QvLvQzy8dM3;1C z&w2K0TM4stOaG*I zfmdEgXf~?kU!U1oAm$*ptt(0{^Cx?4hV`|SVTISn0l8O+mY3jF&P;gKU1LH*CoJE- zisuZk5;K0VCbIkIzLUtvoXLZPPrL^YK1k7#qy|wr-kxe;l$}8Ihr@6H72Ug%ny)+h zsamk-QykA>&z;C1P6YF@#|zsp4?Yi1dAmabKRwGihs(+n50I@qBIp> zNc^g#)_AK7&dD&chksofa+>;+$rBhvu?v))%^@Bko%-i^jFe&g_C>C|dQTuK=!nVz z`PCx&OedWb-aeGT&}-B@?#Mi;%DFY-0mqpE8?N+kgtU;;iC-oIwyzEW3(GIn`igwF ziuXKJ@5gw(cCnt)_JIA*>)i58sfcliB?$3r#$6QGybkY{@N6o?Jw5#vXgqO0HfzbX zicv1{;%lWl=gMxkxMoZe@c{~h<3?SKCjY$2Fxs>|q{5-d{0v3tyWu9-IPruK_va`c zM@@+Umh5VNz)J>>UV&QFjN+kvCCiGET%|zVmj;cja;(%nSl))Rks_>=cc0b0^RBAq zB7Jbk@1Ll`AtXGTqLcI;lmq5gh%yye{G0koQtj1b8{t0|w9&jw{pzVv$*(JUNe?a< zf!wop?6v}fT-sPwO4W^wF3>g90Y0};;%pwQX4buluFAXiquJ^f23wPrgNV-HU{t0- z9FN;h&I!1a31ahwT2bDSBlb3B6Yl4^^}n;jHl{-3Q4T{~2T5ZkqOwF;H0g5~F|-n! zDRn-~eLgQDw?O_~x$)uXg(RvrOWVs0=-jO4`%@#Pr0hN^@65#L5hN-nchMwDPAq@r zkAL@O9V^#iv#OG9N;E2~C@#CQBzmiNI@TE;1(ISI=oyM=S(tK(&H7%l=3aFE=k>nb z!MY^dh#f1aqtl4T$5nGi7}P3~bQ`)?&XH0fx1Ohs&&TEBVcn}PlnDdmGvg%QEma04i2f}M>%=>0=~$jsM_uuHwVsfWh{G4;s{2G+$kBOtq%pX5jTRY+ zL)=MI6f|9QUv^{^?UwwrsHzg@=DEXhoJA0-fF(d=!0xD9s02MBRX=`7HF98P`izAS z8-8-G)Kf0<7S#IwuB1$<(uC{Y=ybr%1mKjBH_1V6v*fgjGty#US*KrX%C_7bJsqha fG#3&6g4Q_iq!6&^iTV1hil8W~3a*m=81%mYyE4i8 literal 0 HcmV?d00001 From 6b376fc02aa4499c6e66fc5ab4c8a152e20dac8a Mon Sep 17 00:00:00 2001 From: Kevin Beraz Date: Wed, 30 Apr 2025 08:48:42 +0200 Subject: [PATCH 185/371] SES-352 add data Protection Settings Page --- src/gui/CMakeLists.txt | 6 +- src/gui/wizard/dataprotectionsettingspage.cpp | 75 ++++++++++++ src/gui/wizard/dataprotectionsettingspage.h | 36 ++++++ src/gui/wizard/dataprotectionsettingspage.ui | 110 ++++++++++++++++++ 4 files changed, 224 insertions(+), 3 deletions(-) create mode 100644 src/gui/wizard/dataprotectionsettingspage.cpp create mode 100644 src/gui/wizard/dataprotectionsettingspage.h create mode 100644 src/gui/wizard/dataprotectionsettingspage.ui diff --git a/src/gui/CMakeLists.txt b/src/gui/CMakeLists.txt index c54ab56ad7ab5..1d6c64e9ddf83 100644 --- a/src/gui/CMakeLists.txt +++ b/src/gui/CMakeLists.txt @@ -50,7 +50,7 @@ set(client_UI_SRCS wizard/webview.ui wizard/welcomepage.ui wizard/dataprotectionpage.ui - + wizard/dataprotectionsettingspage.ui qt_add_resources(client_UI_SRCS ../../resources.qrc ${CMAKE_SOURCE_DIR}/theme.qrc) set(client_SRCS @@ -279,8 +279,8 @@ set(client_SRCS wizard/linklabel.cpp wizard/dataprotectionpage.h wizard/dataprotectionpage.cpp -if (WITH_WEBENGINE) - list(APPEND client_SRCS + wizard/dataprotectionsettingspage.h + wizard/dataprotectionsettingspage.cpp wizard/webviewpage.h wizard/webviewpage.cpp wizard/webview.h diff --git a/src/gui/wizard/dataprotectionsettingspage.cpp b/src/gui/wizard/dataprotectionsettingspage.cpp new file mode 100644 index 0000000000000..3d2acd5a93426 --- /dev/null +++ b/src/gui/wizard/dataprotectionsettingspage.cpp @@ -0,0 +1,75 @@ +#include "dataprotectionsettingspage.h" +#include "configfile.h" +#include "buttonstyle.h" +#include "guiutility.h" +#include "theme.h" +#include "ui_dataprotectionsettingspage.h" +#include "wizard/owncloudwizard.h" +#include "wizard/slideshow.h" + +namespace OCC{ + + DataProtectionSettingsPage::DataProtectionSettingsPage(OwncloudWizard *ocWizard) + : QWizardPage() + , _ui(new Ui::DataProtectionSettingsPage) + , _ocWizard(ocWizard) + , _anonymousUseState(false) + { + setupUi(); + } + + DataProtectionSettingsPage::~DataProtectionSettingsPage() = default; + + void DataProtectionSettingsPage::setupUi() + { + _ui->setupUi(this); + setupSlideShow(); + } + + void DataProtectionSettingsPage::initializePage() + { + _anonymousUseState = _ui->anonymousDataCheckBox->isChecked(); + customizeStyle(); + } + + void DataProtectionSettingsPage::setupSlideShow() + { + ConfigFile cfgFile; + + connect(_ui->backButton, &QPushButton::clicked, this, [this, &cfgFile]() { + _ui->anonymousDataCheckBox->setChecked(_anonymousUseState); + cfgFile.setSendData(_anonymousUseState); + _ocWizard->back(); + }); + + connect(_ui->saveButton, &QPushButton::clicked, this, [this, &cfgFile](){ + _anonymousUseState = _ui->anonymousDataCheckBox->isChecked(); + cfgFile.setSendData(_anonymousUseState); + _ocWizard->back(); + }); + + connect(_ui->necessaryDataCheckBox, &QCheckBox::clicked, this, [this](){ + _ui->necessaryDataCheckBox->setChecked(true); + }); + } + + void DataProtectionSettingsPage::customizeStyle() + { + _ui->slideShow->setStyleSheet( + QStringLiteral("QLabel { %1; }").arg( + IonosTheme::fontConfigurationCss( + IonosTheme::settingsFont(), + IonosTheme::settingsSmallTextSize(), + IonosTheme::settingsTextWeight(), + IonosTheme::titleColor() + ) + ) + ); + _ocWizard->setFixedSize(626, 460); + _ui->mainVBox->setContentsMargins(32, 0, 32, 32); + _ui->necessaryDataCheckBox->setChecked(true); + _ui->backButton->setMinimumWidth(80); + _ui->saveButton->setMinimumWidth(160); + _ui->saveButton->setProperty("buttonStyle", QVariant::fromValue(OCC::ButtonStyleName::Primary)); + } +} \ No newline at end of file diff --git a/src/gui/wizard/dataprotectionsettingspage.h b/src/gui/wizard/dataprotectionsettingspage.h new file mode 100644 index 0000000000000..65bb40ad12179 --- /dev/null +++ b/src/gui/wizard/dataprotectionsettingspage.h @@ -0,0 +1,36 @@ +#pragma once + +#include + +#include "wizard/owncloudwizardcommon.h" + +namespace OCC { + +class OwncloudWizard; + +namespace Ui { + class DataProtectionSettingsPage; +} + +class DataProtectionSettingsPage : public QWizardPage +{ + Q_OBJECT + +public: + explicit DataProtectionSettingsPage(OwncloudWizard *ocWizard); + ~DataProtectionSettingsPage() override; + void initializePage() override; + +private: + void setupUi(); + void customizeStyle(); + void setupSlideShow(); + + QScopedPointer _ui; + + OwncloudWizard *_ocWizard; + + bool _anonymousUseState; +}; + +} \ No newline at end of file diff --git a/src/gui/wizard/dataprotectionsettingspage.ui b/src/gui/wizard/dataprotectionsettingspage.ui new file mode 100644 index 0000000000000..50973ddfa516e --- /dev/null +++ b/src/gui/wizard/dataprotectionsettingspage.ui @@ -0,0 +1,110 @@ + + + OCC::DataProtectionSettingsPage + + + + 0 + 0 + 626 + 450 + + + + + 0 + 0 + + + + Form + + + + + + + 12 + true + + + + + -1 + -1 + + + + + + + + We collect anonymized data to optimize our app. We use software solutions from various partners for this purpose. We want to give you full transparency and freedom of choice regarding the collection and processing of your anonymized usage. You can change your settings at any time under the menu item Data Protection. + + + true + + + + + + + Necessary data + + + + + + + Send anonymous use + + + + + + + + + + 80 + 16777215 + + + + Back + + + + + + + + 80 + 16777215 + + + + Save Settings + + + + + + + + + + OCC::SlideShow + QWidget +
          wizard/slideshow.h
          +
          + + OCC::LinkLabel + QWidget +
          wizard/linklabel.h
          + 1 +
          +
          + + +
          From 6dc1301e17b57c09c47358d99a10d6992de067da Mon Sep 17 00:00:00 2001 From: Kevin Beraz Date: Wed, 30 Apr 2025 08:50:38 +0200 Subject: [PATCH 186/371] SES-352 add Data Protection pges to owncloudwizard component --- src/gui/wizard/owncloudwizard.cpp | 7 +++++++ src/gui/wizard/owncloudwizard.h | 4 ++++ src/gui/wizard/owncloudwizardcommon.h | 2 ++ 3 files changed, 13 insertions(+) diff --git a/src/gui/wizard/owncloudwizard.cpp b/src/gui/wizard/owncloudwizard.cpp index 7b0cb091c72c8..4b114774fd69c 100644 --- a/src/gui/wizard/owncloudwizard.cpp +++ b/src/gui/wizard/owncloudwizard.cpp @@ -31,6 +31,8 @@ #include "wizard/owncloudwizard.h" #include "wizard/webviewpage.h" #include "wizard/welcomepage.h" +#include "wizard/dataprotectionpage.h" +#include "wizard/dataprotectionsettingspage.h" #include "wizard/termsofservicewizardpage.h" @@ -58,6 +60,8 @@ OwncloudWizard::OwncloudWizard(QWidget *parent) , _flow2CredsPage(new Flow2AuthCredsPage) , _termsOfServicePage(new TermsOfServiceWizardPage) , _advancedSetupPage(new OwncloudAdvancedSetupPage(this)) + , _dataProtectionPage(new DataProtectionPage(this)) + , _dataProtectionSettingsPage(new DataProtectionSettingsPage(this)) #ifdef WITH_WEBENGINE , _webViewPage(new WebViewPage(this)) #else // WITH_WEBENGINE @@ -76,7 +80,10 @@ OwncloudWizard::OwncloudWizard(QWidget *parent) setPage(WizardCommon::Page_HttpCreds, _httpCredsPage); setPage(WizardCommon::Page_Flow2AuthCreds, _flow2CredsPage); setPage(WizardCommon::Page_TermsOfService, _termsOfServicePage); + setPage(WizardCommon::Page_DataProtection, _dataProtectionPage); + setPage(WizardCommon::Page_DataProtectionSettings, _dataProtectionSettingsPage); setPage(WizardCommon::Page_AdvancedSetup, _advancedSetupPage); + #ifdef WITH_WEBENGINE if (!useFlow2()) { setPage(WizardCommon::Page_WebView, _webViewPage); diff --git a/src/gui/wizard/owncloudwizard.h b/src/gui/wizard/owncloudwizard.h index df8e8c6fe10b8..7034cb5477741 100644 --- a/src/gui/wizard/owncloudwizard.h +++ b/src/gui/wizard/owncloudwizard.h @@ -35,6 +35,8 @@ class OwncloudSetupPage; class OwncloudHttpCredsPage; class TermsOfServiceWizardPage; class OwncloudAdvancedSetupPage; +class DataProtectionPage; +class DataProtectionSettingsPage; class OwncloudWizardResultPage; class AbstractCredentials; class AbstractCredentialsWizardPage; @@ -131,6 +133,8 @@ public slots: Flow2AuthCredsPage *_flow2CredsPage = nullptr; TermsOfServiceWizardPage *_termsOfServicePage = nullptr; OwncloudAdvancedSetupPage *_advancedSetupPage = nullptr; + DataProtectionPage *_dataProtectionPage = nullptr; + DataProtectionSettingsPage *_dataProtectionSettingsPage = nullptr; OwncloudWizardResultPage *_resultPage = nullptr; AbstractCredentialsWizardPage *_credentialsPage = nullptr; WebViewPage*_webViewPage = nullptr; diff --git a/src/gui/wizard/owncloudwizardcommon.h b/src/gui/wizard/owncloudwizardcommon.h index 7c771492052da..2d39aec1a0499 100644 --- a/src/gui/wizard/owncloudwizardcommon.h +++ b/src/gui/wizard/owncloudwizardcommon.h @@ -47,6 +47,8 @@ namespace WizardCommon { Page_ServerSetup, Page_HttpCreds, Page_Flow2AuthCreds, + Page_DataProtection, + Page_DataProtectionSettings, #ifdef WITH_WEBENGINE Page_WebView, #endif // WITH_WEBENGINE From afa3cf76234cd2072312a023388e5ab80b840bbb Mon Sep 17 00:00:00 2001 From: Kevin Beraz Date: Wed, 30 Apr 2025 08:51:50 +0200 Subject: [PATCH 187/371] SES-352 extend data Protection in generalSettings with a checkbox --- src/gui/generalsettings.cpp | 16 ++++++++++------ src/gui/generalsettings.ui | 18 ++++++++++++++---- 2 files changed, 24 insertions(+), 10 deletions(-) diff --git a/src/gui/generalsettings.cpp b/src/gui/generalsettings.cpp index 855264ea13ee7..6f31e2f0d9f34 100644 --- a/src/gui/generalsettings.cpp +++ b/src/gui/generalsettings.cpp @@ -199,6 +199,10 @@ GeneralSettings::GeneralSettings(QWidget *parent) _ui->labelInterval->setTextFormat(Qt::RichText); _ui->labelInterval->setTextInteractionFlags(Qt::TextBrowserInteraction); _ui->labelInterval->setOpenExternalLinks(true); + + connect(_ui->sendNecessaryData_checkbox, &QCheckBox::clicked, this, [this](){ + _ui->sendNecessaryData_checkbox->setChecked(true); + }); #endif connect(_ui->serverNotificationsCheckBox, &QAbstractButton::toggled, @@ -254,7 +258,7 @@ GeneralSettings::GeneralSettings(QWidget *parent) connect(_ui->stopExistingFolderNowBigSyncCheckBox, &QAbstractButton::toggled, this, &GeneralSettings::saveMiscSettings); connect(_ui->newExternalStorage, &QAbstractButton::toggled, this, &GeneralSettings::saveMiscSettings); connect(_ui->moveFilesToTrashCheckBox, &QAbstractButton::toggled, this, &GeneralSettings::saveMiscSettings); - connect(_ui->sendData_checkbox, &QAbstractButton::toggled, this, &GeneralSettings::saveMiscSettings); + connect(_ui->sendAnonymousData_checkbox, &QAbstractButton::toggled, this, &GeneralSettings::saveMiscSettings); #ifndef WITH_CRASHREPORTER _ui->crashreporterCheckBox->setVisible(false); @@ -293,7 +297,7 @@ GeneralSettings::GeneralSettings(QWidget *parent) connect(_ui->legalNoticeLinkButton, &OCC::LinkButton::clicked, this, &GeneralSettings::slotOpenLegalNoticeLink); connect(_ui->openSourceLinkButton, &OCC::LinkButton::clicked, this, &GeneralSettings::slotOpenOpenSourceLink); connect(_ui->privacyLinkButton, &OCC::LinkButton::clicked, this, &GeneralSettings::slotOpenPrivacyLink); - connect(_ui->sendData_checkbox, &QAbstractButton::toggled, this, &GeneralSettings::slotToggleSendData); + connect(_ui->sendAnonymousData_checkbox, &QAbstractButton::toggled, this, &GeneralSettings::slotToggleSendData); #if defined(BUILD_UPDATER) loadUpdateChannelsList(); #endif @@ -346,7 +350,7 @@ void GeneralSettings::connectToTracking() , DataCollectionWrapper::TrackingElement::PrivacyPolicy); }); - connect(_ui->sendData_checkbox, &QAbstractButton::clicked, this, [this](){ + connect(_ui->sendAnonymousData_checkbox, &QAbstractButton::clicked, this, [this](){ _dcw.clicked(DataCollectionWrapper::TrackingPage::GeneralSettings, DataCollectionWrapper::TrackingElement::ToogleSendData); }); @@ -396,7 +400,7 @@ void GeneralSettings::loadMiscSettings() _ui->newExternalStorage->setChecked(cfgFile.confirmExternalStorage()); _ui->monoIconsCheckBox->setChecked(cfgFile.monoIcons()); _ui->moveFilesToTrashCheckBox->setChecked(cfgFile.moveToTrash()); - _ui->sendData_checkbox->setChecked(cfgFile.sendData()); + _ui->sendAnonymousData_checkbox->setChecked(cfgFile.sendData()); auto newFolderLimit = cfgFile.newBigFolderSizeLimit(); _ui->newFolderLimitCheckBox->setChecked(newFolderLimit.first); @@ -621,7 +625,7 @@ void GeneralSettings::saveMiscSettings() cfgFile.setConfirmExternalStorage(_ui->newExternalStorage->isChecked()); cfgFile.setNotifyExistingFoldersOverLimit(existingFolderLimitEnabled); cfgFile.setStopSyncingExistingFoldersOverLimit(stopSyncingExistingFoldersOverLimit); - cfgFile.setSendData(_ui->sendData_checkbox->isChecked()); + cfgFile.setSendData(_ui->sendAnonymousData_checkbox->isChecked()); _ui->existingFolderLimitCheckBox->setEnabled(newFolderLimitEnabled); _ui->stopExistingFolderNowBigSyncCheckBox->setEnabled(existingFolderLimitEnabled); @@ -714,7 +718,7 @@ void GeneralSettings::slotShowLegalNotice() void GeneralSettings::slotToggleSendData() { DataCollectionWrapper dcw; - dcw.setSendData(_ui->sendData_checkbox->isChecked()); + dcw.setSendData(_ui->sendAnonymousData_checkbox->isChecked()); } void GeneralSettings::slotStyleChanged() diff --git a/src/gui/generalsettings.ui b/src/gui/generalsettings.ui index 4ac3e44d4ea10..b71963b409e75 100644 --- a/src/gui/generalsettings.ui +++ b/src/gui/generalsettings.ui @@ -146,9 +146,9 @@ - + Ask for confirmation before synchronizing new folders larger than - + true @@ -359,9 +359,19 @@ 32 - + + + &Necessary data + + + true + + + + + - &Analysis data collection for needs-based design + &Send anonymous use From df0aedb32c09c0c8e2d1138d9f504128dc009fe0 Mon Sep 17 00:00:00 2001 From: Kevin Beraz Date: Wed, 30 Apr 2025 08:53:16 +0200 Subject: [PATCH 188/371] SES-352 adjust wizard page order --- src/gui/wizard/flow2authcredspage.cpp | 2 +- src/gui/wizard/owncloudadvancedsetuppage.cpp | 1 - 2 files changed, 1 insertion(+), 2 deletions(-) diff --git a/src/gui/wizard/flow2authcredspage.cpp b/src/gui/wizard/flow2authcredspage.cpp index 9177122178760..42c69472b9f56 100644 --- a/src/gui/wizard/flow2authcredspage.cpp +++ b/src/gui/wizard/flow2authcredspage.cpp @@ -110,7 +110,7 @@ int Flow2AuthCredsPage::nextId() const return WizardCommon::Page_TermsOfService; } - return WizardCommon::Page_AdvancedSetup; + return WizardCommon::Page_DataProtection; } void Flow2AuthCredsPage::setConnected() diff --git a/src/gui/wizard/owncloudadvancedsetuppage.cpp b/src/gui/wizard/owncloudadvancedsetuppage.cpp index fd41e2b3274b0..d4702d296f6c4 100644 --- a/src/gui/wizard/owncloudadvancedsetuppage.cpp +++ b/src/gui/wizard/owncloudadvancedsetuppage.cpp @@ -407,7 +407,6 @@ QUrl OwncloudAdvancedSetupPage::serverUrl() const int OwncloudAdvancedSetupPage::nextId() const { - // tells the caller that this is the last dialog page return -1; } From 429a630e7cd8facc977557099718edae82c26b05 Mon Sep 17 00:00:00 2001 From: Kevin Beraz Date: Wed, 30 Apr 2025 08:53:48 +0200 Subject: [PATCH 189/371] SES-352 use new name of exe file in launch.json --- .vscode/launch.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.vscode/launch.json b/.vscode/launch.json index 59bb384907259..5f3010da2331d 100644 --- a/.vscode/launch.json +++ b/.vscode/launch.json @@ -9,7 +9,7 @@ "name": "(RelWithDebInfo) Launch HiDriveNext", "type": "cppvsdbg", "request": "launch", - "program": "${workspaceFolder}/../build/win32-MSVC-x64/RelWithDebInfo/bin/HiDriveNext.exe", + "program": "${workspaceFolder}/../build/win32-MSVC-x64/RelWithDebInfo/bin/IONOS_HiDrive_Next.exe", "args": [], "stopAtEntry": false, "cwd": "${workspaceFolder}", From 6887c5252ebb687ac2a8275cbedc057d8d668c2a Mon Sep 17 00:00:00 2001 From: Kevin Beraz Date: Wed, 30 Apr 2025 08:54:03 +0200 Subject: [PATCH 190/371] SES-352 missing things --- .vscode/settings.json | 4 + src/gui/CMakeLists.txt | 1626 ++++++++++++++++++++-------------------- 2 files changed, 820 insertions(+), 810 deletions(-) diff --git a/.vscode/settings.json b/.vscode/settings.json index 34991612e4a42..0b78cf0be5532 100644 --- a/.vscode/settings.json +++ b/.vscode/settings.json @@ -10,4 +10,8 @@ "BUILD_TESTING":"OFF", }, "cmake.buildDirectory": "${workspaceFolder}/../build/${buildKitTargetOs}-${buildKitVendor}-${buildKitTargetArch}/${buildType}", + "files.associations": { + "qwizardpage": "cpp", + "xutility": "cpp" + }, } \ No newline at end of file diff --git a/src/gui/CMakeLists.txt b/src/gui/CMakeLists.txt index 1d6c64e9ddf83..cf1ff7a8aaa9f 100644 --- a/src/gui/CMakeLists.txt +++ b/src/gui/CMakeLists.txt @@ -1,816 +1,822 @@ -project(gui) -find_package(Qt${QT_MAJOR_VERSION} REQUIRED COMPONENTS Widgets Svg Qml Quick QuickControls2 QuickWidgets Xml Network) -find_package(KF6Archive REQUIRED) -find_package(KF6GuiAddons) - -if (NOT TARGET Qt::GuiPrivate) - message(FATAL_ERROR "Could not find GuiPrivate component of Qt. It might be shipped as a separate package, please check that.") -endif() - -if(CMAKE_BUILD_TYPE MATCHES Debug) - add_definitions(-DQT_QML_DEBUG) -endif() -if(CMAKE_BUILD_TYPE MATCHES "RelWithDebInfo") - add_definitions(-DBUILDTYPE_RELWITHDEBINFO) -endif() - -IF(BUILD_UPDATER) - add_subdirectory(updater) -endif() - -configure_file(${CMAKE_SOURCE_DIR}/theme.qrc.in ${CMAKE_SOURCE_DIR}/theme.qrc) -set(theme_dir ${CMAKE_SOURCE_DIR}/theme) - -set(client_UI_SRCS - accountsettings.ui - conflictdialog.ui - invalidfilenamedialog.ui - caseclashfilenamedialog.ui - foldercreationdialog.ui - folderwizardsourcepage.ui - folderwizardtargetpage.ui - generalsettings.ui - legalnotice.ui - ignorelisteditor.ui - ignorelisttablewidget.ui - networksettings.ui - settingsdialog.ui - sslerrordialog.ui - addcertificatedialog.ui - passwordinputdialog.ui - proxyauthdialog.ui - mnemonicdialog.ui - vfsdownloaderrordialog.ui - wizard/flow2authwidget.ui - wizard/owncloudadvancedsetuppage.ui - wizard/owncloudconnectionmethoddialog.ui - wizard/owncloudhttpcredspage.ui - wizard/owncloudsetupnocredspage.ui - wizard/termsofservicecheckwidget.ui - wizard/webview.ui - wizard/welcomepage.ui +project(gui) +find_package(Qt${QT_MAJOR_VERSION} REQUIRED COMPONENTS Widgets Svg Qml Quick QuickControls2 QuickWidgets Xml Network) +find_package(KF6Archive REQUIRED) +find_package(KF6GuiAddons) + +if (NOT TARGET Qt::GuiPrivate) + message(FATAL_ERROR "Could not find GuiPrivate component of Qt. It might be shipped as a separate package, please check that.") +endif() + +if(CMAKE_BUILD_TYPE MATCHES Debug) + add_definitions(-DQT_QML_DEBUG) +endif() +if(CMAKE_BUILD_TYPE MATCHES "RelWithDebInfo") + add_definitions(-DBUILDTYPE_RELWITHDEBINFO) +endif() + +IF(BUILD_UPDATER) + add_subdirectory(updater) +endif() + +configure_file(${CMAKE_SOURCE_DIR}/theme.qrc.in ${CMAKE_SOURCE_DIR}/theme.qrc) +set(theme_dir ${CMAKE_SOURCE_DIR}/theme) + +set(client_UI_SRCS + accountsettings.ui + conflictdialog.ui + invalidfilenamedialog.ui + caseclashfilenamedialog.ui + foldercreationdialog.ui + folderwizardsourcepage.ui + folderwizardtargetpage.ui + generalsettings.ui + legalnotice.ui + ignorelisteditor.ui + ignorelisttablewidget.ui + networksettings.ui + settingsdialog.ui + sslerrordialog.ui + addcertificatedialog.ui + passwordinputdialog.ui + proxyauthdialog.ui + mnemonicdialog.ui + vfsdownloaderrordialog.ui + wizard/flow2authwidget.ui + wizard/owncloudadvancedsetuppage.ui + wizard/owncloudconnectionmethoddialog.ui + wizard/owncloudhttpcredspage.ui + wizard/owncloudsetupnocredspage.ui + wizard/termsofservicecheckwidget.ui + wizard/webview.ui + wizard/welcomepage.ui wizard/dataprotectionpage.ui wizard/dataprotectionsettingspage.ui -qt_add_resources(client_UI_SRCS ../../resources.qrc ${CMAKE_SOURCE_DIR}/theme.qrc) - -set(client_SRCS - accountmanager.h - accountmanager.cpp - accountsettings.h - accountsettings.cpp - accountsetupfromcommandlinejob.h - accountsetupfromcommandlinejob.cpp - accountsetupcommandlinemanager.h - accountsetupcommandlinemanager.cpp - application.h - application.cpp - invalidfilenamedialog.h - invalidfilenamedialog.cpp - caseclashfilenamedialog.h - caseclashfilenamedialog.cpp - callstatechecker.h - callstatechecker.cpp - conflictdialog.h - conflictdialog.cpp - conflictsolver.h - conflictsolver.cpp - connectionvalidator.h - connectionvalidator.cpp - editlocallyjob.h - editlocallyjob.cpp - editlocallymanager.h - editlocallymanager.cpp - editlocallyverificationjob.h - editlocallyverificationjob.cpp - filetagmodel.h - filetagmodel.cpp - folder.h - folder.cpp - foldercreationdialog.h - foldercreationdialog.cpp - folderman.h - folderman.cpp - folderstatusmodel.h - folderstatusmodel.cpp - folderstatusdelegate.h - folderstatusdelegate.cpp - folderstatusview.h - folderstatusview.cpp - folderwatcher.h - folderwatcher.cpp - folderwizard.h - folderwizard.cpp - clickablelabel.h - generalsettings.h - generalsettings.cpp - legalnotice.h - legalnotice.cpp - ignorelisteditor.h - ignorelisteditor.cpp - ignorelisttablewidget.h - ignorelisttablewidget.cpp - lockwatcher.h - lockwatcher.cpp - logbrowser.h - logbrowser.cpp - networksettings.h - networksettings.cpp - ocsnavigationappsjob.h - ocsnavigationappsjob.cpp - ocsjob.h - ocsjob.cpp - ocssharejob.h - ocssharejob.cpp - ocsshareejob.h - ocsshareejob.cpp - openfilemanager.h - openfilemanager.cpp - owncloudgui.h - owncloudgui.cpp - owncloudsetupwizard.h - owncloudsetupwizard.cpp - passwordinputdialog.h - passwordinputdialog.cpp - selectivesyncdialog.h - selectivesyncdialog.cpp - settingsdialog.h - settingsdialog.cpp - sharemanager.h - sharemanager.cpp - profilepagewidget.h - profilepagewidget.cpp - sharee.h - sharee.cpp - sslbutton.h - sslbutton.cpp - sslerrordialog.h - sslerrordialog.cpp - syncrunfilelog.h - syncrunfilelog.cpp - systray.h - systray.cpp - EncryptionTokenSelectionWindow.qml - buttonstyle.h - userinfo.h - userinfo.cpp - vfsdownloaderrordialog.h - vfsdownloaderrordialog.cpp - accountstate.h - accountstate.cpp - addcertificatedialog.h - addcertificatedialog.cpp - authenticationdialog.h - authenticationdialog.cpp - proxyauthhandler.h - proxyauthhandler.cpp - proxyauthdialog.h - proxyauthdialog.cpp - tooltipupdater.h - tooltipupdater.cpp - notificationconfirmjob.h - notificationconfirmjob.cpp - guiutility.h - guiutility.cpp - elidedlabel.h - elidedlabel.cpp - iconutils.h - iconutils.cpp - remotewipe.h - remotewipe.cpp - userstatusselectormodel.h - userstatusselectormodel.cpp - emojimodel.h - emojimodel.cpp - syncconflictsmodel.h - syncconflictsmodel.cpp - fileactivitylistmodel.h - fileactivitylistmodel.cpp - filedetails/datefieldbackend.h - filedetails/datefieldbackend.cpp - filedetails/filedetails.h - filedetails/filedetails.cpp - filedetails/sharemodel.h - filedetails/sharemodel.cpp - filedetails/shareemodel.h - filedetails/shareemodel.cpp - filedetails/sortedsharemodel.h - filedetails/sortedsharemodel.cpp - tray/svgimageprovider.h - tray/svgimageprovider.cpp - tray/syncstatussummary.h - tray/syncstatussummary.cpp - tray/activitydata.h - tray/activitydata.cpp - tray/activitylistmodel.h - tray/activitylistmodel.cpp - tray/unifiedsearchresult.h - tray/asyncimageresponse.cpp - tray/unifiedsearchresult.cpp - tray/unifiedsearchresultslistmodel.h - tray/trayimageprovider.cpp - tray/unifiedsearchresultslistmodel.cpp - tray/usermodel.h - tray/usermodel.cpp - tray/notificationhandler.h - tray/notificationhandler.cpp - tray/sortedactivitylistmodel.h - tray/sortedactivitylistmodel.cpp - creds/credentialsfactory.h - tray/talkreply.cpp - creds/credentialsfactory.cpp - creds/httpcredentialsgui.h - creds/httpcredentialsgui.cpp - creds/flow2auth.h - creds/flow2auth.cpp - creds/webflowcredentials.h - creds/webflowcredentials.cpp - creds/webflowcredentialsdialog.h - creds/webflowcredentialsdialog.cpp - ga4/datacollectionwrapper.cpp - ga4/datacollectionwrapper.h - ga4/ganalytics_worker.cpp - ga4/ganalytics_worker.h - ga4/ganalytics.cpp - ga4/ganalytics.h - sessnackbar.h - sessnackbar.cpp - sesstyle.h - sesstyle.cpp - linkbutton.h - linkbutton.cpp - buttonstylestrategy.h - sesFileIconProvider.h - sesFileIconProvider.cpp - pushbuttonstylehelper.h - pushbuttonstylehelper.cpp - moreoptionsbuttonstylehelper.h - moreoptionsbuttonstylehelper.cpp - SesComponents/syncdirvalidation.h - SesComponents/syncdirvalidation.cpp - wizard/postfixlineedit.h - wizard/postfixlineedit.cpp - wizard/abstractcredswizardpage.h - wizard/abstractcredswizardpage.cpp - wizard/owncloudadvancedsetuppage.h - wizard/owncloudadvancedsetuppage.cpp - wizard/owncloudconnectionmethoddialog.h - wizard/owncloudconnectionmethoddialog.cpp - wizard/owncloudhttpcredspage.h - wizard/owncloudhttpcredspage.cpp - wizard/flow2authcredspage.h - wizard/flow2authcredspage.cpp - wizard/flow2authwidget.h - wizard/flow2authwidget.cpp - wizard/owncloudsetuppage.h - wizard/owncloudsetuppage.cpp - wizard/termsofservicecheckwidget.h - wizard/termsofservicecheckwidget.cpp - wizard/termsofservicewizardpage.h - wizard/termsofservicewizardpage.cpp - wizard/owncloudwizardcommon.h - wizard/owncloudwizardcommon.cpp - wizard/owncloudwizard.h - wizard/owncloudwizard.cpp - wizard/slideshow.h - wizard/slideshow.cpp - wizard/welcomepage.h - wizard/welcomepage.cpp - wizard/linklabel.h - wizard/linklabel.cpp +) + +qt_add_resources(client_UI_SRCS ../../resources.qrc ${CMAKE_SOURCE_DIR}/theme.qrc) + +set(client_SRCS + accountmanager.h + accountmanager.cpp + accountsettings.h + accountsettings.cpp + accountsetupfromcommandlinejob.h + accountsetupfromcommandlinejob.cpp + accountsetupcommandlinemanager.h + accountsetupcommandlinemanager.cpp + application.h + application.cpp + invalidfilenamedialog.h + invalidfilenamedialog.cpp + caseclashfilenamedialog.h + caseclashfilenamedialog.cpp + callstatechecker.h + callstatechecker.cpp + conflictdialog.h + conflictdialog.cpp + conflictsolver.h + conflictsolver.cpp + connectionvalidator.h + connectionvalidator.cpp + editlocallyjob.h + editlocallyjob.cpp + editlocallymanager.h + editlocallymanager.cpp + editlocallyverificationjob.h + editlocallyverificationjob.cpp + filetagmodel.h + filetagmodel.cpp + folder.h + folder.cpp + foldercreationdialog.h + foldercreationdialog.cpp + folderman.h + folderman.cpp + folderstatusmodel.h + folderstatusmodel.cpp + folderstatusdelegate.h + folderstatusdelegate.cpp + folderstatusview.h + folderstatusview.cpp + folderwatcher.h + folderwatcher.cpp + folderwizard.h + folderwizard.cpp + clickablelabel.h + generalsettings.h + generalsettings.cpp + legalnotice.h + legalnotice.cpp + ignorelisteditor.h + ignorelisteditor.cpp + ignorelisttablewidget.h + ignorelisttablewidget.cpp + lockwatcher.h + lockwatcher.cpp + logbrowser.h + logbrowser.cpp + networksettings.h + networksettings.cpp + ocsnavigationappsjob.h + ocsnavigationappsjob.cpp + ocsjob.h + ocsjob.cpp + ocssharejob.h + ocssharejob.cpp + ocsshareejob.h + ocsshareejob.cpp + openfilemanager.h + openfilemanager.cpp + owncloudgui.h + owncloudgui.cpp + owncloudsetupwizard.h + owncloudsetupwizard.cpp + passwordinputdialog.h + passwordinputdialog.cpp + selectivesyncdialog.h + selectivesyncdialog.cpp + settingsdialog.h + settingsdialog.cpp + sharemanager.h + sharemanager.cpp + profilepagewidget.h + profilepagewidget.cpp + sharee.h + sharee.cpp + sslbutton.h + sslbutton.cpp + sslerrordialog.h + sslerrordialog.cpp + syncrunfilelog.h + syncrunfilelog.cpp + systray.h + systray.cpp + EncryptionTokenSelectionWindow.qml + buttonstyle.h + userinfo.h + userinfo.cpp + vfsdownloaderrordialog.h + vfsdownloaderrordialog.cpp + accountstate.h + accountstate.cpp + addcertificatedialog.h + addcertificatedialog.cpp + authenticationdialog.h + authenticationdialog.cpp + proxyauthhandler.h + proxyauthhandler.cpp + proxyauthdialog.h + proxyauthdialog.cpp + tooltipupdater.h + tooltipupdater.cpp + notificationconfirmjob.h + notificationconfirmjob.cpp + guiutility.h + guiutility.cpp + elidedlabel.h + elidedlabel.cpp + iconutils.h + iconutils.cpp + remotewipe.h + remotewipe.cpp + userstatusselectormodel.h + userstatusselectormodel.cpp + emojimodel.h + emojimodel.cpp + syncconflictsmodel.h + syncconflictsmodel.cpp + fileactivitylistmodel.h + fileactivitylistmodel.cpp + filedetails/datefieldbackend.h + filedetails/datefieldbackend.cpp + filedetails/filedetails.h + filedetails/filedetails.cpp + filedetails/sharemodel.h + filedetails/sharemodel.cpp + filedetails/shareemodel.h + filedetails/shareemodel.cpp + filedetails/sortedsharemodel.h + filedetails/sortedsharemodel.cpp + tray/svgimageprovider.h + tray/svgimageprovider.cpp + tray/syncstatussummary.h + tray/syncstatussummary.cpp + tray/activitydata.h + tray/activitydata.cpp + tray/activitylistmodel.h + tray/activitylistmodel.cpp + tray/unifiedsearchresult.h + tray/asyncimageresponse.cpp + tray/unifiedsearchresult.cpp + tray/unifiedsearchresultslistmodel.h + tray/trayimageprovider.cpp + tray/unifiedsearchresultslistmodel.cpp + tray/usermodel.h + tray/usermodel.cpp + tray/notificationhandler.h + tray/notificationhandler.cpp + tray/sortedactivitylistmodel.h + tray/sortedactivitylistmodel.cpp + creds/credentialsfactory.h + tray/talkreply.cpp + creds/credentialsfactory.cpp + creds/httpcredentialsgui.h + creds/httpcredentialsgui.cpp + creds/flow2auth.h + creds/flow2auth.cpp + creds/webflowcredentials.h + creds/webflowcredentials.cpp + creds/webflowcredentialsdialog.h + creds/webflowcredentialsdialog.cpp + ga4/datacollectionwrapper.cpp + ga4/datacollectionwrapper.h + ga4/ganalytics_worker.cpp + ga4/ganalytics_worker.h + ga4/ganalytics.cpp + ga4/ganalytics.h + sessnackbar.h + sessnackbar.cpp + sesstyle.h + sesstyle.cpp + linkbutton.h + linkbutton.cpp + buttonstylestrategy.h + sesFileIconProvider.h + sesFileIconProvider.cpp + pushbuttonstylehelper.h + pushbuttonstylehelper.cpp + moreoptionsbuttonstylehelper.h + moreoptionsbuttonstylehelper.cpp + SesComponents/syncdirvalidation.h + SesComponents/syncdirvalidation.cpp + wizard/postfixlineedit.h + wizard/postfixlineedit.cpp + wizard/abstractcredswizardpage.h + wizard/abstractcredswizardpage.cpp + wizard/owncloudadvancedsetuppage.h + wizard/owncloudadvancedsetuppage.cpp + wizard/owncloudconnectionmethoddialog.h + wizard/owncloudconnectionmethoddialog.cpp + wizard/owncloudhttpcredspage.h + wizard/owncloudhttpcredspage.cpp + wizard/flow2authcredspage.h + wizard/flow2authcredspage.cpp + wizard/flow2authwidget.h + wizard/flow2authwidget.cpp + wizard/owncloudsetuppage.h + wizard/owncloudsetuppage.cpp + wizard/termsofservicecheckwidget.h + wizard/termsofservicecheckwidget.cpp + wizard/termsofservicewizardpage.h + wizard/termsofservicewizardpage.cpp + wizard/owncloudwizardcommon.h + wizard/owncloudwizardcommon.cpp + wizard/owncloudwizard.h + wizard/owncloudwizard.cpp + wizard/slideshow.h + wizard/slideshow.cpp + wizard/welcomepage.h + wizard/welcomepage.cpp wizard/dataprotectionpage.h wizard/dataprotectionpage.cpp wizard/dataprotectionsettingspage.h wizard/dataprotectionsettingspage.cpp - wizard/webviewpage.h - wizard/webviewpage.cpp - wizard/webview.h - wizard/webview.cpp - ) -endif() - -IF(BUILD_UPDATER) - set(updater_SRCS - updater/ocupdater.h - updater/ocupdater.cpp - updater/updateinfo.h - updater/updateinfo.cpp - updater/updater.h - updater/updater.cpp - ) -endif() - -IF( APPLE ) - list(APPEND client_SRCS cocoainitializer_mac.mm) - list(APPEND client_SRCS systray_mac_common.mm) - - list(APPEND client_SRCS systray_mac_usernotifications.mm) - - if (BUILD_FILE_PROVIDER_MODULE) - list(APPEND client_SRCS - # Symlinks to files in shell_integration/MacOSX/NextcloudIntegration/ - macOS/ClientCommunicationProtocol.h - # End of symlink files - macOS/fileprovider.h - macOS/fileprovider_mac.mm - macOS/fileproviderdomainmanager.h - macOS/fileproviderdomainmanager_mac.mm - macOS/fileproviderdomainsyncstatus.h - macOS/fileproviderdomainsyncstatus_mac.mm - macOS/fileprovidereditlocallyjob.h - macOS/fileprovidereditlocallyjob.cpp - macOS/fileprovidereditlocallyjob_mac.mm - macOS/fileprovideritemmetadata.h - macOS/fileprovideritemmetadata.cpp - macOS/fileprovideritemmetadata_mac.mm - macOS/fileprovidermaterialiseditemsmodel.h - macOS/fileprovidermaterialiseditemsmodel.cpp - macOS/fileprovidermaterialiseditemsmodel_mac.mm - macOS/fileprovidersettingscontroller.h - macOS/fileprovidersettingscontroller_mac.mm - macOS/fileprovidersocketcontroller.h - macOS/fileprovidersocketcontroller.cpp - macOS/fileprovidersocketserver.h - macOS/fileprovidersocketserver.cpp - macOS/fileprovidersocketserver_mac.mm - macOS/fileproviderstorageuseenumerationobserver.h - macOS/fileproviderstorageuseenumerationobserver.m - macOS/fileproviderutils.h - macOS/fileproviderutils_mac.mm - macOS/fileproviderxpc.h - macOS/fileproviderxpc_mac.mm - macOS/fileproviderxpc_mac_utils.h - macOS/fileproviderxpc_mac_utils.mm - macOS/progressobserver.h - macOS/progressobserver.m) - endif() - - list(APPEND client_SRCS foregroundbackground_interface.h) - list(APPEND client_SRCS foregroundbackground_mac.mm) - list(APPEND client_SRCS foregroundbackground_cocoa.mm) - - if(SPARKLE_FOUND AND BUILD_UPDATER) - # Define this, we need to check in updater.cpp - add_definitions(-DHAVE_SPARKLE) - list(APPEND updater_SRCS updater/sparkleupdater_mac.mm updater/sparkleupdater.h) - list(APPEND updater_DEPS ${SPARKLE_LIBRARY}) - - # Sparkle.framework is installed from here because macdeployqt's CopyFramework breaks on this bundle - # as its logic is tightly tailored around Qt frameworks - install(DIRECTORY "${SPARKLE_LIBRARY}" - DESTINATION "${OWNCLOUD_OSX_BUNDLE}/Contents/Frameworks" USE_SOURCE_PERMISSIONS) - - endif() -ENDIF() - -IF( NOT WIN32 AND NOT APPLE ) - set(client_SRCS ${client_SRCS} folderwatcher_linux.cpp) -ENDIF() -IF( WIN32 ) - set(client_SRCS - ${client_SRCS} - folderwatcher_win.cpp - navigationpanehelper.h - navigationpanehelper.cpp - shellextensionsserver.cpp - ${CMAKE_SOURCE_DIR}/src/common/shellextensionutils.cpp) -ENDIF() -IF( APPLE ) - list(APPEND client_SRCS folderwatcher_mac.cpp) -ENDIF() - -set(3rdparty_SRC - ../3rdparty/QProgressIndicator/QProgressIndicator.h - ../3rdparty/QProgressIndicator/QProgressIndicator.cpp - ../3rdparty/qtlockedfile/qtlockedfile.h - ../3rdparty/qtlockedfile/qtlockedfile.cpp - ../3rdparty/qtsingleapplication/qtlocalpeer.h - ../3rdparty/qtsingleapplication/qtlocalpeer.cpp - ../3rdparty/qtsingleapplication/qtsingleapplication.h - ../3rdparty/qtsingleapplication/qtsingleapplication.cpp - ../3rdparty/qtsingleapplication/qtsinglecoreapplication.h - ../3rdparty/qtsingleapplication/qtsinglecoreapplication.cpp - ../3rdparty/kmessagewidget/kmessagewidget.h - ../3rdparty/kmessagewidget/kmessagewidget.cpp - ../3rdparty/kirigami/wheelhandler.h - ../3rdparty/kirigami/wheelhandler.cpp - ) - -set_property(SOURCE ../3rdparty/kmessagewidget/kmessagewidget.cpp PROPERTY SKIP_UNITY_BUILD_INCLUSION ON) -set_property(SOURCE ../3rdparty/kirigami/wheelhandler.cpp PROPERTY SKIP_UNITY_BUILD_INCLUSION ON) - -if(NOT WIN32) - list(APPEND 3rdparty_SRC ../3rdparty/qtlockedfile/qtlockedfile_unix.cpp) - set_property(SOURCE ../3rdparty/qtlockedfile/qtlockedfile_unix.cpp PROPERTY SKIP_UNITY_BUILD_INCLUSION ON) -else() - list(APPEND 3rdparty_SRC ../3rdparty/qtlockedfile/qtlockedfile_win.cpp ) - set_property(SOURCE ../3rdparty/qtlockedfile/qtlockedfile_win.cpp PROPERTY SKIP_UNITY_BUILD_INCLUSION ON) -endif() - -find_package(Qt${QT_VERSION_MAJOR} ${REQUIRED_QT_VERSION} COMPONENTS LinguistTools) -if(Qt${QT_MAJOR_VERSION}LinguistTools_FOUND) - qt_add_translation(client_I18N ${TRANSLATIONS}) -endif() - -IF( WIN32 ) - configure_file( - ${CMAKE_CURRENT_SOURCE_DIR}/version.rc.in - ${CMAKE_CURRENT_BINARY_DIR}/version.rc - @ONLY) - set(client_version ${CMAKE_CURRENT_BINARY_DIR}/version.rc) - IF(NOT MSVC) - set(client_manifest ${CMAKE_CURRENT_SOURCE_DIR}/manifest-mingw.rc) - ENDIF() -ENDIF() - -set( final_src - ${client_SRCS} - ${client_UI_SRCS} - ${guiMoc} - ${client_I18N} - ${3rdparty_SRC} - ${3rdparty_MOC} -) - -if(Qt${QT_MAJOR_VERSION}Keychain_FOUND) - list(APPEND libsync_LINK_TARGETS Qt6::keychain) -endif() - -# add executable icon on windows and osx -include(GenerateIconsUtils) - -# For historical reasons we can not use the application_shortname -# for ownCloud but must rather set it manually. -if (NOT DEFINED APPLICATION_ICON_NAME) - set(APPLICATION_ICON_NAME ${APPLICATION_SHORTNAME}) -endif() - -if(NOT DEFINED APPLICATION_FOLDER_ICON_INDEX) - set(APPLICATION_FOLDER_ICON_INDEX 0) -endif() - -set(STATE_ICONS_COLORS colored black white) - -foreach(state_icons_color ${STATE_ICONS_COLORS}) - set(STATE_ICONS_PATH "${theme_dir}/${state_icons_color}/") - - message("Generating state icons from SVG in path: ${STATE_ICONS_PATH}") - - file(GLOB_RECURSE STATE_ICONS_SVG "${STATE_ICONS_PATH}/state-*.svg") - - foreach(state_icon_svg ${STATE_ICONS_SVG}) - get_filename_component(status_icon_name_wle ${state_icon_svg} NAME_WLE) - foreach(size IN ITEMS 16;32;64;128;256) - generate_sized_png_from_svg(${state_icon_svg} ${size} OUTPUT_ICON_FULL_NAME_WLE "${status_icon_name_wle}-${size}") - endforeach() - endforeach() -endforeach() - -if ((APPLICATION_ICON_SET MATCHES "PNG") - AND - (NOT EXISTS "${theme_dir}/colored/${APPLICATION_ICON_NAME}-icon.svg")) - # We may have no svg application icon in when customers use PNG - # icons in brander, but theme.qrc expects a svg icon. - file(TOUCH "${theme_dir}/colored/${APPLICATION_ICON_NAME}-icon.svg") -endif() - -if(APPLE) - set(MACOS_SIDEBAR_ICON_SVG "${theme_dir}/colored/${APPLICATION_ICON_NAME}-sidebar.svg") - generate_sized_png_from_svg(${MACOS_SIDEBAR_ICON_SVG} 16) - generate_sized_png_from_svg(${MACOS_SIDEBAR_ICON_SVG} 32) - generate_sized_png_from_svg(${MACOS_SIDEBAR_ICON_SVG} 64) - generate_sized_png_from_svg(${MACOS_SIDEBAR_ICON_SVG} 128) - generate_sized_png_from_svg(${MACOS_SIDEBAR_ICON_SVG} 256) -endif() - -if(WIN32) - set(STARTMENU_ICON_SVG "${theme_dir}/colored/${APPLICATION_ICON_NAME}-w10startmenu.svg") - generate_sized_png_from_svg(${STARTMENU_ICON_SVG} 70) - generate_sized_png_from_svg(${STARTMENU_ICON_SVG} 150) -endif() - -set(APP_ICON_SVG "${theme_dir}/colored/${APPLICATION_ICON_NAME}-icon.svg") - -# generate secondary icon if available (currently for Windows only)-------------------------------------- -set(APP_SECONDARY_ICONS "${theme_dir}/colored/icons") -set(APP_ICON_WIN_FOLDER_SVG "${APP_SECONDARY_ICONS}/${APPLICATION_ICON_NAME}-icon-win-folder.svg") - -set(RC_DEPENDENCIES "") - -if(WIN32) - if (EXISTS ${APP_ICON_WIN_FOLDER_SVG}) - get_filename_component(output_icon_name_win ${APP_ICON_WIN_FOLDER_SVG} NAME_WLE) - # Product icon (for smallest size) - foreach(size IN ITEMS 16;20) - generate_sized_png_from_svg(${APP_ICON_SVG} ${size} OUTPUT_ICON_NAME ${output_icon_name_win} OUTPUT_ICON_PATH "${APP_SECONDARY_ICONS}/") - endforeach() - - # Product icon with Windows folder (for sizes larger than 20) - foreach(size IN ITEMS 24;32;40;48;64;128;256;512;1024) - generate_sized_png_from_svg(${APP_ICON_WIN_FOLDER_SVG} ${size} OUTPUT_ICON_NAME ${output_icon_name_win} OUTPUT_ICON_PATH "${APP_SECONDARY_ICONS}/") - endforeach() - - file(GLOB_RECURSE OWNCLOUD_ICONS_WIN_FOLDER "${APP_SECONDARY_ICONS}/*-${APPLICATION_ICON_NAME}-icon*") - set(APP_ICON_WIN_FOLDER_ICO_NAME "${APPLICATION_ICON_NAME}-win-folder") - set(RC_DEPENDENCIES "${RC_DEPENDENCIES} ${APP_ICON_WIN_FOLDER_ICO_NAME}.ico") - ecm_add_app_icon(APP_ICON_WIN_FOLDER ICONS "${OWNCLOUD_ICONS_WIN_FOLDER}" SIDEBAR_ICONS "${OWNCLOUD_SIDEBAR_ICONS}" OUTFILE_BASENAME "${APP_ICON_WIN_FOLDER_ICO_NAME}" ICON_INDEX 2) - endif() -endif() -# -------------------------------------- - -if (NOT ${RC_DEPENDENCIES} STREQUAL "") - string(STRIP ${RC_DEPENDENCIES} RC_DEPENDENCIES) -endif() - -# generate primary icon from SVG (due to Win .ico vs .rc dependency issues, primary icon must always be generated last)-------------------------------------- -if(WIN32) - foreach(size IN ITEMS 16;20;24;32;40;48;64;128;256;512;1024) - generate_sized_png_from_svg(${APP_ICON_SVG} ${size}) - endforeach() -else() - foreach(size IN ITEMS 16;24;32;48;64;128;256;512;1024) - generate_sized_png_from_svg(${APP_ICON_SVG} ${size}) - endforeach() -endif() - -file(GLOB_RECURSE OWNCLOUD_ICONS "${theme_dir}/colored/*-${APPLICATION_ICON_NAME}-icon*") - -if(APPLE) - file(GLOB_RECURSE OWNCLOUD_SIDEBAR_ICONS "${theme_dir}/colored/*-${APPLICATION_ICON_NAME}-sidebar*") - MESSAGE(STATUS "OWNCLOUD_SIDEBAR_ICONS: ${APPLICATION_ICON_NAME}: ${OWNCLOUD_SIDEBAR_ICONS}") -endif() - -ecm_add_app_icon(APP_ICON RC_DEPENDENCIES ${RC_DEPENDENCIES} ICONS "${OWNCLOUD_ICONS}" SIDEBAR_ICONS "${OWNCLOUD_SIDEBAR_ICONS}" OUTFILE_BASENAME "${APPLICATION_ICON_NAME}" ICON_INDEX 1) -# -------------------------------------- - -if(WIN32) -# merge *.rc.in files for Windows (multiple ICON resources must be placed in a single file, otherwise, this won't work de to a bug in Windows compiler https://developercommunity.visualstudio.com/t/visual-studio-2017-prof-1557-cvt1100-duplicate-res/363156) - function(merge_files IN_FILE OUT_FILE) - file(READ ${IN_FILE} CONTENTS) - message("Merging ${IN_FILE} into ${OUT_FILE}") - file(APPEND ${OUT_FILE} "${CONTENTS}") - endfunction() - message("APP_ICON is: ${APP_ICON}") - if(APP_ICON) - get_filename_component(RC_IN_FOLDER ${APP_ICON}} DIRECTORY) - - file(GLOB_RECURSE RC_IN_FILES "${RC_IN_FOLDER}/*rc.in") - - foreach(rc_in_file IN ITEMS ${RC_IN_FILES}) - get_filename_component(rc_in_file_name ${rc_in_file} NAME) - get_filename_component(app_icon_name "${APP_ICON}.in" NAME) - if(NOT "${rc_in_file_name}" STREQUAL "${app_icon_name}") - merge_files(${rc_in_file} "${APP_ICON}.in") - if (DEFINED APPLICATION_FOLDER_ICON_INDEX) - MATH(EXPR APPLICATION_FOLDER_ICON_INDEX "${APPLICATION_FOLDER_ICON_INDEX}+1") - message("APPLICATION_FOLDER_ICON_INDEX is now set to: ${APPLICATION_FOLDER_ICON_INDEX}") - endif() - endif() - endforeach() - endif() -endif() -# -------------------------------------- - -if(UNIX AND NOT APPLE) - set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -fPIE") - set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fPIE") - set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -pie") -endif() - -if(CMAKE_SYSTEM_NAME STREQUAL "FreeBSD") - set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -L/usr/local/lib") -endif() - -add_library(nextcloudCore STATIC ${final_src}) - -target_link_libraries(nextcloudCore - PUBLIC - Nextcloud::sync - Qt::Widgets - Qt::GuiPrivate - Qt::Svg - Qt::Network - Qt::Xml - Qt::Qml - Qt::Quick - Qt::QuickControls2 - Qt::QuickWidgets - KF6::Archive - ) - -if(KF6GuiAddons_FOUND) - target_link_libraries(nextcloudCore - PUBLIC - KF6::GuiAddons - ) - add_definitions(-DHAVE_KGUIADDONS) -endif() - -add_subdirectory(socketapi) - -# skip unity inclusion for files which cause problems with a CMake unity build -set_property(SOURCE - ${CMAKE_CURRENT_SOURCE_DIR}/socketapi/socketapi.cpp - ${CMAKE_CURRENT_SOURCE_DIR}/socketapi/socketuploadjob.cpp - PROPERTY SKIP_UNITY_BUILD_INCLUSION ON) - -foreach(FILE IN LISTS client_UI_SRCS) - set_property(SOURCE ${FILE} PROPERTY SKIP_UNITY_BUILD_INCLUSION ON) -endforeach() - -if(WITH_WEBENGINE) - target_link_libraries(nextcloudCore PUBLIC Qt::WebEngineWidgets Qt::WebEngineCore) -endif() - -set_target_properties(nextcloudCore - PROPERTIES - AUTOUIC ON - AUTOMOC ON -) - -target_include_directories(nextcloudCore - PUBLIC - ${CMAKE_SOURCE_DIR}/src/3rdparty/QProgressIndicator - ${CMAKE_SOURCE_DIR}/src/3rdparty/qtlockedfile - ${CMAKE_SOURCE_DIR}/src/3rdparty/kirigami - ${CMAKE_SOURCE_DIR}/src/3rdparty/qtsingleapplication - ${CMAKE_SOURCE_DIR}/src/3rdparty/kmessagewidget - ${CMAKE_CURRENT_BINARY_DIR} - ${CMAKE_CURRENT_SOURCE_DIR} -) - -if(NOT BUILD_OWNCLOUD_OSX_BUNDLE) - if(NOT WIN32) - file(GLOB _icons "${theme_dir}/colored/*-${APPLICATION_ICON_NAME}-icon.png") - foreach(_file ${_icons}) - string(REPLACE "${theme_dir}/colored/" "" _res ${_file}) - string(REPLACE "-${APPLICATION_ICON_NAME}-icon.png" "" _res ${_res}) - install(FILES ${_file} RENAME ${APPLICATION_ICON_NAME}.png DESTINATION ${CMAKE_INSTALL_DATADIR}/icons/hicolor/${_res}x${_res}/apps) - endforeach(_file) - install(FILES ${client_I18N} DESTINATION ${CMAKE_INSTALL_DATADIR}/${APPLICATION_EXECUTABLE}/i18n) - else() - file(GLOB_RECURSE VISUAL_ELEMENTS "${theme_dir}/colored/*-${APPLICATION_ICON_NAME}-w10startmenu*") - install(FILES ${VISUAL_ELEMENTS} DESTINATION bin/visualelements) - install(FILES "${theme_dir}/${APPLICATION_EXECUTABLE}.VisualElementsManifest.xml" DESTINATION bin) - install(FILES ${client_I18N} DESTINATION i18n) - endif() - - # we may not add MACOSX_BUNDLE here, if not building one - add_executable(nextcloud WIN32 main.cpp ${client_version} ${client_manifest} ${APP_ICON}) - set_target_properties(nextcloud PROPERTIES - OUTPUT_NAME "${APPLICATION_EXECUTABLE}" - ) -else() - # set(CMAKE_INSTALL_PREFIX ".") # Examples use /Applications. hurmpf. - set(MACOSX_BUNDLE_ICON_FILE "${APPLICATION_ICON_NAME}.icns") - - # we must add MACOSX_BUNDLE only if building a bundle - add_executable(nextcloud WIN32 MACOSX_BUNDLE main.cpp ${APP_ICON}) - - if (BUILD_OWNCLOUD_OSX_BUNDLE) - set_target_properties(nextcloud PROPERTIES - OUTPUT_NAME "${APPLICATION_NAME}") - else() - set_target_properties(nextcloud PROPERTIES - OUTPUT_NAME "${APPLICATION_EXECUTABLE}") - endif() - - set (QM_DIR ${OWNCLOUD_OSX_BUNDLE}/Contents/Resources/Translations) - install(FILES ${client_I18N} DESTINATION ${QM_DIR}) - get_target_property(_qmake Qt::qmake LOCATION) - execute_process(COMMAND ${_qmake} -query QT_INSTALL_TRANSLATIONS - OUTPUT_VARIABLE QT_TRANSLATIONS_DIR - OUTPUT_STRIP_TRAILING_WHITESPACE - ) - file(GLOB qt_I18N ${QT_TRANSLATIONS_DIR}/qt_??.qm ${QT_TRANSLATIONS_DIR}/qt_??_??.qm) - install(FILES ${qt_I18N} DESTINATION ${QM_DIR}) - file(GLOB qtbase_I18N ${QT_TRANSLATIONS_DIR}/qtbase_??.qm ${QT_TRANSLATIONS_DIR}/qt_??_??.qm) - install(FILES ${qtbase_I18N} DESTINATION ${QM_DIR}) - file(GLOB qtkeychain_I18N ${QT_TRANSLATIONS_DIR}/qtkeychain*.qm) - install(FILES ${qtkeychain_I18N} DESTINATION ${QM_DIR}) -endif() - -IF(BUILD_UPDATER) - add_library(updater STATIC ${updater_SRCS}) - target_link_libraries(updater Nextcloud::sync ${updater_DEPS} Qt::Widgets Qt::Svg Qt::Network Qt::Xml) - target_include_directories(updater PUBLIC ${CMAKE_CURRENT_SOURCE_DIR}) - set_target_properties(updater PROPERTIES AUTOMOC ON) - target_link_libraries(nextcloudCore PUBLIC updater) -endif() - -set_target_properties(nextcloud PROPERTIES - RUNTIME_OUTPUT_DIRECTORY ${BIN_OUTPUT_DIRECTORY} -) - -target_link_libraries(nextcloud PRIVATE nextcloudCore) - -if(TARGET PkgConfig::CLOUDPROVIDERS) - message("Building with libcloudproviderssupport") - target_sources(nextcloudCore PRIVATE cloudproviders/cloudprovidermanager.cpp cloudproviders/cloudproviderwrapper.cpp) - - string(TOLOWER "${APPLICATION_VENDOR}" DBUS_VENDOR) - string(REGEX REPLACE "[^A-z0-9]" "" DBUS_VENDOR "${DBUS_VENDOR}") - string(REGEX REPLACE "[^A-z0-9]" "" DBUS_APPLICATION_NAME "${APPLICATION_SHORTNAME}") - if(NOT DBUS_PREFIX) - set(DBUS_PREFIX "com") - endif(NOT DBUS_PREFIX) - set(LIBCLOUDPROVIDERS_DBUS_BUS_NAME "${DBUS_PREFIX}.${DBUS_VENDOR}.${DBUS_APPLICATION_NAME}") - set(LIBCLOUDPROVIDERS_DBUS_OBJECT_PATH "/${DBUS_PREFIX}/${DBUS_VENDOR}/${DBUS_APPLICATION_NAME}") - - configure_file(${CMAKE_CURRENT_SOURCE_DIR}/cloudproviders/cloudproviderconfig.h.in ${CMAKE_CURRENT_BINARY_DIR}/cloudproviderconfig.h) - target_compile_definitions(nextcloudCore PUBLIC -DWITH_LIBCLOUDPROVIDERS) - target_link_libraries(nextcloudCore - PRIVATE - PkgConfig::CLOUDPROVIDERS - PkgConfig::GLIB2 - PkgConfig::GIO - ) - - list(APPEND LIBCLOUDPROVIDERS_DESKTOP_IMPLEMENTS "Implements=org.freedesktop.CloudProviders\n") - list(APPEND LIBCLOUDPROVIDERS_DESKTOP_IMPLEMENTS "[org.freedesktop.CloudProviders]") - list(APPEND LIBCLOUDPROVIDERS_DESKTOP_IMPLEMENTS "BusName=${LIBCLOUDPROVIDERS_DBUS_BUS_NAME}") - list(APPEND LIBCLOUDPROVIDERS_DESKTOP_IMPLEMENTS "ObjectPath=${LIBCLOUDPROVIDERS_DBUS_OBJECT_PATH}") - list(JOIN LIBCLOUDPROVIDERS_DESKTOP_IMPLEMENTS "\n" LIBCLOUDPROVIDERS_DESKTOP_IMPLEMENTS) -endif() - -## handle DBUS for Fdo notifications -if( UNIX AND NOT APPLE ) - find_package(Qt${QT_VERSION_MAJOR} ${REQUIRED_QT_VERSION} COMPONENTS DBus) - target_link_libraries(nextcloudCore PUBLIC Qt::DBus) - target_compile_definitions(nextcloudCore PUBLIC "USE_FDO_NOTIFICATIONS") -endif() - -if (APPLE) - if (BUILD_FILE_PROVIDER_MODULE) - target_link_libraries(nextcloudCore PUBLIC "-framework UserNotifications -framework FileProvider") - else() - target_link_libraries(nextcloudCore PUBLIC "-framework UserNotifications") - endif() -endif() - -if(WITH_CRASHREPORTER) - target_link_libraries(nextcloudCore PUBLIC crashreporter-handler) - - if(UNIX AND NOT MAC) - find_package(Threads REQUIRED) - target_link_libraries(nextcloudCore PUBLIC Threads::Threads) - endif() -endif() - -install(TARGETS nextcloud - RUNTIME DESTINATION bin - LIBRARY DESTINATION lib - ARCHIVE DESTINATION lib - BUNDLE DESTINATION "." - ) - -if (WIN32) - install(FILES $ DESTINATION bin OPTIONAL) -endif() - -# FIXME: The following lines are dup in src/gui and src/cmd because it needs to be done after both are installed -#FIXME: find a nice solution to make the second if(BUILD_OWNCLOUD_OSX_BUNDLE) unnecessary -# currently it needs to be done because the code right above needs to be executed no matter -# if building a bundle or not and the install_qt4_executable needs to be called afterwards -# -# OSX: Run macdeployqt for src/gui and for src/cmd using the -executable option -if(BUILD_OWNCLOUD_OSX_BUNDLE AND NOT BUILD_LIBRARIES_ONLY) - get_target_property (QT_QMAKE_EXECUTABLE Qt::qmake IMPORTED_LOCATION) - get_filename_component(QT_BIN_DIR "${QT_QMAKE_EXECUTABLE}" DIRECTORY) - find_program(MACDEPLOYQT_EXECUTABLE macdeployqt HINTS "${QT_BIN_DIR}") - - set(cmd_NAME ${APPLICATION_EXECUTABLE}cmd) - - if(CMAKE_BUILD_TYPE MATCHES Debug) - set(NO_STRIP "-no-strip") - else() - set(NO_STRIP "") - endif() - - add_custom_command(TARGET nextcloud POST_BUILD - COMMAND "${MACDEPLOYQT_EXECUTABLE}" - "$/../.." - -qmldir=${CMAKE_SOURCE_DIR}/src/gui - -always-overwrite - -executable=$/${cmd_NAME} - ${NO_STRIP} - COMMAND "${CMAKE_COMMAND}" - -E rm -rf "${BIN_OUTPUT_DIRECTORY}/${OWNCLOUD_OSX_BUNDLE}/Contents/PlugIns/bearer" - COMMENT "Running macdeployqt..." - ) -endif() - -if(NOT BUILD_OWNCLOUD_OSX_BUNDLE AND NOT WIN32) - configure_file(${CMAKE_SOURCE_DIR}/mirall.desktop.in - ${CMAKE_CURRENT_BINARY_DIR}/${LINUX_APPLICATION_ID}.desktop) - install(FILES ${CMAKE_CURRENT_BINARY_DIR}/${LINUX_APPLICATION_ID}.desktop DESTINATION ${CMAKE_INSTALL_DATADIR}/applications ) - - configure_file(owncloud.xml.in ${APPLICATION_EXECUTABLE}.xml) - install(FILES ${CMAKE_CURRENT_BINARY_DIR}/${APPLICATION_EXECUTABLE}.xml DESTINATION ${CMAKE_INSTALL_DATADIR}/mime/packages ) - - find_package(SharedMimeInfo) - if(SharedMimeInfo_FOUND) - update_xdg_mimetypes( ${CMAKE_INSTALL_DATADIR}/mime/packages ) - endif(SharedMimeInfo_FOUND) -endif() - -configure_file(configgui.h.in ${CMAKE_CURRENT_BINARY_DIR}/configgui.h) + wizard/linklabel.h + wizard/linklabel.cpp + ) + +if (WITH_WEBENGINE) + list(APPEND client_SRCS + wizard/webviewpage.h + wizard/webviewpage.cpp + wizard/webview.h + wizard/webview.cpp + ) +endif() + +IF(BUILD_UPDATER) + set(updater_SRCS + updater/ocupdater.h + updater/ocupdater.cpp + updater/updateinfo.h + updater/updateinfo.cpp + updater/updater.h + updater/updater.cpp + ) +endif() + +IF( APPLE ) + list(APPEND client_SRCS cocoainitializer_mac.mm) + list(APPEND client_SRCS systray_mac_common.mm) + + list(APPEND client_SRCS systray_mac_usernotifications.mm) + + if (BUILD_FILE_PROVIDER_MODULE) + list(APPEND client_SRCS + # Symlinks to files in shell_integration/MacOSX/NextcloudIntegration/ + macOS/ClientCommunicationProtocol.h + # End of symlink files + macOS/fileprovider.h + macOS/fileprovider_mac.mm + macOS/fileproviderdomainmanager.h + macOS/fileproviderdomainmanager_mac.mm + macOS/fileproviderdomainsyncstatus.h + macOS/fileproviderdomainsyncstatus_mac.mm + macOS/fileprovidereditlocallyjob.h + macOS/fileprovidereditlocallyjob.cpp + macOS/fileprovidereditlocallyjob_mac.mm + macOS/fileprovideritemmetadata.h + macOS/fileprovideritemmetadata.cpp + macOS/fileprovideritemmetadata_mac.mm + macOS/fileprovidermaterialiseditemsmodel.h + macOS/fileprovidermaterialiseditemsmodel.cpp + macOS/fileprovidermaterialiseditemsmodel_mac.mm + macOS/fileprovidersettingscontroller.h + macOS/fileprovidersettingscontroller_mac.mm + macOS/fileprovidersocketcontroller.h + macOS/fileprovidersocketcontroller.cpp + macOS/fileprovidersocketserver.h + macOS/fileprovidersocketserver.cpp + macOS/fileprovidersocketserver_mac.mm + macOS/fileproviderstorageuseenumerationobserver.h + macOS/fileproviderstorageuseenumerationobserver.m + macOS/fileproviderutils.h + macOS/fileproviderutils_mac.mm + macOS/fileproviderxpc.h + macOS/fileproviderxpc_mac.mm + macOS/fileproviderxpc_mac_utils.h + macOS/fileproviderxpc_mac_utils.mm + macOS/progressobserver.h + macOS/progressobserver.m) + endif() + + list(APPEND client_SRCS foregroundbackground_interface.h) + list(APPEND client_SRCS foregroundbackground_mac.mm) + list(APPEND client_SRCS foregroundbackground_cocoa.mm) + + if(SPARKLE_FOUND AND BUILD_UPDATER) + # Define this, we need to check in updater.cpp + add_definitions(-DHAVE_SPARKLE) + list(APPEND updater_SRCS updater/sparkleupdater_mac.mm updater/sparkleupdater.h) + list(APPEND updater_DEPS ${SPARKLE_LIBRARY}) + + # Sparkle.framework is installed from here because macdeployqt's CopyFramework breaks on this bundle + # as its logic is tightly tailored around Qt frameworks + install(DIRECTORY "${SPARKLE_LIBRARY}" + DESTINATION "${OWNCLOUD_OSX_BUNDLE}/Contents/Frameworks" USE_SOURCE_PERMISSIONS) + + endif() +ENDIF() + +IF( NOT WIN32 AND NOT APPLE ) + set(client_SRCS ${client_SRCS} folderwatcher_linux.cpp) +ENDIF() +IF( WIN32 ) + set(client_SRCS + ${client_SRCS} + folderwatcher_win.cpp + navigationpanehelper.h + navigationpanehelper.cpp + shellextensionsserver.cpp + ${CMAKE_SOURCE_DIR}/src/common/shellextensionutils.cpp) +ENDIF() +IF( APPLE ) + list(APPEND client_SRCS folderwatcher_mac.cpp) +ENDIF() + +set(3rdparty_SRC + ../3rdparty/QProgressIndicator/QProgressIndicator.h + ../3rdparty/QProgressIndicator/QProgressIndicator.cpp + ../3rdparty/qtlockedfile/qtlockedfile.h + ../3rdparty/qtlockedfile/qtlockedfile.cpp + ../3rdparty/qtsingleapplication/qtlocalpeer.h + ../3rdparty/qtsingleapplication/qtlocalpeer.cpp + ../3rdparty/qtsingleapplication/qtsingleapplication.h + ../3rdparty/qtsingleapplication/qtsingleapplication.cpp + ../3rdparty/qtsingleapplication/qtsinglecoreapplication.h + ../3rdparty/qtsingleapplication/qtsinglecoreapplication.cpp + ../3rdparty/kmessagewidget/kmessagewidget.h + ../3rdparty/kmessagewidget/kmessagewidget.cpp + ../3rdparty/kirigami/wheelhandler.h + ../3rdparty/kirigami/wheelhandler.cpp + ) + +set_property(SOURCE ../3rdparty/kmessagewidget/kmessagewidget.cpp PROPERTY SKIP_UNITY_BUILD_INCLUSION ON) +set_property(SOURCE ../3rdparty/kirigami/wheelhandler.cpp PROPERTY SKIP_UNITY_BUILD_INCLUSION ON) + +if(NOT WIN32) + list(APPEND 3rdparty_SRC ../3rdparty/qtlockedfile/qtlockedfile_unix.cpp) + set_property(SOURCE ../3rdparty/qtlockedfile/qtlockedfile_unix.cpp PROPERTY SKIP_UNITY_BUILD_INCLUSION ON) +else() + list(APPEND 3rdparty_SRC ../3rdparty/qtlockedfile/qtlockedfile_win.cpp ) + set_property(SOURCE ../3rdparty/qtlockedfile/qtlockedfile_win.cpp PROPERTY SKIP_UNITY_BUILD_INCLUSION ON) +endif() + +find_package(Qt${QT_VERSION_MAJOR} ${REQUIRED_QT_VERSION} COMPONENTS LinguistTools) +if(Qt${QT_MAJOR_VERSION}LinguistTools_FOUND) + qt_add_translation(client_I18N ${TRANSLATIONS}) +endif() + +IF( WIN32 ) + configure_file( + ${CMAKE_CURRENT_SOURCE_DIR}/version.rc.in + ${CMAKE_CURRENT_BINARY_DIR}/version.rc + @ONLY) + set(client_version ${CMAKE_CURRENT_BINARY_DIR}/version.rc) + IF(NOT MSVC) + set(client_manifest ${CMAKE_CURRENT_SOURCE_DIR}/manifest-mingw.rc) + ENDIF() +ENDIF() + +set( final_src + ${client_SRCS} + ${client_UI_SRCS} + ${guiMoc} + ${client_I18N} + ${3rdparty_SRC} + ${3rdparty_MOC} +) + +if(Qt${QT_MAJOR_VERSION}Keychain_FOUND) + list(APPEND libsync_LINK_TARGETS Qt6::keychain) +endif() + +# add executable icon on windows and osx +include(GenerateIconsUtils) + +# For historical reasons we can not use the application_shortname +# for ownCloud but must rather set it manually. +if (NOT DEFINED APPLICATION_ICON_NAME) + set(APPLICATION_ICON_NAME ${APPLICATION_SHORTNAME}) +endif() + +if(NOT DEFINED APPLICATION_FOLDER_ICON_INDEX) + set(APPLICATION_FOLDER_ICON_INDEX 0) +endif() + +set(STATE_ICONS_COLORS colored black white) + +foreach(state_icons_color ${STATE_ICONS_COLORS}) + set(STATE_ICONS_PATH "${theme_dir}/${state_icons_color}/") + + message("Generating state icons from SVG in path: ${STATE_ICONS_PATH}") + + file(GLOB_RECURSE STATE_ICONS_SVG "${STATE_ICONS_PATH}/state-*.svg") + + foreach(state_icon_svg ${STATE_ICONS_SVG}) + get_filename_component(status_icon_name_wle ${state_icon_svg} NAME_WLE) + foreach(size IN ITEMS 16;32;64;128;256) + generate_sized_png_from_svg(${state_icon_svg} ${size} OUTPUT_ICON_FULL_NAME_WLE "${status_icon_name_wle}-${size}") + endforeach() + endforeach() +endforeach() + +if ((APPLICATION_ICON_SET MATCHES "PNG") + AND + (NOT EXISTS "${theme_dir}/colored/${APPLICATION_ICON_NAME}-icon.svg")) + # We may have no svg application icon in when customers use PNG + # icons in brander, but theme.qrc expects a svg icon. + file(TOUCH "${theme_dir}/colored/${APPLICATION_ICON_NAME}-icon.svg") +endif() + +if(APPLE) + set(MACOS_SIDEBAR_ICON_SVG "${theme_dir}/colored/${APPLICATION_ICON_NAME}-sidebar.svg") + generate_sized_png_from_svg(${MACOS_SIDEBAR_ICON_SVG} 16) + generate_sized_png_from_svg(${MACOS_SIDEBAR_ICON_SVG} 32) + generate_sized_png_from_svg(${MACOS_SIDEBAR_ICON_SVG} 64) + generate_sized_png_from_svg(${MACOS_SIDEBAR_ICON_SVG} 128) + generate_sized_png_from_svg(${MACOS_SIDEBAR_ICON_SVG} 256) +endif() + +if(WIN32) + set(STARTMENU_ICON_SVG "${theme_dir}/colored/${APPLICATION_ICON_NAME}-w10startmenu.svg") + generate_sized_png_from_svg(${STARTMENU_ICON_SVG} 70) + generate_sized_png_from_svg(${STARTMENU_ICON_SVG} 150) +endif() + +set(APP_ICON_SVG "${theme_dir}/colored/${APPLICATION_ICON_NAME}-icon.svg") + +# generate secondary icon if available (currently for Windows only)-------------------------------------- +set(APP_SECONDARY_ICONS "${theme_dir}/colored/icons") +set(APP_ICON_WIN_FOLDER_SVG "${APP_SECONDARY_ICONS}/${APPLICATION_ICON_NAME}-icon-win-folder.svg") + +set(RC_DEPENDENCIES "") + +if(WIN32) + if (EXISTS ${APP_ICON_WIN_FOLDER_SVG}) + get_filename_component(output_icon_name_win ${APP_ICON_WIN_FOLDER_SVG} NAME_WLE) + # Product icon (for smallest size) + foreach(size IN ITEMS 16;20) + generate_sized_png_from_svg(${APP_ICON_SVG} ${size} OUTPUT_ICON_NAME ${output_icon_name_win} OUTPUT_ICON_PATH "${APP_SECONDARY_ICONS}/") + endforeach() + + # Product icon with Windows folder (for sizes larger than 20) + foreach(size IN ITEMS 24;32;40;48;64;128;256;512;1024) + generate_sized_png_from_svg(${APP_ICON_WIN_FOLDER_SVG} ${size} OUTPUT_ICON_NAME ${output_icon_name_win} OUTPUT_ICON_PATH "${APP_SECONDARY_ICONS}/") + endforeach() + + file(GLOB_RECURSE OWNCLOUD_ICONS_WIN_FOLDER "${APP_SECONDARY_ICONS}/*-${APPLICATION_ICON_NAME}-icon*") + set(APP_ICON_WIN_FOLDER_ICO_NAME "${APPLICATION_ICON_NAME}-win-folder") + set(RC_DEPENDENCIES "${RC_DEPENDENCIES} ${APP_ICON_WIN_FOLDER_ICO_NAME}.ico") + ecm_add_app_icon(APP_ICON_WIN_FOLDER ICONS "${OWNCLOUD_ICONS_WIN_FOLDER}" SIDEBAR_ICONS "${OWNCLOUD_SIDEBAR_ICONS}" OUTFILE_BASENAME "${APP_ICON_WIN_FOLDER_ICO_NAME}" ICON_INDEX 2) + endif() +endif() +# -------------------------------------- + +if (NOT ${RC_DEPENDENCIES} STREQUAL "") + string(STRIP ${RC_DEPENDENCIES} RC_DEPENDENCIES) +endif() + +# generate primary icon from SVG (due to Win .ico vs .rc dependency issues, primary icon must always be generated last)-------------------------------------- +if(WIN32) + foreach(size IN ITEMS 16;20;24;32;40;48;64;128;256;512;1024) + generate_sized_png_from_svg(${APP_ICON_SVG} ${size}) + endforeach() +else() + foreach(size IN ITEMS 16;24;32;48;64;128;256;512;1024) + generate_sized_png_from_svg(${APP_ICON_SVG} ${size}) + endforeach() +endif() + +file(GLOB_RECURSE OWNCLOUD_ICONS "${theme_dir}/colored/*-${APPLICATION_ICON_NAME}-icon*") + +if(APPLE) + file(GLOB_RECURSE OWNCLOUD_SIDEBAR_ICONS "${theme_dir}/colored/*-${APPLICATION_ICON_NAME}-sidebar*") + MESSAGE(STATUS "OWNCLOUD_SIDEBAR_ICONS: ${APPLICATION_ICON_NAME}: ${OWNCLOUD_SIDEBAR_ICONS}") +endif() + +ecm_add_app_icon(APP_ICON RC_DEPENDENCIES ${RC_DEPENDENCIES} ICONS "${OWNCLOUD_ICONS}" SIDEBAR_ICONS "${OWNCLOUD_SIDEBAR_ICONS}" OUTFILE_BASENAME "${APPLICATION_ICON_NAME}" ICON_INDEX 1) +# -------------------------------------- + +if(WIN32) +# merge *.rc.in files for Windows (multiple ICON resources must be placed in a single file, otherwise, this won't work de to a bug in Windows compiler https://developercommunity.visualstudio.com/t/visual-studio-2017-prof-1557-cvt1100-duplicate-res/363156) + function(merge_files IN_FILE OUT_FILE) + file(READ ${IN_FILE} CONTENTS) + message("Merging ${IN_FILE} into ${OUT_FILE}") + file(APPEND ${OUT_FILE} "${CONTENTS}") + endfunction() + message("APP_ICON is: ${APP_ICON}") + if(APP_ICON) + get_filename_component(RC_IN_FOLDER ${APP_ICON}} DIRECTORY) + + file(GLOB_RECURSE RC_IN_FILES "${RC_IN_FOLDER}/*rc.in") + + foreach(rc_in_file IN ITEMS ${RC_IN_FILES}) + get_filename_component(rc_in_file_name ${rc_in_file} NAME) + get_filename_component(app_icon_name "${APP_ICON}.in" NAME) + if(NOT "${rc_in_file_name}" STREQUAL "${app_icon_name}") + merge_files(${rc_in_file} "${APP_ICON}.in") + if (DEFINED APPLICATION_FOLDER_ICON_INDEX) + MATH(EXPR APPLICATION_FOLDER_ICON_INDEX "${APPLICATION_FOLDER_ICON_INDEX}+1") + message("APPLICATION_FOLDER_ICON_INDEX is now set to: ${APPLICATION_FOLDER_ICON_INDEX}") + endif() + endif() + endforeach() + endif() +endif() +# -------------------------------------- + +if(UNIX AND NOT APPLE) + set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -fPIE") + set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fPIE") + set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -pie") +endif() + +if(CMAKE_SYSTEM_NAME STREQUAL "FreeBSD") + set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -L/usr/local/lib") +endif() + +add_library(nextcloudCore STATIC ${final_src}) + +target_link_libraries(nextcloudCore + PUBLIC + Nextcloud::sync + Qt::Widgets + Qt::GuiPrivate + Qt::Svg + Qt::Network + Qt::Xml + Qt::Qml + Qt::Quick + Qt::QuickControls2 + Qt::QuickWidgets + KF6::Archive + ) + +if(KF6GuiAddons_FOUND) + target_link_libraries(nextcloudCore + PUBLIC + KF6::GuiAddons + ) + add_definitions(-DHAVE_KGUIADDONS) +endif() + +add_subdirectory(socketapi) + +# skip unity inclusion for files which cause problems with a CMake unity build +set_property(SOURCE + ${CMAKE_CURRENT_SOURCE_DIR}/socketapi/socketapi.cpp + ${CMAKE_CURRENT_SOURCE_DIR}/socketapi/socketuploadjob.cpp + PROPERTY SKIP_UNITY_BUILD_INCLUSION ON) + +foreach(FILE IN LISTS client_UI_SRCS) + set_property(SOURCE ${FILE} PROPERTY SKIP_UNITY_BUILD_INCLUSION ON) +endforeach() + +if(WITH_WEBENGINE) + target_link_libraries(nextcloudCore PUBLIC Qt::WebEngineWidgets Qt::WebEngineCore) +endif() + +set_target_properties(nextcloudCore + PROPERTIES + AUTOUIC ON + AUTOMOC ON +) + +target_include_directories(nextcloudCore + PUBLIC + ${CMAKE_SOURCE_DIR}/src/3rdparty/QProgressIndicator + ${CMAKE_SOURCE_DIR}/src/3rdparty/qtlockedfile + ${CMAKE_SOURCE_DIR}/src/3rdparty/kirigami + ${CMAKE_SOURCE_DIR}/src/3rdparty/qtsingleapplication + ${CMAKE_SOURCE_DIR}/src/3rdparty/kmessagewidget + ${CMAKE_CURRENT_BINARY_DIR} + ${CMAKE_CURRENT_SOURCE_DIR} +) + +if(NOT BUILD_OWNCLOUD_OSX_BUNDLE) + if(NOT WIN32) + file(GLOB _icons "${theme_dir}/colored/*-${APPLICATION_ICON_NAME}-icon.png") + foreach(_file ${_icons}) + string(REPLACE "${theme_dir}/colored/" "" _res ${_file}) + string(REPLACE "-${APPLICATION_ICON_NAME}-icon.png" "" _res ${_res}) + install(FILES ${_file} RENAME ${APPLICATION_ICON_NAME}.png DESTINATION ${CMAKE_INSTALL_DATADIR}/icons/hicolor/${_res}x${_res}/apps) + endforeach(_file) + install(FILES ${client_I18N} DESTINATION ${CMAKE_INSTALL_DATADIR}/${APPLICATION_EXECUTABLE}/i18n) + else() + file(GLOB_RECURSE VISUAL_ELEMENTS "${theme_dir}/colored/*-${APPLICATION_ICON_NAME}-w10startmenu*") + install(FILES ${VISUAL_ELEMENTS} DESTINATION bin/visualelements) + install(FILES "${theme_dir}/${APPLICATION_EXECUTABLE}.VisualElementsManifest.xml" DESTINATION bin) + install(FILES ${client_I18N} DESTINATION i18n) + endif() + + # we may not add MACOSX_BUNDLE here, if not building one + add_executable(nextcloud WIN32 main.cpp ${client_version} ${client_manifest} ${APP_ICON}) + set_target_properties(nextcloud PROPERTIES + OUTPUT_NAME "${APPLICATION_EXECUTABLE}" + ) +else() + # set(CMAKE_INSTALL_PREFIX ".") # Examples use /Applications. hurmpf. + set(MACOSX_BUNDLE_ICON_FILE "${APPLICATION_ICON_NAME}.icns") + + # we must add MACOSX_BUNDLE only if building a bundle + add_executable(nextcloud WIN32 MACOSX_BUNDLE main.cpp ${APP_ICON}) + + if (BUILD_OWNCLOUD_OSX_BUNDLE) + set_target_properties(nextcloud PROPERTIES + OUTPUT_NAME "${APPLICATION_NAME}") + else() + set_target_properties(nextcloud PROPERTIES + OUTPUT_NAME "${APPLICATION_EXECUTABLE}") + endif() + + set (QM_DIR ${OWNCLOUD_OSX_BUNDLE}/Contents/Resources/Translations) + install(FILES ${client_I18N} DESTINATION ${QM_DIR}) + get_target_property(_qmake Qt::qmake LOCATION) + execute_process(COMMAND ${_qmake} -query QT_INSTALL_TRANSLATIONS + OUTPUT_VARIABLE QT_TRANSLATIONS_DIR + OUTPUT_STRIP_TRAILING_WHITESPACE + ) + file(GLOB qt_I18N ${QT_TRANSLATIONS_DIR}/qt_??.qm ${QT_TRANSLATIONS_DIR}/qt_??_??.qm) + install(FILES ${qt_I18N} DESTINATION ${QM_DIR}) + file(GLOB qtbase_I18N ${QT_TRANSLATIONS_DIR}/qtbase_??.qm ${QT_TRANSLATIONS_DIR}/qt_??_??.qm) + install(FILES ${qtbase_I18N} DESTINATION ${QM_DIR}) + file(GLOB qtkeychain_I18N ${QT_TRANSLATIONS_DIR}/qtkeychain*.qm) + install(FILES ${qtkeychain_I18N} DESTINATION ${QM_DIR}) +endif() + +IF(BUILD_UPDATER) + add_library(updater STATIC ${updater_SRCS}) + target_link_libraries(updater Nextcloud::sync ${updater_DEPS} Qt::Widgets Qt::Svg Qt::Network Qt::Xml) + target_include_directories(updater PUBLIC ${CMAKE_CURRENT_SOURCE_DIR}) + set_target_properties(updater PROPERTIES AUTOMOC ON) + target_link_libraries(nextcloudCore PUBLIC updater) +endif() + +set_target_properties(nextcloud PROPERTIES + RUNTIME_OUTPUT_DIRECTORY ${BIN_OUTPUT_DIRECTORY} +) + +target_link_libraries(nextcloud PRIVATE nextcloudCore) + +if(TARGET PkgConfig::CLOUDPROVIDERS) + message("Building with libcloudproviderssupport") + target_sources(nextcloudCore PRIVATE cloudproviders/cloudprovidermanager.cpp cloudproviders/cloudproviderwrapper.cpp) + + string(TOLOWER "${APPLICATION_VENDOR}" DBUS_VENDOR) + string(REGEX REPLACE "[^A-z0-9]" "" DBUS_VENDOR "${DBUS_VENDOR}") + string(REGEX REPLACE "[^A-z0-9]" "" DBUS_APPLICATION_NAME "${APPLICATION_SHORTNAME}") + if(NOT DBUS_PREFIX) + set(DBUS_PREFIX "com") + endif(NOT DBUS_PREFIX) + set(LIBCLOUDPROVIDERS_DBUS_BUS_NAME "${DBUS_PREFIX}.${DBUS_VENDOR}.${DBUS_APPLICATION_NAME}") + set(LIBCLOUDPROVIDERS_DBUS_OBJECT_PATH "/${DBUS_PREFIX}/${DBUS_VENDOR}/${DBUS_APPLICATION_NAME}") + + configure_file(${CMAKE_CURRENT_SOURCE_DIR}/cloudproviders/cloudproviderconfig.h.in ${CMAKE_CURRENT_BINARY_DIR}/cloudproviderconfig.h) + target_compile_definitions(nextcloudCore PUBLIC -DWITH_LIBCLOUDPROVIDERS) + target_link_libraries(nextcloudCore + PRIVATE + PkgConfig::CLOUDPROVIDERS + PkgConfig::GLIB2 + PkgConfig::GIO + ) + + list(APPEND LIBCLOUDPROVIDERS_DESKTOP_IMPLEMENTS "Implements=org.freedesktop.CloudProviders\n") + list(APPEND LIBCLOUDPROVIDERS_DESKTOP_IMPLEMENTS "[org.freedesktop.CloudProviders]") + list(APPEND LIBCLOUDPROVIDERS_DESKTOP_IMPLEMENTS "BusName=${LIBCLOUDPROVIDERS_DBUS_BUS_NAME}") + list(APPEND LIBCLOUDPROVIDERS_DESKTOP_IMPLEMENTS "ObjectPath=${LIBCLOUDPROVIDERS_DBUS_OBJECT_PATH}") + list(JOIN LIBCLOUDPROVIDERS_DESKTOP_IMPLEMENTS "\n" LIBCLOUDPROVIDERS_DESKTOP_IMPLEMENTS) +endif() + +## handle DBUS for Fdo notifications +if( UNIX AND NOT APPLE ) + find_package(Qt${QT_VERSION_MAJOR} ${REQUIRED_QT_VERSION} COMPONENTS DBus) + target_link_libraries(nextcloudCore PUBLIC Qt::DBus) + target_compile_definitions(nextcloudCore PUBLIC "USE_FDO_NOTIFICATIONS") +endif() + +if (APPLE) + if (BUILD_FILE_PROVIDER_MODULE) + target_link_libraries(nextcloudCore PUBLIC "-framework UserNotifications -framework FileProvider") + else() + target_link_libraries(nextcloudCore PUBLIC "-framework UserNotifications") + endif() +endif() + +if(WITH_CRASHREPORTER) + target_link_libraries(nextcloudCore PUBLIC crashreporter-handler) + + if(UNIX AND NOT MAC) + find_package(Threads REQUIRED) + target_link_libraries(nextcloudCore PUBLIC Threads::Threads) + endif() +endif() + +install(TARGETS nextcloud + RUNTIME DESTINATION bin + LIBRARY DESTINATION lib + ARCHIVE DESTINATION lib + BUNDLE DESTINATION "." + ) + +if (WIN32) + install(FILES $ DESTINATION bin OPTIONAL) +endif() + +# FIXME: The following lines are dup in src/gui and src/cmd because it needs to be done after both are installed +#FIXME: find a nice solution to make the second if(BUILD_OWNCLOUD_OSX_BUNDLE) unnecessary +# currently it needs to be done because the code right above needs to be executed no matter +# if building a bundle or not and the install_qt4_executable needs to be called afterwards +# +# OSX: Run macdeployqt for src/gui and for src/cmd using the -executable option +if(BUILD_OWNCLOUD_OSX_BUNDLE AND NOT BUILD_LIBRARIES_ONLY) + get_target_property (QT_QMAKE_EXECUTABLE Qt::qmake IMPORTED_LOCATION) + get_filename_component(QT_BIN_DIR "${QT_QMAKE_EXECUTABLE}" DIRECTORY) + find_program(MACDEPLOYQT_EXECUTABLE macdeployqt HINTS "${QT_BIN_DIR}") + + set(cmd_NAME ${APPLICATION_EXECUTABLE}cmd) + + if(CMAKE_BUILD_TYPE MATCHES Debug) + set(NO_STRIP "-no-strip") + else() + set(NO_STRIP "") + endif() + + add_custom_command(TARGET nextcloud POST_BUILD + COMMAND "${MACDEPLOYQT_EXECUTABLE}" + "$/../.." + -qmldir=${CMAKE_SOURCE_DIR}/src/gui + -always-overwrite + -executable=$/${cmd_NAME} + ${NO_STRIP} + COMMAND "${CMAKE_COMMAND}" + -E rm -rf "${BIN_OUTPUT_DIRECTORY}/${OWNCLOUD_OSX_BUNDLE}/Contents/PlugIns/bearer" + COMMENT "Running macdeployqt..." + ) +endif() + +if(NOT BUILD_OWNCLOUD_OSX_BUNDLE AND NOT WIN32) + configure_file(${CMAKE_SOURCE_DIR}/mirall.desktop.in + ${CMAKE_CURRENT_BINARY_DIR}/${LINUX_APPLICATION_ID}.desktop) + install(FILES ${CMAKE_CURRENT_BINARY_DIR}/${LINUX_APPLICATION_ID}.desktop DESTINATION ${CMAKE_INSTALL_DATADIR}/applications ) + + configure_file(owncloud.xml.in ${APPLICATION_EXECUTABLE}.xml) + install(FILES ${CMAKE_CURRENT_BINARY_DIR}/${APPLICATION_EXECUTABLE}.xml DESTINATION ${CMAKE_INSTALL_DATADIR}/mime/packages ) + + find_package(SharedMimeInfo) + if(SharedMimeInfo_FOUND) + update_xdg_mimetypes( ${CMAKE_INSTALL_DATADIR}/mime/packages ) + endif(SharedMimeInfo_FOUND) +endif() + +configure_file(configgui.h.in ${CMAKE_CURRENT_BINARY_DIR}/configgui.h) From 730e2d13c54a7ab5b62ce644be330e7335d2e6fe Mon Sep 17 00:00:00 2001 From: Kevin Beraz Date: Tue, 6 May 2025 10:28:22 +0200 Subject: [PATCH 191/371] SES-352 add new dataprotection section to generalsettings --- src/gui/generalsettings.cpp | 38 ++++++++++++++++++++++- src/gui/generalsettings.ui | 61 ++++++++++++++++++++++++++++--------- 2 files changed, 83 insertions(+), 16 deletions(-) diff --git a/src/gui/generalsettings.cpp b/src/gui/generalsettings.cpp index 6f31e2f0d9f34..1c03a22938b27 100644 --- a/src/gui/generalsettings.cpp +++ b/src/gui/generalsettings.cpp @@ -199,11 +199,11 @@ GeneralSettings::GeneralSettings(QWidget *parent) _ui->labelInterval->setTextFormat(Qt::RichText); _ui->labelInterval->setTextInteractionFlags(Qt::TextBrowserInteraction); _ui->labelInterval->setOpenExternalLinks(true); +#endif connect(_ui->sendNecessaryData_checkbox, &QCheckBox::clicked, this, [this](){ _ui->sendNecessaryData_checkbox->setChecked(true); }); -#endif connect(_ui->serverNotificationsCheckBox, &QAbstractButton::toggled, this, &GeneralSettings::slotToggleOptionalServerNotifications); @@ -770,6 +770,42 @@ void GeneralSettings::customizeStyle() ) ); + _ui->sendNecessaryData_checkbox->setStyleSheet( + QStringLiteral("QCheckBox { font-size: %1; font-weight: %2; color: %3; }").arg( + IonosTheme::settingsTextSize(), + IonosTheme::settingsTitleWeight600(), + IonosTheme::folderWizardSubtitleColor() + ) + ); + + _ui->sendAnonymousData_checkbox->setStyleSheet( + QStringLiteral("QCheckBox { font-size: %1; font-weight: %2; color: %3; }").arg( + IonosTheme::settingsTextSize(), + IonosTheme::settingsTitleWeight600(), + IonosTheme::folderWizardSubtitleColor() + ) + ); + + _ui->necessaryDataLabel->setStyleSheet( + QStringLiteral("QLabel { font-size: %1; font-weight: %2; color: %3; margin-left: %4; }").arg( + IonosTheme::settingsTextSize(), + IonosTheme::settingsTextWeight(), + IonosTheme::black(), + "24" + ) + ); + + _ui->anonymousDataLabel->setStyleSheet( + QStringLiteral("QLabel { font-size: %1; font-weight: %2; color: %3; margin-left: %4; margin-bottom: %5; }").arg( + IonosTheme::settingsTextSize(), + IonosTheme::settingsTextWeight(), + IonosTheme::black(), + "24", + "16" + + ) + ); + #if defined(Q_OS_MAC) // _ui->generalBoxLayout->setMargin(16); // _ui->dataProtectionBoxLayout->setMargin(16); diff --git a/src/gui/generalsettings.ui b/src/gui/generalsettings.ui index b71963b409e75..58d5ae5719a93 100644 --- a/src/gui/generalsettings.ui +++ b/src/gui/generalsettings.ui @@ -358,22 +358,53 @@ 32 - - - - &Necessary data - - - true - - + + + + + + &Necessary data + + + true + + + + + + + Required to ensure that the software can be used as expected + + + true + + + + - - - - &Send anonymous use - - + + + + + + Send anonymous use + + + true + + + + + + + This helps us to optimize the software and to better identify system crashes and unexpected errors. + + + true + + + + From 7c7c62465722847f4d49d53b7fa262689dee607d Mon Sep 17 00:00:00 2001 From: Kevin Beraz Date: Tue, 6 May 2025 10:30:09 +0200 Subject: [PATCH 192/371] SES-352 design changes --- src/gui/wizard/dataprotectionpage.cpp | 50 +++++++++++++-------------- src/gui/wizard/dataprotectionpage.h | 3 -- src/gui/wizard/dataprotectionpage.ui | 20 ++++------- 3 files changed, 32 insertions(+), 41 deletions(-) diff --git a/src/gui/wizard/dataprotectionpage.cpp b/src/gui/wizard/dataprotectionpage.cpp index 9e47ccd4e19e5..adc11edf9aebd 100644 --- a/src/gui/wizard/dataprotectionpage.cpp +++ b/src/gui/wizard/dataprotectionpage.cpp @@ -1,10 +1,11 @@ #include "dataprotectionpage.h" #include "buttonstyle.h" +#include "linkbutton.h" #include "guiutility.h" #include "theme.h" #include "ui_dataprotectionpage.h" #include "wizard/owncloudwizard.h" -#include "wizard/slideshow.h" +#include namespace OCC{ @@ -21,22 +22,9 @@ namespace OCC{ void DataProtectionPage::setupUi() { _ui->setupUi(this); - setupSlideShow(); } void DataProtectionPage::initializePage() - { - customizeStyle(); - } - - void DataProtectionPage::styleSlideShow() - { - const auto dataProtectionLogoFileName = Theme::hidpiFileName(":/client/theme/colored/data-protection-logo.png"); - - _ui->slideShow->addSlide(dataProtectionLogoFileName, tr("This application uses tracking technologies. By clicking on Agree, you accept the processing of your anonymized data. You can adjust your choices at any time via the settings.Information on data processing and more can be found in our privacy policy")); - } - - void DataProtectionPage::setupSlideShow() { connect(_ui->agreeButton, &QPushButton::clicked, this, [this]() { _nextPage = WizardCommon::Page_AdvancedSetup; @@ -47,6 +35,13 @@ namespace OCC{ _nextPage = WizardCommon::Page_DataProtectionSettings; _ocWizard->next(); }); + + _ui->logoLabel->setPixmap(Theme::hidpiFileName(":/client/theme/colored/data-protection-logo.png")); + _ui->descriptionLabel->setText(tr("This application uses tracking technologies. By clicking on Agree, you accept the processing of your anonymized data. You can adjust your choices at any time via the settings.

          Information on data processing and more can be found in our privacy policy.")); + _ui->descriptionLabel->setOpenExternalLinks(true); + _ui->descriptionLabel->setTextFormat(Qt::RichText); + + customizeStyle(); } int DataProtectionPage::nextId() const @@ -56,24 +51,29 @@ namespace OCC{ void DataProtectionPage::customizeStyle() { - _ui->slideShow->setStyleSheet( - QStringLiteral("QLabel { %1; }").arg( + _ocWizard->setFixedSize(626, 460); + _ui->mainVBox->setContentsMargins(24, 0, 24, 24); + + _ui->logoLabel->setAlignment(Qt::AlignHCenter); + _ui->logoLabel->setMargin(8); + + _ui->descriptionLabel->setStyleSheet( + QStringLiteral("QLabel { %1; margin-left: %2; margin-right: %2; margin-bottom: %2; }").arg( IonosTheme::fontConfigurationCss( IonosTheme::settingsFont(), IonosTheme::settingsTextSize(), - "0", - IonosTheme::titleColor() - ) + IonosTheme::settingsTextWeight(), + IonosTheme::black() + ), + "32" ) ); - _ocWizard->setFixedSize(626, 460); - _ui->mainVBox->setContentsMargins(24, 0, 24, 24); + _ui->agreeButton->setMinimumWidth(80); + _ui->agreeButton->setProperty("buttonStyle", QVariant::fromValue(OCC::ButtonStyleName::Primary)); _ui->settingsButton->setMinimumWidth(80); - styleSlideShow(); - - _ui->buttonLayout->setContentsMargins(160, 0, 160, 0); - _ui->agreeButton->setProperty("buttonStyle", QVariant::fromValue(OCC::ButtonStyleName::Primary)); + _ui->buttonLayout->setAlignment(Qt::AlignCenter); + _ui->buttonLayout->setSpacing(16); } } \ No newline at end of file diff --git a/src/gui/wizard/dataprotectionpage.h b/src/gui/wizard/dataprotectionpage.h index 7f89428037f24..5c55fe8dd1df9 100644 --- a/src/gui/wizard/dataprotectionpage.h +++ b/src/gui/wizard/dataprotectionpage.h @@ -25,14 +25,11 @@ class DataProtectionPage : public QWizardPage private: void setupUi(); void customizeStyle(); - void styleSlideShow(); - void setupSlideShow(); QScopedPointer _ui; OwncloudWizard *_ocWizard; - //SES-TODO ADJUST NEXTPAGE WizardCommon::Pages _nextPage = WizardCommon::Page_AdvancedSetup; }; diff --git a/src/gui/wizard/dataprotectionpage.ui b/src/gui/wizard/dataprotectionpage.ui index 39b397dca9f57..ca352b14e0750 100644 --- a/src/gui/wizard/dataprotectionpage.ui +++ b/src/gui/wizard/dataprotectionpage.ui @@ -21,19 +21,13 @@ - - - - 12 - true - - - - - -1 - -1 - - + + + + + + true + From 974dc4c4bca340fe8fa54a8f140153a1141224b8 Mon Sep 17 00:00:00 2001 From: Kevin Beraz Date: Tue, 6 May 2025 10:32:00 +0200 Subject: [PATCH 193/371] SES-352 change order of wizard pages depending on IONOS_BUILD --- src/gui/wizard/flow2authcredspage.cpp | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/gui/wizard/flow2authcredspage.cpp b/src/gui/wizard/flow2authcredspage.cpp index 42c69472b9f56..812afeae24d92 100644 --- a/src/gui/wizard/flow2authcredspage.cpp +++ b/src/gui/wizard/flow2authcredspage.cpp @@ -110,7 +110,10 @@ int Flow2AuthCredsPage::nextId() const return WizardCommon::Page_TermsOfService; } +#ifdef IONOS_BUILD return WizardCommon::Page_DataProtection; +#endif + return WizardCommon::Page_AdvancedSetup; } void Flow2AuthCredsPage::setConnected() From 8fdeddd301418bbb2fe23f3cda5df660cd01fab2 Mon Sep 17 00:00:00 2001 From: Kevin Beraz Date: Tue, 6 May 2025 10:32:31 +0200 Subject: [PATCH 194/371] SES-352 hide Back and Next Button of QWIzard --- src/gui/wizard/owncloudwizard.cpp | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/gui/wizard/owncloudwizard.cpp b/src/gui/wizard/owncloudwizard.cpp index 4b114774fd69c..d39ab8e340c40 100644 --- a/src/gui/wizard/owncloudwizard.cpp +++ b/src/gui/wizard/owncloudwizard.cpp @@ -358,6 +358,10 @@ void OwncloudWizard::slotCurrentPageChanged(int id) } else if (id == WizardCommon::Page_AdvancedSetup) { setButtonLayout({ QWizard::CustomButton2, QWizard::Stretch, QWizard::CustomButton1, QWizard::FinishButton }); setNextButtonAsDefault(); + } else if (id == WizardCommon::Page_DataProtection || + id == WizardCommon::Page_DataProtectionSettings) { + button(QWizard::BackButton)->setHidden(true); + button(QWizard::NextButton)->setHidden(true); } else { setButtonLayout({ QWizard::BackButton, QWizard::Stretch, QWizard::NextButton }); setNextButtonAsDefault(); From 5cc750887db7e6ba168d132443aab4d9f0392904 Mon Sep 17 00:00:00 2001 From: Kevin Beraz Date: Tue, 6 May 2025 10:33:00 +0200 Subject: [PATCH 195/371] SES-352 design changes in dataprotection settings --- src/gui/wizard/dataprotectionsettingspage.cpp | 35 +++++--- src/gui/wizard/dataprotectionsettingspage.ui | 79 +++++++++++-------- 2 files changed, 72 insertions(+), 42 deletions(-) diff --git a/src/gui/wizard/dataprotectionsettingspage.cpp b/src/gui/wizard/dataprotectionsettingspage.cpp index 3d2acd5a93426..d5c51f08afe71 100644 --- a/src/gui/wizard/dataprotectionsettingspage.cpp +++ b/src/gui/wizard/dataprotectionsettingspage.cpp @@ -5,7 +5,6 @@ #include "theme.h" #include "ui_dataprotectionsettingspage.h" #include "wizard/owncloudwizard.h" -#include "wizard/slideshow.h" namespace OCC{ @@ -51,25 +50,41 @@ namespace OCC{ connect(_ui->necessaryDataCheckBox, &QCheckBox::clicked, this, [this](){ _ui->necessaryDataCheckBox->setChecked(true); }); + + _ui->descriptionLabel->setText(tr("We collect anonymized data to optimize our app. We use software solutions from various partners for this purpose. We want to give you full transparency and freedom of choice regarding the collection and processing of your anonymized usage. You can change your settings at any time under the menu item Data Protection.")); } void DataProtectionSettingsPage::customizeStyle() { - _ui->slideShow->setStyleSheet( - QStringLiteral("QLabel { %1; }").arg( + _ocWizard->setFixedSize(626, 460); + + _ui->mainVBox->setContentsMargins(32, 0, 32, 0); + + _ui->necessaryDataCheckBox->setChecked(true); + + _ui->descriptionLabel->setStyleSheet( + QStringLiteral("QLabel { %1; margin-top: %2; margin-bottom: %2; }").arg( IonosTheme::fontConfigurationCss( IonosTheme::settingsFont(), - IonosTheme::settingsSmallTextSize(), + IonosTheme::settingsTextSize(), IonosTheme::settingsTextWeight(), - IonosTheme::titleColor() - ) + IonosTheme::black() + ), + "24" ) ); - _ocWizard->setFixedSize(626, 460); - _ui->mainVBox->setContentsMargins(32, 0, 32, 32); - _ui->necessaryDataCheckBox->setChecked(true); + + _ui->necessaryDataLabel->setStyleSheet(QStringLiteral("QLabel { margin-left: %1; margin-bottom: %2; }") + .arg("16", IonosTheme::smallMargin())); + _ui->anonymousDataLabel->setStyleSheet(QStringLiteral("QLabel { margin-left: %1; margin-bottom: %2; }") + .arg("16", "48")); + + _ui->buttonLayout->setAlignment(Qt::AlignCenter); + _ui->buttonLayout->setSpacing(16); + _ui->buttonLayout->setContentsMargins(0, 16, 0, 16); + _ui->backButton->setMinimumWidth(80); - _ui->saveButton->setMinimumWidth(160); + _ui->saveButton->setMinimumWidth(140); _ui->saveButton->setProperty("buttonStyle", QVariant::fromValue(OCC::ButtonStyleName::Primary)); } } \ No newline at end of file diff --git a/src/gui/wizard/dataprotectionsettingspage.ui b/src/gui/wizard/dataprotectionsettingspage.ui index 50973ddfa516e..ff04e84ddb020 100644 --- a/src/gui/wizard/dataprotectionsettingspage.ui +++ b/src/gui/wizard/dataprotectionsettingspage.ui @@ -21,44 +21,59 @@ - - - - 12 - true - - - - - -1 - -1 - - - - - - - - We collect anonymized data to optimize our app. We use software solutions from various partners for this purpose. We want to give you full transparency and freedom of choice regarding the collection and processing of your anonymized usage. You can change your settings at any time under the menu item Data Protection. - + true - - - - Necessary data - - + + + + + + &Necessary data + + + true + + + + + + + Required to ensure that the software can be used as expected + + + true + + + + - - - - Send anonymous use - - + + + + + + Send anonymous use + + + true + + + + + + + This helps us to optimize the software and to better identify system crashes and unexpected errors. + + + true + + + + From b8b00662b1bffd6f1c9da483c04c598506f955e3 Mon Sep 17 00:00:00 2001 From: Kevin Beraz Date: Tue, 6 May 2025 13:53:29 +0200 Subject: [PATCH 196/371] SES-352 anonymous use checkbox is unchecked by default --- src/gui/wizard/dataprotectionsettingspage.cpp | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/gui/wizard/dataprotectionsettingspage.cpp b/src/gui/wizard/dataprotectionsettingspage.cpp index d5c51f08afe71..7f44c2b227f14 100644 --- a/src/gui/wizard/dataprotectionsettingspage.cpp +++ b/src/gui/wizard/dataprotectionsettingspage.cpp @@ -52,6 +52,8 @@ namespace OCC{ }); _ui->descriptionLabel->setText(tr("We collect anonymized data to optimize our app. We use software solutions from various partners for this purpose. We want to give you full transparency and freedom of choice regarding the collection and processing of your anonymized usage. You can change your settings at any time under the menu item Data Protection.")); + + _ui->anonymousDataCheckBox->setChecked(false); } void DataProtectionSettingsPage::customizeStyle() From 1a5e7ff52ec034e74d6fbc99d364a3da11ca0c69 Mon Sep 17 00:00:00 2001 From: Kevin Beraz Date: Wed, 7 May 2025 11:13:21 +0200 Subject: [PATCH 197/371] SES-352 anonymous use checkbox is true by default --- src/gui/wizard/dataprotectionsettingspage.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/gui/wizard/dataprotectionsettingspage.cpp b/src/gui/wizard/dataprotectionsettingspage.cpp index 7f44c2b227f14..a3b6a8c0978dc 100644 --- a/src/gui/wizard/dataprotectionsettingspage.cpp +++ b/src/gui/wizard/dataprotectionsettingspage.cpp @@ -53,7 +53,7 @@ namespace OCC{ _ui->descriptionLabel->setText(tr("We collect anonymized data to optimize our app. We use software solutions from various partners for this purpose. We want to give you full transparency and freedom of choice regarding the collection and processing of your anonymized usage. You can change your settings at any time under the menu item Data Protection.")); - _ui->anonymousDataCheckBox->setChecked(false); + _ui->anonymousDataCheckBox->setChecked(true); } void DataProtectionSettingsPage::customizeStyle() From fd70614a88380df509d166208f79026a3a04d006 Mon Sep 17 00:00:00 2001 From: Kevin Beraz Date: Wed, 7 May 2025 11:13:44 +0200 Subject: [PATCH 198/371] SES-352 style tracking checkbox titles --- src/gui/wizard/dataprotectionsettingspage.cpp | 20 +++++++++++++++++++ 1 file changed, 20 insertions(+) diff --git a/src/gui/wizard/dataprotectionsettingspage.cpp b/src/gui/wizard/dataprotectionsettingspage.cpp index a3b6a8c0978dc..084b87cfce0c5 100644 --- a/src/gui/wizard/dataprotectionsettingspage.cpp +++ b/src/gui/wizard/dataprotectionsettingspage.cpp @@ -62,6 +62,26 @@ namespace OCC{ _ui->mainVBox->setContentsMargins(32, 0, 32, 0); + _ui->necessaryDataCheckBox->setStyleSheet( + QStringLiteral("QCheckBox { %1; }").arg( + IonosTheme::fontConfigurationCss( + IonosTheme::settingsFont(), + IonosTheme::settingsTextSize(), + IonosTheme::settingsTitleWeight600(), + IonosTheme::folderWizardSubtitleColor() + ) + )); + + _ui->anonymousDataCheckBox->setStyleSheet( + QStringLiteral("QCheckBox { %1; }").arg( + IonosTheme::fontConfigurationCss( + IonosTheme::settingsFont(), + IonosTheme::settingsTextSize(), + IonosTheme::settingsTitleWeight600(), + IonosTheme::folderWizardSubtitleColor() + ) + )); + _ui->necessaryDataCheckBox->setChecked(true); _ui->descriptionLabel->setStyleSheet( From 0df57853b7b7a2e3da624249e9d963323f1596b4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Christopher=20H=C3=A4tty?= Date: Wed, 7 May 2025 13:49:39 +0200 Subject: [PATCH 199/371] SES-354 set correct background Color for General- and AccountSettings --- src/gui/accountsettings.cpp | 3 ++- src/gui/generalsettings.cpp | 3 +++ 2 files changed, 5 insertions(+), 1 deletion(-) diff --git a/src/gui/accountsettings.cpp b/src/gui/accountsettings.cpp index f7d94b25761cd..da12f055c545b 100644 --- a/src/gui/accountsettings.cpp +++ b/src/gui/accountsettings.cpp @@ -180,6 +180,8 @@ AccountSettings::AccountSettings(AccountState *accountState, QWidget *parent) , _userInfo(accountState, false, true) { _ui->setupUi(this); + this->setAutoFillBackground(true); + setPalette(QPalette(QPalette::Window, IonosTheme::dialogBackgroundColor())); _model->setAccountState(_accountState); _model->setParent(this); @@ -591,7 +593,6 @@ void AccountSettings::openIgnoredFilesDialog(const QString & absFolderPath) const auto dialog = new QDialog(); dialog->setLayout(layout); - dialog->setStyleSheet(QStringLiteral("QDialog { background-color: %1; }").arg(IonosTheme::dialogBackgroundColor())); connect(buttonBox, &QDialogButtonBox::clicked, [=](QAbstractButton * button) { if (buttonBox->buttonRole(button) == QDialogButtonBox::AcceptRole) { diff --git a/src/gui/generalsettings.cpp b/src/gui/generalsettings.cpp index 1c03a22938b27..53b7a7db744f2 100644 --- a/src/gui/generalsettings.cpp +++ b/src/gui/generalsettings.cpp @@ -736,6 +736,9 @@ void GeneralSettings::customizeStyle() }(); _ui->infoAndUpdatesLabel->setText(aboutText); + this->setAutoFillBackground(true); + setPalette(QPalette(QPalette::Window, IonosTheme::dialogBackgroundColor())); + this->setStyleSheet( QStringLiteral("QGroupBox { border: %1; font-size: %2; font-weight: %3; color: %4; }").arg( Theme::instance()->systemPalette()["base"].value().name(), From 3c533362e38125e61984ad5c3266313ebba8b0fa Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Christopher=20H=C3=A4tty?= Date: Wed, 7 May 2025 13:50:07 +0200 Subject: [PATCH 200/371] SES-354 fix font in PillButtons --- src/gui/tray/PrimaryPillButton.qml | 2 +- src/gui/tray/SecondaryPillButton.qml | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/gui/tray/PrimaryPillButton.qml b/src/gui/tray/PrimaryPillButton.qml index dae050d20ea1f..178d4be1e88f8 100644 --- a/src/gui/tray/PrimaryPillButton.qml +++ b/src/gui/tray/PrimaryPillButton.qml @@ -22,7 +22,7 @@ Button{ text: root.text color: "white" font.weight: Style.sesFontNormalWeight - font.pointSize: Style.sesFontPointSize + font.pixelSize: Style.sesFontHintPixelSize } Image { visible: root.iconSource diff --git a/src/gui/tray/SecondaryPillButton.qml b/src/gui/tray/SecondaryPillButton.qml index e15bdfb40cea7..a250fedc389fd 100644 --- a/src/gui/tray/SecondaryPillButton.qml +++ b/src/gui/tray/SecondaryPillButton.qml @@ -25,7 +25,7 @@ Button{ text: root.text color: textColor font.weight: Style.sesFontNormalWeight - font.pointSize: Style.sesFontPointSize + font.pixelSize: Style.sesFontHintPixelSize } Image { visible: root.iconSource From 6def44dee018085333f466a236853bb91f944110 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Christopher=20H=C3=A4tty?= Date: Wed, 7 May 2025 14:43:32 +0200 Subject: [PATCH 201/371] SES-354 set background color for foldercreationdialog --- src/gui/foldercreationdialog.cpp | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/gui/foldercreationdialog.cpp b/src/gui/foldercreationdialog.cpp index 1fab6af0348b1..28796623bc4ff 100644 --- a/src/gui/foldercreationdialog.cpp +++ b/src/gui/foldercreationdialog.cpp @@ -111,6 +111,9 @@ void FolderCreationDialog::customizeStyle() { ui->buttonBox->setLayoutDirection(Qt::RightToLeft); + this->setAutoFillBackground(true); + setPalette(QPalette(QPalette::Window, IonosTheme::dialogBackgroundColor())); + QPushButton *okButton = ui->buttonBox->button(QDialogButtonBox::Ok); okButton->setProperty("buttonStyle", QVariant::fromValue(OCC::ButtonStyleName::Primary)); From ba3b72c97fdf370e55ca3782fff431da16b85541 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Christopher=20H=C3=A4tty?= Date: Thu, 8 May 2025 14:22:59 +0100 Subject: [PATCH 202/371] SES-352 - Increased size slightly do prevent clipping of the image --- src/gui/wizard/dataprotectionpage.cpp | 2 +- src/gui/wizard/dataprotectionsettingspage.cpp | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/gui/wizard/dataprotectionpage.cpp b/src/gui/wizard/dataprotectionpage.cpp index adc11edf9aebd..5ec006e6709bf 100644 --- a/src/gui/wizard/dataprotectionpage.cpp +++ b/src/gui/wizard/dataprotectionpage.cpp @@ -51,7 +51,7 @@ namespace OCC{ void DataProtectionPage::customizeStyle() { - _ocWizard->setFixedSize(626, 460); + _ocWizard->setFixedSize(626, 470); _ui->mainVBox->setContentsMargins(24, 0, 24, 24); _ui->logoLabel->setAlignment(Qt::AlignHCenter); diff --git a/src/gui/wizard/dataprotectionsettingspage.cpp b/src/gui/wizard/dataprotectionsettingspage.cpp index 084b87cfce0c5..0e7088f20d0b4 100644 --- a/src/gui/wizard/dataprotectionsettingspage.cpp +++ b/src/gui/wizard/dataprotectionsettingspage.cpp @@ -58,7 +58,7 @@ namespace OCC{ void DataProtectionSettingsPage::customizeStyle() { - _ocWizard->setFixedSize(626, 460); + _ocWizard->setFixedSize(626, 470); _ui->mainVBox->setContentsMargins(32, 0, 32, 0); From 3645cb24bc31c03e6d431ca30bfd8b1970c28c7a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Christopher=20H=C3=A4tty?= Date: Thu, 8 May 2025 14:23:20 +0100 Subject: [PATCH 203/371] SES-352 - Increased size do prevent clipping of the text --- src/gui/settingsdialog.cpp | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/gui/settingsdialog.cpp b/src/gui/settingsdialog.cpp index e41bb2e274e06..f9af541d9b692 100644 --- a/src/gui/settingsdialog.cpp +++ b/src/gui/settingsdialog.cpp @@ -193,7 +193,8 @@ SettingsDialog::SettingsDialog(ownCloudGui *gui, QWidget *parent) setWindowFlags(windowFlags() & ~Qt::WindowContextHelpButtonHint); cfg.restoreGeometry(this); - resize(width() > IonosTheme::minimalSettingsDialogWidth() ? width(): IonosTheme::minimalSettingsDialogWidth(), height()); + resize(width() > IonosTheme::minimalSettingsDialogWidth() ? width(): IonosTheme::minimalSettingsDialogWidth(), + height() > generalSettings->sizeHint().height() ? height(): generalSettings->sizeHint().height()); } SettingsDialog::~SettingsDialog() From 3f0f0e34fbd1d3627fd5bf6967cf4f3e04ae56d7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Christopher=20H=C3=A4tty?= Date: Thu, 8 May 2025 14:24:08 +0100 Subject: [PATCH 204/371] SES-352 - Disabled necessary data checkboxs --- src/gui/generalsettings.cpp | 1 + src/gui/wizard/dataprotectionsettingspage.cpp | 1 + 2 files changed, 2 insertions(+) diff --git a/src/gui/generalsettings.cpp b/src/gui/generalsettings.cpp index 53b7a7db744f2..2a965137aa615 100644 --- a/src/gui/generalsettings.cpp +++ b/src/gui/generalsettings.cpp @@ -773,6 +773,7 @@ void GeneralSettings::customizeStyle() ) ); + _ui->sendNecessaryData_checkbox->setEnabled(false); _ui->sendNecessaryData_checkbox->setStyleSheet( QStringLiteral("QCheckBox { font-size: %1; font-weight: %2; color: %3; }").arg( IonosTheme::settingsTextSize(), diff --git a/src/gui/wizard/dataprotectionsettingspage.cpp b/src/gui/wizard/dataprotectionsettingspage.cpp index 0e7088f20d0b4..f40db79afa288 100644 --- a/src/gui/wizard/dataprotectionsettingspage.cpp +++ b/src/gui/wizard/dataprotectionsettingspage.cpp @@ -62,6 +62,7 @@ namespace OCC{ _ui->mainVBox->setContentsMargins(32, 0, 32, 0); + _ui->necessaryDataCheckBox->setEnabled(false); _ui->necessaryDataCheckBox->setStyleSheet( QStringLiteral("QCheckBox { %1; }").arg( IonosTheme::fontConfigurationCss( From 2f2ca748ea514a62b0f15d4f577d747d778f7fd0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Christopher=20H=C3=A4tty?= Date: Thu, 8 May 2025 14:24:24 +0100 Subject: [PATCH 205/371] SES-352 - Removed special character --- src/gui/wizard/dataprotectionsettingspage.ui | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/gui/wizard/dataprotectionsettingspage.ui b/src/gui/wizard/dataprotectionsettingspage.ui index ff04e84ddb020..0caa1b13b4f14 100644 --- a/src/gui/wizard/dataprotectionsettingspage.ui +++ b/src/gui/wizard/dataprotectionsettingspage.ui @@ -32,7 +32,7 @@ - &Necessary data + Necessary data true From e4ebdbbdccecc0a5329c2a090af2f6f9e40115eb Mon Sep 17 00:00:00 2001 From: Kevin Beraz Date: Fri, 9 May 2025 09:55:09 +0200 Subject: [PATCH 206/371] SES-352 rename setup method --- src/gui/wizard/dataprotectionsettingspage.cpp | 4 ++-- src/gui/wizard/dataprotectionsettingspage.h | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/src/gui/wizard/dataprotectionsettingspage.cpp b/src/gui/wizard/dataprotectionsettingspage.cpp index f40db79afa288..a3f049d40ad80 100644 --- a/src/gui/wizard/dataprotectionsettingspage.cpp +++ b/src/gui/wizard/dataprotectionsettingspage.cpp @@ -22,7 +22,7 @@ namespace OCC{ void DataProtectionSettingsPage::setupUi() { _ui->setupUi(this); - setupSlideShow(); + setupPage(); } void DataProtectionSettingsPage::initializePage() @@ -31,7 +31,7 @@ namespace OCC{ customizeStyle(); } - void DataProtectionSettingsPage::setupSlideShow() + void DataProtectionSettingsPage::setupPage() { ConfigFile cfgFile; diff --git a/src/gui/wizard/dataprotectionsettingspage.h b/src/gui/wizard/dataprotectionsettingspage.h index 65bb40ad12179..5a44cbb8957b1 100644 --- a/src/gui/wizard/dataprotectionsettingspage.h +++ b/src/gui/wizard/dataprotectionsettingspage.h @@ -24,7 +24,7 @@ class DataProtectionSettingsPage : public QWizardPage private: void setupUi(); void customizeStyle(); - void setupSlideShow(); + void setupPage(); QScopedPointer _ui; From 1194e0ec2c30562b366195382ed232308d583338 Mon Sep 17 00:00:00 2001 From: Kevin Beraz Date: Fri, 9 May 2025 10:02:49 +0200 Subject: [PATCH 207/371] SES-352 change flow of tracking view after 'save settings' we go to advancedsetup instead of going back to dataprotection --- src/gui/wizard/dataprotectionsettingspage.cpp | 7 ++++++- src/gui/wizard/dataprotectionsettingspage.h | 5 ++++- 2 files changed, 10 insertions(+), 2 deletions(-) diff --git a/src/gui/wizard/dataprotectionsettingspage.cpp b/src/gui/wizard/dataprotectionsettingspage.cpp index a3f049d40ad80..71fe16c40b914 100644 --- a/src/gui/wizard/dataprotectionsettingspage.cpp +++ b/src/gui/wizard/dataprotectionsettingspage.cpp @@ -44,7 +44,7 @@ namespace OCC{ connect(_ui->saveButton, &QPushButton::clicked, this, [this, &cfgFile](){ _anonymousUseState = _ui->anonymousDataCheckBox->isChecked(); cfgFile.setSendData(_anonymousUseState); - _ocWizard->back(); + _ocWizard->next(); }); connect(_ui->necessaryDataCheckBox, &QCheckBox::clicked, this, [this](){ @@ -56,6 +56,11 @@ namespace OCC{ _ui->anonymousDataCheckBox->setChecked(true); } + int DataProtectionSettingsPage::nextId() const + { + return _nextPage; + } + void DataProtectionSettingsPage::customizeStyle() { _ocWizard->setFixedSize(626, 470); diff --git a/src/gui/wizard/dataprotectionsettingspage.h b/src/gui/wizard/dataprotectionsettingspage.h index 5a44cbb8957b1..10267065fad65 100644 --- a/src/gui/wizard/dataprotectionsettingspage.h +++ b/src/gui/wizard/dataprotectionsettingspage.h @@ -19,6 +19,7 @@ class DataProtectionSettingsPage : public QWizardPage public: explicit DataProtectionSettingsPage(OwncloudWizard *ocWizard); ~DataProtectionSettingsPage() override; + [[nodiscard]] int nextId() const override; void initializePage() override; private: @@ -28,9 +29,11 @@ class DataProtectionSettingsPage : public QWizardPage QScopedPointer _ui; + bool _anonymousUseState; + OwncloudWizard *_ocWizard; - bool _anonymousUseState; + WizardCommon::Pages _nextPage = WizardCommon::Page_AdvancedSetup; }; } \ No newline at end of file From 10e5513adbd7320f715c03bec3ddc86886f05855 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Christopher=20H=C3=A4tty?= Date: Fri, 9 May 2025 15:05:57 +0200 Subject: [PATCH 208/371] SES-363 SES-371 Added sign.sh (based on start.sh) --- admin/osx/ionos_macmaker/sign.sh | 181 +++++++++++++++++++++++++++++++ 1 file changed, 181 insertions(+) create mode 100644 admin/osx/ionos_macmaker/sign.sh diff --git a/admin/osx/ionos_macmaker/sign.sh b/admin/osx/ionos_macmaker/sign.sh new file mode 100644 index 0000000000000..d370114d0e2d3 --- /dev/null +++ b/admin/osx/ionos_macmaker/sign.sh @@ -0,0 +1,181 @@ +#!/bin/bash + +recursive_sign(){ + local path="$1" + local extension="${path##*.}" + if [[ "$extension" == "dylib" || "$extension" == "framework" || "$extension" == "appex" ]]; then + echo "Signing directory: $path" + codesign -s "$2" --force --preserve-metadata=entitlements --verbose=4 --deep --options=runtime --timestamp "${path}" + fi +} + +export -f recursive_sign + +sign_folder_content(){ + local folder="$1" + local identity="$2" + local entitlements="$3" + codesign -s "$identity" --force $entitlements --verbose=4 --deep --options=runtime --timestamp "${folder}" +} + +export -f sign_folder_content + +# This script is used to build the Mac OS X version of the IONOS client. +set -xe + +# Parse the command line arguments +while getopts "b:s:ci" opt; do + case ${opt} in + b )BUILD_DIR=$OPTARG;; + s )CODE_SIGN_IDENTITY=$OPTARG ;; + c )CLEAN_REBUILD=true ;; + i )PACKAGE_INSTALLER=true ;; + \? ) + echo "Usage: start.sh [-b ] [-s ] [-c] [-i]" + exit 1 + ;; + esac +done + +# Set the deployment target +export MACOSX_DEPLOYMENT_TARGET=10.15 + +# Some variables +PRODUCT_NAME="IONOS HiDrive Next" +REPO_ROOT_DIR="../../.." +CRAFT_DIR=~/Craft64 +PRODUCT_DIR=$BUILD_DIR/product +BUILD_UPDATER=true +TEAM_IDENTIFIER="5TDLCVD243" + +# Check if the client is running and kill it +# This is necessary to avoid issues with replacement of the bundle file +# if pgrep -x "$PRODUCT_NAME" >/dev/null; then +# killall "$PRODUCT_NAME" +# fi + +# Check if BUILD_DIR is set, so we don't accidentally delete the whole filesystem +# if [ -z "$BUILD_DIR" ]; then +# echo "Build dir not set. Add -b to the command." +# exit 0 +# fi + +# Check if BUILD_DIR exists. If not, create it. If so, clear it. +# if [ ! -d $BUILD_DIR ]; then +# mkdir -p $BUILD_DIR +# else +# if [ $CLEAN_REBUILD = true ]; then +# rm -rf $BUILD_DIR/* +# fi +# fi + +# Check if Craft dir exists, if not exit +# if [ ! -d $CRAFT_DIR ]; then +# echo "Craft dir not found. Exiting." +# exit 1 +# fi + +# Load Sparkle +SPARKLE_DIR=$BUILD_DIR/sparkle +SPARKLE_DOWNLOAD_URI="https://github.com/sparkle-project/Sparkle/releases/download/1.27.3/Sparkle-1.27.3.tar.xz" + +if [ "$CLEAN_REBUILD" == "true" ] && [ "$BUILD_UPDATER" == "true" ]; then + mkdir -p $SPARKLE_DIR + wget $SPARKLE_DOWNLOAD_URI -O $SPARKLE_DIR/Sparkle.tar.xz + tar -xvf $SPARKLE_DIR/Sparkle.tar.xz -C $SPARKLE_DIR + + # Sign Sparkle + if [ -n "$CODE_SIGN_IDENTITY" ]; then + SPARKLE_FRAMEWORK_DIR=$SPARKLE_DIR/Sparkle.framework + find "$SPARKLE_FRAMEWORK_DIR/Resources/Autoupdate.app/Contents/MacOS" -mindepth 1 -print0 | xargs -0 -I {} bash -c 'sign_folder_content "$@" "$CODE_SIGN_IDENTITY"' _ {} "$CODE_SIGN_IDENTITY" + codesign -s "$CODE_SIGN_IDENTITY" --force --preserve-metadata=entitlements --verbose=4 --deep --options=runtime --timestamp "$SPARKLE_FRAMEWORK_DIR/Sparkle" + fi +fi + +# # Build the client +# cmake -S $REPO_ROOT_DIR/ -B $BUILD_DIR \ +# -DQT_TRANSLATIONS_DIR=$REPO_ROOT_DIR/translations \ +# -DCMAKE_INSTALL_PREFIX=$PRODUCT_DIR \ +# -DBUILD_TESTING=OFF \ +# -DBUILD_UPDATER=$(if [ $BUILD_UPDATER == true ]; then echo "ON"; else echo "OFF"; fi) \ +# -DMIRALL_VERSION_BUILD=`date +%Y%m%d` \ +# -DMIRALL_VERSION_SUFFIX="stable" \ +# -DBUILD_OWNCLOUD_OSX_BUNDLE=ON \ +# -DCMAKE_OSX_ARCHITECTURES=x86_64 \ +# -DBUILD_FILE_PROVIDER_MODULE=ON \ +# -DCMAKE_PREFIX_PATH=$CRAFT_DIR \ +# -DSPARKLE_LIBRARY=$SPARKLE_DIR/Sparkle.framework \ +# -DSOCKETAPI_TEAM_IDENTIFIER_PREFIX="$TEAM_IDENTIFIER." \ +# -DARG_SIDEBAR_ICONS=ON \ + +# make install -C $BUILD_DIR -j4 + +# --------------------------------------------------- +# Sign the client +# CODE_SIGN_IDENTITY="Developer ID Application: IONOS SE (5TDLCVD243)" + +# Check if CODE_SIGN_IDENTITY is set, if not exit +if [ -z "$CODE_SIGN_IDENTITY" ]; then + echo "Code sign identity not set. Exiting." + open $PRODUCT_DIR + exit 0 +fi + +PRODUCT_PATH=$PRODUCT_DIR/$PRODUCT_NAME.app + +CLIENT_CONTENTS_DIR=$PRODUCT_PATH/Contents +CLIENT_FRAMEWORKS_DIR=$CLIENT_CONTENTS_DIR/Frameworks +CLIENT_PLUGINS_DIR=$CLIENT_CONTENTS_DIR/PlugIns +CLIENT_RESOURCES_DIR=$CLIENT_CONTENTS_DIR/Resources + +find "$CLIENT_FRAMEWORKS_DIR" -print0 | xargs -0 -I {} bash -c 'recursive_sign "$@" "$CODE_SIGN_IDENTITY"' _ {} "$CODE_SIGN_IDENTITY" +find "$CLIENT_PLUGINS_DIR" -print0 | xargs -0 -I {} bash -c 'recursive_sign "$@" "$CODE_SIGN_IDENTITY"' _ {} "$CODE_SIGN_IDENTITY" +find "$CLIENT_RESOURCES_DIR" -print0 | xargs -0 -I {} bash -c 'recursive_sign "$@" "$CODE_SIGN_IDENTITY"' _ {} "$CODE_SIGN_IDENTITY" + +codesign -s "$CODE_SIGN_IDENTITY" --force --preserve-metadata=entitlements --verbose=4 --deep --options=runtime --timestamp "$PRODUCT_PATH" + + +# Sign the client +find "$CLIENT_CONTENTS_DIR/MacOS" -mindepth 1 -print0 | xargs -0 -I {} bash -c 'sign_folder_content "$@" "$CODE_SIGN_IDENTITY" "$entitlements" ' _ {} "$CODE_SIGN_IDENTITY" "--preserve-metadata=entitlements" + +# Validate that the key used for signing the binary matches the expected TeamIdentifier +# needed to pass the SocketApi through the sandbox for communication with virtual file system +if ! codesign -dv "$PRODUCT_PATH" 2>&1 | grep -q "TeamIdentifier=$TEAM_IDENTIFIER"; then + echo "TeamIdentifier does not match. Exiting." + exit 0 +fi + +# --------------------------------------------------- +# Installer + +# Build the installer, if enabled +if [ -z "$PACKAGE_INSTALLER" ]; then + echo "Installer packaging not enabled. Exiting." + open $PRODUCT_DIR + exit 0 +fi + +# package +$BUILD_DIR/admin/osx/create_mac.sh "$PRODUCT_DIR" "$BUILD_DIR" 'Developer ID Installer: IONOS SE (5TDLCVD243)' + +# notariaze +# Extract package filename from filesystem per .pkg extension +PACKAGE_FILENAME=$(ls $PRODUCT_DIR/*.pkg) + +# catch the output of the notarytool command +OUTPUT=$(xcrun notarytool submit --wait $PACKAGE_FILENAME\ + --keychain-profile "IONOS SE HiDrive Next") + +SUBMISSION_STATUS=$(echo $OUTPUT | grep -o 'status: [^ ]*' | cut -d ' ' -f 2) + +# Check if the notarization was successful +if [ $SUBMISSION_STATUS != "Accepted" ]; then + echo "Notarization failed. Exiting." + exit 1 +fi + +# staple +xcrun stapler staple $PACKAGE_FILENAME +xcrun stapler validate $PACKAGE_FILENAME + +open $PRODUCT_DIR From 66c69335c925ef6df5b4866f436b40e96c8ffa2f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Christopher=20H=C3=A4tty?= Date: Mon, 12 May 2025 11:23:00 +0200 Subject: [PATCH 209/371] SES-372 fix build error on macOS --- craftmaster.ini | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/craftmaster.ini b/craftmaster.ini index a201df5fa332e..bde34074ccc16 100644 --- a/craftmaster.ini +++ b/craftmaster.ini @@ -1,8 +1,7 @@ [General] Branch = master +ShallowClone = True # CraftUrl = https://github.com/allexzander/craft.git -CraftRevision = ec08a9becf7f7749c0d39282561ba5468b80d5e6 -ShallowClone = False # Variables defined here override the default value # The variable names are casesensitive From 77e2da77c5e91c4b439ad2e7f4b8300b013d3cba Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Christopher=20H=C3=A4tty?= Date: Mon, 12 May 2025 11:18:53 +0200 Subject: [PATCH 210/371] SES-363 WIP Added Extraction to flow --- admin/osx/ionos_macmaker/sign.sh | 74 +++++++++----------------------- 1 file changed, 21 insertions(+), 53 deletions(-) diff --git a/admin/osx/ionos_macmaker/sign.sh b/admin/osx/ionos_macmaker/sign.sh index d370114d0e2d3..46bd96fb244fe 100644 --- a/admin/osx/ionos_macmaker/sign.sh +++ b/admin/osx/ionos_macmaker/sign.sh @@ -24,14 +24,15 @@ export -f sign_folder_content set -xe # Parse the command line arguments -while getopts "b:s:ci" opt; do +while getopts "b:p:s:ci" opt; do case ${opt} in - b )BUILD_DIR=$OPTARG;; + b )BASE_DIR=$OPTARG;; + p )PATH_TO_PKG=$OPTARG ;; s )CODE_SIGN_IDENTITY=$OPTARG ;; c )CLEAN_REBUILD=true ;; i )PACKAGE_INSTALLER=true ;; \? ) - echo "Usage: start.sh [-b ] [-s ] [-c] [-i]" + echo "Usage: sign.sh [-b ] [-s ] [-c] [-i]" exit 1 ;; esac @@ -42,44 +43,24 @@ export MACOSX_DEPLOYMENT_TARGET=10.15 # Some variables PRODUCT_NAME="IONOS HiDrive Next" -REPO_ROOT_DIR="../../.." -CRAFT_DIR=~/Craft64 -PRODUCT_DIR=$BUILD_DIR/product -BUILD_UPDATER=true +PRODUCT_DIR=$BASE_DIR/product TEAM_IDENTIFIER="5TDLCVD243" +WORK_DIR="ExtractedPkg" +FINAL_PKG="Reassembled.pkg" -# Check if the client is running and kill it -# This is necessary to avoid issues with replacement of the bundle file -# if pgrep -x "$PRODUCT_NAME" >/dev/null; then -# killall "$PRODUCT_NAME" -# fi - -# Check if BUILD_DIR is set, so we don't accidentally delete the whole filesystem -# if [ -z "$BUILD_DIR" ]; then -# echo "Build dir not set. Add -b to the command." -# exit 0 -# fi - -# Check if BUILD_DIR exists. If not, create it. If so, clear it. -# if [ ! -d $BUILD_DIR ]; then -# mkdir -p $BUILD_DIR -# else -# if [ $CLEAN_REBUILD = true ]; then -# rm -rf $BUILD_DIR/* -# fi -# fi - -# Check if Craft dir exists, if not exit -# if [ ! -d $CRAFT_DIR ]; then -# echo "Craft dir not found. Exiting." -# exit 1 -# fi +TARGET_PATH="${BASE_DIR%/}/$WORK_DIR" +FINAL_TARGET_PATH="${BASE_DIR%/}/$FINAL_PKG" +echo "Expanding original package..." +pkgutil --expand-full "$PATH_TO_PKG" "$TARGET_PATH" + + +# TODO: # Load Sparkle -SPARKLE_DIR=$BUILD_DIR/sparkle +SPARKLE_DIR=$BASE_DIR/sparkle SPARKLE_DOWNLOAD_URI="https://github.com/sparkle-project/Sparkle/releases/download/1.27.3/Sparkle-1.27.3.tar.xz" -if [ "$CLEAN_REBUILD" == "true" ] && [ "$BUILD_UPDATER" == "true" ]; then +if [ "$CLEAN_REBUILD" == "true" ]; then mkdir -p $SPARKLE_DIR wget $SPARKLE_DOWNLOAD_URI -O $SPARKLE_DIR/Sparkle.tar.xz tar -xvf $SPARKLE_DIR/Sparkle.tar.xz -C $SPARKLE_DIR @@ -92,23 +73,7 @@ if [ "$CLEAN_REBUILD" == "true" ] && [ "$BUILD_UPDATER" == "true" ]; then fi fi -# # Build the client -# cmake -S $REPO_ROOT_DIR/ -B $BUILD_DIR \ -# -DQT_TRANSLATIONS_DIR=$REPO_ROOT_DIR/translations \ -# -DCMAKE_INSTALL_PREFIX=$PRODUCT_DIR \ -# -DBUILD_TESTING=OFF \ -# -DBUILD_UPDATER=$(if [ $BUILD_UPDATER == true ]; then echo "ON"; else echo "OFF"; fi) \ -# -DMIRALL_VERSION_BUILD=`date +%Y%m%d` \ -# -DMIRALL_VERSION_SUFFIX="stable" \ -# -DBUILD_OWNCLOUD_OSX_BUNDLE=ON \ -# -DCMAKE_OSX_ARCHITECTURES=x86_64 \ -# -DBUILD_FILE_PROVIDER_MODULE=ON \ -# -DCMAKE_PREFIX_PATH=$CRAFT_DIR \ -# -DSPARKLE_LIBRARY=$SPARKLE_DIR/Sparkle.framework \ -# -DSOCKETAPI_TEAM_IDENTIFIER_PREFIX="$TEAM_IDENTIFIER." \ -# -DARG_SIDEBAR_ICONS=ON \ - -# make install -C $BUILD_DIR -j4 + # --------------------------------------------------- # Sign the client @@ -155,8 +120,11 @@ if [ -z "$PACKAGE_INSTALLER" ]; then exit 0 fi +echo "Reassembling the package..." +pkgutil --flatten "$TARGET_PATH" "$FINAL_TARGET_PATH" + # package -$BUILD_DIR/admin/osx/create_mac.sh "$PRODUCT_DIR" "$BUILD_DIR" 'Developer ID Installer: IONOS SE (5TDLCVD243)' +# $BASE_DIR/admin/osx/create_mac.sh "$PRODUCT_DIR" "$BASE_DIR" 'Developer ID Installer: IONOS SE (5TDLCVD243)' # notariaze # Extract package filename from filesystem per .pkg extension From 732b3b72dc640a7f77a918d0e2f234443cfd8656 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Christopher=20H=C3=A4tty?= Date: Tue, 13 May 2025 07:33:57 +0200 Subject: [PATCH 211/371] NoIssue - Fixed Casing --- theme.qrc.in | 2 +- theme/Style/Style.qml | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/theme.qrc.in b/theme.qrc.in index 5f3d29d4e776a..2e108db5d24bc 100644 --- a/theme.qrc.in +++ b/theme.qrc.in @@ -243,7 +243,7 @@ theme/call-notification.wav theme/talk-app.svg theme/chevron-double-up.svg - theme/ses/ses-IONOS-Logo.svg + theme/ses/ses-IONOS-logo.svg theme/colored/IONOS_logo_w_suffix_frontend.png theme/colored/IONOS_logo_w_suffix_frontend@2x.png theme/colored/IONOS_logo_w_suffix_frontend.svg diff --git a/theme/Style/Style.qml b/theme/Style/Style.qml index cc2fb59d41eb6..11ac4b96a4513 100644 --- a/theme/Style/Style.qml +++ b/theme/Style/Style.qml @@ -221,7 +221,7 @@ QtObject { // SES readonly property string sesWebsiteIcon: "qrc:///client/theme/ses/ses-website.svg" readonly property string sesFolderIcon: "qrc:///client/theme/ses/ses-folderIcon.svg" - readonly property string sesIonosLogoIcon: "qrc:///client/theme/ses/ses-IONOS-Logo.svg" + readonly property string sesIonosLogoIcon: "qrc:///client/theme/ses/ses-IONOS-logo.svg" readonly property string sesAvatar: "qrc:///client/theme/ses/ses-settingsAvatar.svg" From 38fda7fec0dc4e99cc57e3cff158e9c77510ba9f Mon Sep 17 00:00:00 2001 From: Kevin Beraz Date: Tue, 13 May 2025 11:30:32 +0200 Subject: [PATCH 212/371] SES-352 remove fixed sizes so buttons will size dynamically --- src/gui/wizard/dataprotectionpage.cpp | 5 +++-- src/gui/wizard/dataprotectionpage.ui | 12 ------------ src/gui/wizard/dataprotectionsettingspage.cpp | 4 ++-- src/gui/wizard/dataprotectionsettingspage.ui | 12 ------------ 4 files changed, 5 insertions(+), 28 deletions(-) diff --git a/src/gui/wizard/dataprotectionpage.cpp b/src/gui/wizard/dataprotectionpage.cpp index 5ec006e6709bf..954f1bffd6b95 100644 --- a/src/gui/wizard/dataprotectionpage.cpp +++ b/src/gui/wizard/dataprotectionpage.cpp @@ -69,9 +69,10 @@ namespace OCC{ ) ); - _ui->agreeButton->setMinimumWidth(80); + _ui->agreeButton->setSizePolicy(QSizePolicy::Minimum, QSizePolicy::Fixed); _ui->agreeButton->setProperty("buttonStyle", QVariant::fromValue(OCC::ButtonStyleName::Primary)); - _ui->settingsButton->setMinimumWidth(80); + + _ui->settingsButton->setSizePolicy(QSizePolicy::Minimum, QSizePolicy::Fixed); _ui->buttonLayout->setAlignment(Qt::AlignCenter); _ui->buttonLayout->setSpacing(16); diff --git a/src/gui/wizard/dataprotectionpage.ui b/src/gui/wizard/dataprotectionpage.ui index ca352b14e0750..7f9c7025d4921 100644 --- a/src/gui/wizard/dataprotectionpage.ui +++ b/src/gui/wizard/dataprotectionpage.ui @@ -34,12 +34,6 @@ - - - 80 - 16777215 - - Settings @@ -47,12 +41,6 @@ - - - 80 - 16777215 - - Agree diff --git a/src/gui/wizard/dataprotectionsettingspage.cpp b/src/gui/wizard/dataprotectionsettingspage.cpp index 71fe16c40b914..80d43acf96c3e 100644 --- a/src/gui/wizard/dataprotectionsettingspage.cpp +++ b/src/gui/wizard/dataprotectionsettingspage.cpp @@ -111,8 +111,8 @@ namespace OCC{ _ui->buttonLayout->setSpacing(16); _ui->buttonLayout->setContentsMargins(0, 16, 0, 16); - _ui->backButton->setMinimumWidth(80); - _ui->saveButton->setMinimumWidth(140); + _ui->backButton->setSizePolicy(QSizePolicy::Minimum, QSizePolicy::Fixed); + _ui->saveButton->setSizePolicy(QSizePolicy::Minimum, QSizePolicy::Fixed); _ui->saveButton->setProperty("buttonStyle", QVariant::fromValue(OCC::ButtonStyleName::Primary)); } } \ No newline at end of file diff --git a/src/gui/wizard/dataprotectionsettingspage.ui b/src/gui/wizard/dataprotectionsettingspage.ui index 0caa1b13b4f14..e283b0b05f014 100644 --- a/src/gui/wizard/dataprotectionsettingspage.ui +++ b/src/gui/wizard/dataprotectionsettingspage.ui @@ -79,12 +79,6 @@ - - - 80 - 16777215 - - Back @@ -92,12 +86,6 @@ - - - 80 - 16777215 - - Save Settings From 9de1ceec76f87b03e4e951927f9786cf6ba0f889 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Christopher=20H=C3=A4tty?= Date: Tue, 13 May 2025 08:37:50 +0200 Subject: [PATCH 213/371] WIP on develop_stable_3.16.4 --- admin/osx/ionos_macmaker/sign.sh | 18 +++++++++++++----- 1 file changed, 13 insertions(+), 5 deletions(-) mode change 100644 => 100755 admin/osx/ionos_macmaker/sign.sh diff --git a/admin/osx/ionos_macmaker/sign.sh b/admin/osx/ionos_macmaker/sign.sh old mode 100644 new mode 100755 index 46bd96fb244fe..d0acbf9d7894c --- a/admin/osx/ionos_macmaker/sign.sh +++ b/admin/osx/ionos_macmaker/sign.sh @@ -43,17 +43,20 @@ export MACOSX_DEPLOYMENT_TARGET=10.15 # Some variables PRODUCT_NAME="IONOS HiDrive Next" -PRODUCT_DIR=$BASE_DIR/product +UNDERSCORE_PRODUCT_NAME="IONOS_HiDrive_Next" TEAM_IDENTIFIER="5TDLCVD243" -WORK_DIR="ExtractedPkg" +WORK_DIR="ex" FINAL_PKG="Reassembled.pkg" -TARGET_PATH="${BASE_DIR%/}/$WORK_DIR" +EXTRACTED_DIR="${BASE_DIR%/}/$WORK_DIR" FINAL_TARGET_PATH="${BASE_DIR%/}/$FINAL_PKG" +PRODUCT_DIR=$EXTRACTED_DIR/$UNDERSCORE_PRODUCT_NAME.pkg/Payload/Applications + + echo "Expanding original package..." -pkgutil --expand-full "$PATH_TO_PKG" "$TARGET_PATH" +pkgutil --expand-full "$PATH_TO_PKG" "$EXTRACTED_DIR" # TODO: # Load Sparkle @@ -100,6 +103,7 @@ find "$CLIENT_RESOURCES_DIR" -print0 | xargs -0 -I {} bash -c 'recursive_sign "$ codesign -s "$CODE_SIGN_IDENTITY" --force --preserve-metadata=entitlements --verbose=4 --deep --options=runtime --timestamp "$PRODUCT_PATH" + # Sign the client find "$CLIENT_CONTENTS_DIR/MacOS" -mindepth 1 -print0 | xargs -0 -I {} bash -c 'sign_folder_content "$@" "$CODE_SIGN_IDENTITY" "$entitlements" ' _ {} "$CODE_SIGN_IDENTITY" "--preserve-metadata=entitlements" @@ -121,7 +125,11 @@ if [ -z "$PACKAGE_INSTALLER" ]; then fi echo "Reassembling the package..." -pkgutil --flatten "$TARGET_PATH" "$FINAL_TARGET_PATH" +pkgutil --flatten "$EXTRACTED_DIR" "$FINAL_TARGET_PATH" + +# codesign -s "$CODE_SIGN_IDENTITY" --force --preserve-metadata=entitlements --verbose=4 --deep --options=runtime --timestamp "$FINAL_TARGET_PATH" +productsign --timestamp --sign 'Developer ID Installer: IONOS SE (5TDLCVD243)' "$FINAL_TARGET_PATH" "$FINAL_TARGET_PATH.new" +exit 0 # package # $BASE_DIR/admin/osx/create_mac.sh "$PRODUCT_DIR" "$BASE_DIR" 'Developer ID Installer: IONOS SE (5TDLCVD243)' From 01c336020cd5a6f14404235fdec67a25e298ce19 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Christopher=20H=C3=A4tty?= Date: Tue, 13 May 2025 16:20:08 +0200 Subject: [PATCH 214/371] SES-363 Working Resign --- admin/osx/ionos_macmaker/sign.sh | 114 +++++++++++++++++++++++-------- 1 file changed, 85 insertions(+), 29 deletions(-) diff --git a/admin/osx/ionos_macmaker/sign.sh b/admin/osx/ionos_macmaker/sign.sh index d0acbf9d7894c..cc6b170efb0b9 100755 --- a/admin/osx/ionos_macmaker/sign.sh +++ b/admin/osx/ionos_macmaker/sign.sh @@ -22,6 +22,7 @@ export -f sign_folder_content # This script is used to build the Mac OS X version of the IONOS client. set -xe +# set -e # Parse the command line arguments while getopts "b:p:s:ci" opt; do @@ -38,46 +39,63 @@ while getopts "b:p:s:ci" opt; do esac done -# Set the deployment target -export MACOSX_DEPLOYMENT_TARGET=10.15 - # Some variables +PKG_FILENAME=$(basename "$PATH_TO_PKG") +PKG_ORGINAL_NAME="${PKG_FILENAME%.pkg}" PRODUCT_NAME="IONOS HiDrive Next" UNDERSCORE_PRODUCT_NAME="IONOS_HiDrive_Next" + TEAM_IDENTIFIER="5TDLCVD243" WORK_DIR="ex" +INNER_WORK_DIR="tmp" FINAL_PKG="Reassembled.pkg" EXTRACTED_DIR="${BASE_DIR%/}/$WORK_DIR" FINAL_TARGET_PATH="${BASE_DIR%/}/$FINAL_PKG" PRODUCT_DIR=$EXTRACTED_DIR/$UNDERSCORE_PRODUCT_NAME.pkg/Payload/Applications - +SCRIPTS_DIR=$EXTRACTED_DIR/$UNDERSCORE_PRODUCT_NAME.pkg/Scripts +INNER_PKG=$EXTRACTED_DIR/$UNDERSCORE_PRODUCT_NAME.pkg +PAYLOAD_DIR=$EXTRACTED_DIR/$UNDERSCORE_PRODUCT_NAME.pkg/Payload +INSTALLER_PKG=$BASE_DIR/INSTALLER.pkg echo "Expanding original package..." -pkgutil --expand-full "$PATH_TO_PKG" "$EXTRACTED_DIR" +if [ -d "$EXTRACTED_DIR" ]; then -# TODO: -# Load Sparkle -SPARKLE_DIR=$BASE_DIR/sparkle -SPARKLE_DOWNLOAD_URI="https://github.com/sparkle-project/Sparkle/releases/download/1.27.3/Sparkle-1.27.3.tar.xz" - -if [ "$CLEAN_REBUILD" == "true" ]; then - mkdir -p $SPARKLE_DIR - wget $SPARKLE_DOWNLOAD_URI -O $SPARKLE_DIR/Sparkle.tar.xz - tar -xvf $SPARKLE_DIR/Sparkle.tar.xz -C $SPARKLE_DIR - - # Sign Sparkle - if [ -n "$CODE_SIGN_IDENTITY" ]; then - SPARKLE_FRAMEWORK_DIR=$SPARKLE_DIR/Sparkle.framework - find "$SPARKLE_FRAMEWORK_DIR/Resources/Autoupdate.app/Contents/MacOS" -mindepth 1 -print0 | xargs -0 -I {} bash -c 'sign_folder_content "$@" "$CODE_SIGN_IDENTITY"' _ {} "$CODE_SIGN_IDENTITY" - codesign -s "$CODE_SIGN_IDENTITY" --force --preserve-metadata=entitlements --verbose=4 --deep --options=runtime --timestamp "$SPARKLE_FRAMEWORK_DIR/Sparkle" + echo "$EXTRACTED_DIR already exits." + + if [ "$CLEAN_REBUILD" = true ]; then + echo "Clean Rebuild Enabled - Deleting folder: $EXTRACTED_DIR" + rm -rf "$EXTRACTED_DIR" + pkgutil --expand-full "$PATH_TO_PKG" "$EXTRACTED_DIR" fi +else + pkgutil --expand-full "$PATH_TO_PKG" "$EXTRACTED_DIR" fi + +# TODO: +# Load Sparkle +# SPARKLE_DIR=$BASE_DIR/sparkle +# SPARKLE_DOWNLOAD_URI="https://github.com/sparkle-project/Sparkle/releases/download/1.27.3/Sparkle-1.27.3.tar.xz" + +# if [ "$CLEAN_REBUILD" == "true" ]; then +# mkdir -p $SPARKLE_DIR +# wget $SPARKLE_DOWNLOAD_URI -O $SPARKLE_DIR/Sparkle.tar.xz +# tar -xvf $SPARKLE_DIR/Sparkle.tar.xz -C $SPARKLE_DIR + +# # Sign Sparkle +# if [ -n "$CODE_SIGN_IDENTITY" ]; then +# SPARKLE_FRAMEWORK_DIR=$SPARKLE_DIR/Sparkle.framework +# find "$SPARKLE_FRAMEWORK_DIR/Resources/Autoupdate.app/Contents/MacOS" -mindepth 1 -print0 | xargs -0 -I {} bash -c 'sign_folder_content "$@" "$CODE_SIGN_IDENTITY"' _ {} "$CODE_SIGN_IDENTITY" +# codesign -s "$CODE_SIGN_IDENTITY" --force --preserve-metadata=entitlements --verbose=4 --deep --options=runtime --timestamp "$SPARKLE_FRAMEWORK_DIR/Sparkle" +# fi +# fi + + # --------------------------------------------------- # Sign the client # CODE_SIGN_IDENTITY="Developer ID Application: IONOS SE (5TDLCVD243)" @@ -96,6 +114,11 @@ CLIENT_FRAMEWORKS_DIR=$CLIENT_CONTENTS_DIR/Frameworks CLIENT_PLUGINS_DIR=$CLIENT_CONTENTS_DIR/PlugIns CLIENT_RESOURCES_DIR=$CLIENT_CONTENTS_DIR/Resources +for script in $SCRIPTS_DIR/*; do + echo "→ Signing script: $script" + codesign -s "$CODE_SIGN_IDENTITY" --force --preserve-metadata=entitlements --verbose=4 --options=runtime --timestamp "$script" +done + find "$CLIENT_FRAMEWORKS_DIR" -print0 | xargs -0 -I {} bash -c 'recursive_sign "$@" "$CODE_SIGN_IDENTITY"' _ {} "$CODE_SIGN_IDENTITY" find "$CLIENT_PLUGINS_DIR" -print0 | xargs -0 -I {} bash -c 'recursive_sign "$@" "$CODE_SIGN_IDENTITY"' _ {} "$CODE_SIGN_IDENTITY" find "$CLIENT_RESOURCES_DIR" -print0 | xargs -0 -I {} bash -c 'recursive_sign "$@" "$CODE_SIGN_IDENTITY"' _ {} "$CODE_SIGN_IDENTITY" @@ -105,7 +128,7 @@ codesign -s "$CODE_SIGN_IDENTITY" --force --preserve-metadata=entitlements --ver # Sign the client -find "$CLIENT_CONTENTS_DIR/MacOS" -mindepth 1 -print0 | xargs -0 -I {} bash -c 'sign_folder_content "$@" "$CODE_SIGN_IDENTITY" "$entitlements" ' _ {} "$CODE_SIGN_IDENTITY" "--preserve-metadata=entitlements" +# find "$CLIENT_CONTENTS_DIR/MacOS" -mindepth 1 -print0 | xargs -0 -I {} bash -c 'sign_folder_content "$@" "$CODE_SIGN_IDENTITY" "$entitlements" ' _ {} "$CODE_SIGN_IDENTITY" "--preserve-metadata=entitlements" # Validate that the key used for signing the binary matches the expected TeamIdentifier # needed to pass the SocketApi through the sandbox for communication with virtual file system @@ -124,22 +147,55 @@ if [ -z "$PACKAGE_INSTALLER" ]; then exit 0 fi +echo "Renew BOM" +mkbom $PAYLOAD_DIR $INNER_PKG/Bom echo "Reassembling the package..." -pkgutil --flatten "$EXTRACTED_DIR" "$FINAL_TARGET_PATH" +(cd $PAYLOAD_DIR && \ + find . | cpio -o --format odc | gzip -c) > $PAYLOAD_DIR.new + +rm -rf $PAYLOAD_DIR +mv $PAYLOAD_DIR.new $PAYLOAD_DIR + +# xar --compression none \ +# -cf $INNER_PKG.flat \ +# PackageInfo Bom Payload Scripts 2>/dev/null + +(cd $EXTRACTED_DIR && \ + pkgutil --flatten $UNDERSCORE_PRODUCT_NAME.pkg $UNDERSCORE_PRODUCT_NAME.pkg.flat) + +rm -rf $INNER_PKG +mv $INNER_PKG.flat $INNER_PKG + +productsign --timestamp --sign 'Developer ID Installer: IONOS SE (5TDLCVD243)' \ + $INNER_PKG \ + $INNER_PKG.signed + +rm -rf $INNER_PKG +mv $INNER_PKG.signed $INNER_PKG + +(cd $BASE_DIR && productbuild \ + --distribution ex/Distribution \ + --resources ex/Resources \ + --package-path ex \ + $INSTALLER_PKG.unsigned) + +productsign --timestamp --sign 'Developer ID Installer: IONOS SE (5TDLCVD243)' $INSTALLER_PKG.unsigned "$BASE_DIR$PKG_ORGINAL_NAME.resigned.pkg" + +# pkgutil --flatten "$EXTRACTED_DIR" "$FINAL_TARGET_PATH" # codesign -s "$CODE_SIGN_IDENTITY" --force --preserve-metadata=entitlements --verbose=4 --deep --options=runtime --timestamp "$FINAL_TARGET_PATH" -productsign --timestamp --sign 'Developer ID Installer: IONOS SE (5TDLCVD243)' "$FINAL_TARGET_PATH" "$FINAL_TARGET_PATH.new" -exit 0 +# productsign --timestamp --sign 'Developer ID Installer: IONOS SE (5TDLCVD243)' "$FINAL_TARGET_PATH" "$FINAL_TARGET_PATH.new" +# exit 0 # package # $BASE_DIR/admin/osx/create_mac.sh "$PRODUCT_DIR" "$BASE_DIR" 'Developer ID Installer: IONOS SE (5TDLCVD243)' # notariaze # Extract package filename from filesystem per .pkg extension -PACKAGE_FILENAME=$(ls $PRODUCT_DIR/*.pkg) +# PACKAGE_FILENAME=$(ls $PRODUCT_DIR/*.pkg) # catch the output of the notarytool command -OUTPUT=$(xcrun notarytool submit --wait $PACKAGE_FILENAME\ +OUTPUT=$(xcrun notarytool submit --wait "$BASE_DIR$PKG_ORGINAL_NAME.resigned.pkg"\ --keychain-profile "IONOS SE HiDrive Next") SUBMISSION_STATUS=$(echo $OUTPUT | grep -o 'status: [^ ]*' | cut -d ' ' -f 2) @@ -151,7 +207,7 @@ if [ $SUBMISSION_STATUS != "Accepted" ]; then fi # staple -xcrun stapler staple $PACKAGE_FILENAME -xcrun stapler validate $PACKAGE_FILENAME +xcrun stapler staple "$BASE_DIR$PKG_ORGINAL_NAME.resigned.pkg" +xcrun stapler validate "$BASE_DIR$PKG_ORGINAL_NAME.resigned.pkg" -open $PRODUCT_DIR +# open $PRODUCT_DIR From edc6e087774942f776be9885d2e60ebcc9576673 Mon Sep 17 00:00:00 2001 From: Kevin Beraz Date: Wed, 14 May 2025 15:30:36 +0200 Subject: [PATCH 215/371] SES-360 remove fixed size of button to prevent text clipping --- src/gui/wizard/flow2authwidget.cpp | 1 - 1 file changed, 1 deletion(-) diff --git a/src/gui/wizard/flow2authwidget.cpp b/src/gui/wizard/flow2authwidget.cpp index 8c87e91fb52f1..788f5b497ca66 100644 --- a/src/gui/wizard/flow2authwidget.cpp +++ b/src/gui/wizard/flow2authwidget.cpp @@ -229,7 +229,6 @@ void Flow2AuthWidget::customizeStyle() _ui.openLinkButton->setFixedSize(180, 40); _ui.copyLinkButton->setText(tr("Copy Link")); - _ui.copyLinkButton->setFixedSize(150, 40); _ui.mainLayoutVBox->setContentsMargins(32, 0, 32, 0); _ui.innerLayoutVBox->setSpacing(16); From fe432ae3ebb0312717a78714d2c79ffb9e76625a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Christopher=20H=C3=A4tty?= Date: Wed, 14 May 2025 16:14:49 +0200 Subject: [PATCH 216/371] SES-363 Patch Team Identifier in binaries --- admin/osx/ionos_macmaker/sign.sh | 37 ++++++++++++++++++++++++++------ 1 file changed, 30 insertions(+), 7 deletions(-) diff --git a/admin/osx/ionos_macmaker/sign.sh b/admin/osx/ionos_macmaker/sign.sh index cc6b170efb0b9..69930a807d8e5 100755 --- a/admin/osx/ionos_macmaker/sign.sh +++ b/admin/osx/ionos_macmaker/sign.sh @@ -45,7 +45,8 @@ PKG_ORGINAL_NAME="${PKG_FILENAME%.pkg}" PRODUCT_NAME="IONOS HiDrive Next" UNDERSCORE_PRODUCT_NAME="IONOS_HiDrive_Next" -TEAM_IDENTIFIER="5TDLCVD243" +IONOS_TEAM_IDENTIFIER="5TDLCVD243" +NC_TEAM_IDENTIFIER="NKUJUXUJ3B" WORK_DIR="ex" INNER_WORK_DIR="tmp" FINAL_PKG="Reassembled.pkg" @@ -58,6 +59,8 @@ SCRIPTS_DIR=$EXTRACTED_DIR/$UNDERSCORE_PRODUCT_NAME.pkg/Scripts INNER_PKG=$EXTRACTED_DIR/$UNDERSCORE_PRODUCT_NAME.pkg PAYLOAD_DIR=$EXTRACTED_DIR/$UNDERSCORE_PRODUCT_NAME.pkg/Payload INSTALLER_PKG=$BASE_DIR/INSTALLER.pkg +APP_PATH=$PRODUCT_DIR/$PRODUCT_NAME.app + echo "Expanding original package..." @@ -96,6 +99,29 @@ fi # fi +# --------------------------------------------------- +# Patch Team Identifier + +# Ensure both IDs are same length +if [[ ${#NC_TEAM_IDENTIFIER} -ne ${#IONOS_TEAM_IDENTIFIER} ]]; then + echo "❌ OLD_ID and NEW_ID must be the same length for binary-safe patching." + exit 1 +fi +# --- Replace in .plist files (plain XML) --- +echo "🔧 Replacing in .plist files..." +# find "$APP_PATH" -name "*.plist" -exec sed -i '' "s/$NC_TEAM_IDENTIFIER/$IONOS_TEAM_IDENTIFIER/g" {} \; +find "$APP_PATH" -name "*.plist" -exec grep -q "$NC_TEAM_IDENTIFIER" {} \; -exec sed -i '' "s/$NC_TEAM_IDENTIFIER/$IONOS_TEAM_IDENTIFIER/g" {} \; + + + +# Find and patch all binaries containing the old ID +find . -type f -exec grep -q --binary-files=text "$NC_TEAM_IDENTIFIER" {} \; -print | while read -r file; do + echo "🔧 Patching $file" + perl -pi -e "s/$NC_TEAM_IDENTIFIER/$IONOS_TEAM_IDENTIFIER/g" "$file" +done + + + # --------------------------------------------------- # Sign the client # CODE_SIGN_IDENTITY="Developer ID Application: IONOS SE (5TDLCVD243)" @@ -107,11 +133,9 @@ if [ -z "$CODE_SIGN_IDENTITY" ]; then exit 0 fi -PRODUCT_PATH=$PRODUCT_DIR/$PRODUCT_NAME.app -CLIENT_CONTENTS_DIR=$PRODUCT_PATH/Contents +CLIENT_CONTENTS_DIR=$APP_PATH/Contents CLIENT_FRAMEWORKS_DIR=$CLIENT_CONTENTS_DIR/Frameworks -CLIENT_PLUGINS_DIR=$CLIENT_CONTENTS_DIR/PlugIns CLIENT_RESOURCES_DIR=$CLIENT_CONTENTS_DIR/Resources for script in $SCRIPTS_DIR/*; do @@ -122,8 +146,7 @@ done find "$CLIENT_FRAMEWORKS_DIR" -print0 | xargs -0 -I {} bash -c 'recursive_sign "$@" "$CODE_SIGN_IDENTITY"' _ {} "$CODE_SIGN_IDENTITY" find "$CLIENT_PLUGINS_DIR" -print0 | xargs -0 -I {} bash -c 'recursive_sign "$@" "$CODE_SIGN_IDENTITY"' _ {} "$CODE_SIGN_IDENTITY" find "$CLIENT_RESOURCES_DIR" -print0 | xargs -0 -I {} bash -c 'recursive_sign "$@" "$CODE_SIGN_IDENTITY"' _ {} "$CODE_SIGN_IDENTITY" - -codesign -s "$CODE_SIGN_IDENTITY" --force --preserve-metadata=entitlements --verbose=4 --deep --options=runtime --timestamp "$PRODUCT_PATH" +codesign -s "$CODE_SIGN_IDENTITY" --force --preserve-metadata=entitlements --verbose=4 --deep --options=runtime --timestamp "$APP_PATH" @@ -132,7 +155,7 @@ codesign -s "$CODE_SIGN_IDENTITY" --force --preserve-metadata=entitlements --ver # Validate that the key used for signing the binary matches the expected TeamIdentifier # needed to pass the SocketApi through the sandbox for communication with virtual file system -if ! codesign -dv "$PRODUCT_PATH" 2>&1 | grep -q "TeamIdentifier=$TEAM_IDENTIFIER"; then +if ! codesign -dv "$APP_PATH" 2>&1 | grep -q "TeamIdentifier=$IONOS_TEAM_IDENTIFIER"; then echo "TeamIdentifier does not match. Exiting." exit 0 fi From 56f8bd90c0fe21da18eb744e5680897fb18e14b5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Christopher=20H=C3=A4tty?= Date: Thu, 15 May 2025 12:43:11 +0200 Subject: [PATCH 217/371] Revert "SES-372 fix build error on macOS" This reverts commit 5ad53f495870a28f5807cb0023ec342e3c281945. --- craftmaster.ini | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/craftmaster.ini b/craftmaster.ini index bde34074ccc16..a201df5fa332e 100644 --- a/craftmaster.ini +++ b/craftmaster.ini @@ -1,7 +1,8 @@ [General] Branch = master -ShallowClone = True # CraftUrl = https://github.com/allexzander/craft.git +CraftRevision = ec08a9becf7f7749c0d39282561ba5468b80d5e6 +ShallowClone = False # Variables defined here override the default value # The variable names are casesensitive From 8193f2ce7c44e6dcc4bd3aa28519c12ec36c0964 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Christopher=20H=C3=A4tty?= Date: Thu, 15 May 2025 12:49:43 +0100 Subject: [PATCH 218/371] SES-360 Fixed sizing of some dialog in italian --- src/gui/generalsettings.cpp | 2 +- src/gui/settingsdialog.cpp | 2 +- src/gui/wizard/dataprotectionsettingspage.cpp | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/src/gui/generalsettings.cpp b/src/gui/generalsettings.cpp index 2a965137aa615..4d70bf68d40af 100644 --- a/src/gui/generalsettings.cpp +++ b/src/gui/generalsettings.cpp @@ -380,7 +380,7 @@ QSize GeneralSettings::sizeHint() const { return { ownCloudGui::settingsDialogSize().width(), - QWidget::sizeHint().height() + ownCloudGui::settingsDialogSize().height() }; } diff --git a/src/gui/settingsdialog.cpp b/src/gui/settingsdialog.cpp index f9af541d9b692..186c57793dd83 100644 --- a/src/gui/settingsdialog.cpp +++ b/src/gui/settingsdialog.cpp @@ -194,7 +194,7 @@ SettingsDialog::SettingsDialog(ownCloudGui *gui, QWidget *parent) setWindowFlags(windowFlags() & ~Qt::WindowContextHelpButtonHint); cfg.restoreGeometry(this); resize(width() > IonosTheme::minimalSettingsDialogWidth() ? width(): IonosTheme::minimalSettingsDialogWidth(), - height() > generalSettings->sizeHint().height() ? height(): generalSettings->sizeHint().height()); + (height() > generalSettings->sizeHint().height() ? height(): generalSettings->sizeHint().height()) + 25); } SettingsDialog::~SettingsDialog() diff --git a/src/gui/wizard/dataprotectionsettingspage.cpp b/src/gui/wizard/dataprotectionsettingspage.cpp index 80d43acf96c3e..f2f524fe79304 100644 --- a/src/gui/wizard/dataprotectionsettingspage.cpp +++ b/src/gui/wizard/dataprotectionsettingspage.cpp @@ -63,7 +63,7 @@ namespace OCC{ void DataProtectionSettingsPage::customizeStyle() { - _ocWizard->setFixedSize(626, 470); + _ocWizard->setFixedSize(626, 480); _ui->mainVBox->setContentsMargins(32, 0, 32, 0); From 86c3bef509742bd0ee7c2fbe40971f6173c9c74a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Christopher=20H=C3=A4tty?= Date: Thu, 15 May 2025 08:00:28 +0200 Subject: [PATCH 219/371] SES-363 Cleanup, renaming, logs --- admin/osx/ionos_macmaker/sign.sh | 99 ++++++++++---------------------- 1 file changed, 30 insertions(+), 69 deletions(-) diff --git a/admin/osx/ionos_macmaker/sign.sh b/admin/osx/ionos_macmaker/sign.sh index 69930a807d8e5..7188e9d1a188a 100755 --- a/admin/osx/ionos_macmaker/sign.sh +++ b/admin/osx/ionos_macmaker/sign.sh @@ -21,38 +21,39 @@ sign_folder_content(){ export -f sign_folder_content # This script is used to build the Mac OS X version of the IONOS client. -set -xe -# set -e - # Parse the command line arguments -while getopts "b:p:s:ci" opt; do +while getopts "b:p:s:civ" opt; do case ${opt} in b )BASE_DIR=$OPTARG;; p )PATH_TO_PKG=$OPTARG ;; s )CODE_SIGN_IDENTITY=$OPTARG ;; c )CLEAN_REBUILD=true ;; i )PACKAGE_INSTALLER=true ;; + v )VERBOSE=true ;; \? ) - echo "Usage: sign.sh [-b ] [-s ] [-c] [-i]" + echo "Usage: sign.sh [-b ] [-p ] [-s ] [-c clean-rebuild] [-i build-installer] [-v verbose]" exit 1 ;; esac done +if [ "$VERBOSE" = true ]; then + set -xe +fi + # Some variables -PKG_FILENAME=$(basename "$PATH_TO_PKG") -PKG_ORGINAL_NAME="${PKG_FILENAME%.pkg}" +PKG_FULLNAME=$(basename "$PATH_TO_PKG") +PKG_FILENAME="${PKG_FULLNAME%.pkg}" PRODUCT_NAME="IONOS HiDrive Next" UNDERSCORE_PRODUCT_NAME="IONOS_HiDrive_Next" IONOS_TEAM_IDENTIFIER="5TDLCVD243" NC_TEAM_IDENTIFIER="NKUJUXUJ3B" -WORK_DIR="ex" -INNER_WORK_DIR="tmp" -FINAL_PKG="Reassembled.pkg" +INSTALLER_CERT="Developer ID Installer: $CODE_SIGN_IDENTITY" +APPLICATION_CERT="Developer ID Application: $CODE_SIGN_IDENTITY" +WORK_DIR="ex" EXTRACTED_DIR="${BASE_DIR%/}/$WORK_DIR" -FINAL_TARGET_PATH="${BASE_DIR%/}/$FINAL_PKG" PRODUCT_DIR=$EXTRACTED_DIR/$UNDERSCORE_PRODUCT_NAME.pkg/Payload/Applications SCRIPTS_DIR=$EXTRACTED_DIR/$UNDERSCORE_PRODUCT_NAME.pkg/Scripts @@ -61,7 +62,6 @@ PAYLOAD_DIR=$EXTRACTED_DIR/$UNDERSCORE_PRODUCT_NAME.pkg/Payload INSTALLER_PKG=$BASE_DIR/INSTALLER.pkg APP_PATH=$PRODUCT_DIR/$PRODUCT_NAME.app - echo "Expanding original package..." if [ -d "$EXTRACTED_DIR" ]; then @@ -77,51 +77,25 @@ else pkgutil --expand-full "$PATH_TO_PKG" "$EXTRACTED_DIR" fi - - - -# TODO: -# Load Sparkle -# SPARKLE_DIR=$BASE_DIR/sparkle -# SPARKLE_DOWNLOAD_URI="https://github.com/sparkle-project/Sparkle/releases/download/1.27.3/Sparkle-1.27.3.tar.xz" - -# if [ "$CLEAN_REBUILD" == "true" ]; then -# mkdir -p $SPARKLE_DIR -# wget $SPARKLE_DOWNLOAD_URI -O $SPARKLE_DIR/Sparkle.tar.xz -# tar -xvf $SPARKLE_DIR/Sparkle.tar.xz -C $SPARKLE_DIR - -# # Sign Sparkle -# if [ -n "$CODE_SIGN_IDENTITY" ]; then -# SPARKLE_FRAMEWORK_DIR=$SPARKLE_DIR/Sparkle.framework -# find "$SPARKLE_FRAMEWORK_DIR/Resources/Autoupdate.app/Contents/MacOS" -mindepth 1 -print0 | xargs -0 -I {} bash -c 'sign_folder_content "$@" "$CODE_SIGN_IDENTITY"' _ {} "$CODE_SIGN_IDENTITY" -# codesign -s "$CODE_SIGN_IDENTITY" --force --preserve-metadata=entitlements --verbose=4 --deep --options=runtime --timestamp "$SPARKLE_FRAMEWORK_DIR/Sparkle" -# fi -# fi - - # --------------------------------------------------- # Patch Team Identifier # Ensure both IDs are same length if [[ ${#NC_TEAM_IDENTIFIER} -ne ${#IONOS_TEAM_IDENTIFIER} ]]; then - echo "❌ OLD_ID and NEW_ID must be the same length for binary-safe patching." + echo "NC_TEAM_IDENTIFIER and IONOS_TEAM_IDENTIFIER must be the same length for binary-safe patching." + open $BASE_DIR exit 1 fi # --- Replace in .plist files (plain XML) --- -echo "🔧 Replacing in .plist files..." -# find "$APP_PATH" -name "*.plist" -exec sed -i '' "s/$NC_TEAM_IDENTIFIER/$IONOS_TEAM_IDENTIFIER/g" {} \; +echo "Replacing Team Identifier in .plist files..." find "$APP_PATH" -name "*.plist" -exec grep -q "$NC_TEAM_IDENTIFIER" {} \; -exec sed -i '' "s/$NC_TEAM_IDENTIFIER/$IONOS_TEAM_IDENTIFIER/g" {} \; - - # Find and patch all binaries containing the old ID find . -type f -exec grep -q --binary-files=text "$NC_TEAM_IDENTIFIER" {} \; -print | while read -r file; do - echo "🔧 Patching $file" + echo "Patching Team Identifier in $file" perl -pi -e "s/$NC_TEAM_IDENTIFIER/$IONOS_TEAM_IDENTIFIER/g" "$file" done - - # --------------------------------------------------- # Sign the client # CODE_SIGN_IDENTITY="Developer ID Application: IONOS SE (5TDLCVD243)" @@ -129,10 +103,11 @@ done # Check if CODE_SIGN_IDENTITY is set, if not exit if [ -z "$CODE_SIGN_IDENTITY" ]; then echo "Code sign identity not set. Exiting." - open $PRODUCT_DIR + open $BASE_DIR exit 0 fi +echo "start signing the client" CLIENT_CONTENTS_DIR=$APP_PATH/Contents CLIENT_FRAMEWORKS_DIR=$CLIENT_CONTENTS_DIR/Frameworks @@ -148,25 +123,26 @@ find "$CLIENT_PLUGINS_DIR" -print0 | xargs -0 -I {} bash -c 'recursive_sign "$@" find "$CLIENT_RESOURCES_DIR" -print0 | xargs -0 -I {} bash -c 'recursive_sign "$@" "$CODE_SIGN_IDENTITY"' _ {} "$CODE_SIGN_IDENTITY" codesign -s "$CODE_SIGN_IDENTITY" --force --preserve-metadata=entitlements --verbose=4 --deep --options=runtime --timestamp "$APP_PATH" - - -# Sign the client +# Sign the client ---- Still needed? # find "$CLIENT_CONTENTS_DIR/MacOS" -mindepth 1 -print0 | xargs -0 -I {} bash -c 'sign_folder_content "$@" "$CODE_SIGN_IDENTITY" "$entitlements" ' _ {} "$CODE_SIGN_IDENTITY" "--preserve-metadata=entitlements" # Validate that the key used for signing the binary matches the expected TeamIdentifier # needed to pass the SocketApi through the sandbox for communication with virtual file system if ! codesign -dv "$APP_PATH" 2>&1 | grep -q "TeamIdentifier=$IONOS_TEAM_IDENTIFIER"; then echo "TeamIdentifier does not match. Exiting." + open $BASE_DIR exit 0 fi # --------------------------------------------------- # Installer +echo "start building the installer" + # Build the installer, if enabled if [ -z "$PACKAGE_INSTALLER" ]; then echo "Installer packaging not enabled. Exiting." - open $PRODUCT_DIR + open $BASE_DIR exit 0 fi @@ -179,10 +155,6 @@ echo "Reassembling the package..." rm -rf $PAYLOAD_DIR mv $PAYLOAD_DIR.new $PAYLOAD_DIR -# xar --compression none \ -# -cf $INNER_PKG.flat \ -# PackageInfo Bom Payload Scripts 2>/dev/null - (cd $EXTRACTED_DIR && \ pkgutil --flatten $UNDERSCORE_PRODUCT_NAME.pkg $UNDERSCORE_PRODUCT_NAME.pkg.flat) @@ -202,23 +174,10 @@ mv $INNER_PKG.signed $INNER_PKG --package-path ex \ $INSTALLER_PKG.unsigned) -productsign --timestamp --sign 'Developer ID Installer: IONOS SE (5TDLCVD243)' $INSTALLER_PKG.unsigned "$BASE_DIR$PKG_ORGINAL_NAME.resigned.pkg" - -# pkgutil --flatten "$EXTRACTED_DIR" "$FINAL_TARGET_PATH" - -# codesign -s "$CODE_SIGN_IDENTITY" --force --preserve-metadata=entitlements --verbose=4 --deep --options=runtime --timestamp "$FINAL_TARGET_PATH" -# productsign --timestamp --sign 'Developer ID Installer: IONOS SE (5TDLCVD243)' "$FINAL_TARGET_PATH" "$FINAL_TARGET_PATH.new" -# exit 0 - -# package -# $BASE_DIR/admin/osx/create_mac.sh "$PRODUCT_DIR" "$BASE_DIR" 'Developer ID Installer: IONOS SE (5TDLCVD243)' - -# notariaze -# Extract package filename from filesystem per .pkg extension -# PACKAGE_FILENAME=$(ls $PRODUCT_DIR/*.pkg) +productsign --timestamp --sign 'Developer ID Installer: IONOS SE (5TDLCVD243)' $INSTALLER_PKG.unsigned "$BASE_DIR$PKG_FILENAME.resigned.pkg" # catch the output of the notarytool command -OUTPUT=$(xcrun notarytool submit --wait "$BASE_DIR$PKG_ORGINAL_NAME.resigned.pkg"\ +OUTPUT=$(xcrun notarytool submit --wait "$BASE_DIR$PKG_FILENAME.resigned.pkg"\ --keychain-profile "IONOS SE HiDrive Next") SUBMISSION_STATUS=$(echo $OUTPUT | grep -o 'status: [^ ]*' | cut -d ' ' -f 2) @@ -226,11 +185,13 @@ SUBMISSION_STATUS=$(echo $OUTPUT | grep -o 'status: [^ ]*' | cut -d ' ' -f 2) # Check if the notarization was successful if [ $SUBMISSION_STATUS != "Accepted" ]; then echo "Notarization failed. Exiting." + open $BASE_DIR exit 1 fi # staple -xcrun stapler staple "$BASE_DIR$PKG_ORGINAL_NAME.resigned.pkg" -xcrun stapler validate "$BASE_DIR$PKG_ORGINAL_NAME.resigned.pkg" +xcrun stapler staple "$BASE_DIR$PKG_FILENAME.resigned.pkg" +xcrun stapler validate "$BASE_DIR$PKG_FILENAME.resigned.pkg" + +open $BASE_DIR -# open $PRODUCT_DIR From 34b11342a74546b90ddf97225c333b759c0846c1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Christopher=20H=C3=A4tty?= Date: Fri, 16 May 2025 13:14:54 +0200 Subject: [PATCH 220/371] SES-356 Uses correct User Agent --- .../FileProviderExt/FileProviderExtension+ClientInterface.swift | 2 +- .../FileProviderUIExt/Locking/LockViewController.swift | 2 +- .../FileProviderUIExt/Sharing/ShareTableViewDataSource.swift | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/shell_integration/MacOSX/NextcloudIntegration/FileProviderExt/FileProviderExtension+ClientInterface.swift b/shell_integration/MacOSX/NextcloudIntegration/FileProviderExt/FileProviderExtension+ClientInterface.swift index ed24ee68ff06e..4201ac6d30b65 100644 --- a/shell_integration/MacOSX/NextcloudIntegration/FileProviderExt/FileProviderExtension+ClientInterface.swift +++ b/shell_integration/MacOSX/NextcloudIntegration/FileProviderExt/FileProviderExtension+ClientInterface.swift @@ -109,7 +109,7 @@ extension FileProviderExtension: NSFileProviderServicing, ChangeNotificationInte userId: String, serverUrl: String, password: String, - userAgent: String = "Nextcloud-macOS/FileProviderExt" + userAgent: String = "IONOS HiDrive Next/FileProviderExt" ) { let account = Account(user: user, id: userId, serverUrl: serverUrl, password: password) guard account != ncAccount else { return } diff --git a/shell_integration/MacOSX/NextcloudIntegration/FileProviderUIExt/Locking/LockViewController.swift b/shell_integration/MacOSX/NextcloudIntegration/FileProviderUIExt/Locking/LockViewController.swift index 4ab55ccb34d91..bed4d4c66b49b 100644 --- a/shell_integration/MacOSX/NextcloudIntegration/FileProviderUIExt/Locking/LockViewController.swift +++ b/shell_integration/MacOSX/NextcloudIntegration/FileProviderUIExt/Locking/LockViewController.swift @@ -179,7 +179,7 @@ class LockViewController: NSViewController { user: account.username, userId: account.id, password: account.password, - userAgent: "Nextcloud-macOS/FileProviderUIExt", + userAgent: "IONOS HiDrive Next/FileProviderUIExt", nextcloudVersion: 25, groupIdentifier: "" ) diff --git a/shell_integration/MacOSX/NextcloudIntegration/FileProviderUIExt/Sharing/ShareTableViewDataSource.swift b/shell_integration/MacOSX/NextcloudIntegration/FileProviderUIExt/Sharing/ShareTableViewDataSource.swift index f670d92edce49..f902472b43720 100644 --- a/shell_integration/MacOSX/NextcloudIntegration/FileProviderUIExt/Sharing/ShareTableViewDataSource.swift +++ b/shell_integration/MacOSX/NextcloudIntegration/FileProviderUIExt/Sharing/ShareTableViewDataSource.swift @@ -36,7 +36,7 @@ class ShareTableViewDataSource: NSObject, NSTableViewDataSource, NSTableViewDele private(set) var shares: [NKShare] = [] { didSet { Task { @MainActor in sharesTableView?.reloadData() } } } - private(set) var userAgent: String = "Nextcloud-macOS/FileProviderUIExt" + private(set) var userAgent: String = "IONOS HiDrive Next/FileProviderUIExt" private(set) var account: Account? { didSet { guard let account = account else { return } From 9fcc054843bcfb219b11d65f6a441a4ccc30edbb Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Christopher=20H=C3=A4tty?= Date: Fri, 16 May 2025 16:25:24 +0200 Subject: [PATCH 221/371] SES-377 fix treeView darkmode problem --- src/gui/selectivesyncdialog.cpp | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/gui/selectivesyncdialog.cpp b/src/gui/selectivesyncdialog.cpp index a9a9cc9536301..d7e006c15eafc 100644 --- a/src/gui/selectivesyncdialog.cpp +++ b/src/gui/selectivesyncdialog.cpp @@ -568,6 +568,10 @@ void SelectiveSyncDialog::init(const AccountPtr &account) void SelectiveSyncDialog::customizeStyle() { + this->setStyleSheet( + QStringLiteral("QWidget QTreeView{ background-color: %1; }").arg(IonosTheme::dialogBackgroundColor()) + ); + _okButton->setStyleSheet( _okButton->styleSheet() + QStringLiteral("QPushButton { %1; } ").arg( IonosTheme::fontConfigurationCss( From fa1e46740f1576734a243803b811e2a4d6efcb9c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Christopher=20H=C3=A4tty?= Date: Fri, 16 May 2025 16:26:15 +0200 Subject: [PATCH 222/371] SES-377 fix removeCurrentFolder darkmode Problem --- src/gui/accountsettings.cpp | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/src/gui/accountsettings.cpp b/src/gui/accountsettings.cpp index da12f055c545b..babf23c07cf7b 100644 --- a/src/gui/accountsettings.cpp +++ b/src/gui/accountsettings.cpp @@ -980,13 +980,14 @@ void AccountSettings::slotRemoveCurrentFolder() this); messageBox->setStyleSheet( - QStringLiteral("QMessageBox QLabel { %1; }").arg( + QStringLiteral("QMessageBox QLabel { %1; } QDialog { background-color: %2; }").arg( IonosTheme::fontConfigurationCss( IonosTheme::settingsFont(), IonosTheme::settingsTextSize(), IonosTheme::settingsTextWeight(), IonosTheme::titleColor() - ) + ), + IonosTheme::dialogBackgroundColor() ) ); From 3818ba9fbbaec0a84b0b6553be79132122f3e3cf Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Christopher=20H=C3=A4tty?= Date: Fri, 16 May 2025 16:26:52 +0200 Subject: [PATCH 223/371] SES-377 fix addIgnorePattern Dialog in darkmode --- src/gui/ignorelisttablewidget.cpp | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/src/gui/ignorelisttablewidget.cpp b/src/gui/ignorelisttablewidget.cpp index a827b186d8753..ce279489bd4d2 100644 --- a/src/gui/ignorelisttablewidget.cpp +++ b/src/gui/ignorelisttablewidget.cpp @@ -236,6 +236,17 @@ void IgnoreListTableWidget::customizeAddIgnorePatternDialogStyle(QInputDialog &i inputDialog.resize(626, 196); inputDialog.setVisible(true); inputDialog.setContentsMargins(12,0,12,12); + + inputDialog.setStyleSheet( QStringLiteral("QDialog { %1; background-color: %2; }").arg( + IonosTheme::fontConfigurationCss( + IonosTheme::settingsFont(), + IonosTheme::settingsTextSize(), + IonosTheme::settingsTextWeight(), + IonosTheme::titleColor() + ), + IonosTheme::dialogBackgroundColor() + ) + ); QLabel *label = inputDialog.findChild(); label->setAlignment(Qt::AlignCenter); From 55371aa65950444a336fa8cb75bb043e4a5da64b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Christopher=20H=C3=A4tty?= Date: Fri, 16 May 2025 16:30:11 +0200 Subject: [PATCH 224/371] SES-377 set background color of selectiveSync in onbaording --- src/gui/wizard/owncloudadvancedsetuppage.cpp | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/gui/wizard/owncloudadvancedsetuppage.cpp b/src/gui/wizard/owncloudadvancedsetuppage.cpp index d4702d296f6c4..e88a5f6e3d73d 100644 --- a/src/gui/wizard/owncloudadvancedsetuppage.cpp +++ b/src/gui/wizard/owncloudadvancedsetuppage.cpp @@ -532,6 +532,9 @@ void OwncloudAdvancedSetupPage::slotSelectiveSyncClicked() auto *dlg = new SelectiveSyncDialog(acc, _remoteFolder, _selectiveSyncBlacklist, this); dlg->setAttribute(Qt::WA_DeleteOnClose); + dlg->setStyleSheet(QStringLiteral("QDialog { background-color: %1; } QWidget { background-color: %1; }").arg( + IonosTheme::dialogBackgroundColor())); + connect(dlg, &SelectiveSyncDialog::finished, this, [this, dlg]{ const int result = dlg->result(); bool updateBlacklist = false; From fc336d82eb4355555029c5bd73ed020ddb527b94 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Christopher=20H=C3=A4tty?= Date: Fri, 16 May 2025 16:31:09 +0200 Subject: [PATCH 225/371] SES-377 enable checkbox and set checked so it gets displayed on macOS darkmode --- src/gui/generalsettings.cpp | 2 +- src/gui/wizard/dataprotectionsettingspage.cpp | 30 ++++++++++++++----- 2 files changed, 24 insertions(+), 8 deletions(-) diff --git a/src/gui/generalsettings.cpp b/src/gui/generalsettings.cpp index 4d70bf68d40af..998ef22a071e7 100644 --- a/src/gui/generalsettings.cpp +++ b/src/gui/generalsettings.cpp @@ -773,7 +773,7 @@ void GeneralSettings::customizeStyle() ) ); - _ui->sendNecessaryData_checkbox->setEnabled(false); + _ui->sendNecessaryData_checkbox->setChecked(true); _ui->sendNecessaryData_checkbox->setStyleSheet( QStringLiteral("QCheckBox { font-size: %1; font-weight: %2; color: %3; }").arg( IonosTheme::settingsTextSize(), diff --git a/src/gui/wizard/dataprotectionsettingspage.cpp b/src/gui/wizard/dataprotectionsettingspage.cpp index f2f524fe79304..35e5acbe8038b 100644 --- a/src/gui/wizard/dataprotectionsettingspage.cpp +++ b/src/gui/wizard/dataprotectionsettingspage.cpp @@ -67,7 +67,9 @@ namespace OCC{ _ui->mainVBox->setContentsMargins(32, 0, 32, 0); - _ui->necessaryDataCheckBox->setEnabled(false); + //_ui->necessaryDataCheckBox->setEnabled(false); + _ui->necessaryDataCheckBox->setChecked(true); + _ui->necessaryDataCheckBox->setStyleSheet( QStringLiteral("QCheckBox { %1; }").arg( IonosTheme::fontConfigurationCss( @@ -88,8 +90,6 @@ namespace OCC{ ) )); - _ui->necessaryDataCheckBox->setChecked(true); - _ui->descriptionLabel->setStyleSheet( QStringLiteral("QLabel { %1; margin-top: %2; margin-bottom: %2; }").arg( IonosTheme::fontConfigurationCss( @@ -102,10 +102,26 @@ namespace OCC{ ) ); - _ui->necessaryDataLabel->setStyleSheet(QStringLiteral("QLabel { margin-left: %1; margin-bottom: %2; }") - .arg("16", IonosTheme::smallMargin())); - _ui->anonymousDataLabel->setStyleSheet(QStringLiteral("QLabel { margin-left: %1; margin-bottom: %2; }") - .arg("16", "48")); + _ui->necessaryDataLabel->setStyleSheet(QStringLiteral("QLabel { %1; margin-left: %2; margin-bottom: %3; }") + .arg(IonosTheme::fontConfigurationCss( + IonosTheme::settingsFont(), + IonosTheme::settingsTextSize(), + IonosTheme::settingsTextWeight(), + IonosTheme::black() + ), + "16", + IonosTheme::smallMargin())); + + _ui->anonymousDataLabel->setStyleSheet(QStringLiteral("QLabel {%1; margin-left: %2; margin-bottom: %3; }") + .arg(IonosTheme::fontConfigurationCss( + IonosTheme::settingsFont(), + IonosTheme::settingsTextSize(), + IonosTheme::settingsTextWeight(), + IonosTheme::black() + ), + "16", + "48") + ); _ui->buttonLayout->setAlignment(Qt::AlignCenter); _ui->buttonLayout->setSpacing(16); From 3ab59f5a0b6f1496f6e9477c1bf06b21dde17b32 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Christopher=20H=C3=A4tty?= Date: Mon, 19 May 2025 09:01:09 +0200 Subject: [PATCH 226/371] SES-363 enhanced patching logic, added more signing --- admin/osx/ionos_macmaker/sign.sh | 49 +++++++++++++++++++++----------- 1 file changed, 32 insertions(+), 17 deletions(-) diff --git a/admin/osx/ionos_macmaker/sign.sh b/admin/osx/ionos_macmaker/sign.sh index 7188e9d1a188a..f781a41c9cb4d 100755 --- a/admin/osx/ionos_macmaker/sign.sh +++ b/admin/osx/ionos_macmaker/sign.sh @@ -22,7 +22,7 @@ export -f sign_folder_content # This script is used to build the Mac OS X version of the IONOS client. # Parse the command line arguments -while getopts "b:p:s:civ" opt; do +while getopts "b:p:s:civt" opt; do case ${opt} in b )BASE_DIR=$OPTARG;; p )PATH_TO_PKG=$OPTARG ;; @@ -30,6 +30,7 @@ while getopts "b:p:s:civ" opt; do c )CLEAN_REBUILD=true ;; i )PACKAGE_INSTALLER=true ;; v )VERBOSE=true ;; + t )TEAM_PATCHING=true ;; \? ) echo "Usage: sign.sh [-b ] [-p ] [-s ] [-c clean-rebuild] [-i build-installer] [-v verbose]" exit 1 @@ -80,22 +81,35 @@ fi # --------------------------------------------------- # Patch Team Identifier -# Ensure both IDs are same length -if [[ ${#NC_TEAM_IDENTIFIER} -ne ${#IONOS_TEAM_IDENTIFIER} ]]; then - echo "NC_TEAM_IDENTIFIER and IONOS_TEAM_IDENTIFIER must be the same length for binary-safe patching." - open $BASE_DIR - exit 1 -fi -# --- Replace in .plist files (plain XML) --- -echo "Replacing Team Identifier in .plist files..." -find "$APP_PATH" -name "*.plist" -exec grep -q "$NC_TEAM_IDENTIFIER" {} \; -exec sed -i '' "s/$NC_TEAM_IDENTIFIER/$IONOS_TEAM_IDENTIFIER/g" {} \; - -# Find and patch all binaries containing the old ID -find . -type f -exec grep -q --binary-files=text "$NC_TEAM_IDENTIFIER" {} \; -print | while read -r file; do - echo "Patching Team Identifier in $file" - perl -pi -e "s/$NC_TEAM_IDENTIFIER/$IONOS_TEAM_IDENTIFIER/g" "$file" -done +# check wether patching is needed. ".com" is important because otherwise the ID in the signature will be found +if [[ -n "$TEAM_PATCHING" ]]; then + PLIST_MATCHES=$(find "$APP_PATH" -name "*.plist" -exec grep -q "$NC_TEAM_IDENTIFIER.com" {} \; -print | wc -l) + BIN_MATCHES=$(find "$APP_PATH" -type f -exec grep -q --binary-files=text "$NC_TEAM_IDENTIFIER.com" {} \; -print | wc -l) + + if [[ "$PLIST_MATCHES" -gt 0 || "$BIN_MATCHES" -gt 0 ]]; then + # Ensure both IDs are same lengt + if [[ ${#NC_TEAM_IDENTIFIER} -ne ${#IONOS_TEAM_IDENTIFIER} ]]; then + echo "NC_TEAM_IDENTIFIER and IONOS_TEAM_IDENTIFIER must be the same length for binary-safe patching." + open $BASE_DIR + exit 1 + fi + + if [[ "$PLIST_MATCHES" -gt 0 ]]; then + # --- Replace in .plist files (plain XML) --- + echo "Replacing Team Identifier in .plist files..." + find "$APP_PATH" -name "*.plist" -exec grep -q "$NC_TEAM_IDENTIFIER" {} \; -exec sed -i '' "s/$NC_TEAM_IDENTIFIER/$IONOS_TEAM_IDENTIFIER/g" {} \; + fi + + if [[ "$BIN_MATCHES" -gt 0 ]]; then + # Find and patch all binaries containing the old ID + find "$APP_PATH" -type f -exec grep -q --binary-files=text "$NC_TEAM_IDENTIFIER" {} \; -print | while read -r file; do + echo "Patching Team Identifier in $file" + perl -pi -e "s/$NC_TEAM_IDENTIFIER/$IONOS_TEAM_IDENTIFIER/g" "$file" + done + fi + fi +fi # --------------------------------------------------- # Sign the client # CODE_SIGN_IDENTITY="Developer ID Application: IONOS SE (5TDLCVD243)" @@ -112,6 +126,7 @@ echo "start signing the client" CLIENT_CONTENTS_DIR=$APP_PATH/Contents CLIENT_FRAMEWORKS_DIR=$CLIENT_CONTENTS_DIR/Frameworks CLIENT_RESOURCES_DIR=$CLIENT_CONTENTS_DIR/Resources +CLIENT_PLUGINS_DIR=$CLIENT_CONTENTS_DIR/PlugIns for script in $SCRIPTS_DIR/*; do echo "→ Signing script: $script" @@ -124,7 +139,7 @@ find "$CLIENT_RESOURCES_DIR" -print0 | xargs -0 -I {} bash -c 'recursive_sign "$ codesign -s "$CODE_SIGN_IDENTITY" --force --preserve-metadata=entitlements --verbose=4 --deep --options=runtime --timestamp "$APP_PATH" # Sign the client ---- Still needed? -# find "$CLIENT_CONTENTS_DIR/MacOS" -mindepth 1 -print0 | xargs -0 -I {} bash -c 'sign_folder_content "$@" "$CODE_SIGN_IDENTITY" "$entitlements" ' _ {} "$CODE_SIGN_IDENTITY" "--preserve-metadata=entitlements" +find "$CLIENT_CONTENTS_DIR/MacOS" -mindepth 1 -print0 | xargs -0 -I {} bash -c 'sign_folder_content "$@" "$CODE_SIGN_IDENTITY" "$entitlements" ' _ {} "$CODE_SIGN_IDENTITY" "--preserve-metadata=entitlements" # Validate that the key used for signing the binary matches the expected TeamIdentifier # needed to pass the SocketApi through the sandbox for communication with virtual file system From ddf5b12413e94da62998824abade69ac71b288e5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Christopher=20H=C3=A4tty?= Date: Mon, 19 May 2025 09:01:31 +0200 Subject: [PATCH 227/371] SES-363 added readme --- admin/osx/ionos_macmaker/readme.md | 104 +++++++++++++++++++++++++++++ 1 file changed, 104 insertions(+) create mode 100644 admin/osx/ionos_macmaker/readme.md diff --git a/admin/osx/ionos_macmaker/readme.md b/admin/osx/ionos_macmaker/readme.md new file mode 100644 index 0000000000000..1ab68e4803df0 --- /dev/null +++ b/admin/osx/ionos_macmaker/readme.md @@ -0,0 +1,104 @@ +# sign.sh - IONOS HiDrive Next - macOS Resign and Notarization Script + +This script automates the **patching**, **re-signing**, **packaging**, **notarization**, and **stapling** of the `IONOS HiDrive Next` macOS `.pkg` installer. + +--- + +## 🔧 What it does + +1. **Expands** a `.pkg` installer. +2. **Patches** the Team Identifier in `.plist` files and binaries if required. +3. **Code-signs** all components of the `.app` bundle and related scripts. +4. **Reassembles** and **signs** the final `.pkg` installer. +5. **Submits** the `.pkg` for notarization. +6. **Staples** the notarization ticket onto the package. + +--- + +## 📝 Usage + +```bash +./sign.sh -b -p -s [-c] [-i] [-v] +```` + +### Parameters + +| Flag | Description | +| ---- | ------------------------------------------------------------------------- | +| `-b` | **Base directory** where output and working directories will be stored. | +| `-p` | **Path to the original `.pkg`** to be processed. | +| `-s` | **Code signing identity** (common name of your Developer ID certificate). | +| `-c` | Optional: Perform a **clean rebuild** of the expanded `.pkg`. | +| `-i` | Optional: Enable **installer creation** (required for final output). | +| `-v` | Optional: Enable **verbose mode** for detailed logging. | +| `-t` | Optional: Enable patching of the Team Identifer in Binaries | + +--- + +## 📦 Example + +```bash +./sign.sh -b ~/Desktop/build -p ./IONOS_HiDrive.pkg -s "IONOS SE (SAMPLE_ID)" -c -i -v +``` + +--- + +## 📁 Output + +After successful execution, you’ll find the final notarized and stapled installer here: + +``` +/.resigned.pkg +``` + +--- + +## 🔐 Code Signing Notes + +* `APPLICATION_CERT` is used to sign the `.app`, its frameworks, and extensions. +* `INSTALLER_CERT` is used to sign the final `.pkg` with `productsign`. +* `TEAM_IDENTIFIER` is **validated** in the final app signature to ensure it matches expectations. + +--- + +## 🧩 Patch Logic + +If the script detects the **old Team Identifier** (`NC_TEAM_IDENTIFIER`) inside any `.plist` or binary: + +* It **replaces** it with the new identifier (`IONOS_TEAM_IDENTIFIER`), only if the lengths match. +* Ensures a **binary-safe patch** using `perl` and `sed`. +* Only files with actual matches are patched. + +--- + +## 🍏 Notarization + +The script uses: + +```bash +xcrun notarytool submit --wait --keychain-profile "IONOS SE HiDrive Next" +``` + +Make sure the keychain profile is **set up properly** and can access your notarization credentials. + +--- + +## 🛠 Requirements + +* macOS with Xcode Command Line Tools installed +* Access to a valid **Developer ID Application** and **Installer certificate** +* A configured **notarytool profile** in your keychain +* Tools used: + + * `pkgutil`, `codesign`, `productsign`, `productbuild`, `xcrun`, `plutil`, `grep`, `sed`, `perl`, `mkbom`, `cpio`, `gzip` + +--- + +## 🛡️ Safety Checks + +* Team ID patching only happens if both IDs are the **same length**. +* Binary patching is skipped unless needed. +* Final code signature is checked for correct TeamIdentifier. +* If notarization fails, the script exits with an error. + +--- From 04bd036e0525d5d34fd33c4c5228c3fdc9eaf386 Mon Sep 17 00:00:00 2001 From: Kevin Beraz Date: Thu, 12 Jun 2025 10:40:36 +0200 Subject: [PATCH 228/371] SES-386 fix darkmode in folderwizard --- src/gui/folderwizard.cpp | 17 +++++++++++++++-- src/gui/ignorelisttablewidget.cpp | 2 +- 2 files changed, 16 insertions(+), 3 deletions(-) diff --git a/src/gui/folderwizard.cpp b/src/gui/folderwizard.cpp index bdfb544b43e0f..3ccc24ae8f06e 100644 --- a/src/gui/folderwizard.cpp +++ b/src/gui/folderwizard.cpp @@ -325,6 +325,14 @@ void FolderWizardRemotePath::slotAddRemoteFolder() ) ); + dlg->findChild()->setStyleSheet( + IonosTheme::fontConfigurationCss( + IonosTheme::settingsFont(), + IonosTheme::settingsBigTitleSize(), + IonosTheme::settingsTitleWeight600(), + IonosTheme::titleColor()) + ); + #ifdef Q_OS_MAC buttonBox->layout()->setSpacing(24); @@ -750,6 +758,10 @@ void FolderWizardRemotePath::changeStyle() IonosTheme::settingsTextWeight(), IonosTheme::titleColor())); + _ui.folderTreeWidget->setStyleSheet( + QStringLiteral("QTreeWidget { background: %1; }").arg(IonosTheme::white()) + ); + _ui.refreshButton->setProperty("text", tr("Refresh")); _ui.addFolderButton->setProperty("text", tr("Create folder")); @@ -793,11 +805,12 @@ FolderWizardSelectiveSync::FolderWizardSelectiveSync(const AccountPtr &account) layout->addLayout(_virtualFilesHBox); } - _selectiveSync->setStyleSheet(IonosTheme::fontConfigurationCss( + _selectiveSync->setStyleSheet(QStringLiteral(" %1; background: %2; ").arg(IonosTheme::fontConfigurationCss( IonosTheme::settingsFont(), IonosTheme::settingsTextSize(), IonosTheme::settingsTextWeight(), - IonosTheme::titleColor())); + IonosTheme::titleColor()), + IonosTheme::white())); _uiSelectiveSync.title->setStyleSheet(IonosTheme::fontConfigurationCss( IonosTheme::settingsFont(), diff --git a/src/gui/ignorelisttablewidget.cpp b/src/gui/ignorelisttablewidget.cpp index ce279489bd4d2..ba96f52be47b5 100644 --- a/src/gui/ignorelisttablewidget.cpp +++ b/src/gui/ignorelisttablewidget.cpp @@ -237,7 +237,7 @@ void IgnoreListTableWidget::customizeAddIgnorePatternDialogStyle(QInputDialog &i inputDialog.setVisible(true); inputDialog.setContentsMargins(12,0,12,12); - inputDialog.setStyleSheet( QStringLiteral("QDialog { %1; background-color: %2; }").arg( + inputDialog.setStyleSheet( QStringLiteral("QDialog { %1; background: %2; }").arg( IonosTheme::fontConfigurationCss( IonosTheme::settingsFont(), IonosTheme::settingsTextSize(), From 167dac171cf73d5bd74de6892e2329a112db888f Mon Sep 17 00:00:00 2001 From: Kevin Beraz Date: Fri, 13 Jun 2025 08:48:42 +0200 Subject: [PATCH 229/371] SES-386 more darkmode fixes in folderwizard --- src/gui/accountsettings.cpp | 4 ++++ src/gui/folderwizard.cpp | 6 +++--- 2 files changed, 7 insertions(+), 3 deletions(-) diff --git a/src/gui/accountsettings.cpp b/src/gui/accountsettings.cpp index babf23c07cf7b..1782d97ad88c8 100644 --- a/src/gui/accountsettings.cpp +++ b/src/gui/accountsettings.cpp @@ -1849,6 +1849,10 @@ void AccountSettings::customizeStyle() ) ); + _ui->_folderList->setStyleSheet( + QStringLiteral("background: %1; ").arg(IonosTheme::white()) + ); + #if defined(Q_OS_MAC) _ui->selectiveSyncLabel->setStyleSheet(QString("color: %1;").arg(IonosTheme::black())); _ui->horizontalLayout->setSpacing(16); diff --git a/src/gui/folderwizard.cpp b/src/gui/folderwizard.cpp index 3ccc24ae8f06e..d0335655645c1 100644 --- a/src/gui/folderwizard.cpp +++ b/src/gui/folderwizard.cpp @@ -328,8 +328,8 @@ void FolderWizardRemotePath::slotAddRemoteFolder() dlg->findChild()->setStyleSheet( IonosTheme::fontConfigurationCss( IonosTheme::settingsFont(), - IonosTheme::settingsBigTitleSize(), - IonosTheme::settingsTitleWeight600(), + IonosTheme::settingsTextSize(), + IonosTheme::settingsTextWeight(), IonosTheme::titleColor()) ); @@ -759,7 +759,7 @@ void FolderWizardRemotePath::changeStyle() IonosTheme::titleColor())); _ui.folderTreeWidget->setStyleSheet( - QStringLiteral("QTreeWidget { background: %1; }").arg(IonosTheme::white()) + _ui.folderTreeWidget->styleSheet() + QStringLiteral("QTreeWidget { background: %1; }").arg(IonosTheme::white()) ); _ui.refreshButton->setProperty("text", tr("Refresh")); From 04a3b2d6c0408a3a81af02d2000c073f95a086ff Mon Sep 17 00:00:00 2001 From: Kevin Beraz Date: Fri, 13 Jun 2025 08:54:34 +0200 Subject: [PATCH 230/371] SES-386 fix font color in dataprotectionsettingspage --- src/gui/wizard/dataprotectionsettingspage.cpp | 19 ++++++++++++------- 1 file changed, 12 insertions(+), 7 deletions(-) diff --git a/src/gui/wizard/dataprotectionsettingspage.cpp b/src/gui/wizard/dataprotectionsettingspage.cpp index 35e5acbe8038b..2bf7053fea61c 100644 --- a/src/gui/wizard/dataprotectionsettingspage.cpp +++ b/src/gui/wizard/dataprotectionsettingspage.cpp @@ -102,26 +102,31 @@ namespace OCC{ ) ); - _ui->necessaryDataLabel->setStyleSheet(QStringLiteral("QLabel { %1; margin-left: %2; margin-bottom: %3; }") - .arg(IonosTheme::fontConfigurationCss( + _ui->necessaryDataLabel->setStyleSheet( + QStringLiteral("QLabel { %1; margin-left: %2; margin-bottom: %3; }").arg( + IonosTheme::fontConfigurationCss( IonosTheme::settingsFont(), IonosTheme::settingsTextSize(), IonosTheme::settingsTextWeight(), IonosTheme::black() ), "16", - IonosTheme::smallMargin())); + IonosTheme::smallMargin() + ) + ); - _ui->anonymousDataLabel->setStyleSheet(QStringLiteral("QLabel {%1; margin-left: %2; margin-bottom: %3; }") - .arg(IonosTheme::fontConfigurationCss( + _ui->anonymousDataLabel->setStyleSheet( + QStringLiteral("QLabel { %1; margin-left: %2; margin-bottom: %3; }").arg( + IonosTheme::fontConfigurationCss( IonosTheme::settingsFont(), IonosTheme::settingsTextSize(), IonosTheme::settingsTextWeight(), IonosTheme::black() ), "16", - "48") - ); + "48" + ) + ); _ui->buttonLayout->setAlignment(Qt::AlignCenter); _ui->buttonLayout->setSpacing(16); From e49fbe5568449296cc8fff32c7f5bcfa7fe85257 Mon Sep 17 00:00:00 2001 From: Kevin Beraz Date: Fri, 13 Jun 2025 09:25:36 +0200 Subject: [PATCH 231/371] SES-386 fix share views dakrmode problems --- src/gui/filedetails/FileDetailsPage.qml | 3 +-- src/gui/filedetails/ShareDetailsPage.qml | 3 +-- src/gui/tray/ActivityList.qml | 4 ++++ 3 files changed, 6 insertions(+), 4 deletions(-) diff --git a/src/gui/filedetails/FileDetailsPage.qml b/src/gui/filedetails/FileDetailsPage.qml index 604a3091edcba..e170b31a06aa4 100644 --- a/src/gui/filedetails/FileDetailsPage.qml +++ b/src/gui/filedetails/FileDetailsPage.qml @@ -73,8 +73,7 @@ Page { bottomPadding: intendedPadding background: Rectangle { - color: palette.window - visible: root.backgroundsVisible + color: Style.sesDarkBlue } header: ColumnLayout { diff --git a/src/gui/filedetails/ShareDetailsPage.qml b/src/gui/filedetails/ShareDetailsPage.qml index 7b4ead826f663..10a77dde0e7af 100644 --- a/src/gui/filedetails/ShareDetailsPage.qml +++ b/src/gui/filedetails/ShareDetailsPage.qml @@ -191,8 +191,7 @@ Page { padding: Style.standardSpacing * 2 background: Rectangle { - color: palette.base - visible: root.backgroundsVisible + color: Style.sesWhite } header: ColumnLayout { diff --git a/src/gui/tray/ActivityList.qml b/src/gui/tray/ActivityList.qml index 06f890683d2cd..054fca13487a9 100644 --- a/src/gui/tray/ActivityList.qml +++ b/src/gui/tray/ActivityList.qml @@ -20,6 +20,10 @@ ScrollView { scrollingToTop = true } + background: Rectangle { + color: Style.sesWhite + } + signal openFile(string filePath) signal activityItemClicked(int index) From 83124fa939bd2514322c5b7353915653440dd735 Mon Sep 17 00:00:00 2001 From: Kevin Beraz Date: Fri, 13 Jun 2025 11:59:13 +0200 Subject: [PATCH 232/371] SES-386 fix font colors in tray user menu dropdown for darkmode --- src/gui/tray/AccountMenuItem.qml | 2 ++ src/gui/tray/UserLine.qml | 6 +++++- 2 files changed, 7 insertions(+), 1 deletion(-) diff --git a/src/gui/tray/AccountMenuItem.qml b/src/gui/tray/AccountMenuItem.qml index 9ea01a7a761f1..224a77a47cc7d 100644 --- a/src/gui/tray/AccountMenuItem.qml +++ b/src/gui/tray/AccountMenuItem.qml @@ -14,6 +14,8 @@ MenuItem { property bool isActive: accountMenuItem.pressed font.pixelSize: Style.sesFontPixelSize + palette.text: Style.sesDarkBlue + hoverEnabled: true leftPadding: Style.sesMediumMargin topPadding: Style.sesAccountMenuItemPadding diff --git a/src/gui/tray/UserLine.qml b/src/gui/tray/UserLine.qml index 70953ea5edf03..e6640f99c4c76 100644 --- a/src/gui/tray/UserLine.qml +++ b/src/gui/tray/UserLine.qml @@ -29,7 +29,6 @@ AbstractButton { signal showUserStatusSelector(int id) - Accessible.role: Accessible.MenuItem Accessible.name: qsTr("Switch to account") + " " + model.name @@ -70,6 +69,7 @@ AbstractButton { text: name elide: Text.ElideRight font: root.font + color: Style.sesDarkBlue } RowLayout { @@ -144,6 +144,8 @@ AbstractButton { property bool isHovered: logInOutButton.hovered || logInOutButton.visualFocus property bool isActive: logInOutButton.pressed + palette.text: Style.sesDarkBlue + icon.source: Style.sesLogout icon.color: Style.sesIconDarkColor leftPadding: Style.sesMediumMargin @@ -190,6 +192,8 @@ AbstractButton { property bool isHovered: removeAccountButton.hovered || removeAccountButton.visualFocus property bool isActive: removeAccountButton.pressed + palette.text: Style.sesDarkBlue + id: removeAccountButton icon.source: Style.sesDelete icon.color: Style.sesIconDarkColor From e658f07d8443a05ea873281d4ff1f7f66aa5df8c Mon Sep 17 00:00:00 2001 From: Kevin Beraz Date: Wed, 14 May 2025 13:44:23 +0200 Subject: [PATCH 233/371] SES-375 updated diff files --- translation_scripts/de_DE.ts | 1167 ++++++++++++++++----------------- translation_scripts/en.ts | 1167 ++++++++++++++++----------------- translation_scripts/en_GB.ts | 1167 ++++++++++++++++----------------- translation_scripts/es.ts | 1169 ++++++++++++++++----------------- translation_scripts/fr.ts | 1172 ++++++++++++++++------------------ translation_scripts/it.ts | 577 +++++++++++++++++ translation_scripts/nl.ts | 1167 ++++++++++++++++----------------- 7 files changed, 3970 insertions(+), 3616 deletions(-) create mode 100644 translation_scripts/it.ts diff --git a/translation_scripts/de_DE.ts b/translation_scripts/de_DE.ts index bab6f711f3b27..50e9cd4da95ae 100644 --- a/translation_scripts/de_DE.ts +++ b/translation_scripts/de_DE.ts @@ -1,614 +1,577 @@ - - - - BasicComboBox - - Clear status message menu - Statusmeldungs-Menü löschen - - - - CallNotificationDialog - - Answer Talk call notification - Benachrichtigung zu Talk-Anruf beantworten - - - Decline Talk call notification - Benachrichtigung zu Talk-Anruf ablehnen - - - Talk notification caller avatar - Avatar zu Benachrichtigung über Talk-Anrufer - - - - CloudProviderWrapper - - Quit sync client - Leading Space in Translation geändert - Sync-Client beenden - - - - ConflictDelegate - - Local version - Lokale Version - - - Server version - Serverversion - - - - FileProviderFastEnumerationSettings - - Fast sync will only sync changes in files and folders within folders that have been explored. This can significantly increase responsiveness on initial configuration of virtual files. However, it will cause redundant downloads of files moved to an unexplored folder. - Trailing Space in Translation - Bei der schnellen Synchronisierung werden nur Änderungen an Dateien und Ordnern innerhalb der Ordner synchronisiert, die bereits untersucht wurden. Dies kann die Reaktionsfähigkeit bei der Ersteinrichtung virtueller Dateien erheblich erhöhen. Allerdings führt dies zu redundanten Downloads von Dateien, die in einen noch nicht erfassten Ordner verschoben wurden. - - - - FileProviderFileDelegate - - Delete - Löschen - - - - FileProviderSettings - - Signal file provider domain - Translated by us - Domain des Signaldateianbieters - - - - FileProviderStorageInfo - - Evict local copies... - Lokale Kopien entfernen... - - - - FileProviderSyncStatus - - All synced! - Alles synchronisiert! - - - - FolderWizardSelectiveSync - - Add Folder Sync - Added by us - Ordner Sync hinzufügen - - - Step 3 of 3: Selektive Synchronisation - Added by us - Schritt 3 von 3: Selektive Synchronisierung - - - - FolderWizardSourcePage - - &Choose - Added by us - &Wählen - - - Select a folder on your hard drive that should be permanetly connected to your %1. All files and subfolders are automatically uploaded and synchronized - Added by us - Wählen Sie einen Ordner auf Ihrer Festplatte, der dauerhaft mit Ihrem %1 verbunden sein soll. Alle Dateien und Unterordner werden automatisch hochgeladen und synchronisiert. - - - Step 1 of 3: Select local folder - Added by us - Schritt 1 von 3: Lokalen Ordner auswählen - - - - FolderWizardTargetPage - - Both folders are permanently linked and the respective contents are automatically synchronized and updated. - Added by us - Beide Ordner sind dauerhaft miteinander verknüpft und die jeweiligen Inhalte werden automatisch synchronisiert und aktualisiert. - - - Create folder - Removed trailing space in translation - Ordner erstellen - - - Please now select or create a target folder in your %1 where the content should be uploaded and synchronized. - Added by us - Bitte wählen oder erstellen Sie nun einen Zielordner in Ihrem %1, in den der Inhalt hochgeladen und synchronisiert werden soll. - - - Step 2 of 3: Directory in your %1 - Added by us - Schritt 2 von 3: Verzeichnis in Ihrem %1 - - - - OCC::AccountManager - - %1 accounts were detected from a legacy desktop client. + + + + + Agree + Zustimmen + + + Back + Zurück + + + Necessary data + Erforderliche Daten + + + Required to ensure that the software can be used as expected + Erforderlich, um sicherzustellen, dass die Software wie erwartet verwendet werden kann. + + + Save Settings + Einstellungen speichern + + + Send anonymous use + Anonyme Nutzungsdaten senden + + + Settings + Einstellungen + + + This application uses tracking technologies. By clicking on Agree, you accept the processing of your anonymized data. You can adjust your choices at any time via the settings. <br/> <br/>Information on data processing and more can be found in our <a href='https://wl.hidrive.com/easy/0005'>privacy policy</a>. + Diese Anwendung verwendet Tracking-Technologien. Wenn Sie auf Zustimmen klicken, akzeptieren Sie die Verarbeitung Ihrer anonymisierten Daten. Sie können Ihre Auswahl jederzeit über die Einstellungen anpassen. <br/> <br/>Informationen zur Datenverarbeitung und mehr finden Sie in unserer <a href='https://wl.hidrive.com/easy/0045'>Datenschutzrichtlinie</a>. + + + This helps us to optimize the software and to better identify system crashes and unexpected errors. + Dies hilft uns, die Software zu optimieren und Systemabstürze und unerwartete Fehler besser zu erkennen. + + + We collect anonymized data to optimize our app. We use software solutions from various partners for this purpose. We want to give you full transparency and freedom of choice regarding the collection and processing of your anonymized usage. You can change your settings at any time under the menu item Data Protection. + Wir sammeln anonymisierte Daten, um unsere App zu optimieren. Dazu nutzen wir Softwarelösungen von verschiedenen Partnern. Wir möchten Ihnen volle Transparenz und Wahlfreiheit bezüglich der Erhebung und Verarbeitung Ihrer anonymisierten Nutzung geben. Sie können Ihre Einstellungen jederzeit unter dem Menüpunkt Datenschutz ändern. + + + + BasicComboBox + + Clear status message menu + Statusmeldungs-Menü löschen + + + + CallNotificationDialog + + Answer Talk call notification + Benachrichtigung zu Talk-Anruf beantworten + + + Decline Talk call notification + Benachrichtigung zu Talk-Anruf ablehnen + + + Talk notification caller avatar + Avatar zu Benachrichtigung über Talk-Anrufer + + + + CloudProviderWrapper + + Quit sync client + Sync-Client beenden + + + + ConflictDelegate + + Local version + Lokale Version + + + Server version + Serverversion + + + + FileProviderFastEnumerationSettings + + Fast sync will only sync changes in files and folders within folders that have been explored. This can significantly increase responsiveness on initial configuration of virtual files. However, it will cause redundant downloads of files moved to an unexplored folder. + Bei der schnellen Synchronisierung werden nur Änderungen an Dateien und Ordnern innerhalb der Ordner synchronisiert, die bereits untersucht wurden. Dies kann die Reaktionsfähigkeit bei der Ersteinrichtung virtueller Dateien erheblich erhöhen. Allerdings führt dies zu redundanten Downloads von Dateien, die in einen noch nicht erfassten Ordner verschoben wurden. + + + + FileProviderFileDelegate + + Delete + Löschen + + + + FileProviderSettings + + Signal file provider domain + Domain des Signaldateianbieters + + + + FileProviderStorageInfo + + Evict local copies... + Lokale Kopien entfernen... + + + + FileProviderSyncStatus + + All synced! + Alles synchronisiert! + + + + FolderWizardSelectiveSync + + Add Folder Sync + Ordner Sync hinzufügen + + + Step 3 of 3: Selektive Synchronisation + Schritt 3 von 3: Selektive Synchronisierung + + + + FolderWizardSourcePage + + &Choose + &Wählen + + + Select a folder on your hard drive that should be permanetly connected to your %1. All files and subfolders are automatically uploaded and synchronized + Wählen Sie einen Ordner auf Ihrer Festplatte, der dauerhaft mit Ihrem %1 verbunden sein soll. Alle Dateien und Unterordner werden automatisch hochgeladen und synchronisiert. + + + Step 1 of 3: Select local folder + Schritt 1 von 3: Lokalen Ordner auswählen + + + + FolderWizardTargetPage + + Both folders are permanently linked and the respective contents are automatically synchronized and updated. + Beide Ordner sind dauerhaft miteinander verknüpft und die jeweiligen Inhalte werden automatisch synchronisiert und aktualisiert. + + + Create folder + Ordner erstellen + + + Please now select or create a target folder in your %1 where the content should be uploaded and synchronized. + Bitte wählen oder erstellen Sie nun einen Zielordner in Ihrem %1, in den der Inhalt hochgeladen und synchronisiert werden soll. + + + Step 2 of 3: Directory in your %1 + Schritt 2 von 3: Verzeichnis in Ihrem %1 + + + + OCC::AccountManager + + %1 accounts were detected from a legacy desktop client. Should the accounts be imported? - %1 Konten wurden von einem älteren Desktop-Client erkannt. + %1 Konten wurden von einem älteren Desktop-Client erkannt. Sollen die Konten importiert werden? - - - - OCC::AccountSettings - - %1 (%3%) of %2 in use. Some folders, including network mounted or shared folders, might have different limits. - Trailing Space in Translation - %1 (%3%) von %2 Serverkapazität verwendet. Einige Ordner, einschließlich über das Netzwerk verbundene oder geteilte Ordner, können unterschiedliche Beschränkungen aufweisen. - - - Expand Memory - Added by us - Speicher erweitern - - - Force sync now - Trailing Space in Translation - Synchronisierung jetzt erzwingen - - - Storage space %1% occupied - Added by us - Speicherplatz %1% belegt - - - There are folders that were not synchronized because they are external storages: - Trailing Space in Source - Es gibt Ordner, die nicht synchronisiert werden konnten, da sie externe Speicher sind: - - - There are folders that were not synchronized because they are too big or external storages: - Trailing Space in Source - Es gibt Ordner, die nicht synchronisiert werden konnten, da sie zu groß oder externe Speicher sind: - - - There are folders that were not synchronized because they are too big: - Trailing Space in Source - Einige Ordner konnten nicht synchronisiert werden, da sie zu groß sind: - - - This will encrypt your folder and all files within it. These files will no longer be accessible without your encryption mnemonic key. + + + + OCC::AccountSettings + + %1 (%3%) of %2 in use. Some folders, including network mounted or shared folders, might have different limits. + %1 (%3%) von %2 Serverkapazität verwendet. Einige Ordner, einschließlich über das Netzwerk verbundene oder geteilte Ordner, können unterschiedliche Beschränkungen aufweisen. + + + Expand Memory + Speicher erweitern + + + Force sync now + Synchronisierung jetzt erzwingen + + + https://wl.hidrive.com/easy/0057 + https://wl.hidrive.com/easy/0067 + + + Storage space %1% occupied + Speicherplatz %1% belegt + + + There are folders that were not synchronized because they are external storages: + Es gibt Ordner, die nicht synchronisiert werden konnten, da sie externe Speicher sind: + + + There are folders that were not synchronized because they are too big or external storages: + Es gibt Ordner, die nicht synchronisiert werden konnten, da sie zu groß oder externe Speicher sind: + + + There are folders that were not synchronized because they are too big: + Einige Ordner konnten nicht synchronisiert werden, da sie zu groß sind: + + + This will encrypt your folder and all files within it. These files will no longer be accessible without your encryption mnemonic key. <b>This process is not reversible. Are you sure you want to proceed?</b> - Modifed by us - Dadurch werden Ihr Ordner und alle darin enthaltenen Dateien verschlüsselt. Auf diese Dateien kann ohne Ihren mnemonischen Verschlüsselungsschlüssel nicht mehr zugegriffen werden. + Dadurch werden Ihr Ordner und alle darin enthaltenen Dateien verschlüsselt. Auf diese Dateien kann ohne Ihren mnemonischen Verschlüsselungsschlüssel nicht mehr zugegriffen werden. <b>Dies kann nicht rückgängig gemacht werden. Sind Sie sicher, dass Sie fortfahren möchten?</b> - - - To protect your Cryptographic Identity, we encrypt it with a mnemonic of 12 dictionary words. Please note these down and keep them safe. They will be needed to add other devices to your account (like your mobile phone or laptop). - Trailing Space in Translation - Um Ihre kryptografische Identität zu schützen, verschlüsseln wir sie mit einer Gedächtnisstütze von 12 Wörterbuchwörtern. Bitte notieren Sie sich diese und bewahren Sie sie auf. Sie werden benötigt, um Ihrem Konto weitere Geräte hinzuzufügen (z. B. Ihr Mobiltelefon oder Laptop). - - - https://wl.hidrive.com/easy/0057 - Added by us - https://wl.hidrive.com/easy/0067 - - - - OCC::CaseClashFilenameDialog - - Existing file - modifed by us french - Vorhandene Datei - - - The file could not be synced because it generates a case clash conflict with an existing file on this system. - modifed by us french - Die Datei konnte nicht synchronisiert werden, da diese einen Konflikt bezüglich Groß- und Kleinschreibung mit einer vorhandenen Datei auf diesem System erzeugt. - - - - OCC::DiscoverySingleDirectoryJob - - Encrypted metadata setup error! - added by us french - Einrichtungsfehler für verschlüsselte Metadaten! - - - Encrypted metadata setup error: initial signature from server is empty. - Translated by us - Fehler bei der Einrichtung der verschlüsselten Metadaten: Die ursprüngliche Signatur vom Server ist leer. - - - - OCC::Flow2AuthWidget - - Open Browser - Added by us - Im Browser öffnen - - - - OCC::Folder - - A folder from an external storage has been added. - Removed trailing linebreak - Ein Ordner von einem externen Speicher wurde hinzugefügt. - - - A large number of files in the server have been deleted. -Please confirm if you'd like to proceed with these deletions. -Alternatively, you can restore all deleted files by uploading from '%1' folder to the server. - Translated by us - Eine große Anzahl von Dateien wurde auf dem Server gelöscht. + + + To protect your Cryptographic Identity, we encrypt it with a mnemonic of 12 dictionary words. Please note these down and keep them safe. They will be needed to add other devices to your account (like your mobile phone or laptop). + Um Ihre kryptografische Identität zu schützen, verschlüsseln wir sie mit einer Gedächtnisstütze von 12 Wörterbuchwörtern. Bitte notieren Sie sich diese und bewahren Sie sie auf. Sie werden benötigt, um Ihrem Konto weitere Geräte hinzuzufügen (z. B. Ihr Mobiltelefon oder Laptop). + + + + OCC::CaseClashFilenameDialog + + Existing file + Vorhandene Datei + + + The file could not be synced because it generates a case clash conflict with an existing file on this system. + Die Datei konnte nicht synchronisiert werden, da diese einen Konflikt bezüglich Groß- und Kleinschreibung mit einer vorhandenen Datei auf diesem System erzeugt. + + + + OCC::DiscoverySingleDirectoryJob + + Encrypted metadata setup error: initial signature from server is empty. + Fehler bei der Einrichtung der verschlüsselten Metadaten: Die ursprüngliche Signatur vom Server ist leer. + + + Encrypted metadata setup error! + Einrichtungsfehler für verschlüsselte Metadaten! + + + + OCC::Flow2AuthWidget + + Open Browser + Im Browser öffnen + + + + OCC::Folder + + A folder from an external storage has been added. + Ein Ordner von einem externen Speicher wurde hinzugefügt. + + + A large number of files in the server have been deleted. +Please confirm if you'd like to proceed with these deletions. +Alternatively, you can restore all deleted files by uploading from '%1' folder to the server. + Eine große Anzahl von Dateien wurde auf dem Server gelöscht. Bitte bestätigen Sie, ob Sie mit diesen Löschungen fortfahren möchten. -Alternativ können Sie alle gelöschten Dateien wiederherstellen, indem Sie sie aus dem Ordner "%1" auf den Server hochladen. - - - A large number of files in your local '%1' folder have been deleted. -Please confirm if you'd like to proceed with these deletions. +Alternativ können Sie alle gelöschten Dateien wiederherstellen, indem Sie sie aus dem Ordner "%1" auf den Server hochladen.
          +
          + + A large number of files in your local '%1' folder have been deleted. +Please confirm if you'd like to proceed with these deletions. Alternatively, you can restore all deleted files by downloading them from the server. - Translated by us - Eine große Anzahl von Dateien in Ihrem lokalen Ordner "%1" wurde gelöscht. + Eine große Anzahl von Dateien in Ihrem lokalen Ordner "%1" wurde gelöscht. Bitte bestätigen Sie, ob Sie mit diesen Löschungen fortfahren möchten. Alternativ können Sie alle gelöschten Dateien wiederherstellen, indem Sie sie vom Server herunterladen. - - - A new folder larger than %1 MB has been added: %2. - Removed trailing linebreak - Ein neuer Ordner größer als %1 MB wurde hinzugefügt: %2. - - - Proceed with Deletion - Translated by us - Mit der Löschung fortfahren - - - Remove all files? - Translated by us - Alle Dateien entfernen? - - - Restore Files from Server - Translated by us - Dateien vom Server wiederherstellen - - - Restore Files to Server - Translated by us - Dateien auf dem Server wiederherstellen - -
          - - OCC::FolderCreationDialog - - %1 Create new folder - Added by us - %1 Neuen Ordner erstellen - - - - OCC::FolderMan - - (backup %1) - Removed leading space - (Sicherung %1) - - - (backup) - Removed leading space - (Sicherung) - - - - OCC::FolderStatusDelegate - - Synchronize any other local folder with your %1 - Added by us - Synchronisieren Sie jeden anderen lokalen Ordner mit Ihrem %1 - - - - OCC::FolderWizardLocalPath - - Choose - Added by us - Wählen Sie - - - - OCC::FolderWizardRemotePath - - Enter the name of the new folder to be created below "%1": - Removed trailing space - Geben Sie den Namen des neuen, unter "%1" zu erstellenden Ordners ein: - - - - OCC::FolderWizardSelectiveSync - - Use virtual files instead of downloading content immediately %1 - Virtuelle Dateien verwenden, anstatt den Inhalt sofort herunterzuladen %1 - - - - OCC::GeneralSettings - - &Analysis data collection for needs-based design - Added by us - &Analyse der Datenerhebung für bedarfsgerechte Gestaltung - - - Ask for confirmation before synchronizing external storages - Has to be repaired in code - Bestätigung erfragen, bevor externe Speicher synchronisiert werden - - - Ask for confirmation before synchronizing new folders larger than - Has to be repaired in code - Um eine Bestätigung bitten, bevor Sie neue Ordner synchronisieren, die größer sind als - - - Automatically disable synchronisation of folders that overcome limit - Has to be repaired in code - Automatisch die Synchronisierung von Ordnern beenden, die das Limit überschreiten - - - Data Protection - Added by us - Datenschutzbestimmungen - - - More Information - Added by us - Mehr Informationen - - - Open Source Software - Added by us - Open-Source-Software - - - Privacy Policy - Added by us - Datenschutzerklärung - - - Show sync folders in &Explorer's navigation pane - Synchronisierungsordner im Navigationsbereich des &Explorers anzeigen - - - Updates - Still used by us - Aktualisierungen - - - https://wl.hidrive.com/easy/0004 - https://wl.hidrive.com/easy/0004 - - - https://wl.hidrive.com/easy/0005 - https://wl.hidrive.com/easy/0005 - - - https://wl.hidrive.com/easy/0006 - https://wl.hidrive.com/easy/0006 - - - https://wl.hidrive.com/easy/0007 - https://wl.hidrive.com/easy/0007 - - - - OCC::IgnoreListTableWidget - - Add a new ignore pattern: - modifed by us spanish - Neues Ignoriermuster hinzufügen - - - Files or folders matching a pattern will not be synchronized. + + + A new folder larger than %1 MB has been added: %2. + Ein neuer Ordner größer als %1 MB wurde hinzugefügt: %2. + + + Proceed with Deletion + Mit der Löschung fortfahren + + + Remove all files? + Alle Dateien entfernen? + + + Restore Files from Server + Dateien vom Server wiederherstellen + + + Restore Files to Server + Dateien auf dem Server wiederherstellen + + + + OCC::FolderCreationDialog + + %1 Create new folder + %1 Neuen Ordner erstellen + + + + OCC::FolderMan + + (backup %1) + (Sicherung %1) + + + (backup) + (Sicherung) + + + + OCC::FolderStatusDelegate + + Synchronize any other local folder with your %1 + Synchronisieren Sie jeden anderen lokalen Ordner mit Ihrem %1 + + + + OCC::FolderWizardLocalPath + + Choose + Wählen Sie + + + + OCC::FolderWizardRemotePath + + Enter the name of the new folder to be created below "%1": + Geben Sie den Namen des neuen, unter "%1" zu erstellenden Ordners ein: + + + + OCC::FolderWizardSelectiveSync + + Use virtual files instead of downloading content immediately %1 + Virtuelle Dateien verwenden, anstatt den Inhalt sofort herunterzuladen %1 + + + + OCC::GeneralSettings + + &Analysis data collection for needs-based design + &Analyse der Datenerhebung für bedarfsgerechte Gestaltung + + + Ask for confirmation before synchronizing external storages + Bestätigung erfragen, bevor externe Speicher synchronisiert werden + + + Ask for confirmation before synchronizing new folders larger than + Um eine Bestätigung bitten, bevor Sie neue Ordner synchronisieren, die größer sind als + + + Automatically disable synchronisation of folders that overcome limit + Automatisch die Synchronisierung von Ordnern beenden, die das Limit überschreiten + + + Data Protection + Datenschutzbestimmungen + + + https://wl.hidrive.com/easy/0004 + https://wl.hidrive.com/easy/0044 + + + https://wl.hidrive.com/easy/0005 + https://wl.hidrive.com/easy/0045 + + + https://wl.hidrive.com/easy/0006 + https://wl.hidrive.com/easy/0006 + + + https://wl.hidrive.com/easy/0007 + https://wl.hidrive.com/easy/0047 + + + More Information + Mehr Informationen + + + Open Source Software + Open-Source-Software + + + Privacy Policy + Datenschutzerklärung + + + Show sync folders in &Explorer's navigation pane + Synchronisierungsordner im Navigationsbereich des &Explorers anzeigen + + + Updates + Aktualisierungen + + + + OCC::IgnoreListTableWidget + + Add a new ignore pattern: + Neues Ignoriermuster hinzufügen + + + Files or folders matching a pattern will not be synchronized. Items where deletion is allowed will be deleted if they prevent a directory from being removed. This is useful for meta data. - Modifed by us spanish - Dateien oder Ordner, die diesem Muster entsprechen, werden nicht synchronisiert. + Dateien oder Ordner, die diesem Muster entsprechen, werden nicht synchronisiert. Objekte, die gelöscht werden dürfen, werden gelöscht, wenn sie das Löschen eines Ordners verhindern würden. Dies ist nützlich für Metadaten. - - - Ignore Pattern - Added by us - Muster ignorieren - - - - OCC::NetworkSettings - - No proxy - Kein Proxy - - - - OCC::PropagateLocalMkdir - - Could not create folder %1 - Trailing space in translation removed - Ordner %1 konnte nicht erstellt werden - - - - OCC::PropagateLocalRename - - Folder %1 cannot be renamed because of a local file or folder name clash! - Translated by us - Ordner %1 kann nicht umbenannt werden, da ein Konflikt zwischen lokalen Datei- oder Ordnernamen besteht! - - - - OCC::PropagateUploadFileCommon - - Upload of %1 exceeds the quota for the folder - Trailing space in translation removed - Das Hochladen von %1 überschreitet das Speicherkontingent des Ordners - - - - OCC::sesSnackBar - - Success - Added by us - Erfolg - - - - OCC::SettingsDialog - - New account - Added by us - Neues Konto - - - - OCC::SslButton - - This connection is NOT secure as it is not encrypted. - Removed trailing linebreak - Diese Verbindung ist NICHT sicher, da diese nicht verschlüsselt ist. - - - This connection is encrypted using %1 bit %2. - Removed trailing linebreak - Diese Verbindung ist verschlüsselt mit %1 Bit %2. - - - - OCC::Theme - - easy/0118 - Added by us - easy/0108 - - - - OCC::UpdateE2eeFolderMetadataJob - - Failed to finalize item. - Modifed by us - Fehler beim Fertigstellen des Elements. - - - Failed to unlock encrypted folder. - Modifed by us - Verschlüsselter Ordner konnte nicht entsperrt werden. - - - - OCC::UpdateE2eeFolderUsersMetadataJob - - Could not add or remove user %1 to access folder %2 - Translated by us - Benutzer %1 konnte nicht zum Zugriffsordner %2 hinzugefügt oder entfernt werden - - - - OCC::User - - %1 notifications - Translated by us - %1 Benachrichtigungen - - - - OCC::WebFlowCredentials - - <b>You have been logged out of your account %1 at %2. Please login again.</b> - Modifed by us - <b>Sie wurden von Ihrem Konto %1 bei %2 abgemeldet. Bitte melden Sie sich erneut an.</b> - - - - OwncloudAdvancedSetupPage - - <html><head/><body><p>If this box is checked, existing content in the local folder will be erased to start a clean sync from the server.</p><p>Do not check this if the local content should be uploaded to the servers folder.</p></body></html> - Modifed by us - <html><head/><body><p>Wenn diese Option gesetzt ist, werden bestehende Inhalte im lokalen Ordner gelöscht, um eine saubere Synchronisierung nur der Serverdaten zu ermöglichen.</p><p>Wählen Sie diese Option nicht, wenn die lokalen Inhalte auf den Server übertragen werden sollen.</p></body></html> - - - - progress - - Updated local virtual files metadata - Translated by us - Aktualisierte Metadaten für lokale virtuelle Dateien - - - updating local virtual files metadata - Translated by us - Aktualisierung der Metadaten lokaler virtueller Dateien - - - - QObject - - Could not create debug archive in selected location! - Translated by us - Es konnte kein Debug-Archiv am ausgewählten Ort erstellt werden! - - - Failed to create debug archive - Translated by us - Fehler beim Erstellen des Debug-Archivs - - - The directory %1 cannot be part of your sync directory. Please choose another folder. - Added by us - Das Verzeichnis %1 kann nicht Teil Ihres Synchronisationsverzeichnisses sein. Bitte wählen Sie einen anderen Ordner. - - - - SesTrayHeader - - Open Nextcloud in browser - Added by us - HiDrive Next im Browser öffnen - - - Website - Added by us - Website - - - - ShareDetailsPage - - Copy share link - modifed by us - Freigabe-Link kopieren - - - Custom Permissions - Added by us - Benutzerdefinierte Berechtigungen - - - Enter the note to recipient - Added by us - Geben Sie eine Notiz an den Empfänger ein - - - Share link copied! - modifed by us - Freigabelink kopiert! - - - - TrayFoldersMenuButton - - Files - Added by us - Dateien - - - \ No newline at end of file +
          + + Ignore Pattern + Muster ignorieren + +
          + + OCC::NetworkSettings + + No proxy + Kein Proxy + + + + OCC::PropagateLocalMkdir + + Could not create folder %1 + Ordner %1 konnte nicht erstellt werden + + + + OCC::PropagateLocalRename + + Folder %1 cannot be renamed because of a local file or folder name clash! + Ordner %1 kann nicht umbenannt werden, da ein Konflikt zwischen lokalen Datei- oder Ordnernamen besteht! + + + + OCC::PropagateUploadFileCommon + + Upload of %1 exceeds the quota for the folder + Das Hochladen von %1 überschreitet das Speicherkontingent des Ordners + + + + OCC::SettingsDialog + + New account + Neues Konto + + + + OCC::SslButton + + This connection is encrypted using %1 bit %2. + Diese Verbindung ist verschlüsselt mit %1 Bit %2. + + + This connection is NOT secure as it is not encrypted. + Diese Verbindung ist NICHT sicher, da diese nicht verschlüsselt ist. + + + + OCC::Theme + + easy/0118 + easy/0148 + + + + OCC::UpdateE2eeFolderMetadataJob + + Failed to finalize item. + Fehler beim Fertigstellen des Elements. + + + Failed to unlock encrypted folder. + Verschlüsselter Ordner konnte nicht entsperrt werden. + + + + OCC::UpdateE2eeFolderUsersMetadataJob + + Could not add or remove user %1 to access folder %2 + Benutzer %1 konnte nicht zum Zugriffsordner %2 hinzugefügt oder entfernt werden + + + + OCC::User + + %1 notifications + %1 Benachrichtigungen + + + + OCC::WebFlowCredentials + + <b>You have been logged out of your account %1 at %2. Please login again.</b> + <b>Sie wurden von Ihrem Konto %1 bei %2 abgemeldet. Bitte melden Sie sich erneut an.</b> + + + + OCC::sesSnackBar + + Success + Erfolg + + + + OwncloudAdvancedSetupPage + + <html><head/><body><p>If this box is checked, existing content in the local folder will be erased to start a clean sync from the server.</p><p>Do not check this if the local content should be uploaded to the servers folder.</p></body></html> + <html><head/><body><p>Wenn diese Option gesetzt ist, werden bestehende Inhalte im lokalen Ordner gelöscht, um eine saubere Synchronisierung nur der Serverdaten zu ermöglichen.</p><p>Wählen Sie diese Option nicht, wenn die lokalen Inhalte auf den Server übertragen werden sollen.</p></body></html> + + + + QObject + + Could not create debug archive in selected location! + Es konnte kein Debug-Archiv am ausgewählten Ort erstellt werden! + + + Failed to create debug archive + Fehler beim Erstellen des Debug-Archivs + + + The directory %1 cannot be part of your sync directory. Please choose another folder. + Das Verzeichnis %1 kann nicht Teil Ihres Synchronisationsverzeichnisses sein. Bitte wählen Sie einen anderen Ordner. + + + + SesTrayHeader + + Open Nextcloud in browser + HiDrive Next im Browser öffnen + + + Website + Website + + + + ShareDetailsPage + + Copy share link + Freigabe-Link kopieren + + + Custom Permissions + Benutzerdefinierte Berechtigungen + + + Enter the note to recipient + Geben Sie eine Notiz an den Empfänger ein + + + Share link copied! + Freigabelink kopiert! + + + + TrayFoldersMenuButton + + Files + Dateien + + + + progress + + Updated local virtual files metadata + Aktualisierte Metadaten für lokale virtuelle Dateien + + + updating local virtual files metadata + Aktualisierung der Metadaten lokaler virtueller Dateien + + + diff --git a/translation_scripts/en.ts b/translation_scripts/en.ts index fb73efe9de199..bff748820cff3 100644 --- a/translation_scripts/en.ts +++ b/translation_scripts/en.ts @@ -1,614 +1,577 @@ - - - - BasicComboBox - - Clear status message menu - Delete status message menu - - - - CallNotificationDialog - - Answer Talk call notification - Answer Talk call notification - - - Decline Talk call notification - Decline Talk call notification - - - Talk notification caller avatar - Talk notification caller avatar - - - - CloudProviderWrapper - - Quit sync client - Leading Space in Translation geändert - Quit sync client - - - - ConflictDelegate - - Local version - Local version - - - Server version - Server version - - - - FileProviderFastEnumerationSettings - - Fast sync will only sync changes in files and folders within folders that have been explored. This can significantly increase responsiveness on initial configuration of virtual files. However, it will cause redundant downloads of files moved to an unexplored folder. - Trailing Space in Translation - Fast sync will only sync changes in files and folders within folders that have been explored. This can significantly increase responsiveness on initial configuration of virtual files. However, it will cause redundant downloads of files moved to an unexplored folder. - - - - FileProviderFileDelegate - - Delete - Delete - - - - FileProviderSettings - - Signal file provider domain - Translated by us - Signal file provider domain - - - - FileProviderStorageInfo - - Evict local copies... - Evict local copies... - - - - FileProviderSyncStatus - - All synced! - All synced! - - - - FolderWizardSelectiveSync - - Add Folder Sync - Added by us - Add Folder Sync - - - Step 3 of 3: Selektive Synchronisation - Added by us - Step 3 of 3: Selektive Synchronisation - - - - FolderWizardSourcePage - - &Choose - Added by us - &Choose - - - Select a folder on your hard drive that should be permanetly connected to your %1. All files and subfolders are automatically uploaded and synchronized - Added by us - Select a folder on your hard drive that should be permanetly connected to your %1. All files and subfolders are automatically uploaded and synchronized. - - - Step 1 of 3: Select local folder - Added by us - Step 1 of 3: Select local folder - - - - FolderWizardTargetPage - - Both folders are permanently linked and the respective contents are automatically synchronized and updated. - Added by us - Both folders are permanently linked and the respective contents are automatically synchronized and updated. - - - Create folder - Removed trailing space in translation - Create folder - - - Please now select or create a target folder in your %1 where the content should be uploaded and synchronized. - Added by us - Please now select or create a target folder in your %1 where the content should be uploaded and synchronized. - - - Step 2 of 3: Directory in your %1 - Added by us - Step 2 of 3: Directory in your %1 - - - - OCC::AccountManager - - %1 accounts were detected from a legacy desktop client. + + + + + Agree + Agree + + + Back + Back + + + Necessary data + Necessary data + + + Required to ensure that the software can be used as expected + Required to ensure that the software can be used as expected + + + Save Settings + Save Settings + + + Send anonymous use + Send anonymous use + + + Settings + Settings + + + This application uses tracking technologies. By clicking on Agree, you accept the processing of your anonymized data. You can adjust your choices at any time via the settings. <br/> <br/>Information on data processing and more can be found in our <a href='https://wl.hidrive.com/easy/0005'>privacy policy</a>. + This application uses tracking technologies. By clicking on Agree, you accept the processing of your anonymized data. You can adjust your choices at any time via the settings. <br/> <br/>Information on data processing and more can be found in our <a href='https://wl.hidrive.com/easy/0005'>privacy policy</a>. + + + This helps us to optimize the software and to better identify system crashes and unexpected errors. + This helps us to optimize the software and to better identify system crashes and unexpected errors. + + + We collect anonymized data to optimize our app. We use software solutions from various partners for this purpose. We want to give you full transparency and freedom of choice regarding the collection and processing of your anonymized usage. You can change your settings at any time under the menu item Data Protection. + We collect anonymized data to optimize our app. We use software solutions from various partners for this purpose. We want to give you full transparency and freedom of choice regarding the collection and processing of your anonymized usage. You can change your settings at any time under the menu item Data Protection. + + + + BasicComboBox + + Clear status message menu + Delete status message menu + + + + CallNotificationDialog + + Answer Talk call notification + Answer Talk call notification + + + Decline Talk call notification + Decline Talk call notification + + + Talk notification caller avatar + Talk notification caller avatar + + + + CloudProviderWrapper + + Quit sync client + Quit sync client + + + + ConflictDelegate + + Local version + Local version + + + Server version + Server version + + + + FileProviderFastEnumerationSettings + + Fast sync will only sync changes in files and folders within folders that have been explored. This can significantly increase responsiveness on initial configuration of virtual files. However, it will cause redundant downloads of files moved to an unexplored folder. + Fast sync will only sync changes in files and folders within folders that have been explored. This can significantly increase responsiveness on initial configuration of virtual files. However, it will cause redundant downloads of files moved to an unexplored folder. + + + + FileProviderFileDelegate + + Delete + Delete + + + + FileProviderSettings + + Signal file provider domain + Signal file provider domain + + + + FileProviderStorageInfo + + Evict local copies... + Evict local copies... + + + + FileProviderSyncStatus + + All synced! + All synced! + + + + FolderWizardSelectiveSync + + Add Folder Sync + Add Folder Sync + + + Step 3 of 3: Selektive Synchronisation + Step 3 of 3: Selective Synchronisation + + + + FolderWizardSourcePage + + &Choose + &Choose + + + Select a folder on your hard drive that should be permanetly connected to your %1. All files and subfolders are automatically uploaded and synchronized + Select a folder on your hard drive that should be permanetly connected to your %1. All files and subfolders are automatically uploaded and synchronized. + + + Step 1 of 3: Select local folder + Step 1 of 3: Select local folder + + + + FolderWizardTargetPage + + Both folders are permanently linked and the respective contents are automatically synchronized and updated. + Both folders are permanently linked and the respective contents are automatically synchronized and updated. + + + Create folder + Create folder + + + Please now select or create a target folder in your %1 where the content should be uploaded and synchronized. + Please now select or create a target folder in your %1 where the content should be uploaded and synchronized. + + + Step 2 of 3: Directory in your %1 + Step 2 of 3: Directory in your %1 + + + + OCC::AccountManager + + %1 accounts were detected from a legacy desktop client. Should the accounts be imported? - %1 accounts were detected from a legacy desktop client. + %1 accounts were detected from a legacy desktop client. Should the accounts be imported? - - - - OCC::AccountSettings - - %1 (%3%) of %2 in use. Some folders, including network mounted or shared folders, might have different limits. - Trailing Space in Translation - %1 (%3%) of %2 in use. Some folders, including network mounted or shared folders, might have different limits. - - - Expand Memory - Added by us - Expand Memory - - - Force sync now - Trailing Space in Translation - Force sync now - - - Storage space %1% occupied - Added by us - Storage space %1% occupied - - - There are folders that were not synchronized because they are external storages: - Trailing Space in Source - There are folders that were not synchronised because they are external storages: - - - There are folders that were not synchronized because they are too big or external storages: - Trailing Space in Source - There are folders that were not synchronised because they are too big or external storages: - - - There are folders that were not synchronized because they are too big: - Trailing Space in Source - There are folders that were not synchronised because they are too big: - - - This will encrypt your folder and all files within it. These files will no longer be accessible without your encryption mnemonic key. + + + + OCC::AccountSettings + + %1 (%3%) of %2 in use. Some folders, including network mounted or shared folders, might have different limits. + %1 (%3%) of %2 in use. Some folders, including network mounted or shared folders, might have different limits. + + + Expand Memory + Expand Memory + + + Force sync now + Force sync now + + + https://wl.hidrive.com/easy/0057 + https://wl.hidrive.com/easy/0077 + + + Storage space %1% occupied + Storage space %1% occupied + + + There are folders that were not synchronized because they are external storages: + There are folders that were not synchronised because they are external storages: + + + There are folders that were not synchronized because they are too big or external storages: + There are folders that were not synchronised because they are too big or external storages: + + + There are folders that were not synchronized because they are too big: + There are folders that were not synchronised because they are too big: + + + This will encrypt your folder and all files within it. These files will no longer be accessible without your encryption mnemonic key. <b>This process is not reversible. Are you sure you want to proceed?</b> - Modifed by us - This will encrypt your folder and all files within it. These files will no longer be accessible without your encryption mnemonic key. + This will encrypt your folder and all files within it. These files will no longer be accessible without your encryption mnemonic key. <b>This process is not reversible. Are you sure you want to proceed?</b> - - - To protect your Cryptographic Identity, we encrypt it with a mnemonic of 12 dictionary words. Please note these down and keep them safe. They will be needed to add other devices to your account (like your mobile phone or laptop). - Trailing Space in Translation - To protect your Cryptographic Identity, we encrypt it with a mnemonic of 12 dictionary words. Please note these down and keep them safe. They will be needed to add other devices to your account (like your mobile phone or laptop). - - - https://wl.hidrive.com/easy/0057 - Added by us - https://wl.hidrive.com/easy/0077 - - - - OCC::CaseClashFilenameDialog - - Existing file - modifed by us french - Existing file - - - The file could not be synced because it generates a case clash conflict with an existing file on this system. - modifed by us french - The file could not be synced because it generates a case clash conflict with an existing file on this system. - - - - OCC::DiscoverySingleDirectoryJob - - Encrypted metadata setup error! - added by us french - Encrypted metadata setup error! - - - Encrypted metadata setup error: initial signature from server is empty. - Translated by us - Encrypted metadata setup error: initial signature from server is empty. - - - - OCC::Flow2AuthWidget - - Open Browser - Added by us - Open Browser - - - - OCC::Folder - - A folder from an external storage has been added. - Removed trailing linebreak - A folder from an external storage has been added. - - - A large number of files in the server have been deleted. -Please confirm if you'd like to proceed with these deletions. -Alternatively, you can restore all deleted files by uploading from '%1' folder to the server. - Translated by us - Eine große Anzahl von Dateien wurde auf dem Server gelöscht. + + + To protect your Cryptographic Identity, we encrypt it with a mnemonic of 12 dictionary words. Please note these down and keep them safe. They will be needed to add other devices to your account (like your mobile phone or laptop). + To protect your Cryptographic Identity, we encrypt it with a mnemonic of 12 dictionary words. Please note these down and keep them safe. They will be needed to add other devices to your account (like your mobile phone or laptop). + + + + OCC::CaseClashFilenameDialog + + Existing file + Existing file + + + The file could not be synced because it generates a case clash conflict with an existing file on this system. + The file could not be synced because it generates a case clash conflict with an existing file on this system. + + + + OCC::DiscoverySingleDirectoryJob + + Encrypted metadata setup error: initial signature from server is empty. + Encrypted metadata setup error: initial signature from server is empty. + + + Encrypted metadata setup error! + Encrypted metadata setup error! + + + + OCC::Flow2AuthWidget + + Open Browser + Open Browser + + + + OCC::Folder + + A folder from an external storage has been added. + A folder from an external storage has been added. + + + A large number of files in the server have been deleted. +Please confirm if you'd like to proceed with these deletions. +Alternatively, you can restore all deleted files by uploading from '%1' folder to the server. + Eine große Anzahl von Dateien wurde auf dem Server gelöscht. Bitte bestätigen Sie, ob Sie mit diesen Löschungen fortfahren möchten. -Alternativ können Sie alle gelöschten Dateien wiederherstellen, indem Sie sie aus dem Ordner "%1" auf den Server hochladen. - - - A large number of files in your local '%1' folder have been deleted. -Please confirm if you'd like to proceed with these deletions. +Alternativ können Sie alle gelöschten Dateien wiederherstellen, indem Sie sie aus dem Ordner "%1" auf den Server hochladen.
          + + + A large number of files in your local '%1' folder have been deleted. +Please confirm if you'd like to proceed with these deletions. Alternatively, you can restore all deleted files by downloading them from the server. - Translated by us - Eine große Anzahl von Dateien in Ihrem lokalen Ordner "%1" wurde gelöscht. + Eine große Anzahl von Dateien in Ihrem lokalen Ordner "%1" wurde gelöscht. Bitte bestätigen Sie, ob Sie mit diesen Löschungen fortfahren möchten. Alternativ können Sie alle gelöschten Dateien wiederherstellen, indem Sie sie vom Server herunterladen. - - - A new folder larger than %1 MB has been added: %2. - Removed trailing linebreak - A new folder larger than %1 MB has been added: %2. - - - Proceed with Deletion - Translated by us - Proceed with deletion - - - Remove all files? - Translated by us - Remove all files? - - - Restore Files from Server - Translated by us - Restore files from server - - - Restore Files to Server - Translated by us - Restore files to server - - - - OCC::FolderCreationDialog - - %1 Create new folder - Added by us - %1 Create new folder - - - - OCC::FolderMan - - (backup %1) - Removed leading space - (backup %1) - - - (backup) - Removed leading space - (backup) - - - - OCC::FolderStatusDelegate - - Synchronize any other local folder with your %1 - Added by us - Synchronize any other local folder with your %1 - - - - OCC::FolderWizardLocalPath - - Choose - Added by us - Choose - - - - OCC::FolderWizardRemotePath - - Enter the name of the new folder to be created below "%1": - Removed trailing space - Enter the name of the new folder to be created below "%1": - - - - OCC::FolderWizardSelectiveSync - - Use virtual files instead of downloading content immediately %1 - Use virtual files instead of downloading content immediately %1 - - - - OCC::GeneralSettings - - &Analysis data collection for needs-based design - Added by us - &Analysis data collection for needs-based design - - - Ask for confirmation before synchronizing external storages - Has to be repaired in code - Ask for confirmation before synchronizing external storages - - - Ask for confirmation before synchronizing new folders larger than - Has to be repaired in code - Ask for confirmation before synchronizing new folders larger than - - - Automatically disable synchronisation of folders that overcome limit - Has to be repaired in code - Automatically disable synchronisation of folders that overcome limit - - - Data Protection - Added by us - Data Protection - - - More Information - Added by us - More Information - - - Open Source Software - Added by us - Open Source Software - - - Privacy Policy - Added by us - Privacy Policy - - - Show sync folders in &Explorer's navigation pane - Show sync folders in &Explorer's navigation pane - - - Updates - Still used by us - Updates - - - https://wl.hidrive.com/easy/0004 - https://wl.hidrive.com/easy/0004 - - - https://wl.hidrive.com/easy/0005 - https://wl.hidrive.com/easy/0005 - - - https://wl.hidrive.com/easy/0006 - https://wl.hidrive.com/easy/0006 - - - https://wl.hidrive.com/easy/0007 - https://wl.hidrive.com/easy/0007 - - - - OCC::IgnoreListTableWidget - - Add a new ignore pattern: - modifed by us spanish - Add a new ignore pattern: - - - Files or folders matching a pattern will not be synchronized. + + + A new folder larger than %1 MB has been added: %2. + A new folder larger than %1 MB has been added: %2. + + + Proceed with Deletion + Proceed with deletion + + + Remove all files? + Remove all files? + + + Restore Files from Server + Restore files from server + + + Restore Files to Server + Restore files to server + + + + OCC::FolderCreationDialog + + %1 Create new folder + %1 Create new folder + + + + OCC::FolderMan + + (backup %1) + (backup %1) + + + (backup) + (backup) + + + + OCC::FolderStatusDelegate + + Synchronize any other local folder with your %1 + Synchronize any other local folder with your %1 + + + + OCC::FolderWizardLocalPath + + Choose + Choose + + + + OCC::FolderWizardRemotePath + + Enter the name of the new folder to be created below "%1": + Enter the name of the new folder to be created below "%1": + + + + OCC::FolderWizardSelectiveSync + + Use virtual files instead of downloading content immediately %1 + Use virtual files instead of downloading content immediately %1 + + + + OCC::GeneralSettings + + &Analysis data collection for needs-based design + &Analysis data collection for needs-based design + + + Ask for confirmation before synchronizing external storages + Ask for confirmation before synchronizing external storages + + + Ask for confirmation before synchronizing new folders larger than + Ask for confirmation before synchronizing new folders larger than + + + Automatically disable synchronisation of folders that overcome limit + Automatically disable synchronisation of folders that overcome limit + + + Data Protection + Data Protection + + + https://wl.hidrive.com/easy/0004 + https://wl.hidrive.com/easy/0004 + + + https://wl.hidrive.com/easy/0005 + https://wl.hidrive.com/easy/0005 + + + https://wl.hidrive.com/easy/0006 + https://wl.hidrive.com/easy/0006 + + + https://wl.hidrive.com/easy/0007 + https://wl.hidrive.com/easy/0007 + + + More Information + More Information + + + Open Source Software + Open Source Software + + + Privacy Policy + Privacy Policy + + + Show sync folders in &Explorer's navigation pane + Show sync folders in &Explorer's navigation pane + + + Updates + Updates + + + + OCC::IgnoreListTableWidget + + Add a new ignore pattern: + Add a new ignore pattern: + + + Files or folders matching a pattern will not be synchronized. Items where deletion is allowed will be deleted if they prevent a directory from being removed. This is useful for meta data. - Modifed by us spanish - Files or folders matching a pattern will not be synchronized. + Files or folders matching a pattern will not be synchronized. Items where deletion is allowed will be deleted if they prevent a directory from being removed. This is useful for meta data. - - - Ignore Pattern - Added by us - Ignore Pattern - - - - OCC::NetworkSettings - - No proxy - No proxy - - - - OCC::PropagateLocalMkdir - - Could not create folder %1 - Trailing space in translation removed - Could not create folder %1 - - - - OCC::PropagateLocalRename - - Folder %1 cannot be renamed because of a local file or folder name clash! - Translated by us - Folder %1 cannot be renamed because of a local file or folder name clash! - - - - OCC::PropagateUploadFileCommon - - Upload of %1 exceeds the quota for the folder - Trailing space in translation removed - Upload of %1 exceeds the quota for the folder - - - - OCC::sesSnackBar - - Success - Added by us - Success - - - - OCC::SettingsDialog - - New account - Added by us - New Account - - - - OCC::SslButton - - This connection is NOT secure as it is not encrypted. - Removed trailing linebreak - This connection is NOT secure as it is not encrypted. - - - This connection is encrypted using %1 bit %2. - Removed trailing linebreak - This connection is encrypted using %1 bit %2. - - - - OCC::Theme - - easy/0118 - Added by us - - - - - OCC::UpdateE2eeFolderMetadataJob - - Failed to finalize item. - Modifed by us - Failed to finalize item. - - - Failed to unlock encrypted folder. - Modifed by us - Failed to unlock encrypted folder. - - - - OCC::UpdateE2eeFolderUsersMetadataJob - - Could not add or remove user %1 to access folder %2 - Translated by us - Could not add or remove user %1 to access folder %2 - - - - OCC::User - - %1 notifications - Translated by us - %1 notifications - - - - OCC::WebFlowCredentials - - <b>You have been logged out of your account %1 at %2. Please login again.</b> - Modifed by us - <b>You have been logged out of your account %1 at %2. Please login again.</b> - - - - OwncloudAdvancedSetupPage - - <html><head/><body><p>If this box is checked, existing content in the local folder will be erased to start a clean sync from the server.</p><p>Do not check this if the local content should be uploaded to the servers folder.</p></body></html> - Modifed by us - <html><head/><body><p>If this box is checked, existing content in the local folder will be erased to start a clean sync from the server.</p><p>Do not check this if the local content should be uploaded to the servers folder.</p></body></html> - - - - progress - - Updated local virtual files metadata - Translated by us - Updated local virtual files metadata - - - updating local virtual files metadata - Translated by us - Updating local virtual files metadata - - - - QObject - - Could not create debug archive in selected location! - Translated by us - Could not create debug archive in selected location! - - - Failed to create debug archive - Translated by us - Failed to create debug archive - - - The directory %1 cannot be part of your sync directory. Please choose another folder. - Added by us - The directory %1 cannot be part of your sync directory. Please choose another folder. - - - - SesTrayHeader - - Open Nextcloud in browser - Added by us - Open HiDrive Next in browser - - - Website - Added by us - Website - - - - ShareDetailsPage - - Copy share link - modifed by us - Copy share link - - - Custom Permissions - Added by us - Custom Permissions - - - Enter the note to recipient - Added by us - Enter the note to recipient - - - Share link copied! - modifed by us - Share link copied! - - - - TrayFoldersMenuButton - - Files - Added by us - Files - - - \ No newline at end of file + + + Ignore Pattern + Ignore Pattern + + + + OCC::NetworkSettings + + No proxy + No proxy + + + + OCC::PropagateLocalMkdir + + Could not create folder %1 + Could not create folder %1 + + + + OCC::PropagateLocalRename + + Folder %1 cannot be renamed because of a local file or folder name clash! + Folder %1 cannot be renamed because of a local file or folder name clash! + + + + OCC::PropagateUploadFileCommon + + Upload of %1 exceeds the quota for the folder + Upload of %1 exceeds the quota for the folder + + + + OCC::SettingsDialog + + New account + New Account + + + + OCC::SslButton + + This connection is encrypted using %1 bit %2. + This connection is encrypted using %1 bit %2. + + + This connection is NOT secure as it is not encrypted. + This connection is NOT secure as it is not encrypted. + + + + OCC::Theme + + easy/0118 + easy/0108 + + + + OCC::UpdateE2eeFolderMetadataJob + + Failed to finalize item. + Failed to finalize item. + + + Failed to unlock encrypted folder. + Failed to unlock encrypted folder. + + + + OCC::UpdateE2eeFolderUsersMetadataJob + + Could not add or remove user %1 to access folder %2 + Could not add or remove user %1 to access folder %2 + + + + OCC::User + + %1 notifications + %1 notifications + + + + OCC::WebFlowCredentials + + <b>You have been logged out of your account %1 at %2. Please login again.</b> + <b>You have been logged out of your account %1 at %2. Please login again.</b> + + + + OCC::sesSnackBar + + Success + Success + + + + OwncloudAdvancedSetupPage + + <html><head/><body><p>If this box is checked, existing content in the local folder will be erased to start a clean sync from the server.</p><p>Do not check this if the local content should be uploaded to the servers folder.</p></body></html> + <html><head/><body><p>If this box is checked, existing content in the local folder will be erased to start a clean sync from the server.</p><p>Do not check this if the local content should be uploaded to the servers folder.</p></body></html> + + + + QObject + + Could not create debug archive in selected location! + Could not create debug archive in selected location! + + + Failed to create debug archive + Failed to create debug archive + + + The directory %1 cannot be part of your sync directory. Please choose another folder. + The directory %1 cannot be part of your sync directory. Please choose another folder. + + + + SesTrayHeader + + Open Nextcloud in browser + Open HiDrive Next in browser + + + Website + Website + + + + ShareDetailsPage + + Copy share link + Copy share link + + + Custom Permissions + Custom Permissions + + + Enter the note to recipient + Enter the note to recipient + + + Share link copied! + Share link copied! + + + + TrayFoldersMenuButton + + Files + Files + + + + progress + + Updated local virtual files metadata + Updated local virtual files metadata + + + updating local virtual files metadata + Updating local virtual files metadata + + + diff --git a/translation_scripts/en_GB.ts b/translation_scripts/en_GB.ts index ad55de9624e0d..ba8ee5486eb62 100644 --- a/translation_scripts/en_GB.ts +++ b/translation_scripts/en_GB.ts @@ -1,614 +1,577 @@ - - - - BasicComboBox - - Clear status message menu - Delete status message menu - - - - CallNotificationDialog - - Answer Talk call notification - Answer Talk call notification - - - Decline Talk call notification - Decline Talk call notification - - - Talk notification caller avatar - Talk notification caller avatar - - - - CloudProviderWrapper - - Quit sync client - Leading Space in Translation geändert - Quit sync client - - - - ConflictDelegate - - Local version - Local version - - - Server version - Server version - - - - FileProviderFastEnumerationSettings - - Fast sync will only sync changes in files and folders within folders that have been explored. This can significantly increase responsiveness on initial configuration of virtual files. However, it will cause redundant downloads of files moved to an unexplored folder. - Trailing Space in Translation - Fast sync will only sync changes in files and folders within folders that have been explored. This can significantly increase responsiveness on initial configuration of virtual files. However, it will cause redundant downloads of files moved to an unexplored folder. - - - - FileProviderFileDelegate - - Delete - Delete - - - - FileProviderSettings - - Signal file provider domain - Translated by us - Signal file provider domain - - - - FileProviderStorageInfo - - Evict local copies... - Evict local copies... - - - - FileProviderSyncStatus - - All synced! - All synced! - - - - FolderWizardSelectiveSync - - Add Folder Sync - Added by us - - - - Step 3 of 3: Selektive Synchronisation - Added by us - - - - - FolderWizardSourcePage - - &Choose - Added by us - - - - Select a folder on your hard drive that should be permanetly connected to your %1. All files and subfolders are automatically uploaded and synchronized - Added by us - - - - Step 1 of 3: Select local folder - Added by us - - - - - FolderWizardTargetPage - - Both folders are permanently linked and the respective contents are automatically synchronized and updated. - Added by us - - - - Create folder - Removed trailing space in translation - Create folder - - - Please now select or create a target folder in your %1 where the content should be uploaded and synchronized. - Added by us - - - - Step 2 of 3: Directory in your %1 - Added by us - - - - - OCC::AccountManager - - %1 accounts were detected from a legacy desktop client. + + + + + Agree + Agree + + + Back + Back + + + Necessary data + Necessary data + + + Required to ensure that the software can be used as expected + Required to ensure that the software can be used as expected + + + Save Settings + Save Settings + + + Send anonymous use + Send anonymous use + + + Settings + Settings + + + This application uses tracking technologies. By clicking on Agree, you accept the processing of your anonymized data. You can adjust your choices at any time via the settings. <br/> <br/>Information on data processing and more can be found in our <a href='https://wl.hidrive.com/easy/0005'>privacy policy</a>. + This application uses tracking technologies. By clicking on Agree, you accept the processing of your anonymized data. You can adjust your choices at any time via the settings. <br/> <br/>Information on data processing and more can be found in our <a href='https://wl.hidrive.com/easy/0005'>privacy policy</a>. + + + This helps us to optimize the software and to better identify system crashes and unexpected errors. + This helps us to optimize the software and to better identify system crashes and unexpected errors. + + + We collect anonymized data to optimize our app. We use software solutions from various partners for this purpose. We want to give you full transparency and freedom of choice regarding the collection and processing of your anonymized usage. You can change your settings at any time under the menu item Data Protection. + We collect anonymized data to optimize our app. We use software solutions from various partners for this purpose. We want to give you full transparency and freedom of choice regarding the collection and processing of your anonymized usage. You can change your settings at any time under the menu item Data Protection. + + + + BasicComboBox + + Clear status message menu + Delete status message menu + + + + CallNotificationDialog + + Answer Talk call notification + Answer Talk call notification + + + Decline Talk call notification + Decline Talk call notification + + + Talk notification caller avatar + Talk notification caller avatar + + + + CloudProviderWrapper + + Quit sync client + Quit sync client + + + + ConflictDelegate + + Local version + Local version + + + Server version + Server version + + + + FileProviderFastEnumerationSettings + + Fast sync will only sync changes in files and folders within folders that have been explored. This can significantly increase responsiveness on initial configuration of virtual files. However, it will cause redundant downloads of files moved to an unexplored folder. + Fast sync will only sync changes in files and folders within folders that have been explored. This can significantly increase responsiveness on initial configuration of virtual files. However, it will cause redundant downloads of files moved to an unexplored folder. + + + + FileProviderFileDelegate + + Delete + Delete + + + + FileProviderSettings + + Signal file provider domain + Signal file provider domain + + + + FileProviderStorageInfo + + Evict local copies... + Evict local copies... + + + + FileProviderSyncStatus + + All synced! + All synced! + + + + FolderWizardSelectiveSync + + Add Folder Sync + Add Folder Sync + + + Step 3 of 3: Selektive Synchronisation + Step 3 of 3: Selective Synchronisation + + + + FolderWizardSourcePage + + &Choose + &Choose + + + Select a folder on your hard drive that should be permanetly connected to your %1. All files and subfolders are automatically uploaded and synchronized + Select a folder on your hard drive that should be permanetly connected to your %1. All files and subfolders are automatically uploaded and synchronized + + + Step 1 of 3: Select local folder + Step 1 of 3: Select local folder + + + + FolderWizardTargetPage + + Both folders are permanently linked and the respective contents are automatically synchronized and updated. + Both folders are permanently linked and the respective contents are automatically synchronized and updated. + + + Create folder + Create folder + + + Please now select or create a target folder in your %1 where the content should be uploaded and synchronized. + Please now select or create a target folder in your %1 where the content should be uploaded and synchronized. + + + Step 2 of 3: Directory in your %1 + Step 2 of 3: Directory in your %1 + + + + OCC::AccountManager + + %1 accounts were detected from a legacy desktop client. Should the accounts be imported? - %1 accounts were detected from a legacy desktop client. + %1 accounts were detected from a legacy desktop client. Should the accounts be imported? - - - - OCC::AccountSettings - - %1 (%3%) of %2 in use. Some folders, including network mounted or shared folders, might have different limits. - Trailing Space in Translation - %1 (%3%) of %2 in use. Some folders, including network mounted or shared folders, might have different limits. - - - Expand Memory - Added by us - - - - Force sync now - Trailing Space in Translation - Force sync now - - - Storage space %1% occupied - Added by us - - - - There are folders that were not synchronized because they are external storages: - Trailing Space in Source - There are folders that were not synchronised because they are external storages: - - - There are folders that were not synchronized because they are too big or external storages: - Trailing Space in Source - There are folders that were not synchronised because they are too big or external storages: - - - There are folders that were not synchronized because they are too big: - Trailing Space in Source - There are folders that were not synchronised because they are too big: - - - This will encrypt your folder and all files within it. These files will no longer be accessible without your encryption mnemonic key. + + + + OCC::AccountSettings + + %1 (%3%) of %2 in use. Some folders, including network mounted or shared folders, might have different limits. + %1 (%3%) of %2 in use. Some folders, including network mounted or shared folders, might have different limits. + + + Expand Memory + Expand Memory + + + Force sync now + Force sync now + + + https://wl.hidrive.com/easy/0057 + https://wl.hidrive.com/easy/0057 + + + Storage space %1% occupied + Storage space %1% occupied + + + There are folders that were not synchronized because they are external storages: + There are folders that were not synchronised because they are external storages: + + + There are folders that were not synchronized because they are too big or external storages: + There are folders that were not synchronised because they are too big or external storages: + + + There are folders that were not synchronized because they are too big: + There are folders that were not synchronised because they are too big: + + + This will encrypt your folder and all files within it. These files will no longer be accessible without your encryption mnemonic key. <b>This process is not reversible. Are you sure you want to proceed?</b> - Modifed by us - This will encrypt your folder and all files within it. These files will no longer be accessible without your encryption mnemonic key. + This will encrypt your folder and all files within it. These files will no longer be accessible without your encryption mnemonic key. <b>This process is not reversible. Are you sure you want to proceed?</b> - - - To protect your Cryptographic Identity, we encrypt it with a mnemonic of 12 dictionary words. Please note these down and keep them safe. They will be needed to add other devices to your account (like your mobile phone or laptop). - Trailing Space in Translation - To protect your Cryptographic Identity, we encrypt it with a mnemonic of 12 dictionary words. Please note these down and keep them safe. They will be needed to add other devices to your account (like your mobile phone or laptop). - - - https://wl.hidrive.com/easy/0057 - Added by us - https://wl.hidrive.com/easy/0057 - - - - OCC::CaseClashFilenameDialog - - Existing file - modifed by us french - Existing file - - - The file could not be synced because it generates a case clash conflict with an existing file on this system. - modifed by us french - The file could not be synced because it generates a case clash conflict with an existing file on this system. - - - - OCC::DiscoverySingleDirectoryJob - - Encrypted metadata setup error! - added by us french - Encrypted metadata setup error! - - - Encrypted metadata setup error: initial signature from server is empty. - Translated by us - - - - - OCC::Flow2AuthWidget - - Open Browser - Added by us - - - - - OCC::Folder - - A folder from an external storage has been added. - Removed trailing linebreak - A folder from an external storage has been added. - - - A large number of files in the server have been deleted. -Please confirm if you'd like to proceed with these deletions. -Alternatively, you can restore all deleted files by uploading from '%1' folder to the server. - Translated by us - Eine große Anzahl von Dateien wurde auf dem Server gelöscht. + + + To protect your Cryptographic Identity, we encrypt it with a mnemonic of 12 dictionary words. Please note these down and keep them safe. They will be needed to add other devices to your account (like your mobile phone or laptop). + To protect your Cryptographic Identity, we encrypt it with a mnemonic of 12 dictionary words. Please note these down and keep them safe. They will be needed to add other devices to your account (like your mobile phone or laptop). + + + + OCC::CaseClashFilenameDialog + + Existing file + Existing file + + + The file could not be synced because it generates a case clash conflict with an existing file on this system. + The file could not be synced because it generates a case clash conflict with an existing file on this system. + + + + OCC::DiscoverySingleDirectoryJob + + Encrypted metadata setup error: initial signature from server is empty. + Encrypted metadata setup error: initial signature from server is empty. + + + Encrypted metadata setup error! + Encrypted metadata setup error! + + + + OCC::Flow2AuthWidget + + Open Browser + Open Browser + + + + OCC::Folder + + A folder from an external storage has been added. + A folder from an external storage has been added. + + + A large number of files in the server have been deleted. +Please confirm if you'd like to proceed with these deletions. +Alternatively, you can restore all deleted files by uploading from '%1' folder to the server. + Eine große Anzahl von Dateien wurde auf dem Server gelöscht. Bitte bestätigen Sie, ob Sie mit diesen Löschungen fortfahren möchten. -Alternativ können Sie alle gelöschten Dateien wiederherstellen, indem Sie sie aus dem Ordner "%1" auf den Server hochladen. - - - A large number of files in your local '%1' folder have been deleted. -Please confirm if you'd like to proceed with these deletions. +Alternativ können Sie alle gelöschten Dateien wiederherstellen, indem Sie sie aus dem Ordner "%1" auf den Server hochladen. + + + A large number of files in your local '%1' folder have been deleted. +Please confirm if you'd like to proceed with these deletions. Alternatively, you can restore all deleted files by downloading them from the server. - Translated by us - Eine große Anzahl von Dateien in Ihrem lokalen Ordner "%1" wurde gelöscht. + Eine große Anzahl von Dateien in Ihrem lokalen Ordner "%1" wurde gelöscht. Bitte bestätigen Sie, ob Sie mit diesen Löschungen fortfahren möchten. Alternativ können Sie alle gelöschten Dateien wiederherstellen, indem Sie sie vom Server herunterladen. - - - A new folder larger than %1 MB has been added: %2. - Removed trailing linebreak - A new folder larger than %1 MB has been added: %2. - - - Proceed with Deletion - Translated by us - - - - Remove all files? - Translated by us - - - - Restore Files from Server - Translated by us - - - - Restore Files to Server - Translated by us - - - - - OCC::FolderCreationDialog - - %1 Create new folder - Added by us - - - - - OCC::FolderMan - - (backup %1) - Removed leading space - (backup %1) - - - (backup) - Removed leading space - (backup) - - - - OCC::FolderStatusDelegate - - Synchronize any other local folder with your %1 - Added by us - - - - - OCC::FolderWizardLocalPath - - Choose - Added by us - - - - - OCC::FolderWizardRemotePath - - Enter the name of the new folder to be created below "%1": - Removed trailing space - Enter the name of the new folder to be created below "%1": - - - - OCC::FolderWizardSelectiveSync - - Use virtual files instead of downloading content immediately %1 - Use virtual files instead of downloading content immediately %1 - - - - OCC::GeneralSettings - - &Analysis data collection for needs-based design - Added by us - - - - Ask for confirmation before synchronizing external storages - Has to be repaired in code - Ask for confirmation before synchronising external storages - - - Ask for confirmation before synchronizing new folders larger than - Has to be repaired in code - Ask for confirmation before synchronizing new folders larger than - - - Automatically disable synchronisation of folders that overcome limit - Has to be repaired in code - Automatically disable synchronisation of folders that overcome limit - - - Data Protection - Added by us - - - - More Information - Added by us - - - - Open Source Software - Added by us - - - - Privacy Policy - Added by us - - - - Show sync folders in &Explorer's navigation pane - Show sync folders in &Explorer's navigation pane - - - Updates - Still used by us - Updates - - - https://wl.hidrive.com/easy/0004 - https://wl.hidrive.com/easy/0004 - - - https://wl.hidrive.com/easy/0005 - https://wl.hidrive.com/easy/0005 - - - https://wl.hidrive.com/easy/0006 - https://wl.hidrive.com/easy/0006 - - - https://wl.hidrive.com/easy/0007 - https://wl.hidrive.com/easy/0007 - - - - OCC::IgnoreListTableWidget - - Add a new ignore pattern: - modifed by us spanish - Add a new ignore pattern: - - - Files or folders matching a pattern will not be synchronized. + + + A new folder larger than %1 MB has been added: %2. + A new folder larger than %1 MB has been added: %2. + + + Proceed with Deletion + Proceed with Deletion + + + Remove all files? + Remove all files? + + + Restore Files from Server + Restore Files from Server + + + Restore Files to Server + Restore Files to Server + + + + OCC::FolderCreationDialog + + %1 Create new folder + %1 Create new folder + + + + OCC::FolderMan + + (backup %1) + (backup %1) + + + (backup) + (backup) + + + + OCC::FolderStatusDelegate + + Synchronize any other local folder with your %1 + Synchronize any other local folder with your %1 + + + + OCC::FolderWizardLocalPath + + Choose + Choose + + + + OCC::FolderWizardRemotePath + + Enter the name of the new folder to be created below "%1": + Enter the name of the new folder to be created below "%1": + + + + OCC::FolderWizardSelectiveSync + + Use virtual files instead of downloading content immediately %1 + Use virtual files instead of downloading content immediately %1 + + + + OCC::GeneralSettings + + &Analysis data collection for needs-based design + &Analysis data collection for needs-based design + + + Ask for confirmation before synchronizing external storages + Ask for confirmation before synchronising external storages + + + Ask for confirmation before synchronizing new folders larger than + Ask for confirmation before synchronizing new folders larger than + + + Automatically disable synchronisation of folders that overcome limit + Automatically disable synchronisation of folders that overcome limit + + + Data Protection + Data Protection + + + https://wl.hidrive.com/easy/0004 + https://wl.hidrive.com/easy/0004 + + + https://wl.hidrive.com/easy/0005 + https://wl.hidrive.com/easy/0005 + + + https://wl.hidrive.com/easy/0006 + https://wl.hidrive.com/easy/0006 + + + https://wl.hidrive.com/easy/0007 + https://wl.hidrive.com/easy/0007 + + + More Information + More Information + + + Open Source Software + Open Source Software + + + Privacy Policy + Privacy Policy + + + Show sync folders in &Explorer's navigation pane + Show sync folders in &Explorer's navigation pane + + + Updates + Updates + + + + OCC::IgnoreListTableWidget + + Add a new ignore pattern: + Add a new ignore pattern: + + + Files or folders matching a pattern will not be synchronized. Items where deletion is allowed will be deleted if they prevent a directory from being removed. This is useful for meta data. - Modifed by us spanish - Files or folders matching a pattern will not be synchronized. + Files or folders matching a pattern will not be synchronized. Items where deletion is allowed will be deleted if they prevent a directory from being removed. This is useful for meta data. - - - Ignore Pattern - Added by us - - - - - OCC::NetworkSettings - - No proxy - No proxy - - - - OCC::PropagateLocalMkdir - - Could not create folder %1 - Trailing space in translation removed - Could not create folder %1 - - - - OCC::PropagateLocalRename - - Folder %1 cannot be renamed because of a local file or folder name clash! - Translated by us - - - - - OCC::PropagateUploadFileCommon - - Upload of %1 exceeds the quota for the folder - Trailing space in translation removed - Upload of %1 exceeds the quota for the folder - - - - OCC::sesSnackBar - - Success - Added by us - - - - - OCC::SettingsDialog - - New account - Added by us - - - - - OCC::SslButton - - This connection is NOT secure as it is not encrypted. - Removed trailing linebreak - This connection is NOT secure as it is not encrypted. - - - This connection is encrypted using %1 bit %2. - Removed trailing linebreak - This connection is encrypted using %1 bit %2. - - - - OCC::Theme - - easy/0118 - Added by us - - - - - OCC::UpdateE2eeFolderMetadataJob - - Failed to finalize item. - Modifed by us - Failed to finalize item. - - - Failed to unlock encrypted folder. - Modifed by us - Failed to unlock encrypted folder. - - - - OCC::UpdateE2eeFolderUsersMetadataJob - - Could not add or remove user %1 to access folder %2 - Translated by us - - - - - OCC::User - - %1 notifications - Translated by us - - - - - OCC::WebFlowCredentials - - <b>You have been logged out of your account %1 at %2. Please login again.</b> - Modifed by us - - - - - OwncloudAdvancedSetupPage - - <html><head/><body><p>If this box is checked, existing content in the local folder will be erased to start a clean sync from the server.</p><p>Do not check this if the local content should be uploaded to the servers folder.</p></body></html> - Modifed by us - <html><head/><body><p>If this box is checked, existing content in the local folder will be erased to start a clean sync from the server.</p><p>Do not check this if the local content should be uploaded to the servers folder.</p></body></html> - - - - progress - - Updated local virtual files metadata - Translated by us - - - - updating local virtual files metadata - Translated by us - - - - - QObject - - Could not create debug archive in selected location! - Translated by us - - - - Failed to create debug archive - Translated by us - - - - The directory %1 cannot be part of your sync directory. Please choose another folder. - Added by us - - - - - SesTrayHeader - - Open Nextcloud in browser - Added by us - - - - Website - Added by us - - - - - ShareDetailsPage - - Copy share link - modifed by us - Copy share link - - - Custom Permissions - Added by us - - - - Enter the note to recipient - Added by us - - - - Share link copied! - modifed by us - Share link copied! - - - - TrayFoldersMenuButton - - Files - Added by us - - - - \ No newline at end of file + + + Ignore Pattern + Ignore Pattern + + + + OCC::NetworkSettings + + No proxy + No proxy + + + + OCC::PropagateLocalMkdir + + Could not create folder %1 + Could not create folder %1 + + + + OCC::PropagateLocalRename + + Folder %1 cannot be renamed because of a local file or folder name clash! + Folder %1 cannot be renamed because of a local file or folder name clash! + + + + OCC::PropagateUploadFileCommon + + Upload of %1 exceeds the quota for the folder + Upload of %1 exceeds the quota for the folder + + + + OCC::SettingsDialog + + New account + New account + + + + OCC::SslButton + + This connection is encrypted using %1 bit %2. + This connection is encrypted using %1 bit %2. + + + This connection is NOT secure as it is not encrypted. + This connection is NOT secure as it is not encrypted. + + + + OCC::Theme + + easy/0118 + easy/0108 + + + + OCC::UpdateE2eeFolderMetadataJob + + Failed to finalize item. + Failed to finalize item. + + + Failed to unlock encrypted folder. + Failed to unlock encrypted folder. + + + + OCC::UpdateE2eeFolderUsersMetadataJob + + Could not add or remove user %1 to access folder %2 + Could not add or remove user %1 to access folder %2 + + + + OCC::User + + %1 notifications + %1 notifications + + + + OCC::WebFlowCredentials + + <b>You have been logged out of your account %1 at %2. Please login again.</b> + <b>You have been logged out of your account %1 at %2. Please login again.</b> + + + + OCC::sesSnackBar + + Success + Success + + + + OwncloudAdvancedSetupPage + + <html><head/><body><p>If this box is checked, existing content in the local folder will be erased to start a clean sync from the server.</p><p>Do not check this if the local content should be uploaded to the servers folder.</p></body></html> + <html><head/><body><p>If this box is checked, existing content in the local folder will be erased to start a clean sync from the server.</p><p>Do not check this if the local content should be uploaded to the servers folder.</p></body></html> + + + + QObject + + Could not create debug archive in selected location! + Could not create debug archive in selected location! + + + Failed to create debug archive + Failed to create debug archive + + + The directory %1 cannot be part of your sync directory. Please choose another folder. + The directory %1 cannot be part of your sync directory. Please choose another folder. + + + + SesTrayHeader + + Open Nextcloud in browser + Open HiDrive Next in browser + + + Website + Website + + + + ShareDetailsPage + + Copy share link + Copy share link + + + Custom Permissions + Custom Permissions + + + Enter the note to recipient + Enter the note to recipient + + + Share link copied! + Share link copied! + + + + TrayFoldersMenuButton + + Files + Files + + + + progress + + Updated local virtual files metadata + Updated local virtual files metadata + + + updating local virtual files metadata + Updating local virtual files metadata + + + diff --git a/translation_scripts/es.ts b/translation_scripts/es.ts index f1a068dbd2606..56cf0e16c28e6 100644 --- a/translation_scripts/es.ts +++ b/translation_scripts/es.ts @@ -1,615 +1,578 @@ - - - - BasicComboBox - - Clear status message menu - Borrar el menú de mensajes de estado - - - - CallNotificationDialog - - Answer Talk call notification - Aviso de llamada de Answer Talk - - - Decline Talk call notification - Rechazar la notificación de llamadas de Talk - - - Talk notification caller avatar - Avatar de la notificación de llamada - - - - CloudProviderWrapper - - Quit sync client - Leading Space in Translation geändert - Cerrar cliente de sincronización - - - - ConflictDelegate - - Local version - Versión local - - - Server version - Versión del servidor - - - - FileProviderFastEnumerationSettings - - Fast sync will only sync changes in files and folders within folders that have been explored. This can significantly increase responsiveness on initial configuration of virtual files. However, it will cause redundant downloads of files moved to an unexplored folder. - Trailing Space in Translation / Source - La sincronización rápida sólo sincronizará los cambios en archivos y carpetas dentro de las carpetas que se han explorado. Esto puede incrementar significativamente la capacidad de respuesta en la configuración inicial de archivos virtuales. Sin embargo, esto provocará descargas redundantes de archivos movidos a carpetas inexploradas. - - - - FileProviderFileDelegate - - Delete - Borrar - - - - FileProviderSettings - - Signal file provider domain - Translated by us - Dominio del proveedor de archivos de firmas - - - - FileProviderStorageInfo - - Evict local copies... - Desalojar las copias locales... - - - - FileProviderSyncStatus - - All synced! - ¡Todo está sincronizado! - - - - FolderWizardSelectiveSync - - Add Folder Sync - Added by us - Añadir sincronización de carpetas - - - Step 3 of 3: Selektive Synchronisation - Added by us - Paso 3 de 3: Sincronización selectiva - - - - FolderWizardSourcePage - - &Choose - Added by us - &Elegir - - - Select a folder on your hard drive that should be permanetly connected to your %1. All files and subfolders are automatically uploaded and synchronized - Added by us - Selecciona una carpeta de tu disco duro que deba estar permanentemente conectada a tu %1. Todos los archivos y subcarpetas se cargan y sincronizan automáticamente. - - - Step 1 of 3: Select local folder - Added by us - Paso 1 de 3: Seleccionar carpeta local - - - - FolderWizardTargetPage - - Both folders are permanently linked and the respective contents are automatically synchronized and updated. - Added by us - Ambas carpetas están permanentemente vinculadas y sus respectivos contenidos se sincronizan y actualizan automáticamente. - - - Create folder - Removed trailing space in translation - Crear carpeta - - - Please now select or create a target folder in your %1 where the content should be uploaded and synchronized. - Added by us - Por favor, ahora seleccione o cree una carpeta de destino en su %1 donde el contenido debe ser cargado y sincronizado. - - - Step 2 of 3: Directory in your %1 - Added by us - Paso 2 de 3: Directorio en su %1 - - - - OCC::AccountManager - - %1 accounts were detected from a legacy desktop client. + + + + + Agree + Aceptar + + + Back + Volver + + + Necessary data + Datos necesarios + + + Required to ensure that the software can be used as expected + Necesario para garantizar que el software puede utilizarse según lo previsto + + + Save Settings + Guardar ajustes + + + Send anonymous use + Enviar uso anónimo + + + Settings + Ajustes + + + This application uses tracking technologies. By clicking on Agree, you accept the processing of your anonymized data. You can adjust your choices at any time via the settings. <br/> <br/>Information on data processing and more can be found in our <a href='https://wl.hidrive.com/easy/0005'>privacy policy</a>. + Esta aplicación utiliza tecnologías de seguimiento. Al hacer clic en Aceptar, usted acepta el tratamiento de sus datos anónimos. Puede ajustar sus opciones en cualquier momento a través de la configuración. <br/> <br/>Puede encontrar información sobre el procesamiento de datos y más en nuestra <a href='https://wl.hidrive.com/easy/0015'>política de privacidad</a>. + + + This helps us to optimize the software and to better identify system crashes and unexpected errors. + Esto nos ayuda a optimizar el software y a identificar mejor las caídas del sistema y los errores inesperados. + + + We collect anonymized data to optimize our app. We use software solutions from various partners for this purpose. We want to give you full transparency and freedom of choice regarding the collection and processing of your anonymized usage. You can change your settings at any time under the menu item Data Protection. + Recopilamos datos de carácter anónimo para la optimización de nuestra aplicación. +Para ello, utilizamos soluciones de software de distintos socios. Deseamos transmitirte total transparencia y libertad de decisión acerca de la recopilación y el tratamiento de tu uso anónimo. Puedes modificar tu configuración en la opción del menú «Protección de datos» en cualquier momento. + + + + BasicComboBox + + Clear status message menu + Borrar el menú de mensajes de estado + + + + CallNotificationDialog + + Answer Talk call notification + Aviso de llamada de Answer Talk + + + Decline Talk call notification + Rechazar la notificación de llamadas de Talk + + + Talk notification caller avatar + Avatar de la notificación de llamada + + + + CloudProviderWrapper + + Quit sync client + Cerrar cliente de sincronización + + + + ConflictDelegate + + Local version + Versión local + + + Server version + Versión del servidor + + + + FileProviderFastEnumerationSettings + + Fast sync will only sync changes in files and folders within folders that have been explored. This can significantly increase responsiveness on initial configuration of virtual files. However, it will cause redundant downloads of files moved to an unexplored folder. + La sincronización rápida sólo sincronizará los cambios en archivos y carpetas dentro de las carpetas que se han explorado. Esto puede incrementar significativamente la capacidad de respuesta en la configuración inicial de archivos virtuales. Sin embargo, esto provocará descargas redundantes de archivos movidos a carpetas inexploradas. + + + + FileProviderFileDelegate + + Delete + Borrar + + + + FileProviderSettings + + Signal file provider domain + Dominio del proveedor de archivos de firmas + + + + FileProviderStorageInfo + + Evict local copies... + Desalojar las copias locales... + + + + FileProviderSyncStatus + + All synced! + ¡Todo está sincronizado! + + + + FolderWizardSelectiveSync + + Add Folder Sync + Añadir sincronización de carpetas + + + Step 3 of 3: Selektive Synchronisation + Paso 3 de 3: Sincronización selectiva + + + + FolderWizardSourcePage + + &Choose + &Elegir + + + Select a folder on your hard drive that should be permanetly connected to your %1. All files and subfolders are automatically uploaded and synchronized + Selecciona una carpeta de tu disco duro que deba estar permanentemente conectada a tu %1. Todos los archivos y subcarpetas se cargan y sincronizan automáticamente. + + + Step 1 of 3: Select local folder + Paso 1 de 3: Seleccionar carpeta local + + + + FolderWizardTargetPage + + Both folders are permanently linked and the respective contents are automatically synchronized and updated. + Ambas carpetas están permanentemente vinculadas y sus respectivos contenidos se sincronizan y actualizan automáticamente. + + + Create folder + Crear carpeta + + + Please now select or create a target folder in your %1 where the content should be uploaded and synchronized. + Por favor, ahora seleccione o cree una carpeta de destino en su %1 donde el contenido debe ser cargado y sincronizado. + + + Step 2 of 3: Directory in your %1 + Paso 2 de 3: Directorio en su %1 + + + + OCC::AccountManager + + %1 accounts were detected from a legacy desktop client. Should the accounts be imported? - %1 cuentas se detectaron con un cliente de escritorio antiguo. + %1 cuentas se detectaron con un cliente de escritorio antiguo. ¿Deben estas cuentas ser importadas? - - - - OCC::AccountSettings - - %1 (%3%) of %2 in use. Some folders, including network mounted or shared folders, might have different limits. - Trailing Space in Translation - %1 (%3%) de %2 en uso. Algunas carpetas, como carpetas de red o compartidas, podrían tener límites diferentes. - - - Expand Memory - Added by us - Ampliar la memoria - - - Force sync now - Trailing Space in Translation - Forzar la sincronización ahora - - - Storage space %1% occupied - Added by us - Espacio de almacenamiento %1% ocupado - - - There are folders that were not synchronized because they are external storages: - Trailing Space in Source - Hay carpetas que no se han sincronizado porque están en el almacenamiento externo: - - - There are folders that were not synchronized because they are too big or external storages: - Trailing Space in Source - Hay carpetas que no se han sincronizado porque son demasiado grandes o están en el almacenamiento externo: - - - There are folders that were not synchronized because they are too big: - Trailing Space in Source - Hay carpetas que no se han sincronizado porque son demasiado grandes: - - - This will encrypt your folder and all files within it. These files will no longer be accessible without your encryption mnemonic key. + + + + OCC::AccountSettings + + %1 (%3%) of %2 in use. Some folders, including network mounted or shared folders, might have different limits. + %1 (%3%) de %2 en uso. Algunas carpetas, como carpetas de red o compartidas, podrían tener límites diferentes. + + + Expand Memory + Ampliar la memoria + + + Force sync now + Forzar la sincronización ahora + + + https://wl.hidrive.com/easy/0057 + https://wl.hidrive.com/easy/0087 + + + Storage space %1% occupied + Espacio de almacenamiento %1% ocupado + + + There are folders that were not synchronized because they are external storages: + Hay carpetas que no se han sincronizado porque están en el almacenamiento externo: + + + There are folders that were not synchronized because they are too big or external storages: + Hay carpetas que no se han sincronizado porque son demasiado grandes o están en el almacenamiento externo: + + + There are folders that were not synchronized because they are too big: + Hay carpetas que no se han sincronizado porque son demasiado grandes: + + + This will encrypt your folder and all files within it. These files will no longer be accessible without your encryption mnemonic key. <b>This process is not reversible. Are you sure you want to proceed?</b> - Modifed by us - Esto cifrará su carpeta y todos los archivos contenidos en ella. Ya no se podrá acceder a estos archivos sin su clave de cifrado. + Esto cifrará su carpeta y todos los archivos contenidos en ella. Ya no se podrá acceder a estos archivos sin su clave de cifrado. <b>Este proceso no es reversible. ¿Seguro que quiere continuar?</b> - - - To protect your Cryptographic Identity, we encrypt it with a mnemonic of 12 dictionary words. Please note these down and keep them safe. They will be needed to add other devices to your account (like your mobile phone or laptop). - Trailing Space in Translation - Para proteger tu identidad criptográfica, la ciframos con una regla mnemotécnica de 12 palabras del diccionario. Por favor, anótalas y mantenlas a salvo. Estas palabras serán necesarias para añadir otros dispositivos a su cuenta (como un teléfono móvil o un portátil). - - - https://wl.hidrive.com/easy/0057 - Added by us - https://wl.hidrive.com/easy/0087 - - - - OCC::CaseClashFilenameDialog - - Existing file - modifed by us french - Archivo existente - - - The file could not be synced because it generates a case clash conflict with an existing file on this system. - modifed by us french - El archivo no puede ser sincronizado porque genera un conflicto de capitalización con un archivo que ya existe en este sistema. - - - - OCC::DiscoverySingleDirectoryJob - - Encrypted metadata setup error! - added by us french - ¡Hubo un error al configurar los metadatos cifrados! - - - Encrypted metadata setup error: initial signature from server is empty. - Translated by us - Error de configuración de metadatos encriptados: la firma inicial del servidor está vacía. - - - - OCC::Flow2AuthWidget - - Open Browser - Added by us - Abrir en el navegador - - - - OCC::Folder - - A folder from an external storage has been added. - Removed trailing linebreak - Una carpeta de almacenamiento externo ha sido añadida. - - - A large number of files in the server have been deleted. -Please confirm if you'd like to proceed with these deletions. -Alternatively, you can restore all deleted files by uploading from '%1' folder to the server. - Translated by us - Se ha eliminado un gran número de archivos del servidor. + + + To protect your Cryptographic Identity, we encrypt it with a mnemonic of 12 dictionary words. Please note these down and keep them safe. They will be needed to add other devices to your account (like your mobile phone or laptop). + Para proteger tu identidad criptográfica, la ciframos con una regla mnemotécnica de 12 palabras del diccionario. Por favor, anótalas y mantenlas a salvo. Estas palabras serán necesarias para añadir otros dispositivos a su cuenta (como un teléfono móvil o un portátil). + + + + OCC::CaseClashFilenameDialog + + Existing file + Archivo existente + + + The file could not be synced because it generates a case clash conflict with an existing file on this system. + El archivo no puede ser sincronizado porque genera un conflicto de capitalización con un archivo que ya existe en este sistema. + + + + OCC::DiscoverySingleDirectoryJob + + Encrypted metadata setup error: initial signature from server is empty. + Error de configuración de metadatos encriptados: la firma inicial del servidor está vacía. + + + Encrypted metadata setup error! + ¡Hubo un error al configurar los metadatos cifrados! + + + + OCC::Flow2AuthWidget + + Open Browser + Abrir en el navegador + + + + OCC::Folder + + A folder from an external storage has been added. + Una carpeta de almacenamiento externo ha sido añadida. + + + A large number of files in the server have been deleted. +Please confirm if you'd like to proceed with these deletions. +Alternatively, you can restore all deleted files by uploading from '%1' folder to the server. + Se ha eliminado un gran número de archivos del servidor. Por favor, confirme si desea proceder con estos borrados. -Alternativamente, puede restaurar todos los archivos borrados subiendo desde la carpeta '%1' al servidor. - - - A large number of files in your local '%1' folder have been deleted. -Please confirm if you'd like to proceed with these deletions. +Alternativamente, puede restaurar todos los archivos borrados subiendo desde la carpeta '%1' al servidor. + + + A large number of files in your local '%1' folder have been deleted. +Please confirm if you'd like to proceed with these deletions. Alternatively, you can restore all deleted files by downloading them from the server. - Translated by us - Se ha eliminado un gran número de archivos de tu carpeta local '%1'. + Se ha eliminado un gran número de archivos de tu carpeta local '%1'. Por favor, confirme si desea proceder con estos borrados. Alternativamente, puedes restaurar todos los archivos borrados descargándolos del servidor. - - - A new folder larger than %1 MB has been added: %2. - Removed trailing linebreak - Una carpeta mayor de %1 MB ha sido añadida: %2. - - - Proceed with Deletion - Translated by us - Proceder a la supresión - - - Remove all files? - Translated by us - ¿Eliminar todos los archivos? - - - Restore Files from Server - Translated by us - Restaurar archivos del servidor - - - Restore Files to Server - Translated by us - Restaurar archivos en el servidor - - - - OCC::FolderCreationDialog - - %1 Create new folder - Added by us - %1 Crear nueva carpeta - - - - OCC::FolderMan - - (backup %1) - Removed leading space - (copia de seguridad %1) - - - (backup) - Removed leading space - (copia de seguridad) - - - - OCC::FolderStatusDelegate - - Synchronize any other local folder with your %1 - Added by us - Sincroniza cualquier otra carpeta local con tu %1 - - - - OCC::FolderWizardLocalPath - - Choose - Added by us - Seleccione - - - - OCC::FolderWizardRemotePath - - Enter the name of the new folder to be created below "%1": - Removed trailing space - Introduce el nombre de la nueva carpeta que se creará debajo de "%1": - - - - OCC::FolderWizardSelectiveSync - - Use virtual files instead of downloading content immediately %1 - Usa archivos virtuales en vez de descargar el contenido inmediatamente %1 - - - - OCC::GeneralSettings - - &Analysis data collection for needs-based design - Added by us - &Recogida de datos de análisis para un diseño basado en las necesidades - - - Ask for confirmation before synchronizing external storages - modifed by us - Pide confirmación antes de sincronizar almacenamientos externos - - - Ask for confirmation before synchronizing new folders larger than - Pedir confirmación antes de sincronizar carpetas nuevas mayores a - - - Automatically disable synchronisation of folders that overcome limit - modifed by us - Desactivar automáticamente la sincronización de carpetas que superen el límite - - - Data Protection - Added by us - - - - More Information - Added by us - Más información - - - Open Source Software - Added by us - Software de código abierto - - - Privacy Policy - Added by us - Política de privacidad - - - Show sync folders in &Explorer's navigation pane - Modifed by us - Mostrar carpetas de sincronización en el panel de navegación de &Explorer - - - Updates - Still used by us - Actualizaciones - - - https://wl.hidrive.com/easy/0004 - https://wl.hidrive.com/easy/0004 - - - https://wl.hidrive.com/easy/0005 - https://wl.hidrive.com/easy/0005 - - - https://wl.hidrive.com/easy/0006 - https://wl.hidrive.com/easy/0006 - - - https://wl.hidrive.com/easy/0007 - https://wl.hidrive.com/easy/0007 - - - - OCC::IgnoreListTableWidget - - Add a new ignore pattern: - modifed by us - Añadir un nuevo patrón de ignorar: - - - Files or folders matching a pattern will not be synchronized. + + + A new folder larger than %1 MB has been added: %2. + Una carpeta mayor de %1 MB ha sido añadida: %2. + + + Proceed with Deletion + Proceder a la supresión + + + Remove all files? + ¿Eliminar todos los archivos? + + + Restore Files from Server + Restaurar archivos del servidor + + + Restore Files to Server + Restaurar archivos en el servidor + + + + OCC::FolderCreationDialog + + %1 Create new folder + %1 Crear nueva carpeta + + + + OCC::FolderMan + + (backup %1) + (copia de seguridad %1) + + + (backup) + (copia de seguridad) + + + + OCC::FolderStatusDelegate + + Synchronize any other local folder with your %1 + Sincroniza cualquier otra carpeta local con tu %1 + + + + OCC::FolderWizardLocalPath + + Choose + Seleccione + + + + OCC::FolderWizardRemotePath + + Enter the name of the new folder to be created below "%1": + Introduce el nombre de la nueva carpeta que se creará debajo de "%1": + + + + OCC::FolderWizardSelectiveSync + + Use virtual files instead of downloading content immediately %1 + Usa archivos virtuales en vez de descargar el contenido inmediatamente %1 + + + + OCC::GeneralSettings + + &Analysis data collection for needs-based design + &Recogida de datos de análisis para un diseño basado en las necesidades + + + Ask for confirmation before synchronizing external storages + Pide confirmación antes de sincronizar almacenamientos externos + + + Ask for confirmation before synchronizing new folders larger than + Pedir confirmación antes de sincronizar carpetas nuevas mayores a + + + Automatically disable synchronisation of folders that overcome limit + Desactivar automáticamente la sincronización de carpetas que superen el límite + + + Data Protection + Protección de datos + + + https://wl.hidrive.com/easy/0004 + https://wl.hidrive.com/easy/0014 + + + https://wl.hidrive.com/easy/0005 + https://wl.hidrive.com/easy/0015 + + + https://wl.hidrive.com/easy/0006 + https://wl.hidrive.com/easy/0006 + + + https://wl.hidrive.com/easy/0007 + https://wl.hidrive.com/easy/0017 + + + More Information + Más información + + + Open Source Software + Software de código abierto + + + Privacy Policy + Política de privacidad + + + Show sync folders in &Explorer's navigation pane + Mostrar carpetas de sincronización en el panel de navegación de &Explorer + + + Updates + Actualizaciones + + + + OCC::IgnoreListTableWidget + + Add a new ignore pattern: + Añadir un nuevo patrón de ignorar: + + + Files or folders matching a pattern will not be synchronized. Items where deletion is allowed will be deleted if they prevent a directory from being removed. This is useful for meta data. - Modifed by us - Los archivos o carpetas que coincidan con este patrón no se sincronizarán. + Los archivos o carpetas que coincidan con este patrón no se sincronizarán. Los objetos cuyo borrado esté permitido se eliminarán si impiden que se borre una carpeta. Esto es útil para los metadatos. - - - Ignore Pattern - Added by us - Ignorar patrón - - - - OCC::NetworkSettings - - No proxy - Sin proxy - - - - OCC::PropagateLocalMkdir - - Could not create folder %1 - Trailing space in translation removed - No se pudo crear la carpeta %1 - - - - OCC::PropagateLocalRename - - Folder %1 cannot be renamed because of a local file or folder name clash! - Translated by us - La carpeta %1 no puede renombrarse debido a un conflicto de nombres de archivos o carpetas locales. - - - - OCC::PropagateUploadFileCommon - - Upload of %1 exceeds the quota for the folder - Trailing space in translation removed - La subida %1 excede el límite de tamaño de la carpeta - - - - OCC::sesSnackBar - - Success - Added by us - Éxito - - - - OCC::SettingsDialog - - New account - Added by us - Nueva cuenta - - - - OCC::SslButton - - This connection is NOT secure as it is not encrypted. - Removed trailing linebreak - Esta conexión NO ES SEGURA, pues no está cifrada. - - - This connection is encrypted using %1 bit %2. - Removed trailing linebreak - Esta conexión está cifrada con %1 bit %2. - - - - OCC::Theme - - easy/0118 - Added by us - easy/0138 - - - - OCC::UpdateE2eeFolderMetadataJob - - Failed to finalize item. - Modifed by us - Fallo al finalizar ítem. - - - Failed to unlock encrypted folder. - Modifed by us - Fallo al desbloquear carpeta cifrada. - - - - OCC::UpdateE2eeFolderUsersMetadataJob - - Could not add or remove user %1 to access folder %2 - Translated by us - No se ha podido añadir o eliminar el usuario %1 para acceder a la carpeta %2 - - - - OCC::User - - %1 notifications - Translated by us - %1 notificaciones - - - - OCC::WebFlowCredentials - - <b>You have been logged out of your account %1 at %2. Please login again.</b> - Modifed by us - <b>Se ha cerrado la sesión de su cuenta %1 en %2. Vuelva a iniciar sesión.</b> - - - - OwncloudAdvancedSetupPage - - <html><head/><body><p>If this box is checked, existing content in the local folder will be erased to start a clean sync from the server.</p><p>Do not check this if the local content should be uploaded to the servers folder.</p></body></html> - Modifed by us - <html><head/><body><p>Si esta casilla está marcada, el contenido existente en la carpeta local se borrará para iniciar una sincronización limpia desde el servidor.</p><p>No marque esta casilla si el contenido local debe cargarse en la carpeta de los servidores.</p></body></html>. - - - - progress - - Updated local virtual files metadata - Translated by us - Actualizados los metadatos de los archivos virtuales locales - - - updating local virtual files metadata - Translated by us - Actualización de los metadatos de los archivos virtuales locales - - - - QObject - - Could not create debug archive in selected location! - Translated by us - No se ha podido crear el archivo de depuración en la ubicación seleccionada. - - - Failed to create debug archive - Translated by us - Error al crear el archivo de depuración - - - The directory %1 cannot be part of your sync directory. Please choose another folder. - Added by us - El directorio %1 no puede formar parte de su directorio de sincronización. Por favor, elija otra carpeta. - - - - SesTrayHeader - - Open Nextcloud in browser - Added by us - Abrir HiDrive Next en el navegador - - - Website - Added by us - Sitio web - - - - ShareDetailsPage - - Copy share link - modifed by us - Copiar enlace de recurso compartido - - - Custom Permissions - Added by us - Permisos personalizados - - - Enter the note to recipient - Added by us - Introducir la nota al destinatario - - - Share link copied! - modifed by us - ¡Enlace compartido copiado! - - - - TrayFoldersMenuButton - - Files - Added by us - Archivos - - - - \ No newline at end of file + + + Ignore Pattern + Ignorar patrón + + + + OCC::NetworkSettings + + No proxy + Sin proxy + + + + OCC::PropagateLocalMkdir + + Could not create folder %1 + No se pudo crear la carpeta %1 + + + + OCC::PropagateLocalRename + + Folder %1 cannot be renamed because of a local file or folder name clash! + La carpeta %1 no puede renombrarse debido a un conflicto de nombres de archivos o carpetas locales. + + + + OCC::PropagateUploadFileCommon + + Upload of %1 exceeds the quota for the folder + La subida %1 excede el límite de tamaño de la carpeta + + + + OCC::SettingsDialog + + New account + Nueva cuenta + + + + OCC::SslButton + + This connection is encrypted using %1 bit %2. + Esta conexión está cifrada con %1 bit %2. + + + This connection is NOT secure as it is not encrypted. + Esta conexión NO ES SEGURA, pues no está cifrada. + + + + OCC::Theme + + easy/0118 + easy/0118 + + + + OCC::UpdateE2eeFolderMetadataJob + + Failed to finalize item. + Fallo al finalizar ítem. + + + Failed to unlock encrypted folder. + Fallo al desbloquear carpeta cifrada. + + + + OCC::UpdateE2eeFolderUsersMetadataJob + + Could not add or remove user %1 to access folder %2 + No se ha podido añadir o eliminar el usuario %1 para acceder a la carpeta %2 + + + + OCC::User + + %1 notifications + %1 notificaciones + + + + OCC::WebFlowCredentials + + <b>You have been logged out of your account %1 at %2. Please login again.</b> + <b>Se ha cerrado la sesión de su cuenta %1 en %2. Vuelva a iniciar sesión.</b> + + + + OCC::sesSnackBar + + Success + Éxito + + + + OwncloudAdvancedSetupPage + + <html><head/><body><p>If this box is checked, existing content in the local folder will be erased to start a clean sync from the server.</p><p>Do not check this if the local content should be uploaded to the servers folder.</p></body></html> + <html><head/><body><p>Si esta casilla está marcada, el contenido existente en la carpeta local se borrará para iniciar una sincronización limpia desde el servidor.</p><p>No marque esta casilla si el contenido local debe cargarse en la carpeta de los servidores.</p></body></html>. + + + + QObject + + Could not create debug archive in selected location! + No se ha podido crear el archivo de depuración en la ubicación seleccionada. + + + Failed to create debug archive + Error al crear el archivo de depuración + + + The directory %1 cannot be part of your sync directory. Please choose another folder. + El directorio %1 no puede formar parte de su directorio de sincronización. Por favor, elija otra carpeta. + + + + SesTrayHeader + + Open Nextcloud in browser + Abrir HiDrive Next en el navegador + + + Website + Sitio web + + + + ShareDetailsPage + + Copy share link + Copiar enlace de recurso compartido + + + Custom Permissions + Permisos personalizados + + + Enter the note to recipient + Introducir la nota al destinatario + + + Share link copied! + ¡Enlace compartido copiado! + + + + TrayFoldersMenuButton + + Files + Archivos + + + + progress + + Updated local virtual files metadata + Actualizados los metadatos de los archivos virtuales locales + + + updating local virtual files metadata + Actualización de los metadatos de los archivos virtuales locales + + + diff --git a/translation_scripts/fr.ts b/translation_scripts/fr.ts index e9ad7909cfe7f..67df93e63ae3e 100644 --- a/translation_scripts/fr.ts +++ b/translation_scripts/fr.ts @@ -1,615 +1,577 @@ - - - - BasicComboBox - - Clear status message menu - Menu d'effacement du message de statut - - - - CallNotificationDialog - - Answer Talk call notification - Répondre à la notification d'appel de Talk - - - Decline Talk call notification - Décliner la notification d'appel de Talk - - - Talk notification caller avatar - Avatar de l'appelant de la notification Talk - - - - CloudProviderWrapper - - Quit sync client - Leading Space in Translation geändert - Quitter le client de synchro - - - - ConflictDelegate - - Local version - Version locale - - - Server version - Version du serveur - - - - FileProviderFastEnumerationSettings - - Fast sync will only sync changes in files and folders within folders that have been explored. This can significantly increase responsiveness on initial configuration of virtual files. However, it will cause redundant downloads of files moved to an unexplored folder. - Trailing Space in Translation - La synchronisation rapide va uniquement synchroniser les modifications des fichiers et des dossiers dans les dossiers qui ont été explorés. Ceci peut significativement augmenter la réactivité sur la configuration initiale des fichiers virtuelles. Cependant, cela va causer des téléchargements redondants de fichiers déplacés dans un dossier non exploré. - - - - FileProviderFileDelegate - - Delete - Supprimer - - - - FileProviderSettings - - Signal file provider domain - Translated by us - Indiquer le domaine du fournisseur de fichiers - - - - FileProviderStorageInfo - - Evict local copies... - Supprimer les copies locales - - - - FileProviderSyncStatus - - All synced! - Tout est synchronisé ! - - - - FolderWizardSelectiveSync - - Add Folder Sync - Added by us - Ajouter une synchronisation de dossiers - - - Step 3 of 3: Selektive Synchronisation - Added by us - Étape 3 sur 3 : synchronisation sélective - - - - FolderWizardSourcePage - - &Choose - Added by us - &Choisir - - - Select a folder on your hard drive that should be permanetly connected to your %1. All files and subfolders are automatically uploaded and synchronized - Added by us - Sélectionnez sur votre disque dur un dossier qui doit être en permanence rattaché à votre %1. Tous les fichiers et sous-dossiers sont automatiquement importés et synchronisés. - - - Step 1 of 3: Select local folder - Added by us - Étape 1 sur 3 : sélectionner un dossier local - - - - FolderWizardTargetPage - - Both folders are permanently linked and the respective contents are automatically synchronized and updated. - Added by us - Les deux dossiers sont en permanence rattachés et leur contenu respectif est automatiquement synchronisé et importé. - - - Create folder - Removed trailing space in translation - Créer un dossier - - - Please now select or create a target folder in your %1 where the content should be uploaded and synchronized. - Added by us - À présent, sélectionnez ou créez dans votre %1 un dossier cible dans lequel le contenu doit être importé et synchronisé. - - - Step 2 of 3: Directory in your %1 - Added by us - Étape 2 sur 3 : répertoire dans votre %1 - - - - OCC::AccountManager - - %1 accounts were detected from a legacy desktop client. + + + + + Agree + Accepter + + + Back + Retour + + + Necessary data + Données indispensables + + + Required to ensure that the software can be used as expected + Nécessaire pour s'assurer que le logiciel peut être utilisé comme prévu + + + Save Settings + Sauvegarder les paramètres + + + Send anonymous use + Envoyer utilisation anonyme + + + Settings + Paramètres + + + This application uses tracking technologies. By clicking on Agree, you accept the processing of your anonymized data. You can adjust your choices at any time via the settings. <br/> <br/>Information on data processing and more can be found in our <a href='https://wl.hidrive.com/easy/0005'>privacy policy</a>. + Cette application utilise des technologies de suivi. En cliquant sur Accepter, vous acceptez le traitement de vos données anonymes. Vous pouvez modifier vos choix à tout moment via les paramètres. <br/> <br/>Des informations sur le traitement des données et autres peuvent être trouvées dans notre <a href='https://wl.hidrive.com/easy/0025'>politique de confidentialité</a>. + + + This helps us to optimize the software and to better identify system crashes and unexpected errors. + Cela nous aide à optimiser le logiciel et à mieux identifier les pannes de système et les erreurs inattendues. + + + We collect anonymized data to optimize our app. We use software solutions from various partners for this purpose. We want to give you full transparency and freedom of choice regarding the collection and processing of your anonymized usage. You can change your settings at any time under the menu item Data Protection. + Nous collectons des données anonymes pour optimiser notre application. Nous utilisons à cet effet des solutions logicielles de différents partenaires. Nous souhaitons vous offrir une transparence totale et une liberté de choix en ce qui concerne la collecte et le traitement de votre utilisation anonyme. Vous pouvez modifier vos paramètres à tout moment dans le menu Protection des données. + + + + BasicComboBox + + Clear status message menu + Menu d'effacement du message de statut + + + + CallNotificationDialog + + Answer Talk call notification + Répondre à la notification d'appel de Talk + + + Decline Talk call notification + Décliner la notification d'appel de Talk + + + Talk notification caller avatar + Avatar de l'appelant de la notification Talk + + + + CloudProviderWrapper + + Quit sync client + Quitter le client de synchro + + + + ConflictDelegate + + Local version + Version locale + + + Server version + Version du serveur + + + + FileProviderFastEnumerationSettings + + Fast sync will only sync changes in files and folders within folders that have been explored. This can significantly increase responsiveness on initial configuration of virtual files. However, it will cause redundant downloads of files moved to an unexplored folder. + La synchronisation rapide va uniquement synchroniser les modifications des fichiers et des dossiers dans les dossiers qui ont été explorés. Ceci peut significativement augmenter la réactivité sur la configuration initiale des fichiers virtuelles. Cependant, cela va causer des téléchargements redondants de fichiers déplacés dans un dossier non exploré. + + + + FileProviderFileDelegate + + Delete + Supprimer + + + + FileProviderSettings + + Signal file provider domain + Indiquer le domaine du fournisseur de fichiers + + + + FileProviderStorageInfo + + Evict local copies... + Supprimer les copies locales + + + + FileProviderSyncStatus + + All synced! + Tout est synchronisé ! + + + + FolderWizardSelectiveSync + + Add Folder Sync + Ajouter une synchronisation de dossiers + + + Step 3 of 3: Selektive Synchronisation + Étape 3 sur 3 : synchronisation sélective + + + + FolderWizardSourcePage + + &Choose + &Choisir + + + Select a folder on your hard drive that should be permanetly connected to your %1. All files and subfolders are automatically uploaded and synchronized + Sélectionnez sur votre disque dur un dossier qui doit être en permanence rattaché à votre %1. Tous les fichiers et sous-dossiers sont automatiquement importés et synchronisés. + + + Step 1 of 3: Select local folder + Étape 1 sur 3 : sélectionner un dossier local + + + + FolderWizardTargetPage + + Both folders are permanently linked and the respective contents are automatically synchronized and updated. + Les deux dossiers sont en permanence rattachés et leur contenu respectif est automatiquement synchronisé et importé. + + + Create folder + Créer un dossier + + + Please now select or create a target folder in your %1 where the content should be uploaded and synchronized. + À présent, sélectionnez ou créez dans votre %1 un dossier cible dans lequel le contenu doit être importé et synchronisé. + + + Step 2 of 3: Directory in your %1 + Étape 2 sur 3 : répertoire dans votre %1 + + + + OCC::AccountManager + + %1 accounts were detected from a legacy desktop client. Should the accounts be imported? - %1 comptes ont été détectés à partir d'un ancien client de bureau. + %1 comptes ont été détectés à partir d'un ancien client de bureau. Doivent-ils être importés ? - - - - OCC::AccountSettings - - %1 (%3%) of %2 in use. Some folders, including network mounted or shared folders, might have different limits. - Trailing Space in Translation - %1 (%3%) utilisés sur %2. Certains dossiers, montés depuis le réseau ou partagés, peuvent avoir des limites différentes. - - - Expand Memory - Added by us - Augmenter la mémoire - - - Force sync now - Trailing Space in Translation - Forcer la synchronisation maintenant - - - Storage space %1% occupied - Added by us - Espace de stockage %1% occupé - - - There are folders that were not synchronized because they are external storages: - Trailing Space in Source - Certains dossiers n'ont pas été synchronisés parce qu'ils sont localisés sur un stockage externe : - - - There are folders that were not synchronized because they are too big or external storages: - Trailing Space in Source - Certains dossiers n'ont pas été synchronisés parce qu'ils sont localisés sur un stockage externe ou qu'ils sont de taille trop importante : - - - There are folders that were not synchronized because they are too big: - Trailing Space in Source - Certains dossiers n'ont pas été synchronisés parce qu'ils sont de taille trop importante : - - - This will encrypt your folder and all files within it. These files will no longer be accessible without your encryption mnemonic key. + + + + OCC::AccountSettings + + %1 (%3%) of %2 in use. Some folders, including network mounted or shared folders, might have different limits. + %1 (%3%) utilisés sur %2. Certains dossiers, montés depuis le réseau ou partagés, peuvent avoir des limites différentes. + + + Expand Memory + Augmenter la mémoire + + + Force sync now + Forcer la synchronisation maintenant + + + https://wl.hidrive.com/easy/0057 + https://wl.hidrive.com/easy/0057 + + + Storage space %1% occupied + Espace de stockage %1% occupé + + + There are folders that were not synchronized because they are external storages: + Certains dossiers n'ont pas été synchronisés parce qu'ils sont localisés sur un stockage externe : + + + There are folders that were not synchronized because they are too big or external storages: + Certains dossiers n'ont pas été synchronisés parce qu'ils sont localisés sur un stockage externe ou qu'ils sont de taille trop importante : + + + There are folders that were not synchronized because they are too big: + Certains dossiers n'ont pas été synchronisés parce qu'ils sont de taille trop importante : + + + This will encrypt your folder and all files within it. These files will no longer be accessible without your encryption mnemonic key. <b>This process is not reversible. Are you sure you want to proceed?</b> - Modifed by us - Cette opération cryptera votre dossier et tous les fichiers qu'il contient. Ces fichiers ne seront plus accessibles sans votre clé mnémonique de cryptage. -<b>Ce processus n'est pas réversible. Êtes-vous sûr de vouloir continuer ? - - - To protect your Cryptographic Identity, we encrypt it with a mnemonic of 12 dictionary words. Please note these down and keep them safe. They will be needed to add other devices to your account (like your mobile phone or laptop). - Trailing Space in Translation - Pour protéger votre identité cryptographique, nous la chiffrons avec une phrase secrète de 12 mots du dictionnaire. Veuillez la noter et la garder en sécurité. Elle sera nécessaire pour ajouter d’autres appareils à votre compte (comme votre smartphone ou votre ordinateur portable). - - - https://wl.hidrive.com/easy/0057 - Added by us - https://wl.hidrive.com/easy/0057 - - - - OCC::CaseClashFilenameDialog - - Existing file - modifed by us french - Dossier existant - - - The file could not be synced because it generates a case clash conflict with an existing file on this system. - modifed by us french - Le fichier n'a pas pu être synchronisé car il génère un conflit de cas avec un fichier existant sur ce système. - - - - OCC::DiscoverySingleDirectoryJob - - Encrypted metadata setup error! - added by us french - Erreur de configuration des métadonnées chiffrées ! - - - Encrypted metadata setup error: initial signature from server is empty. - Translated by us - Erreur de configuration des métadonnées cryptées : la signature initiale du serveur est vide. - - - - OCC::Flow2AuthWidget - - Open Browser - Added by us - Ouvrir le navigateur - - - - OCC::Folder - - A folder from an external storage has been added. - Removed trailing linebreak - Un nouveau dossier localisé sur un stockage externe a été ajouté. - - -A large number of files in the server have been deleted. -Please confirm if you'd like to proceed with these deletions. -Alternatively, you can restore all deleted files by uploading from '%1' folder to the server. - Translated by us - Un grand nombre de fichiers ont été supprimés sur le serveur. + Cette opération cryptera votre dossier et tous les fichiers qu'il contient. Ces fichiers ne seront plus accessibles sans votre clé mnémonique de cryptage. +<b>Ce processus n'est pas réversible. Êtes-vous sûr de vouloir continuer ? + + + To protect your Cryptographic Identity, we encrypt it with a mnemonic of 12 dictionary words. Please note these down and keep them safe. They will be needed to add other devices to your account (like your mobile phone or laptop). + Pour protéger votre identité cryptographique, nous la chiffrons avec une phrase secrète de 12 mots du dictionnaire. Veuillez la noter et la garder en sécurité. Elle sera nécessaire pour ajouter d’autres appareils à votre compte (comme votre smartphone ou votre ordinateur portable). + + + + OCC::CaseClashFilenameDialog + + Existing file + Dossier existant + + + The file could not be synced because it generates a case clash conflict with an existing file on this system. + Le fichier n'a pas pu être synchronisé car il génère un conflit de cas avec un fichier existant sur ce système. + + + + OCC::DiscoverySingleDirectoryJob + + Encrypted metadata setup error: initial signature from server is empty. + Erreur de configuration des métadonnées cryptées : la signature initiale du serveur est vide. + + + Encrypted metadata setup error! + Erreur de configuration des métadonnées chiffrées ! + + + + OCC::Flow2AuthWidget + + Open Browser + Ouvrir le navigateur + + + + OCC::Folder + + A folder from an external storage has been added. + Un nouveau dossier localisé sur un stockage externe a été ajouté. + + + A large number of files in the server have been deleted. +Please confirm if you'd like to proceed with these deletions. +Alternatively, you can restore all deleted files by uploading from '%1' folder to the server. + Un grand nombre de fichiers ont été supprimés sur le serveur. Veuillez confirmer si vous souhaitez procéder à ces suppressions. -Vous pouvez également restaurer tous les fichiers supprimés en les téléchargeant depuis le dossier '%1' vers le serveur. - - - A large number of files in your local '%1' folder have been deleted. -Please confirm if you'd like to proceed with these deletions. +Vous pouvez également restaurer tous les fichiers supprimés en les téléchargeant depuis le dossier '%1' vers le serveur. + + + A large number of files in your local '%1' folder have been deleted. +Please confirm if you'd like to proceed with these deletions. Alternatively, you can restore all deleted files by downloading them from the server. - Translated by us - Un grand nombre de fichiers de votre dossier local "%1" ont été supprimés. + Un grand nombre de fichiers de votre dossier local "%1" ont été supprimés. Veuillez confirmer si vous souhaitez procéder à ces suppressions. Vous pouvez également restaurer tous les fichiers supprimés en les téléchargeant depuis le serveur. - - - A new folder larger than %1 MB has been added: %2. - Removed trailing linebreak - Un nouveau dossier de taille supérieure à %1 Mo a été ajouté : %2. - - - Proceed with Deletion - Translated by us - Procéder à la suppression - - - Remove all files? - Translated by us - Supprimer tous les fichiers ? - - - Restore Files from Server - Translated by us - Restaurer des fichiers à partir du serveur - - - Restore Files to Server - Translated by us - Restaurer les fichiers sur le serveur - - - - OCC::FolderCreationDialog - - %1 Create new folder - Added by us - %1 Créer un nouveau dossier - - - - OCC::FolderMan - - (backup %1) - Removed leading space - (sauvegarde %1) - - - (backup) - Removed leading space - (sauvegarde) - - - - OCC::FolderStatusDelegate - - Synchronize any other local folder with your %1 - Added by us - Synchronisez n’importe quel autre dossier local avec votre %1 - - - - OCC::FolderWizardLocalPath - - Choose - Added by us - Choisissez - - - - OCC::FolderWizardRemotePath - - Enter the name of the new folder to be created below "%1": - Removed trailing space - Entrez le nom du nouveau dossier à créer dans "%1" : - - - - OCC::FolderWizardSelectiveSync - - Use virtual files instead of downloading content immediately %1 - Utiliser les fichiers virtuels %1 - - - - OCC::GeneralSettings - - &Analysis data collection for needs-based design - Added by us - &Collecte des données d’analyse pour une conception basée sur les besoins - - - Ask for confirmation before synchronizing external storages - Has to be repaired in code - Confirmation avant de synchroniser des stockages externes - - - Ask for confirmation before synchronizing new folders larger than - Has to be repaired in code - Demander la confirmation avant de synchroniser les dossiers plus grands que - - - Automatically disable synchronisation of folders that overcome limit - Has to be repaired in code - Désactiver automatiquement la synchronisation des dossiers qui dépassent la limite - - - Data Protection - Added by us - Protection des données - - - More Information - Added by us - Plus d’informations - - - Open Source Software - Added by us - Logiciel libre - - - Privacy Policy - Added by us - Politique de confidentialité - - - Show sync folders in &Explorer's navigation pane - Afficher les dossiers synchronisés dans le panneau de navigation de l'&Explorateur de fichiers - - - Updates - Still used by us - Mises à jour - - - https://wl.hidrive.com/easy/0004 - https://wl.hidrive.com/easy/0004 - - - https://wl.hidrive.com/easy/0005 - https://wl.hidrive.com/easy/0005 - - - https://wl.hidrive.com/easy/0006 - https://wl.hidrive.com/easy/0006 - - - https://wl.hidrive.com/easy/0007 - https://wl.hidrive.com/easy/0007 - - - - OCC::IgnoreListTableWidget - - Add a new ignore pattern: - modifed by us spanish - Ajouter un nouveau motif d'exclusion: - - - Files or folders matching a pattern will not be synchronized. + + + A new folder larger than %1 MB has been added: %2. + Un nouveau dossier de taille supérieure à %1 Mo a été ajouté : %2. + + + Proceed with Deletion + Procéder à la suppression + + + Remove all files? + Supprimer tous les fichiers ? + + + Restore Files from Server + Restaurer des fichiers à partir du serveur + + + Restore Files to Server + Restaurer les fichiers sur le serveur + + + + OCC::FolderCreationDialog + + %1 Create new folder + %1 Créer un nouveau dossier + + + + OCC::FolderMan + + (backup %1) + (sauvegarde %1) + + + (backup) + (sauvegarde) + + + + OCC::FolderStatusDelegate + + Synchronize any other local folder with your %1 + Synchronisez n’importe quel autre dossier local avec votre %1 + + + + OCC::FolderWizardLocalPath + + Choose + Choisissez + + + + OCC::FolderWizardRemotePath + + Enter the name of the new folder to be created below "%1": + Entrez le nom du nouveau dossier à créer dans "%1" : + + + + OCC::FolderWizardSelectiveSync + + Use virtual files instead of downloading content immediately %1 + Utiliser les fichiers virtuels %1 + + + + OCC::GeneralSettings + + &Analysis data collection for needs-based design + &Collecte des données d’analyse pour une conception basée sur les besoins + + + Ask for confirmation before synchronizing external storages + Confirmation avant de synchroniser des stockages externes + + + Ask for confirmation before synchronizing new folders larger than + Demander la confirmation avant de synchroniser les dossiers plus grands que + + + Automatically disable synchronisation of folders that overcome limit + Désactiver automatiquement la synchronisation des dossiers qui dépassent la limite + + + Data Protection + Protection des données + + + https://wl.hidrive.com/easy/0004 + https://wl.hidrive.com/easy/0024 + + + https://wl.hidrive.com/easy/0005 + https://wl.hidrive.com/easy/0025 + + + https://wl.hidrive.com/easy/0006 + https://wl.hidrive.com/easy/0006 + + + https://wl.hidrive.com/easy/0007 + https://wl.hidrive.com/easy/0027 + + + More Information + Plus d’informations + + + Open Source Software + Logiciel libre + + + Privacy Policy + Politique de confidentialité + + + Show sync folders in &Explorer's navigation pane + Afficher les dossiers synchronisés dans le panneau de navigation de l'&Explorateur de fichiers + + + Updates + Mises à jour + + + + OCC::IgnoreListTableWidget + + Add a new ignore pattern: + Ajouter un nouveau motif d'exclusion: + + + Files or folders matching a pattern will not be synchronized. Items where deletion is allowed will be deleted if they prevent a directory from being removed. This is useful for meta data. - Modifed by us spanish - Les fichiers ou dossiers qui correspondent à ce modèle ne seront pas synchronisés. + Les fichiers ou dossiers qui correspondent à ce modèle ne seront pas synchronisés. -Les objets autorisés à être supprimés le seront s'ils empêchent la suppression d'un dossier. Ceci est utile pour les métadonnées. - - - Ignore Pattern - Added by us - Ignorer le modèle - - - - OCC::NetworkSettings - - No proxy - Aucun serveur proxy - - - - OCC::PropagateLocalMkdir - - Could not create folder %1 - Trailing space in translation removed - Impossible de créer le dossier %1 - - - - OCC::PropagateLocalRename - - Folder %1 cannot be renamed because of a local file or folder name clash! - Translated by us - Le dossier %1 ne peut pas être renommé en raison d’un conflit de nom avec un fichier ou un dossier local ! - - - - OCC::PropagateUploadFileCommon - - Upload of %1 exceeds the quota for the folder - Trailing space in translation removed - L'envoi de %1 amène un dépassement de quota pour le dossier - - - - OCC::sesSnackBar - - Success - Added by us - Réussite - - - - OCC::SettingsDialog - - New account - Added by us - Nouveau compte - - - - OCC::SslButton - - This connection is NOT secure as it is not encrypted. - Removed trailing linebreak - Cette connexion n'est PAS sécurisée car elle n'est pas chiffrée. - - - This connection is encrypted using %1 bit %2. - Removed trailing linebreak - Cette connexion est chiffrée en utilisant %1 bit %2. - - - - OCC::Theme - - easy/0118 - Added by us - easy/0128 - - - - OCC::UpdateE2eeFolderMetadataJob - - Failed to finalize item. - Modifed by us - Échec de finalisation de l’élément. - - - Failed to unlock encrypted folder. - Modifed by us - Échec du déverrouillage du dossier chiffré. - - - - OCC::UpdateE2eeFolderUsersMetadataJob - - Could not add or remove user %1 to access folder %2 - Translated by us - Impossible de supprimer l’utilisateur %1 au dossier d’accès %2 ou de l’y ajouter - - - - OCC::User - - %1 notifications - Translated by us - %1 notifications - - - - OCC::WebFlowCredentials - - <b>You have been logged out of your account %1 at %2. Please login again.</b> - Modifed by us - <b>Vous avez été déconnecté(e) de votre compte %1 à %2. Veuillez vous reconnecter.</b> - - - - OwncloudAdvancedSetupPage - - <html><head/><body><p>If this box is checked, existing content in the local folder will be erased to start a clean sync from the server.</p><p>Do not check this if the local content should be uploaded to the servers folder.</p></body></html> - Modifed by us - <html><head/><body><p>Si cette case est cochée, le contenu existant du dossier local sera supprimé pour démarrer une synchronisation propre depuis le serveur.</p><p>Ne pas cocher si le contenu local doit être téléversé vers le serveur.</p></body></html> - - - - progress - - Updated local virtual files metadata - Translated by us - Métadonnées des fichiers virtuels locaux mises à jour - - - updating local virtual files metadata - Translated by us - Mise à jour des métadonnées des fichiers virtuels locaux - - - - QObject - - Could not create debug archive in selected location! - Translated by us - Impossible de créer une archive de débogage à l’emplacement sélectionné ! - - - Failed to create debug archive - Translated by us - Échec de création de l’archive de débogage - - - The directory %1 cannot be part of your sync directory. Please choose another folder. - Added by us - La répertoire %1 ne peut pas faire partie de votre répertoire de synchronisation. Veuillez choisir un autre dossier. - - - - SesTrayHeader - - Open Nextcloud in browser - Added by us - Ouvrir HiDrive Next dans le navigateur - - - Website - Added by us - Site Web - - - - ShareDetailsPage - - Copy share link - modifed by us - Copier le lien - - - Custom Permissions - Added by us - Autorisations personnalisées - - - Enter the note to recipient - Added by us - Saisir la remarque à l’attention du destinataire - - - Share link copied! - modifed by us - Lien copié ! - - - - TrayFoldersMenuButton - - Files - Added by us - Fichiers - - - - \ No newline at end of file +Les objets autorisés à être supprimés le seront s'ils empêchent la suppression d'un dossier. Ceci est utile pour les métadonnées. + + + Ignore Pattern + Ignorer le modèle + + + + OCC::NetworkSettings + + No proxy + Aucun serveur proxy + + + + OCC::PropagateLocalMkdir + + Could not create folder %1 + Impossible de créer le dossier %1 + + + + OCC::PropagateLocalRename + + Folder %1 cannot be renamed because of a local file or folder name clash! + Le dossier %1 ne peut pas être renommé en raison d’un conflit de nom avec un fichier ou un dossier local ! + + + + OCC::PropagateUploadFileCommon + + Upload of %1 exceeds the quota for the folder + L'envoi de %1 amène un dépassement de quota pour le dossier + + + + OCC::SettingsDialog + + New account + Nouveau compte + + + + OCC::SslButton + + This connection is encrypted using %1 bit %2. + Cette connexion est chiffrée en utilisant %1 bit %2. + + + This connection is NOT secure as it is not encrypted. + Cette connexion n'est PAS sécurisée car elle n'est pas chiffrée. + + + + OCC::Theme + + easy/0118 + easy/0128 + + + + OCC::UpdateE2eeFolderMetadataJob + + Failed to finalize item. + Échec de finalisation de l’élément. + + + Failed to unlock encrypted folder. + Échec du déverrouillage du dossier chiffré. + + + + OCC::UpdateE2eeFolderUsersMetadataJob + + Could not add or remove user %1 to access folder %2 + Impossible de supprimer l’utilisateur %1 au dossier d’accès %2 ou de l’y ajouter + + + + OCC::User + + %1 notifications + %1 notifications + + + + OCC::WebFlowCredentials + + <b>You have been logged out of your account %1 at %2. Please login again.</b> + <b>Vous avez été déconnecté(e) de votre compte %1 à %2. Veuillez vous reconnecter.</b> + + + + OCC::sesSnackBar + + Success + Réussite + + + + OwncloudAdvancedSetupPage + + <html><head/><body><p>If this box is checked, existing content in the local folder will be erased to start a clean sync from the server.</p><p>Do not check this if the local content should be uploaded to the servers folder.</p></body></html> + <html><head/><body><p>Si cette case est cochée, le contenu existant du dossier local sera supprimé pour démarrer une synchronisation propre depuis le serveur.</p><p>Ne pas cocher si le contenu local doit être téléversé vers le serveur.</p></body></html> + + + + QObject + + Could not create debug archive in selected location! + Impossible de créer une archive de débogage à l’emplacement sélectionné ! + + + Failed to create debug archive + Échec de création de l’archive de débogage + + + The directory %1 cannot be part of your sync directory. Please choose another folder. + La répertoire %1 ne peut pas faire partie de votre répertoire de synchronisation. Veuillez choisir un autre dossier. + + + + SesTrayHeader + + Open Nextcloud in browser + Ouvrir HiDrive Next dans le navigateur + + + Website + Site Web + + + + ShareDetailsPage + + Copy share link + Copier le lien + + + Custom Permissions + Autorisations personnalisées + + + Enter the note to recipient + Saisir la remarque à l’attention du destinataire + + + Share link copied! + Lien copié ! + + + + TrayFoldersMenuButton + + Files + Fichiers + + + + progress + + Updated local virtual files metadata + Métadonnées des fichiers virtuels locaux mises à jour + + + updating local virtual files metadata + Mise à jour des métadonnées des fichiers virtuels locaux + + + diff --git a/translation_scripts/it.ts b/translation_scripts/it.ts new file mode 100644 index 0000000000000..222966131c6fa --- /dev/null +++ b/translation_scripts/it.ts @@ -0,0 +1,577 @@ + + + + + Agree + Consenti + + + Back + Indietro + + + Necessary data + Dati necessari + + + Required to ensure that the software can be used as expected + Necessario per garantire che il software possa essere utilizzato come previsto. + + + Save Settings + Salva le impostazioni + + + Send anonymous use + Invia l'uso anonimo + + + Settings + Impostazioni + + + This application uses tracking technologies. By clicking on Agree, you accept the processing of your anonymized data. You can adjust your choices at any time via the settings. <br/> <br/>Information on data processing and more can be found in our <a href='https://wl.hidrive.com/easy/0005'>privacy policy</a>. + Questa applicazione utilizza tecnologie di tracciamento. Facendo clic su Accetto, si accetta il trattamento dei propri dati anonimizzati. È possibile modificare le proprie scelte in qualsiasi momento tramite le impostazioni. <br/> <br/>Informazioni sul trattamento dei dati e altro ancora sono disponibili nella nostra <a href='https://wl.hidrive.com/easy/0035'>politica sulla privacy</a>. + + + This helps us to optimize the software and to better identify system crashes and unexpected errors. + Questo ci aiuta a ottimizzare il software e a identificare meglio i crash di sistema e gli errori imprevisti. + + + We collect anonymized data to optimize our app. We use software solutions from various partners for this purpose. We want to give you full transparency and freedom of choice regarding the collection and processing of your anonymized usage. You can change your settings at any time under the menu item Data Protection. + Raccogliamo dati anonimizzati per ottimizzare la nostra applicazione. A tale scopo utilizziamo soluzioni software di vari partner. Desideriamo offrirvi piena trasparenza e libertà di scelta in merito alla raccolta e all'elaborazione dei vostri dati anonimizzati. Potete modificare le vostre impostazioni in qualsiasi momento alla voce di menu Protezione dei dati. + + + + BasicComboBox + + Clear status message menu + Cancella messaggio di stato + + + + CallNotificationDialog + + Answer Talk call notification + Notifica di risposta chiamata Talk + + + Decline Talk call notification + Notifica di rifiuto chiamata Talk + + + Talk notification caller avatar + Avatar chiamante notifica Talk + + + + CloudProviderWrapper + + Quit sync client + Chiudi il client di sincronizzazione + + + + ConflictDelegate + + Local version + Versione locale + + + Server version + Versione del server + + + + FileProviderFastEnumerationSettings + + Fast sync will only sync changes in files and folders within folders that have been explored. This can significantly increase responsiveness on initial configuration of virtual files. However, it will cause redundant downloads of files moved to an unexplored folder. + La sincronizzazione veloce sincronizzerà cambiamenti solo sui file e cartelle che sono stati esplorati. Questo migliorarerà sensibilmente la responsività, specie al primo avvio coi file virtuali. Per contro, causerà lo scaricamento ripetuto di file spostati verso una cartella inesplorata. + + + + FileProviderFileDelegate + + Delete + Cancella + + + + FileProviderSettings + + Signal file provider domain + Dominio del fornitore del file di segnale + + + + FileProviderStorageInfo + + Evict local copies... + Evita copie locali... + + + + FileProviderSyncStatus + + All synced! + Tutto sincronizzato! + + + + FolderWizardSelectiveSync + + Add Folder Sync + Aggiungi cartella di sincronizzazione + + + Step 3 of 3: Selektive Synchronisation + Fase 3 di 3: sincronizzazione selettiva + + + + FolderWizardSourcePage + + &Choose + S&cegli + + + Select a folder on your hard drive that should be permanetly connected to your %1. All files and subfolders are automatically uploaded and synchronized + Selezionare una cartella sul disco rigido che deve essere collegata in modo permanente al %1. Tutti i file e le sottocartelle vengono caricati e sincronizzati automaticamente. + + + Step 1 of 3: Select local folder + Passo 1 di 3: selezionare la cartella locale + + + + FolderWizardTargetPage + + Both folders are permanently linked and the respective contents are automatically synchronized and updated. + Le due cartelle sono collegate in modo permanente e i rispettivi contenuti vengono sincronizzati e aggiornati automaticamente. + + + Create folder + Crea cartella + + + Please now select or create a target folder in your %1 where the content should be uploaded and synchronized. + Selezionare o creare una cartella di destinazione nel proprio %1 in cui caricare e sincronizzare il contenuto. + + + Step 2 of 3: Directory in your %1 + Fase 2 di 3: directory nel vostro %1 + + + + OCC::AccountManager + + %1 accounts were detected from a legacy desktop client. +Should the accounts be imported? + %1 account trovati da una versione precedente del client desktop. + Importare gli account? + + + + OCC::AccountSettings + + %1 (%3%) of %2 in use. Some folders, including network mounted or shared folders, might have different limits. + %1 (%3%) di %2 in uso. Alcune cartelle, incluse quelle montate in rete o le cartelle condivise, potrebbero avere limiti diversi. + + + Expand Memory + Upgrade Storage + + + Force sync now + Forza ora la sincronizzazione + + + https://wl.hidrive.com/easy/0057 + https://wl.hidrive.com/easy/0067 + + + Storage space %1% occupied + Spazio di Storage %1% occupato + + + There are folders that were not synchronized because they are external storages: + Ci sono nuove cartelle che non sono state sincronizzate poiché sono archiviazioni esterne: + + + There are folders that were not synchronized because they are too big or external storages: + Ci sono nuove cartelle che non sono state sincronizzate poiché sono troppo grandi o archiviazioni esterne: + + + There are folders that were not synchronized because they are too big: + Ci sono nuove cartelle che non sono state sincronizzate poiché sono troppo grandi: + + + This will encrypt your folder and all files within it. These files will no longer be accessible without your encryption mnemonic key. +<b>This process is not reversible. Are you sure you want to proceed?</b> + Verrà cifrata la cartella e tutti i file al suo interno. Questi file non saranno più accessibili senza la tua chiave mnemonica di crittografia. + <b>Questo processo è irreversibile. Vuoi davvero procedere?</b> + + + To protect your Cryptographic Identity, we encrypt it with a mnemonic of 12 dictionary words. Please note these down and keep them safe. They will be needed to add other devices to your account (like your mobile phone or laptop). + Per proteggere la tua identità crittografica, la cifriamo con un codice mnemonico di 12 parole di dizionario. Annotale e tienile al sicuro. Saranno necessarie per aggiungere altri dispositivi al tuo account (come il tuo smartphone o il portatile). + + + + OCC::CaseClashFilenameDialog + + Existing file + File esistente + + + The file could not be synced because it generates a case clash conflict with an existing file on this system. + Il file non può essere sincronizzato perché genera un conflitto di maiuscole/minuscole con un altro file già esistente nel sistema. + + + + OCC::DiscoverySingleDirectoryJob + + Encrypted metadata setup error: initial signature from server is empty. + Errore di configurazione dei metadati crittografati: la firma iniziale del server è vuota. + + + Encrypted metadata setup error! + Eerrore nell'impostazione dei metadati di crittografia! + + + + OCC::Flow2AuthWidget + + Open Browser + Apri il browser + + + + OCC::Folder + + A folder from an external storage has been added. + Una nuova cartella da un'archiviazione esterna è stata aggiunta. + + + A large number of files in the server have been deleted. +Please confirm if you'd like to proceed with these deletions. +Alternatively, you can restore all deleted files by uploading from '%1' folder to the server. + Un gran numero di file nel server è stato eliminato. + Conferma se vuoi procedere con queste eliminazioni. + In alternativa, puoi ripristinare tutti i file eliminati caricandoli dalla cartella '%1' sul server. + + + A large number of files in your local '%1' folder have been deleted. +Please confirm if you'd like to proceed with these deletions. +Alternatively, you can restore all deleted files by downloading them from the server. + Un gran numero di file nella cartella locale '%1' sono stati eliminati. + Si prega di confermare se si desidera procedere con queste eliminazioni. + In alternativa, è possibile ripristinare tutti i file eliminati scaricandoli dal server. + + + A new folder larger than %1 MB has been added: %2. + Una nuova cartella più grande di %1 MB è stata aggiunta: %2. + + + Proceed with Deletion + Procedi con la cancellazione + + + Remove all files? + Rimuovere tutti i file? + + + Restore Files from Server + Ripristina i file dal server + + + Restore Files to Server + Ripristina i file sul server + + + + OCC::FolderCreationDialog + + %1 Create new folder + %1 Crea una nuova cartella + + + + OCC::FolderMan + + (backup %1) + (copia di sicurezza %1) + + + (backup) + (copia di sicurezza) + + + + OCC::FolderStatusDelegate + + Synchronize any other local folder with your %1 + Sincronizzare qualsiasi altra cartella locale con la %1 + + + + OCC::FolderWizardLocalPath + + Choose + Scegliere + + + + OCC::FolderWizardRemotePath + + Enter the name of the new folder to be created below "%1": + Digita il nome della nuova cartella da creare sotto a "%1": + + + + OCC::FolderWizardSelectiveSync + + Use virtual files instead of downloading content immediately %1 + Usa file virtuali invece di scaricare immediatamente il contenuto %1 + + + + OCC::GeneralSettings + + &Analysis data collection for needs-based design + Analisi della raccolta dei dati per la progettazione basata sui usability + + + Ask for confirmation before synchronizing external storages + Chiedi conferma prima di sincronizzare storage esterni + + + Ask for confirmation before synchronizing new folders larger than + Chiedi conferma prima di sincronizzare cartelle più grandi di + + + Automatically disable synchronisation of folders that overcome limit + Disabilita automaticamente la sincronizzazione delle cartelle che superano il limite + + + Data Protection + disposizioni in materia di protezione dei dati + + + https://wl.hidrive.com/easy/0004 + https://wl.hidrive.com/easy/0034 + + + https://wl.hidrive.com/easy/0005 + https://wl.hidrive.com/easy/0035 + + + https://wl.hidrive.com/easy/0006 + https://wl.hidrive.com/easy/0006 + + + https://wl.hidrive.com/easy/0007 + https://wl.hidrive.com/easy/0037 + + + More Information + Ulteriori informazioni + + + Open Source Software + Software open source + + + Privacy Policy + Informativa sulla privacy + + + Show sync folders in &Explorer's navigation pane + Mostra le cartelle di sincronizzazione nel pannello di navigazione di &Explorer + + + Updates + Aggiornamenti + + + + OCC::IgnoreListTableWidget + + Add a new ignore pattern: + Aggiungi un nuovo modello di esclusione: + + + Files or folders matching a pattern will not be synchronized. + +Items where deletion is allowed will be deleted if they prevent a directory from being removed. This is useful for meta data. + I file e le cartelle che verificano un modello non saranno sincronizzati. + + Gli elementi per i quali è consentita l'eliminazione saranno eliminati se impediscono la rimozione di una cartella. Utile per i metadati. + + + Ignore Pattern + Modello di esclusione + + + + OCC::NetworkSettings + + No proxy + Nessun proxy + + + + OCC::PropagateLocalMkdir + + Could not create folder %1 + Impossibile creare la cartella %1 + + + + OCC::PropagateLocalRename + + Folder %1 cannot be renamed because of a local file or folder name clash! + La cartella %1 non può essere rinominata perché il suo nome conflitta con quello di un altro file o cartella! + + + + OCC::PropagateUploadFileCommon + + Upload of %1 exceeds the quota for the folder + Il caricamento di %1 supera la quota per la cartella + + + + OCC::SettingsDialog + + New account + Nuovo account + + + + OCC::SslButton + + This connection is encrypted using %1 bit %2. + Questa connessione è cifrata utilizzando %1 bit %2. + + + This connection is NOT secure as it is not encrypted. + Questa connessione NON è sicura poiché non è cifrata. + + + + OCC::Theme + + easy/0118 + easy/0138 + + + + OCC::UpdateE2eeFolderMetadataJob + + Failed to finalize item. + Impossibile finalizzare l'elemento. + + + Failed to unlock encrypted folder. + Sblocco della cartella cifrata non riuscito. + + + + OCC::UpdateE2eeFolderUsersMetadataJob + + Could not add or remove user %1 to access folder %2 + Impossibile aggiungere o rimuovere l'utente %1 per accedere alla cartella %2 + + + + OCC::User + + %1 notifications + %1 Notifiche + + + + OCC::WebFlowCredentials + + <b>You have been logged out of your account %1 at %2. Please login again.</b> + <b>Sei stato disconnesso dal tuo utente %1 su %2. Accedi nuovamente.</b> + + + + OCC::sesSnackBar + + Success + successo + + + + OwncloudAdvancedSetupPage + + <html><head/><body><p>If this box is checked, existing content in the local folder will be erased to start a clean sync from the server.</p><p>Do not check this if the local content should be uploaded to the servers folder.</p></body></html> + <html><head/><body><p>Se questa casella è marcata, il contenuto della cartella locale sarà cancellato per avviare una nuova sincronizzazione dal server.</p><p>Non marcarla se il contenuto locale deve essere caricato nella cartella del server.</p></body></html> + + + + QObject + + Could not create debug archive in selected location! + Impossibile creare archivio con i log per il debug nel percorso selezionato! + + + Failed to create debug archive + Impossibile creare archivio con i log per il debug + + + The directory %1 cannot be part of your sync directory. Please choose another folder. + La directory %1 non può far parte della directory di sincronizzazione. Selezionare un'altra cartella. + + + + SesTrayHeader + + Open Nextcloud in browser + Apri HiDrive Next nel browser + + + Website + Homepage + + + + ShareDetailsPage + + Copy share link + Copia il collegamento di condivisione + + + Custom Permissions + Permessi definiti dall'utente + + + Enter the note to recipient + Inserire una nota per il destinatario + + + Share link copied! + Collegamento del link di condivisione copiato! + + + + TrayFoldersMenuButton + + Files + File + + + + progress + + Updated local virtual files metadata + Metadati dei file virtuali locali aggiornati + + + updating local virtual files metadata + Aggiornamento dei metadati dei file virtuali locali + + + diff --git a/translation_scripts/nl.ts b/translation_scripts/nl.ts index a38e060d3499f..c35c97efa3047 100644 --- a/translation_scripts/nl.ts +++ b/translation_scripts/nl.ts @@ -1,614 +1,577 @@ - - - - BasicComboBox - - Clear status message menu - Statusbericht wissen - - - - CallNotificationDialog - - Answer Talk call notification - Answer Talk call notification - - - Decline Talk call notification - Afwijzingsmelding voor gesprek - - - Talk notification caller avatar - Spraakmelding beller avatar - - - - CloudProviderWrapper - - Quit sync client - Leading Space in Translation geändert - Afsluiten synchronisatieclient - - - - ConflictDelegate - - Local version - Lokale versie - - - Server version - Serverversie - - - - FileProviderFastEnumerationSettings - - Fast sync will only sync changes in files and folders within folders that have been explored. This can significantly increase responsiveness on initial configuration of virtual files. However, it will cause redundant downloads of files moved to an unexplored folder. - Trailing Space in Translation - Fast sync will only sync changes in files and folders within folders that have been explored. This can significantly increase responsiveness on initial configuration of virtual files. However, it will cause redundant downloads of files moved to an unexplored folder. - - - - FileProviderFileDelegate - - Delete - Verwijderen - - - - FileProviderSettings - - Signal file provider domain - Translated by us - Signal file provider domain - - - - FileProviderStorageInfo - - Evict local copies... - Lokale kopieën verwijderen... - - - - FileProviderSyncStatus - - All synced! - Alles gesynchroniseerd! - - - - FolderWizardSelectiveSync - - Add Folder Sync - Added by us - Mapsynchronisatie toevoegen - - - Step 3 of 3: Selektive Synchronisation - Added by us - Stap 3 van 3: Selektieve synchronisatie - - - - FolderWizardSourcePage - - &Choose - Added by us - &Kiezen - - - Select a folder on your hard drive that should be permanetly connected to your %1. All files and subfolders are automatically uploaded and synchronized - Added by us - Selecteer een map op je harde schijf die permanent verbonden moet zijn met je %1. Alle bestanden en submappen worden automatisch geüpload en gesynchroniseerd. - - - Step 1 of 3: Select local folder - Added by us - Stap 1 van 3: Selecteer lokale map - - - - FolderWizardTargetPage - - Both folders are permanently linked and the respective contents are automatically synchronized and updated. - Added by us - Beide mappen zijn permanent gekoppeld en de respectieve inhoud wordt automatisch gesynchroniseerd en bijgewerkt. - - - Create folder - Removed trailing space in translation - Maak map - - - Please now select or create a target folder in your %1 where the content should be uploaded and synchronized. - Added by us - Selecteer of maak nu een doelmap in uw %1 waar de inhoud moet worden geüpload en gesynchroniseerd. - - - Step 2 of 3: Directory in your %1 - Added by us - Stap 2 van 3: Directory in uw %1 - - - - OCC::AccountManager - - %1 accounts were detected from a legacy desktop client. + + + + + Agree + Akkoord + + + Back + Terug + + + Necessary data + Noodzakelijke gegevens + + + Required to ensure that the software can be used as expected + Vereist om ervoor te zorgen dat de software kan worden gebruikt zoals verwacht + + + Save Settings + Instellingen opslaan + + + Send anonymous use + Anoniem gebruik verzenden + + + Settings + Instellingen + + + This application uses tracking technologies. By clicking on Agree, you accept the processing of your anonymized data. You can adjust your choices at any time via the settings. <br/> <br/>Information on data processing and more can be found in our <a href='https://wl.hidrive.com/easy/0005'>privacy policy</a>. + Deze applicatie maakt gebruik van traceertechnologieën. Door op Akkoord te klikken, accepteert u de verwerking van uw geanonimiseerde gegevens. U kunt uw keuzes op elk gewenst moment aanpassen via de instellingen. <br/> <br/>Informatie over gegevensverwerking en meer kunt u vinden in ons <a href='https://wl.hidrive.com/easy/0045'>privacybeleid</a>. + + + This helps us to optimize the software and to better identify system crashes and unexpected errors. + Dit helpt ons om de software te optimaliseren en om systeemcrashes en onverwachte fouten beter te identificeren. + + + We collect anonymized data to optimize our app. We use software solutions from various partners for this purpose. We want to give you full transparency and freedom of choice regarding the collection and processing of your anonymized usage. You can change your settings at any time under the menu item Data Protection. + We verzamelen geanonimiseerde gegevens om onze app te optimaliseren. Hiervoor gebruiken we softwareoplossingen van verschillende partners. We willen je volledige transparantie en keuzevrijheid geven met betrekking tot het verzamelen en verwerken van je geanonimiseerde gebruik. Je kunt je instellingen op elk gewenst moment wijzigen onder het menu-item Gegevensbescherming. + + + + BasicComboBox + + Clear status message menu + Statusbericht wissen + + + + CallNotificationDialog + + Answer Talk call notification + Answer Talk call notification + + + Decline Talk call notification + Afwijzingsmelding voor gesprek + + + Talk notification caller avatar + Spraakmelding beller avatar + + + + CloudProviderWrapper + + Quit sync client + Afsluiten synchronisatieclient + + + + ConflictDelegate + + Local version + Lokale versie + + + Server version + Serverversie + + + + FileProviderFastEnumerationSettings + + Fast sync will only sync changes in files and folders within folders that have been explored. This can significantly increase responsiveness on initial configuration of virtual files. However, it will cause redundant downloads of files moved to an unexplored folder. + Fast sync will only sync changes in files and folders within folders that have been explored. This can significantly increase responsiveness on initial configuration of virtual files. However, it will cause redundant downloads of files moved to an unexplored folder. + + + + FileProviderFileDelegate + + Delete + Verwijderen + + + + FileProviderSettings + + Signal file provider domain + Signal file provider domain + + + + FileProviderStorageInfo + + Evict local copies... + Lokale kopieën verwijderen... + + + + FileProviderSyncStatus + + All synced! + Alles gesynchroniseerd! + + + + FolderWizardSelectiveSync + + Add Folder Sync + Mapsynchronisatie toevoegen + + + Step 3 of 3: Selektive Synchronisation + Stap 3 van 3: Selektieve synchronisatie + + + + FolderWizardSourcePage + + &Choose + &Kiezen + + + Select a folder on your hard drive that should be permanetly connected to your %1. All files and subfolders are automatically uploaded and synchronized + Selecteer een map op je harde schijf die permanent verbonden moet zijn met je %1. Alle bestanden en submappen worden automatisch geüpload en gesynchroniseerd. + + + Step 1 of 3: Select local folder + Stap 1 van 3: Selecteer lokale map + + + + FolderWizardTargetPage + + Both folders are permanently linked and the respective contents are automatically synchronized and updated. + Beide mappen zijn permanent gekoppeld en de respectieve inhoud wordt automatisch gesynchroniseerd en bijgewerkt. + + + Create folder + Maak map + + + Please now select or create a target folder in your %1 where the content should be uploaded and synchronized. + Selecteer of maak nu een doelmap in uw %1 waar de inhoud moet worden geüpload en gesynchroniseerd. + + + Step 2 of 3: Directory in your %1 + Stap 2 van 3: Directory in uw %1 + + + + OCC::AccountManager + + %1 accounts were detected from a legacy desktop client. Should the accounts be imported? - Er zijn %1 accounts gedetecteerd van een oudere desktopclient. + Er zijn %1 accounts gedetecteerd van een oudere desktopclient. Moeten de accounts worden geïmporteerd? - - - - OCC::AccountSettings - - %1 (%3%) of %2 in use. Some folders, including network mounted or shared folders, might have different limits. - Trailing Space in Translation - %1 (%3%) van %2 in gebruik. Sommige mappen, inclusief netwerkmappen en gedeelde mappen, kunnen andere limieten hebben. - - - Expand Memory - Added by us - Geheugen uitbreiden - - - Force sync now - Trailing Space in Translation - Synchronisatie nu forceren - - - Storage space %1% occupied - Added by us - Opslagruimte %1% bezet - - - There are folders that were not synchronized because they are external storages: - Trailing Space in Source - Er zijn mappen die niet gesynchroniseerd zijn, omdat ze op externe opslag staan: - - - There are folders that were not synchronized because they are too big or external storages: - Trailing Space in Source - Er zijn mappen die niet gesynchroniseerd zijn, omdat ze te groot zijn of op externe opslag staan: - - - There are folders that were not synchronized because they are too big: - Trailing Space in Source - Er zijn mappen die niet gesynchroniseerd zijn, omdat ze te groot zijn: - - - This will encrypt your folder and all files within it. These files will no longer be accessible without your encryption mnemonic key. + + + + OCC::AccountSettings + + %1 (%3%) of %2 in use. Some folders, including network mounted or shared folders, might have different limits. + %1 (%3%) van %2 in gebruik. Sommige mappen, inclusief netwerkmappen en gedeelde mappen, kunnen andere limieten hebben. + + + Expand Memory + Geheugen uitbreiden + + + Force sync now + Synchronisatie nu forceren + + + https://wl.hidrive.com/easy/0057 + https://wl.hidrive.com/easy/0097 + + + Storage space %1% occupied + Opslagruimte %1% bezet + + + There are folders that were not synchronized because they are external storages: + Er zijn mappen die niet gesynchroniseerd zijn, omdat ze op externe opslag staan: + + + There are folders that were not synchronized because they are too big or external storages: + Er zijn mappen die niet gesynchroniseerd zijn, omdat ze te groot zijn of op externe opslag staan: + + + There are folders that were not synchronized because they are too big: + Er zijn mappen die niet gesynchroniseerd zijn, omdat ze te groot zijn: + + + This will encrypt your folder and all files within it. These files will no longer be accessible without your encryption mnemonic key. <b>This process is not reversible. Are you sure you want to proceed?</b> - Modifed by us - Dit zal je map en alle bestanden erin versleutelen. Deze bestanden zullen niet langer toegankelijk zijn zonder je coderingssleutel. + Dit zal je map en alle bestanden erin versleutelen. Deze bestanden zullen niet langer toegankelijk zijn zonder je coderingssleutel. <b>Dit proces is niet omkeerbaar. Weet u zeker dat u wilt doorgaan? - - - To protect your Cryptographic Identity, we encrypt it with a mnemonic of 12 dictionary words. Please note these down and keep them safe. They will be needed to add other devices to your account (like your mobile phone or laptop). - Trailing Space in Translation - To protect your Cryptographic Identity, we encrypt it with a mnemonic of 12 dictionary words. Please note these down and keep them safe. They will be needed to add other devices to your account (like your mobile phone or laptop). - - - https://wl.hidrive.com/easy/0057 - Added by us - https://wl.hidrive.com/easy/0097 - - - - OCC::CaseClashFilenameDialog - - Existing file - modifed by us french - Bestaand bestand - - - The file could not be synced because it generates a case clash conflict with an existing file on this system. - modifed by us french - The file could not be synced because it generates a case clash conflict with an existing file on this system. - - - - OCC::DiscoverySingleDirectoryJob - - Encrypted metadata setup error! - added by us french - Encrypted metadata setup error! - - - Encrypted metadata setup error: initial signature from server is empty. - Translated by us - Fout bij opzetten versleutelde metagegevens: initiële handtekening van server is leeg. - - - - OCC::Flow2AuthWidget - - Open Browser - Added by us - Browser openen - - - - OCC::Folder - - A folder from an external storage has been added. - Removed trailing linebreak - Er is een map op externe opslag toegevoegd. - - - A large number of files in the server have been deleted. -Please confirm if you'd like to proceed with these deletions. -Alternatively, you can restore all deleted files by uploading from '%1' folder to the server. - Translated by us - Een groot aantal bestanden op de server is verwijderd. + + + To protect your Cryptographic Identity, we encrypt it with a mnemonic of 12 dictionary words. Please note these down and keep them safe. They will be needed to add other devices to your account (like your mobile phone or laptop). + To protect your Cryptographic Identity, we encrypt it with a mnemonic of 12 dictionary words. Please note these down and keep them safe. They will be needed to add other devices to your account (like your mobile phone or laptop). + + + + OCC::CaseClashFilenameDialog + + Existing file + Bestaand bestand + + + The file could not be synced because it generates a case clash conflict with an existing file on this system. + The file could not be synced because it generates a case clash conflict with an existing file on this system. + + + + OCC::DiscoverySingleDirectoryJob + + Encrypted metadata setup error: initial signature from server is empty. + Fout bij opzetten versleutelde metagegevens: initiële handtekening van server is leeg. + + + Encrypted metadata setup error! + Encrypted metadata setup error! + + + + OCC::Flow2AuthWidget + + Open Browser + Browser openen + + + + OCC::Folder + + A folder from an external storage has been added. + Er is een map op externe opslag toegevoegd. + + + A large number of files in the server have been deleted. +Please confirm if you'd like to proceed with these deletions. +Alternatively, you can restore all deleted files by uploading from '%1' folder to the server. + Een groot aantal bestanden op de server is verwijderd. Bevestig alstublieft of u door wilt gaan met deze verwijderingen. -U kunt ook alle verwijderde bestanden terugzetten door vanuit de map '%1' te uploaden naar de server. - - - A large number of files in your local '%1' folder have been deleted. -Please confirm if you'd like to proceed with these deletions. +U kunt ook alle verwijderde bestanden terugzetten door vanuit de map '%1' te uploaden naar de server. + + + A large number of files in your local '%1' folder have been deleted. +Please confirm if you'd like to proceed with these deletions. Alternatively, you can restore all deleted files by downloading them from the server. - Translated by us - Een groot aantal bestanden in uw lokale map '%1' is verwijderd. + Een groot aantal bestanden in uw lokale map '%1' is verwijderd. Bevestig alstublieft of u door wilt gaan met deze verwijderingen. U kunt ook alle verwijderde bestanden herstellen door ze van de server te downloaden. - - - A new folder larger than %1 MB has been added: %2. - Removed trailing linebreak - Er is een nieuwe map groter dan %1 MB toegevoegd: %2. - - - Proceed with Deletion - Translated by us - Doorgaan met verwijderen - - - Remove all files? - Translated by us - Alle bestanden verwijderen? - - - Restore Files from Server - Translated by us - Bestanden terugzetten van server - - - Restore Files to Server - Translated by us - Bestanden terugzetten naar server - - - - OCC::FolderCreationDialog - - %1 Create new folder - Added by us - %1 Nieuwe map maken - - - - OCC::FolderMan - - (backup %1) - Removed leading space - (backup %1) - - - (backup) - Removed leading space - (backup) - - - - OCC::FolderStatusDelegate - - Synchronize any other local folder with your %1 - Added by us - Synchroniseer een andere lokale map met uw %1 - - - - OCC::FolderWizardLocalPath - - Choose - Added by us - Kies - - - - OCC::FolderWizardRemotePath - - Enter the name of the new folder to be created below "%1": - Removed trailing space - Voer de naam van de hieronder te maken nieuwe map in "%1": - - - - OCC::FolderWizardSelectiveSync - - Use virtual files instead of downloading content immediately %1 - Gebruik virtuele bestanden in plaats van direct downloaden content%1 - - - - OCC::GeneralSettings - - &Analysis data collection for needs-based design - Added by us - &Analyse van gegevensverzameling voor een op behoeften gebaseerd ontwerp - - - Ask for confirmation before synchronizing external storages - Has to be repaired in code - Vraag bevestiging voor synchronisatie van mappen op externe opslag - - - Ask for confirmation before synchronizing new folders larger than - Has to be repaired in code - Ask for confirmation before synchronizing new folders larger than - - - Automatically disable synchronisation of folders that overcome limit - Has to be repaired in code - Automatically disable synchronisation of folders that overcome limit - - - Data Protection - Added by us - Gegevensbescherming - - - More Information - Added by us - Meer informatie - - - Open Source Software - Added by us - Open source software - - - Privacy Policy - Added by us - Privacybeleid - - - Show sync folders in &Explorer's navigation pane - Show sync folders in &Explorer's navigation pane - - - Updates - Still used by us - Updates - - - https://wl.hidrive.com/easy/0004 - https://wl.hidrive.com/easy/0004 - - - https://wl.hidrive.com/easy/0005 - https://wl.hidrive.com/easy/0005 - - - https://wl.hidrive.com/easy/0006 - https://wl.hidrive.com/easy/0006 - - - https://wl.hidrive.com/easy/0007 - https://wl.hidrive.com/easy/0007 - - - - OCC::IgnoreListTableWidget - - Add a new ignore pattern: - modifed by us spanish - Voeg nieuw negeerpatroon toe: - - - Files or folders matching a pattern will not be synchronized. + + + A new folder larger than %1 MB has been added: %2. + Er is een nieuwe map groter dan %1 MB toegevoegd: %2. + + + Proceed with Deletion + Doorgaan met verwijderen + + + Remove all files? + Alle bestanden verwijderen? + + + Restore Files from Server + Bestanden terugzetten van server + + + Restore Files to Server + Bestanden terugzetten naar server + + + + OCC::FolderCreationDialog + + %1 Create new folder + %1 Nieuwe map maken + + + + OCC::FolderMan + + (backup %1) + (backup %1) + + + (backup) + (backup) + + + + OCC::FolderStatusDelegate + + Synchronize any other local folder with your %1 + Synchroniseer een andere lokale map met uw %1 + + + + OCC::FolderWizardLocalPath + + Choose + Kies + + + + OCC::FolderWizardRemotePath + + Enter the name of the new folder to be created below "%1": + Voer de naam van de hieronder te maken nieuwe map in "%1": + + + + OCC::FolderWizardSelectiveSync + + Use virtual files instead of downloading content immediately %1 + Gebruik virtuele bestanden in plaats van direct downloaden content%1 + + + + OCC::GeneralSettings + + &Analysis data collection for needs-based design + &Analyse van gegevensverzameling voor een op behoeften gebaseerd ontwerp + + + Ask for confirmation before synchronizing external storages + Vraag bevestiging voor synchronisatie van mappen op externe opslag + + + Ask for confirmation before synchronizing new folders larger than + Ask for confirmation before synchronizing new folders larger than + + + Automatically disable synchronisation of folders that overcome limit + Automatically disable synchronisation of folders that overcome limit + + + Data Protection + Gegevensbescherming + + + https://wl.hidrive.com/easy/0004 + https://wl.hidrive.com/easy/0054 + + + https://wl.hidrive.com/easy/0005 + https://wl.hidrive.com/easy/0055 + + + https://wl.hidrive.com/easy/0006 + https://wl.hidrive.com/easy/0006 + + + https://wl.hidrive.com/easy/0007 + https://wl.hidrive.com/easy/0057 + + + More Information + Meer informatie + + + Open Source Software + Open source software + + + Privacy Policy + Privacybeleid + + + Show sync folders in &Explorer's navigation pane + Show sync folders in &Explorer's navigation pane + + + Updates + Updates + + + + OCC::IgnoreListTableWidget + + Add a new ignore pattern: + Voeg nieuw negeerpatroon toe: + + + Files or folders matching a pattern will not be synchronized. Items where deletion is allowed will be deleted if they prevent a directory from being removed. This is useful for meta data. - Modifed by us spanish - Bestanden of mappen die overeenkomen met dit patroon worden niet gesynchroniseerd. + Bestanden of mappen die overeenkomen met dit patroon worden niet gesynchroniseerd. Objecten die verwijderd mogen worden, worden verwijderd als ze zouden verhinderen dat een map verwijderd wordt. Dit is nuttig voor metadata. - - - Ignore Pattern - Added by us - Patroon negeren - - - - OCC::NetworkSettings - - No proxy - Geen proxy - - - - OCC::PropagateLocalMkdir - - Could not create folder %1 - Trailing space in translation removed - Kon map %1 niet maken - - - - OCC::PropagateLocalRename - - Folder %1 cannot be renamed because of a local file or folder name clash! - Translated by us - Map %1 kan niet hernoemd worden vanwege een lokale bestands- of mapnaamclash! - - - - OCC::PropagateUploadFileCommon - - Upload of %1 exceeds the quota for the folder - Trailing space in translation removed - Upload van %1 overschrijdt het quotum voor de map - - - - OCC::sesSnackBar - - Success - Added by us - Succes - - - - OCC::SettingsDialog - - New account - Added by us - Nieuw account - - - - OCC::SslButton - - This connection is NOT secure as it is not encrypted. - Removed trailing linebreak - Deze verbinding is NIET veilig, omdat deze niet versleuteld is. - - - This connection is encrypted using %1 bit %2. - Removed trailing linebreak - Deze verbinding is versleuteld via %1 bit %2. - - - - OCC::Theme - - easy/0118 - Added by us - - - - - OCC::UpdateE2eeFolderMetadataJob - - Failed to finalize item. - Modifed by us - Failed to finalize item. - - - Failed to unlock encrypted folder. - Modifed by us - Kon versleutelde map niet ontgrendelen. - - - - OCC::UpdateE2eeFolderUsersMetadataJob - - Could not add or remove user %1 to access folder %2 - Translated by us - Kan gebruiker %1 niet toevoegen of verwijderen voor toegang tot map %2 - - - - OCC::User - - %1 notifications - Translated by us - %1 kennisgevingen - - - - OCC::WebFlowCredentials - - <b>You have been logged out of your account %1 at %2. Please login again.</b> - Modifed by us - <b>U bent afgemeld bij uw account %1 op %2. Log opnieuw in.</b> - - - - OwncloudAdvancedSetupPage - - <html><head/><body><p>If this box is checked, existing content in the local folder will be erased to start a clean sync from the server.</p><p>Do not check this if the local content should be uploaded to the servers folder.</p></body></html> - Modifed by us - <html><head/><body><p>Als deze checkbox is aangevinkt zullen bestaande bestanden in de lokale map worden gewist om een schone sync vanaf de server te starten.</p><p>Vink dit niet aan als de lokale bestanden naar de map op de server zouden moeten worden geüploadet.</p></body></html> - - - - progress - - Updated local virtual files metadata - Translated by us - Metagegevens van lokale virtuele bestanden bijgewerkt - - - updating local virtual files metadata - Translated by us - Metagegevens van lokale virtuele bestanden bijwerken - - - - QObject - - Could not create debug archive in selected location! - Translated by us - Kon geen debug-archief aanmaken op geselecteerde locatie! - - - Failed to create debug archive - Translated by us - Debug-archief is niet aangemaakt - - - The directory %1 cannot be part of your sync directory. Please choose another folder. - Added by us - De map %1 kan geen deel uitmaken van je synchronisatiemap. Kies een andere map. - - - - SesTrayHeader - - Open Nextcloud in browser - Added by us - HiDrive Next in browser openen - - - Website - Added by us - Website - - - - ShareDetailsPage - - Copy share link - modifed by us - Copy share link - - - Custom Permissions - Added by us - Aangepaste machtigingen - - - Enter the note to recipient - Added by us - Voer de notitie aan de ontvanger in - - - Share link copied! - modifed by us - Share link copied! - - - - TrayFoldersMenuButton - - Files - Added by us - Bestanden - - - \ No newline at end of file + + + Ignore Pattern + Patroon negeren + + + + OCC::NetworkSettings + + No proxy + Geen proxy + + + + OCC::PropagateLocalMkdir + + Could not create folder %1 + Kon map %1 niet maken + + + + OCC::PropagateLocalRename + + Folder %1 cannot be renamed because of a local file or folder name clash! + Map %1 kan niet hernoemd worden vanwege een lokale bestands- of mapnaamclash! + + + + OCC::PropagateUploadFileCommon + + Upload of %1 exceeds the quota for the folder + Upload van %1 overschrijdt het quotum voor de map + + + + OCC::SettingsDialog + + New account + Nieuw account + + + + OCC::SslButton + + This connection is encrypted using %1 bit %2. + Deze verbinding is versleuteld via %1 bit %2. + + + This connection is NOT secure as it is not encrypted. + Deze verbinding is NIET veilig, omdat deze niet versleuteld is. + + + + OCC::Theme + + easy/0118 + easy/0108 + + + + OCC::UpdateE2eeFolderMetadataJob + + Failed to finalize item. + Failed to finalize item. + + + Failed to unlock encrypted folder. + Kon versleutelde map niet ontgrendelen. + + + + OCC::UpdateE2eeFolderUsersMetadataJob + + Could not add or remove user %1 to access folder %2 + Kan gebruiker %1 niet toevoegen of verwijderen voor toegang tot map %2 + + + + OCC::User + + %1 notifications + %1 kennisgevingen + + + + OCC::WebFlowCredentials + + <b>You have been logged out of your account %1 at %2. Please login again.</b> + <b>U bent afgemeld bij uw account %1 op %2. Log opnieuw in.</b> + + + + OCC::sesSnackBar + + Success + Succes + + + + OwncloudAdvancedSetupPage + + <html><head/><body><p>If this box is checked, existing content in the local folder will be erased to start a clean sync from the server.</p><p>Do not check this if the local content should be uploaded to the servers folder.</p></body></html> + <html><head/><body><p>Als deze checkbox is aangevinkt zullen bestaande bestanden in de lokale map worden gewist om een schone sync vanaf de server te starten.</p><p>Vink dit niet aan als de lokale bestanden naar de map op de server zouden moeten worden geüploadet.</p></body></html> + + + + QObject + + Could not create debug archive in selected location! + Kon geen debug-archief aanmaken op geselecteerde locatie! + + + Failed to create debug archive + Debug-archief is niet aangemaakt + + + The directory %1 cannot be part of your sync directory. Please choose another folder. + De map %1 kan geen deel uitmaken van je synchronisatiemap. Kies een andere map. + + + + SesTrayHeader + + Open Nextcloud in browser + HiDrive Next in browser openen + + + Website + Website + + + + ShareDetailsPage + + Copy share link + Copy share link + + + Custom Permissions + Aangepaste machtigingen + + + Enter the note to recipient + Voer de notitie aan de ontvanger in + + + Share link copied! + Share link copied! + + + + TrayFoldersMenuButton + + Files + Bestanden + + + + progress + + Updated local virtual files metadata + Metagegevens van lokale virtuele bestanden bijgewerkt + + + updating local virtual files metadata + Metagegevens van lokale virtuele bestanden bijwerken + + + From f82bdb35c4c768f64221d3db7e7d01a3a6b8ac94 Mon Sep 17 00:00:00 2001 From: Kevin Beraz Date: Mon, 16 Jun 2025 15:15:33 +0200 Subject: [PATCH 234/371] SES-386 fix font colors in Add Folder Sync flow --- src/gui/accountsettings.cpp | 10 +++++++++- src/gui/folderwizard.cpp | 27 ++++++++++++++++++++++----- 2 files changed, 31 insertions(+), 6 deletions(-) diff --git a/src/gui/accountsettings.cpp b/src/gui/accountsettings.cpp index 1782d97ad88c8..1fded633b710d 100644 --- a/src/gui/accountsettings.cpp +++ b/src/gui/accountsettings.cpp @@ -1850,7 +1850,15 @@ void AccountSettings::customizeStyle() ); _ui->_folderList->setStyleSheet( - QStringLiteral("background: %1; ").arg(IonosTheme::white()) + QStringLiteral("background: %1; %2;").arg( + IonosTheme::white(), + IonosTheme::fontConfigurationCss( + IonosTheme::settingsFont(), + IonosTheme::settingsTextSize(), + IonosTheme::settingsTextWeight(), + IonosTheme::titleColor() + ) + ) ); #if defined(Q_OS_MAC) diff --git a/src/gui/folderwizard.cpp b/src/gui/folderwizard.cpp index d0335655645c1..2ab41754cb7dc 100644 --- a/src/gui/folderwizard.cpp +++ b/src/gui/folderwizard.cpp @@ -752,11 +752,17 @@ void FolderWizardRemotePath::changeStyle() .arg(IonosTheme::buttonRadius()) .arg(IonosTheme::menuBorderColor())); - _ui.folderTreeWidget->setStyleSheet(IonosTheme::fontConfigurationCss( - IonosTheme::settingsFont(), - IonosTheme::settingsTextSize(), - IonosTheme::settingsTextWeight(), - IonosTheme::titleColor())); + _ui.folderTreeWidget->setStyleSheet( + QStringLiteral(" %1; background: %2; ").arg( + IonosTheme::fontConfigurationCss( + IonosTheme::settingsFont(), + IonosTheme::settingsTextSize(), + IonosTheme::settingsTextWeight(), + IonosTheme::titleColor() + ), + IonosTheme::white() + ) + ); _ui.folderTreeWidget->setStyleSheet( _ui.folderTreeWidget->styleSheet() + QStringLiteral("QTreeWidget { background: %1; }").arg(IonosTheme::white()) @@ -859,6 +865,17 @@ void FolderWizardSelectiveSync::setupVirtualFilesCheckbox(){ _virtualFilesHBox->addWidget(_virtualFilesCheckBoxLabel, 1); _virtualFilesHBox->setAlignment(_virtualFilesCheckBox, Qt::AlignVCenter); + + _virtualFilesCheckBox->setStyleSheet( + QStringLiteral(" %1; ").arg( + IonosTheme::fontConfigurationCss( + IonosTheme::settingsFont(), + IonosTheme::settingsTextSize(), + IonosTheme::settingsTextWeight(), + IonosTheme::titleColor() + ) + ) + ); } void FolderWizardSelectiveSync::virtualFilesCheckboxLabelClicked(){ From c84dfe736dd56fc08ffc38d162787cf338fbb1b5 Mon Sep 17 00:00:00 2001 From: Kevin Beraz Date: Mon, 16 Jun 2025 16:02:01 +0200 Subject: [PATCH 235/371] fix font and background colors for share views --- src/gui/filedetails/FileDetailsPage.qml | 3 ++- src/gui/filedetails/ShareDetailsPage.qml | 1 + src/gui/tray/MainWindow.qml | 4 +++- src/gui/tray/SyncStatus.qml | 8 ++++++-- 4 files changed, 12 insertions(+), 4 deletions(-) diff --git a/src/gui/filedetails/FileDetailsPage.qml b/src/gui/filedetails/FileDetailsPage.qml index e170b31a06aa4..0a7f1b6f3af34 100644 --- a/src/gui/filedetails/FileDetailsPage.qml +++ b/src/gui/filedetails/FileDetailsPage.qml @@ -48,6 +48,7 @@ Page { font.family: Style.sesOpenSansRegular font.pixelSize: Style.sesFontPixelSize font.weight: Style.sesFontNormalWeight + palette.windowText: Style.sesTrayFontColor Connections { target: Systray @@ -73,7 +74,7 @@ Page { bottomPadding: intendedPadding background: Rectangle { - color: Style.sesDarkBlue + color: Style.sesWhite } header: ColumnLayout { diff --git a/src/gui/filedetails/ShareDetailsPage.qml b/src/gui/filedetails/ShareDetailsPage.qml index 10a77dde0e7af..935d6c43928bc 100644 --- a/src/gui/filedetails/ShareDetailsPage.qml +++ b/src/gui/filedetails/ShareDetailsPage.qml @@ -48,6 +48,7 @@ Page { font.family: Style.sesOpenSansRegular font.pixelSize: Style.sesFontPixelSize font.weight: Style.sesFontNormalWeight + palette.windowText: Style.sesTrayFontColor property bool backgroundsVisible: true property color accentColor: Style.ncBlue diff --git a/src/gui/tray/MainWindow.qml b/src/gui/tray/MainWindow.qml index f0a17a539838c..49b0f9050a3fe 100644 --- a/src/gui/tray/MainWindow.qml +++ b/src/gui/tray/MainWindow.qml @@ -45,7 +45,9 @@ ApplicationWindow { font.family: Style.sesOpenSansRegular font.pixelSize: Style.sesFontPixelSize - font.weight: Style.sesFontBoldWeight + font.weight: Style.sesFontBoldWeight + palette.base: Style.sesWhite + palette.windowText: Style.sesTrayFontColor // TODO: Rather than setting all these palette colours manually, // create a custom style and do it for all components globally diff --git a/src/gui/tray/SyncStatus.qml b/src/gui/tray/SyncStatus.qml index 257416443de98..0eb6e49cf4517 100644 --- a/src/gui/tray/SyncStatus.qml +++ b/src/gui/tray/SyncStatus.qml @@ -13,8 +13,12 @@ RowLayout { spacing: Style.trayHorizontalMargin - NC.SyncStatusSummary { - id: syncStatus + Rectangle{ + color: Style.sesWhite + + NC.SyncStatusSummary { + id: syncStatus + } } NCBusyIndicator { From 0480babfdcd5bba14334b38697039a5f8836ef6b Mon Sep 17 00:00:00 2001 From: Kevin Beraz Date: Tue, 17 Jun 2025 09:37:07 +0200 Subject: [PATCH 236/371] SES-386 use correct UI component --- src/gui/folderwizard.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/gui/folderwizard.cpp b/src/gui/folderwizard.cpp index 2ab41754cb7dc..ab28c4f52fb82 100644 --- a/src/gui/folderwizard.cpp +++ b/src/gui/folderwizard.cpp @@ -866,8 +866,8 @@ void FolderWizardSelectiveSync::setupVirtualFilesCheckbox(){ _virtualFilesHBox->setAlignment(_virtualFilesCheckBox, Qt::AlignVCenter); - _virtualFilesCheckBox->setStyleSheet( - QStringLiteral(" %1; ").arg( + _virtualFilesCheckBoxLabel->setStyleSheet( + QStringLiteral("QLabel { %1; }").arg( IonosTheme::fontConfigurationCss( IonosTheme::settingsFont(), IonosTheme::settingsTextSize(), From 3862c62b63ac1149fba013190595be236e7d979e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Christopher=20H=C3=A4tty?= Date: Wed, 18 Jun 2025 12:47:54 +0100 Subject: [PATCH 237/371] NoIssue - Fixed Consent not saved when value not initialized --- src/gui/wizard/dataprotectionpage.cpp | 2 ++ src/gui/wizard/dataprotectionsettingspage.cpp | 9 +++------ src/gui/wizard/dataprotectionsettingspage.h | 2 -- 3 files changed, 5 insertions(+), 8 deletions(-) diff --git a/src/gui/wizard/dataprotectionpage.cpp b/src/gui/wizard/dataprotectionpage.cpp index 954f1bffd6b95..f13459433796e 100644 --- a/src/gui/wizard/dataprotectionpage.cpp +++ b/src/gui/wizard/dataprotectionpage.cpp @@ -26,6 +26,8 @@ namespace OCC{ void DataProtectionPage::initializePage() { + ConfigFile cfgFile; + cfgFile.setSendData(true); connect(_ui->agreeButton, &QPushButton::clicked, this, [this]() { _nextPage = WizardCommon::Page_AdvancedSetup; _ocWizard->next(); diff --git a/src/gui/wizard/dataprotectionsettingspage.cpp b/src/gui/wizard/dataprotectionsettingspage.cpp index 2bf7053fea61c..2584d7a18bdd8 100644 --- a/src/gui/wizard/dataprotectionsettingspage.cpp +++ b/src/gui/wizard/dataprotectionsettingspage.cpp @@ -12,7 +12,6 @@ namespace OCC{ : QWizardPage() , _ui(new Ui::DataProtectionSettingsPage) , _ocWizard(ocWizard) - , _anonymousUseState(false) { setupUi(); } @@ -27,7 +26,7 @@ namespace OCC{ void DataProtectionSettingsPage::initializePage() { - _anonymousUseState = _ui->anonymousDataCheckBox->isChecked(); + _ui->anonymousDataCheckBox->setChecked(true); customizeStyle(); } @@ -36,14 +35,12 @@ namespace OCC{ ConfigFile cfgFile; connect(_ui->backButton, &QPushButton::clicked, this, [this, &cfgFile]() { - _ui->anonymousDataCheckBox->setChecked(_anonymousUseState); - cfgFile.setSendData(_anonymousUseState); + _ui->anonymousDataCheckBox->setChecked(true); _ocWizard->back(); }); connect(_ui->saveButton, &QPushButton::clicked, this, [this, &cfgFile](){ - _anonymousUseState = _ui->anonymousDataCheckBox->isChecked(); - cfgFile.setSendData(_anonymousUseState); + cfgFile.setSendData(_ui->anonymousDataCheckBox->isChecked()); _ocWizard->next(); }); diff --git a/src/gui/wizard/dataprotectionsettingspage.h b/src/gui/wizard/dataprotectionsettingspage.h index 10267065fad65..8decb988a70e3 100644 --- a/src/gui/wizard/dataprotectionsettingspage.h +++ b/src/gui/wizard/dataprotectionsettingspage.h @@ -29,8 +29,6 @@ class DataProtectionSettingsPage : public QWizardPage QScopedPointer _ui; - bool _anonymousUseState; - OwncloudWizard *_ocWizard; WizardCommon::Pages _nextPage = WizardCommon::Page_AdvancedSetup; From 7d05e913652282e43d6c9f4aa96c3bb122b63717 Mon Sep 17 00:00:00 2001 From: Kevin Beraz Date: Tue, 7 Oct 2025 16:04:49 +0200 Subject: [PATCH 238/371] SES-394 use FontConfiguration as Arg --- src/gui/accountsettings.cpp | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/gui/accountsettings.cpp b/src/gui/accountsettings.cpp index 1fded633b710d..6a07c9539a98e 100644 --- a/src/gui/accountsettings.cpp +++ b/src/gui/accountsettings.cpp @@ -1114,14 +1114,14 @@ void AccountSettings::slotDisableVfsCurrentFolder() "\n\n" "This action will abort any currently running synchronization.")); - msgBox->setStyleSheet(QString( - "QMessageBox {" + - IonosTheme::fontConfigurationCss( + msgBox->setStyleSheet(QStringLiteral( + "QMessageBox { %1 background-color: %2; }").arg( + IonosTheme::fontConfigurationCss( IonosTheme::settingsFont(), IonosTheme::settingsTextSize(), IonosTheme::settingsTextWeight(), IonosTheme::titleColor() - ) + "background-color: %1; }").arg(IonosTheme::dialogBackgroundColor()) + ), IonosTheme::dialogBackgroundColor()) ); const auto acceptButton = msgBox->addButton(tr("Disable support"), QMessageBox::AcceptRole); From 22d95f41263deb2bb76a95690bd38078a5f6de69 Mon Sep 17 00:00:00 2001 From: Kevin Beraz Date: Tue, 7 Oct 2025 17:19:24 +0200 Subject: [PATCH 239/371] SES-394 apply stylesheet to QLabel --- src/gui/accountsettings.cpp | 17 +++++++++-------- 1 file changed, 9 insertions(+), 8 deletions(-) diff --git a/src/gui/accountsettings.cpp b/src/gui/accountsettings.cpp index 6a07c9539a98e..56ec09a5b4ca0 100644 --- a/src/gui/accountsettings.cpp +++ b/src/gui/accountsettings.cpp @@ -1115,13 +1115,15 @@ void AccountSettings::slotDisableVfsCurrentFolder() "This action will abort any currently running synchronization.")); msgBox->setStyleSheet(QStringLiteral( - "QMessageBox { %1 background-color: %2; }").arg( + "QMessageBox QLabel { %1 background-color: %2; }").arg( IonosTheme::fontConfigurationCss( - IonosTheme::settingsFont(), - IonosTheme::settingsTextSize(), - IonosTheme::settingsTextWeight(), - IonosTheme::titleColor() - ), IonosTheme::dialogBackgroundColor()) + IonosTheme::settingsFont(), + IonosTheme::settingsTextSize(), + IonosTheme::settingsTextWeight(), + IonosTheme::titleColor() + ), + IonosTheme::dialogBackgroundColor() + ) ); const auto acceptButton = msgBox->addButton(tr("Disable support"), QMessageBox::AcceptRole); @@ -1828,8 +1830,7 @@ void AccountSettings::customizeStyle() Theme::replaceLinkColorStringBackgroundAware(msg); _ui->connectLabel->setText(msg); - const auto color = palette().highlight().color(); - _ui->quotaProgressBar->setStyleSheet(progressBarStyle().arg(color.name())); + _ui->quotaProgressBar->setStyleSheet(progressBarStyle().arg("#ff1100")); _ui->quotaInfoLabel->setStyleSheet( IonosTheme::fontConfigurationCss( From 29c0f6b2f21b7f464e0aadb953b069823fc163c6 Mon Sep 17 00:00:00 2001 From: Kevin Beraz Date: Wed, 8 Oct 2025 09:59:37 +0200 Subject: [PATCH 240/371] SES-394 add ::horizontal to affect QProgressBar --- src/gui/accountsettings.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/gui/accountsettings.cpp b/src/gui/accountsettings.cpp index 56ec09a5b4ca0..ac0c573ef2f2f 100644 --- a/src/gui/accountsettings.cpp +++ b/src/gui/accountsettings.cpp @@ -87,7 +87,7 @@ Q_LOGGING_CATEGORY(lcAccountSettings, "hidrivenext.gui.account.settings", QtInfo const QString progressBarStyle() { return QStringLiteral( - "QProgressBar { border: 1px solid grey; border-radius: 5px; text-align: center; }" + "QProgressBar::horizontal { border: 1px solid grey; border-radius: 5px; text-align: center; }" "QProgressBar::chunk { background-color: %1; width: 1px; }" ); } @@ -1830,7 +1830,7 @@ void AccountSettings::customizeStyle() Theme::replaceLinkColorStringBackgroundAware(msg); _ui->connectLabel->setText(msg); - _ui->quotaProgressBar->setStyleSheet(progressBarStyle().arg("#ff1100")); + _ui->quotaProgressBar->setStyleSheet(progressBarStyle().arg(IonosTheme::dialogBackgroundColor())); _ui->quotaInfoLabel->setStyleSheet( IonosTheme::fontConfigurationCss( From df6eec08b1990669a265778a278b19f51cedff96 Mon Sep 17 00:00:00 2001 From: Kevin Beraz Date: Wed, 8 Oct 2025 10:27:27 +0200 Subject: [PATCH 241/371] SES-394 differentiate colors in css --- src/gui/accountsettings.cpp | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/src/gui/accountsettings.cpp b/src/gui/accountsettings.cpp index ac0c573ef2f2f..acdfdefd4a377 100644 --- a/src/gui/accountsettings.cpp +++ b/src/gui/accountsettings.cpp @@ -87,8 +87,8 @@ Q_LOGGING_CATEGORY(lcAccountSettings, "hidrivenext.gui.account.settings", QtInfo const QString progressBarStyle() { return QStringLiteral( - "QProgressBar::horizontal { border: 1px solid grey; border-radius: 5px; text-align: center; }" - "QProgressBar::chunk { background-color: %1; width: 1px; }" + "QProgressBar::horizontal { border: 1px solid grey; border-radius: 5px; text-align: center; background-color: %1; }" + "QProgressBar::chunk { background-color: %2; width: 1px; }" ); } @@ -1830,7 +1830,8 @@ void AccountSettings::customizeStyle() Theme::replaceLinkColorStringBackgroundAware(msg); _ui->connectLabel->setText(msg); - _ui->quotaProgressBar->setStyleSheet(progressBarStyle().arg(IonosTheme::dialogBackgroundColor())); + const auto color = palette().highlight().color(); + _ui->quotaProgressBar->setStyleSheet(progressBarStyle().arg(IonosTheme::dialogBackgroundColor(), color.name())); _ui->quotaInfoLabel->setStyleSheet( IonosTheme::fontConfigurationCss( From 582ff8116268738f55add1e0e778cf9c86229d48 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Christopher=20H=C3=A4tty?= Date: Wed, 8 Oct 2025 10:14:12 +0100 Subject: [PATCH 242/371] SES-406 modifed maxChunkSize default value --- src/libsync/configfile.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/libsync/configfile.cpp b/src/libsync/configfile.cpp index fb67779370b5d..57c218d2005d0 100644 --- a/src/libsync/configfile.cpp +++ b/src/libsync/configfile.cpp @@ -259,7 +259,7 @@ qint64 ConfigFile::chunkSize() const qint64 ConfigFile::maxChunkSize() const { QSettings settings(configFile(), QSettings::IniFormat); - return settings.value(QLatin1String(maxChunkSizeC), 100LL * 1024LL * 1024LL).toLongLong(); // default to 100 MiB + return settings.value(QLatin1String(maxChunkSizeC), 20LL * 1024LL * 1024LL).toLongLong(); // default to 20 MiB (SES-406) } qint64 ConfigFile::minChunkSize() const From c1dbe7f267c784dec8759e4be50288e6e71ee070 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Christopher=20H=C3=A4tty?= Date: Wed, 8 Oct 2025 17:18:27 +0200 Subject: [PATCH 243/371] SES-376 apply font styling to secondary button --- src/gui/selectivesyncdialog.cpp | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/src/gui/selectivesyncdialog.cpp b/src/gui/selectivesyncdialog.cpp index d7e006c15eafc..75b8db03fc6b2 100644 --- a/src/gui/selectivesyncdialog.cpp +++ b/src/gui/selectivesyncdialog.cpp @@ -559,7 +559,16 @@ void SelectiveSyncDialog::init(const AccountPtr &account) QPushButton *button = nullptr; button = buttonBox->addButton(QDialogButtonBox::Cancel); - + button->setStyleSheet( + button->styleSheet() + QStringLiteral("QPushButton { %1; } ").arg( + IonosTheme::fontConfigurationCss( + IonosTheme::settingsFont(), + IonosTheme::settingsTextSize(), + IonosTheme::settingsTextWeight(), + IonosTheme::black() + ) + ) + ); connect(button, &QAbstractButton::clicked, this, &QDialog::reject); layout->addWidget(buttonBox); From 0f9cc82a7d27564f6f6e9362905f0193cf91699d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Christopher=20H=C3=A4tty?= Date: Thu, 9 Oct 2025 06:38:46 +0100 Subject: [PATCH 244/371] SES-399 - used two CMAKE Files Instead of using a whole own cmake file the orignal file is still used and some variables are overwritten --- CMakeLists.txt | 1 + IONOS.cmake | 57 +++++++------------------------------------------- 2 files changed, 8 insertions(+), 50 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 84b0a76e81c77..01e9b62000462 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -23,6 +23,7 @@ set(CMAKE_XCODE_ATTRIBUTE_ENABLE_HARDENED_RUNTIME YES) set(BIN_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}/bin") +include(${CMAKE_SOURCE_DIR}/NEXTCLOUD.cmake) include(${CMAKE_SOURCE_DIR}/IONOS.cmake) set(QT_VERSION_MAJOR "6") diff --git a/IONOS.cmake b/IONOS.cmake index 6914d2fe84b69..da672b97fdf31 100644 --- a/IONOS.cmake +++ b/IONOS.cmake @@ -1,64 +1,29 @@ set( APPLICATION_NAME "IONOS HiDrive Next" ) set( APPLICATION_SHORTNAME "IONOSHiDriveNext" ) set( APPLICATION_EXECUTABLE "IONOS_HiDrive_Next" ) -# set( APPLICATION_CONFIG_NAME "${APPLICATION_EXECUTABLE}" ) set( APPLICATION_CONFIG_NAME "IONOS-HiDrive-Next" ) +set( APPLICATION_ICON_NAME "ionos_hidrive_next" ) set( APPLICATION_DOMAIN "ionos.com" ) set( APPLICATION_VENDOR "IONOS SE" ) set( APPLICATION_UPDATE_URL "https://customerupdates.nextcloud.com/client/" CACHE STRING "URL for updater" ) -set( APPLICATION_HELP_URL "" CACHE STRING "URL for the help menu" ) +set( APPLICATION_HELP_URL "" CACHE STRING "URL for the help menu" FORCE) if(APPLE AND APPLICATION_NAME STREQUAL "IONOS HiDrive Next") set( APPLICATION_ICON_NAME "ionos_hidrive_next-macOS" ) message("Using macOS-specific application icon: ${APPLICATION_ICON_NAME}") -else() - set( APPLICATION_ICON_NAME "ionos_hidrive_next" ) endif() -set( APPLICATION_ICON_SET "SVG" ) -set( APPLICATION_SERVER_URL "https://storage.ionos.fr" CACHE STRING "URL for the server to use. If entered, the UI field will be pre-filled with it" ) -set( APPLICATION_SERVER_URL_ENFORCE ON ) # If set and APPLICATION_SERVER_URL is defined, the server can only connect to the pre-defined URL +set( APPLICATION_SERVER_URL "https://storage.ionos.fr" CACHE STRING "URL for the server to use. If entered, the UI field will be pre-filled with it" FORCE) set( APPLICATION_REV_DOMAIN "com.ionos.hidrivenext.desktopclient" ) -# set( APPLICATION_VIRTUALFILE_SUFFIX "nextcloud" CACHE STRING "Virtual file suffix (not including the .)") -set( APPLICATION_OCSP_STAPLING_ENABLED OFF ) -set( APPLICATION_FORBID_BAD_SSL OFF ) -set( LINUX_PACKAGE_SHORTNAME "hidrivenext" ) -set( LINUX_APPLICATION_ID "${APPLICATION_REV_DOMAIN}.${LINUX_PACKAGE_SHORTNAME}") - -set( THEME_CLASS "NextcloudTheme" ) -set( WIN_SETUP_BITMAP_PATH "${CMAKE_SOURCE_DIR}/admin/win/nsi" ) - -set( MAC_INSTALLER_BACKGROUND_FILE "${CMAKE_SOURCE_DIR}/admin/osx/installer-background.png" CACHE STRING "The MacOSX installer background image") - -# set( THEME_INCLUDE "${OEM_THEME_DIR}/mytheme.h" ) -# set( APPLICATION_LICENSE "${OEM_THEME_DIR}/license.txt ) - -option( WITH_CRASHREPORTER "Build crashreporter" OFF ) -#set( CRASHREPORTER_SUBMIT_URL "https://crash-reports.owncloud.com/submit" CACHE STRING "URL for crash reporter" ) -#set( CRASHREPORTER_ICON ":/owncloud-icon.png" ) - -## Updater options -option( BUILD_UPDATER "Build updater" ON ) - -option( WITH_PROVIDERS "Build with providers list" ON ) - -option( ENFORCE_VIRTUAL_FILES_SYNC_FOLDER "Enforce use of virtual files sync folder when available" OFF ) +set(APPLICATION_VIRTUALFILE_SUFFIX "${APPLICATION_SHORTNAME}_virtual" CACHE STRING "Virtual file suffix (not including the .)" FORCE) -option(ENFORCE_SINGLE_ACCOUNT "Enforce use of a single account in desktop client" OFF) - -option( DO_NOT_USE_PROXY "Do not use system wide proxy, instead always do a direct connection to server" OFF ) +set( LINUX_PACKAGE_SHORTNAME "hidrivenext" ) ## Theming options -set(NEXTCLOUD_BACKGROUND_COLOR "#0082c9" CACHE STRING "Default Nextcloud background color") -set( APPLICATION_WIZARD_HEADER_BACKGROUND_COLOR ${NEXTCLOUD_BACKGROUND_COLOR} CACHE STRING "Hex color of the wizard header background") -set( APPLICATION_WIZARD_HEADER_TITLE_COLOR "#000000" CACHE STRING "Hex color of the text in the wizard header") -option( APPLICATION_WIZARD_USE_CUSTOM_LOGO "Use the logo from ':/client/theme/colored/wizard_logo.(png|svg)' else the default application icon is used" ON ) +set( APPLICATION_WIZARD_HEADER_TITLE_COLOR "#000000" CACHE STRING "Hex color of the text in the wizard header" FORCE) - -# ## Windows Shell Extensions & MSI - IMPORTANT: Generate new GUIDs for custom builds with "guidgen" or "uuidgen" -# if(WIN32) # Context Menu set( WIN_SHELLEXT_CONTEXT_MENU_GUID "{6B16FF7B-F242-4CE3-8FB9-F06EF127E0DC}" ) @@ -72,12 +37,4 @@ if(WIN32) # MSI Upgrade Code (without brackets) set( WIN_MSI_UPGRADE_CODE "6C9E5670-E8A9-4BBD-9BDF-D003794AC177" ) - - # Windows build options - option( BUILD_WIN_MSI "Build MSI scripts and helper DLL" OFF ) - option( BUILD_WIN_TOOLS "Build Win32 migration tools" OFF ) -endif() - -if (APPLE AND CMAKE_OSX_DEPLOYMENT_TARGET VERSION_GREATER_EQUAL 11.0) - option( BUILD_FILE_PROVIDER_MODULE "Build the macOS virtual files File Provider module" OFF ) -endif() +endif() \ No newline at end of file From 96d3136102d7bb8e6ef2bb70be1b56a08cbd3657 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Christopher=20H=C3=A4tty?= Date: Thu, 9 Oct 2025 06:47:52 +0100 Subject: [PATCH 245/371] SES-399 Adding missong FORCE to overwritte CACHE variables --- IONOS.cmake | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/IONOS.cmake b/IONOS.cmake index da672b97fdf31..e439dc199e18c 100644 --- a/IONOS.cmake +++ b/IONOS.cmake @@ -5,7 +5,7 @@ set( APPLICATION_CONFIG_NAME "IONOS-HiDrive-Next" ) set( APPLICATION_ICON_NAME "ionos_hidrive_next" ) set( APPLICATION_DOMAIN "ionos.com" ) set( APPLICATION_VENDOR "IONOS SE" ) -set( APPLICATION_UPDATE_URL "https://customerupdates.nextcloud.com/client/" CACHE STRING "URL for updater" ) +set( APPLICATION_UPDATE_URL "https://customerupdates.nextcloud.com/client/" CACHE STRING "URL for updater" FORCE) set( APPLICATION_HELP_URL "" CACHE STRING "URL for the help menu" FORCE) if(APPLE AND APPLICATION_NAME STREQUAL "IONOS HiDrive Next") From 8f7b7bdb1acad8c802838c4e9b4276d0a02f51ae Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Christopher=20H=C3=A4tty?= Date: Thu, 9 Oct 2025 06:50:10 +0100 Subject: [PATCH 246/371] SES-399 Removed Naming Variables to return control to Brander May break the ability to build local --- IONOS.cmake | 20 ++++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/IONOS.cmake b/IONOS.cmake index e439dc199e18c..2f2728129ba8b 100644 --- a/IONOS.cmake +++ b/IONOS.cmake @@ -1,19 +1,19 @@ -set( APPLICATION_NAME "IONOS HiDrive Next" ) -set( APPLICATION_SHORTNAME "IONOSHiDriveNext" ) -set( APPLICATION_EXECUTABLE "IONOS_HiDrive_Next" ) -set( APPLICATION_CONFIG_NAME "IONOS-HiDrive-Next" ) -set( APPLICATION_ICON_NAME "ionos_hidrive_next" ) -set( APPLICATION_DOMAIN "ionos.com" ) -set( APPLICATION_VENDOR "IONOS SE" ) -set( APPLICATION_UPDATE_URL "https://customerupdates.nextcloud.com/client/" CACHE STRING "URL for updater" FORCE) -set( APPLICATION_HELP_URL "" CACHE STRING "URL for the help menu" FORCE) +# set( APPLICATION_NAME "IONOS HiDrive Next" ) +# set( APPLICATION_SHORTNAME "IONOSHiDriveNext" ) +# set( APPLICATION_EXECUTABLE "IONOS_HiDrive_Next" ) +# set( APPLICATION_CONFIG_NAME "IONOS-HiDrive-Next" ) +# set( APPLICATION_ICON_NAME "ionos_hidrive_next" ) +# set( APPLICATION_DOMAIN "ionos.com" ) +# set( APPLICATION_VENDOR "IONOS SE" ) +# set( APPLICATION_UPDATE_URL "https://customerupdates.nextcloud.com/client/" CACHE STRING "URL for updater" FORCE) +# set( APPLICATION_HELP_URL "" CACHE STRING "URL for the help menu" FORCE) if(APPLE AND APPLICATION_NAME STREQUAL "IONOS HiDrive Next") set( APPLICATION_ICON_NAME "ionos_hidrive_next-macOS" ) message("Using macOS-specific application icon: ${APPLICATION_ICON_NAME}") endif() -set( APPLICATION_SERVER_URL "https://storage.ionos.fr" CACHE STRING "URL for the server to use. If entered, the UI field will be pre-filled with it" FORCE) +# set( APPLICATION_SERVER_URL "https://storage.ionos.fr" CACHE STRING "URL for the server to use. If entered, the UI field will be pre-filled with it" FORCE) set( APPLICATION_REV_DOMAIN "com.ionos.hidrivenext.desktopclient" ) set(APPLICATION_VIRTUALFILE_SUFFIX "${APPLICATION_SHORTNAME}_virtual" CACHE STRING "Virtual file suffix (not including the .)" FORCE) From 8d70efeebabf6ccc7a1b53bd17b9fda5cd1d7dc9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Christopher=20H=C3=A4tty?= Date: Thu, 9 Oct 2025 07:51:04 +0100 Subject: [PATCH 247/371] SES-399 - Sorted CMAKE Some Variables are only needed for local build --- IONOS.cmake | 29 +++++++++++++++-------------- 1 file changed, 15 insertions(+), 14 deletions(-) diff --git a/IONOS.cmake b/IONOS.cmake index 2f2728129ba8b..151f156188726 100644 --- a/IONOS.cmake +++ b/IONOS.cmake @@ -1,28 +1,29 @@ -# set( APPLICATION_NAME "IONOS HiDrive Next" ) -# set( APPLICATION_SHORTNAME "IONOSHiDriveNext" ) -# set( APPLICATION_EXECUTABLE "IONOS_HiDrive_Next" ) -# set( APPLICATION_CONFIG_NAME "IONOS-HiDrive-Next" ) -# set( APPLICATION_ICON_NAME "ionos_hidrive_next" ) -# set( APPLICATION_DOMAIN "ionos.com" ) -# set( APPLICATION_VENDOR "IONOS SE" ) -# set( APPLICATION_UPDATE_URL "https://customerupdates.nextcloud.com/client/" CACHE STRING "URL for updater" FORCE) -# set( APPLICATION_HELP_URL "" CACHE STRING "URL for the help menu" FORCE) - if(APPLE AND APPLICATION_NAME STREQUAL "IONOS HiDrive Next") set( APPLICATION_ICON_NAME "ionos_hidrive_next-macOS" ) message("Using macOS-specific application icon: ${APPLICATION_ICON_NAME}") endif() -# set( APPLICATION_SERVER_URL "https://storage.ionos.fr" CACHE STRING "URL for the server to use. If entered, the UI field will be pre-filled with it" FORCE) set( APPLICATION_REV_DOMAIN "com.ionos.hidrivenext.desktopclient" ) -set(APPLICATION_VIRTUALFILE_SUFFIX "${APPLICATION_SHORTNAME}_virtual" CACHE STRING "Virtual file suffix (not including the .)" FORCE) - -set( LINUX_PACKAGE_SHORTNAME "hidrivenext" ) +# set( DO_NOT_USE_PROXY OFF ) ## Theming options set( APPLICATION_WIZARD_HEADER_TITLE_COLOR "#000000" CACHE STRING "Hex color of the text in the wizard header" FORCE) +## Only needed for local build +set( APPLICATION_VIRTUALFILE_SUFFIX "${APPLICATION_SHORTNAME}_virtual" CACHE STRING "Virtual file suffix (not including the .)" FORCE) + +# set( APPLICATION_NAME "IONOS HiDrive Next" ) +# set( APPLICATION_SHORTNAME "IONOSHiDriveNext" ) +# set( APPLICATION_EXECUTABLE "IONOS_HiDrive_Next" ) +# set( APPLICATION_CONFIG_NAME "IONOS-HiDrive-Next" ) +# set( APPLICATION_ICON_NAME "ionos_hidrive_next" ) +# set( APPLICATION_DOMAIN "ionos.com" ) +# set( APPLICATION_VENDOR "IONOS SE" ) +# set( APPLICATION_UPDATE_URL "https://customerupdates.nextcloud.com/client/" CACHE STRING "URL for updater" FORCE) +# set( APPLICATION_HELP_URL "" CACHE STRING "URL for the help menu" FORCE) +# set( APPLICATION_SERVER_URL "https://storage.ionos.fr" CACHE STRING "URL for the server to use. If entered, the UI field will be pre-filled with it" FORCE) + ## Windows Shell Extensions & MSI - IMPORTANT: Generate new GUIDs for custom builds with "guidgen" or "uuidgen" if(WIN32) # Context Menu From 0da321fe8819b073e4d755a80b4ed707f8d7bfac Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Christopher=20H=C3=A4tty?= Date: Thu, 9 Oct 2025 09:15:12 +0200 Subject: [PATCH 248/371] SES-377 set background of Main/Activity and ShareView to white --- src/gui/filedetails/ShareView.qml | 4 ++++ src/gui/tray/ActivityList.qml | 6 +++++- src/gui/tray/MainWindow.qml | 2 +- 3 files changed, 10 insertions(+), 2 deletions(-) diff --git a/src/gui/filedetails/ShareView.qml b/src/gui/filedetails/ShareView.qml index 1b5aa8d63dd6d..fdfb047ebd282 100644 --- a/src/gui/filedetails/ShareView.qml +++ b/src/gui/filedetails/ShareView.qml @@ -88,6 +88,10 @@ ColumnLayout { close(); } + background: Rectangle { + color: Style.sesWhite + } + anchors.centerIn: parent width: parent.width * 0.8 diff --git a/src/gui/tray/ActivityList.qml b/src/gui/tray/ActivityList.qml index 054fca13487a9..0ce6f021f0932 100644 --- a/src/gui/tray/ActivityList.qml +++ b/src/gui/tray/ActivityList.qml @@ -86,7 +86,11 @@ ScrollView { } delegate: ActivityItem { - background: null + + background: Rectangle { + color: Style.sesWhite + } + width: activityList.contentItem.width isFileActivityList: controlRoot.isFileActivityList diff --git a/src/gui/tray/MainWindow.qml b/src/gui/tray/MainWindow.qml index 49b0f9050a3fe..54b3e7d8a3e50 100644 --- a/src/gui/tray/MainWindow.qml +++ b/src/gui/tray/MainWindow.qml @@ -89,7 +89,7 @@ ApplicationWindow { radius: 0.0 border.width: Style.trayWindowBorderWidth border.color: palette.dark - color: palette.window + color: Style.sesWhite } Connections { From 42dc53e8515e8494ab42e844f9bc3fbb44bde610 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Christopher=20H=C3=A4tty?= Date: Thu, 9 Oct 2025 09:16:32 +0200 Subject: [PATCH 249/371] SES-377 set background of AddRemoteFolder in FolderWizard --- src/gui/folderwizard.cpp | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/src/gui/folderwizard.cpp b/src/gui/folderwizard.cpp index ab28c4f52fb82..2f62e821b7512 100644 --- a/src/gui/folderwizard.cpp +++ b/src/gui/folderwizard.cpp @@ -311,6 +311,12 @@ void FolderWizardRemotePath::slotAddRemoteFolder() buttonBox->button(QDialogButtonBox::Ok)->setProperty("buttonStyle", QVariant::fromValue(OCC::ButtonStyleName::Primary)); dlg->setAttribute(Qt::WA_DeleteOnClose); + dlg->setStyleSheet( + QStringLiteral("QDialog { background-color: %1; }").arg( + IonosTheme::dialogBackgroundColor() + ) + ); + dlg->findChild()->setStyleSheet( QStringLiteral( "color: %1; font-family: %2; font-size: %3; font-weight: %4; border-radius: %5; border: 1px " From ea274855735ff5bd7055c23541ce03baae694c43 Mon Sep 17 00:00:00 2001 From: Kevin Beraz Date: Thu, 9 Oct 2025 10:17:24 +0200 Subject: [PATCH 250/371] SES-394 use white background for Label --- src/gui/accountsettings.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/gui/accountsettings.cpp b/src/gui/accountsettings.cpp index acdfdefd4a377..359d721eb0cc1 100644 --- a/src/gui/accountsettings.cpp +++ b/src/gui/accountsettings.cpp @@ -1122,7 +1122,7 @@ void AccountSettings::slotDisableVfsCurrentFolder() IonosTheme::settingsTextWeight(), IonosTheme::titleColor() ), - IonosTheme::dialogBackgroundColor() + IonosTheme::white() ) ); From aa319c2dbcf8cb0072576ed2a008e2437df47038 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Christopher=20H=C3=A4tty?= Date: Thu, 9 Oct 2025 09:51:14 +0100 Subject: [PATCH 251/371] SES-399 - overwrite VENDOR --- IONOS.cmake | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/IONOS.cmake b/IONOS.cmake index 151f156188726..c75509d9b9988 100644 --- a/IONOS.cmake +++ b/IONOS.cmake @@ -4,8 +4,7 @@ if(APPLE AND APPLICATION_NAME STREQUAL "IONOS HiDrive Next") endif() set( APPLICATION_REV_DOMAIN "com.ionos.hidrivenext.desktopclient" ) - -# set( DO_NOT_USE_PROXY OFF ) +set( APPLICATION_VENDOR "IONOS SE" ) ## Theming options set( APPLICATION_WIZARD_HEADER_TITLE_COLOR "#000000" CACHE STRING "Hex color of the text in the wizard header" FORCE) @@ -19,7 +18,6 @@ set( APPLICATION_VIRTUALFILE_SUFFIX "${APPLICATION_SHORTNAME}_virtual" CACHE STR # set( APPLICATION_CONFIG_NAME "IONOS-HiDrive-Next" ) # set( APPLICATION_ICON_NAME "ionos_hidrive_next" ) # set( APPLICATION_DOMAIN "ionos.com" ) -# set( APPLICATION_VENDOR "IONOS SE" ) # set( APPLICATION_UPDATE_URL "https://customerupdates.nextcloud.com/client/" CACHE STRING "URL for updater" FORCE) # set( APPLICATION_HELP_URL "" CACHE STRING "URL for the help menu" FORCE) # set( APPLICATION_SERVER_URL "https://storage.ionos.fr" CACHE STRING "URL for the server to use. If entered, the UI field will be pre-filled with it" FORCE) From 4cd5a6b199418fed8258fd907ad7759778839b99 Mon Sep 17 00:00:00 2001 From: Kevin Beraz Date: Thu, 9 Oct 2025 11:32:04 +0200 Subject: [PATCH 252/371] REVERT-ME fake Quota value --- src/gui/accountsettings.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/gui/accountsettings.cpp b/src/gui/accountsettings.cpp index 359d721eb0cc1..6a0ffcc002d5e 100644 --- a/src/gui/accountsettings.cpp +++ b/src/gui/accountsettings.cpp @@ -1410,7 +1410,7 @@ void AccountSettings::slotUpdateQuota(qint64 total, qint64 used) // workaround the label only accepting ints (which may be only 32 bit wide) const auto percent = used / (double)total * 100; const auto percentInt = qMin(qRound(percent), 100); - _ui->quotaProgressBar->setValue(percentInt); + _ui->quotaProgressBar->setValue(50); const auto usedStr = Utility::octetsToString(used); const auto totalStr = Utility::octetsToString(total); const auto percentStr = Utility::compactFormatDouble(percent, 1); From 0b41f5414c1d77e0bdaca23b680cf70cc2f07d9b Mon Sep 17 00:00:00 2001 From: Kevin Beraz Date: Thu, 9 Oct 2025 11:57:26 +0200 Subject: [PATCH 253/371] Revert "REVERT-ME fake Quota value" This reverts commit b994e24aa50ed3ebf5506875f743bed8a2bda2d0. --- src/gui/accountsettings.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/gui/accountsettings.cpp b/src/gui/accountsettings.cpp index 6a0ffcc002d5e..359d721eb0cc1 100644 --- a/src/gui/accountsettings.cpp +++ b/src/gui/accountsettings.cpp @@ -1410,7 +1410,7 @@ void AccountSettings::slotUpdateQuota(qint64 total, qint64 used) // workaround the label only accepting ints (which may be only 32 bit wide) const auto percent = used / (double)total * 100; const auto percentInt = qMin(qRound(percent), 100); - _ui->quotaProgressBar->setValue(50); + _ui->quotaProgressBar->setValue(percentInt); const auto usedStr = Utility::octetsToString(used); const auto totalStr = Utility::octetsToString(total); const auto percentStr = Utility::compactFormatDouble(percent, 1); From d962515ecbacca7394992fb73da2e93aaee4cae3 Mon Sep 17 00:00:00 2001 From: Kevin Beraz Date: Thu, 9 Oct 2025 14:23:48 +0200 Subject: [PATCH 254/371] SES-377 set background color of virtual file sync widget --- src/gui/accountsettings.cpp | 1 + 1 file changed, 1 insertion(+) diff --git a/src/gui/accountsettings.cpp b/src/gui/accountsettings.cpp index 359d721eb0cc1..86247bfbd60a5 100644 --- a/src/gui/accountsettings.cpp +++ b/src/gui/accountsettings.cpp @@ -212,6 +212,7 @@ AccountSettings::AccountSettings(AccountState *accountState, QWidget *parent) const auto fpSettingsWidget = fpSettingsController->settingsViewWidget(fpAccountUserIdAtHost, fileProviderTab); fpSettingsLayout->setContentsMargins(0, 0, 0, 0); fpSettingsLayout->addWidget(fpSettingsWidget); + fileProviderTab->setStyleSheet(QStringLiteral("QWidget { background-color: %1; }").arg(IonosTheme::dialogBackgroundColor())); fileProviderTab->setLayout(fpSettingsLayout); _ui->tabWidget->tabBar()->setStyleSheet("QTabBar::tab {\ From 9c7a3b6f129b86fbe6e0dbf905c021bc511a6c9b Mon Sep 17 00:00:00 2001 From: Kevin Beraz Date: Fri, 10 Oct 2025 14:06:10 +0200 Subject: [PATCH 255/371] set background-color directly on QTabWidget --- src/gui/accountsettings.cpp | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/gui/accountsettings.cpp b/src/gui/accountsettings.cpp index 86247bfbd60a5..9769a25ba395c 100644 --- a/src/gui/accountsettings.cpp +++ b/src/gui/accountsettings.cpp @@ -212,9 +212,9 @@ AccountSettings::AccountSettings(AccountState *accountState, QWidget *parent) const auto fpSettingsWidget = fpSettingsController->settingsViewWidget(fpAccountUserIdAtHost, fileProviderTab); fpSettingsLayout->setContentsMargins(0, 0, 0, 0); fpSettingsLayout->addWidget(fpSettingsWidget); - fileProviderTab->setStyleSheet(QStringLiteral("QWidget { background-color: %1; }").arg(IonosTheme::dialogBackgroundColor())); fileProviderTab->setLayout(fpSettingsLayout); + _ui->tabWidget->setStyleSheet(QStringLiteral("QTabWidget { background-color: %1; }").arg(IonosTheme::dialogBackgroundColor())); _ui->tabWidget->tabBar()->setStyleSheet("QTabBar::tab {\ color: #000000;\ }\ @@ -1864,6 +1864,8 @@ void AccountSettings::customizeStyle() ) ); + ui->f + #if defined(Q_OS_MAC) _ui->selectiveSyncLabel->setStyleSheet(QString("color: %1;").arg(IonosTheme::black())); _ui->horizontalLayout->setSpacing(16); From 881ffe405350940a0479fd029e703d22c8dd5af0 Mon Sep 17 00:00:00 2001 From: Kevin Beraz Date: Fri, 10 Oct 2025 14:20:09 +0200 Subject: [PATCH 256/371] remove mistakenly added code --- src/gui/accountsettings.cpp | 2 -- 1 file changed, 2 deletions(-) diff --git a/src/gui/accountsettings.cpp b/src/gui/accountsettings.cpp index 9769a25ba395c..4ebf1a69a22b4 100644 --- a/src/gui/accountsettings.cpp +++ b/src/gui/accountsettings.cpp @@ -1864,8 +1864,6 @@ void AccountSettings::customizeStyle() ) ); - ui->f - #if defined(Q_OS_MAC) _ui->selectiveSyncLabel->setStyleSheet(QString("color: %1;").arg(IonosTheme::black())); _ui->horizontalLayout->setSpacing(16); From 318baf830f892e86056f701506b93fda8c270045 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Christopher=20H=C3=A4tty?= Date: Fri, 10 Oct 2025 15:51:31 +0200 Subject: [PATCH 257/371] SES-409 Added copy from sign.sh WIP to better see the actual changes --- admin/osx/ionos_macmaker/mac_craft.sh | 248 ++++++++++++++++++++++++++ 1 file changed, 248 insertions(+) create mode 100755 admin/osx/ionos_macmaker/mac_craft.sh diff --git a/admin/osx/ionos_macmaker/mac_craft.sh b/admin/osx/ionos_macmaker/mac_craft.sh new file mode 100755 index 0000000000000..d7520e3f79283 --- /dev/null +++ b/admin/osx/ionos_macmaker/mac_craft.sh @@ -0,0 +1,248 @@ +#!/bin/bash + +safe_codesign() { + local path="$1" + local identity="$2" + + local tmpfile + # tmpfile=$(mktemp ./entitlements.XXXXXX.plist) + tmpfile=$(mktemp ./entitlements.XXXXXX) + mv "$tmpfile" "$tmpfile.plist" + tmpfile="$tmpfile.plist" + + # Extract entitlements (may be empty) + codesign -d --entitlements - --xml "$path" > "$tmpfile" 2>/dev/null + + # Check if file has *any* entitlements (dict not empty) + if grep -q "" "$tmpfile"; then + # Strip get-task-allow if present + /usr/libexec/PlistBuddy -c "Delete :com.apple.security.get-task-allow" "$tmpfile" 2>/dev/null + echo "Signing with filtered entitlements: $path" + codesign -s "$identity" --force --options=runtime --deep --timestamp --entitlements "$tmpfile" "$path" + + else + echo "Signing without entitlements: $path" + codesign -s "$identity" --force --preserve-metadata=entitlements --verbose=4 --deep --options runtime --timestamp "$path" + + fi + + rm -f "$tmpfile" +} + +export -f safe_codesign + +recursive_sign(){ + local path="$1" + local extension="${path##*.}" + if [[ "$extension" == "dylib" || "$extension" == "framework" || "$extension" == "appex" ]]; then + echo "Signing directory: $path" + # codesign -s "$2" --force --preserve-metadata=entitlements --verbose=4 --deep --options=runtime --timestamp "${path}" + safe_codesign "$path" "$2" + codesign -d --entitlements - "${path}" + + fi +} + +export -f recursive_sign + +sign_folder_content(){ + local folder="$1" + local identity="$2" + local entitlements="$3" + codesign -s "$identity" --force $entitlements --verbose=4 --deep --options=runtime --timestamp "${folder}" +} + +export -f sign_folder_content + +# This script is used to build the Mac OS X version of the IONOS client. +# Parse the command line arguments +while getopts "b:p:s:civt" opt; do + case ${opt} in + b )BASE_DIR=$OPTARG;; + p )PATH_TO_PKG=$OPTARG ;; + s )CODE_SIGN_IDENTITY=$OPTARG ;; + c )CLEAN_REBUILD=true ;; + i )PACKAGE_INSTALLER=true ;; + v )VERBOSE=true ;; + t )TEAM_PATCHING=true ;; + \? ) + echo "Usage: sign.sh [-b ] [-p ] [-s ] [-c clean-rebuild] [-i build-installer] [-v verbose]" + exit 1 + ;; + esac +done + +if [ "$VERBOSE" = true ]; then + set -xe +fi + +# Some variables +PKG_FULLNAME=$(basename "$PATH_TO_PKG") +PKG_FILENAME="${PKG_FULLNAME%.pkg}" +PRODUCT_NAME="IONOS HiDrive Next" +UNDERSCORE_PRODUCT_NAME="IONOS_HiDrive_Next" + +IONOS_TEAM_IDENTIFIER="5TDLCVD243" +NC_TEAM_IDENTIFIER="NKUJUXUJ3B" +INSTALLER_CERT="Developer ID Installer: $CODE_SIGN_IDENTITY" +APPLICATION_CERT="Developer ID Application: $CODE_SIGN_IDENTITY" + +WORK_DIR="ex" +EXTRACTED_DIR="${BASE_DIR%/}/$WORK_DIR" + +PRODUCT_DIR=$EXTRACTED_DIR/$UNDERSCORE_PRODUCT_NAME.pkg/Payload/Applications +SCRIPTS_DIR=$EXTRACTED_DIR/$UNDERSCORE_PRODUCT_NAME.pkg/Scripts +INNER_PKG=$EXTRACTED_DIR/$UNDERSCORE_PRODUCT_NAME.pkg +PAYLOAD_DIR=$EXTRACTED_DIR/$UNDERSCORE_PRODUCT_NAME.pkg/Payload +INSTALLER_PKG=$BASE_DIR/INSTALLER.pkg +APP_PATH=$PRODUCT_DIR/$PRODUCT_NAME.app + +echo "Expanding original package..." + +if [ -d "$EXTRACTED_DIR" ]; then + + echo "$EXTRACTED_DIR already exits." + + if [ "$CLEAN_REBUILD" = true ]; then + echo "Clean Rebuild Enabled - Deleting folder: $EXTRACTED_DIR" + rm -rf "$EXTRACTED_DIR" + pkgutil --expand-full "$PATH_TO_PKG" "$EXTRACTED_DIR" + fi +else + pkgutil --expand-full "$PATH_TO_PKG" "$EXTRACTED_DIR" +fi + +# --------------------------------------------------- +# Patch Team Identifier + +# check wether patching is needed. ".com" is important because otherwise the ID in the signature will be found + +if [[ -n "$TEAM_PATCHING" ]]; then + PLIST_MATCHES=$(find "$APP_PATH" -name "*.plist" -exec grep -q "$NC_TEAM_IDENTIFIER.com" {} \; -print | wc -l) + BIN_MATCHES=$(find "$APP_PATH" -type f -exec grep -q --binary-files=text "$NC_TEAM_IDENTIFIER.com" {} \; -print | wc -l) + + if [[ "$PLIST_MATCHES" -gt 0 || "$BIN_MATCHES" -gt 0 ]]; then + # Ensure both IDs are same lengt + if [[ ${#NC_TEAM_IDENTIFIER} -ne ${#IONOS_TEAM_IDENTIFIER} ]]; then + echo "NC_TEAM_IDENTIFIER and IONOS_TEAM_IDENTIFIER must be the same length for binary-safe patching." + open $BASE_DIR + exit 1 + fi + + if [[ "$PLIST_MATCHES" -gt 0 ]]; then + # --- Replace in .plist files (plain XML) --- + echo "Replacing Team Identifier in .plist files..." + find "$APP_PATH" -name "*.plist" -exec grep -q "$NC_TEAM_IDENTIFIER" {} \; -exec sed -i '' "s/$NC_TEAM_IDENTIFIER/$IONOS_TEAM_IDENTIFIER/g" {} \; + fi + + if [[ "$BIN_MATCHES" -gt 0 ]]; then + # Find and patch all binaries containing the old ID + find "$APP_PATH" -type f -exec grep -q --binary-files=text "$NC_TEAM_IDENTIFIER" {} \; -print | while read -r file; do + echo "Patching Team Identifier in $file" + perl -pi -e "s/$NC_TEAM_IDENTIFIER/$IONOS_TEAM_IDENTIFIER/g" "$file" + done + fi + fi +fi +# --------------------------------------------------- +# Sign the client +# CODE_SIGN_IDENTITY="Developer ID Application: IONOS SE (5TDLCVD243)" + +# Check if CODE_SIGN_IDENTITY is set, if not exit +if [ -z "$CODE_SIGN_IDENTITY" ]; then + echo "Code sign identity not set. Exiting." + open $BASE_DIR + exit 0 +fi + +echo "start signing the client" + +CLIENT_CONTENTS_DIR=$APP_PATH/Contents +CLIENT_FRAMEWORKS_DIR=$CLIENT_CONTENTS_DIR/Frameworks +CLIENT_RESOURCES_DIR=$CLIENT_CONTENTS_DIR/Resources +CLIENT_PLUGINS_DIR=$CLIENT_CONTENTS_DIR/PlugIns + +for script in $SCRIPTS_DIR/*; do + echo "→ Signing script: $script" + codesign -s "$CODE_SIGN_IDENTITY" --force --preserve-metadata=entitlements --verbose=4 --options=runtime --timestamp "$script" + codesign -d --entitlements - "$script" +done + +find "$CLIENT_FRAMEWORKS_DIR" -print0 | xargs -0 -I {} bash -c 'recursive_sign "$@" "$CODE_SIGN_IDENTITY"' _ {} "$CODE_SIGN_IDENTITY" +find "$CLIENT_PLUGINS_DIR" -print0 | xargs -0 -I {} bash -c 'recursive_sign "$@" "$CODE_SIGN_IDENTITY"' _ {} "$CODE_SIGN_IDENTITY" +find "$CLIENT_RESOURCES_DIR" -print0 | xargs -0 -I {} bash -c 'recursive_sign "$@" "$CODE_SIGN_IDENTITY"' _ {} "$CODE_SIGN_IDENTITY" +codesign -s "$CODE_SIGN_IDENTITY" --force --preserve-metadata=entitlements --verbose=4 --deep --options=runtime --timestamp "$APP_PATH" + + +# Sign the client ---- Still needed? +find "$CLIENT_CONTENTS_DIR/MacOS" -mindepth 1 -print0 | xargs -0 -I {} bash -c 'sign_folder_content "$@" "$CODE_SIGN_IDENTITY" "$entitlements" ' _ {} "$CODE_SIGN_IDENTITY" "--preserve-metadata=entitlements" + +# Validate that the key used for signing the binary matches the expected TeamIdentifier +# needed to pass the SocketApi through the sandbox for communication with virtual file system +if ! codesign -dv "$APP_PATH" 2>&1 | grep -q "TeamIdentifier=$IONOS_TEAM_IDENTIFIER"; then + echo "TeamIdentifier does not match. Exiting." + open $BASE_DIR + exit 0 +fi + +# --------------------------------------------------- +# Installer + +echo "start building the installer" + +# Build the installer, if enabled +if [ -z "$PACKAGE_INSTALLER" ]; then + echo "Installer packaging not enabled. Exiting." + open $BASE_DIR + exit 0 +fi + +echo "Renew BOM" +mkbom $PAYLOAD_DIR $INNER_PKG/Bom +echo "Reassembling the package..." +(cd $PAYLOAD_DIR && \ + find . | cpio -o --format odc | gzip -c) > $PAYLOAD_DIR.new + +rm -rf $PAYLOAD_DIR +mv $PAYLOAD_DIR.new $PAYLOAD_DIR + +(cd $EXTRACTED_DIR && \ + pkgutil --flatten $UNDERSCORE_PRODUCT_NAME.pkg $UNDERSCORE_PRODUCT_NAME.pkg.flat) + +rm -rf $INNER_PKG +mv $INNER_PKG.flat $INNER_PKG + +productsign --timestamp --sign 'Developer ID Installer: IONOS SE (5TDLCVD243)' \ + $INNER_PKG \ + $INNER_PKG.signed + +rm -rf $INNER_PKG +mv $INNER_PKG.signed $INNER_PKG + +(cd $BASE_DIR && productbuild \ + --distribution ex/Distribution \ + --resources ex/Resources \ + --package-path ex \ + $INSTALLER_PKG.unsigned) + +productsign --timestamp --sign 'Developer ID Installer: IONOS SE (5TDLCVD243)' $INSTALLER_PKG.unsigned "$BASE_DIR$PKG_FILENAME.resigned.pkg" + +# catch the output of the notarytool command +OUTPUT=$(xcrun notarytool submit --wait "$BASE_DIR$PKG_FILENAME.resigned.pkg"\ + --keychain-profile "IONOS SE HiDrive Next") + +SUBMISSION_STATUS=$(echo $OUTPUT | grep -o 'status: [^ ]*' | cut -d ' ' -f 2) + +# Check if the notarization was successful +if [ $SUBMISSION_STATUS != "Accepted" ]; then + echo "Notarization failed. Exiting." + open $BASE_DIR + exit 1 +fi + +# staple +xcrun stapler staple "$BASE_DIR$PKG_FILENAME.resigned.pkg" +xcrun stapler validate "$BASE_DIR$PKG_FILENAME.resigned.pkg" + +open $BASE_DIR + From bad7dcb68de734c4eeb788a9863be83ce9eb4f70 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Christopher=20H=C3=A4tty?= Date: Fri, 10 Oct 2025 15:52:28 +0200 Subject: [PATCH 258/371] SES-409 WIP used mac crafter, added sparkle creation --- admin/osx/ionos_macmaker/mac_craft.sh | 117 ++++++++++++++++++++++---- 1 file changed, 100 insertions(+), 17 deletions(-) diff --git a/admin/osx/ionos_macmaker/mac_craft.sh b/admin/osx/ionos_macmaker/mac_craft.sh index d7520e3f79283..9e34ca3497664 100755 --- a/admin/osx/ionos_macmaker/mac_craft.sh +++ b/admin/osx/ionos_macmaker/mac_craft.sh @@ -56,23 +56,26 @@ export -f sign_folder_content # This script is used to build the Mac OS X version of the IONOS client. # Parse the command line arguments -while getopts "b:p:s:civt" opt; do +while getopts "b:p:s:k:civtu" opt; do case ${opt} in b )BASE_DIR=$OPTARG;; p )PATH_TO_PKG=$OPTARG ;; s )CODE_SIGN_IDENTITY=$OPTARG ;; + k )SPARKLE_KEY=$OPTARG ;; c )CLEAN_REBUILD=true ;; i )PACKAGE_INSTALLER=true ;; v )VERBOSE=true ;; t )TEAM_PATCHING=true ;; + u )BUILD_UPDATER=true ;; \? ) - echo "Usage: sign.sh [-b ] [-p ] [-s ] [-c clean-rebuild] [-i build-installer] [-v verbose]" + echo "Usage: mac_craft.sh [-b ] [-p ] [-s ] [-c clean-rebuild] [-i build-installer] [-v verbose]" exit 1 ;; esac done if [ "$VERBOSE" = true ]; then + echo "VERBOSE MODE" set -xe fi @@ -96,7 +99,60 @@ INNER_PKG=$EXTRACTED_DIR/$UNDERSCORE_PRODUCT_NAME.pkg PAYLOAD_DIR=$EXTRACTED_DIR/$UNDERSCORE_PRODUCT_NAME.pkg/Payload INSTALLER_PKG=$BASE_DIR/INSTALLER.pkg APP_PATH=$PRODUCT_DIR/$PRODUCT_NAME.app +SCRIPT_DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )" +ADMIN_OSX="$( cd "$SCRIPT_DIR/.." && pwd )/macosx.entitlements.cmake" +MACCRAFTER_DIR="$( cd "$SCRIPT_DIR/../mac-crafter" && pwd )" + + +PACKAGE_PATH="$BASE_DIR$PKG_FILENAME.resigned.pkg" +SPARKLE_TBZ_PATH="${PACKAGE_PATH}.tbz" + + + +# Load Sparkle +SPARKLE_DIR="$BASE_DIR/sparkle" +SPARKLE_DOWNLOAD_URI="https://github.com/sparkle-project/Sparkle/releases/download/1.27.3/Sparkle-1.27.3.tar.xz" + +if [ "$BUILD_UPDATER" == "true" ] && [ -z "$SPARKLE_KEY" ]; then + echo "SPARKLE_KEY not set. Exiting." + exit 0 +fi +echo "HIER" +if [ "$BUILD_UPDATER" == "true" ]; then + echo "Creating Sparkle package archive: $SPARKLE_TBZ_PATH" + + if [ -d "$SPARKLE_DIR" ]; then + + echo "$SPARKLE_DIR already exits." + echo "Deleting..." + rm -rf "$SPARKLE_DIR" + fi + + echo "Download Sparkle" + + mkdir -p $SPARKLE_DIR + wget $SPARKLE_DOWNLOAD_URI -O $SPARKLE_DIR/Sparkle.tar.xz + tar -xvf $SPARKLE_DIR/Sparkle.tar.xz -C $SPARKLE_DIR + + if tar cf "$SPARKLE_TBZ_PATH" "$PACKAGE_PATH"; then + echo "✅ Sparkle package created successfully." + else + echo "❌ Could not create Sparkle package tbz!" >&2 + exit 1 + fi + + echo "Signing Sparkle package: $SPARKLE_TBZ_PATH" +# -s $SPARKLE_KEY + if "$SPARKLE_DIR/bin/sign_update" "$SPARKLE_TBZ_PATH"; then + echo "✅ Sparkle package signed successfully." + else + echo "❌ Could not sign Sparkle package tbz!" >&2 + exit 1 + fi + +fi +exit 0 echo "Expanding original package..." if [ -d "$EXTRACTED_DIR" ]; then @@ -118,6 +174,8 @@ fi # check wether patching is needed. ".com" is important because otherwise the ID in the signature will be found if [[ -n "$TEAM_PATCHING" ]]; then + echo "Team Patching Enabled - Start Patching Detection" + PLIST_MATCHES=$(find "$APP_PATH" -name "*.plist" -exec grep -q "$NC_TEAM_IDENTIFIER.com" {} \; -print | wc -l) BIN_MATCHES=$(find "$APP_PATH" -type f -exec grep -q --binary-files=text "$NC_TEAM_IDENTIFIER.com" {} \; -print | wc -l) @@ -142,8 +200,11 @@ if [[ -n "$TEAM_PATCHING" ]]; then perl -pi -e "s/$NC_TEAM_IDENTIFIER/$IONOS_TEAM_IDENTIFIER/g" "$file" done fi + else + echo "Nothing to patch" fi fi + # --------------------------------------------------- # Sign the client # CODE_SIGN_IDENTITY="Developer ID Application: IONOS SE (5TDLCVD243)" @@ -157,25 +218,32 @@ fi echo "start signing the client" -CLIENT_CONTENTS_DIR=$APP_PATH/Contents -CLIENT_FRAMEWORKS_DIR=$CLIENT_CONTENTS_DIR/Frameworks -CLIENT_RESOURCES_DIR=$CLIENT_CONTENTS_DIR/Resources -CLIENT_PLUGINS_DIR=$CLIENT_CONTENTS_DIR/PlugIns +swift run --package-path "$MACCRAFTER_DIR" \ + mac-crafter codesign \ + -c "$CODE_SIGN_IDENTITY" \ + -e "$ADMIN_OSX" \ + "$APP_PATH" -for script in $SCRIPTS_DIR/*; do - echo "→ Signing script: $script" - codesign -s "$CODE_SIGN_IDENTITY" --force --preserve-metadata=entitlements --verbose=4 --options=runtime --timestamp "$script" - codesign -d --entitlements - "$script" -done -find "$CLIENT_FRAMEWORKS_DIR" -print0 | xargs -0 -I {} bash -c 'recursive_sign "$@" "$CODE_SIGN_IDENTITY"' _ {} "$CODE_SIGN_IDENTITY" -find "$CLIENT_PLUGINS_DIR" -print0 | xargs -0 -I {} bash -c 'recursive_sign "$@" "$CODE_SIGN_IDENTITY"' _ {} "$CODE_SIGN_IDENTITY" -find "$CLIENT_RESOURCES_DIR" -print0 | xargs -0 -I {} bash -c 'recursive_sign "$@" "$CODE_SIGN_IDENTITY"' _ {} "$CODE_SIGN_IDENTITY" -codesign -s "$CODE_SIGN_IDENTITY" --force --preserve-metadata=entitlements --verbose=4 --deep --options=runtime --timestamp "$APP_PATH" +# CLIENT_CONTENTS_DIR=$APP_PATH/Contents +# CLIENT_FRAMEWORKS_DIR=$CLIENT_CONTENTS_DIR/Frameworks +# CLIENT_RESOURCES_DIR=$CLIENT_CONTENTS_DIR/Resources +# CLIENT_PLUGINS_DIR=$CLIENT_CONTENTS_DIR/PlugIns +# for script in $SCRIPTS_DIR/*; do +# echo "→ Signing script: $script" +# codesign -s "$CODE_SIGN_IDENTITY" --force --preserve-metadata=entitlements --verbose=4 --options=runtime --timestamp "$script" +# codesign -d --entitlements - "$script" +# done -# Sign the client ---- Still needed? -find "$CLIENT_CONTENTS_DIR/MacOS" -mindepth 1 -print0 | xargs -0 -I {} bash -c 'sign_folder_content "$@" "$CODE_SIGN_IDENTITY" "$entitlements" ' _ {} "$CODE_SIGN_IDENTITY" "--preserve-metadata=entitlements" +# find "$CLIENT_FRAMEWORKS_DIR" -print0 | xargs -0 -I {} bash -c 'recursive_sign "$@" "$CODE_SIGN_IDENTITY"' _ {} "$CODE_SIGN_IDENTITY" +# find "$CLIENT_PLUGINS_DIR" -print0 | xargs -0 -I {} bash -c 'recursive_sign "$@" "$CODE_SIGN_IDENTITY"' _ {} "$CODE_SIGN_IDENTITY" +# find "$CLIENT_RESOURCES_DIR" -print0 | xargs -0 -I {} bash -c 'recursive_sign "$@" "$CODE_SIGN_IDENTITY"' _ {} "$CODE_SIGN_IDENTITY" +# codesign -s "$CODE_SIGN_IDENTITY" --force --preserve-metadata=entitlements --verbose=4 --deep --options=runtime --timestamp "$APP_PATH" + + +# # Sign the client ---- Still needed? +# find "$CLIENT_CONTENTS_DIR/MacOS" -mindepth 1 -print0 | xargs -0 -I {} bash -c 'sign_folder_content "$@" "$CODE_SIGN_IDENTITY" "$entitlements" ' _ {} "$CODE_SIGN_IDENTITY" "--preserve-metadata=entitlements" # Validate that the key used for signing the binary matches the expected TeamIdentifier # needed to pass the SocketApi through the sandbox for communication with virtual file system @@ -244,5 +312,20 @@ fi xcrun stapler staple "$BASE_DIR$PKG_FILENAME.resigned.pkg" xcrun stapler validate "$BASE_DIR$PKG_FILENAME.resigned.pkg" + +# Sparkle + +PACKAGE_PATH="$BASE_DIR$PKG_FILENAME.resigned.pkg" +SPARKLE_TBZ_PATH="${PACKAGE_PATH}.tbz" + +echo "Creating Sparkle package archive: $SPARKLE_TBZ_PATH" + +if tar cf "$SPARKLE_TBZ_PATH" "$PACKAGE_PATH"; then + echo "✅ Sparkle package created successfully." +else + echo "❌ Could not create Sparkle package tbz!" >&2 + exit 1 +fi + open $BASE_DIR From 1bcbf567263fc732c5fa04540524bc6458675f4c Mon Sep 17 00:00:00 2001 From: Kevin Beraz Date: Mon, 13 Oct 2025 09:04:04 +0200 Subject: [PATCH 259/371] SES-377 style content part of QTabWidget --- src/gui/accountsettings.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/gui/accountsettings.cpp b/src/gui/accountsettings.cpp index 4ebf1a69a22b4..9a309ea23c19d 100644 --- a/src/gui/accountsettings.cpp +++ b/src/gui/accountsettings.cpp @@ -214,7 +214,7 @@ AccountSettings::AccountSettings(AccountState *accountState, QWidget *parent) fpSettingsLayout->addWidget(fpSettingsWidget); fileProviderTab->setLayout(fpSettingsLayout); - _ui->tabWidget->setStyleSheet(QStringLiteral("QTabWidget { background-color: %1; }").arg(IonosTheme::dialogBackgroundColor())); + _ui->tabWidget->setStyleSheet(QStringLiteral("QTabWidget::pane { background-color: %1; }").arg(IonosTheme::white())); _ui->tabWidget->tabBar()->setStyleSheet("QTabBar::tab {\ color: #000000;\ }\ From 7226b99c9cc8f73f57efc3dba89a8bcb7093b45f Mon Sep 17 00:00:00 2001 From: Kevin Beraz Date: Mon, 13 Oct 2025 16:02:23 +0200 Subject: [PATCH 260/371] No-Issue fix component references --- src/gui/SesComponents/SesTrayHeader.qml | 1 + src/gui/tray/MainWindow.qml | 8 ++++---- src/gui/tray/UserLine.qml | 10 +++++----- 3 files changed, 10 insertions(+), 9 deletions(-) diff --git a/src/gui/SesComponents/SesTrayHeader.qml b/src/gui/SesComponents/SesTrayHeader.qml index c2073e8f0c2b0..b7c70717af15b 100644 --- a/src/gui/SesComponents/SesTrayHeader.qml +++ b/src/gui/SesComponents/SesTrayHeader.qml @@ -31,6 +31,7 @@ Rectangle { anchors.bottomMargin: Style.sesHeaderTopMargin TrayWindowAccountMenu{ + id: currentAccountHeaderButton Layout.preferredWidth: Style.sesAccountButtonWidth Layout.preferredHeight: Style.sesAccountButtonHeight } diff --git a/src/gui/tray/MainWindow.qml b/src/gui/tray/MainWindow.qml index 54b3e7d8a3e50..79a2578ebf53f 100644 --- a/src/gui/tray/MainWindow.qml +++ b/src/gui/tray/MainWindow.qml @@ -95,7 +95,7 @@ ApplicationWindow { Connections { target: UserModel function onCurrentUserChanged() { - trayWindowHeader.currentAccountHeaderButton.accountMenu.close(); + trayWindowHeaderBackground.currentAccountHeaderButton.accountMenu.close(); syncStatus.model.load(); } } @@ -121,9 +121,9 @@ ApplicationWindow { fileDetailsDrawer.close(); if (Systray.isOpen) { - trayWindowHeader.currentAccountHeaderButton.accountMenu.close(); - trayWindowHeader.appsMenu.close(); - trayWindowHeader.openLocalFolderButton.closeMenu() + trayWindowHeaderBackground.currentAccountHeaderButton.accountMenu.close(); + trayWindowHeaderBackground.appsMenu.close(); + trayWindowHeaderBackground.openLocalFolderButton.closeMenu() } } diff --git a/src/gui/tray/UserLine.qml b/src/gui/tray/UserLine.qml index e6640f99c4c76..a4810d6bb31f9 100644 --- a/src/gui/tray/UserLine.qml +++ b/src/gui/tray/UserLine.qml @@ -68,7 +68,7 @@ AbstractButton { verticalAlignment: Text.AlignBottom text: name elide: Text.ElideRight - font: root.font + font: userLine.font color: Style.sesDarkBlue } @@ -93,7 +93,7 @@ AbstractButton { visible: model.statusMessage !== "" text: statusMessage elide: Text.ElideRight - font: root.font + font: userLine.font leftPadding: Style.accountLabelsSpacing } } @@ -153,7 +153,7 @@ AbstractButton { bottomPadding: Style.sesAccountMenuItemPadding spacing: Style.sesSmallMargin text: model.isConnected ? qsTr("Log out") : qsTr("Log in") - font: root.font + font: userLine.font palette.windowText: Style.ncTextColor hoverEnabled: true onClicked: { @@ -181,7 +181,7 @@ AbstractButton { visible: false height: visible ? implicitHeight : 0 text: qsTr("Set status") - font: root.font + font: userLine.font palette.windowText: Style.ncTextColor hoverEnabled: true onClicked: showUserStatusSelector(index) @@ -202,7 +202,7 @@ AbstractButton { bottomPadding: Style.sesAccountMenuItemPadding spacing: Style.sesSmallMargin text: qsTr("Remove account") - font: root.font + font: userLine.font palette.windowText: Style.ncTextColor hoverEnabled: true onClicked: { From ce99b169fa4cd4f48ac286fc94bb11b8e0dd5bb9 Mon Sep 17 00:00:00 2001 From: Kevin Beraz Date: Mon, 13 Oct 2025 16:03:09 +0200 Subject: [PATCH 261/371] No-Issue set app-icon in correct order --- IONOS.cmake | 28 ++++++++++++++-------------- 1 file changed, 14 insertions(+), 14 deletions(-) diff --git a/IONOS.cmake b/IONOS.cmake index c75509d9b9988..a6c03c1db53fd 100644 --- a/IONOS.cmake +++ b/IONOS.cmake @@ -1,8 +1,3 @@ -if(APPLE AND APPLICATION_NAME STREQUAL "IONOS HiDrive Next") - set( APPLICATION_ICON_NAME "ionos_hidrive_next-macOS" ) - message("Using macOS-specific application icon: ${APPLICATION_ICON_NAME}") -endif() - set( APPLICATION_REV_DOMAIN "com.ionos.hidrivenext.desktopclient" ) set( APPLICATION_VENDOR "IONOS SE" ) @@ -12,15 +7,15 @@ set( APPLICATION_WIZARD_HEADER_TITLE_COLOR "#000000" CACHE STRING "Hex color of ## Only needed for local build set( APPLICATION_VIRTUALFILE_SUFFIX "${APPLICATION_SHORTNAME}_virtual" CACHE STRING "Virtual file suffix (not including the .)" FORCE) -# set( APPLICATION_NAME "IONOS HiDrive Next" ) -# set( APPLICATION_SHORTNAME "IONOSHiDriveNext" ) -# set( APPLICATION_EXECUTABLE "IONOS_HiDrive_Next" ) -# set( APPLICATION_CONFIG_NAME "IONOS-HiDrive-Next" ) -# set( APPLICATION_ICON_NAME "ionos_hidrive_next" ) -# set( APPLICATION_DOMAIN "ionos.com" ) -# set( APPLICATION_UPDATE_URL "https://customerupdates.nextcloud.com/client/" CACHE STRING "URL for updater" FORCE) -# set( APPLICATION_HELP_URL "" CACHE STRING "URL for the help menu" FORCE) -# set( APPLICATION_SERVER_URL "https://storage.ionos.fr" CACHE STRING "URL for the server to use. If entered, the UI field will be pre-filled with it" FORCE) +set( APPLICATION_NAME "IONOS HiDrive Next" ) +set( APPLICATION_SHORTNAME "IONOSHiDriveNext" ) +set( APPLICATION_EXECUTABLE "IONOS_HiDrive_Next" ) +set( APPLICATION_CONFIG_NAME "IONOS-HiDrive-Next" ) +set( APPLICATION_ICON_NAME "ionos_hidrive_next" ) +set( APPLICATION_DOMAIN "ionos.com" ) +set( APPLICATION_UPDATE_URL "https://customerupdates.nextcloud.com/client/" CACHE STRING "URL for updater" FORCE) +set( APPLICATION_HELP_URL "" CACHE STRING "URL for the help menu" FORCE) +set( APPLICATION_SERVER_URL "https://storage.ionos.fr" CACHE STRING "URL for the server to use. If entered, the UI field will be pre-filled with it" FORCE) ## Windows Shell Extensions & MSI - IMPORTANT: Generate new GUIDs for custom builds with "guidgen" or "uuidgen" if(WIN32) @@ -36,4 +31,9 @@ if(WIN32) # MSI Upgrade Code (without brackets) set( WIN_MSI_UPGRADE_CODE "6C9E5670-E8A9-4BBD-9BDF-D003794AC177" ) +endif() + +if(APPLE AND APPLICATION_NAME STREQUAL "IONOS HiDrive Next") + set( APPLICATION_ICON_NAME "ionos_hidrive_next-macOS" ) + message("Using macOS-specific application icon: ${APPLICATION_ICON_NAME}") endif() \ No newline at end of file From b7198b01e34f309562d508fd99646fdfbed612ef Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Christopher=20H=C3=A4tty?= Date: Tue, 14 Oct 2025 08:41:40 +0200 Subject: [PATCH 262/371] manual Cherry Pick 67a08fe5c959fbd420061b3798a965660cbd5df2 #8515 --- src/gui/wizard/owncloudadvancedsetuppage.cpp | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/src/gui/wizard/owncloudadvancedsetuppage.cpp b/src/gui/wizard/owncloudadvancedsetuppage.cpp index e88a5f6e3d73d..15bac04ca1272 100644 --- a/src/gui/wizard/owncloudadvancedsetuppage.cpp +++ b/src/gui/wizard/owncloudadvancedsetuppage.cpp @@ -166,11 +166,14 @@ void OwncloudAdvancedSetupPage::initializePage() { WizardCommon::initErrorLabel(_ui.errorLabel); - if (Theme::instance()->disableVirtualFilesSyncFolder() || !Theme::instance()->showVirtualFilesOption() -#ifndef BUILD_FILE_PROVIDER_MODULE - || bestAvailableVfsMode() == Vfs::Off + if (Theme::instance()->disableVirtualFilesSyncFolder() + || !(Theme::instance()->showVirtualFilesOption() +#ifdef BUILD_FILE_PROVIDER_MODULE + || Mac::FileProvider::fileProviderAvailable() +#else + && bestAvailableVfsMode() != Vfs::Off #endif - ) { + )) { // If the layout were wrapped in a widget, the auto-grouping of the // radio buttons no longer works and there are surprising margins. // Just manually hide the button and remove the layout. From 2c4dc2e5e69154dabca1686cada94e1104b2ad6a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Christopher=20H=C3=A4tty?= Date: Tue, 14 Oct 2025 08:46:29 +0200 Subject: [PATCH 263/371] manual Cherry Pick 4716958270d77e9ef46e8c61dd0eea6c77c8d389 #8548 --- src/gui/macOS/fileprovidersettingscontroller.h | 4 ++-- .../macOS/fileprovidersettingscontroller_mac.mm | 10 +++++++++- src/gui/owncloudsetupwizard.cpp | 16 ++++++++-------- 3 files changed, 19 insertions(+), 11 deletions(-) diff --git a/src/gui/macOS/fileprovidersettingscontroller.h b/src/gui/macOS/fileprovidersettingscontroller.h index 2cb37aa1ba54a..97f8bc11b346e 100644 --- a/src/gui/macOS/fileprovidersettingscontroller.h +++ b/src/gui/macOS/fileprovidersettingscontroller.h @@ -51,8 +51,8 @@ class FileProviderSettingsController : public QObject [[nodiscard]] Q_INVOKABLE FileProviderDomainSyncStatus *domainSyncStatusForAccount(const QString &userIdAtHost) const; public slots: - void setVfsEnabledForAccount(const QString &userIdAtHost, const bool setEnabled); - void setFastEnumerationEnabledForAccount(const QString &userIdAtHost, const bool setEnabled); + void setVfsEnabledForAccount(const QString &userIdAtHost, const bool setEnabled, const bool showInformationDialog = true); + void setTrashDeletionEnabledForAccount(const QString &userIdAtHost, const bool setEnabled); void createEvictionWindowForAccount(const QString &userIdAtHost); void refreshMaterialisedItemsForAccount(const QString &userIdAtHost); diff --git a/src/gui/macOS/fileprovidersettingscontroller_mac.mm b/src/gui/macOS/fileprovidersettingscontroller_mac.mm index 3170a429eb5d3..9be2dfec13b9a 100644 --- a/src/gui/macOS/fileprovidersettingscontroller_mac.mm +++ b/src/gui/macOS/fileprovidersettingscontroller_mac.mm @@ -367,11 +367,19 @@ void initialCheck() return d->vfsEnabledForAccount(userIdAtHost); } -void FileProviderSettingsController::setVfsEnabledForAccount(const QString &userIdAtHost, const bool setEnabled) +void FileProviderSettingsController::setVfsEnabledForAccount(const QString &userIdAtHost, const bool setEnabled, const bool showInformationDialog) { const auto enabledAccountsAction = d->setVfsEnabledForAccount(userIdAtHost, setEnabled); if (enabledAccountsAction == MacImplementation::VfsAccountsAction::VfsAccountsEnabledChanged) { emit vfsEnabledAccountsChanged(); + + if (setEnabled && showInformationDialog) { + QMessageBox::information(nullptr, + tr("macOS virtual files enabled"), + tr("Virtual files have been enabled for this account.\n" + "Files are accessible in Finder via an entry under the \"Locations\" section.\n" + "Please note that on macOS, virtual and classic sync folders are separate.\n")); + } } } diff --git a/src/gui/owncloudsetupwizard.cpp b/src/gui/owncloudsetupwizard.cpp index 49eae7fe314ce..c0ca8906bf771 100644 --- a/src/gui/owncloudsetupwizard.cpp +++ b/src/gui/owncloudsetupwizard.cpp @@ -35,6 +35,7 @@ #ifdef BUILD_FILE_PROVIDER_MODULE #include "gui/macOS/fileprovider.h" +#include "gui/macOS/fileprovidersettingscontroller.h" #endif #include @@ -690,20 +691,19 @@ void OwncloudSetupWizard::slotAssistantFinished(int result) auto account = applyAccountChanges(); #ifdef BUILD_FILE_PROVIDER_MODULE - if (Mac::FileProvider::fileProviderAvailable()) { + if (Mac::FileProvider::fileProviderAvailable() && _ocWizard->useVirtualFileSync()) { Mac::FileProvider::instance()->domainManager()->addFileProviderDomainForAccount(account); + // let the user settings know that VFS is enabled + Mac::FileProviderSettingsController::instance()->setVfsEnabledForAccount( + Mac::FileProviderDomainManager::fileProviderDomainIdentifierFromAccountState(AccountStatePtr(account)), + true, + false + ); _ocWizard->appendToConfigurationLog( tr("File Provider-based account %1 successfully created!").arg(account->account()->userIdAtHostWithPort())); _ocWizard->done(result); emit ownCloudWizardDone(result); - QMessageBox::information(nullptr, - tr("Virtual files enabled"), - tr("Your account is now syncing with virtual files support. " - "This means that all your files are online-only by default, " - "and will be downloaded on-demand when you open them. " - "You may find your files under the Locations section of the Finder sidebar.")); - return; } #endif From 4ec8ade86a605eff319877641f4c27e04bd00e09 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Christopher=20H=C3=A4tty?= Date: Tue, 14 Oct 2025 08:51:33 +0200 Subject: [PATCH 264/371] manual Cherry Pick 6cb73f60350cb543ff2aca60910aa9f2d7174381 #8624 --- src/gui/owncloudsetupwizard.cpp | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/src/gui/owncloudsetupwizard.cpp b/src/gui/owncloudsetupwizard.cpp index c0ca8906bf771..c34c2bf8c7b74 100644 --- a/src/gui/owncloudsetupwizard.cpp +++ b/src/gui/owncloudsetupwizard.cpp @@ -489,6 +489,14 @@ bool OwncloudSetupWizard::checkDowngradeAdvised(QNetworkReply *reply) void OwncloudSetupWizard::slotCreateLocalAndRemoteFolders(const QString &localFolder, const QString &remoteFolder) { +#ifdef BUILD_FILE_PROVIDER_MODULE + if (Mac::FileProvider::fileProviderAvailable() && _ocWizard->useVirtualFileSync()) { + qCInfo(lcWizard) << "Not creating local/remote folders as because macOS File Provider uses its own sync root"; + finalizeSetup(true); + return; + } +#endif + qCInfo(lcWizard) << "Setup local sync folder for new oC connection " << localFolder; const QDir fi(localFolder); From 82b9da40a4459366a06b52c60a739f3609350537 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Christopher=20H=C3=A4tty?= Date: Tue, 14 Oct 2025 10:32:50 +0200 Subject: [PATCH 265/371] SES-409 Futher completed the signing process (WIP)) --- admin/osx/ionos_macmaker/mac_craft.sh | 205 +++++++++----------------- 1 file changed, 66 insertions(+), 139 deletions(-) diff --git a/admin/osx/ionos_macmaker/mac_craft.sh b/admin/osx/ionos_macmaker/mac_craft.sh index 9e34ca3497664..f8559e14ed704 100755 --- a/admin/osx/ionos_macmaker/mac_craft.sh +++ b/admin/osx/ionos_macmaker/mac_craft.sh @@ -1,66 +1,14 @@ #!/bin/bash -safe_codesign() { - local path="$1" - local identity="$2" - - local tmpfile - # tmpfile=$(mktemp ./entitlements.XXXXXX.plist) - tmpfile=$(mktemp ./entitlements.XXXXXX) - mv "$tmpfile" "$tmpfile.plist" - tmpfile="$tmpfile.plist" - - # Extract entitlements (may be empty) - codesign -d --entitlements - --xml "$path" > "$tmpfile" 2>/dev/null - - # Check if file has *any* entitlements (dict not empty) - if grep -q "" "$tmpfile"; then - # Strip get-task-allow if present - /usr/libexec/PlistBuddy -c "Delete :com.apple.security.get-task-allow" "$tmpfile" 2>/dev/null - echo "Signing with filtered entitlements: $path" - codesign -s "$identity" --force --options=runtime --deep --timestamp --entitlements "$tmpfile" "$path" - - else - echo "Signing without entitlements: $path" - codesign -s "$identity" --force --preserve-metadata=entitlements --verbose=4 --deep --options runtime --timestamp "$path" - - fi - - rm -f "$tmpfile" -} - -export -f safe_codesign - -recursive_sign(){ - local path="$1" - local extension="${path##*.}" - if [[ "$extension" == "dylib" || "$extension" == "framework" || "$extension" == "appex" ]]; then - echo "Signing directory: $path" - # codesign -s "$2" --force --preserve-metadata=entitlements --verbose=4 --deep --options=runtime --timestamp "${path}" - safe_codesign "$path" "$2" - codesign -d --entitlements - "${path}" - - fi -} - -export -f recursive_sign - -sign_folder_content(){ - local folder="$1" - local identity="$2" - local entitlements="$3" - codesign -s "$identity" --force $entitlements --verbose=4 --deep --options=runtime --timestamp "${folder}" -} - -export -f sign_folder_content # This script is used to build the Mac OS X version of the IONOS client. # Parse the command line arguments -while getopts "b:p:s:k:civtu" opt; do +while getopts "b:p:s:n:k:civtu" opt; do case ${opt} in - b )BASE_DIR=$OPTARG;; - p )PATH_TO_PKG=$OPTARG ;; - s )CODE_SIGN_IDENTITY=$OPTARG ;; + b )REL_BASE_DIR=$OPTARG;; + p )REL_PATH_TO_PKG=$OPTARG ;; + s )IONOS_TEAM_IDENTIFIER=$OPTARG ;; + n )NC_TEAM_IDENTIFIER==$OPTARG ;; k )SPARKLE_KEY=$OPTARG ;; c )CLEAN_REBUILD=true ;; i )PACKAGE_INSTALLER=true ;; @@ -79,14 +27,26 @@ if [ "$VERBOSE" = true ]; then set -xe fi +# if [ "$BUILD_UPDATER" == "true" ] && [ -z "$SPARKLE_KEY" ]; then +# echo "SPARKLE_KEY not set. Exiting." +# exit 0 +# fi + +if [ "$TEAM_PATCHING" == "true" ] && [ -z "$NC_TEAM_IDENTIFIER" ]; then + echo "Patching aktivated, but NC_TEAM_IDENTIFIER not set. Exiting." + exit 0 +fi + # Some variables +BASE_DIR="$( cd "$REL_BASE_DIR" && pwd )" +PATH_TO_PKG="$( realpath "$REL_PATH_TO_PKG")" + PKG_FULLNAME=$(basename "$PATH_TO_PKG") PKG_FILENAME="${PKG_FULLNAME%.pkg}" PRODUCT_NAME="IONOS HiDrive Next" UNDERSCORE_PRODUCT_NAME="IONOS_HiDrive_Next" -IONOS_TEAM_IDENTIFIER="5TDLCVD243" -NC_TEAM_IDENTIFIER="NKUJUXUJ3B" +CODE_SIGN_IDENTITY="IONOS SE ($IONOS_TEAM_IDENTIFIER)" INSTALLER_CERT="Developer ID Installer: $CODE_SIGN_IDENTITY" APPLICATION_CERT="Developer ID Application: $CODE_SIGN_IDENTITY" @@ -97,62 +57,20 @@ PRODUCT_DIR=$EXTRACTED_DIR/$UNDERSCORE_PRODUCT_NAME.pkg/Payload/Applications SCRIPTS_DIR=$EXTRACTED_DIR/$UNDERSCORE_PRODUCT_NAME.pkg/Scripts INNER_PKG=$EXTRACTED_DIR/$UNDERSCORE_PRODUCT_NAME.pkg PAYLOAD_DIR=$EXTRACTED_DIR/$UNDERSCORE_PRODUCT_NAME.pkg/Payload -INSTALLER_PKG=$BASE_DIR/INSTALLER.pkg +INSTALLER_PKG=${BASE_DIR%/}/INSTALLER.pkg APP_PATH=$PRODUCT_DIR/$PRODUCT_NAME.app SCRIPT_DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )" ADMIN_OSX="$( cd "$SCRIPT_DIR/.." && pwd )/macosx.entitlements.cmake" MACCRAFTER_DIR="$( cd "$SCRIPT_DIR/../mac-crafter" && pwd )" - -PACKAGE_PATH="$BASE_DIR$PKG_FILENAME.resigned.pkg" +# Sparkle Variables +PACKAGE_PATH="${BASE_DIR%/}/$PKG_FILENAME.resigned.pkg" SPARKLE_TBZ_PATH="${PACKAGE_PATH}.tbz" - - - -# Load Sparkle -SPARKLE_DIR="$BASE_DIR/sparkle" +SPARKLE_DIR="${BASE_DIR%/}/sparkle" SPARKLE_DOWNLOAD_URI="https://github.com/sparkle-project/Sparkle/releases/download/1.27.3/Sparkle-1.27.3.tar.xz" -if [ "$BUILD_UPDATER" == "true" ] && [ -z "$SPARKLE_KEY" ]; then - echo "SPARKLE_KEY not set. Exiting." - exit 0 -fi -echo "HIER" -if [ "$BUILD_UPDATER" == "true" ]; then - echo "Creating Sparkle package archive: $SPARKLE_TBZ_PATH" - - if [ -d "$SPARKLE_DIR" ]; then - - echo "$SPARKLE_DIR already exits." - echo "Deleting..." - rm -rf "$SPARKLE_DIR" - fi - echo "Download Sparkle" - - mkdir -p $SPARKLE_DIR - wget $SPARKLE_DOWNLOAD_URI -O $SPARKLE_DIR/Sparkle.tar.xz - tar -xvf $SPARKLE_DIR/Sparkle.tar.xz -C $SPARKLE_DIR - - if tar cf "$SPARKLE_TBZ_PATH" "$PACKAGE_PATH"; then - echo "✅ Sparkle package created successfully." - else - echo "❌ Could not create Sparkle package tbz!" >&2 - exit 1 - fi - - echo "Signing Sparkle package: $SPARKLE_TBZ_PATH" -# -s $SPARKLE_KEY - if "$SPARKLE_DIR/bin/sign_update" "$SPARKLE_TBZ_PATH"; then - echo "✅ Sparkle package signed successfully." - else - echo "❌ Could not sign Sparkle package tbz!" >&2 - exit 1 - fi - -fi -exit 0 echo "Expanding original package..." if [ -d "$EXTRACTED_DIR" ]; then @@ -207,7 +125,6 @@ fi # --------------------------------------------------- # Sign the client -# CODE_SIGN_IDENTITY="Developer ID Application: IONOS SE (5TDLCVD243)" # Check if CODE_SIGN_IDENTITY is set, if not exit if [ -z "$CODE_SIGN_IDENTITY" ]; then @@ -224,27 +141,6 @@ swift run --package-path "$MACCRAFTER_DIR" \ -e "$ADMIN_OSX" \ "$APP_PATH" - -# CLIENT_CONTENTS_DIR=$APP_PATH/Contents -# CLIENT_FRAMEWORKS_DIR=$CLIENT_CONTENTS_DIR/Frameworks -# CLIENT_RESOURCES_DIR=$CLIENT_CONTENTS_DIR/Resources -# CLIENT_PLUGINS_DIR=$CLIENT_CONTENTS_DIR/PlugIns - -# for script in $SCRIPTS_DIR/*; do -# echo "→ Signing script: $script" -# codesign -s "$CODE_SIGN_IDENTITY" --force --preserve-metadata=entitlements --verbose=4 --options=runtime --timestamp "$script" -# codesign -d --entitlements - "$script" -# done - -# find "$CLIENT_FRAMEWORKS_DIR" -print0 | xargs -0 -I {} bash -c 'recursive_sign "$@" "$CODE_SIGN_IDENTITY"' _ {} "$CODE_SIGN_IDENTITY" -# find "$CLIENT_PLUGINS_DIR" -print0 | xargs -0 -I {} bash -c 'recursive_sign "$@" "$CODE_SIGN_IDENTITY"' _ {} "$CODE_SIGN_IDENTITY" -# find "$CLIENT_RESOURCES_DIR" -print0 | xargs -0 -I {} bash -c 'recursive_sign "$@" "$CODE_SIGN_IDENTITY"' _ {} "$CODE_SIGN_IDENTITY" -# codesign -s "$CODE_SIGN_IDENTITY" --force --preserve-metadata=entitlements --verbose=4 --deep --options=runtime --timestamp "$APP_PATH" - - -# # Sign the client ---- Still needed? -# find "$CLIENT_CONTENTS_DIR/MacOS" -mindepth 1 -print0 | xargs -0 -I {} bash -c 'sign_folder_content "$@" "$CODE_SIGN_IDENTITY" "$entitlements" ' _ {} "$CODE_SIGN_IDENTITY" "--preserve-metadata=entitlements" - # Validate that the key used for signing the binary matches the expected TeamIdentifier # needed to pass the SocketApi through the sandbox for communication with virtual file system if ! codesign -dv "$APP_PATH" 2>&1 | grep -q "TeamIdentifier=$IONOS_TEAM_IDENTIFIER"; then @@ -280,7 +176,7 @@ mv $PAYLOAD_DIR.new $PAYLOAD_DIR rm -rf $INNER_PKG mv $INNER_PKG.flat $INNER_PKG -productsign --timestamp --sign 'Developer ID Installer: IONOS SE (5TDLCVD243)' \ +productsign --timestamp --sign "$INSTALLER_CERT" \ $INNER_PKG \ $INNER_PKG.signed @@ -293,10 +189,11 @@ mv $INNER_PKG.signed $INNER_PKG --package-path ex \ $INSTALLER_PKG.unsigned) -productsign --timestamp --sign 'Developer ID Installer: IONOS SE (5TDLCVD243)' $INSTALLER_PKG.unsigned "$BASE_DIR$PKG_FILENAME.resigned.pkg" +RESIGNED_PKG="${BASE_DIR%/}/$PKG_FILENAME.resigned.pkg" +productsign --timestamp --sign "$INSTALLER_CERT" $INSTALLER_PKG.unsigned "$RESIGNED_PKG" # catch the output of the notarytool command -OUTPUT=$(xcrun notarytool submit --wait "$BASE_DIR$PKG_FILENAME.resigned.pkg"\ +OUTPUT=$(xcrun notarytool submit --wait "$RESIGNED_PKG"\ --keychain-profile "IONOS SE HiDrive Next") SUBMISSION_STATUS=$(echo $OUTPUT | grep -o 'status: [^ ]*' | cut -d ' ' -f 2) @@ -309,22 +206,52 @@ if [ $SUBMISSION_STATUS != "Accepted" ]; then fi # staple -xcrun stapler staple "$BASE_DIR$PKG_FILENAME.resigned.pkg" -xcrun stapler validate "$BASE_DIR$PKG_FILENAME.resigned.pkg" +xcrun stapler staple "$RESIGNED_PKG" +xcrun stapler validate "$RESIGNED_PKG" # Sparkle -PACKAGE_PATH="$BASE_DIR$PKG_FILENAME.resigned.pkg" -SPARKLE_TBZ_PATH="${PACKAGE_PATH}.tbz" +# PACKAGE_PATH="$BASE_DIR$PKG_FILENAME.resigned.pkg" +SPARKLE_TBZ_PATH="${RESIGNED_PKG}.tbz" echo "Creating Sparkle package archive: $SPARKLE_TBZ_PATH" -if tar cf "$SPARKLE_TBZ_PATH" "$PACKAGE_PATH"; then - echo "✅ Sparkle package created successfully." -else - echo "❌ Could not create Sparkle package tbz!" >&2 - exit 1 +# Load Sparkle + +echo "HIER" +if [ "$BUILD_UPDATER" == "true" ]; then + echo "Creating Sparkle package archive: $SPARKLE_TBZ_PATH" + + if [ -d "$SPARKLE_DIR" ]; then + + echo "$SPARKLE_DIR already exits." + echo "Deleting..." + rm -rf "$SPARKLE_DIR" + fi + + echo "Download Sparkle" + + mkdir -p $SPARKLE_DIR + wget $SPARKLE_DOWNLOAD_URI -O ${SPARKLE_DIR%/}/Sparkle.tar.xz + tar -xvf ${SPARKLE_DIR%/}/Sparkle.tar.xz -C $SPARKLE_DIR + + if tar cf "$SPARKLE_TBZ_PATH" "$RESIGNED_PKG"; then + echo "✅ Sparkle package created successfully." + else + echo "❌ Could not create Sparkle package tbz!" >&2 + exit 1 + fi + + echo "Signing Sparkle package: $SPARKLE_TBZ_PATH" +# -s $SPARKLE_KEY + if "${SPARKLE_DIR%/}/bin/sign_update" "$SPARKLE_TBZ_PATH"; then + echo "✅ Sparkle package signed successfully." + else + echo "❌ Could not sign Sparkle package tbz!" >&2 + exit 1 + fi + fi open $BASE_DIR From a4b4db33e098e8af803f815ce086217f621a8b34 Mon Sep 17 00:00:00 2001 From: Kevin Beraz Date: Tue, 14 Oct 2025 10:37:14 +0200 Subject: [PATCH 266/371] No-Issue use old method no implementations for the new one --- src/gui/macOS/fileprovidersettingscontroller.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/gui/macOS/fileprovidersettingscontroller.h b/src/gui/macOS/fileprovidersettingscontroller.h index 97f8bc11b346e..a2cafd565677f 100644 --- a/src/gui/macOS/fileprovidersettingscontroller.h +++ b/src/gui/macOS/fileprovidersettingscontroller.h @@ -52,7 +52,7 @@ class FileProviderSettingsController : public QObject public slots: void setVfsEnabledForAccount(const QString &userIdAtHost, const bool setEnabled, const bool showInformationDialog = true); - void setTrashDeletionEnabledForAccount(const QString &userIdAtHost, const bool setEnabled); + void setFastEnumerationEnabledForAccount(const QString &userIdAtHost, const bool setEnabled); void createEvictionWindowForAccount(const QString &userIdAtHost); void refreshMaterialisedItemsForAccount(const QString &userIdAtHost); From 5c23bad9f5346764b4fc0b1f76cf8ded94a25b96 Mon Sep 17 00:00:00 2001 From: Kevin Beraz Date: Tue, 14 Oct 2025 13:29:08 +0200 Subject: [PATCH 267/371] SES-377 fix VFS Tab dark mode problems --- src/gui/macOS/ui/FileProviderSettings.qml | 11 +++++++++-- src/gui/macOS/ui/FileProviderSyncStatus.qml | 2 -- 2 files changed, 9 insertions(+), 4 deletions(-) diff --git a/src/gui/macOS/ui/FileProviderSettings.qml b/src/gui/macOS/ui/FileProviderSettings.qml index ea338cec9786f..b4449447523e0 100644 --- a/src/gui/macOS/ui/FileProviderSettings.qml +++ b/src/gui/macOS/ui/FileProviderSettings.qml @@ -21,7 +21,7 @@ import "../../filedetails" import "../../tray" import com.ionos.hidrivenext.desktopclient - + Page { id: root @@ -31,8 +31,15 @@ Page { title: qsTr("Virtual files settings") + font.family: Style.sesOpenSansRegular + font.pixelSize: Style.sesFontPixelSize + font.weight: Style.sesFontBoldWeight + palette.base: Style.sesWhite + palette.windowText: Style.sesTrayFontColor + palette.buttonText: Style.sesTrayFontColor + background: Rectangle { - color: palette.base + color: Style.sesWhite border.width: root.showBorder ? Style.normalBorderWidth : 0 border.color: root.palette.dark } diff --git a/src/gui/macOS/ui/FileProviderSyncStatus.qml b/src/gui/macOS/ui/FileProviderSyncStatus.qml index 05556236be51e..85bc6ba4c21aa 100644 --- a/src/gui/macOS/ui/FileProviderSyncStatus.qml +++ b/src/gui/macOS/ui/FileProviderSyncStatus.qml @@ -53,8 +53,6 @@ GridLayout { Layout.column: 1 Layout.columnSpan: root.syncStatus.syncing ? 2 : 1 Layout.fillWidth: true - font.bold: true - font.pointSize: Style.sesFontPointSize text: root.syncStatus.syncing ? qsTr("Syncing") : qsTr("All synced!") color: Style.sesDarkBlue } From 63f31164c7e68e7570ddd68fe66151bc9fefc9fa Mon Sep 17 00:00:00 2001 From: Kevin Beraz Date: Tue, 14 Oct 2025 13:50:03 +0200 Subject: [PATCH 268/371] SES-377 fix darmode problems in VFS eviction dialog --- src/gui/macOS/ui/FileProviderEvictionDialog.qml | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/src/gui/macOS/ui/FileProviderEvictionDialog.qml b/src/gui/macOS/ui/FileProviderEvictionDialog.qml index f4f2ff581b126..9597d6100c9ac 100644 --- a/src/gui/macOS/ui/FileProviderEvictionDialog.qml +++ b/src/gui/macOS/ui/FileProviderEvictionDialog.qml @@ -33,8 +33,15 @@ ApplicationWindow { LayoutMirroring.enabled: Application.layoutDirection === Qt.RightToLeft LayoutMirroring.childrenInherit: true + font.family: Style.sesOpenSansRegular + font.pixelSize: Style.sesFontPixelSize + font.weight: Style.sesFontBoldWeight + palette.base: Style.sesWhite + palette.windowText: Style.sesTrayFontColor + palette.buttonText: Style.sesTrayFontColor + title: qsTr("Evict materialised files") - color: palette.base + color: Style.sesWhite flags: Qt.Dialog | Qt.WindowStaysOnTopHint width: 640 height: 480 From 509567217964c5c3aeb874827459864dbc268386 Mon Sep 17 00:00:00 2001 From: Kevin Beraz Date: Tue, 14 Oct 2025 15:44:26 +0200 Subject: [PATCH 269/371] SES-377 style ProgressBar background of Sync Folder --- src/gui/folderstatusdelegate.cpp | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/src/gui/folderstatusdelegate.cpp b/src/gui/folderstatusdelegate.cpp index 0588e592bae12..a042268867c23 100644 --- a/src/gui/folderstatusdelegate.cpp +++ b/src/gui/folderstatusdelegate.cpp @@ -371,6 +371,10 @@ void FolderStatusDelegate::drawSyncProgressBar(QPainter *painter, const QStyleOp progressBarOpt.progress = overallPercent; progressBarOpt.state = QStyle::StateFlag::State_Horizontal; progressBarOpt.rect = QStyle::visualRect(option.direction, option.rect, progressBarRect); + QPalette paletteTmp = progressBarOpt.palette; + paletteTmp.setColor(QPalette::Base, IonosTheme::white()); + progressBarOpt.palette = paletteTmp; + #ifdef Q_OS_MACOS backupStyle->drawControl(QStyle::CE_ProgressBar, &progressBarOpt, painter, option.widget); #else @@ -383,6 +387,7 @@ void FolderStatusDelegate::drawSyncProgressBar(QPainter *painter, const QStyleOp overallProgressRect.setHeight(fileNameTextHeight); overallProgressRect.setLeft(progressBarRect.left()); overallProgressRect.setWidth(progressBarRect.width()); + painter->setFont(progressFont); painter->drawText(QStyle::visualRect(option.direction, option.rect, overallProgressRect), Qt::AlignLeft | Qt::AlignVCenter, overallString); From 2a45c2f8f7b11746f050c592849c73726a4c642a Mon Sep 17 00:00:00 2001 From: Kevin Beraz Date: Tue, 14 Oct 2025 16:49:53 +0200 Subject: [PATCH 270/371] SES-377 style create folder dialog in folderwizard --- src/gui/folderwizard.cpp | 25 ++++++++++--------------- 1 file changed, 10 insertions(+), 15 deletions(-) diff --git a/src/gui/folderwizard.cpp b/src/gui/folderwizard.cpp index 2f62e821b7512..bf57386d926c1 100644 --- a/src/gui/folderwizard.cpp +++ b/src/gui/folderwizard.cpp @@ -312,10 +312,16 @@ void FolderWizardRemotePath::slotAddRemoteFolder() dlg->setAttribute(Qt::WA_DeleteOnClose); dlg->setStyleSheet( - QStringLiteral("QDialog { background-color: %1; }").arg( - IonosTheme::dialogBackgroundColor() - ) - ); + QStringLiteral("QDialog { %1; background-color: %2; }").arg( + IonosTheme::fontConfigurationCss( + IonosTheme::settingsFont(), + IonosTheme::settingsTextSize(), + IonosTheme::settingsTextWeight(), + IonosTheme::titleColor() + ), + IonosTheme::dialogBackgroundColor() + ) + ); dlg->findChild()->setStyleSheet( QStringLiteral( @@ -342,17 +348,6 @@ void FolderWizardRemotePath::slotAddRemoteFolder() #ifdef Q_OS_MAC buttonBox->layout()->setSpacing(24); - dlg->setStyleSheet( - QStringLiteral(" %1; } ").arg( - IonosTheme::fontConfigurationCss( - IonosTheme::settingsFont(), - IonosTheme::settingsTextSize(), - IonosTheme::settingsTextWeight(), - IonosTheme::titleColor() - ) - ) - ); - buttonBox->button(QDialogButtonBox::Ok)->setStyleSheet( buttonBox->button(QDialogButtonBox::Ok)->styleSheet() + QStringLiteral(" color: %1; ").arg(IonosTheme::white()) From bada56e725c99efae28c515278170441c832502a Mon Sep 17 00:00:00 2001 From: Kevin Beraz Date: Wed, 15 Oct 2025 10:40:01 +0200 Subject: [PATCH 271/371] Added more parameters for start.sh script --- admin/osx/ionos_macmaker/start.sh | 19 ++++++++++++++----- 1 file changed, 14 insertions(+), 5 deletions(-) diff --git a/admin/osx/ionos_macmaker/start.sh b/admin/osx/ionos_macmaker/start.sh index 09a6fb896f469..7644c702c6fac 100755 --- a/admin/osx/ionos_macmaker/start.sh +++ b/admin/osx/ionos_macmaker/start.sh @@ -24,12 +24,16 @@ export -f sign_folder_content set -xe # Parse the command line arguments -while getopts "b:s:ci" opt; do +while getopts "a:b:s:cifou" opt; do case ${opt} in + a ) ARCHITECTURE=$OPTARG ;; b )BUILD_DIR=$OPTARG;; s )CODE_SIGN_IDENTITY=$OPTARG ;; c )CLEAN_REBUILD=true ;; i )PACKAGE_INSTALLER=true ;; + f )BUILD_FILEPROVIDER=true ;; + o )OSX_BUNDLE=true ;; + u )BUILD_UPDATER=true ;; \? ) echo "Usage: start.sh [-b ] [-s ] [-c] [-i]" exit 1 @@ -45,7 +49,6 @@ PRODUCT_NAME="IONOS HiDrive Next" REPO_ROOT_DIR="../../.." CRAFT_DIR=~/Craft64 PRODUCT_DIR=$BUILD_DIR/product -BUILD_UPDATER=true TEAM_IDENTIFIER="5TDLCVD243" # Check if the client is running and kill it @@ -60,6 +63,12 @@ if [ -z "$BUILD_DIR" ]; then exit 0 fi +# Check if ARCHITECTURE is set +if [ -z "$ARCHITECTURE" ]; then + echo "ARCHITECTURE not set. Add -a to the command." + exit 0 +fi + # Check if BUILD_DIR exists. If not, create it. If so, clear it. if [ ! -d $BUILD_DIR ]; then mkdir -p $BUILD_DIR @@ -100,9 +109,9 @@ cmake -S $REPO_ROOT_DIR/ -B $BUILD_DIR \ -DBUILD_UPDATER=$(if [ $BUILD_UPDATER == true ]; then echo "ON"; else echo "OFF"; fi) \ -DMIRALL_VERSION_BUILD=`date +%Y%m%d` \ -DMIRALL_VERSION_SUFFIX="stable" \ - -DBUILD_OWNCLOUD_OSX_BUNDLE=ON \ - -DCMAKE_OSX_ARCHITECTURES=x86_64 \ - -DBUILD_FILE_PROVIDER_MODULE=ON \ + -DBUILD_OWNCLOUD_OSX_BUNDLE=$(if [ $OSX_BUNDLE == true ]; then echo "ON"; else echo "OFF"; fi) \ + -DCMAKE_OSX_ARCHITECTURES=$ARCHITECTURE \ + -DBUILD_FILE_PROVIDER_MODULE=$(if [ $BUILD_FILEPROVIDER == true ]; then echo "ON"; else echo "OFF"; fi) \ -DCMAKE_PREFIX_PATH=$CRAFT_DIR \ -DSPARKLE_LIBRARY=$SPARKLE_DIR/Sparkle.framework \ -DSOCKETAPI_TEAM_IDENTIFIER_PREFIX="$TEAM_IDENTIFIER." \ From cf811d570e05b533c02dcb6a521def36660fc192 Mon Sep 17 00:00:00 2001 From: Kevin Beraz Date: Wed, 15 Oct 2025 10:44:04 +0200 Subject: [PATCH 272/371] SES-376 Fixed Hover Color of MenuItem Text --- src/gui/tray/AccountMenuItem.qml | 7 +++++++ src/gui/tray/TrayWindowAccountMenu.qml | 2 +- src/gui/tray/UserLine.qml | 12 +++++++++++- 3 files changed, 19 insertions(+), 2 deletions(-) diff --git a/src/gui/tray/AccountMenuItem.qml b/src/gui/tray/AccountMenuItem.qml index 224a77a47cc7d..8c2a3c2f6ef88 100644 --- a/src/gui/tray/AccountMenuItem.qml +++ b/src/gui/tray/AccountMenuItem.qml @@ -25,6 +25,13 @@ MenuItem { icon.height: Style.smallIconSize icon.width: Style.smallIconSize icon.color: Style.sesIconDarkColor + + Component.onCompleted: { + if (contentItem && contentItem.hasOwnProperty("color")) { + contentItem.color = accountMenuItem.palette.text + } + } + background: Item { height: parent.height diff --git a/src/gui/tray/TrayWindowAccountMenu.qml b/src/gui/tray/TrayWindowAccountMenu.qml index f1199de0104af..a7f3829504bb3 100644 --- a/src/gui/tray/TrayWindowAccountMenu.qml +++ b/src/gui/tray/TrayWindowAccountMenu.qml @@ -28,7 +28,7 @@ Button { background: Rectangle { color: currentAccountButton.isActive ? Style.sesButtonPressed : currentAccountButton.isHovered ? Style.sesAccountMenuHover : - accountMenu.visible? Style.sesSelectedColor : "transparent" + accountMenu.visible ? Style.sesSelectedColor : "transparent" radius: Style.sesCornerRadius } diff --git a/src/gui/tray/UserLine.qml b/src/gui/tray/UserLine.qml index a4810d6bb31f9..b2cea78f21728 100644 --- a/src/gui/tray/UserLine.qml +++ b/src/gui/tray/UserLine.qml @@ -146,6 +146,11 @@ AbstractButton { palette.text: Style.sesDarkBlue + Component.onCompleted: { + if (contentItem && contentItem.hasOwnProperty("color")) { + contentItem.color = logInOutButton.palette.text + } + } icon.source: Style.sesLogout icon.color: Style.sesIconDarkColor leftPadding: Style.sesMediumMargin @@ -188,13 +193,18 @@ AbstractButton { } MenuItem { + id: removeAccountButton property bool isHovered: removeAccountButton.hovered || removeAccountButton.visualFocus property bool isActive: removeAccountButton.pressed palette.text: Style.sesDarkBlue - id: removeAccountButton + Component.onCompleted: { + if (contentItem && contentItem.hasOwnProperty("color")) { + contentItem.color = removeAccountButton.palette.text + } + } icon.source: Style.sesDelete icon.color: Style.sesIconDarkColor leftPadding: Style.sesMediumMargin From e61c7a82a97233cb4d2123fe75e91d76f96c8337 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Christopher=20H=C3=A4tty?= Date: Wed, 15 Oct 2025 11:50:58 +0200 Subject: [PATCH 273/371] SES-407 changed version suffix --- VERSION.cmake | 1 + 1 file changed, 1 insertion(+) diff --git a/VERSION.cmake b/VERSION.cmake index 8e9ac37721458..71ab9d71a9f60 100644 --- a/VERSION.cmake +++ b/VERSION.cmake @@ -25,6 +25,7 @@ set(NEXTCLOUD_SERVER_VERSION_SECURE_FILEDROP_MIN_SUPPORTED_PATCH 0) set(NEXTCLOUD_SERVER_VERSION_MOUNT_ROOT_PROPERTY_SUPPORTED_MAJOR 28) set(NEXTCLOUD_SERVER_VERSION_MOUNT_ROOT_PROPERTY_SUPPORTED_MINOR 0) set(NEXTCLOUD_SERVER_VERSION_MOUNT_ROOT_PROPERTY_SUPPORTED_PATCH 3) +set(MIRALL_VERSION_SUFFIX "stable") # ------------------------------------ # Define default suffixes if not set From 893664f64043bfad0be27fcb236e8a57e80096f2 Mon Sep 17 00:00:00 2001 From: Kevin Beraz Date: Thu, 16 Oct 2025 10:33:20 +0200 Subject: [PATCH 274/371] No-Issue add merge step 0 to readme --- translation_scripts/Readme.md | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/translation_scripts/Readme.md b/translation_scripts/Readme.md index 6e1dc5d7678e3..32e8b1357e0e5 100644 --- a/translation_scripts/Readme.md +++ b/translation_scripts/Readme.md @@ -36,6 +36,12 @@ Die Lokalisierung erfolgt in mehreren Schritten. Für eine bessere Vergleichbark C:\Craft64\bin\lupdate.exe -locations none -no-obsolete -no-ui-lines .\src\libsync\ .\src\gui\ .\src\csync\ .\src\common\ .\src\cmd\ -ts .\translations\client_de.ts .\translations\client_en.ts .\translations\client_en_GB.ts .\translations\client_fr.ts .\translations\client_es.ts .\translations\client_nl.ts ``` +Danach die .ts Dateien mit folgendem Befehl sortieren: + +``` +python3 merge_translation.py 0 +``` + - Wichtig: **Obsolete Keys entfernen**. - Die `.ts`Datei manuell per Skript sortieren. - Datei in den **Translation Branch** legen und committen. From d1b1611e3f5756837df61366f1011d578bad32b6 Mon Sep 17 00:00:00 2001 From: Kevin Beraz Date: Thu, 16 Oct 2025 10:45:48 +0200 Subject: [PATCH 275/371] No-Issue fix string casing --- src/gui/generalsettings.ui | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/gui/generalsettings.ui b/src/gui/generalsettings.ui index 58d5ae5719a93..3a9388aedd7c9 100644 --- a/src/gui/generalsettings.ui +++ b/src/gui/generalsettings.ui @@ -51,14 +51,14 @@ - &Launch on system startup + &Launch on System Startup - Show server &notifications + Show Server &Notifications @@ -363,7 +363,7 @@ - &Necessary data + Necessary data true From b35696705af1a77c55fc548601d678d12ff9032e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Christopher=20H=C3=A4tty?= Date: Fri, 17 Oct 2025 08:15:16 +0200 Subject: [PATCH 276/371] SES-333 Aligned casing --- src/gui/ga4/ganalytics.cpp | 4 ++-- src/gui/ga4/ganalytics_worker.cpp | 2 +- src/gui/ga4/ganalytics_worker.h | 2 +- src/gui/sesFileIconProvider.cpp | 2 +- 4 files changed, 5 insertions(+), 5 deletions(-) diff --git a/src/gui/ga4/ganalytics.cpp b/src/gui/ga4/ganalytics.cpp index 00e80a7f84006..4f649d7ae28e0 100644 --- a/src/gui/ga4/ganalytics.cpp +++ b/src/gui/ga4/ganalytics.cpp @@ -33,8 +33,8 @@ #include #include -#include -#include +#include +#include #include #include "account.h" diff --git a/src/gui/ga4/ganalytics_worker.cpp b/src/gui/ga4/ganalytics_worker.cpp index 1df2a58498e84..20535241d9c20 100644 --- a/src/gui/ga4/ganalytics_worker.cpp +++ b/src/gui/ga4/ganalytics_worker.cpp @@ -27,7 +27,7 @@ #include #include -#include +#include #include #include "logger.h" diff --git a/src/gui/ga4/ganalytics_worker.h b/src/gui/ga4/ganalytics_worker.h index 5fac431303774..bc89247788e77 100644 --- a/src/gui/ga4/ganalytics_worker.h +++ b/src/gui/ga4/ganalytics_worker.h @@ -8,7 +8,7 @@ #include "ganalytics.h" #include "abstractnetworkjob.h" -#include +#include #include #include "account.h" diff --git a/src/gui/sesFileIconProvider.cpp b/src/gui/sesFileIconProvider.cpp index 569027980dfbb..4cb9da66a477f 100644 --- a/src/gui/sesFileIconProvider.cpp +++ b/src/gui/sesFileIconProvider.cpp @@ -1,4 +1,4 @@ -#include "sesfileiconprovider.h" +#include "sesFileIconProvider.h" #include #include From 091fc69cffdfe86530b4bc2755464d0e6c6eb3ca Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Christopher=20H=C3=A4tty?= Date: Fri, 17 Oct 2025 08:47:13 +0200 Subject: [PATCH 277/371] SES-333 Removed overwrite of cmake settings --- IONOS.cmake | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/IONOS.cmake b/IONOS.cmake index a6c03c1db53fd..42233efd6ba06 100644 --- a/IONOS.cmake +++ b/IONOS.cmake @@ -7,15 +7,15 @@ set( APPLICATION_WIZARD_HEADER_TITLE_COLOR "#000000" CACHE STRING "Hex color of ## Only needed for local build set( APPLICATION_VIRTUALFILE_SUFFIX "${APPLICATION_SHORTNAME}_virtual" CACHE STRING "Virtual file suffix (not including the .)" FORCE) -set( APPLICATION_NAME "IONOS HiDrive Next" ) -set( APPLICATION_SHORTNAME "IONOSHiDriveNext" ) -set( APPLICATION_EXECUTABLE "IONOS_HiDrive_Next" ) -set( APPLICATION_CONFIG_NAME "IONOS-HiDrive-Next" ) -set( APPLICATION_ICON_NAME "ionos_hidrive_next" ) -set( APPLICATION_DOMAIN "ionos.com" ) -set( APPLICATION_UPDATE_URL "https://customerupdates.nextcloud.com/client/" CACHE STRING "URL for updater" FORCE) -set( APPLICATION_HELP_URL "" CACHE STRING "URL for the help menu" FORCE) -set( APPLICATION_SERVER_URL "https://storage.ionos.fr" CACHE STRING "URL for the server to use. If entered, the UI field will be pre-filled with it" FORCE) +# set( APPLICATION_NAME "IONOS HiDrive Next" ) +# set( APPLICATION_SHORTNAME "IONOSHiDriveNext" ) +# set( APPLICATION_EXECUTABLE "IONOS_HiDrive_Next" ) +# set( APPLICATION_CONFIG_NAME "IONOS-HiDrive-Next" ) +# set( APPLICATION_ICON_NAME "ionos_hidrive_next" ) +# set( APPLICATION_DOMAIN "ionos.com" ) +# set( APPLICATION_UPDATE_URL "https://customerupdates.nextcloud.com/client/" CACHE STRING "URL for updater" FORCE) +# set( APPLICATION_HELP_URL "" CACHE STRING "URL for the help menu" FORCE) +# set( APPLICATION_SERVER_URL "https://storage.ionos.fr" CACHE STRING "URL for the server to use. If entered, the UI field will be pre-filled with it" FORCE) ## Windows Shell Extensions & MSI - IMPORTANT: Generate new GUIDs for custom builds with "guidgen" or "uuidgen" if(WIN32) From 901673284d894284d4a7f9b4edefce56cab76c70 Mon Sep 17 00:00:00 2001 From: Kevin Beraz Date: Fri, 17 Oct 2025 16:29:31 +0200 Subject: [PATCH 278/371] SES-333 set Sizetype of spacer to fixed so logo wont get clipped --- src/gui/wizard/welcomepage.ui | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/gui/wizard/welcomepage.ui b/src/gui/wizard/welcomepage.ui index 84f0aae879145..123e5065b38b8 100644 --- a/src/gui/wizard/welcomepage.ui +++ b/src/gui/wizard/welcomepage.ui @@ -172,7 +172,7 @@ Qt::Vertical - QSizePolicy::MinimumExpanding + QSizePolicy::Fixed From a7773646007ef1572181a8f9868a6463c5e96beb Mon Sep 17 00:00:00 2001 From: Kevin Beraz Date: Fri, 17 Oct 2025 16:30:16 +0200 Subject: [PATCH 279/371] SES-333 let Button Expand to fully display text --- src/gui/wizard/flow2authwidget.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/gui/wizard/flow2authwidget.cpp b/src/gui/wizard/flow2authwidget.cpp index 788f5b497ca66..302cfa970a9d4 100644 --- a/src/gui/wizard/flow2authwidget.cpp +++ b/src/gui/wizard/flow2authwidget.cpp @@ -226,7 +226,7 @@ void Flow2AuthWidget::customizeStyle() _ui.openLinkButton->setText(tr("Open Browser")); _ui.openLinkButton->setProperty("buttonStyle", QVariant::fromValue(OCC::ButtonStyleName::Primary)); - _ui.openLinkButton->setFixedSize(180, 40); + _ui.openLinkButton->setMinimumSize(180, 40); _ui.copyLinkButton->setText(tr("Copy Link")); From f8e0d5aa2c8b34a58243a7f1be8a4f36a477fc67 Mon Sep 17 00:00:00 2001 From: Kevin Beraz Date: Fri, 17 Oct 2025 16:33:55 +0200 Subject: [PATCH 280/371] SES-333 increase widht of page to fully display button and content --- src/gui/wizard/owncloudadvancedsetuppage.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/gui/wizard/owncloudadvancedsetuppage.cpp b/src/gui/wizard/owncloudadvancedsetuppage.cpp index 15bac04ca1272..0ba570530130b 100644 --- a/src/gui/wizard/owncloudadvancedsetuppage.cpp +++ b/src/gui/wizard/owncloudadvancedsetuppage.cpp @@ -676,8 +676,8 @@ void OwncloudAdvancedSetupPage::customizeStyle() } } - _ocWizard->setMinimumSize(QSize(626, 515)); - _ocWizard->setMaximumSize(QSize(626, 600)); + _ocWizard->setMinimumSize(QSize(680, 515)); + _ocWizard->setMaximumSize(QSize(680, 600)); _ui.mainHBox->setContentsMargins(0, 0, 0, 0); _ui.wSyncStrategySynchronizeEverything->setContentsMargins(0, 0, 0, 0); From eb12b106c8f64ef8c56870314da0e2bc8b25c109 Mon Sep 17 00:00:00 2001 From: Kevin Beraz Date: Mon, 20 Oct 2025 12:37:35 +0200 Subject: [PATCH 281/371] increase button width to display full text in french --- src/gui/settingsdialog.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/gui/settingsdialog.cpp b/src/gui/settingsdialog.cpp index 186c57793dd83..413a0d02c59af 100644 --- a/src/gui/settingsdialog.cpp +++ b/src/gui/settingsdialog.cpp @@ -459,7 +459,7 @@ class ToolButtonAction : public QWidgetAction QString objectName = QLatin1String("settingsdialog_toolbutton_"); objectName += text(); btn->setObjectName(objectName); - btn->setFixedSize(150, 94); + btn->setFixedSize(158, 94); btn->setDefaultAction(this); btn->setToolButtonStyle(Qt::ToolButtonTextUnderIcon); From c6bf689d850f4e6800e76cdf88780f1989fa0f0e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Christopher=20H=C3=A4tty?= Date: Mon, 20 Oct 2025 14:14:17 +0200 Subject: [PATCH 282/371] SES-409 Some minor fixes and beauty updates. Update readme.md --- admin/osx/ionos_macmaker/mac_craft.sh | 54 +++++----- admin/osx/ionos_macmaker/readme.md | 142 +++++++++++++++----------- 2 files changed, 110 insertions(+), 86 deletions(-) diff --git a/admin/osx/ionos_macmaker/mac_craft.sh b/admin/osx/ionos_macmaker/mac_craft.sh index f8559e14ed704..f87bc2c3d8e5b 100755 --- a/admin/osx/ionos_macmaker/mac_craft.sh +++ b/admin/osx/ionos_macmaker/mac_craft.sh @@ -8,15 +8,15 @@ while getopts "b:p:s:n:k:civtu" opt; do b )REL_BASE_DIR=$OPTARG;; p )REL_PATH_TO_PKG=$OPTARG ;; s )IONOS_TEAM_IDENTIFIER=$OPTARG ;; - n )NC_TEAM_IDENTIFIER==$OPTARG ;; - k )SPARKLE_KEY=$OPTARG ;; + n )NC_TEAM_IDENTIFIER=$OPTARG ;; + k )SPARKLE_KEY=$OPTARG ;; # not used c )CLEAN_REBUILD=true ;; i )PACKAGE_INSTALLER=true ;; v )VERBOSE=true ;; t )TEAM_PATCHING=true ;; u )BUILD_UPDATER=true ;; \? ) - echo "Usage: mac_craft.sh [-b ] [-p ] [-s ] [-c clean-rebuild] [-i build-installer] [-v verbose]" + echo "Usage: mac_craft.sh [-b ] [-p ] [-s ] [-n ] [-k ] [-c CLEAN_REBUILD] [-i PACKAGE_INSTALLER] [-v VERBOSE] [-t TEAM_PATCHING] [-u BUILD_UPDATER]" exit 1 ;; esac @@ -27,16 +27,27 @@ if [ "$VERBOSE" = true ]; then set -xe fi -# if [ "$BUILD_UPDATER" == "true" ] && [ -z "$SPARKLE_KEY" ]; then -# echo "SPARKLE_KEY not set. Exiting." -# exit 0 -# fi - if [ "$TEAM_PATCHING" == "true" ] && [ -z "$NC_TEAM_IDENTIFIER" ]; then echo "Patching aktivated, but NC_TEAM_IDENTIFIER not set. Exiting." exit 0 fi +# Check if CODE_SIGN_IDENTITY is set, if not exit +if [ -z "$IONOS_TEAM_IDENTIFIER" ]; then + echo "IONOS_TEAM_IDENTIFIER not set. Exiting." + exit 0 +fi + +if [ -z "$REL_BASE_DIR" ]; then + echo "REL_BASE_DIR not set. Exiting." + exit 0 +fi + +if [ -z "$REL_PATH_TO_PKG" ]; then + echo "REL_PATH_TO_PKG not set. Exiting." + exit 0 +fi + # Some variables BASE_DIR="$( cd "$REL_BASE_DIR" && pwd )" PATH_TO_PKG="$( realpath "$REL_PATH_TO_PKG")" @@ -126,12 +137,7 @@ fi # --------------------------------------------------- # Sign the client -# Check if CODE_SIGN_IDENTITY is set, if not exit -if [ -z "$CODE_SIGN_IDENTITY" ]; then - echo "Code sign identity not set. Exiting." - open $BASE_DIR - exit 0 -fi + echo "start signing the client" @@ -162,9 +168,9 @@ if [ -z "$PACKAGE_INSTALLER" ]; then fi echo "Renew BOM" -mkbom $PAYLOAD_DIR $INNER_PKG/Bom +mkbom "$PAYLOAD_DIR $INNER_PKG/Bom" echo "Reassembling the package..." -(cd $PAYLOAD_DIR && \ +(cd "$PAYLOAD_DIR" && \ find . | cpio -o --format odc | gzip -c) > $PAYLOAD_DIR.new rm -rf $PAYLOAD_DIR @@ -189,11 +195,10 @@ mv $INNER_PKG.signed $INNER_PKG --package-path ex \ $INSTALLER_PKG.unsigned) -RESIGNED_PKG="${BASE_DIR%/}/$PKG_FILENAME.resigned.pkg" -productsign --timestamp --sign "$INSTALLER_CERT" $INSTALLER_PKG.unsigned "$RESIGNED_PKG" +productsign --timestamp --sign "$INSTALLER_CERT" $INSTALLER_PKG.unsigned "$PACKAGE_PATH" # catch the output of the notarytool command -OUTPUT=$(xcrun notarytool submit --wait "$RESIGNED_PKG"\ +OUTPUT=$(xcrun notarytool submit --wait "$PACKAGE_PATH"\ --keychain-profile "IONOS SE HiDrive Next") SUBMISSION_STATUS=$(echo $OUTPUT | grep -o 'status: [^ ]*' | cut -d ' ' -f 2) @@ -206,20 +211,18 @@ if [ $SUBMISSION_STATUS != "Accepted" ]; then fi # staple -xcrun stapler staple "$RESIGNED_PKG" -xcrun stapler validate "$RESIGNED_PKG" +xcrun stapler staple "$PACKAGE_PATH" +xcrun stapler validate "$PACKAGE_PATH" # Sparkle -# PACKAGE_PATH="$BASE_DIR$PKG_FILENAME.resigned.pkg" -SPARKLE_TBZ_PATH="${RESIGNED_PKG}.tbz" +SPARKLE_TBZ_PATH="${PACKAGE_PATH}.tbz" echo "Creating Sparkle package archive: $SPARKLE_TBZ_PATH" # Load Sparkle -echo "HIER" if [ "$BUILD_UPDATER" == "true" ]; then echo "Creating Sparkle package archive: $SPARKLE_TBZ_PATH" @@ -236,7 +239,7 @@ if [ "$BUILD_UPDATER" == "true" ]; then wget $SPARKLE_DOWNLOAD_URI -O ${SPARKLE_DIR%/}/Sparkle.tar.xz tar -xvf ${SPARKLE_DIR%/}/Sparkle.tar.xz -C $SPARKLE_DIR - if tar cf "$SPARKLE_TBZ_PATH" "$RESIGNED_PKG"; then + if tar cf "$SPARKLE_TBZ_PATH" "$PACKAGE_PATH"; then echo "✅ Sparkle package created successfully." else echo "❌ Could not create Sparkle package tbz!" >&2 @@ -244,7 +247,6 @@ if [ "$BUILD_UPDATER" == "true" ]; then fi echo "Signing Sparkle package: $SPARKLE_TBZ_PATH" -# -s $SPARKLE_KEY if "${SPARKLE_DIR%/}/bin/sign_update" "$SPARKLE_TBZ_PATH"; then echo "✅ Sparkle package signed successfully." else diff --git a/admin/osx/ionos_macmaker/readme.md b/admin/osx/ionos_macmaker/readme.md index 1ab68e4803df0..ccbb3ec269c92 100644 --- a/admin/osx/ionos_macmaker/readme.md +++ b/admin/osx/ionos_macmaker/readme.md @@ -1,104 +1,126 @@ -# sign.sh - IONOS HiDrive Next - macOS Resign and Notarization Script +# mac_craft.sh -This script automates the **patching**, **re-signing**, **packaging**, **notarization**, and **stapling** of the `IONOS HiDrive Next` macOS `.pkg` installer. +This script automates the build and signing process for the **IONOS HiDrive Next** macOS client installer. It takes an existing `.pkg` package, optionally patches team identifiers, resigns the app, reassembles the installer, notarizes it with Apple, and finally creates a **Sparkle update package** for distribution. --- -## 🔧 What it does +## Features -1. **Expands** a `.pkg` installer. -2. **Patches** the Team Identifier in `.plist` files and binaries if required. -3. **Code-signs** all components of the `.app` bundle and related scripts. -4. **Reassembles** and **signs** the final `.pkg` installer. -5. **Submits** the `.pkg` for notarization. -6. **Staples** the notarization ticket onto the package. +* **Expand** a given `.pkg` file into a working directory +* **Patch** identifiers if required (team patching mode) +* **Resign** the app with the correct `Developer ID` certificates +* **Reassemble** the installer package with updated files +* **Notarize and staple** the final package with Apple’s notarization service +* **Build Sparkle update** archives for app updates --- -## 📝 Usage +## Usage ```bash -./sign.sh -b -p -s [-c] [-i] [-v] -```` +./mac_craft.sh [-b ] [-p ] [-s ] [-n ] [-k ] [-c] [-i] [-v] [-t] [-u] +``` -### Parameters +### Options -| Flag | Description | -| ---- | ------------------------------------------------------------------------- | -| `-b` | **Base directory** where output and working directories will be stored. | -| `-p` | **Path to the original `.pkg`** to be processed. | -| `-s` | **Code signing identity** (common name of your Developer ID certificate). | -| `-c` | Optional: Perform a **clean rebuild** of the expanded `.pkg`. | -| `-i` | Optional: Enable **installer creation** (required for final output). | -| `-v` | Optional: Enable **verbose mode** for detailed logging. | -| `-t` | Optional: Enable patching of the Team Identifer in Binaries | +* `-b ` : Base directory for build and output +* `-p ` : Path to the original `.pkg` installer +* `-s ` : IONOS Team Identifier (required for signing) +* `-n ` : Old Team Identifier (used for patching if needed) +* `-k ` : Sparkle signing key (**currently unused**) +* `-c` : Clean rebuild (delete old extracted directory before expanding) +* `-i` : Enable installer packaging (otherwise exits after signing) +* `-v` : Verbose mode (print debug output) +* `-t` : Enable team patching mode (replaces `NC_TEAM_IDENTIFIER` with `IONOS_TEAM_IDENTIFIER`) +* `-u` : Build Sparkle updater package --- -## 📦 Example +## Workflow -```bash -./sign.sh -b ~/Desktop/build -p ./IONOS_HiDrive.pkg -s "IONOS SE (SAMPLE_ID)" -c -i -v -``` +1. **Expand Original Package** ---- + * The `.pkg` is expanded into a working directory (`pkgutil --expand-full`). + * If `-c` is set, any previous working directory is removed first. -## 📁 Output +2. **Patch Identifiers (Optional)** -After successful execution, you’ll find the final notarized and stapled installer here: + * If `-t` is used, the script searches `.plist` and binary files for the old team identifier. + * It replaces it with the new `IONOS_TEAM_IDENTIFIER`. + * Both IDs must have the same character length to ensure safe binary patching. -``` -/.resigned.pkg -``` +3. **Resign Application** ---- + * The client `.app` is signed using the `mac-crafter` tool. + * Codesign identity: `Developer ID Application: IONOS SE (TEAM_ID)` + * Verifies that the signed app’s TeamIdentifier matches the expected one. -## 🔐 Code Signing Notes +4. **Reassemble Installer** -* `APPLICATION_CERT` is used to sign the `.app`, its frameworks, and extensions. -* `INSTALLER_CERT` is used to sign the final `.pkg` with `productsign`. -* `TEAM_IDENTIFIER` is **validated** in the final app signature to ensure it matches expectations. + * Recreates the package payload (`mkbom`, `cpio`, `pkgutil --flatten`). + * Signs the installer with: + `Developer ID Installer: IONOS SE (TEAM_ID)` + * Uses `productbuild` and `productsign` to generate the final signed package. ---- +5. **Notarization & Stapling** -## 🧩 Patch Logic + * Submits the package to Apple’s Notary Service (`xcrun notarytool`). + * Waits for the result, validates acceptance. + * Applies a **staple** to the installer (`xcrun stapler staple`). -If the script detects the **old Team Identifier** (`NC_TEAM_IDENTIFIER`) inside any `.plist` or binary: +6. **Sparkle Update Build (Optional)** -* It **replaces** it with the new identifier (`IONOS_TEAM_IDENTIFIER`), only if the lengths match. -* Ensures a **binary-safe patch** using `perl` and `sed`. -* Only files with actual matches are patched. + * Downloads Sparkle if not available. + * Archives the signed package as `.tbz`. + * Signs the archive using Sparkle’s `sign_update` tool. --- -## 🍏 Notarization - -The script uses: +## Example ```bash -xcrun notarytool submit --wait --keychain-profile "IONOS SE HiDrive Next" +./mac_craft.sh \ + -b /Users/developer/build \ + -p ./IONOS.pkg \ + -s ABC123XYZ \ + -n OLDTEAMID \ + -i -c -t -u -v ``` -Make sure the keychain profile is **set up properly** and can access your notarization credentials. +This command will: + +* Clean and rebuild the working directory +* Expand `IONOS.pkg` +* Patch from `OLDTEAMID` → `ABC123XYZ` +* Resign the app and installer +* Notarize and staple the package +* Build a signed Sparkle update archive +* Run in verbose mode --- -## 🛠 Requirements +## Requirements -* macOS with Xcode Command Line Tools installed -* Access to a valid **Developer ID Application** and **Installer certificate** -* A configured **notarytool profile** in your keychain -* Tools used: +* macOS with Xcode tools installed +* Apple Developer account with: - * `pkgutil`, `codesign`, `productsign`, `productbuild`, `xcrun`, `plutil`, `grep`, `sed`, `perl`, `mkbom`, `cpio`, `gzip` + * **Developer ID Application** certificate + * **Developer ID Installer** certificate +* `mac-crafter` tool (Swift package, provided by Nextcloud) +* `pkgutil`, `productbuild`, `productsign`, `notarytool`, `stapler`, `xcrun`, `grep`, `sed`, `mkbom`, `cpio`, `gzip` +* `wget`, `tar`, `perl` for Sparkle integration --- -## 🛡️ Safety Checks +## Output -* Team ID patching only happens if both IDs are the **same length**. -* Binary patching is skipped unless needed. -* Final code signature is checked for correct TeamIdentifier. -* If notarization fails, the script exits with an error. +* Final notarized installer: ---- + ``` + /.resigned.pkg + ``` +* Sparkle update archive (if `-u` enabled): + + ``` + /.resigned.pkg.tbz + ``` From ce565c393acaa1321d30b53bb35968b41d4ef2c8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Christopher=20H=C3=A4tty?= Date: Thu, 30 Oct 2025 14:52:44 +0100 Subject: [PATCH 283/371] Desperate Try to fix VFS --- CMakeLists.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 01e9b62000462..6f73a45d24311 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -221,7 +221,7 @@ if(OWNCLOUD_5XX_NO_BLACKLIST) endif() if(APPLE) - set( SOCKETAPI_TEAM_IDENTIFIER_PREFIX "" CACHE STRING "SocketApi prefix (including a following dot) that must match the codesign key's TeamIdentifier/Organizational Unit" ) + set( SOCKETAPI_TEAM_IDENTIFIER_PREFIX "5TDLCVD243" CACHE STRING "SocketApi prefix (including a following dot) that must match the codesign key's TeamIdentifier/Organizational Unit" ) endif() if(BUILD_CLIENT) From 8d5e8d28b7c6bcf2b5352ad4cef51c2948963e9d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Christopher=20H=C3=A4tty?= Date: Thu, 30 Oct 2025 15:55:58 +0100 Subject: [PATCH 284/371] Desperate Try to fix VFS, forgotten dot --- CMakeLists.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 6f73a45d24311..b94d99db8ab1b 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -221,7 +221,7 @@ if(OWNCLOUD_5XX_NO_BLACKLIST) endif() if(APPLE) - set( SOCKETAPI_TEAM_IDENTIFIER_PREFIX "5TDLCVD243" CACHE STRING "SocketApi prefix (including a following dot) that must match the codesign key's TeamIdentifier/Organizational Unit" ) + set( SOCKETAPI_TEAM_IDENTIFIER_PREFIX "5TDLCVD243." CACHE STRING "SocketApi prefix (including a following dot) that must match the codesign key's TeamIdentifier/Organizational Unit" ) endif() if(BUILD_CLIENT) From a6f0a17ad2711700a9c5f5b58132e23a3aeb1cc3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Christopher=20H=C3=A4tty?= Date: Fri, 31 Oct 2025 14:13:21 +0100 Subject: [PATCH 285/371] NoIssue - PAck only file in Sparke tbz, fixed missing quotes --- admin/osx/ionos_macmaker/mac_craft.sh | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/admin/osx/ionos_macmaker/mac_craft.sh b/admin/osx/ionos_macmaker/mac_craft.sh index f87bc2c3d8e5b..35943bc4018a4 100755 --- a/admin/osx/ionos_macmaker/mac_craft.sh +++ b/admin/osx/ionos_macmaker/mac_craft.sh @@ -168,7 +168,7 @@ if [ -z "$PACKAGE_INSTALLER" ]; then fi echo "Renew BOM" -mkbom "$PAYLOAD_DIR $INNER_PKG/Bom" +mkbom "$PAYLOAD_DIR" "$INNER_PKG/Bom" echo "Reassembling the package..." (cd "$PAYLOAD_DIR" && \ find . | cpio -o --format odc | gzip -c) > $PAYLOAD_DIR.new @@ -239,7 +239,7 @@ if [ "$BUILD_UPDATER" == "true" ]; then wget $SPARKLE_DOWNLOAD_URI -O ${SPARKLE_DIR%/}/Sparkle.tar.xz tar -xvf ${SPARKLE_DIR%/}/Sparkle.tar.xz -C $SPARKLE_DIR - if tar cf "$SPARKLE_TBZ_PATH" "$PACKAGE_PATH"; then + if tar cf "$SPARKLE_TBZ_PATH" -C "$(dirname "$PACKAGE_PATH")" "$(basename "$PACKAGE_PATH")"; then echo "✅ Sparkle package created successfully." else echo "❌ Could not create Sparkle package tbz!" >&2 From 4e2819a1f0a1b6ad43ecd8c2f492e32191db2e92 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Christopher=20H=C3=A4tty?= Date: Fri, 31 Oct 2025 14:14:17 +0100 Subject: [PATCH 286/371] SES-412 - Hardcode Team ID --- admin/osx/macosx.entitlements.cmake | 2 +- .../FileProviderExt/FileProviderExt.entitlements | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/admin/osx/macosx.entitlements.cmake b/admin/osx/macosx.entitlements.cmake index 49b409f036c1a..b206b92465afc 100644 --- a/admin/osx/macosx.entitlements.cmake +++ b/admin/osx/macosx.entitlements.cmake @@ -4,7 +4,7 @@ com.apple.security.application-groups - @SOCKETAPI_TEAM_IDENTIFIER_PREFIX@@APPLICATION_REV_DOMAIN@ + 5TDLCVD243.com.ionos.hidrivenext.desktopclient diff --git a/shell_integration/MacOSX/NextcloudIntegration/FileProviderExt/FileProviderExt.entitlements b/shell_integration/MacOSX/NextcloudIntegration/FileProviderExt/FileProviderExt.entitlements index eab912dc49600..8102f4fb7df19 100644 --- a/shell_integration/MacOSX/NextcloudIntegration/FileProviderExt/FileProviderExt.entitlements +++ b/shell_integration/MacOSX/NextcloudIntegration/FileProviderExt/FileProviderExt.entitlements @@ -6,7 +6,7 @@ com.apple.security.application-groups - $(OC_SOCKETAPI_TEAM_IDENTIFIER_PREFIX)$(OC_APPLICATION_REV_DOMAIN) + 5TDLCVD243.com.ionos.hidrivenext.desktopclient com.apple.security.network.client From 75984757f49c864ded04e75974fddf0f089dc4e4 Mon Sep 17 00:00:00 2001 From: Kevin Beraz Date: Mon, 20 Oct 2025 16:30:55 +0200 Subject: [PATCH 287/371] base structure for multiple brandings --- IONOS.cmake | 27 +-- config.h.in | 1 + src/libsync/ionostheme.h | 2 +- src/libsync/stratotheme.h | 337 ++++++++++++++++++++++++++++++++++ src/libsync/whitelabeltheme.h | 28 +++ 5 files changed, 383 insertions(+), 12 deletions(-) create mode 100644 src/libsync/stratotheme.h create mode 100644 src/libsync/whitelabeltheme.h diff --git a/IONOS.cmake b/IONOS.cmake index 42233efd6ba06..c427641f83ac0 100644 --- a/IONOS.cmake +++ b/IONOS.cmake @@ -7,15 +7,16 @@ set( APPLICATION_WIZARD_HEADER_TITLE_COLOR "#000000" CACHE STRING "Hex color of ## Only needed for local build set( APPLICATION_VIRTUALFILE_SUFFIX "${APPLICATION_SHORTNAME}_virtual" CACHE STRING "Virtual file suffix (not including the .)" FORCE) -# set( APPLICATION_NAME "IONOS HiDrive Next" ) -# set( APPLICATION_SHORTNAME "IONOSHiDriveNext" ) -# set( APPLICATION_EXECUTABLE "IONOS_HiDrive_Next" ) -# set( APPLICATION_CONFIG_NAME "IONOS-HiDrive-Next" ) -# set( APPLICATION_ICON_NAME "ionos_hidrive_next" ) -# set( APPLICATION_DOMAIN "ionos.com" ) -# set( APPLICATION_UPDATE_URL "https://customerupdates.nextcloud.com/client/" CACHE STRING "URL for updater" FORCE) -# set( APPLICATION_HELP_URL "" CACHE STRING "URL for the help menu" FORCE) -# set( APPLICATION_SERVER_URL "https://storage.ionos.fr" CACHE STRING "URL for the server to use. If entered, the UI field will be pre-filled with it" FORCE) +set( APPLICATION_NAME "STRATO HiDrive Next" ) +set( APPLICATION_SHORTNAME "STRATOHiDriveNext" ) +set( APPLICATION_EXECUTABLE "STRATO_HiDrive_Next" ) +set( APPLICATION_CONFIG_NAME "STRATO-HiDrive-Next" ) +set( APPLICATION_ICON_NAME "strato_hidrive_next" ) +set( APPLICATION_DOMAIN "strato.com" ) +set( APPLICATION_UPDATE_URL "https://customerupdates.nextcloud.com/client/" CACHE STRING "URL for updater" FORCE) +set( APPLICATION_HELP_URL "" CACHE STRING "URL for the help menu" FORCE) +set( APPLICATION_SERVER_URL "https://storage.strato.fr" CACHE STRING "URL for the server to use. If entered, the UI field will be pre-filled with it" FORCE) +set( WHITELABEL_BRAND "IONOS") ## Windows Shell Extensions & MSI - IMPORTANT: Generate new GUIDs for custom builds with "guidgen" or "uuidgen" if(WIN32) @@ -33,7 +34,11 @@ if(WIN32) set( WIN_MSI_UPGRADE_CODE "6C9E5670-E8A9-4BBD-9BDF-D003794AC177" ) endif() -if(APPLE AND APPLICATION_NAME STREQUAL "IONOS HiDrive Next") - set( APPLICATION_ICON_NAME "ionos_hidrive_next-macOS" ) +if(APPLE AND APPLICATION_NAME STREQUAL "STRATO HiDrive Next") + set( APPLICATION_ICON_NAME "strato_hidrive_next-macOS" ) message("Using macOS-specific application icon: ${APPLICATION_ICON_NAME}") +endif() + +if(APPLICATION_NAME STREQUAL "STRATO HiDrive Next") + set( WHITELABEL_BRAND "STRATO" ) endif() \ No newline at end of file diff --git a/config.h.in b/config.h.in index 464c2168933d6..b9381d0971250 100644 --- a/config.h.in +++ b/config.h.in @@ -13,6 +13,7 @@ #cmakedefine THEME_INCLUDE @THEME_INCLUDE@ #cmakedefine APPLICATION_NAME "@APPLICATION_NAME@" +#cmakedefine WHITELABEL_BRAND "@WHITELABEL_BRAND@" #cmakedefine APPLICATION_VENDOR "@APPLICATION_VENDOR@" #cmakedefine APPLICATION_DOMAIN "@APPLICATION_DOMAIN@" #cmakedefine APPLICATION_REV_DOMAIN "@APPLICATION_REV_DOMAIN@" diff --git a/src/libsync/ionostheme.h b/src/libsync/ionostheme.h index ce19ee092b5e3..0fc3a56965e84 100644 --- a/src/libsync/ionostheme.h +++ b/src/libsync/ionostheme.h @@ -7,7 +7,7 @@ namespace OCC { -class IonosTheme { +class IonosTheme :: Theme { public: //Icons diff --git a/src/libsync/stratotheme.h b/src/libsync/stratotheme.h new file mode 100644 index 0000000000000..3bb9bd07b91e4 --- /dev/null +++ b/src/libsync/stratotheme.h @@ -0,0 +1,337 @@ +#ifndef _STRATOTHEME_H +#define _STRATOTHEME_H + +#include +#include +#include "theme.h" + +namespace OCC { + +class StratoTheme :: Theme{ +public: + + //Icons + static QString avatarIcon() { + return QString(Theme::themePrefix) + QStringLiteral("ses/ses-settingsAvatar.svg"); + } + + static QString folderIcon() { + return QString(Theme::themePrefix) + QStringLiteral("ses/ses-folderIcon.svg"); + } + + static QString syncArrows() { + return QString(Theme::themePrefix) + QStringLiteral("ses/ses-syncArrows.svg"); + } + + static QString questionCircleIcon() { + return QString(Theme::themePrefix) + QStringLiteral("ses/ses-questionMark.svg"); + } + + static QString liveBackupPlusIcon() { + return QString(Theme::themePrefix) + QStringLiteral("ses/ses-addlivebackup.svg"); + } + + static QString plusIcon() { + return QStringLiteral("qrc:///client/theme/ses/ses-darkPlus.svg"); + } + + static QString deleteIcon() { + return QStringLiteral("qrc:///client/theme/ses/ses-accountDelete.svg"); + } + + static QString refreshIcon() { + return QStringLiteral("qrc:///client/theme/ses/ses-refresh.svg"); + } + + static QString syncSuccessIcon() { + return QStringLiteral("qrc:///client/theme/ses/ses-syncstatus-success.svg"); + } + + static QString syncWarnIcon() { + return QStringLiteral("qrc:///client/theme/ses/ses-syncstatus-warning.svg"); + } + + static QString syncErrorIcon() { + return QStringLiteral("qrc:///client/theme/ses/ses-syncstatus-error.svg"); + } + + static QString syncPausedIcon() { + return QStringLiteral("qrc:///client/theme/ses/ses-syncstatus-paused.svg"); + } + + static QString syncingIcon() { + return QStringLiteral("qrc:///client/theme/ses/ses-syncstatus-syncing.svg"); + } + + static QString syncOfflineIcon() { + return QStringLiteral("qrc:///client/theme/ses/ses-state-offline.svg"); + } + + static int treeViewIconSize() { + return 32; + } + + //Control Configuration: Sizes + static QString toolbarActionBorderRadius() { + return "8px"; + } + + static QString toolbarSideMargin() { + return "10px"; + } + + static int toolbarIconSize(){ + return 24; + } + + static QString buttonRadius() { + return "4px"; + } + + static int buttonRadiusInt() { + return 4; + } + + static QString buttonPadding() { + return "10px"; + } + + static QString smallMargin() { + return "8"; + } + + static int minimalSettingsDialogWidth() { + return 740; + } + + static int wizardFixedWidth() { + return 576; + } + + static int wizardFixedHeight() { + return 704; + } + + static int LoginPageSpacer() { + return 45; + } + + //Font Configuration + static QString settingsFont() { + return "Segoe UI"; + } + + static QString contextMenuFont() { + return ":/client/fonts/OpenSans-Regular.ttf"; + } + + static QString settingsSmallTextSize() { + return "14px"; + } + + static int settingsTextPixel() { + return 16; + } + + static QString settingsTextSize() { + return QString::number(settingsTextPixel()) + "px"; + } + + static int settingsTitlePixel() { + return 20; + } + + static QString settingsTitleSize() { + return QString::number(settingsTitlePixel()) + "px"; + } + + static int settingsBigTitlePixel() { + return 24; + } + + static QString settingsBigTitleSize() { + return QString::number(settingsBigTitlePixel()) + "px"; + } + + static QString onboardingTitle() { + return "28px"; + } + + static QString settingsTextWeight() { + return "400"; + } + + static QString settingsTitleWeight400() { + return "400"; + } + + static QString settingsTitleWeight500() { + return "500"; + } + + static QString settingsTitleWeight600() { + return "600"; + } + + static QFont::Weight settingsTitleWeightDemiBold() { + return QFont::DemiBold; + } + + static QFont::Weight settingsTitleWeightNormal() { + return QFont::Normal; + } + + static QFont settingsFontDefault(){ + QFont defaultFont(settingsFont()); + defaultFont.setPixelSize(settingsTextPixel()); + defaultFont.setWeight(settingsTitleWeightNormal()); + return defaultFont; + } + + static QString titleColor() { + return "#000000"; + } + + static QString folderWizardSubtitleColor() { + return "#104996"; + } + + static QString folderWizardPathColor() { + return "#97A3B4"; + } + + static QString loginWizardFontGrey() { + return "#616161"; + } + + static QString loginWizardFontLightGrey() { + return "#BDBDBD"; + } + + static QString fontConfigurationCss(QString font, QString size, QString weight, QString color) { + return QString("font-family: %1; font-size: %2; font-weight: %3; color: %4; ").arg( + font, + size, + weight, + color); + } + + //Colors + static QString settingsLinkColor() { + return "#02306A"; + } + + static QString buttonPrimaryColor() { + return "#0F6CBD"; + } + + static QString buttonSecondaryBorderColor() { + return "#D1D1D1"; + } + + static QString buttonDisabledColor() { + return "#F0F0F0"; + } + + static QString buttonPrimaryHoverColor() { + return "#115EA3"; + } + + static QString buttonSecondaryHoverColor() { + return "#F5F5F5"; + } + + static QString buttonPrimaryPressedColor() { + return "#0C3B5E"; + } + + static QString buttonSecondaryPressedColor() { + return "#E0E0E0"; + } + + static QString buttonDisabledFontColor() { + return "#BDBDBD"; + } + + static QString white() { + return "#FFFFFF"; + } + + static QString black() { + return "#000000"; + } + + static QString dialogBackgroundColor() { + return "#FAFAFA"; + } + + static QString menuBorderColor() { + return "#2E4360"; + } + + static QString menuTextColor() { + return "#001B41"; + } + + static QString menuSelectedItemColor() { + return "#F4F7FA"; + } + + static QString menuBorderRadius() { + return "16px"; + } + + static QString buttonPressedColor() { + return "#0B2A63"; + } + + static QString buttonHoveredColor() { + return "#1474C4"; + } + + static QString toolButtonHoveredColor() { + return "#DBEDF8"; + } + + static QString toolButtonPressedColor() { + return "#95CAEB"; + } + + static QString errorBorderColor() { + return "#EEACB2"; + } + + static QString errorColor() { + return "#FDF3F4"; + } + + static QString warningBorderColor() { + return "#F4BFAB"; + } + + static QString warningColor() { + return "#FDF6F3"; + } + + static QString successBorderColor() { + return "#9FD89F"; + } + + static QString successColor() { + return "#F1FAF1"; + } + + static QString infoBorderColor() { + return "#11C7E6"; + } + + static QString infoColor() { + return "#E6F9FC"; + } + + +private: + StratoTheme() {} +}; +} +#endif // _STRATOTHEME_H \ No newline at end of file diff --git a/src/libsync/whitelabeltheme.h b/src/libsync/whitelabeltheme.h new file mode 100644 index 0000000000000..9ef915df8a567 --- /dev/null +++ b/src/libsync/whitelabeltheme.h @@ -0,0 +1,28 @@ +#ifndef _WHITELABELTHEME_H +#define _WHITELABELTHEME_H + +#include +#include +#include "theme.h" + +namespace OCC { + +class WhitelabelTheme { +public: + +static Theme* getInstance() { + + #if WHITELABEL_BRAND == "IONOS" + return IonosTheme::instance(); + #elif WHITELABEL_BRAND == "STRATO" + return StratoTheme::instance(); + #else + return Theme::instance(); + #endif +} + +private: + WhitelabelTheme() {} +}; +} +#endif // _WHITELABELTHEME_H \ No newline at end of file From 03ac4d167d2717e1c8a08d542d1597b8680c89da Mon Sep 17 00:00:00 2001 From: Kevin Beraz Date: Mon, 20 Oct 2025 16:31:17 +0200 Subject: [PATCH 288/371] change references to whitelabelTheme file --- src/gui/accountsettings.cpp | 98 ++++---- src/gui/buttonstyle.h | 74 +++--- src/gui/caseclashfilenamedialog.cpp | 28 +-- src/gui/conflictdialog.cpp | 18 +- src/gui/creds/webflowcredentialsdialog.cpp | 14 +- src/gui/foldercreationdialog.cpp | 18 +- src/gui/folderstatusdelegate.cpp | 34 +-- src/gui/folderstatusview.cpp | 4 +- src/gui/folderwizard.cpp | 212 +++++++++--------- src/gui/generalsettings.cpp | 54 ++--- src/gui/ignorelisttablewidget.cpp | 74 +++--- src/gui/invalidfilenamedialog.cpp | 24 +- src/gui/linkbutton.cpp | 8 +- src/gui/main.cpp | 4 +- src/gui/moreoptionsbuttonstylehelper.cpp | 2 +- src/gui/owncloudgui.cpp | 2 +- src/gui/pushbuttonstylehelper.cpp | 8 +- src/gui/selectivesyncdialog.cpp | 70 +++--- src/gui/sessnackbar.cpp | 8 +- src/gui/sesstyle.cpp | 2 +- src/gui/settingsdialog.cpp | 26 +-- src/gui/systray.cpp | 12 +- src/gui/tray/activitylistmodel.cpp | 8 +- src/gui/tray/usermodel.cpp | 14 +- src/gui/wizard/dataprotectionpage.cpp | 10 +- src/gui/wizard/dataprotectionsettingspage.cpp | 52 ++--- src/gui/wizard/flow2authwidget.cpp | 20 +- src/gui/wizard/owncloudadvancedsetuppage.cpp | 120 +++++----- src/gui/wizard/owncloudwizard.cpp | 4 +- src/gui/wizard/slideshow.cpp | 14 +- 30 files changed, 518 insertions(+), 518 deletions(-) diff --git a/src/gui/accountsettings.cpp b/src/gui/accountsettings.cpp index 9a309ea23c19d..a5dc23f14de67 100644 --- a/src/gui/accountsettings.cpp +++ b/src/gui/accountsettings.cpp @@ -20,7 +20,7 @@ #include "ui_accountsettings.h" #include "theme.h" -#include "ionostheme.h" +#include "whitelabeltheme.h" #include "buttonstyle.h" #include "account.h" #include "foldercreationdialog.h" @@ -181,7 +181,7 @@ AccountSettings::AccountSettings(AccountState *accountState, QWidget *parent) { _ui->setupUi(this); this->setAutoFillBackground(true); - setPalette(QPalette(QPalette::Window, IonosTheme::dialogBackgroundColor())); + setPalette(QPalette(QPalette::Window, WhitelabelTheme::getInstance::dialogBackgroundColor())); _model->setAccountState(_accountState); _model->setParent(this); @@ -191,7 +191,7 @@ AccountSettings::AccountSettings(AccountState *accountState, QWidget *parent) // Connect styleChanged events to our widgets, so they can adapt (Dark-/Light-Mode switching) connect(this, &AccountSettings::styleChanged, delegate, &FolderStatusDelegate::slotStyleChanged); - _ui->_folderList->setFont(IonosTheme::settingsFontDefault()); + _ui->_folderList->setFont(WhitelabelTheme::getInstance::settingsFontDefault()); _ui->_folderList->header()->hide(); _ui->_folderList->setItemDelegate(delegate); @@ -214,7 +214,7 @@ AccountSettings::AccountSettings(AccountState *accountState, QWidget *parent) fpSettingsLayout->addWidget(fpSettingsWidget); fileProviderTab->setLayout(fpSettingsLayout); - _ui->tabWidget->setStyleSheet(QStringLiteral("QTabWidget::pane { background-color: %1; }").arg(IonosTheme::white())); + _ui->tabWidget->setStyleSheet(QStringLiteral("QTabWidget::pane { background-color: %1; }").arg(WhitelabelTheme::getInstance::white())); _ui->tabWidget->tabBar()->setStyleSheet("QTabBar::tab {\ color: #000000;\ }\ @@ -584,7 +584,7 @@ void AccountSettings::openIgnoredFilesDialog(const QString & absFolderPath) const QString ignoreFile{absFolderPath + ".sync-exclude.lst"}; const auto layout = new QVBoxLayout(); const auto ignoreListWidget = new IgnoreListTableWidget(this); - ignoreListWidget->setFont(IonosTheme::settingsFont()); + ignoreListWidget->setFont(WhitelabelTheme::getInstance::settingsFont()); ignoreListWidget->readIgnoreFile(ignoreFile); layout->addWidget(ignoreListWidget); @@ -603,7 +603,7 @@ void AccountSettings::openIgnoredFilesDialog(const QString & absFolderPath) }); connect(buttonBox, &QDialogButtonBox::rejected, dialog, &QDialog::close); - dialog->setPalette(QPalette(QPalette::Window, IonosTheme::white())); + dialog->setPalette(QPalette(QPalette::Window, WhitelabelTheme::getInstance::white())); dialog->setWindowFlags(windowFlags() & ~Qt::WindowContextHelpButtonHint); dialog->open(); @@ -725,14 +725,14 @@ void AccountSettings::styleCustomContextMenu(QMenu *menu) const "border-radius: 8px; " "}" ).arg( - IonosTheme::white(), - IonosTheme::menuBorderColor(), - IonosTheme::menuTextColor(), - IonosTheme::menuSelectedItemColor(), - IonosTheme::menuBorderRadius(), - IonosTheme::contextMenuFont(), - IonosTheme::settingsTextSize(), - IonosTheme::settingsTextWeight() + WhitelabelTheme::getInstance::white(), + WhitelabelTheme::getInstance::menuBorderColor(), + WhitelabelTheme::getInstance::menuTextColor(), + WhitelabelTheme::getInstance::menuSelectedItemColor(), + WhitelabelTheme::getInstance::menuBorderRadius(), + WhitelabelTheme::getInstance::contextMenuFont(), + WhitelabelTheme::getInstance::settingsTextSize(), + WhitelabelTheme::getInstance::settingsTextWeight() ) ); } @@ -982,13 +982,13 @@ void AccountSettings::slotRemoveCurrentFolder() messageBox->setStyleSheet( QStringLiteral("QMessageBox QLabel { %1; } QDialog { background-color: %2; }").arg( - IonosTheme::fontConfigurationCss( - IonosTheme::settingsFont(), - IonosTheme::settingsTextSize(), - IonosTheme::settingsTextWeight(), - IonosTheme::titleColor() + WhitelabelTheme::getInstance::fontConfigurationCss( + WhitelabelTheme::getInstance::settingsFont(), + WhitelabelTheme::getInstance::settingsTextSize(), + WhitelabelTheme::getInstance::settingsTextWeight(), + WhitelabelTheme::getInstance::titleColor() ), - IonosTheme::dialogBackgroundColor() + WhitelabelTheme::getInstance::dialogBackgroundColor() ) ); @@ -1117,13 +1117,13 @@ void AccountSettings::slotDisableVfsCurrentFolder() msgBox->setStyleSheet(QStringLiteral( "QMessageBox QLabel { %1 background-color: %2; }").arg( - IonosTheme::fontConfigurationCss( - IonosTheme::settingsFont(), - IonosTheme::settingsTextSize(), - IonosTheme::settingsTextWeight(), - IonosTheme::titleColor() + WhitelabelTheme::getInstance::fontConfigurationCss( + WhitelabelTheme::getInstance::settingsFont(), + WhitelabelTheme::getInstance::settingsTextSize(), + WhitelabelTheme::getInstance::settingsTextWeight(), + WhitelabelTheme::getInstance::titleColor() ), - IonosTheme::white() + WhitelabelTheme::getInstance::white() ) ); @@ -1341,11 +1341,11 @@ void AccountSettings::slotEnableCurrentFolder(bool terminate) msgbox->setStyleSheet( QStringLiteral("QMessageBox QLabel { %1; }").arg( - IonosTheme::fontConfigurationCss( - IonosTheme::settingsFont(), - IonosTheme::settingsTextSize(), - IonosTheme::settingsTextWeight(), - IonosTheme::titleColor() + WhitelabelTheme::getInstance::fontConfigurationCss( + WhitelabelTheme::getInstance::settingsFont(), + WhitelabelTheme::getInstance::settingsTextSize(), + WhitelabelTheme::getInstance::settingsTextWeight(), + WhitelabelTheme::getInstance::titleColor() ) ) ); @@ -1832,40 +1832,40 @@ void AccountSettings::customizeStyle() _ui->connectLabel->setText(msg); const auto color = palette().highlight().color(); - _ui->quotaProgressBar->setStyleSheet(progressBarStyle().arg(IonosTheme::dialogBackgroundColor(), color.name())); + _ui->quotaProgressBar->setStyleSheet(progressBarStyle().arg(WhitelabelTheme::getInstance::dialogBackgroundColor(), color.name())); _ui->quotaInfoLabel->setStyleSheet( - IonosTheme::fontConfigurationCss( - IonosTheme::settingsFont(), - IonosTheme::settingsTextSize(), - IonosTheme::settingsTitleWeight600(), - IonosTheme::titleColor() + WhitelabelTheme::getInstance::fontConfigurationCss( + WhitelabelTheme::getInstance::settingsFont(), + WhitelabelTheme::getInstance::settingsTextSize(), + WhitelabelTheme::getInstance::settingsTitleWeight600(), + WhitelabelTheme::getInstance::titleColor() ) ); _ui->quotaInfo2Label->setStyleSheet( - IonosTheme::fontConfigurationCss( - IonosTheme::settingsFont(), - IonosTheme::settingsSmallTextSize(), - IonosTheme::settingsTextWeight(), - IonosTheme::titleColor() + WhitelabelTheme::getInstance::fontConfigurationCss( + WhitelabelTheme::getInstance::settingsFont(), + WhitelabelTheme::getInstance::settingsSmallTextSize(), + WhitelabelTheme::getInstance::settingsTextWeight(), + WhitelabelTheme::getInstance::titleColor() ) ); _ui->_folderList->setStyleSheet( QStringLiteral("background: %1; %2;").arg( - IonosTheme::white(), - IonosTheme::fontConfigurationCss( - IonosTheme::settingsFont(), - IonosTheme::settingsTextSize(), - IonosTheme::settingsTextWeight(), - IonosTheme::titleColor() + WhitelabelTheme::getInstance::white(), + WhitelabelTheme::getInstance::fontConfigurationCss( + WhitelabelTheme::getInstance::settingsFont(), + WhitelabelTheme::getInstance::settingsTextSize(), + WhitelabelTheme::getInstance::settingsTextWeight(), + WhitelabelTheme::getInstance::titleColor() ) ) ); #if defined(Q_OS_MAC) - _ui->selectiveSyncLabel->setStyleSheet(QString("color: %1;").arg(IonosTheme::black())); + _ui->selectiveSyncLabel->setStyleSheet(QString("color: %1;").arg(WhitelabelTheme::getInstance::black())); _ui->horizontalLayout->setSpacing(16); #endif diff --git a/src/gui/buttonstyle.h b/src/gui/buttonstyle.h index 2f199b1352c80..587487c62626b 100644 --- a/src/gui/buttonstyle.h +++ b/src/gui/buttonstyle.h @@ -2,7 +2,7 @@ #ifndef _BUTTONSTYLE_H #define _BUTTONSTYLE_H -#include "ionostheme.h" +#include "whitelabeltheme.h" #include #include @@ -69,67 +69,67 @@ class PrimaryButtonStyle : public ButtonStyle { // Default QString buttonDefaultColor() const override { - return OCC::IonosTheme::buttonPrimaryColor(); + return OCC::WhitelabelTheme::getInstance::buttonPrimaryColor(); } QString buttonDefaultBorderColor() const override { - return OCC::IonosTheme::buttonPrimaryColor(); + return OCC::WhitelabelTheme::getInstance::buttonPrimaryColor(); } //Hover QString buttonHoverColor() const override { - return OCC::IonosTheme::buttonPrimaryHoverColor(); + return OCC::WhitelabelTheme::getInstance::buttonPrimaryHoverColor(); } QString buttonHoverBorderColor() const override { - return OCC::IonosTheme::buttonPrimaryHoverColor(); + return OCC::WhitelabelTheme::getInstance::buttonPrimaryHoverColor(); } // Pressed QString buttonPressedColor() const override { - return OCC::IonosTheme::buttonPrimaryPressedColor(); + return OCC::WhitelabelTheme::getInstance::buttonPrimaryPressedColor(); } QString buttonPressedBorderColor() const override { - return OCC::IonosTheme::buttonPrimaryPressedColor(); + return OCC::WhitelabelTheme::getInstance::buttonPrimaryPressedColor(); } // Disabled QString buttonDisabledColor() const override { - return OCC::IonosTheme::buttonDisabledColor(); + return OCC::WhitelabelTheme::getInstance::buttonDisabledColor(); } QString buttonDisabledBorderColor() const override { - return OCC::IonosTheme::buttonDisabledColor(); + return OCC::WhitelabelTheme::getInstance::buttonDisabledColor(); } // Focused QString buttonFocusedColor() const override { - return OCC::IonosTheme::buttonPrimaryColor(); + return OCC::WhitelabelTheme::getInstance::buttonPrimaryColor(); } QString buttonFocusedBorderColor() const override { - return OCC::IonosTheme::black(); + return OCC::WhitelabelTheme::getInstance::black(); } // Font QString buttonDisabledFontColor() const override { - return OCC::IonosTheme::buttonDisabledFontColor(); + return OCC::WhitelabelTheme::getInstance::buttonDisabledFontColor(); } QString buttonFontColor() const override { - return OCC::IonosTheme::white(); + return OCC::WhitelabelTheme::getInstance::white(); } }; @@ -152,67 +152,67 @@ class SecondaryButtonStyle : public ButtonStyle { // Default QString buttonDefaultColor() const override { - return OCC::IonosTheme::white(); + return OCC::WhitelabelTheme::getInstance::white(); } QString buttonDefaultBorderColor() const override { - return OCC::IonosTheme::buttonSecondaryBorderColor(); + return OCC::WhitelabelTheme::getInstance::buttonSecondaryBorderColor(); } // Hover QString buttonHoverColor() const override { - return OCC::IonosTheme::buttonSecondaryHoverColor(); + return OCC::WhitelabelTheme::getInstance::buttonSecondaryHoverColor(); } QString buttonHoverBorderColor() const override { - return OCC::IonosTheme::buttonSecondaryBorderColor(); + return OCC::WhitelabelTheme::getInstance::buttonSecondaryBorderColor(); } // Pressed QString buttonPressedColor() const override { - return OCC::IonosTheme::buttonSecondaryPressedColor(); + return OCC::WhitelabelTheme::getInstance::buttonSecondaryPressedColor(); } QString buttonPressedBorderColor() const override { - return OCC::IonosTheme::buttonSecondaryBorderColor(); + return OCC::WhitelabelTheme::getInstance::buttonSecondaryBorderColor(); } // Disabled QString buttonDisabledColor() const override { - return OCC::IonosTheme::buttonDisabledColor(); + return OCC::WhitelabelTheme::getInstance::buttonDisabledColor(); } QString buttonDisabledBorderColor() const override { - return OCC::IonosTheme::buttonDisabledColor(); + return OCC::WhitelabelTheme::getInstance::buttonDisabledColor(); } // Focused QString buttonFocusedColor() const override { - return OCC::IonosTheme::white(); + return OCC::WhitelabelTheme::getInstance::white(); } QString buttonFocusedBorderColor() const override { - return OCC::IonosTheme::black(); + return OCC::WhitelabelTheme::getInstance::black(); } // Font QString buttonDisabledFontColor() const override { - return OCC::IonosTheme::buttonDisabledFontColor(); + return OCC::WhitelabelTheme::getInstance::buttonDisabledFontColor(); } QString buttonFontColor() const override { - return OCC::IonosTheme::black(); + return OCC::WhitelabelTheme::getInstance::black(); } }; @@ -235,67 +235,67 @@ class MoreOptionsButtonStyle : public ButtonStyle { // Default QString buttonDefaultColor() const override { - return OCC::IonosTheme::white(); + return OCC::WhitelabelTheme::getInstance::white(); } QString buttonDefaultBorderColor() const override { - return OCC::IonosTheme::white(); + return OCC::WhitelabelTheme::getInstance::white(); } // Hover QString buttonHoverColor() const override { - return OCC::IonosTheme::buttonHoveredColor(); + return OCC::WhitelabelTheme::getInstance::buttonHoveredColor(); } QString buttonHoverBorderColor() const override { - return OCC::IonosTheme::buttonHoveredColor(); + return OCC::WhitelabelTheme::getInstance::buttonHoveredColor(); } // Pressed QString buttonPressedColor() const override { - return OCC::IonosTheme::buttonPressedColor(); + return OCC::WhitelabelTheme::getInstance::buttonPressedColor(); } QString buttonPressedBorderColor() const override { - return OCC::IonosTheme::buttonPressedColor(); + return OCC::WhitelabelTheme::getInstance::buttonPressedColor(); } // Disabled QString buttonDisabledColor() const override { - return OCC::IonosTheme::buttonDisabledColor(); + return OCC::WhitelabelTheme::getInstance::buttonDisabledColor(); } QString buttonDisabledBorderColor() const override { - return OCC::IonosTheme::buttonDisabledColor(); + return OCC::WhitelabelTheme::getInstance::buttonDisabledColor(); } // Focused QString buttonFocusedColor() const override { - return OCC::IonosTheme::white(); + return OCC::WhitelabelTheme::getInstance::white(); } QString buttonFocusedBorderColor() const override { - return OCC::IonosTheme::black(); + return OCC::WhitelabelTheme::getInstance::black(); } // Font QString buttonDisabledFontColor() const override { - return OCC::IonosTheme::buttonDisabledFontColor(); + return OCC::WhitelabelTheme::getInstance::buttonDisabledFontColor(); } QString buttonFontColor() const override { - return OCC::IonosTheme::black(); + return OCC::WhitelabelTheme::getInstance::black(); } }; } diff --git a/src/gui/caseclashfilenamedialog.cpp b/src/gui/caseclashfilenamedialog.cpp index f67d176fcfb8a..9d9aaa18a598f 100644 --- a/src/gui/caseclashfilenamedialog.cpp +++ b/src/gui/caseclashfilenamedialog.cpp @@ -303,13 +303,13 @@ void CaseClashFilenameDialog::customizeStyle() { this->setStyleSheet( QStringLiteral("QDialog {background-color: %1; color: %2;} QLabel{ %3;}").arg( - IonosTheme::dialogBackgroundColor(), - IonosTheme::black(), - IonosTheme::fontConfigurationCss( - IonosTheme::settingsFont(), - IonosTheme::settingsTextSize(), - IonosTheme::settingsTextWeight(), - IonosTheme::titleColor() + WhitelabelTheme::getInstance::dialogBackgroundColor(), + WhitelabelTheme::getInstance::black(), + WhitelabelTheme::getInstance::fontConfigurationCss( + WhitelabelTheme::getInstance::settingsFont(), + WhitelabelTheme::getInstance::settingsTextSize(), + WhitelabelTheme::getInstance::settingsTextWeight(), + WhitelabelTheme::getInstance::titleColor() ) ) ); @@ -318,13 +318,13 @@ void CaseClashFilenameDialog::customizeStyle() QStringLiteral( "color: %1; font-family: %2; font-size: %3; font-weight: %4; border-radius: %5; border: 1px " "solid %6; padding: 0px 12px; text-align: left; vertical-align: middle; height: 40px; background: %7; ").arg( - IonosTheme::folderWizardPathColor(), - IonosTheme::settingsFont(), - IonosTheme::settingsTextSize(), - IonosTheme::settingsTextWeight(), - IonosTheme::buttonRadius(), - IonosTheme::menuBorderColor(), - IonosTheme::white() + WhitelabelTheme::getInstance::folderWizardPathColor(), + WhitelabelTheme::getInstance::settingsFont(), + WhitelabelTheme::getInstance::settingsTextSize(), + WhitelabelTheme::getInstance::settingsTextWeight(), + WhitelabelTheme::getInstance::buttonRadius(), + WhitelabelTheme::getInstance::menuBorderColor(), + WhitelabelTheme::getInstance::white() ) ); diff --git a/src/gui/conflictdialog.cpp b/src/gui/conflictdialog.cpp index 58170cf8b84f9..de8003155ae0d 100644 --- a/src/gui/conflictdialog.cpp +++ b/src/gui/conflictdialog.cpp @@ -191,13 +191,13 @@ void ConflictDialog::customizeStyle() { this->setStyleSheet( QStringLiteral("QDialog {background-color: %1; color: %2;} QLabel{ %3;}").arg( - IonosTheme::dialogBackgroundColor(), - IonosTheme::black(), - IonosTheme::fontConfigurationCss( - IonosTheme::settingsFont(), - IonosTheme::settingsTextSize(), - IonosTheme::settingsTextWeight(), - IonosTheme::titleColor() + WhitelabelTheme::getInstance::dialogBackgroundColor(), + WhitelabelTheme::getInstance::black(), + WhitelabelTheme::getInstance::fontConfigurationCss( + WhitelabelTheme::getInstance::settingsFont(), + WhitelabelTheme::getInstance::settingsTextSize(), + WhitelabelTheme::getInstance::settingsTextWeight(), + WhitelabelTheme::getInstance::titleColor() ) ) ); @@ -207,11 +207,11 @@ void ConflictDialog::customizeStyle() _ui->buttonBox->setLayoutDirection(Qt::LeftToRight); _ui->localVersionRadio->setStyleSheet( - QStringLiteral("QCheckBox {color: %1;}").arg(IonosTheme::black()) + QStringLiteral("QCheckBox {color: %1;}").arg(WhitelabelTheme::getInstance::black()) ); _ui->remoteVersionRadio->setStyleSheet( - QStringLiteral("QCheckBox {color: %1;}").arg(IonosTheme::black()) + QStringLiteral("QCheckBox {color: %1;}").arg(WhitelabelTheme::getInstance::black()) ); #endif } diff --git a/src/gui/creds/webflowcredentialsdialog.cpp b/src/gui/creds/webflowcredentialsdialog.cpp index 70705920d781d..2d021d8e5b970 100644 --- a/src/gui/creds/webflowcredentialsdialog.cpp +++ b/src/gui/creds/webflowcredentialsdialog.cpp @@ -6,7 +6,7 @@ #include "application.h" #include "owncloudgui.h" #include "wizard/owncloudwizardcommon.h" -#include "ionostheme.h" +#include "whitelabeltheme.h" #ifdef WITH_WEBENGINE #include "wizard/webview.h" #endif // WITH_WEBENGINE @@ -24,7 +24,7 @@ WebFlowCredentialsDialog::WebFlowCredentialsDialog(Account *account, bool useFlo { setWindowFlags(windowFlags() & ~Qt::WindowContextHelpButtonHint); - setStyleSheet(QStringLiteral("QDialog { background-color: %1; }").arg(IonosTheme::dialogBackgroundColor())); + setStyleSheet(QStringLiteral("QDialog { background-color: %1; }").arg(WhitelabelTheme::getInstance::dialogBackgroundColor())); setFixedWidth(646); setSizePolicy(QSizePolicy(QSizePolicy::Minimum, QSizePolicy::Minimum)); @@ -44,11 +44,11 @@ WebFlowCredentialsDialog::WebFlowCredentialsDialog(Account *account, bool useFlo _infoLabel->setAlignment(Qt::AlignCenter); _infoLabel->setWordWrap(true); _infoLabel->setContentsMargins(0, 32, 0, 0); - _infoLabel->setStyleSheet(IonosTheme::fontConfigurationCss( - IonosTheme::settingsFont(), - IonosTheme::settingsTextSize(), - IonosTheme::settingsTitleWeight600(), - IonosTheme::titleColor() + _infoLabel->setStyleSheet(WhitelabelTheme::getInstance::fontConfigurationCss( + WhitelabelTheme::getInstance::settingsFont(), + WhitelabelTheme::getInstance::settingsTextSize(), + WhitelabelTheme::getInstance::settingsTitleWeight600(), + WhitelabelTheme::getInstance::titleColor() )); _containerLayout->addWidget(_infoLabel); diff --git a/src/gui/foldercreationdialog.cpp b/src/gui/foldercreationdialog.cpp index 28796623bc4ff..161c07f9e0dbf 100644 --- a/src/gui/foldercreationdialog.cpp +++ b/src/gui/foldercreationdialog.cpp @@ -15,7 +15,7 @@ #include "foldercreationdialog.h" #include "buttonstyle.h" -#include "ionostheme.h" +#include "whitelabeltheme.h" #include "ui_foldercreationdialog.h" #include @@ -112,7 +112,7 @@ void FolderCreationDialog::customizeStyle() ui->buttonBox->setLayoutDirection(Qt::RightToLeft); this->setAutoFillBackground(true); - setPalette(QPalette(QPalette::Window, IonosTheme::dialogBackgroundColor())); + setPalette(QPalette(QPalette::Window, WhitelabelTheme::getInstance::dialogBackgroundColor())); QPushButton *okButton = ui->buttonBox->button(QDialogButtonBox::Ok); okButton->setProperty("buttonStyle", QVariant::fromValue(OCC::ButtonStyleName::Primary)); @@ -124,13 +124,13 @@ void FolderCreationDialog::customizeStyle() QStringLiteral( "color: %1; font-family: %2; font-size: %3; font-weight: %4; border-radius: %5; border: 1px " "solid %6; padding: 0px 12px; text-align: left; vertical-align: middle; height: 40px; background: %7; ") - .arg(IonosTheme::folderWizardPathColor(), - IonosTheme::settingsFont(), - IonosTheme::settingsTextSize(), - IonosTheme::settingsTextWeight(), - IonosTheme::buttonRadius(), - IonosTheme::menuBorderColor(), - IonosTheme::white() + .arg(WhitelabelTheme::getInstance::folderWizardPathColor(), + WhitelabelTheme::getInstance::settingsFont(), + WhitelabelTheme::getInstance::settingsTextSize(), + WhitelabelTheme::getInstance::settingsTextWeight(), + WhitelabelTheme::getInstance::buttonRadius(), + WhitelabelTheme::getInstance::menuBorderColor(), + WhitelabelTheme::getInstance::white() ) ); diff --git a/src/gui/folderstatusdelegate.cpp b/src/gui/folderstatusdelegate.cpp index a042268867c23..a08ac95932ea6 100644 --- a/src/gui/folderstatusdelegate.cpp +++ b/src/gui/folderstatusdelegate.cpp @@ -44,8 +44,8 @@ namespace OCC { inline static QFont makeAliasFont(const QFont &normalFont) { QFont aliasFont = normalFont; - aliasFont.setWeight(IonosTheme::settingsTitleWeightDemiBold()); - aliasFont.setPixelSize(IonosTheme::settingsBigTitlePixel()); + aliasFont.setWeight(WhitelabelTheme::getInstance::settingsTitleWeightDemiBold()); + aliasFont.setPixelSize(WhitelabelTheme::getInstance::settingsBigTitlePixel()); return aliasFont; } @@ -70,7 +70,7 @@ QSize FolderStatusDelegate::sizeHint(const QStyleOptionViewItem &option, const QModelIndex &index) const { QFont font = QFont(option.font); - font.setPixelSize(IonosTheme::settingsTextPixel()); + font.setPixelSize(WhitelabelTheme::getInstance::settingsTextPixel()); QFont aliasFont = makeAliasFont(font); QFontMetrics fm(font); @@ -125,8 +125,8 @@ int FolderStatusDelegate::rootFolderHeightWithoutErrors(const QFontMetrics &fm, void FolderStatusDelegate::drawAddButton(QPainter *painter, const QStyleOptionViewItem &option, const QModelIndex &index) const { QFont titleFont = option.font; - titleFont.setWeight(IonosTheme::settingsTitleWeightDemiBold()); - titleFont.setPixelSize(IonosTheme::settingsTitlePixel()); + titleFont.setWeight(WhitelabelTheme::getInstance::settingsTitleWeightDemiBold()); + titleFont.setPixelSize(WhitelabelTheme::getInstance::settingsTitlePixel()); QFontMetrics titleTextFm(titleFont); const auto baseDistanceForCalculus = titleTextFm.height() / 2; @@ -137,7 +137,7 @@ void FolderStatusDelegate::drawAddButton(QPainter *painter, const QStyleOptionVi auto iconBox = option.rect; iconBox.setTop(iconBox.top() + baseDistanceForCalculus); - iconBox.setBottom(iconBox.top() + IonosTheme::treeViewIconSize()); + iconBox.setBottom(iconBox.top() + WhitelabelTheme::getInstance::treeViewIconSize()); iconBox.setLeft(iconBox.left() + baseDistanceForCalculus); iconBox.setWidth(iconBox.height()); @@ -155,7 +155,7 @@ void FolderStatusDelegate::drawAddButton(QPainter *painter, const QStyleOptionVi auto titleText = addFolderText(); auto subtitleText = addInfoText(); - auto addIcon = QIcon(IonosTheme::liveBackupPlusIcon()); + auto addIcon = QIcon(WhitelabelTheme::getInstance::liveBackupPlusIcon()); const auto addPixmap = addIcon.pixmap(iconBox.size(), QIcon::Normal); painter->save(); @@ -178,7 +178,7 @@ void FolderStatusDelegate::paint(QPainter *painter, const QStyleOptionViewItem & { QStyleOptionViewItem opt = option; QFont font = opt.font; - font.setPixelSize(IonosTheme::settingsTextPixel()); + font.setPixelSize(WhitelabelTheme::getInstance::settingsTextPixel()); opt.font = font; QStyledItemDelegate::paint(painter, opt, index); @@ -241,7 +241,7 @@ void FolderStatusDelegate::paint(QPainter *painter, const QStyleOptionViewItem & localPathRect.setTop(remotePathRect.bottom() + margin); localPathRect.setBottom(localPathRect.top() + subFm.height()); - iconRect.setBottom(iconRect.top() + IonosTheme::treeViewIconSize()); + iconRect.setBottom(iconRect.top() + WhitelabelTheme::getInstance::treeViewIconSize()); iconRect.setWidth(iconRect.height()); const auto nextToIcon = iconRect.right() + aliasMargin; @@ -325,13 +325,13 @@ void FolderStatusDelegate::paint(QPainter *painter, const QStyleOptionViewItem & }; if (!conflictTexts.isEmpty()) { - drawTextBox(conflictTexts, QColor(IonosTheme::warningColor()), QColor(IonosTheme::warningBorderColor())); + drawTextBox(conflictTexts, QColor(WhitelabelTheme::getInstance::warningColor()), QColor(WhitelabelTheme::getInstance::warningBorderColor())); } if (!errorTexts.isEmpty()) { - drawTextBox(errorTexts, QColor(IonosTheme::errorColor()), QColor(IonosTheme::errorBorderColor())); + drawTextBox(errorTexts, QColor(WhitelabelTheme::getInstance::errorColor()), QColor(WhitelabelTheme::getInstance::errorBorderColor())); } if (!infoTexts.isEmpty()) { - drawTextBox(infoTexts, QColor(IonosTheme::infoColor()), QColor(IonosTheme::infoBorderColor())); + drawTextBox(infoTexts, QColor(WhitelabelTheme::getInstance::infoColor()), QColor(WhitelabelTheme::getInstance::infoBorderColor())); } // Sync File Progress Bar: Show it if syncFile is not empty. @@ -353,8 +353,8 @@ void FolderStatusDelegate::drawSyncProgressBar(QPainter *painter, const QStyleOp const auto overallWidth = option.rect.right() - aliasMargin - optionsButtonVisualRect.width() - nextToIcon; QFont progressFont(option.font); - progressFont.setPixelSize(IonosTheme::settingsTextPixel()); - progressFont.setWeight(IonosTheme::settingsTitleWeightNormal()); + progressFont.setPixelSize(WhitelabelTheme::getInstance::settingsTextPixel()); + progressFont.setWeight(WhitelabelTheme::getInstance::settingsTitleWeightNormal()); painter->save(); // Overall Progress Bar. @@ -372,7 +372,7 @@ void FolderStatusDelegate::drawSyncProgressBar(QPainter *painter, const QStyleOp progressBarOpt.state = QStyle::StateFlag::State_Horizontal; progressBarOpt.rect = QStyle::visualRect(option.direction, option.rect, progressBarRect); QPalette paletteTmp = progressBarOpt.palette; - paletteTmp.setColor(QPalette::Base, IonosTheme::white()); + paletteTmp.setColor(QPalette::Base, WhitelabelTheme::getInstance::white()); progressBarOpt.palette = paletteTmp; #ifdef Q_OS_MACOS @@ -485,7 +485,7 @@ bool FolderStatusDelegate::editorEvent(QEvent *event, QAbstractItemModel *model, QRect FolderStatusDelegate::optionsButtonRect(QRect within, Qt::LayoutDirection direction) { - QFont font = QFont(IonosTheme::settingsFont()); + QFont font = QFont(WhitelabelTheme::getInstance::settingsFont()); QFont aliasFont = makeAliasFont(font); QFontMetrics fm(font); QFontMetrics aliasFm(aliasFont); @@ -507,7 +507,7 @@ QRect FolderStatusDelegate::optionsButtonRect(QRect within, Qt::LayoutDirection QRect FolderStatusDelegate::errorsListRect(QRect within) { - QFont font = QFont(IonosTheme::settingsFont()); + QFont font = QFont(WhitelabelTheme::getInstance::settingsFont()); QFont aliasFont = makeAliasFont(font); QFontMetrics fm(font); QFontMetrics aliasFm(aliasFont); diff --git a/src/gui/folderstatusview.cpp b/src/gui/folderstatusview.cpp index 876d02bc36b50..fe217bf3bf684 100644 --- a/src/gui/folderstatusview.cpp +++ b/src/gui/folderstatusview.cpp @@ -14,14 +14,14 @@ #include "folderstatusview.h" #include "folderstatusdelegate.h" -#include "ionostheme.h" +#include "whitelabeltheme.h" namespace OCC { FolderStatusView::FolderStatusView(QWidget *parent) : QTreeView(parent) { #ifdef Q_OS_MAC - setPalette(QPalette(QPalette::ButtonText, IonosTheme::white())); + setPalette(QPalette(QPalette::ButtonText, WhitelabelTheme::getInstance::white())); #endif } diff --git a/src/gui/folderwizard.cpp b/src/gui/folderwizard.cpp index bf57386d926c1..35881d204e7de 100644 --- a/src/gui/folderwizard.cpp +++ b/src/gui/folderwizard.cpp @@ -194,27 +194,27 @@ void FolderWizardLocalPath::changeEvent(QEvent *e) void FolderWizardLocalPath::changeStyle() { - _ui.title->setStyleSheet(IonosTheme::fontConfigurationCss( - IonosTheme::settingsFont(), - IonosTheme::settingsBigTitleSize(), - IonosTheme::settingsTitleWeight600(), - IonosTheme::titleColor())); + _ui.title->setStyleSheet(WhitelabelTheme::getInstance::fontConfigurationCss( + WhitelabelTheme::getInstance::settingsFont(), + WhitelabelTheme::getInstance::settingsBigTitleSize(), + WhitelabelTheme::getInstance::settingsTitleWeight600(), + WhitelabelTheme::getInstance::titleColor())); _ui.title->setProperty("text", tr("Add Folder Sync")); - _ui.subTitle->setStyleSheet(IonosTheme::fontConfigurationCss( - IonosTheme::settingsFont(), - IonosTheme::settingsTextSize(), - IonosTheme::settingsTitleWeight600(), - IonosTheme::folderWizardSubtitleColor())); + _ui.subTitle->setStyleSheet(WhitelabelTheme::getInstance::fontConfigurationCss( + WhitelabelTheme::getInstance::settingsFont(), + WhitelabelTheme::getInstance::settingsTextSize(), + WhitelabelTheme::getInstance::settingsTitleWeight600(), + WhitelabelTheme::getInstance::folderWizardSubtitleColor())); _ui.subTitle->setProperty("text", tr("Step 1 of 3: Select local folder")); - _ui.description->setStyleSheet(IonosTheme::fontConfigurationCss( - IonosTheme::settingsFont(), - IonosTheme::settingsTextSize(), - IonosTheme::settingsTextWeight(), - IonosTheme::titleColor())); + _ui.description->setStyleSheet(WhitelabelTheme::getInstance::fontConfigurationCss( + WhitelabelTheme::getInstance::settingsFont(), + WhitelabelTheme::getInstance::settingsTextSize(), + WhitelabelTheme::getInstance::settingsTextWeight(), + WhitelabelTheme::getInstance::titleColor())); _ui.description->setProperty("text", tr("Select a folder on your hard drive that should be permanetly connected to your %1. All files and " @@ -223,13 +223,13 @@ void FolderWizardLocalPath::changeStyle() _ui.localFolderLineEdit->setStyleSheet(QString( "color: %1; font-family: %2; font-size: %3; font-weight: %4; border-radius: %5; border: 1px " "solid %6; padding: 0px 12px; text-align: left; vertical-align: middle; height: 40px; background: %7; ") - .arg(IonosTheme::folderWizardPathColor()) - .arg(IonosTheme::settingsFont()) - .arg(IonosTheme::settingsTextSize()) - .arg(IonosTheme::settingsTextWeight()) - .arg(IonosTheme::buttonRadius()) - .arg(IonosTheme::menuBorderColor()) - .arg(IonosTheme::white()) + .arg(WhitelabelTheme::getInstance::folderWizardPathColor()) + .arg(WhitelabelTheme::getInstance::settingsFont()) + .arg(WhitelabelTheme::getInstance::settingsTextSize()) + .arg(WhitelabelTheme::getInstance::settingsTextWeight()) + .arg(WhitelabelTheme::getInstance::buttonRadius()) + .arg(WhitelabelTheme::getInstance::menuBorderColor()) + .arg(WhitelabelTheme::getInstance::white()) ); _ui.localFolderChooseBtn->setProperty("text", tr("Choose")); @@ -238,11 +238,11 @@ void FolderWizardLocalPath::changeStyle() #if defined(Q_OS_MAC) _ui.localFolderChooseBtn->setStyleSheet( QStringLiteral("QPushButton { margin-left: 5px; margin-top: 12px; height: 40px; width: 80px; %1} ").arg( - IonosTheme::fontConfigurationCss( - IonosTheme::settingsFont(), - IonosTheme::settingsTextSize(), - IonosTheme::settingsTitleWeight500(), - IonosTheme::white() + WhitelabelTheme::getInstance::fontConfigurationCss( + WhitelabelTheme::getInstance::settingsFont(), + WhitelabelTheme::getInstance::settingsTextSize(), + WhitelabelTheme::getInstance::settingsTitleWeight500(), + WhitelabelTheme::getInstance::white() ) ) ); @@ -279,7 +279,7 @@ FolderWizardRemotePath::FolderWizardRemotePath(const AccountPtr &account) _ui.folderTreeWidget->header()->setSectionResizeMode(0, QHeaderView::ResizeToContents); #ifdef Q_OS_MAC - _ui.folderTreeWidget->setPalette(QPalette(IonosTheme::white())); + _ui.folderTreeWidget->setPalette(QPalette(WhitelabelTheme::getInstance::white())); #endif // Make sure that there will be a scrollbar when the contents is too wide @@ -313,13 +313,13 @@ void FolderWizardRemotePath::slotAddRemoteFolder() dlg->setStyleSheet( QStringLiteral("QDialog { %1; background-color: %2; }").arg( - IonosTheme::fontConfigurationCss( - IonosTheme::settingsFont(), - IonosTheme::settingsTextSize(), - IonosTheme::settingsTextWeight(), - IonosTheme::titleColor() + WhitelabelTheme::getInstance::fontConfigurationCss( + WhitelabelTheme::getInstance::settingsFont(), + WhitelabelTheme::getInstance::settingsTextSize(), + WhitelabelTheme::getInstance::settingsTextWeight(), + WhitelabelTheme::getInstance::titleColor() ), - IonosTheme::dialogBackgroundColor() + WhitelabelTheme::getInstance::dialogBackgroundColor() ) ); @@ -327,22 +327,22 @@ void FolderWizardRemotePath::slotAddRemoteFolder() QStringLiteral( "color: %1; font-family: %2; font-size: %3; font-weight: %4; border-radius: %5; border: 1px " "solid %6; padding: 0px 12px; text-align: left; vertical-align: middle; height: 40px; background: %7; ").arg( - IonosTheme::folderWizardPathColor(), - IonosTheme::settingsFont(), - IonosTheme::settingsTextSize(), - IonosTheme::settingsTextWeight(), - IonosTheme::buttonRadius(), - IonosTheme::menuBorderColor(), - IonosTheme::white() + WhitelabelTheme::getInstance::folderWizardPathColor(), + WhitelabelTheme::getInstance::settingsFont(), + WhitelabelTheme::getInstance::settingsTextSize(), + WhitelabelTheme::getInstance::settingsTextWeight(), + WhitelabelTheme::getInstance::buttonRadius(), + WhitelabelTheme::getInstance::menuBorderColor(), + WhitelabelTheme::getInstance::white() ) ); dlg->findChild()->setStyleSheet( - IonosTheme::fontConfigurationCss( - IonosTheme::settingsFont(), - IonosTheme::settingsTextSize(), - IonosTheme::settingsTextWeight(), - IonosTheme::titleColor()) + WhitelabelTheme::getInstance::fontConfigurationCss( + WhitelabelTheme::getInstance::settingsFont(), + WhitelabelTheme::getInstance::settingsTextSize(), + WhitelabelTheme::getInstance::settingsTextWeight(), + WhitelabelTheme::getInstance::titleColor()) ); #ifdef Q_OS_MAC @@ -350,7 +350,7 @@ void FolderWizardRemotePath::slotAddRemoteFolder() buttonBox->button(QDialogButtonBox::Ok)->setStyleSheet( buttonBox->button(QDialogButtonBox::Ok)->styleSheet() + - QStringLiteral(" color: %1; ").arg(IonosTheme::white()) + QStringLiteral(" color: %1; ").arg(WhitelabelTheme::getInstance::white()) ); #endif } @@ -709,27 +709,27 @@ void FolderWizardRemotePath::changeEvent(QEvent *e) void FolderWizardRemotePath::changeStyle() { - _ui.title->setStyleSheet(IonosTheme::fontConfigurationCss( - IonosTheme::settingsFont(), - IonosTheme::settingsBigTitleSize(), - IonosTheme::settingsTitleWeight600(), - IonosTheme::titleColor())); + _ui.title->setStyleSheet(WhitelabelTheme::getInstance::fontConfigurationCss( + WhitelabelTheme::getInstance::settingsFont(), + WhitelabelTheme::getInstance::settingsBigTitleSize(), + WhitelabelTheme::getInstance::settingsTitleWeight600(), + WhitelabelTheme::getInstance::titleColor())); _ui.title->setProperty("text", tr("Add Folder Sync")); - _ui.subTitle->setStyleSheet(IonosTheme::fontConfigurationCss( - IonosTheme::settingsFont(), - IonosTheme::settingsTextSize(), - IonosTheme::settingsTitleWeight600(), - IonosTheme::folderWizardSubtitleColor())); + _ui.subTitle->setStyleSheet(WhitelabelTheme::getInstance::fontConfigurationCss( + WhitelabelTheme::getInstance::settingsFont(), + WhitelabelTheme::getInstance::settingsTextSize(), + WhitelabelTheme::getInstance::settingsTitleWeight600(), + WhitelabelTheme::getInstance::folderWizardSubtitleColor())); _ui.subTitle->setProperty("text", tr("Step 2 of 3: Directory in your %1").arg(Theme::instance()->appNameGUI())); - _ui.description1->setStyleSheet(IonosTheme::fontConfigurationCss( - IonosTheme::settingsFont(), - IonosTheme::settingsTextSize(), - IonosTheme::settingsTextWeight(), - IonosTheme::titleColor())); + _ui.description1->setStyleSheet(WhitelabelTheme::getInstance::fontConfigurationCss( + WhitelabelTheme::getInstance::settingsFont(), + WhitelabelTheme::getInstance::settingsTextSize(), + WhitelabelTheme::getInstance::settingsTextWeight(), + WhitelabelTheme::getInstance::titleColor())); _ui.description1->setProperty("text", tr("Please now select or create a target folder in your %1 where the content should be uploaded and synchronized.").arg(Theme::instance()->appNameGUI())); @@ -737,36 +737,36 @@ void FolderWizardRemotePath::changeStyle() _ui.description2->setProperty("text", tr("Both folders are permanently linked and the respective contents are automatically synchronized and updated.")); - _ui.description2->setStyleSheet(IonosTheme::fontConfigurationCss( - IonosTheme::settingsFont(), - IonosTheme::settingsTextSize(), - IonosTheme::settingsTextWeight(), - IonosTheme::titleColor())); + _ui.description2->setStyleSheet(WhitelabelTheme::getInstance::fontConfigurationCss( + WhitelabelTheme::getInstance::settingsFont(), + WhitelabelTheme::getInstance::settingsTextSize(), + WhitelabelTheme::getInstance::settingsTextWeight(), + WhitelabelTheme::getInstance::titleColor())); _ui.folderEntry->setStyleSheet( QStringLiteral("color: %1; font-family: %2; font-size: %3; font-weight: %4; border-radius: %5; border: 1px " "solid %6; padding: 0px 12px; text-align: left; vertical-align: middle; height: 40px;") - .arg(IonosTheme::folderWizardPathColor()) - .arg(IonosTheme::settingsFont()) - .arg(IonosTheme::settingsTextSize()) - .arg(IonosTheme::settingsTextWeight()) - .arg(IonosTheme::buttonRadius()) - .arg(IonosTheme::menuBorderColor())); + .arg(WhitelabelTheme::getInstance::folderWizardPathColor()) + .arg(WhitelabelTheme::getInstance::settingsFont()) + .arg(WhitelabelTheme::getInstance::settingsTextSize()) + .arg(WhitelabelTheme::getInstance::settingsTextWeight()) + .arg(WhitelabelTheme::getInstance::buttonRadius()) + .arg(WhitelabelTheme::getInstance::menuBorderColor())); _ui.folderTreeWidget->setStyleSheet( QStringLiteral(" %1; background: %2; ").arg( - IonosTheme::fontConfigurationCss( - IonosTheme::settingsFont(), - IonosTheme::settingsTextSize(), - IonosTheme::settingsTextWeight(), - IonosTheme::titleColor() + WhitelabelTheme::getInstance::fontConfigurationCss( + WhitelabelTheme::getInstance::settingsFont(), + WhitelabelTheme::getInstance::settingsTextSize(), + WhitelabelTheme::getInstance::settingsTextWeight(), + WhitelabelTheme::getInstance::titleColor() ), - IonosTheme::white() + WhitelabelTheme::getInstance::white() ) ); _ui.folderTreeWidget->setStyleSheet( - _ui.folderTreeWidget->styleSheet() + QStringLiteral("QTreeWidget { background: %1; }").arg(IonosTheme::white()) + _ui.folderTreeWidget->styleSheet() + QStringLiteral("QTreeWidget { background: %1; }").arg(WhitelabelTheme::getInstance::white()) ); _ui.refreshButton->setProperty("text", tr("Refresh")); @@ -803,34 +803,34 @@ FolderWizardSelectiveSync::FolderWizardSelectiveSync(const AccountPtr &account) QFont f; QFont::Weight w; - f.setFamily(IonosTheme::settingsFont()); + f.setFamily(WhitelabelTheme::getInstance::settingsFont()); f.setWeight( QFont::Weight::Normal); - f.setPixelSize(IonosTheme::settingsTextPixel()); + f.setPixelSize(WhitelabelTheme::getInstance::settingsTextPixel()); _virtualFilesCheckBox->setFont(f); #endif layout->addLayout(_virtualFilesHBox); } - _selectiveSync->setStyleSheet(QStringLiteral(" %1; background: %2; ").arg(IonosTheme::fontConfigurationCss( - IonosTheme::settingsFont(), - IonosTheme::settingsTextSize(), - IonosTheme::settingsTextWeight(), - IonosTheme::titleColor()), - IonosTheme::white())); - - _uiSelectiveSync.title->setStyleSheet(IonosTheme::fontConfigurationCss( - IonosTheme::settingsFont(), - IonosTheme::settingsBigTitleSize(), - IonosTheme::settingsTitleWeight600(), - IonosTheme::titleColor())); + _selectiveSync->setStyleSheet(QStringLiteral(" %1; background: %2; ").arg(WhitelabelTheme::getInstance::fontConfigurationCss( + WhitelabelTheme::getInstance::settingsFont(), + WhitelabelTheme::getInstance::settingsTextSize(), + WhitelabelTheme::getInstance::settingsTextWeight(), + WhitelabelTheme::getInstance::titleColor()), + WhitelabelTheme::getInstance::white())); + + _uiSelectiveSync.title->setStyleSheet(WhitelabelTheme::getInstance::fontConfigurationCss( + WhitelabelTheme::getInstance::settingsFont(), + WhitelabelTheme::getInstance::settingsBigTitleSize(), + WhitelabelTheme::getInstance::settingsTitleWeight600(), + WhitelabelTheme::getInstance::titleColor())); _uiSelectiveSync.title->setProperty("text", tr("Add Folder Sync")); - _uiSelectiveSync.subTitle->setStyleSheet(IonosTheme::fontConfigurationCss( - IonosTheme::settingsFont(), - IonosTheme::settingsTextSize(), - IonosTheme::settingsTitleWeight600(), - IonosTheme::folderWizardSubtitleColor())); + _uiSelectiveSync.subTitle->setStyleSheet(WhitelabelTheme::getInstance::fontConfigurationCss( + WhitelabelTheme::getInstance::settingsFont(), + WhitelabelTheme::getInstance::settingsTextSize(), + WhitelabelTheme::getInstance::settingsTitleWeight600(), + WhitelabelTheme::getInstance::folderWizardSubtitleColor())); _uiSelectiveSync.subTitle->setProperty("text", tr("Step 3 of 3: Selektive Synchronisation")); } @@ -869,11 +869,11 @@ void FolderWizardSelectiveSync::setupVirtualFilesCheckbox(){ _virtualFilesCheckBoxLabel->setStyleSheet( QStringLiteral("QLabel { %1; }").arg( - IonosTheme::fontConfigurationCss( - IonosTheme::settingsFont(), - IonosTheme::settingsTextSize(), - IonosTheme::settingsTextWeight(), - IonosTheme::titleColor() + WhitelabelTheme::getInstance::fontConfigurationCss( + WhitelabelTheme::getInstance::settingsFont(), + WhitelabelTheme::getInstance::settingsTextSize(), + WhitelabelTheme::getInstance::settingsTextWeight(), + WhitelabelTheme::getInstance::titleColor() ) ) ); @@ -1028,7 +1028,7 @@ void FolderWizard::customizeStyle() // Set background colors auto wizardPalette = palette(); - const auto backgroundColor = QColor(IonosTheme::dialogBackgroundColor()); + const auto backgroundColor = QColor(WhitelabelTheme::getInstance::dialogBackgroundColor()); // Set Color of upper part wizardPalette.setColor(QPalette::Base, backgroundColor); @@ -1044,7 +1044,7 @@ void FolderWizard::customizeStyle() void FolderWizard::adjustWizardSize() { - setFixedSize(QSize(IonosTheme::wizardFixedWidth(), IonosTheme::wizardFixedHeight())); + setFixedSize(QSize(WhitelabelTheme::getInstance::wizardFixedWidth(), WhitelabelTheme::getInstance::wizardFixedHeight())); } } // end namespace diff --git a/src/gui/generalsettings.cpp b/src/gui/generalsettings.cpp index 998ef22a071e7..a4b2043b3c369 100644 --- a/src/gui/generalsettings.cpp +++ b/src/gui/generalsettings.cpp @@ -16,7 +16,7 @@ #include "ui_generalsettings.h" #include "theme.h" -#include "ionostheme.h" +#include "whitelabeltheme.h" #include "configfile.h" #include "application.h" #include "owncloudsetupwizard.h" @@ -737,73 +737,73 @@ void GeneralSettings::customizeStyle() _ui->infoAndUpdatesLabel->setText(aboutText); this->setAutoFillBackground(true); - setPalette(QPalette(QPalette::Window, IonosTheme::dialogBackgroundColor())); + setPalette(QPalette(QPalette::Window, WhitelabelTheme::getInstance::dialogBackgroundColor())); this->setStyleSheet( QStringLiteral("QGroupBox { border: %1; font-size: %2; font-weight: %3; color: %4; }").arg( Theme::instance()->systemPalette()["base"].value().name(), - IonosTheme::settingsTitleSize(), - IonosTheme::settingsTitleWeight600(), - IonosTheme::black() + WhitelabelTheme::getInstance::settingsTitleSize(), + WhitelabelTheme::getInstance::settingsTitleWeight600(), + WhitelabelTheme::getInstance::black() ) ); this->setStyleSheet( this->styleSheet() + QStringLiteral("QCheckBox { font-size: %1; font-weight: %2; margin-left: %3 px; color: %4; }").arg( - IonosTheme::settingsTextSize(), - IonosTheme::settingsTextWeight(), - IonosTheme::smallMargin(), - IonosTheme::black() + WhitelabelTheme::getInstance::settingsTextSize(), + WhitelabelTheme::getInstance::settingsTextWeight(), + WhitelabelTheme::getInstance::smallMargin(), + WhitelabelTheme::getInstance::black() ) ); this->setStyleSheet( this->styleSheet() + QStringLiteral("QLabel { font-size: %1; font-weight: %2; color: %3; }").arg( - IonosTheme::settingsTextSize(), - IonosTheme::settingsTitleWeight500(), - IonosTheme::black() + WhitelabelTheme::getInstance::settingsTextSize(), + WhitelabelTheme::getInstance::settingsTitleWeight500(), + WhitelabelTheme::getInstance::black() ) ); this->setStyleSheet( this->styleSheet() + QStringLiteral("QFrame { font-size: %1; font-weight: %2; color: %3; }").arg( - IonosTheme::settingsTextSize(), - IonosTheme::settingsTitleWeight600(), - IonosTheme::black() + WhitelabelTheme::getInstance::settingsTextSize(), + WhitelabelTheme::getInstance::settingsTitleWeight600(), + WhitelabelTheme::getInstance::black() ) ); _ui->sendNecessaryData_checkbox->setChecked(true); _ui->sendNecessaryData_checkbox->setStyleSheet( QStringLiteral("QCheckBox { font-size: %1; font-weight: %2; color: %3; }").arg( - IonosTheme::settingsTextSize(), - IonosTheme::settingsTitleWeight600(), - IonosTheme::folderWizardSubtitleColor() + WhitelabelTheme::getInstance::settingsTextSize(), + WhitelabelTheme::getInstance::settingsTitleWeight600(), + WhitelabelTheme::getInstance::folderWizardSubtitleColor() ) ); _ui->sendAnonymousData_checkbox->setStyleSheet( QStringLiteral("QCheckBox { font-size: %1; font-weight: %2; color: %3; }").arg( - IonosTheme::settingsTextSize(), - IonosTheme::settingsTitleWeight600(), - IonosTheme::folderWizardSubtitleColor() + WhitelabelTheme::getInstance::settingsTextSize(), + WhitelabelTheme::getInstance::settingsTitleWeight600(), + WhitelabelTheme::getInstance::folderWizardSubtitleColor() ) ); _ui->necessaryDataLabel->setStyleSheet( QStringLiteral("QLabel { font-size: %1; font-weight: %2; color: %3; margin-left: %4; }").arg( - IonosTheme::settingsTextSize(), - IonosTheme::settingsTextWeight(), - IonosTheme::black(), + WhitelabelTheme::getInstance::settingsTextSize(), + WhitelabelTheme::getInstance::settingsTextWeight(), + WhitelabelTheme::getInstance::black(), "24" ) ); _ui->anonymousDataLabel->setStyleSheet( QStringLiteral("QLabel { font-size: %1; font-weight: %2; color: %3; margin-left: %4; margin-bottom: %5; }").arg( - IonosTheme::settingsTextSize(), - IonosTheme::settingsTextWeight(), - IonosTheme::black(), + WhitelabelTheme::getInstance::settingsTextSize(), + WhitelabelTheme::getInstance::settingsTextWeight(), + WhitelabelTheme::getInstance::black(), "24", "16" diff --git a/src/gui/ignorelisttablewidget.cpp b/src/gui/ignorelisttablewidget.cpp index ba96f52be47b5..0a7c54452fd4c 100644 --- a/src/gui/ignorelisttablewidget.cpp +++ b/src/gui/ignorelisttablewidget.cpp @@ -187,35 +187,35 @@ void IgnoreListTableWidget::customizeIgnoreListDialogStyle(){ ui->tableWidget->setStyleSheet( QStringLiteral("QTableWidget { background-color: %1; color: %2; } ").arg( - IonosTheme::white(), - IonosTheme::black() + WhitelabelTheme::getInstance::white(), + WhitelabelTheme::getInstance::black() ) + - IonosTheme::fontConfigurationCss( - IonosTheme::settingsFont(), - IonosTheme::settingsTextSize(), - IonosTheme::settingsTextWeight(), - IonosTheme::titleColor() + WhitelabelTheme::getInstance::fontConfigurationCss( + WhitelabelTheme::getInstance::settingsFont(), + WhitelabelTheme::getInstance::settingsTextSize(), + WhitelabelTheme::getInstance::settingsTextWeight(), + WhitelabelTheme::getInstance::titleColor() ) ); ui->descriptionLabel->setStyleSheet( - IonosTheme::fontConfigurationCss( - IonosTheme::settingsFont(), - IonosTheme::settingsTextSize(), - IonosTheme::settingsTextWeight(), - IonosTheme::titleColor() + WhitelabelTheme::getInstance::fontConfigurationCss( + WhitelabelTheme::getInstance::settingsFont(), + WhitelabelTheme::getInstance::settingsTextSize(), + WhitelabelTheme::getInstance::settingsTextWeight(), + WhitelabelTheme::getInstance::titleColor() ) ); ui->tableWidget->horizontalHeader()->setStyleSheet( QStringLiteral("QHeaderView::section { background-color: %1; color: %2; border-bottom: none; %3; }").arg( - IonosTheme::white(), - IonosTheme::black(), - IonosTheme::fontConfigurationCss( - IonosTheme::settingsFont(), - IonosTheme::settingsTextSize(), - IonosTheme::settingsTextWeight(), - IonosTheme::titleColor() + WhitelabelTheme::getInstance::white(), + WhitelabelTheme::getInstance::black(), + WhitelabelTheme::getInstance::fontConfigurationCss( + WhitelabelTheme::getInstance::settingsFont(), + WhitelabelTheme::getInstance::settingsTextSize(), + WhitelabelTheme::getInstance::settingsTextWeight(), + WhitelabelTheme::getInstance::titleColor() ) ) ); @@ -238,24 +238,24 @@ void IgnoreListTableWidget::customizeAddIgnorePatternDialogStyle(QInputDialog &i inputDialog.setContentsMargins(12,0,12,12); inputDialog.setStyleSheet( QStringLiteral("QDialog { %1; background: %2; }").arg( - IonosTheme::fontConfigurationCss( - IonosTheme::settingsFont(), - IonosTheme::settingsTextSize(), - IonosTheme::settingsTextWeight(), - IonosTheme::titleColor() + WhitelabelTheme::getInstance::fontConfigurationCss( + WhitelabelTheme::getInstance::settingsFont(), + WhitelabelTheme::getInstance::settingsTextSize(), + WhitelabelTheme::getInstance::settingsTextWeight(), + WhitelabelTheme::getInstance::titleColor() ), - IonosTheme::dialogBackgroundColor() + WhitelabelTheme::getInstance::dialogBackgroundColor() ) ); QLabel *label = inputDialog.findChild(); label->setAlignment(Qt::AlignCenter); label->setStyleSheet( - IonosTheme::fontConfigurationCss( - IonosTheme::settingsFont(), - IonosTheme::settingsTextSize(), - IonosTheme::settingsTextWeight(), - IonosTheme::titleColor() + WhitelabelTheme::getInstance::fontConfigurationCss( + WhitelabelTheme::getInstance::settingsFont(), + WhitelabelTheme::getInstance::settingsTextSize(), + WhitelabelTheme::getInstance::settingsTextWeight(), + WhitelabelTheme::getInstance::titleColor() ) ); @@ -264,13 +264,13 @@ void IgnoreListTableWidget::customizeAddIgnorePatternDialogStyle(QInputDialog &i QStringLiteral( "color: %1; font-family: %2; font-size: %3; font-weight: %4; border-radius: %5; border: 1px " "solid %6; padding: 0px 12px; text-align: left; vertical-align: middle; height: 40px; background: %7; ") - .arg(IonosTheme::folderWizardPathColor(), - IonosTheme::settingsFont(), - IonosTheme::settingsTextSize(), - IonosTheme::settingsTextWeight(), - IonosTheme::buttonRadius(), - IonosTheme::menuBorderColor(), - IonosTheme::white() + .arg(WhitelabelTheme::getInstance::folderWizardPathColor(), + WhitelabelTheme::getInstance::settingsFont(), + WhitelabelTheme::getInstance::settingsTextSize(), + WhitelabelTheme::getInstance::settingsTextWeight(), + WhitelabelTheme::getInstance::buttonRadius(), + WhitelabelTheme::getInstance::menuBorderColor(), + WhitelabelTheme::getInstance::white() ) ); diff --git a/src/gui/invalidfilenamedialog.cpp b/src/gui/invalidfilenamedialog.cpp index df78348ffa9b4..9421435054b0c 100644 --- a/src/gui/invalidfilenamedialog.cpp +++ b/src/gui/invalidfilenamedialog.cpp @@ -19,7 +19,7 @@ #include "ui_invalidfilenamedialog.h" #include "filesystem.h" -#include "ionostheme.h" +#include "whitelabeltheme.h" #include "buttonstyle.h" #include @@ -337,10 +337,10 @@ void InvalidFilenameDialog::customizeStyle() { this->setStyleSheet( QStringLiteral("QDialog {background-color: %1; } QLabel{ font-family: %2; font-size: %3; font-weight: %4; }").arg( - IonosTheme::dialogBackgroundColor(), - IonosTheme::settingsFont(), - IonosTheme::settingsTextSize(), - IonosTheme::settingsTextWeight() + WhitelabelTheme::getInstance::dialogBackgroundColor(), + WhitelabelTheme::getInstance::settingsFont(), + WhitelabelTheme::getInstance::settingsTextSize(), + WhitelabelTheme::getInstance::settingsTextWeight() ) ); @@ -348,13 +348,13 @@ void InvalidFilenameDialog::customizeStyle() QStringLiteral( "color: %1; font-family: %2; font-size: %3; font-weight: %4; border-radius: %5; border: 1px " "solid %6; padding: 0px 12px; text-align: left; vertical-align: middle; height: 40px; background: %7; ").arg( - IonosTheme::folderWizardPathColor(), - IonosTheme::settingsFont(), - IonosTheme::settingsTextSize(), - IonosTheme::settingsTextWeight(), - IonosTheme::buttonRadius(), - IonosTheme::menuBorderColor(), - IonosTheme::white() + WhitelabelTheme::getInstance::folderWizardPathColor(), + WhitelabelTheme::getInstance::settingsFont(), + WhitelabelTheme::getInstance::settingsTextSize(), + WhitelabelTheme::getInstance::settingsTextWeight(), + WhitelabelTheme::getInstance::buttonRadius(), + WhitelabelTheme::getInstance::menuBorderColor(), + WhitelabelTheme::getInstance::white() ) ); diff --git a/src/gui/linkbutton.cpp b/src/gui/linkbutton.cpp index 9bf2134fb62f8..12df4519911b0 100644 --- a/src/gui/linkbutton.cpp +++ b/src/gui/linkbutton.cpp @@ -1,6 +1,6 @@ // linkbutton.cpp #include "linkbutton.h" -#include "ionostheme.h" +#include "whitelabeltheme.h" #include "theme.h" namespace OCC { @@ -8,9 +8,9 @@ namespace OCC { : QLabel(parent) { setStyleSheet(QStringLiteral("QLabel { color: %1; text-decoration: underline; font-size: %2; font-weight: %3; }") - .arg(IonosTheme::settingsLinkColor() - , IonosTheme::settingsTextSize() - , IonosTheme::settingsTitleWeight600() + .arg(WhitelabelTheme::getInstance::settingsLinkColor() + , WhitelabelTheme::getInstance::settingsTextSize() + , WhitelabelTheme::getInstance::settingsTitleWeight600() )); setCursor(Qt::PointingHandCursor); diff --git a/src/gui/main.cpp b/src/gui/main.cpp index 873c14af376e0..65fb00e502f4e 100644 --- a/src/gui/main.cpp +++ b/src/gui/main.cpp @@ -25,7 +25,7 @@ #include "application.h" #include "cocoainitializer.h" #include "theme.h" -#include "ionostheme.h" +#include "whitelabeltheme.h" #include "common/utility.h" #if defined(BUILD_UPDATER) @@ -95,7 +95,7 @@ int main(int argc, char **argv) qmlStyle = QStringLiteral("FluentWinUI3"); widgetsStyle = QStringLiteral("windows11"); } - QApplication::setFont(IonosTheme::settingsFontDefault()); + QApplication::setFont(WhitelabelTheme::getInstance::settingsFontDefault()); #endif #ifdef IONOS_BUILD diff --git a/src/gui/moreoptionsbuttonstylehelper.cpp b/src/gui/moreoptionsbuttonstylehelper.cpp index 20f19fb2a655b..a26fcdad24c4b 100644 --- a/src/gui/moreoptionsbuttonstylehelper.cpp +++ b/src/gui/moreoptionsbuttonstylehelper.cpp @@ -2,7 +2,7 @@ #include "buttonstylestrategy.h" #include "buttonstyle.h" -#include "ionostheme.h" +#include "whitelabeltheme.h" #include #include #include diff --git a/src/gui/owncloudgui.cpp b/src/gui/owncloudgui.cpp index 023ba5b0b7378..e6303ec560b29 100644 --- a/src/gui/owncloudgui.cpp +++ b/src/gui/owncloudgui.cpp @@ -94,7 +94,7 @@ ownCloudGui::ownCloudGui(Application *parent) _tray = Systray::instance(); _tray->setTrayEngine(new QQmlApplicationEngine(this)); // for the beginning, set the offline icon until the account was verified - _tray->setIcon(QIcon(IonosTheme::syncOfflineIcon())); + _tray->setIcon(QIcon(WhitelabelTheme::getInstance::syncOfflineIcon())); _tray->show(); diff --git a/src/gui/pushbuttonstylehelper.cpp b/src/gui/pushbuttonstylehelper.cpp index de087eaa98c31..946b87e01238f 100644 --- a/src/gui/pushbuttonstylehelper.cpp +++ b/src/gui/pushbuttonstylehelper.cpp @@ -13,7 +13,7 @@ #include "buttonstyle.h" #include "buttonstylestrategy.h" -#include "ionostheme.h" +#include "whitelabeltheme.h" #include #include #include @@ -58,15 +58,15 @@ void PushButtonStyleHelper::drawButtonShape(const QStyleOptionButton *option, QP painter->save(); painter->setRenderHints(QPainter::Antialiasing); setupPainterForShape(option, painter, widget); - const int radius = OCC::IonosTheme::buttonRadiusInt(); + const int radius = OCC::WhitelabelTheme::getInstance::buttonRadiusInt(); painter->drawRoundedRect(option->rect, radius, radius); painter->restore(); } void PushButtonStyleHelper::setFont(QFont& font) const { - font.setWeight(OCC::IonosTheme::settingsTitleWeightDemiBold()); - font.setPixelSize(OCC::IonosTheme::settingsTextPixel()); + font.setWeight(OCC::WhitelabelTheme::getInstance::settingsTitleWeightDemiBold()); + font.setPixelSize(OCC::WhitelabelTheme::getInstance::settingsTextPixel()); } void PushButtonStyleHelper::recalculateContentSize(QSize &contentsSize, const QWidget *widget) const diff --git a/src/gui/selectivesyncdialog.cpp b/src/gui/selectivesyncdialog.cpp index 75b8db03fc6b2..a5a85dc0dac0b 100644 --- a/src/gui/selectivesyncdialog.cpp +++ b/src/gui/selectivesyncdialog.cpp @@ -20,7 +20,7 @@ #include "folderman.h" #include "networkjobs.h" #include "theme.h" -#include "ionostheme.h" +#include "whitelabeltheme.h" #include #include #include @@ -80,12 +80,12 @@ SelectiveSyncWidget::SelectiveSyncWidget(AccountPtr account, QWidget *parent) header->setText(tr("Deselect remote folders you do not wish to synchronize.")); header->setWordWrap(true); header->setStyleSheet( - IonosTheme::fontConfigurationCss( - IonosTheme::settingsFont(), - IonosTheme::settingsTextSize(), - IonosTheme::settingsTextWeight(), - IonosTheme::titleColor()) - + QStringLiteral("background-color: %1;").arg(IonosTheme::dialogBackgroundColor()) + WhitelabelTheme::getInstance::fontConfigurationCss( + WhitelabelTheme::getInstance::settingsFont(), + WhitelabelTheme::getInstance::settingsTextSize(), + WhitelabelTheme::getInstance::settingsTextWeight(), + WhitelabelTheme::getInstance::titleColor()) + + QStringLiteral("background-color: %1;").arg(WhitelabelTheme::getInstance::dialogBackgroundColor()) ); layout->addWidget(header); @@ -111,33 +111,33 @@ SelectiveSyncWidget::SelectiveSyncWidget(AccountPtr account, QWidget *parent) " background-color: white;" // Set the background color " border: 1px solid #e6e6e6;" // Optional: add a border " padding-left: 4px;" - + QString(IonosTheme::fontConfigurationCss( - IonosTheme::settingsFont(), - IonosTheme::settingsTextSize(), - IonosTheme::settingsTextWeight(), - IonosTheme::titleColor())) + + QString(WhitelabelTheme::getInstance::fontConfigurationCss( + WhitelabelTheme::getInstance::settingsFont(), + WhitelabelTheme::getInstance::settingsTextSize(), + WhitelabelTheme::getInstance::settingsTextWeight(), + WhitelabelTheme::getInstance::titleColor())) + "}" ); #else _folderTree->header()->setStyleSheet( - IonosTheme::fontConfigurationCss( - IonosTheme::settingsFont(), - IonosTheme::settingsTextSize(), - IonosTheme::settingsTextWeight(), - IonosTheme::titleColor() + WhitelabelTheme::getInstance::fontConfigurationCss( + WhitelabelTheme::getInstance::settingsFont(), + WhitelabelTheme::getInstance::settingsTextSize(), + WhitelabelTheme::getInstance::settingsTextWeight(), + WhitelabelTheme::getInstance::titleColor() )); #endif - _folderTree->setStyleSheet(IonosTheme::fontConfigurationCss( - IonosTheme::settingsFont(), - IonosTheme::settingsTextSize(), - IonosTheme::settingsTextWeight(), - IonosTheme::titleColor() + _folderTree->setStyleSheet(WhitelabelTheme::getInstance::fontConfigurationCss( + WhitelabelTheme::getInstance::settingsFont(), + WhitelabelTheme::getInstance::settingsTextSize(), + WhitelabelTheme::getInstance::settingsTextWeight(), + WhitelabelTheme::getInstance::titleColor() )); #ifdef Q_OS_MAC - _folderTree->setPalette(QPalette(IonosTheme::white())); + _folderTree->setPalette(QPalette(WhitelabelTheme::getInstance::white())); #endif ConfigFile::setupDefaultExcludeFilePaths(_excludedFiles); @@ -561,11 +561,11 @@ void SelectiveSyncDialog::init(const AccountPtr &account) button = buttonBox->addButton(QDialogButtonBox::Cancel); button->setStyleSheet( button->styleSheet() + QStringLiteral("QPushButton { %1; } ").arg( - IonosTheme::fontConfigurationCss( - IonosTheme::settingsFont(), - IonosTheme::settingsTextSize(), - IonosTheme::settingsTextWeight(), - IonosTheme::black() + WhitelabelTheme::getInstance::fontConfigurationCss( + WhitelabelTheme::getInstance::settingsFont(), + WhitelabelTheme::getInstance::settingsTextSize(), + WhitelabelTheme::getInstance::settingsTextWeight(), + WhitelabelTheme::getInstance::black() ) ) ); @@ -578,23 +578,23 @@ void SelectiveSyncDialog::init(const AccountPtr &account) void SelectiveSyncDialog::customizeStyle() { this->setStyleSheet( - QStringLiteral("QWidget QTreeView{ background-color: %1; }").arg(IonosTheme::dialogBackgroundColor()) + QStringLiteral("QWidget QTreeView{ background-color: %1; }").arg(WhitelabelTheme::getInstance::dialogBackgroundColor()) ); _okButton->setStyleSheet( _okButton->styleSheet() + QStringLiteral("QPushButton { %1; } ").arg( - IonosTheme::fontConfigurationCss( - IonosTheme::settingsFont(), - IonosTheme::settingsTextSize(), - IonosTheme::settingsTitleWeight500(), - IonosTheme::white() + WhitelabelTheme::getInstance::fontConfigurationCss( + WhitelabelTheme::getInstance::settingsFont(), + WhitelabelTheme::getInstance::settingsTextSize(), + WhitelabelTheme::getInstance::settingsTitleWeight500(), + WhitelabelTheme::getInstance::white() ) ) ); // Set background colors auto dialogPalette = palette(); - const auto backgroundColor = QColor(IonosTheme::dialogBackgroundColor()); + const auto backgroundColor = QColor(WhitelabelTheme::getInstance::dialogBackgroundColor()); // Set Color of upper part dialogPalette.setColor(QPalette::Base, backgroundColor); diff --git a/src/gui/sessnackbar.cpp b/src/gui/sessnackbar.cpp index 00b22991e3589..48c4b7f3f636c 100644 --- a/src/gui/sessnackbar.cpp +++ b/src/gui/sessnackbar.cpp @@ -1,5 +1,5 @@ #include "sessnackbar.h" -#include "ionostheme.h" +#include "whitelabeltheme.h" #include "theme.h" #include #include @@ -104,7 +104,7 @@ namespace OCC { const auto logoIconFileName = Theme::hidpiFileName(":/client/theme/ses/ses-snackbar-success.svg"); m_iconLabel.setPixmap(logoIconFileName); - updateStyleSheet(IonosTheme::successBorderColor(), IonosTheme::successColor(), IonosTheme::black(), IonosTheme::black()); + updateStyleSheet(WhitelabelTheme::getInstance::successBorderColor(), WhitelabelTheme::getInstance::successColor(), WhitelabelTheme::getInstance::black(), WhitelabelTheme::getInstance::black()); } void sesSnackBar::warningStyle() @@ -112,7 +112,7 @@ namespace OCC { const auto logoIconFileName = Theme::hidpiFileName(":/client/theme/ses/ses-snackbar-warning.svg"); m_iconLabel.setPixmap(logoIconFileName); - updateStyleSheet(IonosTheme::warningBorderColor(), IonosTheme::warningColor(), IonosTheme::black(), IonosTheme::black()); + updateStyleSheet(WhitelabelTheme::getInstance::warningBorderColor(), WhitelabelTheme::getInstance::warningColor(), WhitelabelTheme::getInstance::black(), WhitelabelTheme::getInstance::black()); } void sesSnackBar::errorStyle() @@ -120,7 +120,7 @@ namespace OCC { const auto logoIconFileName = Theme::hidpiFileName(":/client/theme/ses/ses-snackbar-error.svg"); m_iconLabel.setPixmap(logoIconFileName); - updateStyleSheet(IonosTheme::errorBorderColor(), IonosTheme::errorColor(), IonosTheme::black(), IonosTheme::black()); + updateStyleSheet(WhitelabelTheme::getInstance::errorBorderColor(), WhitelabelTheme::getInstance::errorColor(), WhitelabelTheme::getInstance::black(), WhitelabelTheme::getInstance::black()); } void sesSnackBar::updateStyleSheet(QColor frameBorderColor, QColor frameBackgroundColor, QColor frameColor, QColor labelColor) diff --git a/src/gui/sesstyle.cpp b/src/gui/sesstyle.cpp index 329051a9f0a6b..f0dc452ba8467 100644 --- a/src/gui/sesstyle.cpp +++ b/src/gui/sesstyle.cpp @@ -18,7 +18,7 @@ *************************************************************************/ #include "sesstyle.h" -#include "ionostheme.h" +#include "whitelabeltheme.h" #include "pushbuttonstylehelper.h" #include "moreoptionsbuttonstylehelper.h" diff --git a/src/gui/settingsdialog.cpp b/src/gui/settingsdialog.cpp index 413a0d02c59af..0440522a08123 100644 --- a/src/gui/settingsdialog.cpp +++ b/src/gui/settingsdialog.cpp @@ -17,7 +17,7 @@ #include "folderman.h" #include "theme.h" -#include "ionostheme.h" +#include "whitelabeltheme.h" #include "generalsettings.h" #include "networksettings.h" #include "accountsettings.h" @@ -104,7 +104,7 @@ SettingsDialog::SettingsDialog(ownCloudGui *gui, QWidget *parent) _ui->setupUi(this); _toolBar = new QToolBar; - _toolBar->setIconSize(QSize(IonosTheme::toolbarIconSize(), IonosTheme::toolbarIconSize())); + _toolBar->setIconSize(QSize(WhitelabelTheme::getInstance::toolbarIconSize(), WhitelabelTheme::getInstance::toolbarIconSize())); _toolBar->setToolButtonStyle(Qt::ToolButtonTextUnderIcon); _toolBar->setFixedHeight(94); layout()->setMenuBar(_toolBar); @@ -193,7 +193,7 @@ SettingsDialog::SettingsDialog(ownCloudGui *gui, QWidget *parent) setWindowFlags(windowFlags() & ~Qt::WindowContextHelpButtonHint); cfg.restoreGeometry(this); - resize(width() > IonosTheme::minimalSettingsDialogWidth() ? width(): IonosTheme::minimalSettingsDialogWidth(), + resize(width() > WhitelabelTheme::getInstance::minimalSettingsDialogWidth() ? width(): WhitelabelTheme::getInstance::minimalSettingsDialogWidth(), (height() > generalSettings->sizeHint().height() ? height(): generalSettings->sizeHint().height()) + 25); } @@ -380,21 +380,21 @@ void SettingsDialog::customizeStyle() QVariantMap palette = Theme::instance()->systemPalette(); QString white(palette["window"].value().name()); - QString hoverColor(IonosTheme::toolButtonHoveredColor()); - QString pressedColor(IonosTheme::toolButtonPressedColor()); - QString selectedColor(IonosTheme::menuSelectedItemColor()); + QString hoverColor(WhitelabelTheme::getInstance::toolButtonHoveredColor()); + QString pressedColor(WhitelabelTheme::getInstance::toolButtonPressedColor()); + QString selectedColor(WhitelabelTheme::getInstance::menuSelectedItemColor()); QString borderColor(palette["shadow"].value().name()); QString highlightTextColor(palette["highlightedText"].value().name()); - QString toolbarActionBorderRadius(IonosTheme::toolbarActionBorderRadius()); - QString toolbarSideMargin (IonosTheme::toolbarSideMargin()); + QString toolbarActionBorderRadius(WhitelabelTheme::getInstance::toolbarActionBorderRadius()); + QString toolbarSideMargin (WhitelabelTheme::getInstance::toolbarSideMargin()); QString toolButtonFont ( - IonosTheme::fontConfigurationCss( - IonosTheme::settingsFont(), - IonosTheme::settingsTextSize(), - IonosTheme::settingsTextWeight(), - IonosTheme::menuTextColor() + WhitelabelTheme::getInstance::fontConfigurationCss( + WhitelabelTheme::getInstance::settingsFont(), + WhitelabelTheme::getInstance::settingsTextSize(), + WhitelabelTheme::getInstance::settingsTextWeight(), + WhitelabelTheme::getInstance::menuTextColor() ) ); diff --git a/src/gui/systray.cpp b/src/gui/systray.cpp index 7f4ca9c7dd753..a7659378e34ed 100644 --- a/src/gui/systray.cpp +++ b/src/gui/systray.cpp @@ -15,7 +15,7 @@ #include "accountmanager.h" #include "systray.h" #include "theme.h" -#include "ionostheme.h" +#include "whitelabeltheme.h" #include "config.h" #include "common/utility.h" #include "tray/svgimageprovider.h" @@ -210,11 +210,11 @@ void Systray::setupContextMenu() resumeAction->setEnabled(anyPaused); }); - _contextMenu->setStyleSheet(IonosTheme::fontConfigurationCss( - IonosTheme::settingsFont(), - IonosTheme::settingsTextSize(), - IonosTheme::settingsTextWeight(), - IonosTheme::menuTextColor())); + _contextMenu->setStyleSheet(WhitelabelTheme::getInstance::fontConfigurationCss( + WhitelabelTheme::getInstance::settingsFont(), + WhitelabelTheme::getInstance::settingsTextSize(), + WhitelabelTheme::getInstance::settingsTextWeight(), + WhitelabelTheme::getInstance::menuTextColor())); } void Systray::destroyDialog(QQuickWindow *dialog) const diff --git a/src/gui/tray/activitylistmodel.cpp b/src/gui/tray/activitylistmodel.cpp index 95191e1d89ae8..bf7e6f1bb813b 100644 --- a/src/gui/tray/activitylistmodel.cpp +++ b/src/gui/tray/activitylistmodel.cpp @@ -26,7 +26,7 @@ #include "activitydata.h" #include "systray.h" -#include "ionostheme.h" +#include "whitelabeltheme.h" #include #include @@ -255,11 +255,11 @@ QVariant ActivityListModel::data(const QModelIndex &index, int role) const } else { // File sync successful if (a._fileAction == "file_created") { - return IonosTheme::plusIcon(); + return WhitelabelTheme::getInstance::plusIcon(); } else if (a._fileAction == "file_deleted") { - return IonosTheme::deleteIcon(); + return WhitelabelTheme::getInstance::deleteIcon(); } else { - return IonosTheme::refreshIcon(); + return WhitelabelTheme::getInstance::refreshIcon(); } } } else { diff --git a/src/gui/tray/usermodel.cpp b/src/gui/tray/usermodel.cpp index b5e93ab72efcb..cdc7d5533fc2d 100644 --- a/src/gui/tray/usermodel.cpp +++ b/src/gui/tray/usermodel.cpp @@ -1653,17 +1653,17 @@ int UserModel::findUserIdForAccount(AccountState *account) const void UserModel::styleMessageBox(QMessageBox &messageBox, QPushButton *yesButton){ messageBox.setStyleSheet(QStringLiteral("QMessageBox { background-color: %1; } QMessageBox QLabel { %2 } ").arg( - IonosTheme::dialogBackgroundColor(), - IonosTheme::fontConfigurationCss( - IonosTheme::settingsFont(), - IonosTheme::settingsTextSize(), - IonosTheme::settingsTextWeight(), - IonosTheme::titleColor() + WhitelabelTheme::getInstance::dialogBackgroundColor(), + WhitelabelTheme::getInstance::fontConfigurationCss( + WhitelabelTheme::getInstance::settingsFont(), + WhitelabelTheme::getInstance::settingsTextSize(), + WhitelabelTheme::getInstance::settingsTextWeight(), + WhitelabelTheme::getInstance::titleColor() ) ) ); - messageBox.setIconPixmap(QPixmap(IonosTheme::questionCircleIcon())); + messageBox.setIconPixmap(QPixmap(WhitelabelTheme::getInstance::questionCircleIcon())); yesButton->setProperty("buttonStyle", QVariant::fromValue(OCC::ButtonStyleName::Primary)); diff --git a/src/gui/wizard/dataprotectionpage.cpp b/src/gui/wizard/dataprotectionpage.cpp index f13459433796e..510844e06d0fb 100644 --- a/src/gui/wizard/dataprotectionpage.cpp +++ b/src/gui/wizard/dataprotectionpage.cpp @@ -61,11 +61,11 @@ namespace OCC{ _ui->descriptionLabel->setStyleSheet( QStringLiteral("QLabel { %1; margin-left: %2; margin-right: %2; margin-bottom: %2; }").arg( - IonosTheme::fontConfigurationCss( - IonosTheme::settingsFont(), - IonosTheme::settingsTextSize(), - IonosTheme::settingsTextWeight(), - IonosTheme::black() + WhitelabelTheme::getInstance::fontConfigurationCss( + WhitelabelTheme::getInstance::settingsFont(), + WhitelabelTheme::getInstance::settingsTextSize(), + WhitelabelTheme::getInstance::settingsTextWeight(), + WhitelabelTheme::getInstance::black() ), "32" ) diff --git a/src/gui/wizard/dataprotectionsettingspage.cpp b/src/gui/wizard/dataprotectionsettingspage.cpp index 2584d7a18bdd8..6a839b9819675 100644 --- a/src/gui/wizard/dataprotectionsettingspage.cpp +++ b/src/gui/wizard/dataprotectionsettingspage.cpp @@ -69,31 +69,31 @@ namespace OCC{ _ui->necessaryDataCheckBox->setStyleSheet( QStringLiteral("QCheckBox { %1; }").arg( - IonosTheme::fontConfigurationCss( - IonosTheme::settingsFont(), - IonosTheme::settingsTextSize(), - IonosTheme::settingsTitleWeight600(), - IonosTheme::folderWizardSubtitleColor() + WhitelabelTheme::getInstance::fontConfigurationCss( + WhitelabelTheme::getInstance::settingsFont(), + WhitelabelTheme::getInstance::settingsTextSize(), + WhitelabelTheme::getInstance::settingsTitleWeight600(), + WhitelabelTheme::getInstance::folderWizardSubtitleColor() ) )); _ui->anonymousDataCheckBox->setStyleSheet( QStringLiteral("QCheckBox { %1; }").arg( - IonosTheme::fontConfigurationCss( - IonosTheme::settingsFont(), - IonosTheme::settingsTextSize(), - IonosTheme::settingsTitleWeight600(), - IonosTheme::folderWizardSubtitleColor() + WhitelabelTheme::getInstance::fontConfigurationCss( + WhitelabelTheme::getInstance::settingsFont(), + WhitelabelTheme::getInstance::settingsTextSize(), + WhitelabelTheme::getInstance::settingsTitleWeight600(), + WhitelabelTheme::getInstance::folderWizardSubtitleColor() ) )); _ui->descriptionLabel->setStyleSheet( QStringLiteral("QLabel { %1; margin-top: %2; margin-bottom: %2; }").arg( - IonosTheme::fontConfigurationCss( - IonosTheme::settingsFont(), - IonosTheme::settingsTextSize(), - IonosTheme::settingsTextWeight(), - IonosTheme::black() + WhitelabelTheme::getInstance::fontConfigurationCss( + WhitelabelTheme::getInstance::settingsFont(), + WhitelabelTheme::getInstance::settingsTextSize(), + WhitelabelTheme::getInstance::settingsTextWeight(), + WhitelabelTheme::getInstance::black() ), "24" ) @@ -101,24 +101,24 @@ namespace OCC{ _ui->necessaryDataLabel->setStyleSheet( QStringLiteral("QLabel { %1; margin-left: %2; margin-bottom: %3; }").arg( - IonosTheme::fontConfigurationCss( - IonosTheme::settingsFont(), - IonosTheme::settingsTextSize(), - IonosTheme::settingsTextWeight(), - IonosTheme::black() + WhitelabelTheme::getInstance::fontConfigurationCss( + WhitelabelTheme::getInstance::settingsFont(), + WhitelabelTheme::getInstance::settingsTextSize(), + WhitelabelTheme::getInstance::settingsTextWeight(), + WhitelabelTheme::getInstance::black() ), "16", - IonosTheme::smallMargin() + WhitelabelTheme::getInstance::smallMargin() ) ); _ui->anonymousDataLabel->setStyleSheet( QStringLiteral("QLabel { %1; margin-left: %2; margin-bottom: %3; }").arg( - IonosTheme::fontConfigurationCss( - IonosTheme::settingsFont(), - IonosTheme::settingsTextSize(), - IonosTheme::settingsTextWeight(), - IonosTheme::black() + WhitelabelTheme::getInstance::fontConfigurationCss( + WhitelabelTheme::getInstance::settingsFont(), + WhitelabelTheme::getInstance::settingsTextSize(), + WhitelabelTheme::getInstance::settingsTextWeight(), + WhitelabelTheme::getInstance::black() ), "16", "48" diff --git a/src/gui/wizard/flow2authwidget.cpp b/src/gui/wizard/flow2authwidget.cpp index 302cfa970a9d4..6a553da060db5 100644 --- a/src/gui/wizard/flow2authwidget.cpp +++ b/src/gui/wizard/flow2authwidget.cpp @@ -237,18 +237,18 @@ void Flow2AuthWidget::customizeStyle() _ui.horizontalLayout->setSpacing(32); #endif - _ui.statusLabel->setStyleSheet(IonosTheme::fontConfigurationCss( - IonosTheme::settingsFont(), - IonosTheme::settingsTextSize(), - IonosTheme::settingsTextWeight(), - IonosTheme::titleColor() + _ui.statusLabel->setStyleSheet(WhitelabelTheme::getInstance::fontConfigurationCss( + WhitelabelTheme::getInstance::settingsFont(), + WhitelabelTheme::getInstance::settingsTextSize(), + WhitelabelTheme::getInstance::settingsTextWeight(), + WhitelabelTheme::getInstance::titleColor() )); - _ui.label->setStyleSheet(IonosTheme::fontConfigurationCss( - IonosTheme::settingsFont(), - IonosTheme::settingsTextSize(), - IonosTheme::settingsTextWeight(), - IonosTheme::titleColor() + _ui.label->setStyleSheet(WhitelabelTheme::getInstance::fontConfigurationCss( + WhitelabelTheme::getInstance::settingsFont(), + WhitelabelTheme::getInstance::settingsTextSize(), + WhitelabelTheme::getInstance::settingsTextWeight(), + WhitelabelTheme::getInstance::titleColor() )); _ui.label->setText(tr("Switch to your browser to connect your account")); diff --git a/src/gui/wizard/owncloudadvancedsetuppage.cpp b/src/gui/wizard/owncloudadvancedsetuppage.cpp index 0ba570530130b..282399c4275ee 100644 --- a/src/gui/wizard/owncloudadvancedsetuppage.cpp +++ b/src/gui/wizard/owncloudadvancedsetuppage.cpp @@ -27,7 +27,7 @@ #include "account.h" #include "configfile.h" #include "creds/abstractcredentials.h" -#include "ionostheme.h" +#include "whitelabeltheme.h" #include "networkjobs.h" #include "selectivesyncdialog.h" #include "theme.h" @@ -247,7 +247,7 @@ void OwncloudAdvancedSetupPage::initializePage() void OwncloudAdvancedSetupPage::SetAvatarIcon() { - const auto icon = QIcon(IonosTheme::avatarIcon()); + const auto icon = QIcon(WhitelabelTheme::getInstance::avatarIcon()); _ui.lServerIcon->setPixmap(icon.pixmap(32)); } @@ -536,7 +536,7 @@ void OwncloudAdvancedSetupPage::slotSelectiveSyncClicked() dlg->setAttribute(Qt::WA_DeleteOnClose); dlg->setStyleSheet(QStringLiteral("QDialog { background-color: %1; } QWidget { background-color: %1; }").arg( - IonosTheme::dialogBackgroundColor())); + WhitelabelTheme::getInstance::dialogBackgroundColor())); connect(dlg, &SelectiveSyncDialog::finished, this, [this, dlg]{ const int result = dlg->result(); @@ -550,11 +550,11 @@ void OwncloudAdvancedSetupPage::slotSelectiveSyncClicked() _selectiveSyncBlacklist = dlg->createBlackList(); updateBlacklist = true; // commented out for https://bmjira.atlassian.net/browse/SES-282 - // _ui.confCheckBoxExternal->setStyleSheet(IonosTheme::fontConfigurationCss( - // IonosTheme::settingsFont(), - // IonosTheme::settingsTextSize(), - // IonosTheme::settingsTextWeight(), - // IonosTheme::loginWizardFontLightGrey() + // _ui.confCheckBoxExternal->setStyleSheet(WhitelabelTheme::getInstance::fontConfigurationCss( + // WhitelabelTheme::getInstance::settingsFont(), + // WhitelabelTheme::getInstance::settingsTextSize(), + // WhitelabelTheme::getInstance::settingsTextWeight(), + // WhitelabelTheme::getInstance::loginWizardFontLightGrey() // )); _ui.confCheckBoxSize->setDisabled(true); @@ -599,11 +599,11 @@ void OwncloudAdvancedSetupPage::slotVirtualFileSyncClicked() }); } // commented out for https://bmjira.atlassian.net/browse/SES-282 - // _ui.confCheckBoxExternal->setStyleSheet(IonosTheme::fontConfigurationCss( - // IonosTheme::settingsFont(), - // IonosTheme::settingsTextSize(), - // IonosTheme::settingsTextWeight(), - // IonosTheme::loginWizardFontLightGrey() + // _ui.confCheckBoxExternal->setStyleSheet(WhitelabelTheme::getInstance::fontConfigurationCss( + // WhitelabelTheme::getInstance::settingsFont(), + // WhitelabelTheme::getInstance::settingsTextSize(), + // WhitelabelTheme::getInstance::settingsTextWeight(), + // WhitelabelTheme::getInstance::loginWizardFontLightGrey() // )); _ui.confCheckBoxSize->setDisabled(true); @@ -619,11 +619,11 @@ void OwncloudAdvancedSetupPage::slotSyncEverythingClicked() setErrorString(errorStr); // commented out for https://bmjira.atlassian.net/browse/SES-282 - // _ui.confCheckBoxExternal->setStyleSheet(IonosTheme::fontConfigurationCss( - // IonosTheme::settingsFont(), - // IonosTheme::settingsTextSize(), - // IonosTheme::settingsTextWeight(), - // IonosTheme::titleColor() + // _ui.confCheckBoxExternal->setStyleSheet(WhitelabelTheme::getInstance::fontConfigurationCss( + // WhitelabelTheme::getInstance::settingsFont(), + // WhitelabelTheme::getInstance::settingsTextSize(), + // WhitelabelTheme::getInstance::settingsTextWeight(), + // WhitelabelTheme::getInstance::titleColor() // )); } @@ -709,62 +709,62 @@ void OwncloudAdvancedSetupPage::customizeStyle() setStyleSheet( "QRadioButton {" + - IonosTheme::fontConfigurationCss( - IonosTheme::settingsFont(), - IonosTheme::settingsTextSize(), - IonosTheme::settingsTextWeight(), - IonosTheme::titleColor() + WhitelabelTheme::getInstance::fontConfigurationCss( + WhitelabelTheme::getInstance::settingsFont(), + WhitelabelTheme::getInstance::settingsTextSize(), + WhitelabelTheme::getInstance::settingsTextWeight(), + WhitelabelTheme::getInstance::titleColor() ) + "} QCheckBox {" + - IonosTheme::fontConfigurationCss( - IonosTheme::settingsFont(), - IonosTheme::settingsTextSize(), - IonosTheme::settingsTextWeight(), - IonosTheme::titleColor() + WhitelabelTheme::getInstance::fontConfigurationCss( + WhitelabelTheme::getInstance::settingsFont(), + WhitelabelTheme::getInstance::settingsTextSize(), + WhitelabelTheme::getInstance::settingsTextWeight(), + WhitelabelTheme::getInstance::titleColor() ) + "}" ); - _ui.userNameLabel->setStyleSheet(IonosTheme::fontConfigurationCss( - IonosTheme::settingsFont(), - IonosTheme::settingsTextSize(), - IonosTheme::settingsTextWeight(), - IonosTheme::titleColor() + _ui.userNameLabel->setStyleSheet(WhitelabelTheme::getInstance::fontConfigurationCss( + WhitelabelTheme::getInstance::settingsFont(), + WhitelabelTheme::getInstance::settingsTextSize(), + WhitelabelTheme::getInstance::settingsTextWeight(), + WhitelabelTheme::getInstance::titleColor() )); - _ui.serverAddressLabel->setStyleSheet(IonosTheme::fontConfigurationCss( - IonosTheme::settingsFont(), - IonosTheme::settingsTextSize(), - IonosTheme::settingsTextWeight(), - IonosTheme::loginWizardFontGrey() + _ui.serverAddressLabel->setStyleSheet(WhitelabelTheme::getInstance::fontConfigurationCss( + WhitelabelTheme::getInstance::settingsFont(), + WhitelabelTheme::getInstance::settingsTextSize(), + WhitelabelTheme::getInstance::settingsTextWeight(), + WhitelabelTheme::getInstance::loginWizardFontGrey() )); - _ui.localFolderDescriptionLabel->setStyleSheet(IonosTheme::fontConfigurationCss( - IonosTheme::settingsFont(), - IonosTheme::settingsTextSize(), - IonosTheme::settingsTextWeight(), - IonosTheme::titleColor() + _ui.localFolderDescriptionLabel->setStyleSheet(WhitelabelTheme::getInstance::fontConfigurationCss( + WhitelabelTheme::getInstance::settingsFont(), + WhitelabelTheme::getInstance::settingsTextSize(), + WhitelabelTheme::getInstance::settingsTextWeight(), + WhitelabelTheme::getInstance::titleColor() )); - _filePathLabel->setStyleSheet(IonosTheme::fontConfigurationCss( - IonosTheme::settingsFont(), - IonosTheme::settingsTextSize(), - IonosTheme::settingsTextWeight(), - IonosTheme::loginWizardFontGrey() + _filePathLabel->setStyleSheet(WhitelabelTheme::getInstance::fontConfigurationCss( + WhitelabelTheme::getInstance::settingsFont(), + WhitelabelTheme::getInstance::settingsTextSize(), + WhitelabelTheme::getInstance::settingsTextWeight(), + WhitelabelTheme::getInstance::loginWizardFontGrey() )); - _ui.lFreeSpace->setStyleSheet(IonosTheme::fontConfigurationCss( - IonosTheme::settingsFont(), - IonosTheme::settingsTextSize(), - IonosTheme::settingsTextWeight(), - IonosTheme::loginWizardFontGrey() + _ui.lFreeSpace->setStyleSheet(WhitelabelTheme::getInstance::fontConfigurationCss( + WhitelabelTheme::getInstance::settingsFont(), + WhitelabelTheme::getInstance::settingsTextSize(), + WhitelabelTheme::getInstance::settingsTextWeight(), + WhitelabelTheme::getInstance::loginWizardFontGrey() )); #ifdef Q_OS_MAC _ui.syncModeLabel->setStyleSheet( - IonosTheme::fontConfigurationCss( - IonosTheme::settingsFont(), - IonosTheme::settingsTextSize(), - IonosTheme::settingsTitleWeight600(), - IonosTheme::titleColor() + WhitelabelTheme::getInstance::fontConfigurationCss( + WhitelabelTheme::getInstance::settingsFont(), + WhitelabelTheme::getInstance::settingsTextSize(), + WhitelabelTheme::getInstance::settingsTitleWeight600(), + WhitelabelTheme::getInstance::titleColor() ) ); #endif @@ -773,7 +773,7 @@ void OwncloudAdvancedSetupPage::customizeStyle() void OwncloudAdvancedSetupPage::styleLocalFolderLabel() { - const auto icon = QIcon(IonosTheme::folderIcon()); + const auto icon = QIcon(WhitelabelTheme::getInstance::folderIcon()); _ui.lLocal->setPixmap(icon.pixmap(32)); } @@ -815,7 +815,7 @@ void OwncloudAdvancedSetupPage::updateMacOsFileProviderRelatedViews() void OwncloudAdvancedSetupPage::styleSyncLogo() { - const auto syncArrowIcon = QIcon(IonosTheme::syncArrows()); + const auto syncArrowIcon = QIcon(WhitelabelTheme::getInstance::syncArrows()); // const auto syncArrowIcon = Theme::createColorAwareIcon(QLatin1String(":/client/theme/sync-arrow.svg"), palette()); _ui.syncLogoLabel->setPixmap(syncArrowIcon.pixmap(QSize(32,32))); _ui.syncLogoLabel->setSizePolicy(QSizePolicy(QSizePolicy::Fixed, QSizePolicy::Fixed)); diff --git a/src/gui/wizard/owncloudwizard.cpp b/src/gui/wizard/owncloudwizard.cpp index d39ab8e340c40..b82568a53b614 100644 --- a/src/gui/wizard/owncloudwizard.cpp +++ b/src/gui/wizard/owncloudwizard.cpp @@ -23,7 +23,7 @@ #include "foregroundbackground_interface.h" #endif -#include "ionostheme.h" +#include "whitelabeltheme.h" #include "wizard/flow2authcredspage.h" #include "wizard/owncloudadvancedsetuppage.h" #include "wizard/owncloudhttpcredspage.h" @@ -471,7 +471,7 @@ void OwncloudWizard::customizeStyle() // Set background colors auto wizardPalette = palette(); - const auto backgroundColor = QColor(IonosTheme::dialogBackgroundColor()); + const auto backgroundColor = QColor(WhitelabelTheme::getInstance::dialogBackgroundColor()); // Set Color of upper part wizardPalette.setColor(QPalette::Base, backgroundColor); diff --git a/src/gui/wizard/slideshow.cpp b/src/gui/wizard/slideshow.cpp index 5e263c8a47c1d..fb8cc2ce46db8 100644 --- a/src/gui/wizard/slideshow.cpp +++ b/src/gui/wizard/slideshow.cpp @@ -13,7 +13,7 @@ */ #include "slideshow.h" -#include "ionostheme.h" +#include "whitelabeltheme.h" #include #include @@ -23,18 +23,18 @@ namespace OCC { -static const int Spacing = IonosTheme::LoginPageSpacer(); +static const int Spacing = WhitelabelTheme::getInstance::LoginPageSpacer(); static const int SlideDuration = 1000; static const int SlideDistance = 400; SlideShow::SlideShow(QWidget *parent) : QWidget(parent) { setSizePolicy(QSizePolicy::Minimum, QSizePolicy::Minimum); - setStyleSheet(IonosTheme::fontConfigurationCss( - IonosTheme::settingsFont(), - IonosTheme::onboardingTitle(), - IonosTheme::settingsTitleWeight400(), - IonosTheme::titleColor() + setStyleSheet(WhitelabelTheme::getInstance::fontConfigurationCss( + WhitelabelTheme::getInstance::settingsFont(), + WhitelabelTheme::getInstance::onboardingTitle(), + WhitelabelTheme::getInstance::settingsTitleWeight400(), + WhitelabelTheme::getInstance::titleColor() )); } From 27395a85485bf5f99abefde0412ad82e4a93067f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Christopher=20H=C3=A4tty?= Date: Tue, 21 Oct 2025 09:12:36 +0200 Subject: [PATCH 289/371] SES-333 Introduced BaseTheme --- src/libsync/CMakeLists.txt | 3 + src/libsync/basetheme.h | 334 ++++++++++++++++++++++++++++++++++ src/libsync/ionostheme.h | 163 ++++++++--------- src/libsync/stratotheme.h | 157 ++++++++-------- src/libsync/whitelabeltheme.h | 81 ++++++--- 5 files changed, 555 insertions(+), 183 deletions(-) create mode 100644 src/libsync/basetheme.h diff --git a/src/libsync/CMakeLists.txt b/src/libsync/CMakeLists.txt index 1b5e0de585fa3..e8ef566faa62a 100644 --- a/src/libsync/CMakeLists.txt +++ b/src/libsync/CMakeLists.txt @@ -118,6 +118,9 @@ set(libsync_SRCS theme.h theme.cpp ionostheme.h + whitelabeltheme.h + stratotheme.h + basetheme.h updatee2eefoldermetadatajob.h updatee2eefoldermetadatajob.cpp updatemigratede2eemetadatajob.h diff --git a/src/libsync/basetheme.h b/src/libsync/basetheme.h new file mode 100644 index 0000000000000..8361921c828e1 --- /dev/null +++ b/src/libsync/basetheme.h @@ -0,0 +1,334 @@ +#ifndef _BASETHEME_H +#define _BASETHEME_H + +#include +#include +#include "theme.h" + +namespace OCC { + +class BaseTheme { +public: + virtual ~BaseTheme() = default; + + // Base theme prefix (can be overridden) + virtual QString themePrefix() const { return QStringLiteral(":/theme/"); } + + // Common interface for icons, fonts, colors, etc. + virtual QString avatarIcon() const = 0; + + virtual QString folderIcon() const = 0; + + virtual QString syncArrows() const = 0; + + virtual QString questionCircleIcon() const { + return QString(Theme::themePrefix) + QStringLiteral("ses/ses-questionMark.svg"); + } + + virtual QString liveBackupPlusIcon() const { + return QString(Theme::themePrefix) + QStringLiteral("ses/ses-addlivebackup.svg"); + } + + + virtual QString plusIcon() const { + return QStringLiteral("qrc:///client/theme/ses/ses-darkPlus.svg"); + } + + virtual QString deleteIcon() const { + return QStringLiteral("qrc:///client/theme/ses/ses-accountDelete.svg"); + } + + virtual QString refreshIcon() const { + return QStringLiteral("qrc:///client/theme/ses/ses-refresh.svg"); + } + + virtual QString syncSuccessIcon() const { + return QStringLiteral("qrc:///client/theme/ses/ses-syncstatus-success.svg"); + } + + virtual QString syncWarnIcon() const { + return QStringLiteral("qrc:///client/theme/ses/ses-syncstatus-warning.svg"); + } + + virtual QString syncErrorIcon() const { + return QStringLiteral("qrc:///client/theme/ses/ses-syncstatus-error.svg"); + } + + virtual QString syncPausedIcon() const { + return QStringLiteral("qrc:///client/theme/ses/ses-syncstatus-paused.svg"); + } + + virtual QString syncingIcon() const { + return QStringLiteral("qrc:///client/theme/ses/ses-syncstatus-syncing.svg"); + } + + virtual QString syncOfflineIcon() const { + return QStringLiteral("qrc:///client/theme/ses/ses-state-offline.svg"); + } + + virtual int treeViewIconSize() const { + return 32; + } + + //Control Configuration: Sizes + virtual QString toolbarActionBorderRadius() const { + return "8px"; + } + + virtual QString toolbarSideMargin() const { + return "10px"; + } + + virtual int toolbarIconSize() const { + return 24; + } + + virtual QString buttonRadius() const { + return "4px"; + } + + virtual int buttonRadiusInt() const { + return 4; + } + + virtual QString buttonPadding() const { + return "10px"; + } + + virtual QString smallMargin() const { + return "8"; + } + + virtual int minimalSettingsDialogWidth() const { + return 740; + } + + virtual int wizardFixedWidth() const { + return 576; + } + + virtual int wizardFixedHeight() const { + return 704; + } + + virtual int LoginPageSpacer() const { + return 45; + } + + //Font Configuration + virtual QString settingsFont() const { + return "Segoe UI"; + } + + virtual QString contextMenuFont() const { + return ":/client/fonts/OpenSans-Regular.ttf"; + } + + virtual QString settingsSmallTextSize() const { + return "14px"; + } + + virtual int settingsTextPixel() const { + return 16; + } + + virtual QString settingsTextSize() const { + return QString::number(settingsTextPixel()) + "px"; + } + + virtual int settingsTitlePixel() const { + return 20; + } + + virtual QString settingsTitleSize() const { + return QString::number(settingsTitlePixel()) + "px"; + } + + virtual int settingsBigTitlePixel() const { + return 24; + } + + virtual QString settingsBigTitleSize() const { + return QString::number(settingsBigTitlePixel()) + "px"; + } + + virtual QString onboardingTitle() const { + return "28px"; + } + + virtual QString settingsTextWeight() const { + return "400"; + } + + virtual QString settingsTitleWeight400() const { + return "400"; + } + + virtual QString settingsTitleWeight500() const { + return "500"; + } + + virtual QString settingsTitleWeight600() const { + return "600"; + } + + virtual QFont::Weight settingsTitleWeightDemiBold() const { + return QFont::DemiBold; + } + + virtual QFont::Weight settingsTitleWeightNormal() const { + return QFont::Normal; + } + + virtual QFont settingsFontDefault() const { + QFont defaultFont(settingsFont()); + defaultFont.setPixelSize(settingsTextPixel()); + defaultFont.setWeight(settingsTitleWeightNormal()); + return defaultFont; + } + + virtual QString titleColor() const { + return "#000000"; + } + + virtual QString folderWizardSubtitleColor() const { + return "#104996"; + } + + virtual QString folderWizardPathColor() const { + return "#97A3B4"; + } + + virtual QString loginWizardFontGrey() const { + return "#616161"; + } + + virtual QString loginWizardFontLightGrey() const { + return "#BDBDBD"; + } + + virtual QString fontConfigurationCss(QString font, QString size, QString weight, QString color) const { + return QString("font-family: %1; font-size: %2; font-weight: %3; color: %4; ").arg( + font, + size, + weight, + color); + } + + //Colors + virtual QString settingsLinkColor() const { + return "#02306A"; + } + + virtual QString buttonPrimaryColor() const { + return "#0F6CBD"; + } + + virtual QString buttonSecondaryBorderColor() const { + return "#D1D1D1"; + } + + virtual QString buttonDisabledColor() const { + return "#F0F0F0"; + } + + virtual QString buttonPrimaryHoverColor() const { + return "#115EA3"; + } + + virtual QString buttonSecondaryHoverColor() const { + return "#F5F5F5"; + } + + virtual QString buttonPrimaryPressedColor() const { + return "#0C3B5E"; + } + + virtual QString buttonSecondaryPressedColor() const { + return "#E0E0E0"; + } + + virtual QString buttonDisabledFontColor() const { + return "#BDBDBD"; + } + + virtual QString white() const { + return "#FFFFFF"; + } + + virtual QString black() const { + return "#000000"; + } + + virtual QString dialogBackgroundColor() const { + return "#FAFAFA"; + } + + virtual QString menuBorderColor() const { + return "#2E4360"; + } + + virtual QString menuTextColor() const { + return "#001B41"; + } + + virtual QString menuSelectedItemColor() const { + return "#F4F7FA"; + } + + virtual QString menuBorderRadius() const { + return "16px"; + } + + virtual QString buttonPressedColor() const { + return "#0B2A63"; + } + + virtual QString buttonHoveredColor() const { + return "#1474C4"; + } + + virtual QString toolButtonHoveredColor() const { + return "#DBEDF8"; + } + + virtual QString toolButtonPressedColor() const { + return "#95CAEB"; + } + + virtual QString errorBorderColor() const { + return "#EEACB2"; + } + + virtual QString errorColor() const { + return "#FDF3F4"; + } + + virtual QString warningBorderColor() const { + return "#F4BFAB"; + } + + virtual QString warningColor() const { + return "#FDF6F3"; + } + + virtual QString successBorderColor() const { + return "#9FD89F"; + } + + virtual QString successColor() const { + return "#F1FAF1"; + } + + virtual QString infoBorderColor() const { + return "#11C7E6"; + } + + virtual QString infoColor() const { + return "#E6F9FC"; + } +}; +} + + +#endif // _BASETHEME_H \ No newline at end of file diff --git a/src/libsync/ionostheme.h b/src/libsync/ionostheme.h index 0fc3a56965e84..0c08e8a8c987d 100644 --- a/src/libsync/ionostheme.h +++ b/src/libsync/ionostheme.h @@ -4,211 +4,213 @@ #include #include #include "theme.h" +#include "basetheme.h" namespace OCC { -class IonosTheme :: Theme { +class IonosTheme : public BaseTheme { public: + IonosTheme() = default; //Icons - static QString avatarIcon() { + QString avatarIcon() const override { return QString(Theme::themePrefix) + QStringLiteral("ses/ses-settingsAvatar.svg"); } - static QString folderIcon() { + QString folderIcon() const override { return QString(Theme::themePrefix) + QStringLiteral("ses/ses-folderIcon.svg"); } - static QString syncArrows() { + QString syncArrows() const override { return QString(Theme::themePrefix) + QStringLiteral("ses/ses-syncArrows.svg"); } - static QString questionCircleIcon() { + QString questionCircleIcon() const override { return QString(Theme::themePrefix) + QStringLiteral("ses/ses-questionMark.svg"); } - static QString liveBackupPlusIcon() { + QString liveBackupPlusIcon() const override { return QString(Theme::themePrefix) + QStringLiteral("ses/ses-addlivebackup.svg"); } - static QString plusIcon() { + QString plusIcon() const override { return QStringLiteral("qrc:///client/theme/ses/ses-darkPlus.svg"); } - static QString deleteIcon() { + QString deleteIcon() const override { return QStringLiteral("qrc:///client/theme/ses/ses-accountDelete.svg"); } - static QString refreshIcon() { + QString refreshIcon() const override { return QStringLiteral("qrc:///client/theme/ses/ses-refresh.svg"); } - static QString syncSuccessIcon() { + QString syncSuccessIcon() const override { return QStringLiteral("qrc:///client/theme/ses/ses-syncstatus-success.svg"); } - static QString syncWarnIcon() { + QString syncWarnIcon() const override { return QStringLiteral("qrc:///client/theme/ses/ses-syncstatus-warning.svg"); } - static QString syncErrorIcon() { + QString syncErrorIcon() const override { return QStringLiteral("qrc:///client/theme/ses/ses-syncstatus-error.svg"); } - static QString syncPausedIcon() { + QString syncPausedIcon() const override { return QStringLiteral("qrc:///client/theme/ses/ses-syncstatus-paused.svg"); } - static QString syncingIcon() { + QString syncingIcon() const override { return QStringLiteral("qrc:///client/theme/ses/ses-syncstatus-syncing.svg"); } - static QString syncOfflineIcon() { + QString syncOfflineIcon() const override { return QStringLiteral("qrc:///client/theme/ses/ses-state-offline.svg"); } - static int treeViewIconSize() { + int treeViewIconSize() const override { return 32; } //Control Configuration: Sizes - static QString toolbarActionBorderRadius() { + QString toolbarActionBorderRadius() const override { return "8px"; } - static QString toolbarSideMargin() { + QString toolbarSideMargin() const override { return "10px"; } - static int toolbarIconSize(){ + int toolbarIconSize() const override{ return 24; } - static QString buttonRadius() { + QString buttonRadius() const override { return "4px"; } - static int buttonRadiusInt() { + int buttonRadiusInt() const override { return 4; } - static QString buttonPadding() { + QString buttonPadding() const override { return "10px"; } - static QString smallMargin() { + QString smallMargin() const override { return "8"; } - static int minimalSettingsDialogWidth() { + int minimalSettingsDialogWidth() const override { return 740; } - static int wizardFixedWidth() { + int wizardFixedWidth() const override { return 576; } - static int wizardFixedHeight() { + int wizardFixedHeight() const override { return 704; } - static int LoginPageSpacer() { + int LoginPageSpacer() const override { return 45; } //Font Configuration - static QString settingsFont() { + QString settingsFont() const override { return "Segoe UI"; } - static QString contextMenuFont() { + QString contextMenuFont() const override { return ":/client/fonts/OpenSans-Regular.ttf"; } - static QString settingsSmallTextSize() { + QString settingsSmallTextSize() const override { return "14px"; } - static int settingsTextPixel() { + int settingsTextPixel() const override { return 16; } - static QString settingsTextSize() { + QString settingsTextSize() const override { return QString::number(settingsTextPixel()) + "px"; } - static int settingsTitlePixel() { + int settingsTitlePixel() const override { return 20; } - static QString settingsTitleSize() { + QString settingsTitleSize() const override { return QString::number(settingsTitlePixel()) + "px"; } - static int settingsBigTitlePixel() { + int settingsBigTitlePixel() const override { return 24; } - static QString settingsBigTitleSize() { + QString settingsBigTitleSize() const override { return QString::number(settingsBigTitlePixel()) + "px"; } - static QString onboardingTitle() { + QString onboardingTitle() const override { return "28px"; } - static QString settingsTextWeight() { + QString settingsTextWeight() const override { return "400"; } - static QString settingsTitleWeight400() { + QString settingsTitleWeight400() const override { return "400"; } - static QString settingsTitleWeight500() { + QString settingsTitleWeight500() const override { return "500"; } - static QString settingsTitleWeight600() { + QString settingsTitleWeight600() const override { return "600"; } - static QFont::Weight settingsTitleWeightDemiBold() { + QFont::Weight settingsTitleWeightDemiBold() const override { return QFont::DemiBold; } - static QFont::Weight settingsTitleWeightNormal() { + QFont::Weight settingsTitleWeightNormal() const override { return QFont::Normal; } - static QFont settingsFontDefault(){ + QFont settingsFontDefault() const override{ QFont defaultFont(settingsFont()); defaultFont.setPixelSize(settingsTextPixel()); defaultFont.setWeight(settingsTitleWeightNormal()); return defaultFont; } - static QString titleColor() { + QString titleColor() const override { return "#000000"; } - static QString folderWizardSubtitleColor() { + QString folderWizardSubtitleColor() const override { return "#104996"; } - static QString folderWizardPathColor() { + QString folderWizardPathColor() const override { return "#97A3B4"; } - static QString loginWizardFontGrey() { + QString loginWizardFontGrey() const override { return "#616161"; } - static QString loginWizardFontLightGrey() { + QString loginWizardFontLightGrey() const override { return "#BDBDBD"; } - static QString fontConfigurationCss(QString font, QString size, QString weight, QString color) { + QString fontConfigurationCss(QString font, QString size, QString weight, QString color) const override { return QString("font-family: %1; font-size: %2; font-weight: %3; color: %4; ").arg( font, size, @@ -217,121 +219,120 @@ class IonosTheme :: Theme { } //Colors - static QString settingsLinkColor() { + QString settingsLinkColor() const override { return "#02306A"; } - static QString buttonPrimaryColor() { + QString buttonPrimaryColor() const override { return "#0F6CBD"; } - static QString buttonSecondaryBorderColor() { + QString buttonSecondaryBorderColor() const override { return "#D1D1D1"; } - static QString buttonDisabledColor() { + QString buttonDisabledColor() const override { return "#F0F0F0"; } - static QString buttonPrimaryHoverColor() { + QString buttonPrimaryHoverColor() const override { return "#115EA3"; } - static QString buttonSecondaryHoverColor() { + QString buttonSecondaryHoverColor() const override { return "#F5F5F5"; } - static QString buttonPrimaryPressedColor() { + QString buttonPrimaryPressedColor() const override { return "#0C3B5E"; } - static QString buttonSecondaryPressedColor() { + QString buttonSecondaryPressedColor() const override { return "#E0E0E0"; } - static QString buttonDisabledFontColor() { + QString buttonDisabledFontColor() const override { return "#BDBDBD"; } - static QString white() { + QString white() const override { return "#FFFFFF"; } - static QString black() { + QString black() const override { return "#000000"; } - static QString dialogBackgroundColor() { + QString dialogBackgroundColor() const override { return "#FAFAFA"; } - static QString menuBorderColor() { + QString menuBorderColor() const override { return "#2E4360"; } - static QString menuTextColor() { + QString menuTextColor() const override { return "#001B41"; } - static QString menuSelectedItemColor() { + QString menuSelectedItemColor() const override { return "#F4F7FA"; } - static QString menuBorderRadius() { + QString menuBorderRadius() const override { return "16px"; } - static QString buttonPressedColor() { + QString buttonPressedColor() const override { return "#0B2A63"; } - static QString buttonHoveredColor() { + QString buttonHoveredColor() const override { return "#1474C4"; } - static QString toolButtonHoveredColor() { + QString toolButtonHoveredColor() const override { return "#DBEDF8"; } - static QString toolButtonPressedColor() { + QString toolButtonPressedColor() const override { return "#95CAEB"; } - static QString errorBorderColor() { + QString errorBorderColor() const override { return "#EEACB2"; } - static QString errorColor() { + QString errorColor() const override { return "#FDF3F4"; } - static QString warningBorderColor() { + QString warningBorderColor() const override { return "#F4BFAB"; } - static QString warningColor() { + QString warningColor() const override { return "#FDF6F3"; } - static QString successBorderColor() { + QString successBorderColor() const override { return "#9FD89F"; } - static QString successColor() { + QString successColor() const override { return "#F1FAF1"; } - static QString infoBorderColor() { + QString infoBorderColor() const override { return "#11C7E6"; } - static QString infoColor() { + QString infoColor() const override { return "#E6F9FC"; } - -private: - IonosTheme() {} +// private: +// IonosTheme() {} }; } #endif // _IONOSTHEME_H \ No newline at end of file diff --git a/src/libsync/stratotheme.h b/src/libsync/stratotheme.h index 3bb9bd07b91e4..c7980ed36864e 100644 --- a/src/libsync/stratotheme.h +++ b/src/libsync/stratotheme.h @@ -3,212 +3,213 @@ #include #include +#include "basetheme.h" #include "theme.h" namespace OCC { -class StratoTheme :: Theme{ +class StratoTheme : public BaseTheme { public: //Icons - static QString avatarIcon() { + QString avatarIcon() const override { return QString(Theme::themePrefix) + QStringLiteral("ses/ses-settingsAvatar.svg"); } - static QString folderIcon() { + QString folderIcon() const override { return QString(Theme::themePrefix) + QStringLiteral("ses/ses-folderIcon.svg"); } - static QString syncArrows() { + QString syncArrows() const override { return QString(Theme::themePrefix) + QStringLiteral("ses/ses-syncArrows.svg"); } - static QString questionCircleIcon() { + QString questionCircleIcon() const override { return QString(Theme::themePrefix) + QStringLiteral("ses/ses-questionMark.svg"); } - static QString liveBackupPlusIcon() { + QString liveBackupPlusIcon() const override { return QString(Theme::themePrefix) + QStringLiteral("ses/ses-addlivebackup.svg"); } - static QString plusIcon() { + QString plusIcon() const override { return QStringLiteral("qrc:///client/theme/ses/ses-darkPlus.svg"); } - static QString deleteIcon() { + QString deleteIcon() const override { return QStringLiteral("qrc:///client/theme/ses/ses-accountDelete.svg"); } - static QString refreshIcon() { + QString refreshIcon() const override { return QStringLiteral("qrc:///client/theme/ses/ses-refresh.svg"); } - static QString syncSuccessIcon() { + QString syncSuccessIcon() const override { return QStringLiteral("qrc:///client/theme/ses/ses-syncstatus-success.svg"); } - static QString syncWarnIcon() { + QString syncWarnIcon() const override { return QStringLiteral("qrc:///client/theme/ses/ses-syncstatus-warning.svg"); } - static QString syncErrorIcon() { + QString syncErrorIcon() const override { return QStringLiteral("qrc:///client/theme/ses/ses-syncstatus-error.svg"); } - static QString syncPausedIcon() { + QString syncPausedIcon() const override { return QStringLiteral("qrc:///client/theme/ses/ses-syncstatus-paused.svg"); } - static QString syncingIcon() { + QString syncingIcon() const override { return QStringLiteral("qrc:///client/theme/ses/ses-syncstatus-syncing.svg"); } - static QString syncOfflineIcon() { + QString syncOfflineIcon() const override { return QStringLiteral("qrc:///client/theme/ses/ses-state-offline.svg"); } - static int treeViewIconSize() { + int treeViewIconSize() const override { return 32; } //Control Configuration: Sizes - static QString toolbarActionBorderRadius() { + QString toolbarActionBorderRadius() const override { return "8px"; } - static QString toolbarSideMargin() { + QString toolbarSideMargin() const override { return "10px"; } - static int toolbarIconSize(){ + int toolbarIconSize() const override{ return 24; } - static QString buttonRadius() { + QString buttonRadius() const override { return "4px"; } - static int buttonRadiusInt() { + int buttonRadiusInt() const override { return 4; } - static QString buttonPadding() { + QString buttonPadding() const override { return "10px"; } - static QString smallMargin() { + QString smallMargin() const override { return "8"; } - static int minimalSettingsDialogWidth() { + int minimalSettingsDialogWidth() const override { return 740; } - static int wizardFixedWidth() { + int wizardFixedWidth() const override { return 576; } - static int wizardFixedHeight() { + int wizardFixedHeight() const override { return 704; } - static int LoginPageSpacer() { + int LoginPageSpacer() const override { return 45; } //Font Configuration - static QString settingsFont() { + QString settingsFont() const override { return "Segoe UI"; } - static QString contextMenuFont() { + QString contextMenuFont() const override { return ":/client/fonts/OpenSans-Regular.ttf"; } - static QString settingsSmallTextSize() { + QString settingsSmallTextSize() const override { return "14px"; } - static int settingsTextPixel() { + int settingsTextPixel() const override { return 16; } - static QString settingsTextSize() { + QString settingsTextSize() const override { return QString::number(settingsTextPixel()) + "px"; } - static int settingsTitlePixel() { + int settingsTitlePixel() const override { return 20; } - static QString settingsTitleSize() { + QString settingsTitleSize() const override { return QString::number(settingsTitlePixel()) + "px"; } - static int settingsBigTitlePixel() { + int settingsBigTitlePixel() const override { return 24; } - static QString settingsBigTitleSize() { + QString settingsBigTitleSize() const override { return QString::number(settingsBigTitlePixel()) + "px"; } - static QString onboardingTitle() { + QString onboardingTitle() const override { return "28px"; } - static QString settingsTextWeight() { + QString settingsTextWeight() const override { return "400"; } - static QString settingsTitleWeight400() { + QString settingsTitleWeight400() const override { return "400"; } - static QString settingsTitleWeight500() { + QString settingsTitleWeight500() const override { return "500"; } - static QString settingsTitleWeight600() { + QString settingsTitleWeight600() const override { return "600"; } - static QFont::Weight settingsTitleWeightDemiBold() { + QFont::Weight settingsTitleWeightDemiBold() const override { return QFont::DemiBold; } - static QFont::Weight settingsTitleWeightNormal() { + QFont::Weight settingsTitleWeightNormal() const override { return QFont::Normal; } - static QFont settingsFontDefault(){ + QFont settingsFontDefault() const override{ QFont defaultFont(settingsFont()); defaultFont.setPixelSize(settingsTextPixel()); defaultFont.setWeight(settingsTitleWeightNormal()); return defaultFont; } - static QString titleColor() { + QString titleColor() const override { return "#000000"; } - static QString folderWizardSubtitleColor() { + QString folderWizardSubtitleColor() const override { return "#104996"; } - static QString folderWizardPathColor() { + QString folderWizardPathColor() const override { return "#97A3B4"; } - static QString loginWizardFontGrey() { + QString loginWizardFontGrey() const override { return "#616161"; } - static QString loginWizardFontLightGrey() { + QString loginWizardFontLightGrey() const override { return "#BDBDBD"; } - static QString fontConfigurationCss(QString font, QString size, QString weight, QString color) { + QString fontConfigurationCss(QString font, QString size, QString weight, QString color) const override { return QString("font-family: %1; font-size: %2; font-weight: %3; color: %4; ").arg( font, size, @@ -217,115 +218,115 @@ class StratoTheme :: Theme{ } //Colors - static QString settingsLinkColor() { + QString settingsLinkColor() const override { return "#02306A"; } - static QString buttonPrimaryColor() { + QString buttonPrimaryColor() const override { return "#0F6CBD"; } - static QString buttonSecondaryBorderColor() { + QString buttonSecondaryBorderColor() const override { return "#D1D1D1"; } - static QString buttonDisabledColor() { + QString buttonDisabledColor() const override { return "#F0F0F0"; } - static QString buttonPrimaryHoverColor() { + QString buttonPrimaryHoverColor() const override { return "#115EA3"; } - static QString buttonSecondaryHoverColor() { + QString buttonSecondaryHoverColor() const override { return "#F5F5F5"; } - static QString buttonPrimaryPressedColor() { + QString buttonPrimaryPressedColor() const override { return "#0C3B5E"; } - static QString buttonSecondaryPressedColor() { + QString buttonSecondaryPressedColor() const override { return "#E0E0E0"; } - static QString buttonDisabledFontColor() { + QString buttonDisabledFontColor() const override { return "#BDBDBD"; } - static QString white() { + QString white() const override { return "#FFFFFF"; } - static QString black() { + QString black() const override { return "#000000"; } - static QString dialogBackgroundColor() { + QString dialogBackgroundColor() const override { return "#FAFAFA"; } - static QString menuBorderColor() { + QString menuBorderColor() const override { return "#2E4360"; } - static QString menuTextColor() { + QString menuTextColor() const override { return "#001B41"; } - static QString menuSelectedItemColor() { + QString menuSelectedItemColor() const override { return "#F4F7FA"; } - static QString menuBorderRadius() { + QString menuBorderRadius() const override { return "16px"; } - static QString buttonPressedColor() { + QString buttonPressedColor() const override { return "#0B2A63"; } - static QString buttonHoveredColor() { + QString buttonHoveredColor() const override { return "#1474C4"; } - static QString toolButtonHoveredColor() { + QString toolButtonHoveredColor() const override { return "#DBEDF8"; } - static QString toolButtonPressedColor() { + QString toolButtonPressedColor() const override { return "#95CAEB"; } - static QString errorBorderColor() { + QString errorBorderColor() const override { return "#EEACB2"; } - static QString errorColor() { + QString errorColor() const override { return "#FDF3F4"; } - static QString warningBorderColor() { + QString warningBorderColor() const override { return "#F4BFAB"; } - static QString warningColor() { + QString warningColor() const override { return "#FDF6F3"; } - static QString successBorderColor() { + QString successBorderColor() const override { return "#9FD89F"; } - static QString successColor() { + QString successColor() const override { return "#F1FAF1"; } - static QString infoBorderColor() { + QString infoBorderColor() const override { return "#11C7E6"; } - static QString infoColor() { + QString infoColor() const override { return "#E6F9FC"; } diff --git a/src/libsync/whitelabeltheme.h b/src/libsync/whitelabeltheme.h index 9ef915df8a567..6c718f641b0ca 100644 --- a/src/libsync/whitelabeltheme.h +++ b/src/libsync/whitelabeltheme.h @@ -1,28 +1,61 @@ -#ifndef _WHITELABELTHEME_H -#define _WHITELABELTHEME_H +#ifndef WHITELABELTHEME_H +#define WHITELABELTHEME_H +#define WHITELABEL_IONOS -#include -#include -#include "theme.h" +#include "basetheme.h" +#include "stratotheme.h" +#include "ionostheme.h" namespace OCC { -class WhitelabelTheme { -public: - -static Theme* getInstance() { - - #if WHITELABEL_BRAND == "IONOS" - return IonosTheme::instance(); - #elif WHITELABEL_BRAND == "STRATO" - return StratoTheme::instance(); - #else - return Theme::instance(); - #endif -} - -private: - WhitelabelTheme() {} -}; -} -#endif // _WHITELABELTHEME_H \ No newline at end of file +// #if defined(WHITELABEL_STRATO) +// using WL = StratoTheme; +// #elif defined(WHITELABEL_IONOS) +// using WL = IonosTheme; +// #else +// using WL = BaseTheme; +// #endif + +#if defined(WHITELABEL_IONOS) + static IonosTheme WLTheme; +#elif defined(WHITELABEL_STRATO) + static StratoTheme WLTheme; +#else + static BaseTheme WLTheme; +#endif + +} // namespace OCC + +#endif // WHITELABELTHEME_H + + +// #ifndef WHITELABELTHEME_H +// #define WHITELABELTHEME_H +// #define WHITELABEL_IONOS +// #include "basetheme.h" +// #include "ionostheme.h" +// #include "stratotheme.h" + +// namespace OCC { + +// class WhitelabelTheme { +// public: +// static BaseTheme& instance() { +// // This selection happens entirely at compile time +// #if defined(WHITELABEL_IONOS) +// static IonosTheme theme; +// #elif defined(WHITELABEL_STRATO) +// static StratoTheme theme; +// // #else +// // static BaseTheme theme; +// #endif +// return theme; +// } + +// private: +// WhitelabelTheme() = default; // prevent instantiation +// }; + +// } // namespace OCC + +// #endif // WHITELABELTHEME_H From 41afacf6906df77c1b474bb6c6a2bb83c9df1479 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Christopher=20H=C3=A4tty?= Date: Tue, 21 Oct 2025 09:13:50 +0200 Subject: [PATCH 290/371] SES-333 Adjusted Theme call --- src/gui/accountsettings.cpp | 96 ++++---- src/gui/buttonstyle.h | 72 +++--- src/gui/caseclashfilenamedialog.cpp | 28 +-- src/gui/conflictdialog.cpp | 18 +- src/gui/creds/webflowcredentialsdialog.cpp | 12 +- src/gui/foldercreationdialog.cpp | 16 +- src/gui/folderstatusdelegate.cpp | 36 +-- src/gui/folderstatusview.cpp | 2 +- src/gui/folderwizard.cpp | 212 +++++++++--------- src/gui/ga4/ganalytics.h | 2 +- src/gui/generalsettings.cpp | 52 ++--- src/gui/ignorelisttablewidget.cpp | 74 +++--- src/gui/invalidfilenamedialog.cpp | 22 +- src/gui/linkbutton.cpp | 6 +- src/gui/main.cpp | 2 +- src/gui/owncloudgui.cpp | 4 +- src/gui/pushbuttonstylehelper.cpp | 6 +- src/gui/selectivesyncdialog.cpp | 68 +++--- src/gui/sessnackbar.cpp | 6 +- src/gui/settingsdialog.cpp | 24 +- src/gui/systray.cpp | 10 +- src/gui/tray/activitylistmodel.cpp | 6 +- src/gui/tray/usermodel.cpp | 14 +- src/gui/wizard/dataprotectionpage.cpp | 10 +- src/gui/wizard/dataprotectionsettingspage.cpp | 52 ++--- src/gui/wizard/flow2authwidget.cpp | 20 +- src/gui/wizard/owncloudadvancedsetuppage.cpp | 118 +++++----- src/gui/wizard/owncloudwizard.cpp | 2 +- src/gui/wizard/slideshow.cpp | 12 +- 29 files changed, 501 insertions(+), 501 deletions(-) diff --git a/src/gui/accountsettings.cpp b/src/gui/accountsettings.cpp index a5dc23f14de67..16e02924f1aee 100644 --- a/src/gui/accountsettings.cpp +++ b/src/gui/accountsettings.cpp @@ -181,7 +181,7 @@ AccountSettings::AccountSettings(AccountState *accountState, QWidget *parent) { _ui->setupUi(this); this->setAutoFillBackground(true); - setPalette(QPalette(QPalette::Window, WhitelabelTheme::getInstance::dialogBackgroundColor())); + setPalette(QPalette(QPalette::Window, WhitelabelTheme::instance().dialogBackgroundColor())); _model->setAccountState(_accountState); _model->setParent(this); @@ -191,7 +191,7 @@ AccountSettings::AccountSettings(AccountState *accountState, QWidget *parent) // Connect styleChanged events to our widgets, so they can adapt (Dark-/Light-Mode switching) connect(this, &AccountSettings::styleChanged, delegate, &FolderStatusDelegate::slotStyleChanged); - _ui->_folderList->setFont(WhitelabelTheme::getInstance::settingsFontDefault()); + _ui->_folderList->setFont(WhitelabelTheme::instance().settingsFontDefault()); _ui->_folderList->header()->hide(); _ui->_folderList->setItemDelegate(delegate); @@ -214,7 +214,7 @@ AccountSettings::AccountSettings(AccountState *accountState, QWidget *parent) fpSettingsLayout->addWidget(fpSettingsWidget); fileProviderTab->setLayout(fpSettingsLayout); - _ui->tabWidget->setStyleSheet(QStringLiteral("QTabWidget::pane { background-color: %1; }").arg(WhitelabelTheme::getInstance::white())); + _ui->tabWidget->setStyleSheet(QStringLiteral("QTabWidget::pane { background-color: %1; }").arg(WhitelabelTheme::instance().white())); _ui->tabWidget->tabBar()->setStyleSheet("QTabBar::tab {\ color: #000000;\ }\ @@ -584,7 +584,7 @@ void AccountSettings::openIgnoredFilesDialog(const QString & absFolderPath) const QString ignoreFile{absFolderPath + ".sync-exclude.lst"}; const auto layout = new QVBoxLayout(); const auto ignoreListWidget = new IgnoreListTableWidget(this); - ignoreListWidget->setFont(WhitelabelTheme::getInstance::settingsFont()); + ignoreListWidget->setFont(WhitelabelTheme::instance().settingsFont()); ignoreListWidget->readIgnoreFile(ignoreFile); layout->addWidget(ignoreListWidget); @@ -603,7 +603,7 @@ void AccountSettings::openIgnoredFilesDialog(const QString & absFolderPath) }); connect(buttonBox, &QDialogButtonBox::rejected, dialog, &QDialog::close); - dialog->setPalette(QPalette(QPalette::Window, WhitelabelTheme::getInstance::white())); + dialog->setPalette(QPalette(QPalette::Window, WhitelabelTheme::instance().white())); dialog->setWindowFlags(windowFlags() & ~Qt::WindowContextHelpButtonHint); dialog->open(); @@ -725,14 +725,14 @@ void AccountSettings::styleCustomContextMenu(QMenu *menu) const "border-radius: 8px; " "}" ).arg( - WhitelabelTheme::getInstance::white(), - WhitelabelTheme::getInstance::menuBorderColor(), - WhitelabelTheme::getInstance::menuTextColor(), - WhitelabelTheme::getInstance::menuSelectedItemColor(), - WhitelabelTheme::getInstance::menuBorderRadius(), - WhitelabelTheme::getInstance::contextMenuFont(), - WhitelabelTheme::getInstance::settingsTextSize(), - WhitelabelTheme::getInstance::settingsTextWeight() + WhitelabelTheme::instance().white(), + WhitelabelTheme::instance().menuBorderColor(), + WhitelabelTheme::instance().menuTextColor(), + WhitelabelTheme::instance().menuSelectedItemColor(), + WhitelabelTheme::instance().menuBorderRadius(), + WhitelabelTheme::instance().contextMenuFont(), + WhitelabelTheme::instance().settingsTextSize(), + WhitelabelTheme::instance().settingsTextWeight() ) ); } @@ -982,13 +982,13 @@ void AccountSettings::slotRemoveCurrentFolder() messageBox->setStyleSheet( QStringLiteral("QMessageBox QLabel { %1; } QDialog { background-color: %2; }").arg( - WhitelabelTheme::getInstance::fontConfigurationCss( - WhitelabelTheme::getInstance::settingsFont(), - WhitelabelTheme::getInstance::settingsTextSize(), - WhitelabelTheme::getInstance::settingsTextWeight(), - WhitelabelTheme::getInstance::titleColor() + WhitelabelTheme::instance().fontConfigurationCss( + WhitelabelTheme::instance().settingsFont(), + WhitelabelTheme::instance().settingsTextSize(), + WhitelabelTheme::instance().settingsTextWeight(), + WhitelabelTheme::instance().titleColor() ), - WhitelabelTheme::getInstance::dialogBackgroundColor() + WhitelabelTheme::instance().dialogBackgroundColor() ) ); @@ -1117,13 +1117,13 @@ void AccountSettings::slotDisableVfsCurrentFolder() msgBox->setStyleSheet(QStringLiteral( "QMessageBox QLabel { %1 background-color: %2; }").arg( - WhitelabelTheme::getInstance::fontConfigurationCss( - WhitelabelTheme::getInstance::settingsFont(), - WhitelabelTheme::getInstance::settingsTextSize(), - WhitelabelTheme::getInstance::settingsTextWeight(), - WhitelabelTheme::getInstance::titleColor() + WhitelabelTheme::instance().fontConfigurationCss( + WhitelabelTheme::instance().settingsFont(), + WhitelabelTheme::instance().settingsTextSize(), + WhitelabelTheme::instance().settingsTextWeight(), + WhitelabelTheme::instance().titleColor() ), - WhitelabelTheme::getInstance::white() + WhitelabelTheme::instance().white() ) ); @@ -1341,11 +1341,11 @@ void AccountSettings::slotEnableCurrentFolder(bool terminate) msgbox->setStyleSheet( QStringLiteral("QMessageBox QLabel { %1; }").arg( - WhitelabelTheme::getInstance::fontConfigurationCss( - WhitelabelTheme::getInstance::settingsFont(), - WhitelabelTheme::getInstance::settingsTextSize(), - WhitelabelTheme::getInstance::settingsTextWeight(), - WhitelabelTheme::getInstance::titleColor() + WhitelabelTheme::instance().fontConfigurationCss( + WhitelabelTheme::instance().settingsFont(), + WhitelabelTheme::instance().settingsTextSize(), + WhitelabelTheme::instance().settingsTextWeight(), + WhitelabelTheme::instance().titleColor() ) ) ); @@ -1832,40 +1832,40 @@ void AccountSettings::customizeStyle() _ui->connectLabel->setText(msg); const auto color = palette().highlight().color(); - _ui->quotaProgressBar->setStyleSheet(progressBarStyle().arg(WhitelabelTheme::getInstance::dialogBackgroundColor(), color.name())); + _ui->quotaProgressBar->setStyleSheet(progressBarStyle().arg(WhitelabelTheme::instance().dialogBackgroundColor(), color.name())); _ui->quotaInfoLabel->setStyleSheet( - WhitelabelTheme::getInstance::fontConfigurationCss( - WhitelabelTheme::getInstance::settingsFont(), - WhitelabelTheme::getInstance::settingsTextSize(), - WhitelabelTheme::getInstance::settingsTitleWeight600(), - WhitelabelTheme::getInstance::titleColor() + WhitelabelTheme::instance().fontConfigurationCss( + WhitelabelTheme::instance().settingsFont(), + WhitelabelTheme::instance().settingsTextSize(), + WhitelabelTheme::instance().settingsTitleWeight600(), + WhitelabelTheme::instance().titleColor() ) ); _ui->quotaInfo2Label->setStyleSheet( - WhitelabelTheme::getInstance::fontConfigurationCss( - WhitelabelTheme::getInstance::settingsFont(), - WhitelabelTheme::getInstance::settingsSmallTextSize(), - WhitelabelTheme::getInstance::settingsTextWeight(), - WhitelabelTheme::getInstance::titleColor() + WhitelabelTheme::instance().fontConfigurationCss( + WhitelabelTheme::instance().settingsFont(), + WhitelabelTheme::instance().settingsSmallTextSize(), + WhitelabelTheme::instance().settingsTextWeight(), + WhitelabelTheme::instance().titleColor() ) ); _ui->_folderList->setStyleSheet( QStringLiteral("background: %1; %2;").arg( - WhitelabelTheme::getInstance::white(), - WhitelabelTheme::getInstance::fontConfigurationCss( - WhitelabelTheme::getInstance::settingsFont(), - WhitelabelTheme::getInstance::settingsTextSize(), - WhitelabelTheme::getInstance::settingsTextWeight(), - WhitelabelTheme::getInstance::titleColor() + WhitelabelTheme::instance().white(), + WhitelabelTheme::instance().fontConfigurationCss( + WhitelabelTheme::instance().settingsFont(), + WhitelabelTheme::instance().settingsTextSize(), + WhitelabelTheme::instance().settingsTextWeight(), + WhitelabelTheme::instance().titleColor() ) ) ); #if defined(Q_OS_MAC) - _ui->selectiveSyncLabel->setStyleSheet(QString("color: %1;").arg(WhitelabelTheme::getInstance::black())); + _ui->selectiveSyncLabel->setStyleSheet(QString("color: %1;").arg(WhitelabelTheme::instance().black())); _ui->horizontalLayout->setSpacing(16); #endif diff --git a/src/gui/buttonstyle.h b/src/gui/buttonstyle.h index 587487c62626b..e7af8dfebf188 100644 --- a/src/gui/buttonstyle.h +++ b/src/gui/buttonstyle.h @@ -69,67 +69,67 @@ class PrimaryButtonStyle : public ButtonStyle { // Default QString buttonDefaultColor() const override { - return OCC::WhitelabelTheme::getInstance::buttonPrimaryColor(); + return OCC::WhitelabelTheme::instance().buttonPrimaryColor(); } QString buttonDefaultBorderColor() const override { - return OCC::WhitelabelTheme::getInstance::buttonPrimaryColor(); + return OCC::WhitelabelTheme::instance().buttonPrimaryColor(); } //Hover QString buttonHoverColor() const override { - return OCC::WhitelabelTheme::getInstance::buttonPrimaryHoverColor(); + return OCC::WhitelabelTheme::instance().buttonPrimaryHoverColor(); } QString buttonHoverBorderColor() const override { - return OCC::WhitelabelTheme::getInstance::buttonPrimaryHoverColor(); + return OCC::WhitelabelTheme::instance().buttonPrimaryHoverColor(); } // Pressed QString buttonPressedColor() const override { - return OCC::WhitelabelTheme::getInstance::buttonPrimaryPressedColor(); + return OCC::WhitelabelTheme::instance().buttonPrimaryPressedColor(); } QString buttonPressedBorderColor() const override { - return OCC::WhitelabelTheme::getInstance::buttonPrimaryPressedColor(); + return OCC::WhitelabelTheme::instance().buttonPrimaryPressedColor(); } // Disabled QString buttonDisabledColor() const override { - return OCC::WhitelabelTheme::getInstance::buttonDisabledColor(); + return OCC::WhitelabelTheme::instance().buttonDisabledColor(); } QString buttonDisabledBorderColor() const override { - return OCC::WhitelabelTheme::getInstance::buttonDisabledColor(); + return OCC::WhitelabelTheme::instance().buttonDisabledColor(); } // Focused QString buttonFocusedColor() const override { - return OCC::WhitelabelTheme::getInstance::buttonPrimaryColor(); + return OCC::WhitelabelTheme::instance().buttonPrimaryColor(); } QString buttonFocusedBorderColor() const override { - return OCC::WhitelabelTheme::getInstance::black(); + return OCC::WhitelabelTheme::instance().black(); } // Font QString buttonDisabledFontColor() const override { - return OCC::WhitelabelTheme::getInstance::buttonDisabledFontColor(); + return OCC::WhitelabelTheme::instance().buttonDisabledFontColor(); } QString buttonFontColor() const override { - return OCC::WhitelabelTheme::getInstance::white(); + return OCC::WhitelabelTheme::instance().white(); } }; @@ -152,67 +152,67 @@ class SecondaryButtonStyle : public ButtonStyle { // Default QString buttonDefaultColor() const override { - return OCC::WhitelabelTheme::getInstance::white(); + return OCC::WhitelabelTheme::instance().white(); } QString buttonDefaultBorderColor() const override { - return OCC::WhitelabelTheme::getInstance::buttonSecondaryBorderColor(); + return OCC::WhitelabelTheme::instance().buttonSecondaryBorderColor(); } // Hover QString buttonHoverColor() const override { - return OCC::WhitelabelTheme::getInstance::buttonSecondaryHoverColor(); + return OCC::WhitelabelTheme::instance().buttonSecondaryHoverColor(); } QString buttonHoverBorderColor() const override { - return OCC::WhitelabelTheme::getInstance::buttonSecondaryBorderColor(); + return OCC::WhitelabelTheme::instance().buttonSecondaryBorderColor(); } // Pressed QString buttonPressedColor() const override { - return OCC::WhitelabelTheme::getInstance::buttonSecondaryPressedColor(); + return OCC::WhitelabelTheme::instance().buttonSecondaryPressedColor(); } QString buttonPressedBorderColor() const override { - return OCC::WhitelabelTheme::getInstance::buttonSecondaryBorderColor(); + return OCC::WhitelabelTheme::instance().buttonSecondaryBorderColor(); } // Disabled QString buttonDisabledColor() const override { - return OCC::WhitelabelTheme::getInstance::buttonDisabledColor(); + return OCC::WhitelabelTheme::instance().buttonDisabledColor(); } QString buttonDisabledBorderColor() const override { - return OCC::WhitelabelTheme::getInstance::buttonDisabledColor(); + return OCC::WhitelabelTheme::instance().buttonDisabledColor(); } // Focused QString buttonFocusedColor() const override { - return OCC::WhitelabelTheme::getInstance::white(); + return OCC::WhitelabelTheme::instance().white(); } QString buttonFocusedBorderColor() const override { - return OCC::WhitelabelTheme::getInstance::black(); + return OCC::WhitelabelTheme::instance().black(); } // Font QString buttonDisabledFontColor() const override { - return OCC::WhitelabelTheme::getInstance::buttonDisabledFontColor(); + return OCC::WhitelabelTheme::instance().buttonDisabledFontColor(); } QString buttonFontColor() const override { - return OCC::WhitelabelTheme::getInstance::black(); + return OCC::WhitelabelTheme::instance().black(); } }; @@ -235,67 +235,67 @@ class MoreOptionsButtonStyle : public ButtonStyle { // Default QString buttonDefaultColor() const override { - return OCC::WhitelabelTheme::getInstance::white(); + return OCC::WhitelabelTheme::instance().white(); } QString buttonDefaultBorderColor() const override { - return OCC::WhitelabelTheme::getInstance::white(); + return OCC::WhitelabelTheme::instance().white(); } // Hover QString buttonHoverColor() const override { - return OCC::WhitelabelTheme::getInstance::buttonHoveredColor(); + return OCC::WhitelabelTheme::instance().buttonHoveredColor(); } QString buttonHoverBorderColor() const override { - return OCC::WhitelabelTheme::getInstance::buttonHoveredColor(); + return OCC::WhitelabelTheme::instance().buttonHoveredColor(); } // Pressed QString buttonPressedColor() const override { - return OCC::WhitelabelTheme::getInstance::buttonPressedColor(); + return OCC::WhitelabelTheme::instance().buttonPressedColor(); } QString buttonPressedBorderColor() const override { - return OCC::WhitelabelTheme::getInstance::buttonPressedColor(); + return OCC::WhitelabelTheme::instance().buttonPressedColor(); } // Disabled QString buttonDisabledColor() const override { - return OCC::WhitelabelTheme::getInstance::buttonDisabledColor(); + return OCC::WhitelabelTheme::instance().buttonDisabledColor(); } QString buttonDisabledBorderColor() const override { - return OCC::WhitelabelTheme::getInstance::buttonDisabledColor(); + return OCC::WhitelabelTheme::instance().buttonDisabledColor(); } // Focused QString buttonFocusedColor() const override { - return OCC::WhitelabelTheme::getInstance::white(); + return OCC::WhitelabelTheme::instance().white(); } QString buttonFocusedBorderColor() const override { - return OCC::WhitelabelTheme::getInstance::black(); + return OCC::WhitelabelTheme::instance().black(); } // Font QString buttonDisabledFontColor() const override { - return OCC::WhitelabelTheme::getInstance::buttonDisabledFontColor(); + return OCC::WhitelabelTheme::instance().buttonDisabledFontColor(); } QString buttonFontColor() const override { - return OCC::WhitelabelTheme::getInstance::black(); + return OCC::WhitelabelTheme::instance().black(); } }; } diff --git a/src/gui/caseclashfilenamedialog.cpp b/src/gui/caseclashfilenamedialog.cpp index 9d9aaa18a598f..92b799716f6bf 100644 --- a/src/gui/caseclashfilenamedialog.cpp +++ b/src/gui/caseclashfilenamedialog.cpp @@ -303,13 +303,13 @@ void CaseClashFilenameDialog::customizeStyle() { this->setStyleSheet( QStringLiteral("QDialog {background-color: %1; color: %2;} QLabel{ %3;}").arg( - WhitelabelTheme::getInstance::dialogBackgroundColor(), - WhitelabelTheme::getInstance::black(), - WhitelabelTheme::getInstance::fontConfigurationCss( - WhitelabelTheme::getInstance::settingsFont(), - WhitelabelTheme::getInstance::settingsTextSize(), - WhitelabelTheme::getInstance::settingsTextWeight(), - WhitelabelTheme::getInstance::titleColor() + WhitelabelTheme::instance().dialogBackgroundColor(), + WhitelabelTheme::instance().black(), + WhitelabelTheme::instance().fontConfigurationCss( + WhitelabelTheme::instance().settingsFont(), + WhitelabelTheme::instance().settingsTextSize(), + WhitelabelTheme::instance().settingsTextWeight(), + WhitelabelTheme::instance().titleColor() ) ) ); @@ -318,13 +318,13 @@ void CaseClashFilenameDialog::customizeStyle() QStringLiteral( "color: %1; font-family: %2; font-size: %3; font-weight: %4; border-radius: %5; border: 1px " "solid %6; padding: 0px 12px; text-align: left; vertical-align: middle; height: 40px; background: %7; ").arg( - WhitelabelTheme::getInstance::folderWizardPathColor(), - WhitelabelTheme::getInstance::settingsFont(), - WhitelabelTheme::getInstance::settingsTextSize(), - WhitelabelTheme::getInstance::settingsTextWeight(), - WhitelabelTheme::getInstance::buttonRadius(), - WhitelabelTheme::getInstance::menuBorderColor(), - WhitelabelTheme::getInstance::white() + WhitelabelTheme::instance().folderWizardPathColor(), + WhitelabelTheme::instance().settingsFont(), + WhitelabelTheme::instance().settingsTextSize(), + WhitelabelTheme::instance().settingsTextWeight(), + WhitelabelTheme::instance().buttonRadius(), + WhitelabelTheme::instance().menuBorderColor(), + WhitelabelTheme::instance().white() ) ); diff --git a/src/gui/conflictdialog.cpp b/src/gui/conflictdialog.cpp index de8003155ae0d..8dbaff9a57012 100644 --- a/src/gui/conflictdialog.cpp +++ b/src/gui/conflictdialog.cpp @@ -191,13 +191,13 @@ void ConflictDialog::customizeStyle() { this->setStyleSheet( QStringLiteral("QDialog {background-color: %1; color: %2;} QLabel{ %3;}").arg( - WhitelabelTheme::getInstance::dialogBackgroundColor(), - WhitelabelTheme::getInstance::black(), - WhitelabelTheme::getInstance::fontConfigurationCss( - WhitelabelTheme::getInstance::settingsFont(), - WhitelabelTheme::getInstance::settingsTextSize(), - WhitelabelTheme::getInstance::settingsTextWeight(), - WhitelabelTheme::getInstance::titleColor() + WhitelabelTheme::instance().dialogBackgroundColor(), + WhitelabelTheme::instance().black(), + WhitelabelTheme::instance().fontConfigurationCss( + WhitelabelTheme::instance().settingsFont(), + WhitelabelTheme::instance().settingsTextSize(), + WhitelabelTheme::instance().settingsTextWeight(), + WhitelabelTheme::instance().titleColor() ) ) ); @@ -207,11 +207,11 @@ void ConflictDialog::customizeStyle() _ui->buttonBox->setLayoutDirection(Qt::LeftToRight); _ui->localVersionRadio->setStyleSheet( - QStringLiteral("QCheckBox {color: %1;}").arg(WhitelabelTheme::getInstance::black()) + QStringLiteral("QCheckBox {color: %1;}").arg(WhitelabelTheme::instance().black()) ); _ui->remoteVersionRadio->setStyleSheet( - QStringLiteral("QCheckBox {color: %1;}").arg(WhitelabelTheme::getInstance::black()) + QStringLiteral("QCheckBox {color: %1;}").arg(WhitelabelTheme::instance().black()) ); #endif } diff --git a/src/gui/creds/webflowcredentialsdialog.cpp b/src/gui/creds/webflowcredentialsdialog.cpp index 2d021d8e5b970..6a1430fbd1013 100644 --- a/src/gui/creds/webflowcredentialsdialog.cpp +++ b/src/gui/creds/webflowcredentialsdialog.cpp @@ -24,7 +24,7 @@ WebFlowCredentialsDialog::WebFlowCredentialsDialog(Account *account, bool useFlo { setWindowFlags(windowFlags() & ~Qt::WindowContextHelpButtonHint); - setStyleSheet(QStringLiteral("QDialog { background-color: %1; }").arg(WhitelabelTheme::getInstance::dialogBackgroundColor())); + setStyleSheet(QStringLiteral("QDialog { background-color: %1; }").arg(WhitelabelTheme::instance().dialogBackgroundColor())); setFixedWidth(646); setSizePolicy(QSizePolicy(QSizePolicy::Minimum, QSizePolicy::Minimum)); @@ -44,11 +44,11 @@ WebFlowCredentialsDialog::WebFlowCredentialsDialog(Account *account, bool useFlo _infoLabel->setAlignment(Qt::AlignCenter); _infoLabel->setWordWrap(true); _infoLabel->setContentsMargins(0, 32, 0, 0); - _infoLabel->setStyleSheet(WhitelabelTheme::getInstance::fontConfigurationCss( - WhitelabelTheme::getInstance::settingsFont(), - WhitelabelTheme::getInstance::settingsTextSize(), - WhitelabelTheme::getInstance::settingsTitleWeight600(), - WhitelabelTheme::getInstance::titleColor() + _infoLabel->setStyleSheet(WhitelabelTheme::instance().fontConfigurationCss( + WhitelabelTheme::instance().settingsFont(), + WhitelabelTheme::instance().settingsTextSize(), + WhitelabelTheme::instance().settingsTitleWeight600(), + WhitelabelTheme::instance().titleColor() )); _containerLayout->addWidget(_infoLabel); diff --git a/src/gui/foldercreationdialog.cpp b/src/gui/foldercreationdialog.cpp index 161c07f9e0dbf..bcd03237dba72 100644 --- a/src/gui/foldercreationdialog.cpp +++ b/src/gui/foldercreationdialog.cpp @@ -112,7 +112,7 @@ void FolderCreationDialog::customizeStyle() ui->buttonBox->setLayoutDirection(Qt::RightToLeft); this->setAutoFillBackground(true); - setPalette(QPalette(QPalette::Window, WhitelabelTheme::getInstance::dialogBackgroundColor())); + setPalette(QPalette(QPalette::Window, WhitelabelTheme::instance().dialogBackgroundColor())); QPushButton *okButton = ui->buttonBox->button(QDialogButtonBox::Ok); okButton->setProperty("buttonStyle", QVariant::fromValue(OCC::ButtonStyleName::Primary)); @@ -124,13 +124,13 @@ void FolderCreationDialog::customizeStyle() QStringLiteral( "color: %1; font-family: %2; font-size: %3; font-weight: %4; border-radius: %5; border: 1px " "solid %6; padding: 0px 12px; text-align: left; vertical-align: middle; height: 40px; background: %7; ") - .arg(WhitelabelTheme::getInstance::folderWizardPathColor(), - WhitelabelTheme::getInstance::settingsFont(), - WhitelabelTheme::getInstance::settingsTextSize(), - WhitelabelTheme::getInstance::settingsTextWeight(), - WhitelabelTheme::getInstance::buttonRadius(), - WhitelabelTheme::getInstance::menuBorderColor(), - WhitelabelTheme::getInstance::white() + .arg(WhitelabelTheme::instance().folderWizardPathColor(), + WhitelabelTheme::instance().settingsFont(), + WhitelabelTheme::instance().settingsTextSize(), + WhitelabelTheme::instance().settingsTextWeight(), + WhitelabelTheme::instance().buttonRadius(), + WhitelabelTheme::instance().menuBorderColor(), + WhitelabelTheme::instance().white() ) ); diff --git a/src/gui/folderstatusdelegate.cpp b/src/gui/folderstatusdelegate.cpp index a08ac95932ea6..d867fd3e47476 100644 --- a/src/gui/folderstatusdelegate.cpp +++ b/src/gui/folderstatusdelegate.cpp @@ -23,7 +23,7 @@ #include "buttonstyle.h" #include -#include +#include #include #include @@ -44,8 +44,8 @@ namespace OCC { inline static QFont makeAliasFont(const QFont &normalFont) { QFont aliasFont = normalFont; - aliasFont.setWeight(WhitelabelTheme::getInstance::settingsTitleWeightDemiBold()); - aliasFont.setPixelSize(WhitelabelTheme::getInstance::settingsBigTitlePixel()); + aliasFont.setWeight(WhitelabelTheme::instance().settingsTitleWeightDemiBold()); + aliasFont.setPixelSize(WhitelabelTheme::instance().settingsBigTitlePixel()); return aliasFont; } @@ -70,7 +70,7 @@ QSize FolderStatusDelegate::sizeHint(const QStyleOptionViewItem &option, const QModelIndex &index) const { QFont font = QFont(option.font); - font.setPixelSize(WhitelabelTheme::getInstance::settingsTextPixel()); + font.setPixelSize(WhitelabelTheme::instance().settingsTextPixel()); QFont aliasFont = makeAliasFont(font); QFontMetrics fm(font); @@ -125,8 +125,8 @@ int FolderStatusDelegate::rootFolderHeightWithoutErrors(const QFontMetrics &fm, void FolderStatusDelegate::drawAddButton(QPainter *painter, const QStyleOptionViewItem &option, const QModelIndex &index) const { QFont titleFont = option.font; - titleFont.setWeight(WhitelabelTheme::getInstance::settingsTitleWeightDemiBold()); - titleFont.setPixelSize(WhitelabelTheme::getInstance::settingsTitlePixel()); + titleFont.setWeight(WhitelabelTheme::instance().settingsTitleWeightDemiBold()); + titleFont.setPixelSize(WhitelabelTheme::instance().settingsTitlePixel()); QFontMetrics titleTextFm(titleFont); const auto baseDistanceForCalculus = titleTextFm.height() / 2; @@ -137,7 +137,7 @@ void FolderStatusDelegate::drawAddButton(QPainter *painter, const QStyleOptionVi auto iconBox = option.rect; iconBox.setTop(iconBox.top() + baseDistanceForCalculus); - iconBox.setBottom(iconBox.top() + WhitelabelTheme::getInstance::treeViewIconSize()); + iconBox.setBottom(iconBox.top() + WhitelabelTheme::instance().treeViewIconSize()); iconBox.setLeft(iconBox.left() + baseDistanceForCalculus); iconBox.setWidth(iconBox.height()); @@ -155,7 +155,7 @@ void FolderStatusDelegate::drawAddButton(QPainter *painter, const QStyleOptionVi auto titleText = addFolderText(); auto subtitleText = addInfoText(); - auto addIcon = QIcon(WhitelabelTheme::getInstance::liveBackupPlusIcon()); + auto addIcon = QIcon(WhitelabelTheme::instance().liveBackupPlusIcon()); const auto addPixmap = addIcon.pixmap(iconBox.size(), QIcon::Normal); painter->save(); @@ -178,7 +178,7 @@ void FolderStatusDelegate::paint(QPainter *painter, const QStyleOptionViewItem & { QStyleOptionViewItem opt = option; QFont font = opt.font; - font.setPixelSize(WhitelabelTheme::getInstance::settingsTextPixel()); + font.setPixelSize(WhitelabelTheme::instance().settingsTextPixel()); opt.font = font; QStyledItemDelegate::paint(painter, opt, index); @@ -241,7 +241,7 @@ void FolderStatusDelegate::paint(QPainter *painter, const QStyleOptionViewItem & localPathRect.setTop(remotePathRect.bottom() + margin); localPathRect.setBottom(localPathRect.top() + subFm.height()); - iconRect.setBottom(iconRect.top() + WhitelabelTheme::getInstance::treeViewIconSize()); + iconRect.setBottom(iconRect.top() + WhitelabelTheme::instance().treeViewIconSize()); iconRect.setWidth(iconRect.height()); const auto nextToIcon = iconRect.right() + aliasMargin; @@ -325,13 +325,13 @@ void FolderStatusDelegate::paint(QPainter *painter, const QStyleOptionViewItem & }; if (!conflictTexts.isEmpty()) { - drawTextBox(conflictTexts, QColor(WhitelabelTheme::getInstance::warningColor()), QColor(WhitelabelTheme::getInstance::warningBorderColor())); + drawTextBox(conflictTexts, QColor(WhitelabelTheme::instance().warningColor()), QColor(WhitelabelTheme::instance().warningBorderColor())); } if (!errorTexts.isEmpty()) { - drawTextBox(errorTexts, QColor(WhitelabelTheme::getInstance::errorColor()), QColor(WhitelabelTheme::getInstance::errorBorderColor())); + drawTextBox(errorTexts, QColor(WhitelabelTheme::instance().errorColor()), QColor(WhitelabelTheme::instance().errorBorderColor())); } if (!infoTexts.isEmpty()) { - drawTextBox(infoTexts, QColor(WhitelabelTheme::getInstance::infoColor()), QColor(WhitelabelTheme::getInstance::infoBorderColor())); + drawTextBox(infoTexts, QColor(WhitelabelTheme::instance().infoColor()), QColor(WhitelabelTheme::instance().infoBorderColor())); } // Sync File Progress Bar: Show it if syncFile is not empty. @@ -353,8 +353,8 @@ void FolderStatusDelegate::drawSyncProgressBar(QPainter *painter, const QStyleOp const auto overallWidth = option.rect.right() - aliasMargin - optionsButtonVisualRect.width() - nextToIcon; QFont progressFont(option.font); - progressFont.setPixelSize(WhitelabelTheme::getInstance::settingsTextPixel()); - progressFont.setWeight(WhitelabelTheme::getInstance::settingsTitleWeightNormal()); + progressFont.setPixelSize(WhitelabelTheme::instance().settingsTextPixel()); + progressFont.setWeight(WhitelabelTheme::instance().settingsTitleWeightNormal()); painter->save(); // Overall Progress Bar. @@ -372,7 +372,7 @@ void FolderStatusDelegate::drawSyncProgressBar(QPainter *painter, const QStyleOp progressBarOpt.state = QStyle::StateFlag::State_Horizontal; progressBarOpt.rect = QStyle::visualRect(option.direction, option.rect, progressBarRect); QPalette paletteTmp = progressBarOpt.palette; - paletteTmp.setColor(QPalette::Base, WhitelabelTheme::getInstance::white()); + paletteTmp.setColor(QPalette::Base, WhitelabelTheme::instance().white()); progressBarOpt.palette = paletteTmp; #ifdef Q_OS_MACOS @@ -485,7 +485,7 @@ bool FolderStatusDelegate::editorEvent(QEvent *event, QAbstractItemModel *model, QRect FolderStatusDelegate::optionsButtonRect(QRect within, Qt::LayoutDirection direction) { - QFont font = QFont(WhitelabelTheme::getInstance::settingsFont()); + QFont font = QFont(WhitelabelTheme::instance().settingsFont()); QFont aliasFont = makeAliasFont(font); QFontMetrics fm(font); QFontMetrics aliasFm(aliasFont); @@ -507,7 +507,7 @@ QRect FolderStatusDelegate::optionsButtonRect(QRect within, Qt::LayoutDirection QRect FolderStatusDelegate::errorsListRect(QRect within) { - QFont font = QFont(WhitelabelTheme::getInstance::settingsFont()); + QFont font = QFont(WhitelabelTheme::instance().settingsFont()); QFont aliasFont = makeAliasFont(font); QFontMetrics fm(font); QFontMetrics aliasFm(aliasFont); diff --git a/src/gui/folderstatusview.cpp b/src/gui/folderstatusview.cpp index fe217bf3bf684..01c809282b808 100644 --- a/src/gui/folderstatusview.cpp +++ b/src/gui/folderstatusview.cpp @@ -21,7 +21,7 @@ namespace OCC { FolderStatusView::FolderStatusView(QWidget *parent) : QTreeView(parent) { #ifdef Q_OS_MAC - setPalette(QPalette(QPalette::ButtonText, WhitelabelTheme::getInstance::white())); + setPalette(QPalette(QPalette::ButtonText, WhitelabelTheme::instance().white())); #endif } diff --git a/src/gui/folderwizard.cpp b/src/gui/folderwizard.cpp index 35881d204e7de..10185793a91b4 100644 --- a/src/gui/folderwizard.cpp +++ b/src/gui/folderwizard.cpp @@ -194,27 +194,27 @@ void FolderWizardLocalPath::changeEvent(QEvent *e) void FolderWizardLocalPath::changeStyle() { - _ui.title->setStyleSheet(WhitelabelTheme::getInstance::fontConfigurationCss( - WhitelabelTheme::getInstance::settingsFont(), - WhitelabelTheme::getInstance::settingsBigTitleSize(), - WhitelabelTheme::getInstance::settingsTitleWeight600(), - WhitelabelTheme::getInstance::titleColor())); + _ui.title->setStyleSheet(WhitelabelTheme::instance().fontConfigurationCss( + WhitelabelTheme::instance().settingsFont(), + WhitelabelTheme::instance().settingsBigTitleSize(), + WhitelabelTheme::instance().settingsTitleWeight600(), + WhitelabelTheme::instance().titleColor())); _ui.title->setProperty("text", tr("Add Folder Sync")); - _ui.subTitle->setStyleSheet(WhitelabelTheme::getInstance::fontConfigurationCss( - WhitelabelTheme::getInstance::settingsFont(), - WhitelabelTheme::getInstance::settingsTextSize(), - WhitelabelTheme::getInstance::settingsTitleWeight600(), - WhitelabelTheme::getInstance::folderWizardSubtitleColor())); + _ui.subTitle->setStyleSheet(WhitelabelTheme::instance().fontConfigurationCss( + WhitelabelTheme::instance().settingsFont(), + WhitelabelTheme::instance().settingsTextSize(), + WhitelabelTheme::instance().settingsTitleWeight600(), + WhitelabelTheme::instance().folderWizardSubtitleColor())); _ui.subTitle->setProperty("text", tr("Step 1 of 3: Select local folder")); - _ui.description->setStyleSheet(WhitelabelTheme::getInstance::fontConfigurationCss( - WhitelabelTheme::getInstance::settingsFont(), - WhitelabelTheme::getInstance::settingsTextSize(), - WhitelabelTheme::getInstance::settingsTextWeight(), - WhitelabelTheme::getInstance::titleColor())); + _ui.description->setStyleSheet(WhitelabelTheme::instance().fontConfigurationCss( + WhitelabelTheme::instance().settingsFont(), + WhitelabelTheme::instance().settingsTextSize(), + WhitelabelTheme::instance().settingsTextWeight(), + WhitelabelTheme::instance().titleColor())); _ui.description->setProperty("text", tr("Select a folder on your hard drive that should be permanetly connected to your %1. All files and " @@ -223,13 +223,13 @@ void FolderWizardLocalPath::changeStyle() _ui.localFolderLineEdit->setStyleSheet(QString( "color: %1; font-family: %2; font-size: %3; font-weight: %4; border-radius: %5; border: 1px " "solid %6; padding: 0px 12px; text-align: left; vertical-align: middle; height: 40px; background: %7; ") - .arg(WhitelabelTheme::getInstance::folderWizardPathColor()) - .arg(WhitelabelTheme::getInstance::settingsFont()) - .arg(WhitelabelTheme::getInstance::settingsTextSize()) - .arg(WhitelabelTheme::getInstance::settingsTextWeight()) - .arg(WhitelabelTheme::getInstance::buttonRadius()) - .arg(WhitelabelTheme::getInstance::menuBorderColor()) - .arg(WhitelabelTheme::getInstance::white()) + .arg(WhitelabelTheme::instance().folderWizardPathColor()) + .arg(WhitelabelTheme::instance().settingsFont()) + .arg(WhitelabelTheme::instance().settingsTextSize()) + .arg(WhitelabelTheme::instance().settingsTextWeight()) + .arg(WhitelabelTheme::instance().buttonRadius()) + .arg(WhitelabelTheme::instance().menuBorderColor()) + .arg(WhitelabelTheme::instance().white()) ); _ui.localFolderChooseBtn->setProperty("text", tr("Choose")); @@ -238,11 +238,11 @@ void FolderWizardLocalPath::changeStyle() #if defined(Q_OS_MAC) _ui.localFolderChooseBtn->setStyleSheet( QStringLiteral("QPushButton { margin-left: 5px; margin-top: 12px; height: 40px; width: 80px; %1} ").arg( - WhitelabelTheme::getInstance::fontConfigurationCss( - WhitelabelTheme::getInstance::settingsFont(), - WhitelabelTheme::getInstance::settingsTextSize(), - WhitelabelTheme::getInstance::settingsTitleWeight500(), - WhitelabelTheme::getInstance::white() + WhitelabelTheme::instance().fontConfigurationCss( + WhitelabelTheme::instance().settingsFont(), + WhitelabelTheme::instance().settingsTextSize(), + WhitelabelTheme::instance().settingsTitleWeight500(), + WhitelabelTheme::instance().white() ) ) ); @@ -279,7 +279,7 @@ FolderWizardRemotePath::FolderWizardRemotePath(const AccountPtr &account) _ui.folderTreeWidget->header()->setSectionResizeMode(0, QHeaderView::ResizeToContents); #ifdef Q_OS_MAC - _ui.folderTreeWidget->setPalette(QPalette(WhitelabelTheme::getInstance::white())); + _ui.folderTreeWidget->setPalette(QPalette(WhitelabelTheme::instance().white())); #endif // Make sure that there will be a scrollbar when the contents is too wide @@ -313,13 +313,13 @@ void FolderWizardRemotePath::slotAddRemoteFolder() dlg->setStyleSheet( QStringLiteral("QDialog { %1; background-color: %2; }").arg( - WhitelabelTheme::getInstance::fontConfigurationCss( - WhitelabelTheme::getInstance::settingsFont(), - WhitelabelTheme::getInstance::settingsTextSize(), - WhitelabelTheme::getInstance::settingsTextWeight(), - WhitelabelTheme::getInstance::titleColor() + WhitelabelTheme::instance().fontConfigurationCss( + WhitelabelTheme::instance().settingsFont(), + WhitelabelTheme::instance().settingsTextSize(), + WhitelabelTheme::instance().settingsTextWeight(), + WhitelabelTheme::instance().titleColor() ), - WhitelabelTheme::getInstance::dialogBackgroundColor() + WhitelabelTheme::instance().dialogBackgroundColor() ) ); @@ -327,22 +327,22 @@ void FolderWizardRemotePath::slotAddRemoteFolder() QStringLiteral( "color: %1; font-family: %2; font-size: %3; font-weight: %4; border-radius: %5; border: 1px " "solid %6; padding: 0px 12px; text-align: left; vertical-align: middle; height: 40px; background: %7; ").arg( - WhitelabelTheme::getInstance::folderWizardPathColor(), - WhitelabelTheme::getInstance::settingsFont(), - WhitelabelTheme::getInstance::settingsTextSize(), - WhitelabelTheme::getInstance::settingsTextWeight(), - WhitelabelTheme::getInstance::buttonRadius(), - WhitelabelTheme::getInstance::menuBorderColor(), - WhitelabelTheme::getInstance::white() + WhitelabelTheme::instance().folderWizardPathColor(), + WhitelabelTheme::instance().settingsFont(), + WhitelabelTheme::instance().settingsTextSize(), + WhitelabelTheme::instance().settingsTextWeight(), + WhitelabelTheme::instance().buttonRadius(), + WhitelabelTheme::instance().menuBorderColor(), + WhitelabelTheme::instance().white() ) ); dlg->findChild()->setStyleSheet( - WhitelabelTheme::getInstance::fontConfigurationCss( - WhitelabelTheme::getInstance::settingsFont(), - WhitelabelTheme::getInstance::settingsTextSize(), - WhitelabelTheme::getInstance::settingsTextWeight(), - WhitelabelTheme::getInstance::titleColor()) + WhitelabelTheme::instance().fontConfigurationCss( + WhitelabelTheme::instance().settingsFont(), + WhitelabelTheme::instance().settingsTextSize(), + WhitelabelTheme::instance().settingsTextWeight(), + WhitelabelTheme::instance().titleColor()) ); #ifdef Q_OS_MAC @@ -350,7 +350,7 @@ void FolderWizardRemotePath::slotAddRemoteFolder() buttonBox->button(QDialogButtonBox::Ok)->setStyleSheet( buttonBox->button(QDialogButtonBox::Ok)->styleSheet() + - QStringLiteral(" color: %1; ").arg(WhitelabelTheme::getInstance::white()) + QStringLiteral(" color: %1; ").arg(WhitelabelTheme::instance().white()) ); #endif } @@ -709,27 +709,27 @@ void FolderWizardRemotePath::changeEvent(QEvent *e) void FolderWizardRemotePath::changeStyle() { - _ui.title->setStyleSheet(WhitelabelTheme::getInstance::fontConfigurationCss( - WhitelabelTheme::getInstance::settingsFont(), - WhitelabelTheme::getInstance::settingsBigTitleSize(), - WhitelabelTheme::getInstance::settingsTitleWeight600(), - WhitelabelTheme::getInstance::titleColor())); + _ui.title->setStyleSheet(WhitelabelTheme::instance().fontConfigurationCss( + WhitelabelTheme::instance().settingsFont(), + WhitelabelTheme::instance().settingsBigTitleSize(), + WhitelabelTheme::instance().settingsTitleWeight600(), + WhitelabelTheme::instance().titleColor())); _ui.title->setProperty("text", tr("Add Folder Sync")); - _ui.subTitle->setStyleSheet(WhitelabelTheme::getInstance::fontConfigurationCss( - WhitelabelTheme::getInstance::settingsFont(), - WhitelabelTheme::getInstance::settingsTextSize(), - WhitelabelTheme::getInstance::settingsTitleWeight600(), - WhitelabelTheme::getInstance::folderWizardSubtitleColor())); + _ui.subTitle->setStyleSheet(WhitelabelTheme::instance().fontConfigurationCss( + WhitelabelTheme::instance().settingsFont(), + WhitelabelTheme::instance().settingsTextSize(), + WhitelabelTheme::instance().settingsTitleWeight600(), + WhitelabelTheme::instance().folderWizardSubtitleColor())); _ui.subTitle->setProperty("text", tr("Step 2 of 3: Directory in your %1").arg(Theme::instance()->appNameGUI())); - _ui.description1->setStyleSheet(WhitelabelTheme::getInstance::fontConfigurationCss( - WhitelabelTheme::getInstance::settingsFont(), - WhitelabelTheme::getInstance::settingsTextSize(), - WhitelabelTheme::getInstance::settingsTextWeight(), - WhitelabelTheme::getInstance::titleColor())); + _ui.description1->setStyleSheet(WhitelabelTheme::instance().fontConfigurationCss( + WhitelabelTheme::instance().settingsFont(), + WhitelabelTheme::instance().settingsTextSize(), + WhitelabelTheme::instance().settingsTextWeight(), + WhitelabelTheme::instance().titleColor())); _ui.description1->setProperty("text", tr("Please now select or create a target folder in your %1 where the content should be uploaded and synchronized.").arg(Theme::instance()->appNameGUI())); @@ -737,36 +737,36 @@ void FolderWizardRemotePath::changeStyle() _ui.description2->setProperty("text", tr("Both folders are permanently linked and the respective contents are automatically synchronized and updated.")); - _ui.description2->setStyleSheet(WhitelabelTheme::getInstance::fontConfigurationCss( - WhitelabelTheme::getInstance::settingsFont(), - WhitelabelTheme::getInstance::settingsTextSize(), - WhitelabelTheme::getInstance::settingsTextWeight(), - WhitelabelTheme::getInstance::titleColor())); + _ui.description2->setStyleSheet(WhitelabelTheme::instance().fontConfigurationCss( + WhitelabelTheme::instance().settingsFont(), + WhitelabelTheme::instance().settingsTextSize(), + WhitelabelTheme::instance().settingsTextWeight(), + WhitelabelTheme::instance().titleColor())); _ui.folderEntry->setStyleSheet( QStringLiteral("color: %1; font-family: %2; font-size: %3; font-weight: %4; border-radius: %5; border: 1px " "solid %6; padding: 0px 12px; text-align: left; vertical-align: middle; height: 40px;") - .arg(WhitelabelTheme::getInstance::folderWizardPathColor()) - .arg(WhitelabelTheme::getInstance::settingsFont()) - .arg(WhitelabelTheme::getInstance::settingsTextSize()) - .arg(WhitelabelTheme::getInstance::settingsTextWeight()) - .arg(WhitelabelTheme::getInstance::buttonRadius()) - .arg(WhitelabelTheme::getInstance::menuBorderColor())); + .arg(WhitelabelTheme::instance().folderWizardPathColor()) + .arg(WhitelabelTheme::instance().settingsFont()) + .arg(WhitelabelTheme::instance().settingsTextSize()) + .arg(WhitelabelTheme::instance().settingsTextWeight()) + .arg(WhitelabelTheme::instance().buttonRadius()) + .arg(WhitelabelTheme::instance().menuBorderColor())); _ui.folderTreeWidget->setStyleSheet( QStringLiteral(" %1; background: %2; ").arg( - WhitelabelTheme::getInstance::fontConfigurationCss( - WhitelabelTheme::getInstance::settingsFont(), - WhitelabelTheme::getInstance::settingsTextSize(), - WhitelabelTheme::getInstance::settingsTextWeight(), - WhitelabelTheme::getInstance::titleColor() + WhitelabelTheme::instance().fontConfigurationCss( + WhitelabelTheme::instance().settingsFont(), + WhitelabelTheme::instance().settingsTextSize(), + WhitelabelTheme::instance().settingsTextWeight(), + WhitelabelTheme::instance().titleColor() ), - WhitelabelTheme::getInstance::white() + WhitelabelTheme::instance().white() ) ); _ui.folderTreeWidget->setStyleSheet( - _ui.folderTreeWidget->styleSheet() + QStringLiteral("QTreeWidget { background: %1; }").arg(WhitelabelTheme::getInstance::white()) + _ui.folderTreeWidget->styleSheet() + QStringLiteral("QTreeWidget { background: %1; }").arg(WhitelabelTheme::instance().white()) ); _ui.refreshButton->setProperty("text", tr("Refresh")); @@ -803,34 +803,34 @@ FolderWizardSelectiveSync::FolderWizardSelectiveSync(const AccountPtr &account) QFont f; QFont::Weight w; - f.setFamily(WhitelabelTheme::getInstance::settingsFont()); + f.setFamily(WhitelabelTheme::instance().settingsFont()); f.setWeight( QFont::Weight::Normal); - f.setPixelSize(WhitelabelTheme::getInstance::settingsTextPixel()); + f.setPixelSize(WhitelabelTheme::instance().settingsTextPixel()); _virtualFilesCheckBox->setFont(f); #endif layout->addLayout(_virtualFilesHBox); } - _selectiveSync->setStyleSheet(QStringLiteral(" %1; background: %2; ").arg(WhitelabelTheme::getInstance::fontConfigurationCss( - WhitelabelTheme::getInstance::settingsFont(), - WhitelabelTheme::getInstance::settingsTextSize(), - WhitelabelTheme::getInstance::settingsTextWeight(), - WhitelabelTheme::getInstance::titleColor()), - WhitelabelTheme::getInstance::white())); - - _uiSelectiveSync.title->setStyleSheet(WhitelabelTheme::getInstance::fontConfigurationCss( - WhitelabelTheme::getInstance::settingsFont(), - WhitelabelTheme::getInstance::settingsBigTitleSize(), - WhitelabelTheme::getInstance::settingsTitleWeight600(), - WhitelabelTheme::getInstance::titleColor())); + _selectiveSync->setStyleSheet(QStringLiteral(" %1; background: %2; ").arg(WhitelabelTheme::instance().fontConfigurationCss( + WhitelabelTheme::instance().settingsFont(), + WhitelabelTheme::instance().settingsTextSize(), + WhitelabelTheme::instance().settingsTextWeight(), + WhitelabelTheme::instance().titleColor()), + WhitelabelTheme::instance().white())); + + _uiSelectiveSync.title->setStyleSheet(WhitelabelTheme::instance().fontConfigurationCss( + WhitelabelTheme::instance().settingsFont(), + WhitelabelTheme::instance().settingsBigTitleSize(), + WhitelabelTheme::instance().settingsTitleWeight600(), + WhitelabelTheme::instance().titleColor())); _uiSelectiveSync.title->setProperty("text", tr("Add Folder Sync")); - _uiSelectiveSync.subTitle->setStyleSheet(WhitelabelTheme::getInstance::fontConfigurationCss( - WhitelabelTheme::getInstance::settingsFont(), - WhitelabelTheme::getInstance::settingsTextSize(), - WhitelabelTheme::getInstance::settingsTitleWeight600(), - WhitelabelTheme::getInstance::folderWizardSubtitleColor())); + _uiSelectiveSync.subTitle->setStyleSheet(WhitelabelTheme::instance().fontConfigurationCss( + WhitelabelTheme::instance().settingsFont(), + WhitelabelTheme::instance().settingsTextSize(), + WhitelabelTheme::instance().settingsTitleWeight600(), + WhitelabelTheme::instance().folderWizardSubtitleColor())); _uiSelectiveSync.subTitle->setProperty("text", tr("Step 3 of 3: Selektive Synchronisation")); } @@ -869,11 +869,11 @@ void FolderWizardSelectiveSync::setupVirtualFilesCheckbox(){ _virtualFilesCheckBoxLabel->setStyleSheet( QStringLiteral("QLabel { %1; }").arg( - WhitelabelTheme::getInstance::fontConfigurationCss( - WhitelabelTheme::getInstance::settingsFont(), - WhitelabelTheme::getInstance::settingsTextSize(), - WhitelabelTheme::getInstance::settingsTextWeight(), - WhitelabelTheme::getInstance::titleColor() + WhitelabelTheme::instance().fontConfigurationCss( + WhitelabelTheme::instance().settingsFont(), + WhitelabelTheme::instance().settingsTextSize(), + WhitelabelTheme::instance().settingsTextWeight(), + WhitelabelTheme::instance().titleColor() ) ) ); @@ -1028,7 +1028,7 @@ void FolderWizard::customizeStyle() // Set background colors auto wizardPalette = palette(); - const auto backgroundColor = QColor(WhitelabelTheme::getInstance::dialogBackgroundColor()); + const auto backgroundColor = QColor(WhitelabelTheme::instance().dialogBackgroundColor()); // Set Color of upper part wizardPalette.setColor(QPalette::Base, backgroundColor); @@ -1044,7 +1044,7 @@ void FolderWizard::customizeStyle() void FolderWizard::adjustWizardSize() { - setFixedSize(QSize(WhitelabelTheme::getInstance::wizardFixedWidth(), WhitelabelTheme::getInstance::wizardFixedHeight())); + setFixedSize(QSize(WhitelabelTheme::instance().wizardFixedWidth(), WhitelabelTheme::instance().wizardFixedHeight())); } } // end namespace diff --git a/src/gui/ga4/ganalytics.h b/src/gui/ga4/ganalytics.h index c9fbf2c2dc695..1a15d130e82d1 100644 --- a/src/gui/ga4/ganalytics.h +++ b/src/gui/ga4/ganalytics.h @@ -67,7 +67,7 @@ class GAnalytics : public QObject void sendEvent(const QString &page = QString(), const QString &element = QString()); void sendEventImmediatley(const QString &page, const QString &element); explicit GAnalytics(QObject *parent = 0); - Q_DISABLE_COPY_MOVE(GAnalytics); + Q_DISABLE_COPY_MOVE(GAnalytics) private: GAnalyticsWorker *d; diff --git a/src/gui/generalsettings.cpp b/src/gui/generalsettings.cpp index a4b2043b3c369..29e944119d5ad 100644 --- a/src/gui/generalsettings.cpp +++ b/src/gui/generalsettings.cpp @@ -737,73 +737,73 @@ void GeneralSettings::customizeStyle() _ui->infoAndUpdatesLabel->setText(aboutText); this->setAutoFillBackground(true); - setPalette(QPalette(QPalette::Window, WhitelabelTheme::getInstance::dialogBackgroundColor())); + setPalette(QPalette(QPalette::Window, WhitelabelTheme::instance().dialogBackgroundColor())); this->setStyleSheet( QStringLiteral("QGroupBox { border: %1; font-size: %2; font-weight: %3; color: %4; }").arg( Theme::instance()->systemPalette()["base"].value().name(), - WhitelabelTheme::getInstance::settingsTitleSize(), - WhitelabelTheme::getInstance::settingsTitleWeight600(), - WhitelabelTheme::getInstance::black() + WhitelabelTheme::instance().settingsTitleSize(), + WhitelabelTheme::instance().settingsTitleWeight600(), + WhitelabelTheme::instance().black() ) ); this->setStyleSheet( this->styleSheet() + QStringLiteral("QCheckBox { font-size: %1; font-weight: %2; margin-left: %3 px; color: %4; }").arg( - WhitelabelTheme::getInstance::settingsTextSize(), - WhitelabelTheme::getInstance::settingsTextWeight(), - WhitelabelTheme::getInstance::smallMargin(), - WhitelabelTheme::getInstance::black() + WhitelabelTheme::instance().settingsTextSize(), + WhitelabelTheme::instance().settingsTextWeight(), + WhitelabelTheme::instance().smallMargin(), + WhitelabelTheme::instance().black() ) ); this->setStyleSheet( this->styleSheet() + QStringLiteral("QLabel { font-size: %1; font-weight: %2; color: %3; }").arg( - WhitelabelTheme::getInstance::settingsTextSize(), - WhitelabelTheme::getInstance::settingsTitleWeight500(), - WhitelabelTheme::getInstance::black() + WhitelabelTheme::instance().settingsTextSize(), + WhitelabelTheme::instance().settingsTitleWeight500(), + WhitelabelTheme::instance().black() ) ); this->setStyleSheet( this->styleSheet() + QStringLiteral("QFrame { font-size: %1; font-weight: %2; color: %3; }").arg( - WhitelabelTheme::getInstance::settingsTextSize(), - WhitelabelTheme::getInstance::settingsTitleWeight600(), - WhitelabelTheme::getInstance::black() + WhitelabelTheme::instance().settingsTextSize(), + WhitelabelTheme::instance().settingsTitleWeight600(), + WhitelabelTheme::instance().black() ) ); _ui->sendNecessaryData_checkbox->setChecked(true); _ui->sendNecessaryData_checkbox->setStyleSheet( QStringLiteral("QCheckBox { font-size: %1; font-weight: %2; color: %3; }").arg( - WhitelabelTheme::getInstance::settingsTextSize(), - WhitelabelTheme::getInstance::settingsTitleWeight600(), - WhitelabelTheme::getInstance::folderWizardSubtitleColor() + WhitelabelTheme::instance().settingsTextSize(), + WhitelabelTheme::instance().settingsTitleWeight600(), + WhitelabelTheme::instance().folderWizardSubtitleColor() ) ); _ui->sendAnonymousData_checkbox->setStyleSheet( QStringLiteral("QCheckBox { font-size: %1; font-weight: %2; color: %3; }").arg( - WhitelabelTheme::getInstance::settingsTextSize(), - WhitelabelTheme::getInstance::settingsTitleWeight600(), - WhitelabelTheme::getInstance::folderWizardSubtitleColor() + WhitelabelTheme::instance().settingsTextSize(), + WhitelabelTheme::instance().settingsTitleWeight600(), + WhitelabelTheme::instance().folderWizardSubtitleColor() ) ); _ui->necessaryDataLabel->setStyleSheet( QStringLiteral("QLabel { font-size: %1; font-weight: %2; color: %3; margin-left: %4; }").arg( - WhitelabelTheme::getInstance::settingsTextSize(), - WhitelabelTheme::getInstance::settingsTextWeight(), - WhitelabelTheme::getInstance::black(), + WhitelabelTheme::instance().settingsTextSize(), + WhitelabelTheme::instance().settingsTextWeight(), + WhitelabelTheme::instance().black(), "24" ) ); _ui->anonymousDataLabel->setStyleSheet( QStringLiteral("QLabel { font-size: %1; font-weight: %2; color: %3; margin-left: %4; margin-bottom: %5; }").arg( - WhitelabelTheme::getInstance::settingsTextSize(), - WhitelabelTheme::getInstance::settingsTextWeight(), - WhitelabelTheme::getInstance::black(), + WhitelabelTheme::instance().settingsTextSize(), + WhitelabelTheme::instance().settingsTextWeight(), + WhitelabelTheme::instance().black(), "24", "16" diff --git a/src/gui/ignorelisttablewidget.cpp b/src/gui/ignorelisttablewidget.cpp index 0a7c54452fd4c..91cd0e6255a4e 100644 --- a/src/gui/ignorelisttablewidget.cpp +++ b/src/gui/ignorelisttablewidget.cpp @@ -187,35 +187,35 @@ void IgnoreListTableWidget::customizeIgnoreListDialogStyle(){ ui->tableWidget->setStyleSheet( QStringLiteral("QTableWidget { background-color: %1; color: %2; } ").arg( - WhitelabelTheme::getInstance::white(), - WhitelabelTheme::getInstance::black() + WhitelabelTheme::instance().white(), + WhitelabelTheme::instance().black() ) + - WhitelabelTheme::getInstance::fontConfigurationCss( - WhitelabelTheme::getInstance::settingsFont(), - WhitelabelTheme::getInstance::settingsTextSize(), - WhitelabelTheme::getInstance::settingsTextWeight(), - WhitelabelTheme::getInstance::titleColor() + WhitelabelTheme::instance().fontConfigurationCss( + WhitelabelTheme::instance().settingsFont(), + WhitelabelTheme::instance().settingsTextSize(), + WhitelabelTheme::instance().settingsTextWeight(), + WhitelabelTheme::instance().titleColor() ) ); ui->descriptionLabel->setStyleSheet( - WhitelabelTheme::getInstance::fontConfigurationCss( - WhitelabelTheme::getInstance::settingsFont(), - WhitelabelTheme::getInstance::settingsTextSize(), - WhitelabelTheme::getInstance::settingsTextWeight(), - WhitelabelTheme::getInstance::titleColor() + WhitelabelTheme::instance().fontConfigurationCss( + WhitelabelTheme::instance().settingsFont(), + WhitelabelTheme::instance().settingsTextSize(), + WhitelabelTheme::instance().settingsTextWeight(), + WhitelabelTheme::instance().titleColor() ) ); ui->tableWidget->horizontalHeader()->setStyleSheet( QStringLiteral("QHeaderView::section { background-color: %1; color: %2; border-bottom: none; %3; }").arg( - WhitelabelTheme::getInstance::white(), - WhitelabelTheme::getInstance::black(), - WhitelabelTheme::getInstance::fontConfigurationCss( - WhitelabelTheme::getInstance::settingsFont(), - WhitelabelTheme::getInstance::settingsTextSize(), - WhitelabelTheme::getInstance::settingsTextWeight(), - WhitelabelTheme::getInstance::titleColor() + WhitelabelTheme::instance().white(), + WhitelabelTheme::instance().black(), + WhitelabelTheme::instance().fontConfigurationCss( + WhitelabelTheme::instance().settingsFont(), + WhitelabelTheme::instance().settingsTextSize(), + WhitelabelTheme::instance().settingsTextWeight(), + WhitelabelTheme::instance().titleColor() ) ) ); @@ -238,24 +238,24 @@ void IgnoreListTableWidget::customizeAddIgnorePatternDialogStyle(QInputDialog &i inputDialog.setContentsMargins(12,0,12,12); inputDialog.setStyleSheet( QStringLiteral("QDialog { %1; background: %2; }").arg( - WhitelabelTheme::getInstance::fontConfigurationCss( - WhitelabelTheme::getInstance::settingsFont(), - WhitelabelTheme::getInstance::settingsTextSize(), - WhitelabelTheme::getInstance::settingsTextWeight(), - WhitelabelTheme::getInstance::titleColor() + WhitelabelTheme::instance().fontConfigurationCss( + WhitelabelTheme::instance().settingsFont(), + WhitelabelTheme::instance().settingsTextSize(), + WhitelabelTheme::instance().settingsTextWeight(), + WhitelabelTheme::instance().titleColor() ), - WhitelabelTheme::getInstance::dialogBackgroundColor() + WhitelabelTheme::instance().dialogBackgroundColor() ) ); QLabel *label = inputDialog.findChild(); label->setAlignment(Qt::AlignCenter); label->setStyleSheet( - WhitelabelTheme::getInstance::fontConfigurationCss( - WhitelabelTheme::getInstance::settingsFont(), - WhitelabelTheme::getInstance::settingsTextSize(), - WhitelabelTheme::getInstance::settingsTextWeight(), - WhitelabelTheme::getInstance::titleColor() + WhitelabelTheme::instance().fontConfigurationCss( + WhitelabelTheme::instance().settingsFont(), + WhitelabelTheme::instance().settingsTextSize(), + WhitelabelTheme::instance().settingsTextWeight(), + WhitelabelTheme::instance().titleColor() ) ); @@ -264,13 +264,13 @@ void IgnoreListTableWidget::customizeAddIgnorePatternDialogStyle(QInputDialog &i QStringLiteral( "color: %1; font-family: %2; font-size: %3; font-weight: %4; border-radius: %5; border: 1px " "solid %6; padding: 0px 12px; text-align: left; vertical-align: middle; height: 40px; background: %7; ") - .arg(WhitelabelTheme::getInstance::folderWizardPathColor(), - WhitelabelTheme::getInstance::settingsFont(), - WhitelabelTheme::getInstance::settingsTextSize(), - WhitelabelTheme::getInstance::settingsTextWeight(), - WhitelabelTheme::getInstance::buttonRadius(), - WhitelabelTheme::getInstance::menuBorderColor(), - WhitelabelTheme::getInstance::white() + .arg(WhitelabelTheme::instance().folderWizardPathColor(), + WhitelabelTheme::instance().settingsFont(), + WhitelabelTheme::instance().settingsTextSize(), + WhitelabelTheme::instance().settingsTextWeight(), + WhitelabelTheme::instance().buttonRadius(), + WhitelabelTheme::instance().menuBorderColor(), + WhitelabelTheme::instance().white() ) ); diff --git a/src/gui/invalidfilenamedialog.cpp b/src/gui/invalidfilenamedialog.cpp index 9421435054b0c..12fb0f8790b41 100644 --- a/src/gui/invalidfilenamedialog.cpp +++ b/src/gui/invalidfilenamedialog.cpp @@ -337,10 +337,10 @@ void InvalidFilenameDialog::customizeStyle() { this->setStyleSheet( QStringLiteral("QDialog {background-color: %1; } QLabel{ font-family: %2; font-size: %3; font-weight: %4; }").arg( - WhitelabelTheme::getInstance::dialogBackgroundColor(), - WhitelabelTheme::getInstance::settingsFont(), - WhitelabelTheme::getInstance::settingsTextSize(), - WhitelabelTheme::getInstance::settingsTextWeight() + WhitelabelTheme::instance().dialogBackgroundColor(), + WhitelabelTheme::instance().settingsFont(), + WhitelabelTheme::instance().settingsTextSize(), + WhitelabelTheme::instance().settingsTextWeight() ) ); @@ -348,13 +348,13 @@ void InvalidFilenameDialog::customizeStyle() QStringLiteral( "color: %1; font-family: %2; font-size: %3; font-weight: %4; border-radius: %5; border: 1px " "solid %6; padding: 0px 12px; text-align: left; vertical-align: middle; height: 40px; background: %7; ").arg( - WhitelabelTheme::getInstance::folderWizardPathColor(), - WhitelabelTheme::getInstance::settingsFont(), - WhitelabelTheme::getInstance::settingsTextSize(), - WhitelabelTheme::getInstance::settingsTextWeight(), - WhitelabelTheme::getInstance::buttonRadius(), - WhitelabelTheme::getInstance::menuBorderColor(), - WhitelabelTheme::getInstance::white() + WhitelabelTheme::instance().folderWizardPathColor(), + WhitelabelTheme::instance().settingsFont(), + WhitelabelTheme::instance().settingsTextSize(), + WhitelabelTheme::instance().settingsTextWeight(), + WhitelabelTheme::instance().buttonRadius(), + WhitelabelTheme::instance().menuBorderColor(), + WhitelabelTheme::instance().white() ) ); diff --git a/src/gui/linkbutton.cpp b/src/gui/linkbutton.cpp index 12df4519911b0..d721ba187f478 100644 --- a/src/gui/linkbutton.cpp +++ b/src/gui/linkbutton.cpp @@ -8,9 +8,9 @@ namespace OCC { : QLabel(parent) { setStyleSheet(QStringLiteral("QLabel { color: %1; text-decoration: underline; font-size: %2; font-weight: %3; }") - .arg(WhitelabelTheme::getInstance::settingsLinkColor() - , WhitelabelTheme::getInstance::settingsTextSize() - , WhitelabelTheme::getInstance::settingsTitleWeight600() + .arg(WhitelabelTheme::instance().settingsLinkColor() + , WhitelabelTheme::instance().settingsTextSize() + , WhitelabelTheme::instance().settingsTitleWeight600() )); setCursor(Qt::PointingHandCursor); diff --git a/src/gui/main.cpp b/src/gui/main.cpp index 65fb00e502f4e..a602a7de4cc2b 100644 --- a/src/gui/main.cpp +++ b/src/gui/main.cpp @@ -95,7 +95,7 @@ int main(int argc, char **argv) qmlStyle = QStringLiteral("FluentWinUI3"); widgetsStyle = QStringLiteral("windows11"); } - QApplication::setFont(WhitelabelTheme::getInstance::settingsFontDefault()); + QApplication::setFont(WhitelabelTheme::instance().settingsFontDefault()); #endif #ifdef IONOS_BUILD diff --git a/src/gui/owncloudgui.cpp b/src/gui/owncloudgui.cpp index e6303ec560b29..c37ead09aa72c 100644 --- a/src/gui/owncloudgui.cpp +++ b/src/gui/owncloudgui.cpp @@ -52,7 +52,7 @@ #include #include #include -#include +#include #ifdef WITH_LIBCLOUDPROVIDERS #include #include @@ -94,7 +94,7 @@ ownCloudGui::ownCloudGui(Application *parent) _tray = Systray::instance(); _tray->setTrayEngine(new QQmlApplicationEngine(this)); // for the beginning, set the offline icon until the account was verified - _tray->setIcon(QIcon(WhitelabelTheme::getInstance::syncOfflineIcon())); + _tray->setIcon(QIcon(WhitelabelTheme::instance().syncOfflineIcon())); _tray->show(); diff --git a/src/gui/pushbuttonstylehelper.cpp b/src/gui/pushbuttonstylehelper.cpp index 946b87e01238f..cd5d1b5eb98c3 100644 --- a/src/gui/pushbuttonstylehelper.cpp +++ b/src/gui/pushbuttonstylehelper.cpp @@ -58,15 +58,15 @@ void PushButtonStyleHelper::drawButtonShape(const QStyleOptionButton *option, QP painter->save(); painter->setRenderHints(QPainter::Antialiasing); setupPainterForShape(option, painter, widget); - const int radius = OCC::WhitelabelTheme::getInstance::buttonRadiusInt(); + const int radius = OCC::WhitelabelTheme::instance().buttonRadiusInt(); painter->drawRoundedRect(option->rect, radius, radius); painter->restore(); } void PushButtonStyleHelper::setFont(QFont& font) const { - font.setWeight(OCC::WhitelabelTheme::getInstance::settingsTitleWeightDemiBold()); - font.setPixelSize(OCC::WhitelabelTheme::getInstance::settingsTextPixel()); + font.setWeight(OCC::WhitelabelTheme::instance().settingsTitleWeightDemiBold()); + font.setPixelSize(OCC::WhitelabelTheme::instance().settingsTextPixel()); } void PushButtonStyleHelper::recalculateContentSize(QSize &contentsSize, const QWidget *widget) const diff --git a/src/gui/selectivesyncdialog.cpp b/src/gui/selectivesyncdialog.cpp index a5a85dc0dac0b..66bebf3bd3a13 100644 --- a/src/gui/selectivesyncdialog.cpp +++ b/src/gui/selectivesyncdialog.cpp @@ -80,12 +80,12 @@ SelectiveSyncWidget::SelectiveSyncWidget(AccountPtr account, QWidget *parent) header->setText(tr("Deselect remote folders you do not wish to synchronize.")); header->setWordWrap(true); header->setStyleSheet( - WhitelabelTheme::getInstance::fontConfigurationCss( - WhitelabelTheme::getInstance::settingsFont(), - WhitelabelTheme::getInstance::settingsTextSize(), - WhitelabelTheme::getInstance::settingsTextWeight(), - WhitelabelTheme::getInstance::titleColor()) - + QStringLiteral("background-color: %1;").arg(WhitelabelTheme::getInstance::dialogBackgroundColor()) + WhitelabelTheme::instance().fontConfigurationCss( + WhitelabelTheme::instance().settingsFont(), + WhitelabelTheme::instance().settingsTextSize(), + WhitelabelTheme::instance().settingsTextWeight(), + WhitelabelTheme::instance().titleColor()) + + QStringLiteral("background-color: %1;").arg(WhitelabelTheme::instance().dialogBackgroundColor()) ); layout->addWidget(header); @@ -111,33 +111,33 @@ SelectiveSyncWidget::SelectiveSyncWidget(AccountPtr account, QWidget *parent) " background-color: white;" // Set the background color " border: 1px solid #e6e6e6;" // Optional: add a border " padding-left: 4px;" - + QString(WhitelabelTheme::getInstance::fontConfigurationCss( - WhitelabelTheme::getInstance::settingsFont(), - WhitelabelTheme::getInstance::settingsTextSize(), - WhitelabelTheme::getInstance::settingsTextWeight(), - WhitelabelTheme::getInstance::titleColor())) + + QString(WhitelabelTheme::instance().fontConfigurationCss( + WhitelabelTheme::instance().settingsFont(), + WhitelabelTheme::instance().settingsTextSize(), + WhitelabelTheme::instance().settingsTextWeight(), + WhitelabelTheme::instance().titleColor())) + "}" ); #else _folderTree->header()->setStyleSheet( - WhitelabelTheme::getInstance::fontConfigurationCss( - WhitelabelTheme::getInstance::settingsFont(), - WhitelabelTheme::getInstance::settingsTextSize(), - WhitelabelTheme::getInstance::settingsTextWeight(), - WhitelabelTheme::getInstance::titleColor() + WhitelabelTheme::instance().fontConfigurationCss( + WhitelabelTheme::instance().settingsFont(), + WhitelabelTheme::instance().settingsTextSize(), + WhitelabelTheme::instance().settingsTextWeight(), + WhitelabelTheme::instance().titleColor() )); #endif - _folderTree->setStyleSheet(WhitelabelTheme::getInstance::fontConfigurationCss( - WhitelabelTheme::getInstance::settingsFont(), - WhitelabelTheme::getInstance::settingsTextSize(), - WhitelabelTheme::getInstance::settingsTextWeight(), - WhitelabelTheme::getInstance::titleColor() + _folderTree->setStyleSheet(WhitelabelTheme::instance().fontConfigurationCss( + WhitelabelTheme::instance().settingsFont(), + WhitelabelTheme::instance().settingsTextSize(), + WhitelabelTheme::instance().settingsTextWeight(), + WhitelabelTheme::instance().titleColor() )); #ifdef Q_OS_MAC - _folderTree->setPalette(QPalette(WhitelabelTheme::getInstance::white())); + _folderTree->setPalette(QPalette(WhitelabelTheme::instance().white())); #endif ConfigFile::setupDefaultExcludeFilePaths(_excludedFiles); @@ -561,11 +561,11 @@ void SelectiveSyncDialog::init(const AccountPtr &account) button = buttonBox->addButton(QDialogButtonBox::Cancel); button->setStyleSheet( button->styleSheet() + QStringLiteral("QPushButton { %1; } ").arg( - WhitelabelTheme::getInstance::fontConfigurationCss( - WhitelabelTheme::getInstance::settingsFont(), - WhitelabelTheme::getInstance::settingsTextSize(), - WhitelabelTheme::getInstance::settingsTextWeight(), - WhitelabelTheme::getInstance::black() + WhitelabelTheme::instance().fontConfigurationCss( + WhitelabelTheme::instance().settingsFont(), + WhitelabelTheme::instance().settingsTextSize(), + WhitelabelTheme::instance().settingsTextWeight(), + WhitelabelTheme::instance().black() ) ) ); @@ -578,23 +578,23 @@ void SelectiveSyncDialog::init(const AccountPtr &account) void SelectiveSyncDialog::customizeStyle() { this->setStyleSheet( - QStringLiteral("QWidget QTreeView{ background-color: %1; }").arg(WhitelabelTheme::getInstance::dialogBackgroundColor()) + QStringLiteral("QWidget QTreeView{ background-color: %1; }").arg(WhitelabelTheme::instance().dialogBackgroundColor()) ); _okButton->setStyleSheet( _okButton->styleSheet() + QStringLiteral("QPushButton { %1; } ").arg( - WhitelabelTheme::getInstance::fontConfigurationCss( - WhitelabelTheme::getInstance::settingsFont(), - WhitelabelTheme::getInstance::settingsTextSize(), - WhitelabelTheme::getInstance::settingsTitleWeight500(), - WhitelabelTheme::getInstance::white() + WhitelabelTheme::instance().fontConfigurationCss( + WhitelabelTheme::instance().settingsFont(), + WhitelabelTheme::instance().settingsTextSize(), + WhitelabelTheme::instance().settingsTitleWeight500(), + WhitelabelTheme::instance().white() ) ) ); // Set background colors auto dialogPalette = palette(); - const auto backgroundColor = QColor(WhitelabelTheme::getInstance::dialogBackgroundColor()); + const auto backgroundColor = QColor(WhitelabelTheme::instance().dialogBackgroundColor()); // Set Color of upper part dialogPalette.setColor(QPalette::Base, backgroundColor); diff --git a/src/gui/sessnackbar.cpp b/src/gui/sessnackbar.cpp index 48c4b7f3f636c..6fe7f15b19639 100644 --- a/src/gui/sessnackbar.cpp +++ b/src/gui/sessnackbar.cpp @@ -104,7 +104,7 @@ namespace OCC { const auto logoIconFileName = Theme::hidpiFileName(":/client/theme/ses/ses-snackbar-success.svg"); m_iconLabel.setPixmap(logoIconFileName); - updateStyleSheet(WhitelabelTheme::getInstance::successBorderColor(), WhitelabelTheme::getInstance::successColor(), WhitelabelTheme::getInstance::black(), WhitelabelTheme::getInstance::black()); + updateStyleSheet(WhitelabelTheme::instance().successBorderColor(), WhitelabelTheme::instance().successColor(), WhitelabelTheme::instance().black(), WhitelabelTheme::instance().black()); } void sesSnackBar::warningStyle() @@ -112,7 +112,7 @@ namespace OCC { const auto logoIconFileName = Theme::hidpiFileName(":/client/theme/ses/ses-snackbar-warning.svg"); m_iconLabel.setPixmap(logoIconFileName); - updateStyleSheet(WhitelabelTheme::getInstance::warningBorderColor(), WhitelabelTheme::getInstance::warningColor(), WhitelabelTheme::getInstance::black(), WhitelabelTheme::getInstance::black()); + updateStyleSheet(WhitelabelTheme::instance().warningBorderColor(), WhitelabelTheme::instance().warningColor(), WhitelabelTheme::instance().black(), WhitelabelTheme::instance().black()); } void sesSnackBar::errorStyle() @@ -120,7 +120,7 @@ namespace OCC { const auto logoIconFileName = Theme::hidpiFileName(":/client/theme/ses/ses-snackbar-error.svg"); m_iconLabel.setPixmap(logoIconFileName); - updateStyleSheet(WhitelabelTheme::getInstance::errorBorderColor(), WhitelabelTheme::getInstance::errorColor(), WhitelabelTheme::getInstance::black(), WhitelabelTheme::getInstance::black()); + updateStyleSheet(WhitelabelTheme::instance().errorBorderColor(), WhitelabelTheme::instance().errorColor(), WhitelabelTheme::instance().black(), WhitelabelTheme::instance().black()); } void sesSnackBar::updateStyleSheet(QColor frameBorderColor, QColor frameBackgroundColor, QColor frameColor, QColor labelColor) diff --git a/src/gui/settingsdialog.cpp b/src/gui/settingsdialog.cpp index 0440522a08123..3fa775b65f613 100644 --- a/src/gui/settingsdialog.cpp +++ b/src/gui/settingsdialog.cpp @@ -104,7 +104,7 @@ SettingsDialog::SettingsDialog(ownCloudGui *gui, QWidget *parent) _ui->setupUi(this); _toolBar = new QToolBar; - _toolBar->setIconSize(QSize(WhitelabelTheme::getInstance::toolbarIconSize(), WhitelabelTheme::getInstance::toolbarIconSize())); + _toolBar->setIconSize(QSize(WhitelabelTheme::instance().toolbarIconSize(), WhitelabelTheme::instance().toolbarIconSize())); _toolBar->setToolButtonStyle(Qt::ToolButtonTextUnderIcon); _toolBar->setFixedHeight(94); layout()->setMenuBar(_toolBar); @@ -193,7 +193,7 @@ SettingsDialog::SettingsDialog(ownCloudGui *gui, QWidget *parent) setWindowFlags(windowFlags() & ~Qt::WindowContextHelpButtonHint); cfg.restoreGeometry(this); - resize(width() > WhitelabelTheme::getInstance::minimalSettingsDialogWidth() ? width(): WhitelabelTheme::getInstance::minimalSettingsDialogWidth(), + resize(width() > WhitelabelTheme::instance().minimalSettingsDialogWidth() ? width(): WhitelabelTheme::instance().minimalSettingsDialogWidth(), (height() > generalSettings->sizeHint().height() ? height(): generalSettings->sizeHint().height()) + 25); } @@ -380,21 +380,21 @@ void SettingsDialog::customizeStyle() QVariantMap palette = Theme::instance()->systemPalette(); QString white(palette["window"].value().name()); - QString hoverColor(WhitelabelTheme::getInstance::toolButtonHoveredColor()); - QString pressedColor(WhitelabelTheme::getInstance::toolButtonPressedColor()); - QString selectedColor(WhitelabelTheme::getInstance::menuSelectedItemColor()); + QString hoverColor(WhitelabelTheme::instance().toolButtonHoveredColor()); + QString pressedColor(WhitelabelTheme::instance().toolButtonPressedColor()); + QString selectedColor(WhitelabelTheme::instance().menuSelectedItemColor()); QString borderColor(palette["shadow"].value().name()); QString highlightTextColor(palette["highlightedText"].value().name()); - QString toolbarActionBorderRadius(WhitelabelTheme::getInstance::toolbarActionBorderRadius()); - QString toolbarSideMargin (WhitelabelTheme::getInstance::toolbarSideMargin()); + QString toolbarActionBorderRadius(WhitelabelTheme::instance().toolbarActionBorderRadius()); + QString toolbarSideMargin (WhitelabelTheme::instance().toolbarSideMargin()); QString toolButtonFont ( - WhitelabelTheme::getInstance::fontConfigurationCss( - WhitelabelTheme::getInstance::settingsFont(), - WhitelabelTheme::getInstance::settingsTextSize(), - WhitelabelTheme::getInstance::settingsTextWeight(), - WhitelabelTheme::getInstance::menuTextColor() + WhitelabelTheme::instance().fontConfigurationCss( + WhitelabelTheme::instance().settingsFont(), + WhitelabelTheme::instance().settingsTextSize(), + WhitelabelTheme::instance().settingsTextWeight(), + WhitelabelTheme::instance().menuTextColor() ) ); diff --git a/src/gui/systray.cpp b/src/gui/systray.cpp index a7659378e34ed..cf24fb3d661b0 100644 --- a/src/gui/systray.cpp +++ b/src/gui/systray.cpp @@ -210,11 +210,11 @@ void Systray::setupContextMenu() resumeAction->setEnabled(anyPaused); }); - _contextMenu->setStyleSheet(WhitelabelTheme::getInstance::fontConfigurationCss( - WhitelabelTheme::getInstance::settingsFont(), - WhitelabelTheme::getInstance::settingsTextSize(), - WhitelabelTheme::getInstance::settingsTextWeight(), - WhitelabelTheme::getInstance::menuTextColor())); + _contextMenu->setStyleSheet(WhitelabelTheme::instance().fontConfigurationCss( + WhitelabelTheme::instance().settingsFont(), + WhitelabelTheme::instance().settingsTextSize(), + WhitelabelTheme::instance().settingsTextWeight(), + WhitelabelTheme::instance().menuTextColor())); } void Systray::destroyDialog(QQuickWindow *dialog) const diff --git a/src/gui/tray/activitylistmodel.cpp b/src/gui/tray/activitylistmodel.cpp index bf7e6f1bb813b..5cadfe7b16580 100644 --- a/src/gui/tray/activitylistmodel.cpp +++ b/src/gui/tray/activitylistmodel.cpp @@ -255,11 +255,11 @@ QVariant ActivityListModel::data(const QModelIndex &index, int role) const } else { // File sync successful if (a._fileAction == "file_created") { - return WhitelabelTheme::getInstance::plusIcon(); + return WhitelabelTheme::instance().plusIcon(); } else if (a._fileAction == "file_deleted") { - return WhitelabelTheme::getInstance::deleteIcon(); + return WhitelabelTheme::instance().deleteIcon(); } else { - return WhitelabelTheme::getInstance::refreshIcon(); + return WhitelabelTheme::instance().refreshIcon(); } } } else { diff --git a/src/gui/tray/usermodel.cpp b/src/gui/tray/usermodel.cpp index cdc7d5533fc2d..8ebb2c633a566 100644 --- a/src/gui/tray/usermodel.cpp +++ b/src/gui/tray/usermodel.cpp @@ -1653,17 +1653,17 @@ int UserModel::findUserIdForAccount(AccountState *account) const void UserModel::styleMessageBox(QMessageBox &messageBox, QPushButton *yesButton){ messageBox.setStyleSheet(QStringLiteral("QMessageBox { background-color: %1; } QMessageBox QLabel { %2 } ").arg( - WhitelabelTheme::getInstance::dialogBackgroundColor(), - WhitelabelTheme::getInstance::fontConfigurationCss( - WhitelabelTheme::getInstance::settingsFont(), - WhitelabelTheme::getInstance::settingsTextSize(), - WhitelabelTheme::getInstance::settingsTextWeight(), - WhitelabelTheme::getInstance::titleColor() + WhitelabelTheme::instance().dialogBackgroundColor(), + WhitelabelTheme::instance().fontConfigurationCss( + WhitelabelTheme::instance().settingsFont(), + WhitelabelTheme::instance().settingsTextSize(), + WhitelabelTheme::instance().settingsTextWeight(), + WhitelabelTheme::instance().titleColor() ) ) ); - messageBox.setIconPixmap(QPixmap(WhitelabelTheme::getInstance::questionCircleIcon())); + messageBox.setIconPixmap(QPixmap(WhitelabelTheme::instance().questionCircleIcon())); yesButton->setProperty("buttonStyle", QVariant::fromValue(OCC::ButtonStyleName::Primary)); diff --git a/src/gui/wizard/dataprotectionpage.cpp b/src/gui/wizard/dataprotectionpage.cpp index 510844e06d0fb..25a86d73c6ccc 100644 --- a/src/gui/wizard/dataprotectionpage.cpp +++ b/src/gui/wizard/dataprotectionpage.cpp @@ -61,11 +61,11 @@ namespace OCC{ _ui->descriptionLabel->setStyleSheet( QStringLiteral("QLabel { %1; margin-left: %2; margin-right: %2; margin-bottom: %2; }").arg( - WhitelabelTheme::getInstance::fontConfigurationCss( - WhitelabelTheme::getInstance::settingsFont(), - WhitelabelTheme::getInstance::settingsTextSize(), - WhitelabelTheme::getInstance::settingsTextWeight(), - WhitelabelTheme::getInstance::black() + WhitelabelTheme::instance().fontConfigurationCss( + WhitelabelTheme::instance().settingsFont(), + WhitelabelTheme::instance().settingsTextSize(), + WhitelabelTheme::instance().settingsTextWeight(), + WhitelabelTheme::instance().black() ), "32" ) diff --git a/src/gui/wizard/dataprotectionsettingspage.cpp b/src/gui/wizard/dataprotectionsettingspage.cpp index 6a839b9819675..11c14369e32f4 100644 --- a/src/gui/wizard/dataprotectionsettingspage.cpp +++ b/src/gui/wizard/dataprotectionsettingspage.cpp @@ -69,31 +69,31 @@ namespace OCC{ _ui->necessaryDataCheckBox->setStyleSheet( QStringLiteral("QCheckBox { %1; }").arg( - WhitelabelTheme::getInstance::fontConfigurationCss( - WhitelabelTheme::getInstance::settingsFont(), - WhitelabelTheme::getInstance::settingsTextSize(), - WhitelabelTheme::getInstance::settingsTitleWeight600(), - WhitelabelTheme::getInstance::folderWizardSubtitleColor() + WhitelabelTheme::instance().fontConfigurationCss( + WhitelabelTheme::instance().settingsFont(), + WhitelabelTheme::instance().settingsTextSize(), + WhitelabelTheme::instance().settingsTitleWeight600(), + WhitelabelTheme::instance().folderWizardSubtitleColor() ) )); _ui->anonymousDataCheckBox->setStyleSheet( QStringLiteral("QCheckBox { %1; }").arg( - WhitelabelTheme::getInstance::fontConfigurationCss( - WhitelabelTheme::getInstance::settingsFont(), - WhitelabelTheme::getInstance::settingsTextSize(), - WhitelabelTheme::getInstance::settingsTitleWeight600(), - WhitelabelTheme::getInstance::folderWizardSubtitleColor() + WhitelabelTheme::instance().fontConfigurationCss( + WhitelabelTheme::instance().settingsFont(), + WhitelabelTheme::instance().settingsTextSize(), + WhitelabelTheme::instance().settingsTitleWeight600(), + WhitelabelTheme::instance().folderWizardSubtitleColor() ) )); _ui->descriptionLabel->setStyleSheet( QStringLiteral("QLabel { %1; margin-top: %2; margin-bottom: %2; }").arg( - WhitelabelTheme::getInstance::fontConfigurationCss( - WhitelabelTheme::getInstance::settingsFont(), - WhitelabelTheme::getInstance::settingsTextSize(), - WhitelabelTheme::getInstance::settingsTextWeight(), - WhitelabelTheme::getInstance::black() + WhitelabelTheme::instance().fontConfigurationCss( + WhitelabelTheme::instance().settingsFont(), + WhitelabelTheme::instance().settingsTextSize(), + WhitelabelTheme::instance().settingsTextWeight(), + WhitelabelTheme::instance().black() ), "24" ) @@ -101,24 +101,24 @@ namespace OCC{ _ui->necessaryDataLabel->setStyleSheet( QStringLiteral("QLabel { %1; margin-left: %2; margin-bottom: %3; }").arg( - WhitelabelTheme::getInstance::fontConfigurationCss( - WhitelabelTheme::getInstance::settingsFont(), - WhitelabelTheme::getInstance::settingsTextSize(), - WhitelabelTheme::getInstance::settingsTextWeight(), - WhitelabelTheme::getInstance::black() + WhitelabelTheme::instance().fontConfigurationCss( + WhitelabelTheme::instance().settingsFont(), + WhitelabelTheme::instance().settingsTextSize(), + WhitelabelTheme::instance().settingsTextWeight(), + WhitelabelTheme::instance().black() ), "16", - WhitelabelTheme::getInstance::smallMargin() + WhitelabelTheme::instance().smallMargin() ) ); _ui->anonymousDataLabel->setStyleSheet( QStringLiteral("QLabel { %1; margin-left: %2; margin-bottom: %3; }").arg( - WhitelabelTheme::getInstance::fontConfigurationCss( - WhitelabelTheme::getInstance::settingsFont(), - WhitelabelTheme::getInstance::settingsTextSize(), - WhitelabelTheme::getInstance::settingsTextWeight(), - WhitelabelTheme::getInstance::black() + WhitelabelTheme::instance().fontConfigurationCss( + WhitelabelTheme::instance().settingsFont(), + WhitelabelTheme::instance().settingsTextSize(), + WhitelabelTheme::instance().settingsTextWeight(), + WhitelabelTheme::instance().black() ), "16", "48" diff --git a/src/gui/wizard/flow2authwidget.cpp b/src/gui/wizard/flow2authwidget.cpp index 6a553da060db5..1b41eccb8b055 100644 --- a/src/gui/wizard/flow2authwidget.cpp +++ b/src/gui/wizard/flow2authwidget.cpp @@ -237,18 +237,18 @@ void Flow2AuthWidget::customizeStyle() _ui.horizontalLayout->setSpacing(32); #endif - _ui.statusLabel->setStyleSheet(WhitelabelTheme::getInstance::fontConfigurationCss( - WhitelabelTheme::getInstance::settingsFont(), - WhitelabelTheme::getInstance::settingsTextSize(), - WhitelabelTheme::getInstance::settingsTextWeight(), - WhitelabelTheme::getInstance::titleColor() + _ui.statusLabel->setStyleSheet(WhitelabelTheme::instance().fontConfigurationCss( + WhitelabelTheme::instance().settingsFont(), + WhitelabelTheme::instance().settingsTextSize(), + WhitelabelTheme::instance().settingsTextWeight(), + WhitelabelTheme::instance().titleColor() )); - _ui.label->setStyleSheet(WhitelabelTheme::getInstance::fontConfigurationCss( - WhitelabelTheme::getInstance::settingsFont(), - WhitelabelTheme::getInstance::settingsTextSize(), - WhitelabelTheme::getInstance::settingsTextWeight(), - WhitelabelTheme::getInstance::titleColor() + _ui.label->setStyleSheet(WhitelabelTheme::instance().fontConfigurationCss( + WhitelabelTheme::instance().settingsFont(), + WhitelabelTheme::instance().settingsTextSize(), + WhitelabelTheme::instance().settingsTextWeight(), + WhitelabelTheme::instance().titleColor() )); _ui.label->setText(tr("Switch to your browser to connect your account")); diff --git a/src/gui/wizard/owncloudadvancedsetuppage.cpp b/src/gui/wizard/owncloudadvancedsetuppage.cpp index 282399c4275ee..7806f6812ba33 100644 --- a/src/gui/wizard/owncloudadvancedsetuppage.cpp +++ b/src/gui/wizard/owncloudadvancedsetuppage.cpp @@ -247,7 +247,7 @@ void OwncloudAdvancedSetupPage::initializePage() void OwncloudAdvancedSetupPage::SetAvatarIcon() { - const auto icon = QIcon(WhitelabelTheme::getInstance::avatarIcon()); + const auto icon = QIcon(WhitelabelTheme::instance().avatarIcon()); _ui.lServerIcon->setPixmap(icon.pixmap(32)); } @@ -536,7 +536,7 @@ void OwncloudAdvancedSetupPage::slotSelectiveSyncClicked() dlg->setAttribute(Qt::WA_DeleteOnClose); dlg->setStyleSheet(QStringLiteral("QDialog { background-color: %1; } QWidget { background-color: %1; }").arg( - WhitelabelTheme::getInstance::dialogBackgroundColor())); + WhitelabelTheme::instance().dialogBackgroundColor())); connect(dlg, &SelectiveSyncDialog::finished, this, [this, dlg]{ const int result = dlg->result(); @@ -550,11 +550,11 @@ void OwncloudAdvancedSetupPage::slotSelectiveSyncClicked() _selectiveSyncBlacklist = dlg->createBlackList(); updateBlacklist = true; // commented out for https://bmjira.atlassian.net/browse/SES-282 - // _ui.confCheckBoxExternal->setStyleSheet(WhitelabelTheme::getInstance::fontConfigurationCss( - // WhitelabelTheme::getInstance::settingsFont(), - // WhitelabelTheme::getInstance::settingsTextSize(), - // WhitelabelTheme::getInstance::settingsTextWeight(), - // WhitelabelTheme::getInstance::loginWizardFontLightGrey() + // _ui.confCheckBoxExternal->setStyleSheet(WhitelabelTheme::instance().fontConfigurationCss( + // WhitelabelTheme::instance().settingsFont(), + // WhitelabelTheme::instance().settingsTextSize(), + // WhitelabelTheme::instance().settingsTextWeight(), + // WhitelabelTheme::instance().loginWizardFontLightGrey() // )); _ui.confCheckBoxSize->setDisabled(true); @@ -599,11 +599,11 @@ void OwncloudAdvancedSetupPage::slotVirtualFileSyncClicked() }); } // commented out for https://bmjira.atlassian.net/browse/SES-282 - // _ui.confCheckBoxExternal->setStyleSheet(WhitelabelTheme::getInstance::fontConfigurationCss( - // WhitelabelTheme::getInstance::settingsFont(), - // WhitelabelTheme::getInstance::settingsTextSize(), - // WhitelabelTheme::getInstance::settingsTextWeight(), - // WhitelabelTheme::getInstance::loginWizardFontLightGrey() + // _ui.confCheckBoxExternal->setStyleSheet(WhitelabelTheme::instance().fontConfigurationCss( + // WhitelabelTheme::instance().settingsFont(), + // WhitelabelTheme::instance().settingsTextSize(), + // WhitelabelTheme::instance().settingsTextWeight(), + // WhitelabelTheme::instance().loginWizardFontLightGrey() // )); _ui.confCheckBoxSize->setDisabled(true); @@ -619,11 +619,11 @@ void OwncloudAdvancedSetupPage::slotSyncEverythingClicked() setErrorString(errorStr); // commented out for https://bmjira.atlassian.net/browse/SES-282 - // _ui.confCheckBoxExternal->setStyleSheet(WhitelabelTheme::getInstance::fontConfigurationCss( - // WhitelabelTheme::getInstance::settingsFont(), - // WhitelabelTheme::getInstance::settingsTextSize(), - // WhitelabelTheme::getInstance::settingsTextWeight(), - // WhitelabelTheme::getInstance::titleColor() + // _ui.confCheckBoxExternal->setStyleSheet(WhitelabelTheme::instance().fontConfigurationCss( + // WhitelabelTheme::instance().settingsFont(), + // WhitelabelTheme::instance().settingsTextSize(), + // WhitelabelTheme::instance().settingsTextWeight(), + // WhitelabelTheme::instance().titleColor() // )); } @@ -709,62 +709,62 @@ void OwncloudAdvancedSetupPage::customizeStyle() setStyleSheet( "QRadioButton {" + - WhitelabelTheme::getInstance::fontConfigurationCss( - WhitelabelTheme::getInstance::settingsFont(), - WhitelabelTheme::getInstance::settingsTextSize(), - WhitelabelTheme::getInstance::settingsTextWeight(), - WhitelabelTheme::getInstance::titleColor() + WhitelabelTheme::instance().fontConfigurationCss( + WhitelabelTheme::instance().settingsFont(), + WhitelabelTheme::instance().settingsTextSize(), + WhitelabelTheme::instance().settingsTextWeight(), + WhitelabelTheme::instance().titleColor() ) + "} QCheckBox {" + - WhitelabelTheme::getInstance::fontConfigurationCss( - WhitelabelTheme::getInstance::settingsFont(), - WhitelabelTheme::getInstance::settingsTextSize(), - WhitelabelTheme::getInstance::settingsTextWeight(), - WhitelabelTheme::getInstance::titleColor() + WhitelabelTheme::instance().fontConfigurationCss( + WhitelabelTheme::instance().settingsFont(), + WhitelabelTheme::instance().settingsTextSize(), + WhitelabelTheme::instance().settingsTextWeight(), + WhitelabelTheme::instance().titleColor() ) + "}" ); - _ui.userNameLabel->setStyleSheet(WhitelabelTheme::getInstance::fontConfigurationCss( - WhitelabelTheme::getInstance::settingsFont(), - WhitelabelTheme::getInstance::settingsTextSize(), - WhitelabelTheme::getInstance::settingsTextWeight(), - WhitelabelTheme::getInstance::titleColor() + _ui.userNameLabel->setStyleSheet(WhitelabelTheme::instance().fontConfigurationCss( + WhitelabelTheme::instance().settingsFont(), + WhitelabelTheme::instance().settingsTextSize(), + WhitelabelTheme::instance().settingsTextWeight(), + WhitelabelTheme::instance().titleColor() )); - _ui.serverAddressLabel->setStyleSheet(WhitelabelTheme::getInstance::fontConfigurationCss( - WhitelabelTheme::getInstance::settingsFont(), - WhitelabelTheme::getInstance::settingsTextSize(), - WhitelabelTheme::getInstance::settingsTextWeight(), - WhitelabelTheme::getInstance::loginWizardFontGrey() + _ui.serverAddressLabel->setStyleSheet(WhitelabelTheme::instance().fontConfigurationCss( + WhitelabelTheme::instance().settingsFont(), + WhitelabelTheme::instance().settingsTextSize(), + WhitelabelTheme::instance().settingsTextWeight(), + WhitelabelTheme::instance().loginWizardFontGrey() )); - _ui.localFolderDescriptionLabel->setStyleSheet(WhitelabelTheme::getInstance::fontConfigurationCss( - WhitelabelTheme::getInstance::settingsFont(), - WhitelabelTheme::getInstance::settingsTextSize(), - WhitelabelTheme::getInstance::settingsTextWeight(), - WhitelabelTheme::getInstance::titleColor() + _ui.localFolderDescriptionLabel->setStyleSheet(WhitelabelTheme::instance().fontConfigurationCss( + WhitelabelTheme::instance().settingsFont(), + WhitelabelTheme::instance().settingsTextSize(), + WhitelabelTheme::instance().settingsTextWeight(), + WhitelabelTheme::instance().titleColor() )); - _filePathLabel->setStyleSheet(WhitelabelTheme::getInstance::fontConfigurationCss( - WhitelabelTheme::getInstance::settingsFont(), - WhitelabelTheme::getInstance::settingsTextSize(), - WhitelabelTheme::getInstance::settingsTextWeight(), - WhitelabelTheme::getInstance::loginWizardFontGrey() + _filePathLabel->setStyleSheet(WhitelabelTheme::instance().fontConfigurationCss( + WhitelabelTheme::instance().settingsFont(), + WhitelabelTheme::instance().settingsTextSize(), + WhitelabelTheme::instance().settingsTextWeight(), + WhitelabelTheme::instance().loginWizardFontGrey() )); - _ui.lFreeSpace->setStyleSheet(WhitelabelTheme::getInstance::fontConfigurationCss( - WhitelabelTheme::getInstance::settingsFont(), - WhitelabelTheme::getInstance::settingsTextSize(), - WhitelabelTheme::getInstance::settingsTextWeight(), - WhitelabelTheme::getInstance::loginWizardFontGrey() + _ui.lFreeSpace->setStyleSheet(WhitelabelTheme::instance().fontConfigurationCss( + WhitelabelTheme::instance().settingsFont(), + WhitelabelTheme::instance().settingsTextSize(), + WhitelabelTheme::instance().settingsTextWeight(), + WhitelabelTheme::instance().loginWizardFontGrey() )); #ifdef Q_OS_MAC _ui.syncModeLabel->setStyleSheet( - WhitelabelTheme::getInstance::fontConfigurationCss( - WhitelabelTheme::getInstance::settingsFont(), - WhitelabelTheme::getInstance::settingsTextSize(), - WhitelabelTheme::getInstance::settingsTitleWeight600(), - WhitelabelTheme::getInstance::titleColor() + WhitelabelTheme::instance().fontConfigurationCss( + WhitelabelTheme::instance().settingsFont(), + WhitelabelTheme::instance().settingsTextSize(), + WhitelabelTheme::instance().settingsTitleWeight600(), + WhitelabelTheme::instance().titleColor() ) ); #endif @@ -773,7 +773,7 @@ void OwncloudAdvancedSetupPage::customizeStyle() void OwncloudAdvancedSetupPage::styleLocalFolderLabel() { - const auto icon = QIcon(WhitelabelTheme::getInstance::folderIcon()); + const auto icon = QIcon(WhitelabelTheme::instance().folderIcon()); _ui.lLocal->setPixmap(icon.pixmap(32)); } @@ -815,7 +815,7 @@ void OwncloudAdvancedSetupPage::updateMacOsFileProviderRelatedViews() void OwncloudAdvancedSetupPage::styleSyncLogo() { - const auto syncArrowIcon = QIcon(WhitelabelTheme::getInstance::syncArrows()); + const auto syncArrowIcon = QIcon(WhitelabelTheme::instance().syncArrows()); // const auto syncArrowIcon = Theme::createColorAwareIcon(QLatin1String(":/client/theme/sync-arrow.svg"), palette()); _ui.syncLogoLabel->setPixmap(syncArrowIcon.pixmap(QSize(32,32))); _ui.syncLogoLabel->setSizePolicy(QSizePolicy(QSizePolicy::Fixed, QSizePolicy::Fixed)); diff --git a/src/gui/wizard/owncloudwizard.cpp b/src/gui/wizard/owncloudwizard.cpp index b82568a53b614..9bb8a55a43467 100644 --- a/src/gui/wizard/owncloudwizard.cpp +++ b/src/gui/wizard/owncloudwizard.cpp @@ -471,7 +471,7 @@ void OwncloudWizard::customizeStyle() // Set background colors auto wizardPalette = palette(); - const auto backgroundColor = QColor(WhitelabelTheme::getInstance::dialogBackgroundColor()); + const auto backgroundColor = QColor(WhitelabelTheme::instance().dialogBackgroundColor()); // Set Color of upper part wizardPalette.setColor(QPalette::Base, backgroundColor); diff --git a/src/gui/wizard/slideshow.cpp b/src/gui/wizard/slideshow.cpp index fb8cc2ce46db8..d1a421aa630f5 100644 --- a/src/gui/wizard/slideshow.cpp +++ b/src/gui/wizard/slideshow.cpp @@ -23,18 +23,18 @@ namespace OCC { -static const int Spacing = WhitelabelTheme::getInstance::LoginPageSpacer(); +static const int Spacing = WhitelabelTheme::instance().LoginPageSpacer(); static const int SlideDuration = 1000; static const int SlideDistance = 400; SlideShow::SlideShow(QWidget *parent) : QWidget(parent) { setSizePolicy(QSizePolicy::Minimum, QSizePolicy::Minimum); - setStyleSheet(WhitelabelTheme::getInstance::fontConfigurationCss( - WhitelabelTheme::getInstance::settingsFont(), - WhitelabelTheme::getInstance::onboardingTitle(), - WhitelabelTheme::getInstance::settingsTitleWeight400(), - WhitelabelTheme::getInstance::titleColor() + setStyleSheet(WhitelabelTheme::instance().fontConfigurationCss( + WhitelabelTheme::instance().settingsFont(), + WhitelabelTheme::instance().onboardingTitle(), + WhitelabelTheme::instance().settingsTitleWeight400(), + WhitelabelTheme::instance().titleColor() )); } From 148a0e14c436f8095e622d185fe7ef52300ca092 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Christopher=20H=C3=A4tty?= Date: Tue, 21 Oct 2025 09:48:56 +0200 Subject: [PATCH 291/371] SES-333 Cleanup of Whitelabeltheme, fixed strato theme ctor --- src/libsync/stratotheme.h | 12 ++++------ src/libsync/whitelabeltheme.h | 44 +++-------------------------------- 2 files changed, 8 insertions(+), 48 deletions(-) diff --git a/src/libsync/stratotheme.h b/src/libsync/stratotheme.h index c7980ed36864e..bafb61e1922bc 100644 --- a/src/libsync/stratotheme.h +++ b/src/libsync/stratotheme.h @@ -10,10 +10,11 @@ namespace OCC { class StratoTheme : public BaseTheme { public: + StratoTheme() = default; //Icons QString avatarIcon() const override { - return QString(Theme::themePrefix) + QStringLiteral("ses/ses-settingsAvatar.svg"); + return QString(Theme::themePrefix) + QStringLiteral("ses/ses-folderIcon.svg"); } QString folderIcon() const override { @@ -223,7 +224,7 @@ class StratoTheme : public BaseTheme { } QString buttonPrimaryColor() const override { - return "#0F6CBD"; + return "#fa0000ff"; } QString buttonSecondaryBorderColor() const override { @@ -235,7 +236,7 @@ class StratoTheme : public BaseTheme { } QString buttonPrimaryHoverColor() const override { - return "#115EA3"; + return "#05ec8cff"; } QString buttonSecondaryHoverColor() const override { @@ -243,7 +244,7 @@ class StratoTheme : public BaseTheme { } QString buttonPrimaryPressedColor() const override { - return "#0C3B5E"; + return "#b8a850ff"; } QString buttonSecondaryPressedColor() const override { @@ -330,9 +331,6 @@ class StratoTheme : public BaseTheme { return "#E6F9FC"; } - -private: - StratoTheme() {} }; } #endif // _STRATOTHEME_H \ No newline at end of file diff --git a/src/libsync/whitelabeltheme.h b/src/libsync/whitelabeltheme.h index 6c718f641b0ca..b31ec7e798be7 100644 --- a/src/libsync/whitelabeltheme.h +++ b/src/libsync/whitelabeltheme.h @@ -1,6 +1,7 @@ #ifndef WHITELABELTHEME_H #define WHITELABELTHEME_H -#define WHITELABEL_IONOS +// #define WHITELABEL_IONOS +#define WHITELABEL_STRATO #include "basetheme.h" #include "stratotheme.h" @@ -8,16 +9,9 @@ namespace OCC { -// #if defined(WHITELABEL_STRATO) -// using WL = StratoTheme; -// #elif defined(WHITELABEL_IONOS) -// using WL = IonosTheme; -// #else -// using WL = BaseTheme; -// #endif #if defined(WHITELABEL_IONOS) - static IonosTheme WLTheme; + static IonosTheme WLTheme; #elif defined(WHITELABEL_STRATO) static StratoTheme WLTheme; #else @@ -27,35 +21,3 @@ namespace OCC { } // namespace OCC #endif // WHITELABELTHEME_H - - -// #ifndef WHITELABELTHEME_H -// #define WHITELABELTHEME_H -// #define WHITELABEL_IONOS -// #include "basetheme.h" -// #include "ionostheme.h" -// #include "stratotheme.h" - -// namespace OCC { - -// class WhitelabelTheme { -// public: -// static BaseTheme& instance() { -// // This selection happens entirely at compile time -// #if defined(WHITELABEL_IONOS) -// static IonosTheme theme; -// #elif defined(WHITELABEL_STRATO) -// static StratoTheme theme; -// // #else -// // static BaseTheme theme; -// #endif -// return theme; -// } - -// private: -// WhitelabelTheme() = default; // prevent instantiation -// }; - -// } // namespace OCC - -// #endif // WHITELABELTHEME_H From 23f99dc21346b031aa10de0542e464aa7b9117a2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Christopher=20H=C3=A4tty?= Date: Tue, 21 Oct 2025 09:49:18 +0200 Subject: [PATCH 292/371] SES-333 fixed call to Theme --- src/gui/CMakeLists.txt | 4 +- src/gui/accountsettings.cpp | 96 ++++---- src/gui/buttonstyle.h | 72 +++--- src/gui/caseclashfilenamedialog.cpp | 28 +-- src/gui/conflictdialog.cpp | 18 +- src/gui/creds/webflowcredentialsdialog.cpp | 12 +- src/gui/foldercreationdialog.cpp | 16 +- src/gui/folderstatusdelegate.cpp | 34 +-- src/gui/folderstatusview.cpp | 2 +- src/gui/folderwizard.cpp | 212 +++++++++--------- src/gui/generalsettings.cpp | 52 ++--- src/gui/ignorelisttablewidget.cpp | 74 +++--- src/gui/invalidfilenamedialog.cpp | 22 +- src/gui/linkbutton.cpp | 6 +- src/gui/main.cpp | 2 +- src/gui/owncloudgui.cpp | 2 +- src/gui/pushbuttonstylehelper.cpp | 6 +- src/gui/selectivesyncdialog.cpp | 68 +++--- src/gui/sessnackbar.cpp | 6 +- src/gui/settingsdialog.cpp | 24 +- src/gui/systray.cpp | 10 +- src/gui/tray/activitylistmodel.cpp | 6 +- src/gui/tray/usermodel.cpp | 14 +- src/gui/wizard/dataprotectionpage.cpp | 10 +- src/gui/wizard/dataprotectionsettingspage.cpp | 52 ++--- src/gui/wizard/flow2authwidget.cpp | 20 +- src/gui/wizard/owncloudadvancedsetuppage.cpp | 118 +++++----- src/gui/wizard/owncloudwizard.cpp | 2 +- src/gui/wizard/slideshow.cpp | 12 +- 29 files changed, 500 insertions(+), 500 deletions(-) diff --git a/src/gui/CMakeLists.txt b/src/gui/CMakeLists.txt index cf1ff7a8aaa9f..193e4af0f0f55 100644 --- a/src/gui/CMakeLists.txt +++ b/src/gui/CMakeLists.txt @@ -3,7 +3,7 @@ find_package(Qt${QT_MAJOR_VERSION} REQUIRED COMPONENTS Widgets Svg Qml Quick Qui find_package(KF6Archive REQUIRED) find_package(KF6GuiAddons) -if (NOT TARGET Qt::GuiPrivate) +if (NOT TARGET Qt::Gui) message(FATAL_ERROR "Could not find GuiPrivate component of Qt. It might be shipped as a separate package, please check that.") endif() @@ -592,7 +592,7 @@ target_link_libraries(nextcloudCore PUBLIC Nextcloud::sync Qt::Widgets - Qt::GuiPrivate + Qt::Gui Qt::Svg Qt::Network Qt::Xml diff --git a/src/gui/accountsettings.cpp b/src/gui/accountsettings.cpp index 16e02924f1aee..f0352acf9848c 100644 --- a/src/gui/accountsettings.cpp +++ b/src/gui/accountsettings.cpp @@ -181,7 +181,7 @@ AccountSettings::AccountSettings(AccountState *accountState, QWidget *parent) { _ui->setupUi(this); this->setAutoFillBackground(true); - setPalette(QPalette(QPalette::Window, WhitelabelTheme::instance().dialogBackgroundColor())); + setPalette(QPalette(QPalette::Window, WLTheme.dialogBackgroundColor())); _model->setAccountState(_accountState); _model->setParent(this); @@ -191,7 +191,7 @@ AccountSettings::AccountSettings(AccountState *accountState, QWidget *parent) // Connect styleChanged events to our widgets, so they can adapt (Dark-/Light-Mode switching) connect(this, &AccountSettings::styleChanged, delegate, &FolderStatusDelegate::slotStyleChanged); - _ui->_folderList->setFont(WhitelabelTheme::instance().settingsFontDefault()); + _ui->_folderList->setFont(WLTheme.settingsFontDefault()); _ui->_folderList->header()->hide(); _ui->_folderList->setItemDelegate(delegate); @@ -214,7 +214,7 @@ AccountSettings::AccountSettings(AccountState *accountState, QWidget *parent) fpSettingsLayout->addWidget(fpSettingsWidget); fileProviderTab->setLayout(fpSettingsLayout); - _ui->tabWidget->setStyleSheet(QStringLiteral("QTabWidget::pane { background-color: %1; }").arg(WhitelabelTheme::instance().white())); + _ui->tabWidget->setStyleSheet(QStringLiteral("QTabWidget::pane { background-color: %1; }").arg(WLTheme.white())); _ui->tabWidget->tabBar()->setStyleSheet("QTabBar::tab {\ color: #000000;\ }\ @@ -584,7 +584,7 @@ void AccountSettings::openIgnoredFilesDialog(const QString & absFolderPath) const QString ignoreFile{absFolderPath + ".sync-exclude.lst"}; const auto layout = new QVBoxLayout(); const auto ignoreListWidget = new IgnoreListTableWidget(this); - ignoreListWidget->setFont(WhitelabelTheme::instance().settingsFont()); + ignoreListWidget->setFont(WLTheme.settingsFont()); ignoreListWidget->readIgnoreFile(ignoreFile); layout->addWidget(ignoreListWidget); @@ -603,7 +603,7 @@ void AccountSettings::openIgnoredFilesDialog(const QString & absFolderPath) }); connect(buttonBox, &QDialogButtonBox::rejected, dialog, &QDialog::close); - dialog->setPalette(QPalette(QPalette::Window, WhitelabelTheme::instance().white())); + dialog->setPalette(QPalette(QPalette::Window, WLTheme.white())); dialog->setWindowFlags(windowFlags() & ~Qt::WindowContextHelpButtonHint); dialog->open(); @@ -725,14 +725,14 @@ void AccountSettings::styleCustomContextMenu(QMenu *menu) const "border-radius: 8px; " "}" ).arg( - WhitelabelTheme::instance().white(), - WhitelabelTheme::instance().menuBorderColor(), - WhitelabelTheme::instance().menuTextColor(), - WhitelabelTheme::instance().menuSelectedItemColor(), - WhitelabelTheme::instance().menuBorderRadius(), - WhitelabelTheme::instance().contextMenuFont(), - WhitelabelTheme::instance().settingsTextSize(), - WhitelabelTheme::instance().settingsTextWeight() + WLTheme.white(), + WLTheme.menuBorderColor(), + WLTheme.menuTextColor(), + WLTheme.menuSelectedItemColor(), + WLTheme.menuBorderRadius(), + WLTheme.contextMenuFont(), + WLTheme.settingsTextSize(), + WLTheme.settingsTextWeight() ) ); } @@ -982,13 +982,13 @@ void AccountSettings::slotRemoveCurrentFolder() messageBox->setStyleSheet( QStringLiteral("QMessageBox QLabel { %1; } QDialog { background-color: %2; }").arg( - WhitelabelTheme::instance().fontConfigurationCss( - WhitelabelTheme::instance().settingsFont(), - WhitelabelTheme::instance().settingsTextSize(), - WhitelabelTheme::instance().settingsTextWeight(), - WhitelabelTheme::instance().titleColor() + WLTheme.fontConfigurationCss( + WLTheme.settingsFont(), + WLTheme.settingsTextSize(), + WLTheme.settingsTextWeight(), + WLTheme.titleColor() ), - WhitelabelTheme::instance().dialogBackgroundColor() + WLTheme.dialogBackgroundColor() ) ); @@ -1117,13 +1117,13 @@ void AccountSettings::slotDisableVfsCurrentFolder() msgBox->setStyleSheet(QStringLiteral( "QMessageBox QLabel { %1 background-color: %2; }").arg( - WhitelabelTheme::instance().fontConfigurationCss( - WhitelabelTheme::instance().settingsFont(), - WhitelabelTheme::instance().settingsTextSize(), - WhitelabelTheme::instance().settingsTextWeight(), - WhitelabelTheme::instance().titleColor() + WLTheme.fontConfigurationCss( + WLTheme.settingsFont(), + WLTheme.settingsTextSize(), + WLTheme.settingsTextWeight(), + WLTheme.titleColor() ), - WhitelabelTheme::instance().white() + WLTheme.white() ) ); @@ -1341,11 +1341,11 @@ void AccountSettings::slotEnableCurrentFolder(bool terminate) msgbox->setStyleSheet( QStringLiteral("QMessageBox QLabel { %1; }").arg( - WhitelabelTheme::instance().fontConfigurationCss( - WhitelabelTheme::instance().settingsFont(), - WhitelabelTheme::instance().settingsTextSize(), - WhitelabelTheme::instance().settingsTextWeight(), - WhitelabelTheme::instance().titleColor() + WLTheme.fontConfigurationCss( + WLTheme.settingsFont(), + WLTheme.settingsTextSize(), + WLTheme.settingsTextWeight(), + WLTheme.titleColor() ) ) ); @@ -1832,40 +1832,40 @@ void AccountSettings::customizeStyle() _ui->connectLabel->setText(msg); const auto color = palette().highlight().color(); - _ui->quotaProgressBar->setStyleSheet(progressBarStyle().arg(WhitelabelTheme::instance().dialogBackgroundColor(), color.name())); + _ui->quotaProgressBar->setStyleSheet(progressBarStyle().arg(WLTheme.dialogBackgroundColor(), color.name())); _ui->quotaInfoLabel->setStyleSheet( - WhitelabelTheme::instance().fontConfigurationCss( - WhitelabelTheme::instance().settingsFont(), - WhitelabelTheme::instance().settingsTextSize(), - WhitelabelTheme::instance().settingsTitleWeight600(), - WhitelabelTheme::instance().titleColor() + WLTheme.fontConfigurationCss( + WLTheme.settingsFont(), + WLTheme.settingsTextSize(), + WLTheme.settingsTitleWeight600(), + WLTheme.titleColor() ) ); _ui->quotaInfo2Label->setStyleSheet( - WhitelabelTheme::instance().fontConfigurationCss( - WhitelabelTheme::instance().settingsFont(), - WhitelabelTheme::instance().settingsSmallTextSize(), - WhitelabelTheme::instance().settingsTextWeight(), - WhitelabelTheme::instance().titleColor() + WLTheme.fontConfigurationCss( + WLTheme.settingsFont(), + WLTheme.settingsSmallTextSize(), + WLTheme.settingsTextWeight(), + WLTheme.titleColor() ) ); _ui->_folderList->setStyleSheet( QStringLiteral("background: %1; %2;").arg( - WhitelabelTheme::instance().white(), - WhitelabelTheme::instance().fontConfigurationCss( - WhitelabelTheme::instance().settingsFont(), - WhitelabelTheme::instance().settingsTextSize(), - WhitelabelTheme::instance().settingsTextWeight(), - WhitelabelTheme::instance().titleColor() + WLTheme.white(), + WLTheme.fontConfigurationCss( + WLTheme.settingsFont(), + WLTheme.settingsTextSize(), + WLTheme.settingsTextWeight(), + WLTheme.titleColor() ) ) ); #if defined(Q_OS_MAC) - _ui->selectiveSyncLabel->setStyleSheet(QString("color: %1;").arg(WhitelabelTheme::instance().black())); + _ui->selectiveSyncLabel->setStyleSheet(QString("color: %1;").arg(WLTheme.black())); _ui->horizontalLayout->setSpacing(16); #endif diff --git a/src/gui/buttonstyle.h b/src/gui/buttonstyle.h index e7af8dfebf188..e531ec139c5fc 100644 --- a/src/gui/buttonstyle.h +++ b/src/gui/buttonstyle.h @@ -69,67 +69,67 @@ class PrimaryButtonStyle : public ButtonStyle { // Default QString buttonDefaultColor() const override { - return OCC::WhitelabelTheme::instance().buttonPrimaryColor(); + return OCC::WLTheme.buttonPrimaryColor(); } QString buttonDefaultBorderColor() const override { - return OCC::WhitelabelTheme::instance().buttonPrimaryColor(); + return OCC::WLTheme.buttonPrimaryColor(); } //Hover QString buttonHoverColor() const override { - return OCC::WhitelabelTheme::instance().buttonPrimaryHoverColor(); + return OCC::WLTheme.buttonPrimaryHoverColor(); } QString buttonHoverBorderColor() const override { - return OCC::WhitelabelTheme::instance().buttonPrimaryHoverColor(); + return OCC::WLTheme.buttonPrimaryHoverColor(); } // Pressed QString buttonPressedColor() const override { - return OCC::WhitelabelTheme::instance().buttonPrimaryPressedColor(); + return OCC::WLTheme.buttonPrimaryPressedColor(); } QString buttonPressedBorderColor() const override { - return OCC::WhitelabelTheme::instance().buttonPrimaryPressedColor(); + return OCC::WLTheme.buttonPrimaryPressedColor(); } // Disabled QString buttonDisabledColor() const override { - return OCC::WhitelabelTheme::instance().buttonDisabledColor(); + return OCC::WLTheme.buttonDisabledColor(); } QString buttonDisabledBorderColor() const override { - return OCC::WhitelabelTheme::instance().buttonDisabledColor(); + return OCC::WLTheme.buttonDisabledColor(); } // Focused QString buttonFocusedColor() const override { - return OCC::WhitelabelTheme::instance().buttonPrimaryColor(); + return OCC::WLTheme.buttonPrimaryColor(); } QString buttonFocusedBorderColor() const override { - return OCC::WhitelabelTheme::instance().black(); + return OCC::WLTheme.black(); } // Font QString buttonDisabledFontColor() const override { - return OCC::WhitelabelTheme::instance().buttonDisabledFontColor(); + return OCC::WLTheme.buttonDisabledFontColor(); } QString buttonFontColor() const override { - return OCC::WhitelabelTheme::instance().white(); + return OCC::WLTheme.white(); } }; @@ -152,67 +152,67 @@ class SecondaryButtonStyle : public ButtonStyle { // Default QString buttonDefaultColor() const override { - return OCC::WhitelabelTheme::instance().white(); + return OCC::WLTheme.white(); } QString buttonDefaultBorderColor() const override { - return OCC::WhitelabelTheme::instance().buttonSecondaryBorderColor(); + return OCC::WLTheme.buttonSecondaryBorderColor(); } // Hover QString buttonHoverColor() const override { - return OCC::WhitelabelTheme::instance().buttonSecondaryHoverColor(); + return OCC::WLTheme.buttonSecondaryHoverColor(); } QString buttonHoverBorderColor() const override { - return OCC::WhitelabelTheme::instance().buttonSecondaryBorderColor(); + return OCC::WLTheme.buttonSecondaryBorderColor(); } // Pressed QString buttonPressedColor() const override { - return OCC::WhitelabelTheme::instance().buttonSecondaryPressedColor(); + return OCC::WLTheme.buttonSecondaryPressedColor(); } QString buttonPressedBorderColor() const override { - return OCC::WhitelabelTheme::instance().buttonSecondaryBorderColor(); + return OCC::WLTheme.buttonSecondaryBorderColor(); } // Disabled QString buttonDisabledColor() const override { - return OCC::WhitelabelTheme::instance().buttonDisabledColor(); + return OCC::WLTheme.buttonDisabledColor(); } QString buttonDisabledBorderColor() const override { - return OCC::WhitelabelTheme::instance().buttonDisabledColor(); + return OCC::WLTheme.buttonDisabledColor(); } // Focused QString buttonFocusedColor() const override { - return OCC::WhitelabelTheme::instance().white(); + return OCC::WLTheme.white(); } QString buttonFocusedBorderColor() const override { - return OCC::WhitelabelTheme::instance().black(); + return OCC::WLTheme.black(); } // Font QString buttonDisabledFontColor() const override { - return OCC::WhitelabelTheme::instance().buttonDisabledFontColor(); + return OCC::WLTheme.buttonDisabledFontColor(); } QString buttonFontColor() const override { - return OCC::WhitelabelTheme::instance().black(); + return OCC::WLTheme.black(); } }; @@ -235,67 +235,67 @@ class MoreOptionsButtonStyle : public ButtonStyle { // Default QString buttonDefaultColor() const override { - return OCC::WhitelabelTheme::instance().white(); + return OCC::WLTheme.white(); } QString buttonDefaultBorderColor() const override { - return OCC::WhitelabelTheme::instance().white(); + return OCC::WLTheme.white(); } // Hover QString buttonHoverColor() const override { - return OCC::WhitelabelTheme::instance().buttonHoveredColor(); + return OCC::WLTheme.buttonHoveredColor(); } QString buttonHoverBorderColor() const override { - return OCC::WhitelabelTheme::instance().buttonHoveredColor(); + return OCC::WLTheme.buttonHoveredColor(); } // Pressed QString buttonPressedColor() const override { - return OCC::WhitelabelTheme::instance().buttonPressedColor(); + return OCC::WLTheme.buttonPressedColor(); } QString buttonPressedBorderColor() const override { - return OCC::WhitelabelTheme::instance().buttonPressedColor(); + return OCC::WLTheme.buttonPressedColor(); } // Disabled QString buttonDisabledColor() const override { - return OCC::WhitelabelTheme::instance().buttonDisabledColor(); + return OCC::WLTheme.buttonDisabledColor(); } QString buttonDisabledBorderColor() const override { - return OCC::WhitelabelTheme::instance().buttonDisabledColor(); + return OCC::WLTheme.buttonDisabledColor(); } // Focused QString buttonFocusedColor() const override { - return OCC::WhitelabelTheme::instance().white(); + return OCC::WLTheme.white(); } QString buttonFocusedBorderColor() const override { - return OCC::WhitelabelTheme::instance().black(); + return OCC::WLTheme.black(); } // Font QString buttonDisabledFontColor() const override { - return OCC::WhitelabelTheme::instance().buttonDisabledFontColor(); + return OCC::WLTheme.buttonDisabledFontColor(); } QString buttonFontColor() const override { - return OCC::WhitelabelTheme::instance().black(); + return OCC::WLTheme.black(); } }; } diff --git a/src/gui/caseclashfilenamedialog.cpp b/src/gui/caseclashfilenamedialog.cpp index 92b799716f6bf..371854d1d8bf4 100644 --- a/src/gui/caseclashfilenamedialog.cpp +++ b/src/gui/caseclashfilenamedialog.cpp @@ -303,13 +303,13 @@ void CaseClashFilenameDialog::customizeStyle() { this->setStyleSheet( QStringLiteral("QDialog {background-color: %1; color: %2;} QLabel{ %3;}").arg( - WhitelabelTheme::instance().dialogBackgroundColor(), - WhitelabelTheme::instance().black(), - WhitelabelTheme::instance().fontConfigurationCss( - WhitelabelTheme::instance().settingsFont(), - WhitelabelTheme::instance().settingsTextSize(), - WhitelabelTheme::instance().settingsTextWeight(), - WhitelabelTheme::instance().titleColor() + WLTheme.dialogBackgroundColor(), + WLTheme.black(), + WLTheme.fontConfigurationCss( + WLTheme.settingsFont(), + WLTheme.settingsTextSize(), + WLTheme.settingsTextWeight(), + WLTheme.titleColor() ) ) ); @@ -318,13 +318,13 @@ void CaseClashFilenameDialog::customizeStyle() QStringLiteral( "color: %1; font-family: %2; font-size: %3; font-weight: %4; border-radius: %5; border: 1px " "solid %6; padding: 0px 12px; text-align: left; vertical-align: middle; height: 40px; background: %7; ").arg( - WhitelabelTheme::instance().folderWizardPathColor(), - WhitelabelTheme::instance().settingsFont(), - WhitelabelTheme::instance().settingsTextSize(), - WhitelabelTheme::instance().settingsTextWeight(), - WhitelabelTheme::instance().buttonRadius(), - WhitelabelTheme::instance().menuBorderColor(), - WhitelabelTheme::instance().white() + WLTheme.folderWizardPathColor(), + WLTheme.settingsFont(), + WLTheme.settingsTextSize(), + WLTheme.settingsTextWeight(), + WLTheme.buttonRadius(), + WLTheme.menuBorderColor(), + WLTheme.white() ) ); diff --git a/src/gui/conflictdialog.cpp b/src/gui/conflictdialog.cpp index 8dbaff9a57012..fda1ac8db85ab 100644 --- a/src/gui/conflictdialog.cpp +++ b/src/gui/conflictdialog.cpp @@ -191,13 +191,13 @@ void ConflictDialog::customizeStyle() { this->setStyleSheet( QStringLiteral("QDialog {background-color: %1; color: %2;} QLabel{ %3;}").arg( - WhitelabelTheme::instance().dialogBackgroundColor(), - WhitelabelTheme::instance().black(), - WhitelabelTheme::instance().fontConfigurationCss( - WhitelabelTheme::instance().settingsFont(), - WhitelabelTheme::instance().settingsTextSize(), - WhitelabelTheme::instance().settingsTextWeight(), - WhitelabelTheme::instance().titleColor() + WLTheme.dialogBackgroundColor(), + WLTheme.black(), + WLTheme.fontConfigurationCss( + WLTheme.settingsFont(), + WLTheme.settingsTextSize(), + WLTheme.settingsTextWeight(), + WLTheme.titleColor() ) ) ); @@ -207,11 +207,11 @@ void ConflictDialog::customizeStyle() _ui->buttonBox->setLayoutDirection(Qt::LeftToRight); _ui->localVersionRadio->setStyleSheet( - QStringLiteral("QCheckBox {color: %1;}").arg(WhitelabelTheme::instance().black()) + QStringLiteral("QCheckBox {color: %1;}").arg(WLTheme.black()) ); _ui->remoteVersionRadio->setStyleSheet( - QStringLiteral("QCheckBox {color: %1;}").arg(WhitelabelTheme::instance().black()) + QStringLiteral("QCheckBox {color: %1;}").arg(WLTheme.black()) ); #endif } diff --git a/src/gui/creds/webflowcredentialsdialog.cpp b/src/gui/creds/webflowcredentialsdialog.cpp index 6a1430fbd1013..07131815afcbd 100644 --- a/src/gui/creds/webflowcredentialsdialog.cpp +++ b/src/gui/creds/webflowcredentialsdialog.cpp @@ -24,7 +24,7 @@ WebFlowCredentialsDialog::WebFlowCredentialsDialog(Account *account, bool useFlo { setWindowFlags(windowFlags() & ~Qt::WindowContextHelpButtonHint); - setStyleSheet(QStringLiteral("QDialog { background-color: %1; }").arg(WhitelabelTheme::instance().dialogBackgroundColor())); + setStyleSheet(QStringLiteral("QDialog { background-color: %1; }").arg(WLTheme.dialogBackgroundColor())); setFixedWidth(646); setSizePolicy(QSizePolicy(QSizePolicy::Minimum, QSizePolicy::Minimum)); @@ -44,11 +44,11 @@ WebFlowCredentialsDialog::WebFlowCredentialsDialog(Account *account, bool useFlo _infoLabel->setAlignment(Qt::AlignCenter); _infoLabel->setWordWrap(true); _infoLabel->setContentsMargins(0, 32, 0, 0); - _infoLabel->setStyleSheet(WhitelabelTheme::instance().fontConfigurationCss( - WhitelabelTheme::instance().settingsFont(), - WhitelabelTheme::instance().settingsTextSize(), - WhitelabelTheme::instance().settingsTitleWeight600(), - WhitelabelTheme::instance().titleColor() + _infoLabel->setStyleSheet(WLTheme.fontConfigurationCss( + WLTheme.settingsFont(), + WLTheme.settingsTextSize(), + WLTheme.settingsTitleWeight600(), + WLTheme.titleColor() )); _containerLayout->addWidget(_infoLabel); diff --git a/src/gui/foldercreationdialog.cpp b/src/gui/foldercreationdialog.cpp index bcd03237dba72..2cb44c3db770e 100644 --- a/src/gui/foldercreationdialog.cpp +++ b/src/gui/foldercreationdialog.cpp @@ -112,7 +112,7 @@ void FolderCreationDialog::customizeStyle() ui->buttonBox->setLayoutDirection(Qt::RightToLeft); this->setAutoFillBackground(true); - setPalette(QPalette(QPalette::Window, WhitelabelTheme::instance().dialogBackgroundColor())); + setPalette(QPalette(QPalette::Window, WLTheme.dialogBackgroundColor())); QPushButton *okButton = ui->buttonBox->button(QDialogButtonBox::Ok); okButton->setProperty("buttonStyle", QVariant::fromValue(OCC::ButtonStyleName::Primary)); @@ -124,13 +124,13 @@ void FolderCreationDialog::customizeStyle() QStringLiteral( "color: %1; font-family: %2; font-size: %3; font-weight: %4; border-radius: %5; border: 1px " "solid %6; padding: 0px 12px; text-align: left; vertical-align: middle; height: 40px; background: %7; ") - .arg(WhitelabelTheme::instance().folderWizardPathColor(), - WhitelabelTheme::instance().settingsFont(), - WhitelabelTheme::instance().settingsTextSize(), - WhitelabelTheme::instance().settingsTextWeight(), - WhitelabelTheme::instance().buttonRadius(), - WhitelabelTheme::instance().menuBorderColor(), - WhitelabelTheme::instance().white() + .arg(WLTheme.folderWizardPathColor(), + WLTheme.settingsFont(), + WLTheme.settingsTextSize(), + WLTheme.settingsTextWeight(), + WLTheme.buttonRadius(), + WLTheme.menuBorderColor(), + WLTheme.white() ) ); diff --git a/src/gui/folderstatusdelegate.cpp b/src/gui/folderstatusdelegate.cpp index d867fd3e47476..1679655146824 100644 --- a/src/gui/folderstatusdelegate.cpp +++ b/src/gui/folderstatusdelegate.cpp @@ -44,8 +44,8 @@ namespace OCC { inline static QFont makeAliasFont(const QFont &normalFont) { QFont aliasFont = normalFont; - aliasFont.setWeight(WhitelabelTheme::instance().settingsTitleWeightDemiBold()); - aliasFont.setPixelSize(WhitelabelTheme::instance().settingsBigTitlePixel()); + aliasFont.setWeight(WLTheme.settingsTitleWeightDemiBold()); + aliasFont.setPixelSize(WLTheme.settingsBigTitlePixel()); return aliasFont; } @@ -70,7 +70,7 @@ QSize FolderStatusDelegate::sizeHint(const QStyleOptionViewItem &option, const QModelIndex &index) const { QFont font = QFont(option.font); - font.setPixelSize(WhitelabelTheme::instance().settingsTextPixel()); + font.setPixelSize(WLTheme.settingsTextPixel()); QFont aliasFont = makeAliasFont(font); QFontMetrics fm(font); @@ -125,8 +125,8 @@ int FolderStatusDelegate::rootFolderHeightWithoutErrors(const QFontMetrics &fm, void FolderStatusDelegate::drawAddButton(QPainter *painter, const QStyleOptionViewItem &option, const QModelIndex &index) const { QFont titleFont = option.font; - titleFont.setWeight(WhitelabelTheme::instance().settingsTitleWeightDemiBold()); - titleFont.setPixelSize(WhitelabelTheme::instance().settingsTitlePixel()); + titleFont.setWeight(WLTheme.settingsTitleWeightDemiBold()); + titleFont.setPixelSize(WLTheme.settingsTitlePixel()); QFontMetrics titleTextFm(titleFont); const auto baseDistanceForCalculus = titleTextFm.height() / 2; @@ -137,7 +137,7 @@ void FolderStatusDelegate::drawAddButton(QPainter *painter, const QStyleOptionVi auto iconBox = option.rect; iconBox.setTop(iconBox.top() + baseDistanceForCalculus); - iconBox.setBottom(iconBox.top() + WhitelabelTheme::instance().treeViewIconSize()); + iconBox.setBottom(iconBox.top() + WLTheme.treeViewIconSize()); iconBox.setLeft(iconBox.left() + baseDistanceForCalculus); iconBox.setWidth(iconBox.height()); @@ -155,7 +155,7 @@ void FolderStatusDelegate::drawAddButton(QPainter *painter, const QStyleOptionVi auto titleText = addFolderText(); auto subtitleText = addInfoText(); - auto addIcon = QIcon(WhitelabelTheme::instance().liveBackupPlusIcon()); + auto addIcon = QIcon(WLTheme.liveBackupPlusIcon()); const auto addPixmap = addIcon.pixmap(iconBox.size(), QIcon::Normal); painter->save(); @@ -178,7 +178,7 @@ void FolderStatusDelegate::paint(QPainter *painter, const QStyleOptionViewItem & { QStyleOptionViewItem opt = option; QFont font = opt.font; - font.setPixelSize(WhitelabelTheme::instance().settingsTextPixel()); + font.setPixelSize(WLTheme.settingsTextPixel()); opt.font = font; QStyledItemDelegate::paint(painter, opt, index); @@ -241,7 +241,7 @@ void FolderStatusDelegate::paint(QPainter *painter, const QStyleOptionViewItem & localPathRect.setTop(remotePathRect.bottom() + margin); localPathRect.setBottom(localPathRect.top() + subFm.height()); - iconRect.setBottom(iconRect.top() + WhitelabelTheme::instance().treeViewIconSize()); + iconRect.setBottom(iconRect.top() + WLTheme.treeViewIconSize()); iconRect.setWidth(iconRect.height()); const auto nextToIcon = iconRect.right() + aliasMargin; @@ -325,13 +325,13 @@ void FolderStatusDelegate::paint(QPainter *painter, const QStyleOptionViewItem & }; if (!conflictTexts.isEmpty()) { - drawTextBox(conflictTexts, QColor(WhitelabelTheme::instance().warningColor()), QColor(WhitelabelTheme::instance().warningBorderColor())); + drawTextBox(conflictTexts, QColor(WLTheme.warningColor()), QColor(WLTheme.warningBorderColor())); } if (!errorTexts.isEmpty()) { - drawTextBox(errorTexts, QColor(WhitelabelTheme::instance().errorColor()), QColor(WhitelabelTheme::instance().errorBorderColor())); + drawTextBox(errorTexts, QColor(WLTheme.errorColor()), QColor(WLTheme.errorBorderColor())); } if (!infoTexts.isEmpty()) { - drawTextBox(infoTexts, QColor(WhitelabelTheme::instance().infoColor()), QColor(WhitelabelTheme::instance().infoBorderColor())); + drawTextBox(infoTexts, QColor(WLTheme.infoColor()), QColor(WLTheme.infoBorderColor())); } // Sync File Progress Bar: Show it if syncFile is not empty. @@ -353,8 +353,8 @@ void FolderStatusDelegate::drawSyncProgressBar(QPainter *painter, const QStyleOp const auto overallWidth = option.rect.right() - aliasMargin - optionsButtonVisualRect.width() - nextToIcon; QFont progressFont(option.font); - progressFont.setPixelSize(WhitelabelTheme::instance().settingsTextPixel()); - progressFont.setWeight(WhitelabelTheme::instance().settingsTitleWeightNormal()); + progressFont.setPixelSize(WLTheme.settingsTextPixel()); + progressFont.setWeight(WLTheme.settingsTitleWeightNormal()); painter->save(); // Overall Progress Bar. @@ -372,7 +372,7 @@ void FolderStatusDelegate::drawSyncProgressBar(QPainter *painter, const QStyleOp progressBarOpt.state = QStyle::StateFlag::State_Horizontal; progressBarOpt.rect = QStyle::visualRect(option.direction, option.rect, progressBarRect); QPalette paletteTmp = progressBarOpt.palette; - paletteTmp.setColor(QPalette::Base, WhitelabelTheme::instance().white()); + paletteTmp.setColor(QPalette::Base, WLTheme.white()); progressBarOpt.palette = paletteTmp; #ifdef Q_OS_MACOS @@ -485,7 +485,7 @@ bool FolderStatusDelegate::editorEvent(QEvent *event, QAbstractItemModel *model, QRect FolderStatusDelegate::optionsButtonRect(QRect within, Qt::LayoutDirection direction) { - QFont font = QFont(WhitelabelTheme::instance().settingsFont()); + QFont font = QFont(WLTheme.settingsFont()); QFont aliasFont = makeAliasFont(font); QFontMetrics fm(font); QFontMetrics aliasFm(aliasFont); @@ -507,7 +507,7 @@ QRect FolderStatusDelegate::optionsButtonRect(QRect within, Qt::LayoutDirection QRect FolderStatusDelegate::errorsListRect(QRect within) { - QFont font = QFont(WhitelabelTheme::instance().settingsFont()); + QFont font = QFont(WLTheme.settingsFont()); QFont aliasFont = makeAliasFont(font); QFontMetrics fm(font); QFontMetrics aliasFm(aliasFont); diff --git a/src/gui/folderstatusview.cpp b/src/gui/folderstatusview.cpp index 01c809282b808..c97ac29a888e7 100644 --- a/src/gui/folderstatusview.cpp +++ b/src/gui/folderstatusview.cpp @@ -21,7 +21,7 @@ namespace OCC { FolderStatusView::FolderStatusView(QWidget *parent) : QTreeView(parent) { #ifdef Q_OS_MAC - setPalette(QPalette(QPalette::ButtonText, WhitelabelTheme::instance().white())); + setPalette(QPalette(QPalette::ButtonText, WLTheme.white())); #endif } diff --git a/src/gui/folderwizard.cpp b/src/gui/folderwizard.cpp index 10185793a91b4..eaab82a77a655 100644 --- a/src/gui/folderwizard.cpp +++ b/src/gui/folderwizard.cpp @@ -194,27 +194,27 @@ void FolderWizardLocalPath::changeEvent(QEvent *e) void FolderWizardLocalPath::changeStyle() { - _ui.title->setStyleSheet(WhitelabelTheme::instance().fontConfigurationCss( - WhitelabelTheme::instance().settingsFont(), - WhitelabelTheme::instance().settingsBigTitleSize(), - WhitelabelTheme::instance().settingsTitleWeight600(), - WhitelabelTheme::instance().titleColor())); + _ui.title->setStyleSheet(WLTheme.fontConfigurationCss( + WLTheme.settingsFont(), + WLTheme.settingsBigTitleSize(), + WLTheme.settingsTitleWeight600(), + WLTheme.titleColor())); _ui.title->setProperty("text", tr("Add Folder Sync")); - _ui.subTitle->setStyleSheet(WhitelabelTheme::instance().fontConfigurationCss( - WhitelabelTheme::instance().settingsFont(), - WhitelabelTheme::instance().settingsTextSize(), - WhitelabelTheme::instance().settingsTitleWeight600(), - WhitelabelTheme::instance().folderWizardSubtitleColor())); + _ui.subTitle->setStyleSheet(WLTheme.fontConfigurationCss( + WLTheme.settingsFont(), + WLTheme.settingsTextSize(), + WLTheme.settingsTitleWeight600(), + WLTheme.folderWizardSubtitleColor())); _ui.subTitle->setProperty("text", tr("Step 1 of 3: Select local folder")); - _ui.description->setStyleSheet(WhitelabelTheme::instance().fontConfigurationCss( - WhitelabelTheme::instance().settingsFont(), - WhitelabelTheme::instance().settingsTextSize(), - WhitelabelTheme::instance().settingsTextWeight(), - WhitelabelTheme::instance().titleColor())); + _ui.description->setStyleSheet(WLTheme.fontConfigurationCss( + WLTheme.settingsFont(), + WLTheme.settingsTextSize(), + WLTheme.settingsTextWeight(), + WLTheme.titleColor())); _ui.description->setProperty("text", tr("Select a folder on your hard drive that should be permanetly connected to your %1. All files and " @@ -223,13 +223,13 @@ void FolderWizardLocalPath::changeStyle() _ui.localFolderLineEdit->setStyleSheet(QString( "color: %1; font-family: %2; font-size: %3; font-weight: %4; border-radius: %5; border: 1px " "solid %6; padding: 0px 12px; text-align: left; vertical-align: middle; height: 40px; background: %7; ") - .arg(WhitelabelTheme::instance().folderWizardPathColor()) - .arg(WhitelabelTheme::instance().settingsFont()) - .arg(WhitelabelTheme::instance().settingsTextSize()) - .arg(WhitelabelTheme::instance().settingsTextWeight()) - .arg(WhitelabelTheme::instance().buttonRadius()) - .arg(WhitelabelTheme::instance().menuBorderColor()) - .arg(WhitelabelTheme::instance().white()) + .arg(WLTheme.folderWizardPathColor()) + .arg(WLTheme.settingsFont()) + .arg(WLTheme.settingsTextSize()) + .arg(WLTheme.settingsTextWeight()) + .arg(WLTheme.buttonRadius()) + .arg(WLTheme.menuBorderColor()) + .arg(WLTheme.white()) ); _ui.localFolderChooseBtn->setProperty("text", tr("Choose")); @@ -238,11 +238,11 @@ void FolderWizardLocalPath::changeStyle() #if defined(Q_OS_MAC) _ui.localFolderChooseBtn->setStyleSheet( QStringLiteral("QPushButton { margin-left: 5px; margin-top: 12px; height: 40px; width: 80px; %1} ").arg( - WhitelabelTheme::instance().fontConfigurationCss( - WhitelabelTheme::instance().settingsFont(), - WhitelabelTheme::instance().settingsTextSize(), - WhitelabelTheme::instance().settingsTitleWeight500(), - WhitelabelTheme::instance().white() + WLTheme.fontConfigurationCss( + WLTheme.settingsFont(), + WLTheme.settingsTextSize(), + WLTheme.settingsTitleWeight500(), + WLTheme.white() ) ) ); @@ -279,7 +279,7 @@ FolderWizardRemotePath::FolderWizardRemotePath(const AccountPtr &account) _ui.folderTreeWidget->header()->setSectionResizeMode(0, QHeaderView::ResizeToContents); #ifdef Q_OS_MAC - _ui.folderTreeWidget->setPalette(QPalette(WhitelabelTheme::instance().white())); + _ui.folderTreeWidget->setPalette(QPalette(WLTheme.white())); #endif // Make sure that there will be a scrollbar when the contents is too wide @@ -313,13 +313,13 @@ void FolderWizardRemotePath::slotAddRemoteFolder() dlg->setStyleSheet( QStringLiteral("QDialog { %1; background-color: %2; }").arg( - WhitelabelTheme::instance().fontConfigurationCss( - WhitelabelTheme::instance().settingsFont(), - WhitelabelTheme::instance().settingsTextSize(), - WhitelabelTheme::instance().settingsTextWeight(), - WhitelabelTheme::instance().titleColor() + WLTheme.fontConfigurationCss( + WLTheme.settingsFont(), + WLTheme.settingsTextSize(), + WLTheme.settingsTextWeight(), + WLTheme.titleColor() ), - WhitelabelTheme::instance().dialogBackgroundColor() + WLTheme.dialogBackgroundColor() ) ); @@ -327,22 +327,22 @@ void FolderWizardRemotePath::slotAddRemoteFolder() QStringLiteral( "color: %1; font-family: %2; font-size: %3; font-weight: %4; border-radius: %5; border: 1px " "solid %6; padding: 0px 12px; text-align: left; vertical-align: middle; height: 40px; background: %7; ").arg( - WhitelabelTheme::instance().folderWizardPathColor(), - WhitelabelTheme::instance().settingsFont(), - WhitelabelTheme::instance().settingsTextSize(), - WhitelabelTheme::instance().settingsTextWeight(), - WhitelabelTheme::instance().buttonRadius(), - WhitelabelTheme::instance().menuBorderColor(), - WhitelabelTheme::instance().white() + WLTheme.folderWizardPathColor(), + WLTheme.settingsFont(), + WLTheme.settingsTextSize(), + WLTheme.settingsTextWeight(), + WLTheme.buttonRadius(), + WLTheme.menuBorderColor(), + WLTheme.white() ) ); dlg->findChild()->setStyleSheet( - WhitelabelTheme::instance().fontConfigurationCss( - WhitelabelTheme::instance().settingsFont(), - WhitelabelTheme::instance().settingsTextSize(), - WhitelabelTheme::instance().settingsTextWeight(), - WhitelabelTheme::instance().titleColor()) + WLTheme.fontConfigurationCss( + WLTheme.settingsFont(), + WLTheme.settingsTextSize(), + WLTheme.settingsTextWeight(), + WLTheme.titleColor()) ); #ifdef Q_OS_MAC @@ -350,7 +350,7 @@ void FolderWizardRemotePath::slotAddRemoteFolder() buttonBox->button(QDialogButtonBox::Ok)->setStyleSheet( buttonBox->button(QDialogButtonBox::Ok)->styleSheet() + - QStringLiteral(" color: %1; ").arg(WhitelabelTheme::instance().white()) + QStringLiteral(" color: %1; ").arg(WLTheme.white()) ); #endif } @@ -709,27 +709,27 @@ void FolderWizardRemotePath::changeEvent(QEvent *e) void FolderWizardRemotePath::changeStyle() { - _ui.title->setStyleSheet(WhitelabelTheme::instance().fontConfigurationCss( - WhitelabelTheme::instance().settingsFont(), - WhitelabelTheme::instance().settingsBigTitleSize(), - WhitelabelTheme::instance().settingsTitleWeight600(), - WhitelabelTheme::instance().titleColor())); + _ui.title->setStyleSheet(WLTheme.fontConfigurationCss( + WLTheme.settingsFont(), + WLTheme.settingsBigTitleSize(), + WLTheme.settingsTitleWeight600(), + WLTheme.titleColor())); _ui.title->setProperty("text", tr("Add Folder Sync")); - _ui.subTitle->setStyleSheet(WhitelabelTheme::instance().fontConfigurationCss( - WhitelabelTheme::instance().settingsFont(), - WhitelabelTheme::instance().settingsTextSize(), - WhitelabelTheme::instance().settingsTitleWeight600(), - WhitelabelTheme::instance().folderWizardSubtitleColor())); + _ui.subTitle->setStyleSheet(WLTheme.fontConfigurationCss( + WLTheme.settingsFont(), + WLTheme.settingsTextSize(), + WLTheme.settingsTitleWeight600(), + WLTheme.folderWizardSubtitleColor())); _ui.subTitle->setProperty("text", tr("Step 2 of 3: Directory in your %1").arg(Theme::instance()->appNameGUI())); - _ui.description1->setStyleSheet(WhitelabelTheme::instance().fontConfigurationCss( - WhitelabelTheme::instance().settingsFont(), - WhitelabelTheme::instance().settingsTextSize(), - WhitelabelTheme::instance().settingsTextWeight(), - WhitelabelTheme::instance().titleColor())); + _ui.description1->setStyleSheet(WLTheme.fontConfigurationCss( + WLTheme.settingsFont(), + WLTheme.settingsTextSize(), + WLTheme.settingsTextWeight(), + WLTheme.titleColor())); _ui.description1->setProperty("text", tr("Please now select or create a target folder in your %1 where the content should be uploaded and synchronized.").arg(Theme::instance()->appNameGUI())); @@ -737,36 +737,36 @@ void FolderWizardRemotePath::changeStyle() _ui.description2->setProperty("text", tr("Both folders are permanently linked and the respective contents are automatically synchronized and updated.")); - _ui.description2->setStyleSheet(WhitelabelTheme::instance().fontConfigurationCss( - WhitelabelTheme::instance().settingsFont(), - WhitelabelTheme::instance().settingsTextSize(), - WhitelabelTheme::instance().settingsTextWeight(), - WhitelabelTheme::instance().titleColor())); + _ui.description2->setStyleSheet(WLTheme.fontConfigurationCss( + WLTheme.settingsFont(), + WLTheme.settingsTextSize(), + WLTheme.settingsTextWeight(), + WLTheme.titleColor())); _ui.folderEntry->setStyleSheet( QStringLiteral("color: %1; font-family: %2; font-size: %3; font-weight: %4; border-radius: %5; border: 1px " "solid %6; padding: 0px 12px; text-align: left; vertical-align: middle; height: 40px;") - .arg(WhitelabelTheme::instance().folderWizardPathColor()) - .arg(WhitelabelTheme::instance().settingsFont()) - .arg(WhitelabelTheme::instance().settingsTextSize()) - .arg(WhitelabelTheme::instance().settingsTextWeight()) - .arg(WhitelabelTheme::instance().buttonRadius()) - .arg(WhitelabelTheme::instance().menuBorderColor())); + .arg(WLTheme.folderWizardPathColor()) + .arg(WLTheme.settingsFont()) + .arg(WLTheme.settingsTextSize()) + .arg(WLTheme.settingsTextWeight()) + .arg(WLTheme.buttonRadius()) + .arg(WLTheme.menuBorderColor())); _ui.folderTreeWidget->setStyleSheet( QStringLiteral(" %1; background: %2; ").arg( - WhitelabelTheme::instance().fontConfigurationCss( - WhitelabelTheme::instance().settingsFont(), - WhitelabelTheme::instance().settingsTextSize(), - WhitelabelTheme::instance().settingsTextWeight(), - WhitelabelTheme::instance().titleColor() + WLTheme.fontConfigurationCss( + WLTheme.settingsFont(), + WLTheme.settingsTextSize(), + WLTheme.settingsTextWeight(), + WLTheme.titleColor() ), - WhitelabelTheme::instance().white() + WLTheme.white() ) ); _ui.folderTreeWidget->setStyleSheet( - _ui.folderTreeWidget->styleSheet() + QStringLiteral("QTreeWidget { background: %1; }").arg(WhitelabelTheme::instance().white()) + _ui.folderTreeWidget->styleSheet() + QStringLiteral("QTreeWidget { background: %1; }").arg(WLTheme.white()) ); _ui.refreshButton->setProperty("text", tr("Refresh")); @@ -803,34 +803,34 @@ FolderWizardSelectiveSync::FolderWizardSelectiveSync(const AccountPtr &account) QFont f; QFont::Weight w; - f.setFamily(WhitelabelTheme::instance().settingsFont()); + f.setFamily(WLTheme.settingsFont()); f.setWeight( QFont::Weight::Normal); - f.setPixelSize(WhitelabelTheme::instance().settingsTextPixel()); + f.setPixelSize(WLTheme.settingsTextPixel()); _virtualFilesCheckBox->setFont(f); #endif layout->addLayout(_virtualFilesHBox); } - _selectiveSync->setStyleSheet(QStringLiteral(" %1; background: %2; ").arg(WhitelabelTheme::instance().fontConfigurationCss( - WhitelabelTheme::instance().settingsFont(), - WhitelabelTheme::instance().settingsTextSize(), - WhitelabelTheme::instance().settingsTextWeight(), - WhitelabelTheme::instance().titleColor()), - WhitelabelTheme::instance().white())); - - _uiSelectiveSync.title->setStyleSheet(WhitelabelTheme::instance().fontConfigurationCss( - WhitelabelTheme::instance().settingsFont(), - WhitelabelTheme::instance().settingsBigTitleSize(), - WhitelabelTheme::instance().settingsTitleWeight600(), - WhitelabelTheme::instance().titleColor())); + _selectiveSync->setStyleSheet(QStringLiteral(" %1; background: %2; ").arg(WLTheme.fontConfigurationCss( + WLTheme.settingsFont(), + WLTheme.settingsTextSize(), + WLTheme.settingsTextWeight(), + WLTheme.titleColor()), + WLTheme.white())); + + _uiSelectiveSync.title->setStyleSheet(WLTheme.fontConfigurationCss( + WLTheme.settingsFont(), + WLTheme.settingsBigTitleSize(), + WLTheme.settingsTitleWeight600(), + WLTheme.titleColor())); _uiSelectiveSync.title->setProperty("text", tr("Add Folder Sync")); - _uiSelectiveSync.subTitle->setStyleSheet(WhitelabelTheme::instance().fontConfigurationCss( - WhitelabelTheme::instance().settingsFont(), - WhitelabelTheme::instance().settingsTextSize(), - WhitelabelTheme::instance().settingsTitleWeight600(), - WhitelabelTheme::instance().folderWizardSubtitleColor())); + _uiSelectiveSync.subTitle->setStyleSheet(WLTheme.fontConfigurationCss( + WLTheme.settingsFont(), + WLTheme.settingsTextSize(), + WLTheme.settingsTitleWeight600(), + WLTheme.folderWizardSubtitleColor())); _uiSelectiveSync.subTitle->setProperty("text", tr("Step 3 of 3: Selektive Synchronisation")); } @@ -869,11 +869,11 @@ void FolderWizardSelectiveSync::setupVirtualFilesCheckbox(){ _virtualFilesCheckBoxLabel->setStyleSheet( QStringLiteral("QLabel { %1; }").arg( - WhitelabelTheme::instance().fontConfigurationCss( - WhitelabelTheme::instance().settingsFont(), - WhitelabelTheme::instance().settingsTextSize(), - WhitelabelTheme::instance().settingsTextWeight(), - WhitelabelTheme::instance().titleColor() + WLTheme.fontConfigurationCss( + WLTheme.settingsFont(), + WLTheme.settingsTextSize(), + WLTheme.settingsTextWeight(), + WLTheme.titleColor() ) ) ); @@ -1028,7 +1028,7 @@ void FolderWizard::customizeStyle() // Set background colors auto wizardPalette = palette(); - const auto backgroundColor = QColor(WhitelabelTheme::instance().dialogBackgroundColor()); + const auto backgroundColor = QColor(WLTheme.dialogBackgroundColor()); // Set Color of upper part wizardPalette.setColor(QPalette::Base, backgroundColor); @@ -1044,7 +1044,7 @@ void FolderWizard::customizeStyle() void FolderWizard::adjustWizardSize() { - setFixedSize(QSize(WhitelabelTheme::instance().wizardFixedWidth(), WhitelabelTheme::instance().wizardFixedHeight())); + setFixedSize(QSize(WLTheme.wizardFixedWidth(), WLTheme.wizardFixedHeight())); } } // end namespace diff --git a/src/gui/generalsettings.cpp b/src/gui/generalsettings.cpp index 29e944119d5ad..96508347d9d08 100644 --- a/src/gui/generalsettings.cpp +++ b/src/gui/generalsettings.cpp @@ -737,73 +737,73 @@ void GeneralSettings::customizeStyle() _ui->infoAndUpdatesLabel->setText(aboutText); this->setAutoFillBackground(true); - setPalette(QPalette(QPalette::Window, WhitelabelTheme::instance().dialogBackgroundColor())); + setPalette(QPalette(QPalette::Window, WLTheme.dialogBackgroundColor())); this->setStyleSheet( QStringLiteral("QGroupBox { border: %1; font-size: %2; font-weight: %3; color: %4; }").arg( Theme::instance()->systemPalette()["base"].value().name(), - WhitelabelTheme::instance().settingsTitleSize(), - WhitelabelTheme::instance().settingsTitleWeight600(), - WhitelabelTheme::instance().black() + WLTheme.settingsTitleSize(), + WLTheme.settingsTitleWeight600(), + WLTheme.black() ) ); this->setStyleSheet( this->styleSheet() + QStringLiteral("QCheckBox { font-size: %1; font-weight: %2; margin-left: %3 px; color: %4; }").arg( - WhitelabelTheme::instance().settingsTextSize(), - WhitelabelTheme::instance().settingsTextWeight(), - WhitelabelTheme::instance().smallMargin(), - WhitelabelTheme::instance().black() + WLTheme.settingsTextSize(), + WLTheme.settingsTextWeight(), + WLTheme.smallMargin(), + WLTheme.black() ) ); this->setStyleSheet( this->styleSheet() + QStringLiteral("QLabel { font-size: %1; font-weight: %2; color: %3; }").arg( - WhitelabelTheme::instance().settingsTextSize(), - WhitelabelTheme::instance().settingsTitleWeight500(), - WhitelabelTheme::instance().black() + WLTheme.settingsTextSize(), + WLTheme.settingsTitleWeight500(), + WLTheme.black() ) ); this->setStyleSheet( this->styleSheet() + QStringLiteral("QFrame { font-size: %1; font-weight: %2; color: %3; }").arg( - WhitelabelTheme::instance().settingsTextSize(), - WhitelabelTheme::instance().settingsTitleWeight600(), - WhitelabelTheme::instance().black() + WLTheme.settingsTextSize(), + WLTheme.settingsTitleWeight600(), + WLTheme.black() ) ); _ui->sendNecessaryData_checkbox->setChecked(true); _ui->sendNecessaryData_checkbox->setStyleSheet( QStringLiteral("QCheckBox { font-size: %1; font-weight: %2; color: %3; }").arg( - WhitelabelTheme::instance().settingsTextSize(), - WhitelabelTheme::instance().settingsTitleWeight600(), - WhitelabelTheme::instance().folderWizardSubtitleColor() + WLTheme.settingsTextSize(), + WLTheme.settingsTitleWeight600(), + WLTheme.folderWizardSubtitleColor() ) ); _ui->sendAnonymousData_checkbox->setStyleSheet( QStringLiteral("QCheckBox { font-size: %1; font-weight: %2; color: %3; }").arg( - WhitelabelTheme::instance().settingsTextSize(), - WhitelabelTheme::instance().settingsTitleWeight600(), - WhitelabelTheme::instance().folderWizardSubtitleColor() + WLTheme.settingsTextSize(), + WLTheme.settingsTitleWeight600(), + WLTheme.folderWizardSubtitleColor() ) ); _ui->necessaryDataLabel->setStyleSheet( QStringLiteral("QLabel { font-size: %1; font-weight: %2; color: %3; margin-left: %4; }").arg( - WhitelabelTheme::instance().settingsTextSize(), - WhitelabelTheme::instance().settingsTextWeight(), - WhitelabelTheme::instance().black(), + WLTheme.settingsTextSize(), + WLTheme.settingsTextWeight(), + WLTheme.black(), "24" ) ); _ui->anonymousDataLabel->setStyleSheet( QStringLiteral("QLabel { font-size: %1; font-weight: %2; color: %3; margin-left: %4; margin-bottom: %5; }").arg( - WhitelabelTheme::instance().settingsTextSize(), - WhitelabelTheme::instance().settingsTextWeight(), - WhitelabelTheme::instance().black(), + WLTheme.settingsTextSize(), + WLTheme.settingsTextWeight(), + WLTheme.black(), "24", "16" diff --git a/src/gui/ignorelisttablewidget.cpp b/src/gui/ignorelisttablewidget.cpp index 91cd0e6255a4e..16e7c14361e91 100644 --- a/src/gui/ignorelisttablewidget.cpp +++ b/src/gui/ignorelisttablewidget.cpp @@ -187,35 +187,35 @@ void IgnoreListTableWidget::customizeIgnoreListDialogStyle(){ ui->tableWidget->setStyleSheet( QStringLiteral("QTableWidget { background-color: %1; color: %2; } ").arg( - WhitelabelTheme::instance().white(), - WhitelabelTheme::instance().black() + WLTheme.white(), + WLTheme.black() ) + - WhitelabelTheme::instance().fontConfigurationCss( - WhitelabelTheme::instance().settingsFont(), - WhitelabelTheme::instance().settingsTextSize(), - WhitelabelTheme::instance().settingsTextWeight(), - WhitelabelTheme::instance().titleColor() + WLTheme.fontConfigurationCss( + WLTheme.settingsFont(), + WLTheme.settingsTextSize(), + WLTheme.settingsTextWeight(), + WLTheme.titleColor() ) ); ui->descriptionLabel->setStyleSheet( - WhitelabelTheme::instance().fontConfigurationCss( - WhitelabelTheme::instance().settingsFont(), - WhitelabelTheme::instance().settingsTextSize(), - WhitelabelTheme::instance().settingsTextWeight(), - WhitelabelTheme::instance().titleColor() + WLTheme.fontConfigurationCss( + WLTheme.settingsFont(), + WLTheme.settingsTextSize(), + WLTheme.settingsTextWeight(), + WLTheme.titleColor() ) ); ui->tableWidget->horizontalHeader()->setStyleSheet( QStringLiteral("QHeaderView::section { background-color: %1; color: %2; border-bottom: none; %3; }").arg( - WhitelabelTheme::instance().white(), - WhitelabelTheme::instance().black(), - WhitelabelTheme::instance().fontConfigurationCss( - WhitelabelTheme::instance().settingsFont(), - WhitelabelTheme::instance().settingsTextSize(), - WhitelabelTheme::instance().settingsTextWeight(), - WhitelabelTheme::instance().titleColor() + WLTheme.white(), + WLTheme.black(), + WLTheme.fontConfigurationCss( + WLTheme.settingsFont(), + WLTheme.settingsTextSize(), + WLTheme.settingsTextWeight(), + WLTheme.titleColor() ) ) ); @@ -238,24 +238,24 @@ void IgnoreListTableWidget::customizeAddIgnorePatternDialogStyle(QInputDialog &i inputDialog.setContentsMargins(12,0,12,12); inputDialog.setStyleSheet( QStringLiteral("QDialog { %1; background: %2; }").arg( - WhitelabelTheme::instance().fontConfigurationCss( - WhitelabelTheme::instance().settingsFont(), - WhitelabelTheme::instance().settingsTextSize(), - WhitelabelTheme::instance().settingsTextWeight(), - WhitelabelTheme::instance().titleColor() + WLTheme.fontConfigurationCss( + WLTheme.settingsFont(), + WLTheme.settingsTextSize(), + WLTheme.settingsTextWeight(), + WLTheme.titleColor() ), - WhitelabelTheme::instance().dialogBackgroundColor() + WLTheme.dialogBackgroundColor() ) ); QLabel *label = inputDialog.findChild(); label->setAlignment(Qt::AlignCenter); label->setStyleSheet( - WhitelabelTheme::instance().fontConfigurationCss( - WhitelabelTheme::instance().settingsFont(), - WhitelabelTheme::instance().settingsTextSize(), - WhitelabelTheme::instance().settingsTextWeight(), - WhitelabelTheme::instance().titleColor() + WLTheme.fontConfigurationCss( + WLTheme.settingsFont(), + WLTheme.settingsTextSize(), + WLTheme.settingsTextWeight(), + WLTheme.titleColor() ) ); @@ -264,13 +264,13 @@ void IgnoreListTableWidget::customizeAddIgnorePatternDialogStyle(QInputDialog &i QStringLiteral( "color: %1; font-family: %2; font-size: %3; font-weight: %4; border-radius: %5; border: 1px " "solid %6; padding: 0px 12px; text-align: left; vertical-align: middle; height: 40px; background: %7; ") - .arg(WhitelabelTheme::instance().folderWizardPathColor(), - WhitelabelTheme::instance().settingsFont(), - WhitelabelTheme::instance().settingsTextSize(), - WhitelabelTheme::instance().settingsTextWeight(), - WhitelabelTheme::instance().buttonRadius(), - WhitelabelTheme::instance().menuBorderColor(), - WhitelabelTheme::instance().white() + .arg(WLTheme.folderWizardPathColor(), + WLTheme.settingsFont(), + WLTheme.settingsTextSize(), + WLTheme.settingsTextWeight(), + WLTheme.buttonRadius(), + WLTheme.menuBorderColor(), + WLTheme.white() ) ); diff --git a/src/gui/invalidfilenamedialog.cpp b/src/gui/invalidfilenamedialog.cpp index 12fb0f8790b41..898bfdedc390f 100644 --- a/src/gui/invalidfilenamedialog.cpp +++ b/src/gui/invalidfilenamedialog.cpp @@ -337,10 +337,10 @@ void InvalidFilenameDialog::customizeStyle() { this->setStyleSheet( QStringLiteral("QDialog {background-color: %1; } QLabel{ font-family: %2; font-size: %3; font-weight: %4; }").arg( - WhitelabelTheme::instance().dialogBackgroundColor(), - WhitelabelTheme::instance().settingsFont(), - WhitelabelTheme::instance().settingsTextSize(), - WhitelabelTheme::instance().settingsTextWeight() + WLTheme.dialogBackgroundColor(), + WLTheme.settingsFont(), + WLTheme.settingsTextSize(), + WLTheme.settingsTextWeight() ) ); @@ -348,13 +348,13 @@ void InvalidFilenameDialog::customizeStyle() QStringLiteral( "color: %1; font-family: %2; font-size: %3; font-weight: %4; border-radius: %5; border: 1px " "solid %6; padding: 0px 12px; text-align: left; vertical-align: middle; height: 40px; background: %7; ").arg( - WhitelabelTheme::instance().folderWizardPathColor(), - WhitelabelTheme::instance().settingsFont(), - WhitelabelTheme::instance().settingsTextSize(), - WhitelabelTheme::instance().settingsTextWeight(), - WhitelabelTheme::instance().buttonRadius(), - WhitelabelTheme::instance().menuBorderColor(), - WhitelabelTheme::instance().white() + WLTheme.folderWizardPathColor(), + WLTheme.settingsFont(), + WLTheme.settingsTextSize(), + WLTheme.settingsTextWeight(), + WLTheme.buttonRadius(), + WLTheme.menuBorderColor(), + WLTheme.white() ) ); diff --git a/src/gui/linkbutton.cpp b/src/gui/linkbutton.cpp index d721ba187f478..a6a62f59e1ed9 100644 --- a/src/gui/linkbutton.cpp +++ b/src/gui/linkbutton.cpp @@ -8,9 +8,9 @@ namespace OCC { : QLabel(parent) { setStyleSheet(QStringLiteral("QLabel { color: %1; text-decoration: underline; font-size: %2; font-weight: %3; }") - .arg(WhitelabelTheme::instance().settingsLinkColor() - , WhitelabelTheme::instance().settingsTextSize() - , WhitelabelTheme::instance().settingsTitleWeight600() + .arg(WLTheme.settingsLinkColor() + , WLTheme.settingsTextSize() + , WLTheme.settingsTitleWeight600() )); setCursor(Qt::PointingHandCursor); diff --git a/src/gui/main.cpp b/src/gui/main.cpp index a602a7de4cc2b..2f4aed54e9edd 100644 --- a/src/gui/main.cpp +++ b/src/gui/main.cpp @@ -95,7 +95,7 @@ int main(int argc, char **argv) qmlStyle = QStringLiteral("FluentWinUI3"); widgetsStyle = QStringLiteral("windows11"); } - QApplication::setFont(WhitelabelTheme::instance().settingsFontDefault()); + QApplication::setFont(WLTheme.settingsFontDefault()); #endif #ifdef IONOS_BUILD diff --git a/src/gui/owncloudgui.cpp b/src/gui/owncloudgui.cpp index c37ead09aa72c..31f5e94c57fe2 100644 --- a/src/gui/owncloudgui.cpp +++ b/src/gui/owncloudgui.cpp @@ -94,7 +94,7 @@ ownCloudGui::ownCloudGui(Application *parent) _tray = Systray::instance(); _tray->setTrayEngine(new QQmlApplicationEngine(this)); // for the beginning, set the offline icon until the account was verified - _tray->setIcon(QIcon(WhitelabelTheme::instance().syncOfflineIcon())); + _tray->setIcon(QIcon(WLTheme.syncOfflineIcon())); _tray->show(); diff --git a/src/gui/pushbuttonstylehelper.cpp b/src/gui/pushbuttonstylehelper.cpp index cd5d1b5eb98c3..efe06440db016 100644 --- a/src/gui/pushbuttonstylehelper.cpp +++ b/src/gui/pushbuttonstylehelper.cpp @@ -58,15 +58,15 @@ void PushButtonStyleHelper::drawButtonShape(const QStyleOptionButton *option, QP painter->save(); painter->setRenderHints(QPainter::Antialiasing); setupPainterForShape(option, painter, widget); - const int radius = OCC::WhitelabelTheme::instance().buttonRadiusInt(); + const int radius = OCC::WLTheme.buttonRadiusInt(); painter->drawRoundedRect(option->rect, radius, radius); painter->restore(); } void PushButtonStyleHelper::setFont(QFont& font) const { - font.setWeight(OCC::WhitelabelTheme::instance().settingsTitleWeightDemiBold()); - font.setPixelSize(OCC::WhitelabelTheme::instance().settingsTextPixel()); + font.setWeight(OCC::WLTheme.settingsTitleWeightDemiBold()); + font.setPixelSize(OCC::WLTheme.settingsTextPixel()); } void PushButtonStyleHelper::recalculateContentSize(QSize &contentsSize, const QWidget *widget) const diff --git a/src/gui/selectivesyncdialog.cpp b/src/gui/selectivesyncdialog.cpp index 66bebf3bd3a13..b19bd1748a322 100644 --- a/src/gui/selectivesyncdialog.cpp +++ b/src/gui/selectivesyncdialog.cpp @@ -80,12 +80,12 @@ SelectiveSyncWidget::SelectiveSyncWidget(AccountPtr account, QWidget *parent) header->setText(tr("Deselect remote folders you do not wish to synchronize.")); header->setWordWrap(true); header->setStyleSheet( - WhitelabelTheme::instance().fontConfigurationCss( - WhitelabelTheme::instance().settingsFont(), - WhitelabelTheme::instance().settingsTextSize(), - WhitelabelTheme::instance().settingsTextWeight(), - WhitelabelTheme::instance().titleColor()) - + QStringLiteral("background-color: %1;").arg(WhitelabelTheme::instance().dialogBackgroundColor()) + WLTheme.fontConfigurationCss( + WLTheme.settingsFont(), + WLTheme.settingsTextSize(), + WLTheme.settingsTextWeight(), + WLTheme.titleColor()) + + QStringLiteral("background-color: %1;").arg(WLTheme.dialogBackgroundColor()) ); layout->addWidget(header); @@ -111,33 +111,33 @@ SelectiveSyncWidget::SelectiveSyncWidget(AccountPtr account, QWidget *parent) " background-color: white;" // Set the background color " border: 1px solid #e6e6e6;" // Optional: add a border " padding-left: 4px;" - + QString(WhitelabelTheme::instance().fontConfigurationCss( - WhitelabelTheme::instance().settingsFont(), - WhitelabelTheme::instance().settingsTextSize(), - WhitelabelTheme::instance().settingsTextWeight(), - WhitelabelTheme::instance().titleColor())) + + QString(WLTheme.fontConfigurationCss( + WLTheme.settingsFont(), + WLTheme.settingsTextSize(), + WLTheme.settingsTextWeight(), + WLTheme.titleColor())) + "}" ); #else _folderTree->header()->setStyleSheet( - WhitelabelTheme::instance().fontConfigurationCss( - WhitelabelTheme::instance().settingsFont(), - WhitelabelTheme::instance().settingsTextSize(), - WhitelabelTheme::instance().settingsTextWeight(), - WhitelabelTheme::instance().titleColor() + WLTheme.fontConfigurationCss( + WLTheme.settingsFont(), + WLTheme.settingsTextSize(), + WLTheme.settingsTextWeight(), + WLTheme.titleColor() )); #endif - _folderTree->setStyleSheet(WhitelabelTheme::instance().fontConfigurationCss( - WhitelabelTheme::instance().settingsFont(), - WhitelabelTheme::instance().settingsTextSize(), - WhitelabelTheme::instance().settingsTextWeight(), - WhitelabelTheme::instance().titleColor() + _folderTree->setStyleSheet(WLTheme.fontConfigurationCss( + WLTheme.settingsFont(), + WLTheme.settingsTextSize(), + WLTheme.settingsTextWeight(), + WLTheme.titleColor() )); #ifdef Q_OS_MAC - _folderTree->setPalette(QPalette(WhitelabelTheme::instance().white())); + _folderTree->setPalette(QPalette(WLTheme.white())); #endif ConfigFile::setupDefaultExcludeFilePaths(_excludedFiles); @@ -561,11 +561,11 @@ void SelectiveSyncDialog::init(const AccountPtr &account) button = buttonBox->addButton(QDialogButtonBox::Cancel); button->setStyleSheet( button->styleSheet() + QStringLiteral("QPushButton { %1; } ").arg( - WhitelabelTheme::instance().fontConfigurationCss( - WhitelabelTheme::instance().settingsFont(), - WhitelabelTheme::instance().settingsTextSize(), - WhitelabelTheme::instance().settingsTextWeight(), - WhitelabelTheme::instance().black() + WLTheme.fontConfigurationCss( + WLTheme.settingsFont(), + WLTheme.settingsTextSize(), + WLTheme.settingsTextWeight(), + WLTheme.black() ) ) ); @@ -578,23 +578,23 @@ void SelectiveSyncDialog::init(const AccountPtr &account) void SelectiveSyncDialog::customizeStyle() { this->setStyleSheet( - QStringLiteral("QWidget QTreeView{ background-color: %1; }").arg(WhitelabelTheme::instance().dialogBackgroundColor()) + QStringLiteral("QWidget QTreeView{ background-color: %1; }").arg(WLTheme.dialogBackgroundColor()) ); _okButton->setStyleSheet( _okButton->styleSheet() + QStringLiteral("QPushButton { %1; } ").arg( - WhitelabelTheme::instance().fontConfigurationCss( - WhitelabelTheme::instance().settingsFont(), - WhitelabelTheme::instance().settingsTextSize(), - WhitelabelTheme::instance().settingsTitleWeight500(), - WhitelabelTheme::instance().white() + WLTheme.fontConfigurationCss( + WLTheme.settingsFont(), + WLTheme.settingsTextSize(), + WLTheme.settingsTitleWeight500(), + WLTheme.white() ) ) ); // Set background colors auto dialogPalette = palette(); - const auto backgroundColor = QColor(WhitelabelTheme::instance().dialogBackgroundColor()); + const auto backgroundColor = QColor(WLTheme.dialogBackgroundColor()); // Set Color of upper part dialogPalette.setColor(QPalette::Base, backgroundColor); diff --git a/src/gui/sessnackbar.cpp b/src/gui/sessnackbar.cpp index 6fe7f15b19639..8a4bff564680f 100644 --- a/src/gui/sessnackbar.cpp +++ b/src/gui/sessnackbar.cpp @@ -104,7 +104,7 @@ namespace OCC { const auto logoIconFileName = Theme::hidpiFileName(":/client/theme/ses/ses-snackbar-success.svg"); m_iconLabel.setPixmap(logoIconFileName); - updateStyleSheet(WhitelabelTheme::instance().successBorderColor(), WhitelabelTheme::instance().successColor(), WhitelabelTheme::instance().black(), WhitelabelTheme::instance().black()); + updateStyleSheet(WLTheme.successBorderColor(), WLTheme.successColor(), WLTheme.black(), WLTheme.black()); } void sesSnackBar::warningStyle() @@ -112,7 +112,7 @@ namespace OCC { const auto logoIconFileName = Theme::hidpiFileName(":/client/theme/ses/ses-snackbar-warning.svg"); m_iconLabel.setPixmap(logoIconFileName); - updateStyleSheet(WhitelabelTheme::instance().warningBorderColor(), WhitelabelTheme::instance().warningColor(), WhitelabelTheme::instance().black(), WhitelabelTheme::instance().black()); + updateStyleSheet(WLTheme.warningBorderColor(), WLTheme.warningColor(), WLTheme.black(), WLTheme.black()); } void sesSnackBar::errorStyle() @@ -120,7 +120,7 @@ namespace OCC { const auto logoIconFileName = Theme::hidpiFileName(":/client/theme/ses/ses-snackbar-error.svg"); m_iconLabel.setPixmap(logoIconFileName); - updateStyleSheet(WhitelabelTheme::instance().errorBorderColor(), WhitelabelTheme::instance().errorColor(), WhitelabelTheme::instance().black(), WhitelabelTheme::instance().black()); + updateStyleSheet(WLTheme.errorBorderColor(), WLTheme.errorColor(), WLTheme.black(), WLTheme.black()); } void sesSnackBar::updateStyleSheet(QColor frameBorderColor, QColor frameBackgroundColor, QColor frameColor, QColor labelColor) diff --git a/src/gui/settingsdialog.cpp b/src/gui/settingsdialog.cpp index 3fa775b65f613..068db9781ab6c 100644 --- a/src/gui/settingsdialog.cpp +++ b/src/gui/settingsdialog.cpp @@ -104,7 +104,7 @@ SettingsDialog::SettingsDialog(ownCloudGui *gui, QWidget *parent) _ui->setupUi(this); _toolBar = new QToolBar; - _toolBar->setIconSize(QSize(WhitelabelTheme::instance().toolbarIconSize(), WhitelabelTheme::instance().toolbarIconSize())); + _toolBar->setIconSize(QSize(WLTheme.toolbarIconSize(), WLTheme.toolbarIconSize())); _toolBar->setToolButtonStyle(Qt::ToolButtonTextUnderIcon); _toolBar->setFixedHeight(94); layout()->setMenuBar(_toolBar); @@ -193,7 +193,7 @@ SettingsDialog::SettingsDialog(ownCloudGui *gui, QWidget *parent) setWindowFlags(windowFlags() & ~Qt::WindowContextHelpButtonHint); cfg.restoreGeometry(this); - resize(width() > WhitelabelTheme::instance().minimalSettingsDialogWidth() ? width(): WhitelabelTheme::instance().minimalSettingsDialogWidth(), + resize(width() > WLTheme.minimalSettingsDialogWidth() ? width(): WLTheme.minimalSettingsDialogWidth(), (height() > generalSettings->sizeHint().height() ? height(): generalSettings->sizeHint().height()) + 25); } @@ -380,21 +380,21 @@ void SettingsDialog::customizeStyle() QVariantMap palette = Theme::instance()->systemPalette(); QString white(palette["window"].value().name()); - QString hoverColor(WhitelabelTheme::instance().toolButtonHoveredColor()); - QString pressedColor(WhitelabelTheme::instance().toolButtonPressedColor()); - QString selectedColor(WhitelabelTheme::instance().menuSelectedItemColor()); + QString hoverColor(WLTheme.toolButtonHoveredColor()); + QString pressedColor(WLTheme.toolButtonPressedColor()); + QString selectedColor(WLTheme.menuSelectedItemColor()); QString borderColor(palette["shadow"].value().name()); QString highlightTextColor(palette["highlightedText"].value().name()); - QString toolbarActionBorderRadius(WhitelabelTheme::instance().toolbarActionBorderRadius()); - QString toolbarSideMargin (WhitelabelTheme::instance().toolbarSideMargin()); + QString toolbarActionBorderRadius(WLTheme.toolbarActionBorderRadius()); + QString toolbarSideMargin (WLTheme.toolbarSideMargin()); QString toolButtonFont ( - WhitelabelTheme::instance().fontConfigurationCss( - WhitelabelTheme::instance().settingsFont(), - WhitelabelTheme::instance().settingsTextSize(), - WhitelabelTheme::instance().settingsTextWeight(), - WhitelabelTheme::instance().menuTextColor() + WLTheme.fontConfigurationCss( + WLTheme.settingsFont(), + WLTheme.settingsTextSize(), + WLTheme.settingsTextWeight(), + WLTheme.menuTextColor() ) ); diff --git a/src/gui/systray.cpp b/src/gui/systray.cpp index cf24fb3d661b0..48b42233670ec 100644 --- a/src/gui/systray.cpp +++ b/src/gui/systray.cpp @@ -210,11 +210,11 @@ void Systray::setupContextMenu() resumeAction->setEnabled(anyPaused); }); - _contextMenu->setStyleSheet(WhitelabelTheme::instance().fontConfigurationCss( - WhitelabelTheme::instance().settingsFont(), - WhitelabelTheme::instance().settingsTextSize(), - WhitelabelTheme::instance().settingsTextWeight(), - WhitelabelTheme::instance().menuTextColor())); + _contextMenu->setStyleSheet(WLTheme.fontConfigurationCss( + WLTheme.settingsFont(), + WLTheme.settingsTextSize(), + WLTheme.settingsTextWeight(), + WLTheme.menuTextColor())); } void Systray::destroyDialog(QQuickWindow *dialog) const diff --git a/src/gui/tray/activitylistmodel.cpp b/src/gui/tray/activitylistmodel.cpp index 5cadfe7b16580..29a6e5be77b15 100644 --- a/src/gui/tray/activitylistmodel.cpp +++ b/src/gui/tray/activitylistmodel.cpp @@ -255,11 +255,11 @@ QVariant ActivityListModel::data(const QModelIndex &index, int role) const } else { // File sync successful if (a._fileAction == "file_created") { - return WhitelabelTheme::instance().plusIcon(); + return WLTheme.plusIcon(); } else if (a._fileAction == "file_deleted") { - return WhitelabelTheme::instance().deleteIcon(); + return WLTheme.deleteIcon(); } else { - return WhitelabelTheme::instance().refreshIcon(); + return WLTheme.refreshIcon(); } } } else { diff --git a/src/gui/tray/usermodel.cpp b/src/gui/tray/usermodel.cpp index 8ebb2c633a566..c5d894681c631 100644 --- a/src/gui/tray/usermodel.cpp +++ b/src/gui/tray/usermodel.cpp @@ -1653,17 +1653,17 @@ int UserModel::findUserIdForAccount(AccountState *account) const void UserModel::styleMessageBox(QMessageBox &messageBox, QPushButton *yesButton){ messageBox.setStyleSheet(QStringLiteral("QMessageBox { background-color: %1; } QMessageBox QLabel { %2 } ").arg( - WhitelabelTheme::instance().dialogBackgroundColor(), - WhitelabelTheme::instance().fontConfigurationCss( - WhitelabelTheme::instance().settingsFont(), - WhitelabelTheme::instance().settingsTextSize(), - WhitelabelTheme::instance().settingsTextWeight(), - WhitelabelTheme::instance().titleColor() + WLTheme.dialogBackgroundColor(), + WLTheme.fontConfigurationCss( + WLTheme.settingsFont(), + WLTheme.settingsTextSize(), + WLTheme.settingsTextWeight(), + WLTheme.titleColor() ) ) ); - messageBox.setIconPixmap(QPixmap(WhitelabelTheme::instance().questionCircleIcon())); + messageBox.setIconPixmap(QPixmap(WLTheme.questionCircleIcon())); yesButton->setProperty("buttonStyle", QVariant::fromValue(OCC::ButtonStyleName::Primary)); diff --git a/src/gui/wizard/dataprotectionpage.cpp b/src/gui/wizard/dataprotectionpage.cpp index 25a86d73c6ccc..f80c0da093aa4 100644 --- a/src/gui/wizard/dataprotectionpage.cpp +++ b/src/gui/wizard/dataprotectionpage.cpp @@ -61,11 +61,11 @@ namespace OCC{ _ui->descriptionLabel->setStyleSheet( QStringLiteral("QLabel { %1; margin-left: %2; margin-right: %2; margin-bottom: %2; }").arg( - WhitelabelTheme::instance().fontConfigurationCss( - WhitelabelTheme::instance().settingsFont(), - WhitelabelTheme::instance().settingsTextSize(), - WhitelabelTheme::instance().settingsTextWeight(), - WhitelabelTheme::instance().black() + WLTheme.fontConfigurationCss( + WLTheme.settingsFont(), + WLTheme.settingsTextSize(), + WLTheme.settingsTextWeight(), + WLTheme.black() ), "32" ) diff --git a/src/gui/wizard/dataprotectionsettingspage.cpp b/src/gui/wizard/dataprotectionsettingspage.cpp index 11c14369e32f4..9b6a6d59edf4b 100644 --- a/src/gui/wizard/dataprotectionsettingspage.cpp +++ b/src/gui/wizard/dataprotectionsettingspage.cpp @@ -69,31 +69,31 @@ namespace OCC{ _ui->necessaryDataCheckBox->setStyleSheet( QStringLiteral("QCheckBox { %1; }").arg( - WhitelabelTheme::instance().fontConfigurationCss( - WhitelabelTheme::instance().settingsFont(), - WhitelabelTheme::instance().settingsTextSize(), - WhitelabelTheme::instance().settingsTitleWeight600(), - WhitelabelTheme::instance().folderWizardSubtitleColor() + WLTheme.fontConfigurationCss( + WLTheme.settingsFont(), + WLTheme.settingsTextSize(), + WLTheme.settingsTitleWeight600(), + WLTheme.folderWizardSubtitleColor() ) )); _ui->anonymousDataCheckBox->setStyleSheet( QStringLiteral("QCheckBox { %1; }").arg( - WhitelabelTheme::instance().fontConfigurationCss( - WhitelabelTheme::instance().settingsFont(), - WhitelabelTheme::instance().settingsTextSize(), - WhitelabelTheme::instance().settingsTitleWeight600(), - WhitelabelTheme::instance().folderWizardSubtitleColor() + WLTheme.fontConfigurationCss( + WLTheme.settingsFont(), + WLTheme.settingsTextSize(), + WLTheme.settingsTitleWeight600(), + WLTheme.folderWizardSubtitleColor() ) )); _ui->descriptionLabel->setStyleSheet( QStringLiteral("QLabel { %1; margin-top: %2; margin-bottom: %2; }").arg( - WhitelabelTheme::instance().fontConfigurationCss( - WhitelabelTheme::instance().settingsFont(), - WhitelabelTheme::instance().settingsTextSize(), - WhitelabelTheme::instance().settingsTextWeight(), - WhitelabelTheme::instance().black() + WLTheme.fontConfigurationCss( + WLTheme.settingsFont(), + WLTheme.settingsTextSize(), + WLTheme.settingsTextWeight(), + WLTheme.black() ), "24" ) @@ -101,24 +101,24 @@ namespace OCC{ _ui->necessaryDataLabel->setStyleSheet( QStringLiteral("QLabel { %1; margin-left: %2; margin-bottom: %3; }").arg( - WhitelabelTheme::instance().fontConfigurationCss( - WhitelabelTheme::instance().settingsFont(), - WhitelabelTheme::instance().settingsTextSize(), - WhitelabelTheme::instance().settingsTextWeight(), - WhitelabelTheme::instance().black() + WLTheme.fontConfigurationCss( + WLTheme.settingsFont(), + WLTheme.settingsTextSize(), + WLTheme.settingsTextWeight(), + WLTheme.black() ), "16", - WhitelabelTheme::instance().smallMargin() + WLTheme.smallMargin() ) ); _ui->anonymousDataLabel->setStyleSheet( QStringLiteral("QLabel { %1; margin-left: %2; margin-bottom: %3; }").arg( - WhitelabelTheme::instance().fontConfigurationCss( - WhitelabelTheme::instance().settingsFont(), - WhitelabelTheme::instance().settingsTextSize(), - WhitelabelTheme::instance().settingsTextWeight(), - WhitelabelTheme::instance().black() + WLTheme.fontConfigurationCss( + WLTheme.settingsFont(), + WLTheme.settingsTextSize(), + WLTheme.settingsTextWeight(), + WLTheme.black() ), "16", "48" diff --git a/src/gui/wizard/flow2authwidget.cpp b/src/gui/wizard/flow2authwidget.cpp index 1b41eccb8b055..c6c698894c3a2 100644 --- a/src/gui/wizard/flow2authwidget.cpp +++ b/src/gui/wizard/flow2authwidget.cpp @@ -237,18 +237,18 @@ void Flow2AuthWidget::customizeStyle() _ui.horizontalLayout->setSpacing(32); #endif - _ui.statusLabel->setStyleSheet(WhitelabelTheme::instance().fontConfigurationCss( - WhitelabelTheme::instance().settingsFont(), - WhitelabelTheme::instance().settingsTextSize(), - WhitelabelTheme::instance().settingsTextWeight(), - WhitelabelTheme::instance().titleColor() + _ui.statusLabel->setStyleSheet(WLTheme.fontConfigurationCss( + WLTheme.settingsFont(), + WLTheme.settingsTextSize(), + WLTheme.settingsTextWeight(), + WLTheme.titleColor() )); - _ui.label->setStyleSheet(WhitelabelTheme::instance().fontConfigurationCss( - WhitelabelTheme::instance().settingsFont(), - WhitelabelTheme::instance().settingsTextSize(), - WhitelabelTheme::instance().settingsTextWeight(), - WhitelabelTheme::instance().titleColor() + _ui.label->setStyleSheet(WLTheme.fontConfigurationCss( + WLTheme.settingsFont(), + WLTheme.settingsTextSize(), + WLTheme.settingsTextWeight(), + WLTheme.titleColor() )); _ui.label->setText(tr("Switch to your browser to connect your account")); diff --git a/src/gui/wizard/owncloudadvancedsetuppage.cpp b/src/gui/wizard/owncloudadvancedsetuppage.cpp index 7806f6812ba33..a57d8585fdef5 100644 --- a/src/gui/wizard/owncloudadvancedsetuppage.cpp +++ b/src/gui/wizard/owncloudadvancedsetuppage.cpp @@ -247,7 +247,7 @@ void OwncloudAdvancedSetupPage::initializePage() void OwncloudAdvancedSetupPage::SetAvatarIcon() { - const auto icon = QIcon(WhitelabelTheme::instance().avatarIcon()); + const auto icon = QIcon(WLTheme.avatarIcon()); _ui.lServerIcon->setPixmap(icon.pixmap(32)); } @@ -536,7 +536,7 @@ void OwncloudAdvancedSetupPage::slotSelectiveSyncClicked() dlg->setAttribute(Qt::WA_DeleteOnClose); dlg->setStyleSheet(QStringLiteral("QDialog { background-color: %1; } QWidget { background-color: %1; }").arg( - WhitelabelTheme::instance().dialogBackgroundColor())); + WLTheme.dialogBackgroundColor())); connect(dlg, &SelectiveSyncDialog::finished, this, [this, dlg]{ const int result = dlg->result(); @@ -550,11 +550,11 @@ void OwncloudAdvancedSetupPage::slotSelectiveSyncClicked() _selectiveSyncBlacklist = dlg->createBlackList(); updateBlacklist = true; // commented out for https://bmjira.atlassian.net/browse/SES-282 - // _ui.confCheckBoxExternal->setStyleSheet(WhitelabelTheme::instance().fontConfigurationCss( - // WhitelabelTheme::instance().settingsFont(), - // WhitelabelTheme::instance().settingsTextSize(), - // WhitelabelTheme::instance().settingsTextWeight(), - // WhitelabelTheme::instance().loginWizardFontLightGrey() + // _ui.confCheckBoxExternal->setStyleSheet(WLTheme.fontConfigurationCss( + // WLTheme.settingsFont(), + // WLTheme.settingsTextSize(), + // WLTheme.settingsTextWeight(), + // WLTheme.loginWizardFontLightGrey() // )); _ui.confCheckBoxSize->setDisabled(true); @@ -599,11 +599,11 @@ void OwncloudAdvancedSetupPage::slotVirtualFileSyncClicked() }); } // commented out for https://bmjira.atlassian.net/browse/SES-282 - // _ui.confCheckBoxExternal->setStyleSheet(WhitelabelTheme::instance().fontConfigurationCss( - // WhitelabelTheme::instance().settingsFont(), - // WhitelabelTheme::instance().settingsTextSize(), - // WhitelabelTheme::instance().settingsTextWeight(), - // WhitelabelTheme::instance().loginWizardFontLightGrey() + // _ui.confCheckBoxExternal->setStyleSheet(WLTheme.fontConfigurationCss( + // WLTheme.settingsFont(), + // WLTheme.settingsTextSize(), + // WLTheme.settingsTextWeight(), + // WLTheme.loginWizardFontLightGrey() // )); _ui.confCheckBoxSize->setDisabled(true); @@ -619,11 +619,11 @@ void OwncloudAdvancedSetupPage::slotSyncEverythingClicked() setErrorString(errorStr); // commented out for https://bmjira.atlassian.net/browse/SES-282 - // _ui.confCheckBoxExternal->setStyleSheet(WhitelabelTheme::instance().fontConfigurationCss( - // WhitelabelTheme::instance().settingsFont(), - // WhitelabelTheme::instance().settingsTextSize(), - // WhitelabelTheme::instance().settingsTextWeight(), - // WhitelabelTheme::instance().titleColor() + // _ui.confCheckBoxExternal->setStyleSheet(WLTheme.fontConfigurationCss( + // WLTheme.settingsFont(), + // WLTheme.settingsTextSize(), + // WLTheme.settingsTextWeight(), + // WLTheme.titleColor() // )); } @@ -709,62 +709,62 @@ void OwncloudAdvancedSetupPage::customizeStyle() setStyleSheet( "QRadioButton {" + - WhitelabelTheme::instance().fontConfigurationCss( - WhitelabelTheme::instance().settingsFont(), - WhitelabelTheme::instance().settingsTextSize(), - WhitelabelTheme::instance().settingsTextWeight(), - WhitelabelTheme::instance().titleColor() + WLTheme.fontConfigurationCss( + WLTheme.settingsFont(), + WLTheme.settingsTextSize(), + WLTheme.settingsTextWeight(), + WLTheme.titleColor() ) + "} QCheckBox {" + - WhitelabelTheme::instance().fontConfigurationCss( - WhitelabelTheme::instance().settingsFont(), - WhitelabelTheme::instance().settingsTextSize(), - WhitelabelTheme::instance().settingsTextWeight(), - WhitelabelTheme::instance().titleColor() + WLTheme.fontConfigurationCss( + WLTheme.settingsFont(), + WLTheme.settingsTextSize(), + WLTheme.settingsTextWeight(), + WLTheme.titleColor() ) + "}" ); - _ui.userNameLabel->setStyleSheet(WhitelabelTheme::instance().fontConfigurationCss( - WhitelabelTheme::instance().settingsFont(), - WhitelabelTheme::instance().settingsTextSize(), - WhitelabelTheme::instance().settingsTextWeight(), - WhitelabelTheme::instance().titleColor() + _ui.userNameLabel->setStyleSheet(WLTheme.fontConfigurationCss( + WLTheme.settingsFont(), + WLTheme.settingsTextSize(), + WLTheme.settingsTextWeight(), + WLTheme.titleColor() )); - _ui.serverAddressLabel->setStyleSheet(WhitelabelTheme::instance().fontConfigurationCss( - WhitelabelTheme::instance().settingsFont(), - WhitelabelTheme::instance().settingsTextSize(), - WhitelabelTheme::instance().settingsTextWeight(), - WhitelabelTheme::instance().loginWizardFontGrey() + _ui.serverAddressLabel->setStyleSheet(WLTheme.fontConfigurationCss( + WLTheme.settingsFont(), + WLTheme.settingsTextSize(), + WLTheme.settingsTextWeight(), + WLTheme.loginWizardFontGrey() )); - _ui.localFolderDescriptionLabel->setStyleSheet(WhitelabelTheme::instance().fontConfigurationCss( - WhitelabelTheme::instance().settingsFont(), - WhitelabelTheme::instance().settingsTextSize(), - WhitelabelTheme::instance().settingsTextWeight(), - WhitelabelTheme::instance().titleColor() + _ui.localFolderDescriptionLabel->setStyleSheet(WLTheme.fontConfigurationCss( + WLTheme.settingsFont(), + WLTheme.settingsTextSize(), + WLTheme.settingsTextWeight(), + WLTheme.titleColor() )); - _filePathLabel->setStyleSheet(WhitelabelTheme::instance().fontConfigurationCss( - WhitelabelTheme::instance().settingsFont(), - WhitelabelTheme::instance().settingsTextSize(), - WhitelabelTheme::instance().settingsTextWeight(), - WhitelabelTheme::instance().loginWizardFontGrey() + _filePathLabel->setStyleSheet(WLTheme.fontConfigurationCss( + WLTheme.settingsFont(), + WLTheme.settingsTextSize(), + WLTheme.settingsTextWeight(), + WLTheme.loginWizardFontGrey() )); - _ui.lFreeSpace->setStyleSheet(WhitelabelTheme::instance().fontConfigurationCss( - WhitelabelTheme::instance().settingsFont(), - WhitelabelTheme::instance().settingsTextSize(), - WhitelabelTheme::instance().settingsTextWeight(), - WhitelabelTheme::instance().loginWizardFontGrey() + _ui.lFreeSpace->setStyleSheet(WLTheme.fontConfigurationCss( + WLTheme.settingsFont(), + WLTheme.settingsTextSize(), + WLTheme.settingsTextWeight(), + WLTheme.loginWizardFontGrey() )); #ifdef Q_OS_MAC _ui.syncModeLabel->setStyleSheet( - WhitelabelTheme::instance().fontConfigurationCss( - WhitelabelTheme::instance().settingsFont(), - WhitelabelTheme::instance().settingsTextSize(), - WhitelabelTheme::instance().settingsTitleWeight600(), - WhitelabelTheme::instance().titleColor() + WLTheme.fontConfigurationCss( + WLTheme.settingsFont(), + WLTheme.settingsTextSize(), + WLTheme.settingsTitleWeight600(), + WLTheme.titleColor() ) ); #endif @@ -773,7 +773,7 @@ void OwncloudAdvancedSetupPage::customizeStyle() void OwncloudAdvancedSetupPage::styleLocalFolderLabel() { - const auto icon = QIcon(WhitelabelTheme::instance().folderIcon()); + const auto icon = QIcon(WLTheme.folderIcon()); _ui.lLocal->setPixmap(icon.pixmap(32)); } @@ -815,7 +815,7 @@ void OwncloudAdvancedSetupPage::updateMacOsFileProviderRelatedViews() void OwncloudAdvancedSetupPage::styleSyncLogo() { - const auto syncArrowIcon = QIcon(WhitelabelTheme::instance().syncArrows()); + const auto syncArrowIcon = QIcon(WLTheme.syncArrows()); // const auto syncArrowIcon = Theme::createColorAwareIcon(QLatin1String(":/client/theme/sync-arrow.svg"), palette()); _ui.syncLogoLabel->setPixmap(syncArrowIcon.pixmap(QSize(32,32))); _ui.syncLogoLabel->setSizePolicy(QSizePolicy(QSizePolicy::Fixed, QSizePolicy::Fixed)); diff --git a/src/gui/wizard/owncloudwizard.cpp b/src/gui/wizard/owncloudwizard.cpp index 9bb8a55a43467..8482533aa1575 100644 --- a/src/gui/wizard/owncloudwizard.cpp +++ b/src/gui/wizard/owncloudwizard.cpp @@ -471,7 +471,7 @@ void OwncloudWizard::customizeStyle() // Set background colors auto wizardPalette = palette(); - const auto backgroundColor = QColor(WhitelabelTheme::instance().dialogBackgroundColor()); + const auto backgroundColor = QColor(WLTheme.dialogBackgroundColor()); // Set Color of upper part wizardPalette.setColor(QPalette::Base, backgroundColor); diff --git a/src/gui/wizard/slideshow.cpp b/src/gui/wizard/slideshow.cpp index d1a421aa630f5..212700f66bb15 100644 --- a/src/gui/wizard/slideshow.cpp +++ b/src/gui/wizard/slideshow.cpp @@ -23,18 +23,18 @@ namespace OCC { -static const int Spacing = WhitelabelTheme::instance().LoginPageSpacer(); +static const int Spacing = WLTheme.LoginPageSpacer(); static const int SlideDuration = 1000; static const int SlideDistance = 400; SlideShow::SlideShow(QWidget *parent) : QWidget(parent) { setSizePolicy(QSizePolicy::Minimum, QSizePolicy::Minimum); - setStyleSheet(WhitelabelTheme::instance().fontConfigurationCss( - WhitelabelTheme::instance().settingsFont(), - WhitelabelTheme::instance().onboardingTitle(), - WhitelabelTheme::instance().settingsTitleWeight400(), - WhitelabelTheme::instance().titleColor() + setStyleSheet(WLTheme.fontConfigurationCss( + WLTheme.settingsFont(), + WLTheme.onboardingTitle(), + WLTheme.settingsTitleWeight400(), + WLTheme.titleColor() )); } From 02d03d2b42fe1b4eebefbeac7f9dbb259909eaed Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Christopher=20H=C3=A4tty?= Date: Tue, 21 Oct 2025 10:26:44 +0200 Subject: [PATCH 293/371] SES-333 reduced to base implementation for beginners --- src/libsync/basetheme.h | 16 +- src/libsync/ionostheme.h | 322 -------------------------------------- src/libsync/stratotheme.h | 320 ------------------------------------- 3 files changed, 9 insertions(+), 649 deletions(-) diff --git a/src/libsync/basetheme.h b/src/libsync/basetheme.h index 8361921c828e1..bdd0fb617d82e 100644 --- a/src/libsync/basetheme.h +++ b/src/libsync/basetheme.h @@ -14,12 +14,17 @@ class BaseTheme { // Base theme prefix (can be overridden) virtual QString themePrefix() const { return QStringLiteral(":/theme/"); } - // Common interface for icons, fonts, colors, etc. - virtual QString avatarIcon() const = 0; + virtual QString avatarIcon() const { + return QString(Theme::themePrefix) + QStringLiteral("ses/ses-folderIcon.svg"); + } - virtual QString folderIcon() const = 0; + virtual QString folderIcon() const { + return QString(Theme::themePrefix) + QStringLiteral("ses/ses-folderIcon.svg"); + } - virtual QString syncArrows() const = 0; + virtual QString syncArrows() const { + return QString(Theme::themePrefix) + QStringLiteral("ses/ses-syncArrows.svg"); + } virtual QString questionCircleIcon() const { return QString(Theme::themePrefix) + QStringLiteral("ses/ses-questionMark.svg"); @@ -28,7 +33,6 @@ class BaseTheme { virtual QString liveBackupPlusIcon() const { return QString(Theme::themePrefix) + QStringLiteral("ses/ses-addlivebackup.svg"); } - virtual QString plusIcon() const { return QStringLiteral("qrc:///client/theme/ses/ses-darkPlus.svg"); @@ -329,6 +333,4 @@ class BaseTheme { } }; } - - #endif // _BASETHEME_H \ No newline at end of file diff --git a/src/libsync/ionostheme.h b/src/libsync/ionostheme.h index 0c08e8a8c987d..2a16b5a914663 100644 --- a/src/libsync/ionostheme.h +++ b/src/libsync/ionostheme.h @@ -11,328 +11,6 @@ namespace OCC { class IonosTheme : public BaseTheme { public: IonosTheme() = default; - - //Icons - QString avatarIcon() const override { - return QString(Theme::themePrefix) + QStringLiteral("ses/ses-settingsAvatar.svg"); - } - - QString folderIcon() const override { - return QString(Theme::themePrefix) + QStringLiteral("ses/ses-folderIcon.svg"); - } - - QString syncArrows() const override { - return QString(Theme::themePrefix) + QStringLiteral("ses/ses-syncArrows.svg"); - } - - QString questionCircleIcon() const override { - return QString(Theme::themePrefix) + QStringLiteral("ses/ses-questionMark.svg"); - } - - QString liveBackupPlusIcon() const override { - return QString(Theme::themePrefix) + QStringLiteral("ses/ses-addlivebackup.svg"); - } - - QString plusIcon() const override { - return QStringLiteral("qrc:///client/theme/ses/ses-darkPlus.svg"); - } - - QString deleteIcon() const override { - return QStringLiteral("qrc:///client/theme/ses/ses-accountDelete.svg"); - } - - QString refreshIcon() const override { - return QStringLiteral("qrc:///client/theme/ses/ses-refresh.svg"); - } - - QString syncSuccessIcon() const override { - return QStringLiteral("qrc:///client/theme/ses/ses-syncstatus-success.svg"); - } - - QString syncWarnIcon() const override { - return QStringLiteral("qrc:///client/theme/ses/ses-syncstatus-warning.svg"); - } - - QString syncErrorIcon() const override { - return QStringLiteral("qrc:///client/theme/ses/ses-syncstatus-error.svg"); - } - - QString syncPausedIcon() const override { - return QStringLiteral("qrc:///client/theme/ses/ses-syncstatus-paused.svg"); - } - - QString syncingIcon() const override { - return QStringLiteral("qrc:///client/theme/ses/ses-syncstatus-syncing.svg"); - } - - QString syncOfflineIcon() const override { - return QStringLiteral("qrc:///client/theme/ses/ses-state-offline.svg"); - } - - int treeViewIconSize() const override { - return 32; - } - - //Control Configuration: Sizes - QString toolbarActionBorderRadius() const override { - return "8px"; - } - - QString toolbarSideMargin() const override { - return "10px"; - } - - int toolbarIconSize() const override{ - return 24; - } - - QString buttonRadius() const override { - return "4px"; - } - - int buttonRadiusInt() const override { - return 4; - } - - QString buttonPadding() const override { - return "10px"; - } - - QString smallMargin() const override { - return "8"; - } - - int minimalSettingsDialogWidth() const override { - return 740; - } - - int wizardFixedWidth() const override { - return 576; - } - - int wizardFixedHeight() const override { - return 704; - } - - int LoginPageSpacer() const override { - return 45; - } - - //Font Configuration - QString settingsFont() const override { - return "Segoe UI"; - } - - QString contextMenuFont() const override { - return ":/client/fonts/OpenSans-Regular.ttf"; - } - - QString settingsSmallTextSize() const override { - return "14px"; - } - - int settingsTextPixel() const override { - return 16; - } - - QString settingsTextSize() const override { - return QString::number(settingsTextPixel()) + "px"; - } - - int settingsTitlePixel() const override { - return 20; - } - - QString settingsTitleSize() const override { - return QString::number(settingsTitlePixel()) + "px"; - } - - int settingsBigTitlePixel() const override { - return 24; - } - - QString settingsBigTitleSize() const override { - return QString::number(settingsBigTitlePixel()) + "px"; - } - - QString onboardingTitle() const override { - return "28px"; - } - - QString settingsTextWeight() const override { - return "400"; - } - - QString settingsTitleWeight400() const override { - return "400"; - } - - QString settingsTitleWeight500() const override { - return "500"; - } - - QString settingsTitleWeight600() const override { - return "600"; - } - - QFont::Weight settingsTitleWeightDemiBold() const override { - return QFont::DemiBold; - } - - QFont::Weight settingsTitleWeightNormal() const override { - return QFont::Normal; - } - - QFont settingsFontDefault() const override{ - QFont defaultFont(settingsFont()); - defaultFont.setPixelSize(settingsTextPixel()); - defaultFont.setWeight(settingsTitleWeightNormal()); - return defaultFont; - } - - QString titleColor() const override { - return "#000000"; - } - - QString folderWizardSubtitleColor() const override { - return "#104996"; - } - - QString folderWizardPathColor() const override { - return "#97A3B4"; - } - - QString loginWizardFontGrey() const override { - return "#616161"; - } - - QString loginWizardFontLightGrey() const override { - return "#BDBDBD"; - } - - QString fontConfigurationCss(QString font, QString size, QString weight, QString color) const override { - return QString("font-family: %1; font-size: %2; font-weight: %3; color: %4; ").arg( - font, - size, - weight, - color); - } - - //Colors - QString settingsLinkColor() const override { - return "#02306A"; - } - - QString buttonPrimaryColor() const override { - return "#0F6CBD"; - } - - QString buttonSecondaryBorderColor() const override { - return "#D1D1D1"; - } - - QString buttonDisabledColor() const override { - return "#F0F0F0"; - } - - QString buttonPrimaryHoverColor() const override { - return "#115EA3"; - } - - QString buttonSecondaryHoverColor() const override { - return "#F5F5F5"; - } - - QString buttonPrimaryPressedColor() const override { - return "#0C3B5E"; - } - - QString buttonSecondaryPressedColor() const override { - return "#E0E0E0"; - } - - QString buttonDisabledFontColor() const override { - return "#BDBDBD"; - } - - QString white() const override { - return "#FFFFFF"; - } - - QString black() const override { - return "#000000"; - } - - QString dialogBackgroundColor() const override { - return "#FAFAFA"; - } - - QString menuBorderColor() const override { - return "#2E4360"; - } - - QString menuTextColor() const override { - return "#001B41"; - } - - QString menuSelectedItemColor() const override { - return "#F4F7FA"; - } - - QString menuBorderRadius() const override { - return "16px"; - } - - QString buttonPressedColor() const override { - return "#0B2A63"; - } - - QString buttonHoveredColor() const override { - return "#1474C4"; - } - - QString toolButtonHoveredColor() const override { - return "#DBEDF8"; - } - - QString toolButtonPressedColor() const override { - return "#95CAEB"; - } - - QString errorBorderColor() const override { - return "#EEACB2"; - } - - QString errorColor() const override { - return "#FDF3F4"; - } - - QString warningBorderColor() const override { - return "#F4BFAB"; - } - - QString warningColor() const override { - return "#FDF6F3"; - } - - QString successBorderColor() const override { - return "#9FD89F"; - } - - QString successColor() const override { - return "#F1FAF1"; - } - - QString infoBorderColor() const override { - return "#11C7E6"; - } - - QString infoColor() const override { - return "#E6F9FC"; - } - -// private: -// IonosTheme() {} }; } #endif // _IONOSTHEME_H \ No newline at end of file diff --git a/src/libsync/stratotheme.h b/src/libsync/stratotheme.h index bafb61e1922bc..dd8bd815fa9e3 100644 --- a/src/libsync/stratotheme.h +++ b/src/libsync/stratotheme.h @@ -11,326 +11,6 @@ namespace OCC { class StratoTheme : public BaseTheme { public: StratoTheme() = default; - - //Icons - QString avatarIcon() const override { - return QString(Theme::themePrefix) + QStringLiteral("ses/ses-folderIcon.svg"); - } - - QString folderIcon() const override { - return QString(Theme::themePrefix) + QStringLiteral("ses/ses-folderIcon.svg"); - } - - QString syncArrows() const override { - return QString(Theme::themePrefix) + QStringLiteral("ses/ses-syncArrows.svg"); - } - - QString questionCircleIcon() const override { - return QString(Theme::themePrefix) + QStringLiteral("ses/ses-questionMark.svg"); - } - - QString liveBackupPlusIcon() const override { - return QString(Theme::themePrefix) + QStringLiteral("ses/ses-addlivebackup.svg"); - } - - QString plusIcon() const override { - return QStringLiteral("qrc:///client/theme/ses/ses-darkPlus.svg"); - } - - QString deleteIcon() const override { - return QStringLiteral("qrc:///client/theme/ses/ses-accountDelete.svg"); - } - - QString refreshIcon() const override { - return QStringLiteral("qrc:///client/theme/ses/ses-refresh.svg"); - } - - QString syncSuccessIcon() const override { - return QStringLiteral("qrc:///client/theme/ses/ses-syncstatus-success.svg"); - } - - QString syncWarnIcon() const override { - return QStringLiteral("qrc:///client/theme/ses/ses-syncstatus-warning.svg"); - } - - QString syncErrorIcon() const override { - return QStringLiteral("qrc:///client/theme/ses/ses-syncstatus-error.svg"); - } - - QString syncPausedIcon() const override { - return QStringLiteral("qrc:///client/theme/ses/ses-syncstatus-paused.svg"); - } - - QString syncingIcon() const override { - return QStringLiteral("qrc:///client/theme/ses/ses-syncstatus-syncing.svg"); - } - - QString syncOfflineIcon() const override { - return QStringLiteral("qrc:///client/theme/ses/ses-state-offline.svg"); - } - - int treeViewIconSize() const override { - return 32; - } - - //Control Configuration: Sizes - QString toolbarActionBorderRadius() const override { - return "8px"; - } - - QString toolbarSideMargin() const override { - return "10px"; - } - - int toolbarIconSize() const override{ - return 24; - } - - QString buttonRadius() const override { - return "4px"; - } - - int buttonRadiusInt() const override { - return 4; - } - - QString buttonPadding() const override { - return "10px"; - } - - QString smallMargin() const override { - return "8"; - } - - int minimalSettingsDialogWidth() const override { - return 740; - } - - int wizardFixedWidth() const override { - return 576; - } - - int wizardFixedHeight() const override { - return 704; - } - - int LoginPageSpacer() const override { - return 45; - } - - //Font Configuration - QString settingsFont() const override { - return "Segoe UI"; - } - - QString contextMenuFont() const override { - return ":/client/fonts/OpenSans-Regular.ttf"; - } - - QString settingsSmallTextSize() const override { - return "14px"; - } - - int settingsTextPixel() const override { - return 16; - } - - QString settingsTextSize() const override { - return QString::number(settingsTextPixel()) + "px"; - } - - int settingsTitlePixel() const override { - return 20; - } - - QString settingsTitleSize() const override { - return QString::number(settingsTitlePixel()) + "px"; - } - - int settingsBigTitlePixel() const override { - return 24; - } - - QString settingsBigTitleSize() const override { - return QString::number(settingsBigTitlePixel()) + "px"; - } - - QString onboardingTitle() const override { - return "28px"; - } - - QString settingsTextWeight() const override { - return "400"; - } - - QString settingsTitleWeight400() const override { - return "400"; - } - - QString settingsTitleWeight500() const override { - return "500"; - } - - QString settingsTitleWeight600() const override { - return "600"; - } - - QFont::Weight settingsTitleWeightDemiBold() const override { - return QFont::DemiBold; - } - - QFont::Weight settingsTitleWeightNormal() const override { - return QFont::Normal; - } - - QFont settingsFontDefault() const override{ - QFont defaultFont(settingsFont()); - defaultFont.setPixelSize(settingsTextPixel()); - defaultFont.setWeight(settingsTitleWeightNormal()); - return defaultFont; - } - - QString titleColor() const override { - return "#000000"; - } - - QString folderWizardSubtitleColor() const override { - return "#104996"; - } - - QString folderWizardPathColor() const override { - return "#97A3B4"; - } - - QString loginWizardFontGrey() const override { - return "#616161"; - } - - QString loginWizardFontLightGrey() const override { - return "#BDBDBD"; - } - - QString fontConfigurationCss(QString font, QString size, QString weight, QString color) const override { - return QString("font-family: %1; font-size: %2; font-weight: %3; color: %4; ").arg( - font, - size, - weight, - color); - } - - //Colors - QString settingsLinkColor() const override { - return "#02306A"; - } - - QString buttonPrimaryColor() const override { - return "#fa0000ff"; - } - - QString buttonSecondaryBorderColor() const override { - return "#D1D1D1"; - } - - QString buttonDisabledColor() const override { - return "#F0F0F0"; - } - - QString buttonPrimaryHoverColor() const override { - return "#05ec8cff"; - } - - QString buttonSecondaryHoverColor() const override { - return "#F5F5F5"; - } - - QString buttonPrimaryPressedColor() const override { - return "#b8a850ff"; - } - - QString buttonSecondaryPressedColor() const override { - return "#E0E0E0"; - } - - QString buttonDisabledFontColor() const override { - return "#BDBDBD"; - } - - QString white() const override { - return "#FFFFFF"; - } - - QString black() const override { - return "#000000"; - } - - QString dialogBackgroundColor() const override { - return "#FAFAFA"; - } - - QString menuBorderColor() const override { - return "#2E4360"; - } - - QString menuTextColor() const override { - return "#001B41"; - } - - QString menuSelectedItemColor() const override { - return "#F4F7FA"; - } - - QString menuBorderRadius() const override { - return "16px"; - } - - QString buttonPressedColor() const override { - return "#0B2A63"; - } - - QString buttonHoveredColor() const override { - return "#1474C4"; - } - - QString toolButtonHoveredColor() const override { - return "#DBEDF8"; - } - - QString toolButtonPressedColor() const override { - return "#95CAEB"; - } - - QString errorBorderColor() const override { - return "#EEACB2"; - } - - QString errorColor() const override { - return "#FDF3F4"; - } - - QString warningBorderColor() const override { - return "#F4BFAB"; - } - - QString warningColor() const override { - return "#FDF6F3"; - } - - QString successBorderColor() const override { - return "#9FD89F"; - } - - QString successColor() const override { - return "#F1FAF1"; - } - - QString infoBorderColor() const override { - return "#11C7E6"; - } - - QString infoColor() const override { - return "#E6F9FC"; - } - }; } #endif // _STRATOTHEME_H \ No newline at end of file From 3eb479344b6fbd88ecfb37a6dd65b961e0df060b Mon Sep 17 00:00:00 2001 From: Kevin Beraz Date: Tue, 21 Oct 2025 13:22:55 +0200 Subject: [PATCH 294/371] add missing colors into theme (to be able to overwrite them) --- src/gui/buttonstyle.h | 6 +++--- src/libsync/basetheme.h | 12 ++++++++++++ 2 files changed, 15 insertions(+), 3 deletions(-) diff --git a/src/gui/buttonstyle.h b/src/gui/buttonstyle.h index e531ec139c5fc..861be533965b8 100644 --- a/src/gui/buttonstyle.h +++ b/src/gui/buttonstyle.h @@ -118,7 +118,7 @@ class PrimaryButtonStyle : public ButtonStyle { QString buttonFocusedBorderColor() const override { - return OCC::WLTheme.black(); + return OCC::WLTheme.buttonPrimaryFocusedBorderColor(); } // Font @@ -152,7 +152,7 @@ class SecondaryButtonStyle : public ButtonStyle { // Default QString buttonDefaultColor() const override { - return OCC::WLTheme.white(); + return OCC::WLTheme.buttonSecondaryColor(); } QString buttonDefaultBorderColor() const override @@ -201,7 +201,7 @@ class SecondaryButtonStyle : public ButtonStyle { QString buttonFocusedBorderColor() const override { - return OCC::WLTheme.black(); + return OCC::WLTheme.buttonSecondaryFocusedBorderColor(); } // Font diff --git a/src/libsync/basetheme.h b/src/libsync/basetheme.h index bdd0fb617d82e..165d7b863d88b 100644 --- a/src/libsync/basetheme.h +++ b/src/libsync/basetheme.h @@ -228,6 +228,10 @@ class BaseTheme { return "#0F6CBD"; } + virtual QString buttonSecondaryColor() const { + return "#FFFFFF"; + } + virtual QString buttonSecondaryBorderColor() const { return "#D1D1D1"; } @@ -252,6 +256,14 @@ class BaseTheme { return "#E0E0E0"; } + virtual QString buttonPrimaryFocusedBorderColor() const { + return "#000000"; + } + + virtual QString buttonSecondaryFocusedBorderColor() const { + return "#000000"; + } + virtual QString buttonDisabledFontColor() const { return "#BDBDBD"; } From bc22a7b1d733863a4880f68375663320ebb89857 Mon Sep 17 00:00:00 2001 From: Kevin Beraz Date: Tue, 21 Oct 2025 13:29:42 +0200 Subject: [PATCH 295/371] overwrite colors for primary,/secondary buttons and settings-toolbuttons --- src/libsync/stratotheme.h | 48 +++++++++++++++++++++++++++++++++++++++ 1 file changed, 48 insertions(+) diff --git a/src/libsync/stratotheme.h b/src/libsync/stratotheme.h index dd8bd815fa9e3..ec990aebe790b 100644 --- a/src/libsync/stratotheme.h +++ b/src/libsync/stratotheme.h @@ -11,6 +11,54 @@ namespace OCC { class StratoTheme : public BaseTheme { public: StratoTheme() = default; + + QString buttonPrimaryColor() const override { + return "#272CB2"; + } + + QString buttonPrimaryHoverColor() const override { + return "#115EA3"; + } + + QString buttonPrimaryPressedColor() const override { + return "#272CB2"; + } + + QString buttonPrimaryFocusedBorderColor() const override { + return "#CDD5E3"; + } + + QString buttonSecondaryColor() const override { + return "#F7F7F9"; + } + + QString buttonSecondaryBorderColor() const override { + return "#CDD5E3"; + } + + QString buttonSecondaryHoverColor() const override { + return "#EDEEF3"; + } + + QString buttonSecondaryPressedColor() const override { + return "#D6D6E4"; + } + + QString buttonSecondaryFocusedBorderColor() const override { + return "#8493B3"; + } + + QString buttonDisabledColor() const override { + return "#EDEEF3"; + } + + QString toolButtonHoveredColor() const override { + return "#EDEEF3"; + } + + QString toolButtonPressedColor() const override { + return "#D6D6E4"; + } }; } #endif // _STRATOTHEME_H \ No newline at end of file From 936f3f4443739ad2b22ffaac6b5f32d5f433ed42 Mon Sep 17 00:00:00 2001 From: Kevin Beraz Date: Tue, 21 Oct 2025 16:33:01 +0200 Subject: [PATCH 296/371] introduce colors for icon in moreoptionsbutton --- src/gui/buttonstyle.h | 36 ++++++++++++++++++++++++ src/gui/moreoptionsbuttonstylehelper.cpp | 4 +-- src/libsync/basetheme.h | 8 ++++++ 3 files changed, 46 insertions(+), 2 deletions(-) diff --git a/src/gui/buttonstyle.h b/src/gui/buttonstyle.h index 861be533965b8..087db1560af04 100644 --- a/src/gui/buttonstyle.h +++ b/src/gui/buttonstyle.h @@ -48,6 +48,9 @@ class ButtonStyle // Font virtual QString buttonDisabledFontColor() const = 0; virtual QString buttonFontColor() const = 0; + //Icon + virtual QString buttonIconDefaultColor() const = 0; + virtual QString buttonIconHoverColor() const = 0; }; class PrimaryButtonStyle : public ButtonStyle { @@ -131,6 +134,17 @@ class PrimaryButtonStyle : public ButtonStyle { { return OCC::WLTheme.white(); } + + // Icon (Three Dots) + QString buttonIconDefaultColor() const override + { + return OCC::WLTheme.white(); + } + + QString buttonIconHoverColor() const override + { + return OCC::WLTheme.white(); + } }; class SecondaryButtonStyle : public ButtonStyle { @@ -214,6 +228,17 @@ class SecondaryButtonStyle : public ButtonStyle { { return OCC::WLTheme.black(); } + + // Icon (Three Dots) + QString buttonIconDefaultColor() const override + { + return OCC::WLTheme.white(); + } + + QString buttonIconHoverColor() const override + { + return OCC::WLTheme.white(); + } }; class MoreOptionsButtonStyle : public ButtonStyle { @@ -297,6 +322,17 @@ class MoreOptionsButtonStyle : public ButtonStyle { { return OCC::WLTheme.black(); } + + // Icon (Three Dots) + QString buttonIconDefaultColor() const + { + return OCC::WLTheme.buttonIconColor(); + } + + QString buttonIconHoverColor() const + { + return OCC::WLTheme.buttonIconHoverColor(); + } }; } diff --git a/src/gui/moreoptionsbuttonstylehelper.cpp b/src/gui/moreoptionsbuttonstylehelper.cpp index a26fcdad24c4b..ed1990cb338b2 100644 --- a/src/gui/moreoptionsbuttonstylehelper.cpp +++ b/src/gui/moreoptionsbuttonstylehelper.cpp @@ -96,11 +96,11 @@ void MoreOptionsButtonStyleHelper::adjustIconColor(QStyleOptionButton *option, c } else if(option->state & QStyle::State_MouseOver) { - iconColor = QColor(style.buttonDefaultColor()); + iconColor = QColor(style.buttonIconHoverColor()); } else { - iconColor = QColor(style.buttonHoverColor()); + iconColor = QColor(style.buttonIconDefaultColor()); } QIcon icon = option->icon; diff --git a/src/libsync/basetheme.h b/src/libsync/basetheme.h index 165d7b863d88b..db71d1aab7f5b 100644 --- a/src/libsync/basetheme.h +++ b/src/libsync/basetheme.h @@ -296,6 +296,14 @@ class BaseTheme { return "16px"; } + virtual QString buttonIconColor() const { + return "#1474C4"; + } + + virtual QString buttonIconHoverColor() const { + return "#FFFFFF"; + } + virtual QString buttonPressedColor() const { return "#0B2A63"; } From 129f67a60f7dd7aa31dac1d4ed8eb4583b0adbce Mon Sep 17 00:00:00 2001 From: Kevin Beraz Date: Tue, 21 Oct 2025 16:33:22 +0200 Subject: [PATCH 297/371] override moreoptionsbutton colors in settings --- src/libsync/stratotheme.h | 18 +++++++++++++++++- 1 file changed, 17 insertions(+), 1 deletion(-) diff --git a/src/libsync/stratotheme.h b/src/libsync/stratotheme.h index ec990aebe790b..1c5bf19be92c2 100644 --- a/src/libsync/stratotheme.h +++ b/src/libsync/stratotheme.h @@ -11,7 +11,7 @@ namespace OCC { class StratoTheme : public BaseTheme { public: StratoTheme() = default; - + QString buttonPrimaryColor() const override { return "#272CB2"; } @@ -52,6 +52,22 @@ class StratoTheme : public BaseTheme { return "#EDEEF3"; } + QString buttonIconColor() const override { + return "#2f2f70"; + } + + QString buttonIconHoverColor() const override { + return "#2f2f70"; + } + + QString buttonHoveredColor() const override { + return "#eeeff9"; + } + + QString buttonPressedColor() const override { + return "#D6D6E4"; + } + QString toolButtonHoveredColor() const override { return "#EDEEF3"; } From 224a60af87ac42b5aef855a4016cdfcf1e80eee1 Mon Sep 17 00:00:00 2001 From: Kevin Beraz Date: Tue, 21 Oct 2025 17:59:55 +0200 Subject: [PATCH 298/371] style filling of QuotaProgressBar using Theme file --- src/gui/accountsettings.cpp | 2 +- src/libsync/basetheme.h | 4 ++++ src/libsync/stratotheme.h | 4 ++++ 3 files changed, 9 insertions(+), 1 deletion(-) diff --git a/src/gui/accountsettings.cpp b/src/gui/accountsettings.cpp index f0352acf9848c..8629eb226965a 100644 --- a/src/gui/accountsettings.cpp +++ b/src/gui/accountsettings.cpp @@ -1832,7 +1832,7 @@ void AccountSettings::customizeStyle() _ui->connectLabel->setText(msg); const auto color = palette().highlight().color(); - _ui->quotaProgressBar->setStyleSheet(progressBarStyle().arg(WLTheme.dialogBackgroundColor(), color.name())); + _ui->quotaProgressBar->setStyleSheet(progressBarStyle().arg(WLTheme.dialogBackgroundColor(), WLTheme.quotaProgressColor())); _ui->quotaInfoLabel->setStyleSheet( WLTheme.fontConfigurationCss( diff --git a/src/libsync/basetheme.h b/src/libsync/basetheme.h index db71d1aab7f5b..95da8d583b9d4 100644 --- a/src/libsync/basetheme.h +++ b/src/libsync/basetheme.h @@ -224,6 +224,10 @@ class BaseTheme { return "#02306A"; } + virtual QString quotaProgressColor() const { + return "#308cc6"; + } + virtual QString buttonPrimaryColor() const { return "#0F6CBD"; } diff --git a/src/libsync/stratotheme.h b/src/libsync/stratotheme.h index 1c5bf19be92c2..64a52a13098f4 100644 --- a/src/libsync/stratotheme.h +++ b/src/libsync/stratotheme.h @@ -12,6 +12,10 @@ class StratoTheme : public BaseTheme { public: StratoTheme() = default; + QString quotaProgressColor() const override { + return "#272CB2"; + } + QString buttonPrimaryColor() const override { return "#272CB2"; } From 9a4aee43f20a525bf8456298d07a368e4e125ffb Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Christopher=20H=C3=A4tty?= Date: Wed, 22 Oct 2025 08:54:16 +0200 Subject: [PATCH 299/371] SES-357 - Added strato folder for icons --- theme/ses/strato/ses-IONOS-logo.svg | 35 ++++++++++++++++++++++ theme/ses/strato/ses-accountDelete.svg | 3 ++ theme/ses/strato/ses-accountLogout.svg | 10 +++++++ theme/ses/strato/ses-accountPause.svg | 3 ++ theme/ses/strato/ses-accountQuit.svg | 3 ++ theme/ses/strato/ses-accountResume.svg | 3 ++ theme/ses/strato/ses-activity.svg | 10 +++++++ theme/ses/strato/ses-addlivebackup.svg | 10 +++++++ theme/ses/strato/ses-chevron.svg | 3 ++ theme/ses/strato/ses-clipboard.svg | 10 +++++++ theme/ses/strato/ses-darkPlus.svg | 10 +++++++ theme/ses/strato/ses-external.svg | 3 ++ theme/ses/strato/ses-file.svg | 3 ++ theme/ses/strato/ses-folderIcon.svg | 3 ++ theme/ses/strato/ses-folderIconBright.svg | 3 ++ theme/ses/strato/ses-info.svg | 10 +++++++ theme/ses/strato/ses-lightClipboard.svg | 10 +++++++ theme/ses/strato/ses-lightPlus.svg | 10 +++++++ theme/ses/strato/ses-link.svg | 4 +++ theme/ses/strato/ses-more-white.svg | 3 ++ theme/ses/strato/ses-more.svg | 3 ++ theme/ses/strato/ses-questionmark.svg | 3 ++ theme/ses/strato/ses-refresh.svg | 10 +++++++ theme/ses/strato/ses-settings.svg | 3 ++ theme/ses/strato/ses-settingsAvatar.svg | 3 ++ theme/ses/strato/ses-snackbar-error.svg | 10 +++++++ theme/ses/strato/ses-snackbar-success.svg | 10 +++++++ theme/ses/strato/ses-snackbar-warning.svg | 3 ++ theme/ses/strato/ses-state-offline.svg | 3 ++ theme/ses/strato/ses-syncArrows.svg | 3 ++ theme/ses/strato/ses-syncstate-error.svg | 10 +++++++ theme/ses/strato/ses-syncstate-paused.svg | 10 +++++++ theme/ses/strato/ses-syncstate-success.svg | 10 +++++++ theme/ses/strato/ses-syncstate-syncing.svg | 16 ++++++++++ theme/ses/strato/ses-syncstate-warning.svg | 10 +++++++ theme/ses/strato/ses-website.svg | 10 +++++++ 36 files changed, 266 insertions(+) create mode 100644 theme/ses/strato/ses-IONOS-logo.svg create mode 100644 theme/ses/strato/ses-accountDelete.svg create mode 100644 theme/ses/strato/ses-accountLogout.svg create mode 100644 theme/ses/strato/ses-accountPause.svg create mode 100644 theme/ses/strato/ses-accountQuit.svg create mode 100644 theme/ses/strato/ses-accountResume.svg create mode 100644 theme/ses/strato/ses-activity.svg create mode 100644 theme/ses/strato/ses-addlivebackup.svg create mode 100644 theme/ses/strato/ses-chevron.svg create mode 100644 theme/ses/strato/ses-clipboard.svg create mode 100644 theme/ses/strato/ses-darkPlus.svg create mode 100644 theme/ses/strato/ses-external.svg create mode 100644 theme/ses/strato/ses-file.svg create mode 100644 theme/ses/strato/ses-folderIcon.svg create mode 100644 theme/ses/strato/ses-folderIconBright.svg create mode 100644 theme/ses/strato/ses-info.svg create mode 100644 theme/ses/strato/ses-lightClipboard.svg create mode 100644 theme/ses/strato/ses-lightPlus.svg create mode 100644 theme/ses/strato/ses-link.svg create mode 100644 theme/ses/strato/ses-more-white.svg create mode 100644 theme/ses/strato/ses-more.svg create mode 100644 theme/ses/strato/ses-questionmark.svg create mode 100644 theme/ses/strato/ses-refresh.svg create mode 100644 theme/ses/strato/ses-settings.svg create mode 100644 theme/ses/strato/ses-settingsAvatar.svg create mode 100644 theme/ses/strato/ses-snackbar-error.svg create mode 100644 theme/ses/strato/ses-snackbar-success.svg create mode 100644 theme/ses/strato/ses-snackbar-warning.svg create mode 100644 theme/ses/strato/ses-state-offline.svg create mode 100644 theme/ses/strato/ses-syncArrows.svg create mode 100644 theme/ses/strato/ses-syncstate-error.svg create mode 100644 theme/ses/strato/ses-syncstate-paused.svg create mode 100644 theme/ses/strato/ses-syncstate-success.svg create mode 100644 theme/ses/strato/ses-syncstate-syncing.svg create mode 100644 theme/ses/strato/ses-syncstate-warning.svg create mode 100644 theme/ses/strato/ses-website.svg diff --git a/theme/ses/strato/ses-IONOS-logo.svg b/theme/ses/strato/ses-IONOS-logo.svg new file mode 100644 index 0000000000000..816faa83f14e7 --- /dev/null +++ b/theme/ses/strato/ses-IONOS-logo.svg @@ -0,0 +1,35 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/theme/ses/strato/ses-accountDelete.svg b/theme/ses/strato/ses-accountDelete.svg new file mode 100644 index 0000000000000..8b35ccf415249 --- /dev/null +++ b/theme/ses/strato/ses-accountDelete.svg @@ -0,0 +1,3 @@ + + + diff --git a/theme/ses/strato/ses-accountLogout.svg b/theme/ses/strato/ses-accountLogout.svg new file mode 100644 index 0000000000000..60c5eacfcd135 --- /dev/null +++ b/theme/ses/strato/ses-accountLogout.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/theme/ses/strato/ses-accountPause.svg b/theme/ses/strato/ses-accountPause.svg new file mode 100644 index 0000000000000..6928b0a84ca1a --- /dev/null +++ b/theme/ses/strato/ses-accountPause.svg @@ -0,0 +1,3 @@ + + + diff --git a/theme/ses/strato/ses-accountQuit.svg b/theme/ses/strato/ses-accountQuit.svg new file mode 100644 index 0000000000000..95554efad4428 --- /dev/null +++ b/theme/ses/strato/ses-accountQuit.svg @@ -0,0 +1,3 @@ + + + diff --git a/theme/ses/strato/ses-accountResume.svg b/theme/ses/strato/ses-accountResume.svg new file mode 100644 index 0000000000000..fea95e07e255b --- /dev/null +++ b/theme/ses/strato/ses-accountResume.svg @@ -0,0 +1,3 @@ + + + diff --git a/theme/ses/strato/ses-activity.svg b/theme/ses/strato/ses-activity.svg new file mode 100644 index 0000000000000..09d58a5868610 --- /dev/null +++ b/theme/ses/strato/ses-activity.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/theme/ses/strato/ses-addlivebackup.svg b/theme/ses/strato/ses-addlivebackup.svg new file mode 100644 index 0000000000000..c78a03471aa8f --- /dev/null +++ b/theme/ses/strato/ses-addlivebackup.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/theme/ses/strato/ses-chevron.svg b/theme/ses/strato/ses-chevron.svg new file mode 100644 index 0000000000000..0823e78819528 --- /dev/null +++ b/theme/ses/strato/ses-chevron.svg @@ -0,0 +1,3 @@ + + + diff --git a/theme/ses/strato/ses-clipboard.svg b/theme/ses/strato/ses-clipboard.svg new file mode 100644 index 0000000000000..11e2a909d3851 --- /dev/null +++ b/theme/ses/strato/ses-clipboard.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/theme/ses/strato/ses-darkPlus.svg b/theme/ses/strato/ses-darkPlus.svg new file mode 100644 index 0000000000000..74f4f7eca5844 --- /dev/null +++ b/theme/ses/strato/ses-darkPlus.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/theme/ses/strato/ses-external.svg b/theme/ses/strato/ses-external.svg new file mode 100644 index 0000000000000..07f5a34f63f2f --- /dev/null +++ b/theme/ses/strato/ses-external.svg @@ -0,0 +1,3 @@ + + + diff --git a/theme/ses/strato/ses-file.svg b/theme/ses/strato/ses-file.svg new file mode 100644 index 0000000000000..0a8d10cbb7694 --- /dev/null +++ b/theme/ses/strato/ses-file.svg @@ -0,0 +1,3 @@ + + + diff --git a/theme/ses/strato/ses-folderIcon.svg b/theme/ses/strato/ses-folderIcon.svg new file mode 100644 index 0000000000000..b8fb4f1c7eebc --- /dev/null +++ b/theme/ses/strato/ses-folderIcon.svg @@ -0,0 +1,3 @@ + + + diff --git a/theme/ses/strato/ses-folderIconBright.svg b/theme/ses/strato/ses-folderIconBright.svg new file mode 100644 index 0000000000000..cec3690fe2544 --- /dev/null +++ b/theme/ses/strato/ses-folderIconBright.svg @@ -0,0 +1,3 @@ + + + diff --git a/theme/ses/strato/ses-info.svg b/theme/ses/strato/ses-info.svg new file mode 100644 index 0000000000000..bb88fa20fa785 --- /dev/null +++ b/theme/ses/strato/ses-info.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/theme/ses/strato/ses-lightClipboard.svg b/theme/ses/strato/ses-lightClipboard.svg new file mode 100644 index 0000000000000..cf099bb8fd6b1 --- /dev/null +++ b/theme/ses/strato/ses-lightClipboard.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/theme/ses/strato/ses-lightPlus.svg b/theme/ses/strato/ses-lightPlus.svg new file mode 100644 index 0000000000000..b19ae735102f4 --- /dev/null +++ b/theme/ses/strato/ses-lightPlus.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/theme/ses/strato/ses-link.svg b/theme/ses/strato/ses-link.svg new file mode 100644 index 0000000000000..bcab7b7518f91 --- /dev/null +++ b/theme/ses/strato/ses-link.svg @@ -0,0 +1,4 @@ + + + + diff --git a/theme/ses/strato/ses-more-white.svg b/theme/ses/strato/ses-more-white.svg new file mode 100644 index 0000000000000..a3d50d82f5c82 --- /dev/null +++ b/theme/ses/strato/ses-more-white.svg @@ -0,0 +1,3 @@ + + + diff --git a/theme/ses/strato/ses-more.svg b/theme/ses/strato/ses-more.svg new file mode 100644 index 0000000000000..87baffb082247 --- /dev/null +++ b/theme/ses/strato/ses-more.svg @@ -0,0 +1,3 @@ + + + diff --git a/theme/ses/strato/ses-questionmark.svg b/theme/ses/strato/ses-questionmark.svg new file mode 100644 index 0000000000000..e6fe962b7a657 --- /dev/null +++ b/theme/ses/strato/ses-questionmark.svg @@ -0,0 +1,3 @@ + + + diff --git a/theme/ses/strato/ses-refresh.svg b/theme/ses/strato/ses-refresh.svg new file mode 100644 index 0000000000000..1502d63212085 --- /dev/null +++ b/theme/ses/strato/ses-refresh.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/theme/ses/strato/ses-settings.svg b/theme/ses/strato/ses-settings.svg new file mode 100644 index 0000000000000..97cdc64e85eb9 --- /dev/null +++ b/theme/ses/strato/ses-settings.svg @@ -0,0 +1,3 @@ + + + diff --git a/theme/ses/strato/ses-settingsAvatar.svg b/theme/ses/strato/ses-settingsAvatar.svg new file mode 100644 index 0000000000000..55c13ae34b0fd --- /dev/null +++ b/theme/ses/strato/ses-settingsAvatar.svg @@ -0,0 +1,3 @@ + + + diff --git a/theme/ses/strato/ses-snackbar-error.svg b/theme/ses/strato/ses-snackbar-error.svg new file mode 100644 index 0000000000000..ddb015e7693c4 --- /dev/null +++ b/theme/ses/strato/ses-snackbar-error.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/theme/ses/strato/ses-snackbar-success.svg b/theme/ses/strato/ses-snackbar-success.svg new file mode 100644 index 0000000000000..cfabcb54ee292 --- /dev/null +++ b/theme/ses/strato/ses-snackbar-success.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/theme/ses/strato/ses-snackbar-warning.svg b/theme/ses/strato/ses-snackbar-warning.svg new file mode 100644 index 0000000000000..8dd360cd42c29 --- /dev/null +++ b/theme/ses/strato/ses-snackbar-warning.svg @@ -0,0 +1,3 @@ + + + diff --git a/theme/ses/strato/ses-state-offline.svg b/theme/ses/strato/ses-state-offline.svg new file mode 100644 index 0000000000000..eda854aac5306 --- /dev/null +++ b/theme/ses/strato/ses-state-offline.svg @@ -0,0 +1,3 @@ + + + diff --git a/theme/ses/strato/ses-syncArrows.svg b/theme/ses/strato/ses-syncArrows.svg new file mode 100644 index 0000000000000..88cd18033beb5 --- /dev/null +++ b/theme/ses/strato/ses-syncArrows.svg @@ -0,0 +1,3 @@ + + + diff --git a/theme/ses/strato/ses-syncstate-error.svg b/theme/ses/strato/ses-syncstate-error.svg new file mode 100644 index 0000000000000..4674cc8e2d4d4 --- /dev/null +++ b/theme/ses/strato/ses-syncstate-error.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/theme/ses/strato/ses-syncstate-paused.svg b/theme/ses/strato/ses-syncstate-paused.svg new file mode 100644 index 0000000000000..5f91042e48073 --- /dev/null +++ b/theme/ses/strato/ses-syncstate-paused.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/theme/ses/strato/ses-syncstate-success.svg b/theme/ses/strato/ses-syncstate-success.svg new file mode 100644 index 0000000000000..433f04a262429 --- /dev/null +++ b/theme/ses/strato/ses-syncstate-success.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/theme/ses/strato/ses-syncstate-syncing.svg b/theme/ses/strato/ses-syncstate-syncing.svg new file mode 100644 index 0000000000000..07aa6dda5c66c --- /dev/null +++ b/theme/ses/strato/ses-syncstate-syncing.svg @@ -0,0 +1,16 @@ + + + + + + + + + + + + + + + + diff --git a/theme/ses/strato/ses-syncstate-warning.svg b/theme/ses/strato/ses-syncstate-warning.svg new file mode 100644 index 0000000000000..32363111058db --- /dev/null +++ b/theme/ses/strato/ses-syncstate-warning.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/theme/ses/strato/ses-website.svg b/theme/ses/strato/ses-website.svg new file mode 100644 index 0000000000000..c909fa4d33aac --- /dev/null +++ b/theme/ses/strato/ses-website.svg @@ -0,0 +1,10 @@ + + + + + + + + + + From 61a2380152439f60eb0d18b41cd83f2ff498efdf Mon Sep 17 00:00:00 2001 From: Kevin Beraz Date: Wed, 22 Oct 2025 09:23:42 +0200 Subject: [PATCH 300/371] SES-357 overwrite color for dialog background --- src/libsync/stratotheme.h | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/libsync/stratotheme.h b/src/libsync/stratotheme.h index 64a52a13098f4..1167698ea7d27 100644 --- a/src/libsync/stratotheme.h +++ b/src/libsync/stratotheme.h @@ -12,6 +12,10 @@ class StratoTheme : public BaseTheme { public: StratoTheme() = default; + QString dialogBackgroundColor() const override { + return "#F7F7F9"; + } + QString quotaProgressColor() const override { return "#272CB2"; } From 76643852d5a159e0cbaa5d006be6a84ae2024b43 Mon Sep 17 00:00:00 2001 From: Kevin Beraz Date: Wed, 22 Oct 2025 09:58:08 +0200 Subject: [PATCH 301/371] SES-357 use correct color for primary button hover --- src/libsync/stratotheme.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/libsync/stratotheme.h b/src/libsync/stratotheme.h index 1167698ea7d27..b4d9ff9936766 100644 --- a/src/libsync/stratotheme.h +++ b/src/libsync/stratotheme.h @@ -25,7 +25,7 @@ class StratoTheme : public BaseTheme { } QString buttonPrimaryHoverColor() const override { - return "#115EA3"; + return "#2944CC"; } QString buttonPrimaryPressedColor() const override { From 50b4c8edaf30e19e774dda893c407bec77562fe7 Mon Sep 17 00:00:00 2001 From: Kevin Beraz Date: Wed, 22 Oct 2025 10:15:03 +0200 Subject: [PATCH 302/371] SES-357 overwrite link text color --- src/libsync/stratotheme.h | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/libsync/stratotheme.h b/src/libsync/stratotheme.h index b4d9ff9936766..b7d1142d61f0b 100644 --- a/src/libsync/stratotheme.h +++ b/src/libsync/stratotheme.h @@ -16,6 +16,10 @@ class StratoTheme : public BaseTheme { return "#F7F7F9"; } + QString settingsLinkColor() const override { + return "#272CB2"; + } + QString quotaProgressColor() const override { return "#272CB2"; } From 473a0e32fce6b7730d2880f345953090ebeb2360 Mon Sep 17 00:00:00 2001 From: Kevin Beraz Date: Wed, 22 Oct 2025 11:40:57 +0200 Subject: [PATCH 303/371] SES-357 style Context Menu in Settings --- src/gui/accountsettings.cpp | 14 ++++++++++---- src/libsync/basetheme.h | 4 ++++ src/libsync/stratotheme.h | 8 ++++++++ 3 files changed, 22 insertions(+), 4 deletions(-) diff --git a/src/gui/accountsettings.cpp b/src/gui/accountsettings.cpp index 8629eb226965a..6077d8b15e180 100644 --- a/src/gui/accountsettings.cpp +++ b/src/gui/accountsettings.cpp @@ -708,10 +708,10 @@ void AccountSettings::styleCustomContextMenu(QMenu *menu) const "background-color: %1; " "border: 1px solid %2; " "padding: 15px; " - "border-radius: %5; " - "font-family: %6; " - "font-size: %7; " - "font-weight: %8; " + "border-radius: %6; " + "font-family: %7; " + "font-size: %8; " + "font-weight: %9; " "}" "QMenu::item {" "background-color: transparent;" @@ -724,11 +724,17 @@ void AccountSettings::styleCustomContextMenu(QMenu *menu) const "color: %3; " "border-radius: 8px; " "}" + "QMenu::item:pressed {" + "background-color: %5; " + "color: %3; " + "border-radius: 8px; " + "}" ).arg( WLTheme.white(), WLTheme.menuBorderColor(), WLTheme.menuTextColor(), WLTheme.menuSelectedItemColor(), + WLTheme.menuPressedItemColor(), WLTheme.menuBorderRadius(), WLTheme.contextMenuFont(), WLTheme.settingsTextSize(), diff --git a/src/libsync/basetheme.h b/src/libsync/basetheme.h index 95da8d583b9d4..36bf9580daa33 100644 --- a/src/libsync/basetheme.h +++ b/src/libsync/basetheme.h @@ -296,6 +296,10 @@ class BaseTheme { return "#F4F7FA"; } + virtual QString menuPressedItemColor() const { + return "#F4F7FA"; + } + virtual QString menuBorderRadius() const { return "16px"; } diff --git a/src/libsync/stratotheme.h b/src/libsync/stratotheme.h index b7d1142d61f0b..8ef8f3be6e2c6 100644 --- a/src/libsync/stratotheme.h +++ b/src/libsync/stratotheme.h @@ -87,6 +87,14 @@ class StratoTheme : public BaseTheme { QString toolButtonPressedColor() const override { return "#D6D6E4"; } + + QString menuSelectedItemColor() const override { + return "#D6D6E4"; + } + + QString menuPressedItemColor() const override { + return "#5A6782"; + } }; } #endif // _STRATOTHEME_H \ No newline at end of file From cc07842b04825e1e179cc178745456665dd86673 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Christopher=20H=C3=A4tty?= Date: Wed, 22 Oct 2025 11:51:16 +0200 Subject: [PATCH 304/371] SES-357 - Added / copied ionos logos as strato version --- theme/black/strato_hidrive_next-icon.svg | 17 +++++++++ .../black/strato_hidrive_next-macOS-icon.svg | 27 ++++++++++++++ .../strato_hidrive_next-macOS-sidebar.svg | 10 +++++ .../colored/STRATO_logo_w_suffix_frontend.png | Bin 0 -> 3814 bytes .../colored/STRATO_logo_w_suffix_frontend.svg | 35 ++++++++++++++++++ .../STRATO_logo_w_suffix_frontend@2x.png | Bin 0 -> 7455 bytes theme/colored/strato_hidrive_next-icon.svg | 17 +++++++++ .../strato_hidrive_next-macOS-icon.svg | 27 ++++++++++++++ .../strato_hidrive_next-macOS-sidebar.svg | 10 +++++ theme/white/strato_hidrive_next-icon.svg | 17 +++++++++ .../white/strato_hidrive_next-macOS-icon.svg | 27 ++++++++++++++ .../strato_hidrive_next-macOS-sidebar.svg | 10 +++++ 12 files changed, 197 insertions(+) create mode 100644 theme/black/strato_hidrive_next-icon.svg create mode 100644 theme/black/strato_hidrive_next-macOS-icon.svg create mode 100644 theme/black/strato_hidrive_next-macOS-sidebar.svg create mode 100644 theme/colored/STRATO_logo_w_suffix_frontend.png create mode 100644 theme/colored/STRATO_logo_w_suffix_frontend.svg create mode 100644 theme/colored/STRATO_logo_w_suffix_frontend@2x.png create mode 100644 theme/colored/strato_hidrive_next-icon.svg create mode 100644 theme/colored/strato_hidrive_next-macOS-icon.svg create mode 100644 theme/colored/strato_hidrive_next-macOS-sidebar.svg create mode 100644 theme/white/strato_hidrive_next-icon.svg create mode 100644 theme/white/strato_hidrive_next-macOS-icon.svg create mode 100644 theme/white/strato_hidrive_next-macOS-sidebar.svg diff --git a/theme/black/strato_hidrive_next-icon.svg b/theme/black/strato_hidrive_next-icon.svg new file mode 100644 index 0000000000000..45cf3e0e8243c --- /dev/null +++ b/theme/black/strato_hidrive_next-icon.svg @@ -0,0 +1,17 @@ + + + + + + + + + + + + + + + + + diff --git a/theme/black/strato_hidrive_next-macOS-icon.svg b/theme/black/strato_hidrive_next-macOS-icon.svg new file mode 100644 index 0000000000000..c7e0c87b90b2d --- /dev/null +++ b/theme/black/strato_hidrive_next-macOS-icon.svg @@ -0,0 +1,27 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/theme/black/strato_hidrive_next-macOS-sidebar.svg b/theme/black/strato_hidrive_next-macOS-sidebar.svg new file mode 100644 index 0000000000000..4bb3ad7670764 --- /dev/null +++ b/theme/black/strato_hidrive_next-macOS-sidebar.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/theme/colored/STRATO_logo_w_suffix_frontend.png b/theme/colored/STRATO_logo_w_suffix_frontend.png new file mode 100644 index 0000000000000000000000000000000000000000..796fa1d7815f6f0713bcd04f52c5e2009d3e86b3 GIT binary patch literal 3814 zcmV1OX=(B{m0^3@ofAOKEAnz zHZby!#lJ6s-rbe^9DH}VUBjoz4BCX5-qa@WKj6D_*$TaT^w@DY(V#y~?VrKjD^F!wwME`h;WD-&Cf9yC{FGOP!r+sMC-n0GM^@w+TVn{~f$j~*QW zgK`73JVJOc2G^5H*Wmd}ab3Ok%#w@4UYBI1Ze|a6eug?2osY$}mrxD(jPK#8UyWul zLdj%3s0J4v)}(ij9vuLKHX+q5s5gLd@Q%)_OIl>hn;DLjm-^ZOO1i*)hq@RDMpRYm zZ9;Fn?%DY%^ysmNXpiyXz|YzWRm{a;n*l(MZAmbWIw~&*vyHI4)YlwKVXMrOo_XZd zu*0pysEOX=oHJs22i7x?K0SKuA=+bn%h0nNK}PpNI7@yJ4uj|N|4?|1%^1S>u)4hq z9T8@xvO%fO`OR_wz2x}rhjK%wi;WpEX1hlgL~qw{Bu#H@?-iIQoXt!MJ$h^zT2yt} zOXF^boruAAqwV|GP&cW2XF`` zMuh5TX{UpQNt)<=H<p0YuFdS$JgeVxC4exfb8IRD%z|TXsZ&8 zhX%JWD=N1*Utp)Y?6169-YQ| z86VHFFOd{vl6tC3XAY24!NyG3nr&H*<(b3qYtA)+18}Vs!Dpg=oy`T5N z%suuM?Rs^894PM4CPgAsKDu}bT?a2IE%w37J@y=3VSE4&gw&U(LgsrwcM)c14%r)f z^yra;?l3-pv2(Rr4t}#AU z>YG~5=$6#S0LzC3mNRyj`QbOjT;!vR%dLHW>_;R2YA+%Nb_tlySy1ul0J;Z~`aZoq zh0(>e;Dp&uNmAbox&UN;p8p({)>2q8^IKos9#*9Rc9s0Tn>fYS_&oU=vv}}(saW#M z> z@KfRVb%M5*-#cR!|$(%|wXzlSxdzx+@*YU-i~bwHJC#&W=p z{B|8a>D=^CrXlVs+)h;LSzv~iQ%d^oCgY2X9oS1&QQRNG?jYDL6fr+!0$96mSD0U@ z!BJ+FdzYv2G?J?N_PSvh`FjZ^WHl(Y}6D>p)8@uDWho{gK zGudVU-2oK?zI%HK9Y^;W9|EO5$H4f=7Kk7DQVb3(WUxavupFTD@l-f7Y|Ia(-Dl@t zGY*Aq0vXd?`8O83sOy{{=g%wgeU+8&qVJy0Std^)(d%BANPZIkhx|l1FVML%2Z!Hi z4vdjMPW~PULwbBa%$yk{Rfgud3|wu~_MRxAF8E7u@h#sKC$b}tG zr`c7qEtGOS+_8<8^G)JKP z-Av`BP?Foo13ZTKd1LzFiip{iO6;TfjU(C{)`O8tJ1Df$3v#@U_N(921>5(5ePMiv zqVn_yl@|%xevsYCUUToD!D@25hIEQwQNdd-OPRTu{Xdnk2WKjRTdI>UHRd}97Jkr< z(~_asFYTHLu9}Cjgv~GmJ@mt?wesI8#K+4y%axjlI)O;RLovOeIYwpZGD1TMr2#1! zpF#ud592GA`T{}mZb^LzTlHmxQ_l5Y88{G&woQWuSCITJE_fR=n<-TbmwjVizNDAJ z#H?$ZXjQZ|RV=fH4aTLR!)E2UQ5n^^aZvssvpm67Whaon?#x^Y8~D6S8S10nKPy$r z$%3z>a%AZ7JB3mjbdzKEshCa(ucM0YGi7HW_r=>nx5e&;=lu0ICg~qaFDA($W4Rtk?H>3KNF&mpFA@$oN`sV>3vpX2hA+Hr~8YbL7)Ud zdzrp>;9&4EP6n?0?Fi4u3b@j_Gv$7|>Zk`m8=M+y05`LkB$le(vPgn0289sK zlHaP-RfPLcW#Thqcn`f}ko;yT6F^$!CAIjo^1HE$8)M%jJ`7mCHioWHdHT!97PuRs zEhvF}7o7taRWFj-*hXU&rzOrA!^Tlzq4+hi<{1iUEIkR6NLm>>$xCVw;Cg4~NHP{qXniusm-U40Fp+f5J5L9(H9lo(ltq}NK zN;(R{8)IKd(1IV$+W5JelhGD zTD?Q)riU5}<}^i_^7IFA301%?%xYj+auYkgV>z}c`Thgx+F#KR4dF-c?Csfd7~x)_rv7)dto4sXDb|lp=4Ta<~~?Wq|B^F z5`&xB&qLwFIR8b9yvO%h+TyZ!(JbB_g#0CFVv}ekTk*|DT!K6REnZYKJRe6WG=X3s5 z*yUEg>t+SXa$}lyvZ6z5Z){H zw?S(TH*oj5`w|~Xyn5>1Ci_`BD<~bCXP5A^D)Od*DzCl5cM6&W{iIe_kTl6C!UNK0 zsW~)adt+m?8_t4UzBHjSxY>xb7bCYkeT|F;nuW^6JY_Mj?6IO5bq4hi2wP&^XWdSq zvqar6rfZctRUQqm06^oX>C0kZ37=Chb0*RrL|yGdfoOO%2_7J z-1j~#_S%sel70WYnYaiTV99fUSXl7yqQ(r z2bpo}MzqQZNKA55de|VkF%FLAY7jDj0X!0Fagyn9ns2xn_r!{C*)rD+N4lFrj89jYD4E2cHIHv^s4UnH%uJ&dng z%fM%N&p_GAKsnzeowIMramOUpXWG;^qJy9_J1O1IxN?0NjiJgr)8bdk`K)-dLm>kD z(Q16En9IIJ6Xz5vLpUQ=^!+d7KS!KV5kS%VBAqcemmAD5xX)qZ%mlPZLc0PWGfY-0 zN69lx=z!n%I8)_??wOt}jF}{5!XkV0=&=nz^$=AyjP=|FsXfjtLZD{0NogCIB1(Bb cnF~w&ADF3q-jt%s;{X5v07*qoM6N<$g1P)zp#T5? literal 0 HcmV?d00001 diff --git a/theme/colored/STRATO_logo_w_suffix_frontend.svg b/theme/colored/STRATO_logo_w_suffix_frontend.svg new file mode 100644 index 0000000000000..e65d8b2190ed7 --- /dev/null +++ b/theme/colored/STRATO_logo_w_suffix_frontend.svg @@ -0,0 +1,35 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/theme/colored/STRATO_logo_w_suffix_frontend@2x.png b/theme/colored/STRATO_logo_w_suffix_frontend@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..921840999cd9a36c4dd5223a04e10fb32d1038f3 GIT binary patch literal 7455 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 literal 0 HcmV?d00001 diff --git a/theme/colored/strato_hidrive_next-icon.svg b/theme/colored/strato_hidrive_next-icon.svg new file mode 100644 index 0000000000000..45cf3e0e8243c --- /dev/null +++ b/theme/colored/strato_hidrive_next-icon.svg @@ -0,0 +1,17 @@ + + + + + + + + + + + + + + + + + diff --git a/theme/colored/strato_hidrive_next-macOS-icon.svg b/theme/colored/strato_hidrive_next-macOS-icon.svg new file mode 100644 index 0000000000000..c7e0c87b90b2d --- /dev/null +++ b/theme/colored/strato_hidrive_next-macOS-icon.svg @@ -0,0 +1,27 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/theme/colored/strato_hidrive_next-macOS-sidebar.svg b/theme/colored/strato_hidrive_next-macOS-sidebar.svg new file mode 100644 index 0000000000000..4bb3ad7670764 --- /dev/null +++ b/theme/colored/strato_hidrive_next-macOS-sidebar.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/theme/white/strato_hidrive_next-icon.svg b/theme/white/strato_hidrive_next-icon.svg new file mode 100644 index 0000000000000..45cf3e0e8243c --- /dev/null +++ b/theme/white/strato_hidrive_next-icon.svg @@ -0,0 +1,17 @@ + + + + + + + + + + + + + + + + + diff --git a/theme/white/strato_hidrive_next-macOS-icon.svg b/theme/white/strato_hidrive_next-macOS-icon.svg new file mode 100644 index 0000000000000..c7e0c87b90b2d --- /dev/null +++ b/theme/white/strato_hidrive_next-macOS-icon.svg @@ -0,0 +1,27 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/theme/white/strato_hidrive_next-macOS-sidebar.svg b/theme/white/strato_hidrive_next-macOS-sidebar.svg new file mode 100644 index 0000000000000..4bb3ad7670764 --- /dev/null +++ b/theme/white/strato_hidrive_next-macOS-sidebar.svg @@ -0,0 +1,10 @@ + + + + + + + + + + From 7cdda499a4b2fded9966704a25f72fcb6ad817a6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Christopher=20H=C3=A4tty?= Date: Wed, 22 Oct 2025 11:53:07 +0200 Subject: [PATCH 305/371] SES-357 - Added launch config for linux (strato & ionos) --- .vscode/launch.json | 43 ++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 42 insertions(+), 1 deletion(-) diff --git a/.vscode/launch.json b/.vscode/launch.json index 5f3010da2331d..35bb85a720422 100644 --- a/.vscode/launch.json +++ b/.vscode/launch.json @@ -4,7 +4,48 @@ // For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387 "version": "0.2.0", "configurations": [ - + { + "name": "(Linux-IONOS-RelWithDebInfo) Launch HiDriveNext", + "type": "cppdbg", + "request": "launch", + "program": "${workspaceFolder}/build/linux-GCC-x64/RelWithDebInfo/bin/IONOS_HiDrive_Next", + "args": [], + "stopAtEntry": false, + "cwd": "${workspaceFolder}", + "environment": [ + { + "name": "LD_LIBRARY_PATH", + "value": "/home/chaetty/CraftRoot/bin:${env:LD_LIBRARY_PATH}" + }, + { "name": "QML_IMPORT_TRACE", "value": "1" }, + { "name": "QT_LOGGING_RULES", "value": "qt.qml.debug=true" } + ], + "MIMode": "gdb", + "setupCommands": [ + { "description": "Enable pretty-printing for gdb", "text": "-enable-pretty-printing", "ignoreFailures": true } + ] + }, + { + "name": "(Linux-STRATO-RelWithDebInfo) Launch HiDriveNext", + "type": "cppdbg", + "request": "launch", + "program": "${workspaceFolder}/build/linux-GCC-x64/RelWithDebInfo/bin/STRATO_HiDrive_Next", + "args": [], + "stopAtEntry": false, + "cwd": "${workspaceFolder}", + "environment": [ + { + "name": "LD_LIBRARY_PATH", + "value": "/home/chaetty/CraftRoot/bin:${env:LD_LIBRARY_PATH}" + }, + { "name": "QML_IMPORT_TRACE", "value": "1" }, + { "name": "QT_LOGGING_RULES", "value": "qt.qml.debug=true" } + ], + "MIMode": "gdb", + "setupCommands": [ + { "description": "Enable pretty-printing for gdb", "text": "-enable-pretty-printing", "ignoreFailures": true } + ] + }, { "name": "(RelWithDebInfo) Launch HiDriveNext", "type": "cppvsdbg", From c79f0486a54ec484fe694a4da5d5424d1013fa32 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Christopher=20H=C3=A4tty?= Date: Wed, 22 Oct 2025 11:54:13 +0200 Subject: [PATCH 306/371] SES-357 Configured CMake for dynamic switch between whitelabel --- IONOS.cmake | 91 +++++++++++++++++++++++------------ src/libsync/whitelabeltheme.h | 8 +-- 2 files changed, 63 insertions(+), 36 deletions(-) diff --git a/IONOS.cmake b/IONOS.cmake index c427641f83ac0..2caad36aa5954 100644 --- a/IONOS.cmake +++ b/IONOS.cmake @@ -1,44 +1,71 @@ set( APPLICATION_REV_DOMAIN "com.ionos.hidrivenext.desktopclient" ) -set( APPLICATION_VENDOR "IONOS SE" ) + +if("${WHITELABEL_NAME}" STREQUAL "strato") + set( APPLICATION_VENDOR "STRATO SE" ) +elseif("${WHITELABEL_NAME}" STREQUAL "ionos") + set( APPLICATION_VENDOR "IONOS SE" ) +endif() ## Theming options set( APPLICATION_WIZARD_HEADER_TITLE_COLOR "#000000" CACHE STRING "Hex color of the text in the wizard header" FORCE) -## Only needed for local build -set( APPLICATION_VIRTUALFILE_SUFFIX "${APPLICATION_SHORTNAME}_virtual" CACHE STRING "Virtual file suffix (not including the .)" FORCE) - -set( APPLICATION_NAME "STRATO HiDrive Next" ) -set( APPLICATION_SHORTNAME "STRATOHiDriveNext" ) -set( APPLICATION_EXECUTABLE "STRATO_HiDrive_Next" ) -set( APPLICATION_CONFIG_NAME "STRATO-HiDrive-Next" ) -set( APPLICATION_ICON_NAME "strato_hidrive_next" ) -set( APPLICATION_DOMAIN "strato.com" ) -set( APPLICATION_UPDATE_URL "https://customerupdates.nextcloud.com/client/" CACHE STRING "URL for updater" FORCE) -set( APPLICATION_HELP_URL "" CACHE STRING "URL for the help menu" FORCE) -set( APPLICATION_SERVER_URL "https://storage.strato.fr" CACHE STRING "URL for the server to use. If entered, the UI field will be pre-filled with it" FORCE) -set( WHITELABEL_BRAND "IONOS") - -## Windows Shell Extensions & MSI - IMPORTANT: Generate new GUIDs for custom builds with "guidgen" or "uuidgen" -if(WIN32) - # Context Menu - set( WIN_SHELLEXT_CONTEXT_MENU_GUID "{6B16FF7B-F242-4CE3-8FB9-F06EF127E0DC}" ) - - # Overlays - set( WIN_SHELLEXT_OVERLAY_GUID_ERROR "{243D887B-9F74-41DD-BACA-BC5501AF10AC}" ) - set( WIN_SHELLEXT_OVERLAY_GUID_OK "{2D88D499-3272-4A76-84BF-D252254B40D6}" ) - set( WIN_SHELLEXT_OVERLAY_GUID_OK_SHARED "{7BEF6B56-5B5B-4284-A70C-56D62254C97A}" ) - set( WIN_SHELLEXT_OVERLAY_GUID_SYNC "{5F2F493D-A683-426F-925E-4CA25F17C4A9}" ) - set( WIN_SHELLEXT_OVERLAY_GUID_WARNING "{7F256BB6-29D2-4E40-A6C4-E5E756E64C82}" ) - - # MSI Upgrade Code (without brackets) - set( WIN_MSI_UPGRADE_CODE "6C9E5670-E8A9-4BBD-9BDF-D003794AC177" ) +option(LOCALBUILD "Local developer build" OFF) + + +if(LOCALBUILD) + ## Only needed for local build + message(STATUS "Building in LOCAL mode") + + set( APPLICATION_VIRTUALFILE_SUFFIX "${APPLICATION_SHORTNAME}_virtual" CACHE STRING "Virtual file suffix (not including the .)" FORCE) + + ## Windows Shell Extensions & MSI - IMPORTANT: Generate new GUIDs for custom builds with "guidgen" or "uuidgen" + if(WIN32) + # Context Menu + set( WIN_SHELLEXT_CONTEXT_MENU_GUID "{6B16FF7B-F242-4CE3-8FB9-F06EF127E0DC}" ) + + # Overlays + set( WIN_SHELLEXT_OVERLAY_GUID_ERROR "{243D887B-9F74-41DD-BACA-BC5501AF10AC}" ) + set( WIN_SHELLEXT_OVERLAY_GUID_OK "{2D88D499-3272-4A76-84BF-D252254B40D6}" ) + set( WIN_SHELLEXT_OVERLAY_GUID_OK_SHARED "{7BEF6B56-5B5B-4284-A70C-56D62254C97A}" ) + set( WIN_SHELLEXT_OVERLAY_GUID_SYNC "{5F2F493D-A683-426F-925E-4CA25F17C4A9}" ) + set( WIN_SHELLEXT_OVERLAY_GUID_WARNING "{7F256BB6-29D2-4E40-A6C4-E5E756E64C82}" ) + + # MSI Upgrade Code (without brackets) + set( WIN_MSI_UPGRADE_CODE "6C9E5670-E8A9-4BBD-9BDF-D003794AC177" ) + endif() + + if("${WHITELABEL_NAME}" STREQUAL "strato") + set( APPLICATION_NAME "STRATO HiDrive Next" ) + set( APPLICATION_SHORTNAME "STRATOHiDriveNext" ) + set( APPLICATION_EXECUTABLE "STRATO_HiDrive_Next" ) + set( APPLICATION_CONFIG_NAME "STRATO-HiDrive-Next" ) + set( APPLICATION_ICON_NAME "strato_hidrive_next" ) + set( APPLICATION_DOMAIN "strato.com" ) + set( APPLICATION_UPDATE_URL "https://customerupdates.nextcloud.com/client/" CACHE STRING "URL for updater" FORCE) + set( APPLICATION_HELP_URL "" CACHE STRING "URL for the help menu" FORCE) + set( APPLICATION_SERVER_URL "https://storage.ionos.fr" CACHE STRING "URL for the server to use. If entered, the UI field will be pre-filled with it" FORCE) + elseif("${WHITELABEL_NAME}" STREQUAL "ionos") + set( APPLICATION_NAME "IONOS HiDrive Next" ) + set( APPLICATION_SHORTNAME "IONOSHiDriveNext" ) + set( APPLICATION_EXECUTABLE "IONOS_HiDrive_Next" ) + set( APPLICATION_CONFIG_NAME "IONOS-HiDrive-Next" ) + set( APPLICATION_ICON_NAME "ionos_hidrive_next" ) + set( APPLICATION_DOMAIN "ionos.com" ) + set( APPLICATION_UPDATE_URL "https://customerupdates.nextcloud.com/client/" CACHE STRING "URL for updater" FORCE) + set( APPLICATION_HELP_URL "" CACHE STRING "URL for the help menu" FORCE) + set( APPLICATION_SERVER_URL "https://storage.ionos.fr" CACHE STRING "URL for the server to use. If entered, the UI field will be pre-filled with it" FORCE) + endif() + endif() -if(APPLE AND APPLICATION_NAME STREQUAL "STRATO HiDrive Next") - set( APPLICATION_ICON_NAME "strato_hidrive_next-macOS" ) + +if(APPLE AND "${APPLICATION_NAME}" MATCHES "HiDrive Next") + set(APPLICATION_ICON_NAME "${APPLICATION_ICON_NAME}-macOS") message("Using macOS-specific application icon: ${APPLICATION_ICON_NAME}") endif() if(APPLICATION_NAME STREQUAL "STRATO HiDrive Next") - set( WHITELABEL_BRAND "STRATO" ) + add_compile_definitions(STRATO_WL_BUILD) +elseif(APPLICATION_NAME STREQUAL "IONOS HiDrive Next") + add_compile_definitions(IONOS_WL_BUILD) endif() \ No newline at end of file diff --git a/src/libsync/whitelabeltheme.h b/src/libsync/whitelabeltheme.h index b31ec7e798be7..a0f65050be102 100644 --- a/src/libsync/whitelabeltheme.h +++ b/src/libsync/whitelabeltheme.h @@ -1,7 +1,7 @@ #ifndef WHITELABELTHEME_H #define WHITELABELTHEME_H -// #define WHITELABEL_IONOS -#define WHITELABEL_STRATO +// // #define WHITELABEL_IONOS +// #define WHITELABEL_STRATO #include "basetheme.h" #include "stratotheme.h" @@ -10,9 +10,9 @@ namespace OCC { -#if defined(WHITELABEL_IONOS) +#if defined(IONOS_WL_BUILD) static IonosTheme WLTheme; -#elif defined(WHITELABEL_STRATO) +#elif defined(STRATO_WL_BUILD) static StratoTheme WLTheme; #else static BaseTheme WLTheme; From cc6ac648dded84fef5ea309e676f77c0de5e7e64 Mon Sep 17 00:00:00 2001 From: Kevin Beraz Date: Wed, 22 Oct 2025 13:36:19 +0200 Subject: [PATCH 307/371] SES-357 add seperated color for text when button is pressed, to keep ionos design intact --- src/gui/accountsettings.cpp | 15 ++++++++------- src/libsync/basetheme.h | 4 ++++ src/libsync/stratotheme.h | 8 ++++++++ 3 files changed, 20 insertions(+), 7 deletions(-) diff --git a/src/gui/accountsettings.cpp b/src/gui/accountsettings.cpp index 6077d8b15e180..7cbbc4b9111aa 100644 --- a/src/gui/accountsettings.cpp +++ b/src/gui/accountsettings.cpp @@ -708,10 +708,10 @@ void AccountSettings::styleCustomContextMenu(QMenu *menu) const "background-color: %1; " "border: 1px solid %2; " "padding: 15px; " - "border-radius: %6; " - "font-family: %7; " - "font-size: %8; " - "font-weight: %9; " + "border-radius: %7; " + "font-family: %8; " + "font-size: %9; " + "font-weight: %10; " "}" "QMenu::item {" "background-color: transparent;" @@ -720,19 +720,20 @@ void AccountSettings::styleCustomContextMenu(QMenu *menu) const "border-radius: 8px; " "}" "QMenu::item:selected {" - "background-color: %4; " + "background-color: %5; " "color: %3; " "border-radius: 8px; " "}" "QMenu::item:pressed {" - "background-color: %5; " - "color: %3; " + "background-color: %6; " + "color: %4; " "border-radius: 8px; " "}" ).arg( WLTheme.white(), WLTheme.menuBorderColor(), WLTheme.menuTextColor(), + WLTheme.menuPressedTextColor(), WLTheme.menuSelectedItemColor(), WLTheme.menuPressedItemColor(), WLTheme.menuBorderRadius(), diff --git a/src/libsync/basetheme.h b/src/libsync/basetheme.h index 36bf9580daa33..2033aaca494c4 100644 --- a/src/libsync/basetheme.h +++ b/src/libsync/basetheme.h @@ -292,6 +292,10 @@ class BaseTheme { return "#001B41"; } + virtual QString menuPressedTextColor() const { + return "#001B41"; + } + virtual QString menuSelectedItemColor() const { return "#F4F7FA"; } diff --git a/src/libsync/stratotheme.h b/src/libsync/stratotheme.h index 8ef8f3be6e2c6..c925ae6440194 100644 --- a/src/libsync/stratotheme.h +++ b/src/libsync/stratotheme.h @@ -88,10 +88,18 @@ class StratoTheme : public BaseTheme { return "#D6D6E4"; } + QString menuTextColor() const override { + return "#29294d"; + } + QString menuSelectedItemColor() const override { return "#D6D6E4"; } + QString menuPressedTextColor() const override { + return "#FFFFFF"; + } + QString menuPressedItemColor() const override { return "#5A6782"; } From fa01c0bea73e85d3dc999f00c6ebadc04193e39a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Christopher=20H=C3=A4tty?= Date: Wed, 22 Oct 2025 15:11:24 +0200 Subject: [PATCH 308/371] SES-357 Registred WLTheme for qml access --- src/gui/owncloudgui.cpp | 2 ++ src/libsync/basetheme.h | 7 ++++++- 2 files changed, 8 insertions(+), 1 deletion(-) diff --git a/src/gui/owncloudgui.cpp b/src/gui/owncloudgui.cpp index 31f5e94c57fe2..0420f214c2911 100644 --- a/src/gui/owncloudgui.cpp +++ b/src/gui/owncloudgui.cpp @@ -42,6 +42,7 @@ #include "tray/syncstatussummary.h" #include "tray/unifiedsearchresultslistmodel.h" #include "filesystem.h" +#include "whitelabeltheme.h" #ifdef WITH_LIBCLOUDPROVIDERS #include "cloudproviders/cloudprovidermanager.h" @@ -164,6 +165,7 @@ ownCloudGui::ownCloudGui(Application *parent) qmlRegisterSingletonInstance("com.ionos.hidrivenext.desktopclient", 1, 0, "UserAppsModel", UserAppsModel::instance()); qmlRegisterSingletonInstance("com.ionos.hidrivenext.desktopclient", 1, 0, "Theme", Theme::instance()); qmlRegisterSingletonInstance("com.ionos.hidrivenext.desktopclient", 1, 0, "Systray", Systray::instance()); + qmlRegisterSingletonInstance("com.ionos.hidrivenext.desktopclient", 1, 0, "WLTheme", &WLTheme); #ifdef BUILD_FILE_PROVIDER_MODULE qmlRegisterSingletonInstance("com.ionos.hidrivenext.desktopclient", 1, 0, "FileProviderSettingsController", Mac::FileProviderSettingsController::instance()); diff --git a/src/libsync/basetheme.h b/src/libsync/basetheme.h index 2033aaca494c4..435e9a0fdde85 100644 --- a/src/libsync/basetheme.h +++ b/src/libsync/basetheme.h @@ -7,8 +7,13 @@ namespace OCC { -class BaseTheme { +class BaseTheme : public QObject{ + Q_OBJECT + Q_PROPERTY(QString dialogBackgroundColor READ dialogBackgroundColor CONSTANT) + + public: + virtual ~BaseTheme() = default; // Base theme prefix (can be overridden) From 7ac3dbb71eb43fa39fc29d355a1a1dab29558f23 Mon Sep 17 00:00:00 2001 From: Kevin Beraz Date: Wed, 22 Oct 2025 15:14:07 +0200 Subject: [PATCH 309/371] SES-357 set highlight color for sync progress bar --- src/gui/folderstatusdelegate.cpp | 1 + src/libsync/basetheme.h | 4 ++++ src/libsync/stratotheme.h | 4 ++++ 3 files changed, 9 insertions(+) diff --git a/src/gui/folderstatusdelegate.cpp b/src/gui/folderstatusdelegate.cpp index 1679655146824..f573d5d82635d 100644 --- a/src/gui/folderstatusdelegate.cpp +++ b/src/gui/folderstatusdelegate.cpp @@ -373,6 +373,7 @@ void FolderStatusDelegate::drawSyncProgressBar(QPainter *painter, const QStyleOp progressBarOpt.rect = QStyle::visualRect(option.direction, option.rect, progressBarRect); QPalette paletteTmp = progressBarOpt.palette; paletteTmp.setColor(QPalette::Base, WLTheme.white()); + paletteTmp.setColor(QPalette::Highlight, WLTheme.syncProgressColor()); progressBarOpt.palette = paletteTmp; #ifdef Q_OS_MACOS diff --git a/src/libsync/basetheme.h b/src/libsync/basetheme.h index 435e9a0fdde85..98cca8da16399 100644 --- a/src/libsync/basetheme.h +++ b/src/libsync/basetheme.h @@ -233,6 +233,10 @@ class BaseTheme : public QObject{ return "#308cc6"; } + virtual QString syncProgressColor() const { + return "#359ada"; + } + virtual QString buttonPrimaryColor() const { return "#0F6CBD"; } diff --git a/src/libsync/stratotheme.h b/src/libsync/stratotheme.h index c925ae6440194..921202464aac0 100644 --- a/src/libsync/stratotheme.h +++ b/src/libsync/stratotheme.h @@ -24,6 +24,10 @@ class StratoTheme : public BaseTheme { return "#272CB2"; } + QString syncProgressColor() const override { + return "#009850"; + } + QString buttonPrimaryColor() const override { return "#272CB2"; } From 3a94b1dc508ef1ca8695de3f2893f9b2c79b312f Mon Sep 17 00:00:00 2001 From: Kevin Beraz Date: Wed, 22 Oct 2025 15:48:42 +0200 Subject: [PATCH 310/371] SES-357 style accountMenu colors in MainWindow --- src/libsync/basetheme.h | 3 ++- theme/Style/Style.qml | 4 ++-- 2 files changed, 4 insertions(+), 3 deletions(-) diff --git a/src/libsync/basetheme.h b/src/libsync/basetheme.h index 98cca8da16399..c382c6f7e84c0 100644 --- a/src/libsync/basetheme.h +++ b/src/libsync/basetheme.h @@ -10,7 +10,8 @@ namespace OCC { class BaseTheme : public QObject{ Q_OBJECT Q_PROPERTY(QString dialogBackgroundColor READ dialogBackgroundColor CONSTANT) - + Q_PROPERTY(QString toolButtonHoveredColor READ toolButtonHoveredColor CONSTANT) + Q_PROPERTY(QString toolButtonPressedColor READ toolButtonPressedColor CONSTANT) public: diff --git a/theme/Style/Style.qml b/theme/Style/Style.qml index 11ac4b96a4513..5002ded80bf3f 100644 --- a/theme/Style/Style.qml +++ b/theme/Style/Style.qml @@ -254,8 +254,8 @@ QtObject { readonly property color sesActionHover: "#1474C4" readonly property color sesActionPressed: "#0B2A63" readonly property color sesSelectedColor: "#F4F7FA" - readonly property color sesButtonPressed: "#95CAEB" - readonly property color sesAccountMenuHover: "#DBEDF8" + readonly property color sesButtonPressed: WLTheme.toolButtonPressedColor + readonly property color sesAccountMenuHover: WLTheme.toolButtonHoveredColor readonly property color sesDarkGreen: "#096B35" readonly property color sesDarkBlue: "#001B41" readonly property color sesTrayFontColor: "#001B41" From b7e742711dc575c6ac2452da05f6bb65b7e6e08a Mon Sep 17 00:00:00 2001 From: Kevin Beraz Date: Wed, 22 Oct 2025 16:08:44 +0200 Subject: [PATCH 311/371] SES-357 style background color of Main Window --- src/gui/SesComponents/SesTrayHeader.qml | 2 +- src/gui/filedetails/FileDetailsPage.qml | 2 +- src/gui/filedetails/ShareDetailsPage.qml | 2 +- src/gui/filedetails/ShareView.qml | 2 +- src/gui/macOS/ui/FileProviderEvictionDialog.qml | 4 ++-- src/gui/macOS/ui/FileProviderSettings.qml | 4 ++-- src/gui/tray/ActivityList.qml | 4 ++-- src/gui/tray/MainWindow.qml | 4 ++-- src/gui/tray/SyncStatus.qml | 2 +- src/gui/tray/TrayWindowAccountMenu.qml | 2 +- src/gui/tray/TrayWindowHeaderBar.qml | 4 ++-- src/libsync/basetheme.h | 5 +++++ src/libsync/stratotheme.h | 4 ++++ theme/Style/Style.qml | 1 + 14 files changed, 26 insertions(+), 16 deletions(-) diff --git a/src/gui/SesComponents/SesTrayHeader.qml b/src/gui/SesComponents/SesTrayHeader.qml index b7c70717af15b..94d3e7e23babf 100644 --- a/src/gui/SesComponents/SesTrayHeader.qml +++ b/src/gui/SesComponents/SesTrayHeader.qml @@ -17,7 +17,7 @@ import com.ionos.hidrivenext.desktopclient Rectangle { height: Style.sesTrayHeaderHeight + Style.sesHeaderTopMargin * 2 - color: Style.sesWhite + color: Style.sesBackgroundColor radius: 0.0 clip: true diff --git a/src/gui/filedetails/FileDetailsPage.qml b/src/gui/filedetails/FileDetailsPage.qml index 0a7f1b6f3af34..28d3f7e5f4249 100644 --- a/src/gui/filedetails/FileDetailsPage.qml +++ b/src/gui/filedetails/FileDetailsPage.qml @@ -74,7 +74,7 @@ Page { bottomPadding: intendedPadding background: Rectangle { - color: Style.sesWhite + color: Style.sesBackgroundColor } header: ColumnLayout { diff --git a/src/gui/filedetails/ShareDetailsPage.qml b/src/gui/filedetails/ShareDetailsPage.qml index 935d6c43928bc..535e5a2f05a3c 100644 --- a/src/gui/filedetails/ShareDetailsPage.qml +++ b/src/gui/filedetails/ShareDetailsPage.qml @@ -192,7 +192,7 @@ Page { padding: Style.standardSpacing * 2 background: Rectangle { - color: Style.sesWhite + color: Style.sesBackgroundColor } header: ColumnLayout { diff --git a/src/gui/filedetails/ShareView.qml b/src/gui/filedetails/ShareView.qml index fdfb047ebd282..9ac100067a640 100644 --- a/src/gui/filedetails/ShareView.qml +++ b/src/gui/filedetails/ShareView.qml @@ -89,7 +89,7 @@ ColumnLayout { } background: Rectangle { - color: Style.sesWhite + color: Style.sesBackgroundColor } anchors.centerIn: parent diff --git a/src/gui/macOS/ui/FileProviderEvictionDialog.qml b/src/gui/macOS/ui/FileProviderEvictionDialog.qml index 9597d6100c9ac..17cd51bb7224c 100644 --- a/src/gui/macOS/ui/FileProviderEvictionDialog.qml +++ b/src/gui/macOS/ui/FileProviderEvictionDialog.qml @@ -36,12 +36,12 @@ ApplicationWindow { font.family: Style.sesOpenSansRegular font.pixelSize: Style.sesFontPixelSize font.weight: Style.sesFontBoldWeight - palette.base: Style.sesWhite + palette.base: Style.sesBackgroundColor palette.windowText: Style.sesTrayFontColor palette.buttonText: Style.sesTrayFontColor title: qsTr("Evict materialised files") - color: Style.sesWhite + color: Style.sesBackgroundColor flags: Qt.Dialog | Qt.WindowStaysOnTopHint width: 640 height: 480 diff --git a/src/gui/macOS/ui/FileProviderSettings.qml b/src/gui/macOS/ui/FileProviderSettings.qml index b4449447523e0..1d3a534e8dd17 100644 --- a/src/gui/macOS/ui/FileProviderSettings.qml +++ b/src/gui/macOS/ui/FileProviderSettings.qml @@ -34,12 +34,12 @@ Page { font.family: Style.sesOpenSansRegular font.pixelSize: Style.sesFontPixelSize font.weight: Style.sesFontBoldWeight - palette.base: Style.sesWhite + palette.base: Style.sesBackgroundColor palette.windowText: Style.sesTrayFontColor palette.buttonText: Style.sesTrayFontColor background: Rectangle { - color: Style.sesWhite + color: Style.sesBackgroundColor border.width: root.showBorder ? Style.normalBorderWidth : 0 border.color: root.palette.dark } diff --git a/src/gui/tray/ActivityList.qml b/src/gui/tray/ActivityList.qml index 0ce6f021f0932..eaaa732e40335 100644 --- a/src/gui/tray/ActivityList.qml +++ b/src/gui/tray/ActivityList.qml @@ -21,7 +21,7 @@ ScrollView { } background: Rectangle { - color: Style.sesWhite + color: Style.sesBackgroundColor } signal openFile(string filePath) @@ -88,7 +88,7 @@ ScrollView { delegate: ActivityItem { background: Rectangle { - color: Style.sesWhite + color: Style.sesBackgroundColor } width: activityList.contentItem.width diff --git a/src/gui/tray/MainWindow.qml b/src/gui/tray/MainWindow.qml index 79a2578ebf53f..6253609171b74 100644 --- a/src/gui/tray/MainWindow.qml +++ b/src/gui/tray/MainWindow.qml @@ -46,7 +46,7 @@ ApplicationWindow { font.family: Style.sesOpenSansRegular font.pixelSize: Style.sesFontPixelSize font.weight: Style.sesFontBoldWeight - palette.base: Style.sesWhite + palette.base: Style.sesBackgroundColor palette.windowText: Style.sesTrayFontColor // TODO: Rather than setting all these palette colours manually, @@ -89,7 +89,7 @@ ApplicationWindow { radius: 0.0 border.width: Style.trayWindowBorderWidth border.color: palette.dark - color: Style.sesWhite + color: Style.sesBackgroundColor } Connections { diff --git a/src/gui/tray/SyncStatus.qml b/src/gui/tray/SyncStatus.qml index 0eb6e49cf4517..34b0a2af4d9d8 100644 --- a/src/gui/tray/SyncStatus.qml +++ b/src/gui/tray/SyncStatus.qml @@ -14,7 +14,7 @@ RowLayout { spacing: Style.trayHorizontalMargin Rectangle{ - color: Style.sesWhite + color: Style.sesBackgroundColor NC.SyncStatusSummary { id: syncStatus diff --git a/src/gui/tray/TrayWindowAccountMenu.qml b/src/gui/tray/TrayWindowAccountMenu.qml index a7f3829504bb3..b1627fceac56b 100644 --- a/src/gui/tray/TrayWindowAccountMenu.qml +++ b/src/gui/tray/TrayWindowAccountMenu.qml @@ -74,7 +74,7 @@ Button { background: Rectangle { border.color: Style.sesBorderColor - color: Style.sesWhite + color: Style.sesBackgroundColor radius: Style.sesCornerRadius } diff --git a/src/gui/tray/TrayWindowHeaderBar.qml b/src/gui/tray/TrayWindowHeaderBar.qml index f21ba6c7392a4..d96dcea191338 100644 --- a/src/gui/tray/TrayWindowHeaderBar.qml +++ b/src/gui/tray/TrayWindowHeaderBar.qml @@ -17,7 +17,7 @@ import com.ionos.hidrivenext.desktopclient Rectangle { height: Style.trayWindowHeaderHeight - color: Style.sesWhite + color: Style.sesBackgroundColor radius: 0.0 RowLayout { @@ -119,7 +119,7 @@ Rectangle { background: Rectangle { border.color: Style.sesBorderColor - color: Style.sesWhite + color: Style.sesBackgroundColor radius: 2 } diff --git a/src/libsync/basetheme.h b/src/libsync/basetheme.h index c382c6f7e84c0..6d1f1e96d47c6 100644 --- a/src/libsync/basetheme.h +++ b/src/libsync/basetheme.h @@ -10,6 +10,7 @@ namespace OCC { class BaseTheme : public QObject{ Q_OBJECT Q_PROPERTY(QString dialogBackgroundColor READ dialogBackgroundColor CONSTANT) + Q_PROPERTY(QString trayBackgroundColor READ trayBackgroundColor CONSTANT) Q_PROPERTY(QString toolButtonHoveredColor READ toolButtonHoveredColor CONSTANT) Q_PROPERTY(QString toolButtonPressedColor READ toolButtonPressedColor CONSTANT) @@ -294,6 +295,10 @@ class BaseTheme : public QObject{ return "#FAFAFA"; } + virtual QString trayBackgroundColor() const { + return "#FFFFFF"; + } + virtual QString menuBorderColor() const { return "#2E4360"; } diff --git a/src/libsync/stratotheme.h b/src/libsync/stratotheme.h index 921202464aac0..3d4f9c379bc1a 100644 --- a/src/libsync/stratotheme.h +++ b/src/libsync/stratotheme.h @@ -16,6 +16,10 @@ class StratoTheme : public BaseTheme { return "#F7F7F9"; } + QString trayBackgroundColor() const override { + return "#F7F7F9"; + } + QString settingsLinkColor() const override { return "#272CB2"; } diff --git a/theme/Style/Style.qml b/theme/Style/Style.qml index 5002ded80bf3f..5041b1c8150d1 100644 --- a/theme/Style/Style.qml +++ b/theme/Style/Style.qml @@ -246,6 +246,7 @@ QtObject { readonly property color sesIconDarkColor: "#001B41" readonly property color sesIconColor: "#1474C4" + readonly property color sesBackgroundColor: WLTheme.trayBackgroundColor readonly property color sesBorderColor: "#D7D7D7" readonly property color sesWhite: "#FFFFFF" readonly property color sesGray: "#465A75" From 82e26e69c39f0d2017b189ab7987b75c25903318 Mon Sep 17 00:00:00 2001 From: Kevin Beraz Date: Thu, 23 Oct 2025 09:41:08 +0200 Subject: [PATCH 312/371] SES-357 expose colors to style.qml --- src/libsync/basetheme.h | 3 +++ theme/Style/Style.qml | 6 +++--- 2 files changed, 6 insertions(+), 3 deletions(-) diff --git a/src/libsync/basetheme.h b/src/libsync/basetheme.h index 6d1f1e96d47c6..da8efdd8e77d8 100644 --- a/src/libsync/basetheme.h +++ b/src/libsync/basetheme.h @@ -11,6 +11,9 @@ class BaseTheme : public QObject{ Q_OBJECT Q_PROPERTY(QString dialogBackgroundColor READ dialogBackgroundColor CONSTANT) Q_PROPERTY(QString trayBackgroundColor READ trayBackgroundColor CONSTANT) + Q_PROPERTY(QString buttonIconColor READ buttonIconColor CONSTANT) + Q_PROPERTY(QString buttonHoveredColor READ buttonHoveredColor CONSTANT) + Q_PROPERTY(QString buttonPressedColor READ buttonPressedColor CONSTANT) Q_PROPERTY(QString toolButtonHoveredColor READ toolButtonHoveredColor CONSTANT) Q_PROPERTY(QString toolButtonPressedColor READ toolButtonPressedColor CONSTANT) diff --git a/theme/Style/Style.qml b/theme/Style/Style.qml index 5041b1c8150d1..de45d3fce91f7 100644 --- a/theme/Style/Style.qml +++ b/theme/Style/Style.qml @@ -244,7 +244,7 @@ QtObject { readonly property string sesMoreWhite: "qrc:///client/theme/ses/ses-more-white.svg" readonly property color sesIconDarkColor: "#001B41" - readonly property color sesIconColor: "#1474C4" + readonly property color sesIconColor: WLTheme.buttonIconColor readonly property color sesBackgroundColor: WLTheme.trayBackgroundColor readonly property color sesBorderColor: "#D7D7D7" @@ -252,8 +252,8 @@ QtObject { readonly property color sesGray: "#465A75" readonly property color sesTrayInputField: "#718095" readonly property color sesHover: "#F2F5F8" - readonly property color sesActionHover: "#1474C4" - readonly property color sesActionPressed: "#0B2A63" + readonly property color sesActionHover: WLTheme.buttonHoveredColor + readonly property color sesActionPressed: WLTheme.buttonPressedColor readonly property color sesSelectedColor: "#F4F7FA" readonly property color sesButtonPressed: WLTheme.toolButtonPressedColor readonly property color sesAccountMenuHover: WLTheme.toolButtonHoveredColor From a8f46702242225009fbbd2ee992e3e0fd3138bb7 Mon Sep 17 00:00:00 2001 From: Kevin Beraz Date: Thu, 23 Oct 2025 09:49:00 +0200 Subject: [PATCH 313/371] SES-357 rename icon source to fit purpose --- src/gui/filedetails/ShareDelegate.qml | 2 +- src/gui/tray/ActivityItemContent.qml | 2 +- src/gui/tray/UserLine.qml | 2 +- theme/Style/Style.qml | 2 +- 4 files changed, 4 insertions(+), 4 deletions(-) diff --git a/src/gui/filedetails/ShareDelegate.qml b/src/gui/filedetails/ShareDelegate.qml index eafbe9033212e..70a7655ec3c7d 100644 --- a/src/gui/filedetails/ShareDelegate.qml +++ b/src/gui/filedetails/ShareDelegate.qml @@ -238,7 +238,7 @@ GridLayout { toolTipText: qsTr("Share options") iconSource: Style.sesMore - iconSourceHovered: Style.sesMoreWhite + iconSourceHovered: Style.sesMoreHover width: Style.smallIconSize height: Style.smallIconSize diff --git a/src/gui/tray/ActivityItemContent.qml b/src/gui/tray/ActivityItemContent.qml index 576a81db7a428..0d853b131bfa6 100644 --- a/src/gui/tray/ActivityItemContent.qml +++ b/src/gui/tray/ActivityItemContent.qml @@ -173,7 +173,7 @@ RowLayout { width: Style.activityListButtonWidth height: Style.activityListButtonHeight iconSource: Style.sesMore - iconSourceHovered: Style.sesMoreWhite + iconSourceHovered: Style.sesMoreHover icon.width: Style.activityListButtonIconSize icon.height: Style.activityListButtonIconSize diff --git a/src/gui/tray/UserLine.qml b/src/gui/tray/UserLine.qml index b2cea78f21728..b91b991390e34 100644 --- a/src/gui/tray/UserLine.qml +++ b/src/gui/tray/UserLine.qml @@ -110,7 +110,7 @@ AbstractButton { property bool isActive: userMoreButton.pressed || userMoreButtonMenu.visible iconSource: Style.sesMore - iconSourceHovered: Style.sesMoreWhite + iconSourceHovered: Style.sesMoreHover Accessible.role: Accessible.ButtonMenu Accessible.name: qsTr("Account actions") diff --git a/theme/Style/Style.qml b/theme/Style/Style.qml index de45d3fce91f7..1111d9835551b 100644 --- a/theme/Style/Style.qml +++ b/theme/Style/Style.qml @@ -241,7 +241,7 @@ QtObject { readonly property string sesOfflineIcon: "qrc:///client/theme/ses/ses-state-offline.svg" readonly property string sesChevron: "qrc:///client/theme/ses/ses-chevron.svg" readonly property string sesMore: "qrc:///client/theme/ses/ses-more.svg" - readonly property string sesMoreWhite: "qrc:///client/theme/ses/ses-more-white.svg" + readonly property string sesMoreHover: "qrc:///client/theme/ses/ses-more-hover.svg" readonly property color sesIconDarkColor: "#001B41" readonly property color sesIconColor: WLTheme.buttonIconColor From 7f4f70936926686e2d7779e315f6ed5f6c13d641 Mon Sep 17 00:00:00 2001 From: Kevin Beraz Date: Thu, 23 Oct 2025 10:28:47 +0200 Subject: [PATCH 314/371] SES-357 add amd use sesPillButton colors --- src/libsync/basetheme.h | 15 +++++++++++++++ src/libsync/stratotheme.h | 12 ++++++++++++ theme/Style/Style.qml | 6 +++--- 3 files changed, 30 insertions(+), 3 deletions(-) diff --git a/src/libsync/basetheme.h b/src/libsync/basetheme.h index da8efdd8e77d8..70db274674961 100644 --- a/src/libsync/basetheme.h +++ b/src/libsync/basetheme.h @@ -16,6 +16,9 @@ class BaseTheme : public QObject{ Q_PROPERTY(QString buttonPressedColor READ buttonPressedColor CONSTANT) Q_PROPERTY(QString toolButtonHoveredColor READ toolButtonHoveredColor CONSTANT) Q_PROPERTY(QString toolButtonPressedColor READ toolButtonPressedColor CONSTANT) + Q_PROPERTY(QString pillButtonPrimaryColor READ pillButtonPrimaryColor CONSTANT) + Q_PROPERTY(QString pillButtonSecondaryColor READ pillButtonSecondaryColor CONSTANT) + Q_PROPERTY(QString pillButtonBorderColor READ pillButtonBorderColor CONSTANT) public: @@ -286,6 +289,18 @@ class BaseTheme : public QObject{ return "#BDBDBD"; } + virtual QString pillButtonPrimaryColor() const { + return "#0B2A63"; + } + + virtual QString pillButtonSecondaryColor() const { + return "#FFFFFF"; + } + + virtual QString pillButtonBorderColor() const { + return "#0B2A63"; + } + virtual QString white() const { return "#FFFFFF"; } diff --git a/src/libsync/stratotheme.h b/src/libsync/stratotheme.h index 3d4f9c379bc1a..e7c5cfd92dd7a 100644 --- a/src/libsync/stratotheme.h +++ b/src/libsync/stratotheme.h @@ -72,6 +72,18 @@ class StratoTheme : public BaseTheme { return "#EDEEF3"; } + QString pillButtonPrimaryColor() const override { + return "#272CB2"; + } + + QString pillButtonSecondaryColor() const override { + return "#E4E4ED"; + } + + QString pillButtonBorderColor() const override { + return "#FFFFFF"; + } + QString buttonIconColor() const override { return "#2f2f70"; } diff --git a/theme/Style/Style.qml b/theme/Style/Style.qml index 1111d9835551b..86bb67dd660cb 100644 --- a/theme/Style/Style.qml +++ b/theme/Style/Style.qml @@ -305,9 +305,9 @@ QtObject { property int sesTrayHeaderMargin: 11 property int sesTrayWindowWidth: 464 - property color sesPillButtonPrimaryBackgroundColor: "#0B2A63" - property color sesPillButtonSecondaryBackgroundColor: "white" - property color sesPillButtonBorderColor: "#0B2A63" + property color sesPillButtonPrimaryBackgroundColor: WLTheme.pillButtonPrimaryColor + property color sesPillButtonSecondaryBackgroundColor: WLTheme.pillButtonSecondaryColor + property color sesPillButtonBorderColor: WLTheme.pillButtonBorderColor property real sesPillIconSize: 16 property int sesPillButtonVerticalPadding: 4 property int sesPillButtonHorizontalPadding: 10 From e82d1c3d3d9c42ebb78f58a5d5f3297388c61d01 Mon Sep 17 00:00:00 2001 From: Kevin Beraz Date: Thu, 23 Oct 2025 11:15:24 +0200 Subject: [PATCH 315/371] SES-357 adjust error message box colors --- src/libsync/basetheme.h | 14 ++++++++++++-- src/libsync/stratotheme.h | 16 ++++++++++++++++ theme/Style/Style.qml | 4 ++-- 3 files changed, 30 insertions(+), 4 deletions(-) diff --git a/src/libsync/basetheme.h b/src/libsync/basetheme.h index 70db274674961..53a1af7c44fa2 100644 --- a/src/libsync/basetheme.h +++ b/src/libsync/basetheme.h @@ -19,6 +19,8 @@ class BaseTheme : public QObject{ Q_PROPERTY(QString pillButtonPrimaryColor READ pillButtonPrimaryColor CONSTANT) Q_PROPERTY(QString pillButtonSecondaryColor READ pillButtonSecondaryColor CONSTANT) Q_PROPERTY(QString pillButtonBorderColor READ pillButtonBorderColor CONSTANT) + Q_PROPERTY(QString trayErrorBorderColor READ trayErrorBorderColor CONSTANT) + Q_PROPERTY(QString trayErrorTextColor READ trayErrorTextColor CONSTANT) public: @@ -365,12 +367,20 @@ class BaseTheme : public QObject{ return "#95CAEB"; } + virtual QString errorColor() const { + return "#FDF3F4"; + } + virtual QString errorBorderColor() const { return "#EEACB2"; } - virtual QString errorColor() const { - return "#FDF3F4"; + virtual QString trayErrorBorderColor() const { + return "#F50C00"; + } + + virtual QString trayErrorTextColor() const { + return "#C80A00"; } virtual QString warningBorderColor() const { diff --git a/src/libsync/stratotheme.h b/src/libsync/stratotheme.h index e7c5cfd92dd7a..33c1376730e73 100644 --- a/src/libsync/stratotheme.h +++ b/src/libsync/stratotheme.h @@ -123,6 +123,22 @@ class StratoTheme : public BaseTheme { QString menuPressedItemColor() const override { return "#5A6782"; } + + QString errorColor() const override { + return "#FFE0ED"; + } + + QString errorBorderColor() const override { + return "#FF004C"; + } + + QString trayErrorBorderColor() const override { + return "#FF004C"; + } + + QString trayErrorTextColor() const override { + return "#CC0052"; + } }; } #endif // _STRATOTHEME_H \ No newline at end of file diff --git a/theme/Style/Style.qml b/theme/Style/Style.qml index 86bb67dd660cb..7267aaac8bc80 100644 --- a/theme/Style/Style.qml +++ b/theme/Style/Style.qml @@ -260,8 +260,8 @@ QtObject { readonly property color sesDarkGreen: "#096B35" readonly property color sesDarkBlue: "#001B41" readonly property color sesTrayFontColor: "#001B41" - readonly property color sesErrorBoxBorder: "#F50C00" - readonly property color sesErrorBoxText: "#C80A00" + readonly property color sesErrorBoxBorder: WLTheme.trayErrorBorderColor + readonly property color sesErrorBoxText: WLTheme.trayErrorTextColor readonly property color sesMenuBorder: "#2E4360" readonly property color sesSearchFieldContent: "#97A3B4" From e14fc5312bb6008bc29ee3931a902738266cd502 Mon Sep 17 00:00:00 2001 From: Kevin Beraz Date: Thu, 23 Oct 2025 11:24:39 +0200 Subject: [PATCH 316/371] SES-357 set tray Font color --- src/libsync/basetheme.h | 5 +++++ src/libsync/stratotheme.h | 4 ++++ theme/Style/Style.qml | 2 +- 3 files changed, 10 insertions(+), 1 deletion(-) diff --git a/src/libsync/basetheme.h b/src/libsync/basetheme.h index 53a1af7c44fa2..d0b3d6c3f5fa3 100644 --- a/src/libsync/basetheme.h +++ b/src/libsync/basetheme.h @@ -10,6 +10,7 @@ namespace OCC { class BaseTheme : public QObject{ Q_OBJECT Q_PROPERTY(QString dialogBackgroundColor READ dialogBackgroundColor CONSTANT) + Q_PROPERTY(QString trayFontColor READ trayFontColor CONSTANT) Q_PROPERTY(QString trayBackgroundColor READ trayBackgroundColor CONSTANT) Q_PROPERTY(QString buttonIconColor READ buttonIconColor CONSTANT) Q_PROPERTY(QString buttonHoveredColor READ buttonHoveredColor CONSTANT) @@ -226,6 +227,10 @@ class BaseTheme : public QObject{ return "#BDBDBD"; } + virtual QString trayFontColor() const { + return "#001B41"; + } + virtual QString fontConfigurationCss(QString font, QString size, QString weight, QString color) const { return QString("font-family: %1; font-size: %2; font-weight: %3; color: %4; ").arg( font, diff --git a/src/libsync/stratotheme.h b/src/libsync/stratotheme.h index 33c1376730e73..afe0fc892890e 100644 --- a/src/libsync/stratotheme.h +++ b/src/libsync/stratotheme.h @@ -16,6 +16,10 @@ class StratoTheme : public BaseTheme { return "#F7F7F9"; } + QString trayFontColor() const override { + return "#2F2F70"; + } + QString trayBackgroundColor() const override { return "#F7F7F9"; } diff --git a/theme/Style/Style.qml b/theme/Style/Style.qml index 7267aaac8bc80..b14f766b86d05 100644 --- a/theme/Style/Style.qml +++ b/theme/Style/Style.qml @@ -259,7 +259,7 @@ QtObject { readonly property color sesAccountMenuHover: WLTheme.toolButtonHoveredColor readonly property color sesDarkGreen: "#096B35" readonly property color sesDarkBlue: "#001B41" - readonly property color sesTrayFontColor: "#001B41" + readonly property color sesTrayFontColor: WLTheme.trayFontColor readonly property color sesErrorBoxBorder: WLTheme.trayErrorBorderColor readonly property color sesErrorBoxText: WLTheme.trayErrorTextColor readonly property color sesMenuBorder: "#2E4360" From 85987c037793115025a5795bf823c07d92b58258 Mon Sep 17 00:00:00 2001 From: Kevin Beraz Date: Thu, 23 Oct 2025 11:37:37 +0200 Subject: [PATCH 317/371] SES-357 set broder color in main window --- src/libsync/basetheme.h | 5 +++++ src/libsync/stratotheme.h | 4 ++++ theme/Style/Style.qml | 2 +- 3 files changed, 10 insertions(+), 1 deletion(-) diff --git a/src/libsync/basetheme.h b/src/libsync/basetheme.h index d0b3d6c3f5fa3..9badfc9181305 100644 --- a/src/libsync/basetheme.h +++ b/src/libsync/basetheme.h @@ -11,6 +11,7 @@ class BaseTheme : public QObject{ Q_OBJECT Q_PROPERTY(QString dialogBackgroundColor READ dialogBackgroundColor CONSTANT) Q_PROPERTY(QString trayFontColor READ trayFontColor CONSTANT) + Q_PROPERTY(QString trayBorderColor READ trayBorderColor CONSTANT) Q_PROPERTY(QString trayBackgroundColor READ trayBackgroundColor CONSTANT) Q_PROPERTY(QString buttonIconColor READ buttonIconColor CONSTANT) Q_PROPERTY(QString buttonHoveredColor READ buttonHoveredColor CONSTANT) @@ -231,6 +232,10 @@ class BaseTheme : public QObject{ return "#001B41"; } + virtual QString trayBorderColor() const { + return "#D7D7D7"; + } + virtual QString fontConfigurationCss(QString font, QString size, QString weight, QString color) const { return QString("font-family: %1; font-size: %2; font-weight: %3; color: %4; ").arg( font, diff --git a/src/libsync/stratotheme.h b/src/libsync/stratotheme.h index afe0fc892890e..6357c477e66e8 100644 --- a/src/libsync/stratotheme.h +++ b/src/libsync/stratotheme.h @@ -20,6 +20,10 @@ class StratoTheme : public BaseTheme { return "#2F2F70"; } + QString trayBorderColor() const override { + return "#8493B3"; + } + QString trayBackgroundColor() const override { return "#F7F7F9"; } diff --git a/theme/Style/Style.qml b/theme/Style/Style.qml index b14f766b86d05..81aeadab0fd07 100644 --- a/theme/Style/Style.qml +++ b/theme/Style/Style.qml @@ -247,7 +247,7 @@ QtObject { readonly property color sesIconColor: WLTheme.buttonIconColor readonly property color sesBackgroundColor: WLTheme.trayBackgroundColor - readonly property color sesBorderColor: "#D7D7D7" + readonly property color sesBorderColor: WLTheme.trayBorderColor readonly property color sesWhite: "#FFFFFF" readonly property color sesGray: "#465A75" readonly property color sesTrayInputField: "#718095" From 5b70c0f0e3546f7b44ef9ef0cd820af4ae284117 Mon Sep 17 00:00:00 2001 From: Kevin Beraz Date: Thu, 23 Oct 2025 11:50:42 +0200 Subject: [PATCH 318/371] SES-357 set border color of input fields in tray --- src/libsync/basetheme.h | 5 +++++ src/libsync/stratotheme.h | 4 ++++ theme/Style/Style.qml | 2 +- 3 files changed, 10 insertions(+), 1 deletion(-) diff --git a/src/libsync/basetheme.h b/src/libsync/basetheme.h index 9badfc9181305..2e7c0917d2480 100644 --- a/src/libsync/basetheme.h +++ b/src/libsync/basetheme.h @@ -12,6 +12,7 @@ class BaseTheme : public QObject{ Q_PROPERTY(QString dialogBackgroundColor READ dialogBackgroundColor CONSTANT) Q_PROPERTY(QString trayFontColor READ trayFontColor CONSTANT) Q_PROPERTY(QString trayBorderColor READ trayBorderColor CONSTANT) + Q_PROPERTY(QString trayInputFieldBorderColor READ trayInputFieldBorderColor CONSTANT) Q_PROPERTY(QString trayBackgroundColor READ trayBackgroundColor CONSTANT) Q_PROPERTY(QString buttonIconColor READ buttonIconColor CONSTANT) Q_PROPERTY(QString buttonHoveredColor READ buttonHoveredColor CONSTANT) @@ -236,6 +237,10 @@ class BaseTheme : public QObject{ return "#D7D7D7"; } + virtual QString trayInputFieldBorderColor() const { + return "#718095"; + } + virtual QString fontConfigurationCss(QString font, QString size, QString weight, QString color) const { return QString("font-family: %1; font-size: %2; font-weight: %3; color: %4; ").arg( font, diff --git a/src/libsync/stratotheme.h b/src/libsync/stratotheme.h index 6357c477e66e8..96e4ac4885c1b 100644 --- a/src/libsync/stratotheme.h +++ b/src/libsync/stratotheme.h @@ -24,6 +24,10 @@ class StratoTheme : public BaseTheme { return "#8493B3"; } + QString trayInputFieldBorderColor() const override { + return "#8493B3"; + } + QString trayBackgroundColor() const override { return "#F7F7F9"; } diff --git a/theme/Style/Style.qml b/theme/Style/Style.qml index 81aeadab0fd07..8d53c7138edf6 100644 --- a/theme/Style/Style.qml +++ b/theme/Style/Style.qml @@ -250,7 +250,7 @@ QtObject { readonly property color sesBorderColor: WLTheme.trayBorderColor readonly property color sesWhite: "#FFFFFF" readonly property color sesGray: "#465A75" - readonly property color sesTrayInputField: "#718095" + readonly property color sesTrayInputField: WLTheme.trayInputFieldBorderColor readonly property color sesHover: "#F2F5F8" readonly property color sesActionHover: WLTheme.buttonHoveredColor readonly property color sesActionPressed: WLTheme.buttonPressedColor From b83706a261cd868cad00758756cfd795f152f785 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Christopher=20H=C3=A4tty?= Date: Thu, 23 Oct 2025 11:41:50 +0200 Subject: [PATCH 319/371] SES-357 Added copied files to theme --- theme.qrc.in | 37 +++++++++++++++++++++++++++++++++++++ 1 file changed, 37 insertions(+) diff --git a/theme.qrc.in b/theme.qrc.in index 2e108db5d24bc..692efe43bad9a 100644 --- a/theme.qrc.in +++ b/theme.qrc.in @@ -283,5 +283,42 @@ theme/ses/ses-syncArrows.svg theme/ses/ses-external.svg theme/ses/ses-website.svg + theme/colored/STRATO_logo_w_suffix_frontend.png + theme/colored/STRATO_logo_w_suffix_frontend@2x.png + theme/colored/STRATO_logo_w_suffix_frontend.svg + theme/ses/strato/ses-accountDelete.svg + theme/ses/strato/ses-accountLogout.svg + theme/ses/strato/ses-accountPause.svg + theme/ses/strato/ses-accountQuit.svg + theme/ses/strato/ses-accountResume.svg + theme/ses/strato/ses-activity.svg + theme/ses/strato/ses-chevron.svg + theme/ses/strato/ses-clipboard.svg + theme/ses/strato/ses-lightClipboard.svg + theme/ses/strato/ses-darkPlus.svg + theme/ses/strato/ses-lightPlus.svg + theme/ses/strato/ses-addlivebackup.svg + theme/ses/strato/ses-file.svg + theme/ses/strato/ses-folderIcon.svg + theme/ses/strato/ses-folderIconBright.svg + theme/ses/strato/ses-syncstate-success.svg + theme/ses/strato/ses-syncstate-syncing.svg + theme/ses/strato/ses-syncstate-paused.svg + theme/ses/strato/ses-syncstate-warning.svg + theme/ses/strato/ses-syncstate-error.svg + theme/ses/strato/ses-state-offline.svg + theme/ses/strato/ses-snackbar-success.svg + theme/ses/strato/ses-snackbar-warning.svg + theme/ses/strato/ses-snackbar-error.svg + theme/ses/strato/ses-more.svg + theme/ses/strato/ses-more-white.svg + theme/ses/strato/ses-questionmark.svg + theme/ses/strato/ses-refresh.svg + theme/ses/strato/ses-settings.svg + theme/ses/strato/ses-settingsAvatar.svg + theme/ses/strato/ses-info.svg + theme/ses/strato/ses-syncArrows.svg + theme/ses/strato/ses-external.svg + theme/ses/strato/ses-website.svg From df7b08c3a6dff2b27b69eb041bd23976c71a4a21 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Christopher=20H=C3=A4tty?= Date: Thu, 23 Oct 2025 11:47:11 +0200 Subject: [PATCH 320/371] SES-357 Added overwritable additional icon path --- src/libsync/basetheme.h | 16 +++++++++------- src/libsync/ionostheme.h | 2 ++ src/libsync/stratotheme.h | 2 ++ 3 files changed, 13 insertions(+), 7 deletions(-) diff --git a/src/libsync/basetheme.h b/src/libsync/basetheme.h index 2e7c0917d2480..15c2b3f2d3b27 100644 --- a/src/libsync/basetheme.h +++ b/src/libsync/basetheme.h @@ -29,27 +29,26 @@ class BaseTheme : public QObject{ virtual ~BaseTheme() = default; - // Base theme prefix (can be overridden) - virtual QString themePrefix() const { return QStringLiteral(":/theme/"); } + virtual QString additionalThemePrefix() const { return QStringLiteral(""); } virtual QString avatarIcon() const { - return QString(Theme::themePrefix) + QStringLiteral("ses/ses-folderIcon.svg"); + return QString(Theme::themePrefix) + _sesFolder + additionalThemePrefix() + QStringLiteral("ses-settingsAvatar.svg"); } virtual QString folderIcon() const { - return QString(Theme::themePrefix) + QStringLiteral("ses/ses-folderIcon.svg"); + return QString(Theme::themePrefix) + _sesFolder + additionalThemePrefix() + QStringLiteral("ses-folderIcon.svg"); } virtual QString syncArrows() const { - return QString(Theme::themePrefix) + QStringLiteral("ses/ses-syncArrows.svg"); + return QString(Theme::themePrefix) + _sesFolder + additionalThemePrefix() + QStringLiteral("ses-syncArrows.svg"); } virtual QString questionCircleIcon() const { - return QString(Theme::themePrefix) + QStringLiteral("ses/ses-questionMark.svg"); + return QString(Theme::themePrefix) + _sesFolder + additionalThemePrefix() + QStringLiteral("ses-questionMark.svg"); } virtual QString liveBackupPlusIcon() const { - return QString(Theme::themePrefix) + QStringLiteral("ses/ses-addlivebackup.svg"); + return QString(Theme::themePrefix) + _sesFolder + additionalThemePrefix() + QStringLiteral("ses-addlivebackup.svg"); } virtual QString plusIcon() const { @@ -421,6 +420,9 @@ class BaseTheme : public QObject{ virtual QString infoColor() const { return "#E6F9FC"; } + + private: + inline static const QString _sesFolder = QStringLiteral("ses/"); }; } #endif // _BASETHEME_H \ No newline at end of file diff --git a/src/libsync/ionostheme.h b/src/libsync/ionostheme.h index 2a16b5a914663..4a14da4d2db2b 100644 --- a/src/libsync/ionostheme.h +++ b/src/libsync/ionostheme.h @@ -11,6 +11,8 @@ namespace OCC { class IonosTheme : public BaseTheme { public: IonosTheme() = default; + + QString additionalThemePrefix() const override { return QStringLiteral(""); } }; } #endif // _IONOSTHEME_H \ No newline at end of file diff --git a/src/libsync/stratotheme.h b/src/libsync/stratotheme.h index 96e4ac4885c1b..eaf69b0f28dcd 100644 --- a/src/libsync/stratotheme.h +++ b/src/libsync/stratotheme.h @@ -12,6 +12,8 @@ class StratoTheme : public BaseTheme { public: StratoTheme() = default; + QString additionalThemePrefix() const override { return QStringLiteral("strato/"); } + QString dialogBackgroundColor() const override { return "#F7F7F9"; } From 1f230919fa60e406b0019b3c04abfb48e39db4b9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Christopher=20H=C3=A4tty?= Date: Thu, 23 Oct 2025 11:56:49 +0200 Subject: [PATCH 321/371] SES-357 Replaced strato icon --- theme/black/strato_hidrive_next-icon.svg | 19 +++---------------- theme/colored/strato_hidrive_next-icon.svg | 19 +++---------------- theme/white/strato_hidrive_next-icon.svg | 19 +++---------------- 3 files changed, 9 insertions(+), 48 deletions(-) diff --git a/theme/black/strato_hidrive_next-icon.svg b/theme/black/strato_hidrive_next-icon.svg index 45cf3e0e8243c..4665637f6ddb3 100644 --- a/theme/black/strato_hidrive_next-icon.svg +++ b/theme/black/strato_hidrive_next-icon.svg @@ -1,17 +1,4 @@ - - - - - - - - - - - - - - - - + + + diff --git a/theme/colored/strato_hidrive_next-icon.svg b/theme/colored/strato_hidrive_next-icon.svg index 45cf3e0e8243c..4665637f6ddb3 100644 --- a/theme/colored/strato_hidrive_next-icon.svg +++ b/theme/colored/strato_hidrive_next-icon.svg @@ -1,17 +1,4 @@ - - - - - - - - - - - - - - - - + + + diff --git a/theme/white/strato_hidrive_next-icon.svg b/theme/white/strato_hidrive_next-icon.svg index 45cf3e0e8243c..4665637f6ddb3 100644 --- a/theme/white/strato_hidrive_next-icon.svg +++ b/theme/white/strato_hidrive_next-icon.svg @@ -1,17 +1,4 @@ - - - - - - - - - - - - - - - - + + + From 6c6369dde719feff08b043a0422e396a1748c861 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Christopher=20H=C3=A4tty?= Date: Thu, 23 Oct 2025 14:16:31 +0200 Subject: [PATCH 322/371] NoIssue - Fix/Change to cmake --- IONOS.cmake | 12 ++---------- 1 file changed, 2 insertions(+), 10 deletions(-) diff --git a/IONOS.cmake b/IONOS.cmake index 2caad36aa5954..f164fcb38b8f6 100644 --- a/IONOS.cmake +++ b/IONOS.cmake @@ -1,17 +1,7 @@ set( APPLICATION_REV_DOMAIN "com.ionos.hidrivenext.desktopclient" ) -if("${WHITELABEL_NAME}" STREQUAL "strato") - set( APPLICATION_VENDOR "STRATO SE" ) -elseif("${WHITELABEL_NAME}" STREQUAL "ionos") - set( APPLICATION_VENDOR "IONOS SE" ) -endif() - -## Theming options -set( APPLICATION_WIZARD_HEADER_TITLE_COLOR "#000000" CACHE STRING "Hex color of the text in the wizard header" FORCE) - option(LOCALBUILD "Local developer build" OFF) - if(LOCALBUILD) ## Only needed for local build message(STATUS "Building in LOCAL mode") @@ -65,7 +55,9 @@ if(APPLE AND "${APPLICATION_NAME}" MATCHES "HiDrive Next") endif() if(APPLICATION_NAME STREQUAL "STRATO HiDrive Next") + set( APPLICATION_VENDOR "STRATO SE" ) add_compile_definitions(STRATO_WL_BUILD) elseif(APPLICATION_NAME STREQUAL "IONOS HiDrive Next") + set( APPLICATION_VENDOR "IONOS SE" ) add_compile_definitions(IONOS_WL_BUILD) endif() \ No newline at end of file From 4d232acc9c3404ce511d93ae6ceffb57af948ba6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Christopher=20H=C3=A4tty?= Date: Thu, 23 Oct 2025 14:19:33 +0200 Subject: [PATCH 323/371] SES-357 Changed Tray Header Logo --- src/gui/tray/HeaderLogo.qml | 2 +- src/libsync/basetheme.h | 3 +++ src/libsync/ionostheme.h | 4 ++++ src/libsync/stratotheme.h | 4 ++++ theme.qrc.in | 1 + theme/Style/Style.qml | 2 +- theme/ses/strato/ses-IONOS-logo.svg | 35 ---------------------------- theme/ses/strato/ses-STRATO-logo.svg | 21 +++++++++++++++++ 8 files changed, 35 insertions(+), 37 deletions(-) delete mode 100644 theme/ses/strato/ses-IONOS-logo.svg create mode 100644 theme/ses/strato/ses-STRATO-logo.svg diff --git a/src/gui/tray/HeaderLogo.qml b/src/gui/tray/HeaderLogo.qml index 54ce6f3b1c56b..918d14b342ecc 100644 --- a/src/gui/tray/HeaderLogo.qml +++ b/src/gui/tray/HeaderLogo.qml @@ -14,7 +14,7 @@ Rectangle { Image{ id: trayWindowLogo cache: false - source: Style.sesIonosLogoIcon + source: Style.sesHeaderLogoIcon sourceSize: Qt.size(width, height) fillMode: Image.PreserveAspectFit anchors{ diff --git a/src/libsync/basetheme.h b/src/libsync/basetheme.h index 15c2b3f2d3b27..43bba3d854be8 100644 --- a/src/libsync/basetheme.h +++ b/src/libsync/basetheme.h @@ -24,6 +24,7 @@ class BaseTheme : public QObject{ Q_PROPERTY(QString pillButtonBorderColor READ pillButtonBorderColor CONSTANT) Q_PROPERTY(QString trayErrorBorderColor READ trayErrorBorderColor CONSTANT) Q_PROPERTY(QString trayErrorTextColor READ trayErrorTextColor CONSTANT) + Q_PROPERTY(QString sesHeaderLogoIcon READ sesHeaderLogoIcon CONSTANT) public: @@ -54,6 +55,8 @@ class BaseTheme : public QObject{ virtual QString plusIcon() const { return QStringLiteral("qrc:///client/theme/ses/ses-darkPlus.svg"); } + + virtual QString sesHeaderLogoIcon() const = 0; virtual QString deleteIcon() const { return QStringLiteral("qrc:///client/theme/ses/ses-accountDelete.svg"); diff --git a/src/libsync/ionostheme.h b/src/libsync/ionostheme.h index 4a14da4d2db2b..0f67a183e780a 100644 --- a/src/libsync/ionostheme.h +++ b/src/libsync/ionostheme.h @@ -13,6 +13,10 @@ class IonosTheme : public BaseTheme { IonosTheme() = default; QString additionalThemePrefix() const override { return QStringLiteral(""); } + + QString sesHeaderLogoIcon() const override { + return QStringLiteral("qrc:///client/theme/ses/ses-IONOS-logo.svg"); + } }; } #endif // _IONOSTHEME_H \ No newline at end of file diff --git a/src/libsync/stratotheme.h b/src/libsync/stratotheme.h index eaf69b0f28dcd..7b5871a0a66f2 100644 --- a/src/libsync/stratotheme.h +++ b/src/libsync/stratotheme.h @@ -153,6 +153,10 @@ class StratoTheme : public BaseTheme { QString trayErrorTextColor() const override { return "#CC0052"; } + + QString sesHeaderLogoIcon() const override { + return QStringLiteral("qrc:///client/theme/ses/strato/ses-STRATO-logo.svg"); + } }; } #endif // _STRATOTHEME_H \ No newline at end of file diff --git a/theme.qrc.in b/theme.qrc.in index 692efe43bad9a..d8c41932bdef8 100644 --- a/theme.qrc.in +++ b/theme.qrc.in @@ -283,6 +283,7 @@ theme/ses/ses-syncArrows.svg theme/ses/ses-external.svg theme/ses/ses-website.svg + theme/ses/strato/ses-STRATO-logo.svg theme/colored/STRATO_logo_w_suffix_frontend.png theme/colored/STRATO_logo_w_suffix_frontend@2x.png theme/colored/STRATO_logo_w_suffix_frontend.svg diff --git a/theme/Style/Style.qml b/theme/Style/Style.qml index 8d53c7138edf6..1c9030b85f514 100644 --- a/theme/Style/Style.qml +++ b/theme/Style/Style.qml @@ -221,7 +221,7 @@ QtObject { // SES readonly property string sesWebsiteIcon: "qrc:///client/theme/ses/ses-website.svg" readonly property string sesFolderIcon: "qrc:///client/theme/ses/ses-folderIcon.svg" - readonly property string sesIonosLogoIcon: "qrc:///client/theme/ses/ses-IONOS-logo.svg" + readonly property string sesHeaderLogoIcon: WLTheme.sesHeaderLogoIcon readonly property string sesAvatar: "qrc:///client/theme/ses/ses-settingsAvatar.svg" diff --git a/theme/ses/strato/ses-IONOS-logo.svg b/theme/ses/strato/ses-IONOS-logo.svg deleted file mode 100644 index 816faa83f14e7..0000000000000 --- a/theme/ses/strato/ses-IONOS-logo.svg +++ /dev/null @@ -1,35 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/theme/ses/strato/ses-STRATO-logo.svg b/theme/ses/strato/ses-STRATO-logo.svg new file mode 100644 index 0000000000000..e26ddbeced9e1 --- /dev/null +++ b/theme/ses/strato/ses-STRATO-logo.svg @@ -0,0 +1,21 @@ + + + + + + + + + + + + + + + + + + + + + From f1e1e3d20103f3b51d0b5a5feda270900644e32f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Christopher=20H=C3=A4tty?= Date: Thu, 23 Oct 2025 15:05:31 +0200 Subject: [PATCH 324/371] SES-357 Removed some unused icon methods --- src/libsync/basetheme.h | 20 -------------------- 1 file changed, 20 deletions(-) diff --git a/src/libsync/basetheme.h b/src/libsync/basetheme.h index 43bba3d854be8..7b21481ff1ffe 100644 --- a/src/libsync/basetheme.h +++ b/src/libsync/basetheme.h @@ -66,26 +66,6 @@ class BaseTheme : public QObject{ return QStringLiteral("qrc:///client/theme/ses/ses-refresh.svg"); } - virtual QString syncSuccessIcon() const { - return QStringLiteral("qrc:///client/theme/ses/ses-syncstatus-success.svg"); - } - - virtual QString syncWarnIcon() const { - return QStringLiteral("qrc:///client/theme/ses/ses-syncstatus-warning.svg"); - } - - virtual QString syncErrorIcon() const { - return QStringLiteral("qrc:///client/theme/ses/ses-syncstatus-error.svg"); - } - - virtual QString syncPausedIcon() const { - return QStringLiteral("qrc:///client/theme/ses/ses-syncstatus-paused.svg"); - } - - virtual QString syncingIcon() const { - return QStringLiteral("qrc:///client/theme/ses/ses-syncstatus-syncing.svg"); - } - virtual QString syncOfflineIcon() const { return QStringLiteral("qrc:///client/theme/ses/ses-state-offline.svg"); } From 045239a61253c77756347a94322f5502ed82bcbe Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Christopher=20H=C3=A4tty?= Date: Thu, 23 Oct 2025 15:08:00 +0200 Subject: [PATCH 325/371] SES-357 Added and switched sync state icons --- theme/colored/state-error.svg | 7 ++++--- theme/colored/state-ok.svg | 12 +++++++++--- theme/colored/state-pause.svg | 10 ++-------- theme/colored/state-sync.svg | 16 ++-------------- theme/colored/state-warning.svg | 7 ++++--- theme/ses/strato/ses-syncstate-error.svg | 7 ++++--- theme/ses/strato/ses-syncstate-paused.svg | 10 ++-------- theme/ses/strato/ses-syncstate-success.svg | 12 +++++++++--- theme/ses/strato/ses-syncstate-syncing.svg | 16 ++-------------- theme/ses/strato/ses-syncstate-warning.svg | 7 ++++--- 10 files changed, 42 insertions(+), 62 deletions(-) diff --git a/theme/colored/state-error.svg b/theme/colored/state-error.svg index 4674cc8e2d4d4..5222e0cd407f7 100644 --- a/theme/colored/state-error.svg +++ b/theme/colored/state-error.svg @@ -1,9 +1,10 @@ - - + + + - + diff --git a/theme/colored/state-ok.svg b/theme/colored/state-ok.svg index 433f04a262429..d618238640fe9 100644 --- a/theme/colored/state-ok.svg +++ b/theme/colored/state-ok.svg @@ -1,10 +1,16 @@ - - + + + + + - + + + + diff --git a/theme/colored/state-pause.svg b/theme/colored/state-pause.svg index 5f91042e48073..11b9b6672eeed 100644 --- a/theme/colored/state-pause.svg +++ b/theme/colored/state-pause.svg @@ -1,10 +1,4 @@ - - - - - - - - + + diff --git a/theme/colored/state-sync.svg b/theme/colored/state-sync.svg index 07aa6dda5c66c..4a0d29b3b2218 100644 --- a/theme/colored/state-sync.svg +++ b/theme/colored/state-sync.svg @@ -1,16 +1,4 @@ - - - - - - - - - - - - - - + + diff --git a/theme/colored/state-warning.svg b/theme/colored/state-warning.svg index 32363111058db..ab3b6db9175e2 100644 --- a/theme/colored/state-warning.svg +++ b/theme/colored/state-warning.svg @@ -1,9 +1,10 @@ - - + + + - + diff --git a/theme/ses/strato/ses-syncstate-error.svg b/theme/ses/strato/ses-syncstate-error.svg index 4674cc8e2d4d4..5222e0cd407f7 100644 --- a/theme/ses/strato/ses-syncstate-error.svg +++ b/theme/ses/strato/ses-syncstate-error.svg @@ -1,9 +1,10 @@ - - + + + - + diff --git a/theme/ses/strato/ses-syncstate-paused.svg b/theme/ses/strato/ses-syncstate-paused.svg index 5f91042e48073..11b9b6672eeed 100644 --- a/theme/ses/strato/ses-syncstate-paused.svg +++ b/theme/ses/strato/ses-syncstate-paused.svg @@ -1,10 +1,4 @@ - - - - - - - - + + diff --git a/theme/ses/strato/ses-syncstate-success.svg b/theme/ses/strato/ses-syncstate-success.svg index 433f04a262429..d618238640fe9 100644 --- a/theme/ses/strato/ses-syncstate-success.svg +++ b/theme/ses/strato/ses-syncstate-success.svg @@ -1,10 +1,16 @@ - - + + + + + - + + + + diff --git a/theme/ses/strato/ses-syncstate-syncing.svg b/theme/ses/strato/ses-syncstate-syncing.svg index 07aa6dda5c66c..4a0d29b3b2218 100644 --- a/theme/ses/strato/ses-syncstate-syncing.svg +++ b/theme/ses/strato/ses-syncstate-syncing.svg @@ -1,16 +1,4 @@ - - - - - - - - - - - - - - + + diff --git a/theme/ses/strato/ses-syncstate-warning.svg b/theme/ses/strato/ses-syncstate-warning.svg index 32363111058db..ab3b6db9175e2 100644 --- a/theme/ses/strato/ses-syncstate-warning.svg +++ b/theme/ses/strato/ses-syncstate-warning.svg @@ -1,9 +1,10 @@ - - + + + - + From ca7bfce80572b46a900c4a1d9f064e52ced495f4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Christopher=20H=C3=A4tty?= Date: Thu, 23 Oct 2025 15:33:27 +0200 Subject: [PATCH 326/371] SES-357 Some Icons --- theme/colored/data-protection-logo.png | Bin 7590 -> 18505 bytes theme/ses/strato/ses-addlivebackup.svg | 7 ++++--- theme/ses/strato/ses-settingsAvatar.svg | 2 +- theme/ses/strato/ses-snackbar-warning.svg | 2 +- theme/ses/strato/ses-website.svg | 6 +++--- 5 files changed, 9 insertions(+), 8 deletions(-) diff --git a/theme/colored/data-protection-logo.png b/theme/colored/data-protection-logo.png index 1e609a11af747952d920720409a8dd08b29e511f..e75146a6b228ca74a0c1a8f20691a6ef8e9852f5 100644 GIT binary patch literal 18505 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 Dcd*#xPV&#!C@payVLzfkQurhlp&qJh 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

          +Jx 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 diff --git a/theme/ses/strato/ses-addlivebackup.svg b/theme/ses/strato/ses-addlivebackup.svg index c78a03471aa8f..7fc60ec4aa925 100644 --- a/theme/ses/strato/ses-addlivebackup.svg +++ b/theme/ses/strato/ses-addlivebackup.svg @@ -1,9 +1,10 @@ - - + + + - + diff --git a/theme/ses/strato/ses-settingsAvatar.svg b/theme/ses/strato/ses-settingsAvatar.svg index 55c13ae34b0fd..0b57320cf5e85 100644 --- a/theme/ses/strato/ses-settingsAvatar.svg +++ b/theme/ses/strato/ses-settingsAvatar.svg @@ -1,3 +1,3 @@ - + diff --git a/theme/ses/strato/ses-snackbar-warning.svg b/theme/ses/strato/ses-snackbar-warning.svg index 8dd360cd42c29..4fd487d5ebe03 100644 --- a/theme/ses/strato/ses-snackbar-warning.svg +++ b/theme/ses/strato/ses-snackbar-warning.svg @@ -1,3 +1,3 @@ - + diff --git a/theme/ses/strato/ses-website.svg b/theme/ses/strato/ses-website.svg index c909fa4d33aac..08183c53858fc 100644 --- a/theme/ses/strato/ses-website.svg +++ b/theme/ses/strato/ses-website.svg @@ -1,9 +1,9 @@ - - + + - + From 3b2972c3189d0b9193baab7c056e5153706dd5f1 Mon Sep 17 00:00:00 2001 From: Kevin Beraz Date: Fri, 24 Oct 2025 12:02:10 +0200 Subject: [PATCH 327/371] SES-357 replace Whitelabel logo with suffix --- src/gui/wizard/welcomepage.cpp | 10 +++- .../colored/STRATO_logo_w_suffix_frontend.png | Bin 3814 -> 3541 bytes .../colored/STRATO_logo_w_suffix_frontend.svg | 54 +++++++----------- 3 files changed, 28 insertions(+), 36 deletions(-) diff --git a/src/gui/wizard/welcomepage.cpp b/src/gui/wizard/welcomepage.cpp index ecdf8fe525995..59ffd7bec94e4 100644 --- a/src/gui/wizard/welcomepage.cpp +++ b/src/gui/wizard/welcomepage.cpp @@ -56,9 +56,15 @@ void WelcomePage::setLoginButtonDefault() void WelcomePage::styleSlideShow() { - const auto ionosLogoFileName = Theme::hidpiFileName(":/client/theme/colored/IONOS_logo_w_suffix_frontend.png"); + auto WhitelabelLogoFileName = QString(); + +#if defined(IONOS_WL_BUILD) + WhitelabelLogoFileName = Theme::hidpiFileName(":/client/theme/colored/IONOS_logo_w_suffix_frontend.png"); +#else defined(STRATO_WL_BUILD) + WhitelabelLogoFileName = Theme::hidpiFileName(":/client/theme/colored/STRATO_logo_w_suffix_frontend.png"); +#endif - _ui->slideShow->addSlide(ionosLogoFileName, tr("Keep your data secure and under your control")); + _ui->slideShow->addSlide(WhitelabelLogoFileName, tr("Keep your data secure and under your control")); } void WelcomePage::setupSlideShow() diff --git a/theme/colored/STRATO_logo_w_suffix_frontend.png b/theme/colored/STRATO_logo_w_suffix_frontend.png index 796fa1d7815f6f0713bcd04f52c5e2009d3e86b3..45248d3e8ccf318898f71ff8da9ff94d21e8a4b2 100644 GIT binary patch literal 3541 zcmV;`4Jz`9P)&#PN3EaY;WSp%)+fj#?EXkpTMmX$UcFo6IeMx;1fhy zMe=)Urm9e610cvI+3Y_*e(zBtK@cqBr%-=DD`>pA&lH zirYFw!&2XP3)gA_*KNw{s~)^>)pg~v!)L#{)2Bh%KjP^K4ItmyG@;b~1^=gmNn*gZ zLS_HQ&YPhvE$h`Qs?qUqP63tjzFH;PtYT9upJA-8a1RhhB-5`&zC{Mw7li_$Bmy-JfS>?1NhuJ)J7qLDW@Gn z4Sh=@wk1QNmmN#Aa;9m$Bg4h^dIbXpY!S$27sD!``eUFhnPnX$g-E26SvzTJA#OT< zTZ{~^vE-Hg$|_?VxRtP!>qGVYorHZjgDy-ogGu&3mIen5*b3Z(-9S=G$>0+IlA4?k z@IyHWF%SHFdE38OH9Ln8<52KJDczLq=cD&bp&Gf}%6^9EdF16Ak+jrEosDXl#R&Y> zED_Ro#|*Lz1wVP$R6oB5a;CZ6PSoO%6gkE8kHsVs;djp1j(6wkymo_7kwfB+wA*1%LE7bPqcp4cxeE+4F+n9G{z%l1aLWyv-Bt zGc9L}iYzfG7suG36T3mx&&*VkP-av`GdBS~AiXD0|NgQnT5V(ffZuvm`qn)z;|N-S zRp3n8WWk0Jb$OAV5x)ODso!}1Lj7l6=WL3&t=ZIK1r8UXb%Jf7r5-hGA&|bg_Hl#t zRx?r9dDXuc^rtm|C$|S^*EhnzWBcB&GCK{sf(OV<{XwM`n+|YbjEX_b3E1Im(}3be zP4MgktN;}%^t5j96Enfi{}gP7o0%nntt6|ApHJk9By!y;ufj ztF5Rmipn^t$*Q?c<_A4<0`|A`;BY}T?+Lc!(atTABxe5&Y}m10HTFI>@K=^}+E$z{ zrI7La4N5ksVt{2--%3O%$+;G@MNB{OuC;oJHZig@ef2^>_IUtKpl<}E&qk^!IfeWc z*HOtyvoOoTLcc;F7FJZYac3mKvPbp`g@HMo_n8E*$MOwl5kw6 zrJ*Y__#QR@2||A*G@N&`yB*+Ua?6gQSX6RnauG*|>CcK8{W-Qb*=Q4>I#b9TU-E>U z@APdX_B%BEi}}6@NAP#Oj0vO8e(X|~ zi~(8BfIV)M)h=MnC>!y{%794dys0ffo_Q>cY+MhV7+_L7CL#jKR=EF^qq44Cl;q zPK7ZA5QY@!*Ukip6Fy2Q+PXKkyu4IjOkmKNtbXXmhKn?txHLGp|Xb?mTV$RB)J#}syDc5yWWF}AxfFMceZ+M8$#N0>s7BdDZKb6b!>X^up4&Qn2du8Q&jAf0886iU)F{29Q zYXPS1&Jh}(wb)SO%%b}Rja#Pe7i7?p6$9tdCX6qYOSTt!0q$CC^){U`*ZCYePs`(G zcQf<^Oe0XGVWU1QdCqcVo=0<2FgA*J*x-*P@HYtQ%ig?D)%syAo7f3lV3@bEZ8p z_93hb#LV{CNfO#YhNRIZo~&^&O_knNM#LTK4Eh48U&`%(4TFQ@Qc6=s5rR?6s^3Z9 zy^gp`e}W0;aa7D!xQ~73Yq6_L;dEjqkV~%_tD?GiCgOYfyRR$OOVdPSXg3=?w9=#s z5c7%9_9pf=3d8Xkn1dUnO%*i!Sz%Y!#aYDPSTO67I$Nc_w!k;R>LKU6*tIkwahdt%$Z(_fL3 zF{AEmhu>K>c3Z(6bQX}}C@!$hYkCvdx~fVdQh`+&1_|_qEZC6~Sd4O>etvIwbBHWv z*CL9bHC#JX&Kz=8@EUHHjL}$` zQt?PlxaLNll^Xt05sWy;<|GOVM*Ye(&7}e}Gf^y{v*SfDwyw#bGE2x3yZl~NS@QhZ z1AR{aDM=am;FI{LV^*cgn8FUj3HSxaYuYlf5w9^<8Xxc&JiAH8)J4H zA~NGJ6YbrKfh0V8c8Y@bj1(5(J}+f*nZ8;gfYiqUt1a3~jk&%L(CGXIGTu5$@lF$y z3dhV8b^ye%ivw+RG}t&O+;$qxcr}8CRl+tO%pF8JG=WK)mdk_#caOfRf@KyvO@w93E_eq09ai4`JM?oseDJMj^#aU19{D5L6fqeOh5g4+QWskw4gWe z4vqiDyaR~oK&CD7*fZl9raUPa)m6hXFk8MGZ}TD#Vtrm+FzL+u-UG~gQ_H}qtPf~w zN}&#JIU4Gb7U39m-$mwwoB7hSMUDmT!@pwx+T(!ppCDgsZ?@f^w6@_koY-XS1OX=(B{m0^3@ofAOKEAnz zHZby!#lJ6s-rbe^9DH}VUBjoz4BCX5-qa@WKj6D_*$TaT^w@DY(V#y~?VrKjD^F!wwME`h;WD-&Cf9yC{FGOP!r+sMC-n0GM^@w+TVn{~f$j~*QW zgK`73JVJOc2G^5H*Wmd}ab3Ok%#w@4UYBI1Ze|a6eug?2osY$}mrxD(jPK#8UyWul zLdj%3s0J4v)}(ij9vuLKHX+q5s5gLd@Q%)_OIl>hn;DLjm-^ZOO1i*)hq@RDMpRYm zZ9;Fn?%DY%^ysmNXpiyXz|YzWRm{a;n*l(MZAmbWIw~&*vyHI4)YlwKVXMrOo_XZd zu*0pysEOX=oHJs22i7x?K0SKuA=+bn%h0nNK}PpNI7@yJ4uj|N|4?|1%^1S>u)4hq z9T8@xvO%fO`OR_wz2x}rhjK%wi;WpEX1hlgL~qw{Bu#H@?-iIQoXt!MJ$h^zT2yt} zOXF^boruAAqwV|GP&cW2XF`` zMuh5TX{UpQNt)<=H<p0YuFdS$JgeVxC4exfb8IRD%z|TXsZ&8 zhX%JWD=N1*Utp)Y?6169-YQ| z86VHFFOd{vl6tC3XAY24!NyG3nr&H*<(b3qYtA)+18}Vs!Dpg=oy`T5N z%suuM?Rs^894PM4CPgAsKDu}bT?a2IE%w37J@y=3VSE4&gw&U(LgsrwcM)c14%r)f z^yra;?l3-pv2(Rr4t}#AU z>YG~5=$6#S0LzC3mNRyj`QbOjT;!vR%dLHW>_;R2YA+%Nb_tlySy1ul0J;Z~`aZoq zh0(>e;Dp&uNmAbox&UN;p8p({)>2q8^IKos9#*9Rc9s0Tn>fYS_&oU=vv}}(saW#M z> z@KfRVb%M5*-#cR!|$(%|wXzlSxdzx+@*YU-i~bwHJC#&W=p z{B|8a>D=^CrXlVs+)h;LSzv~iQ%d^oCgY2X9oS1&QQRNG?jYDL6fr+!0$96mSD0U@ z!BJ+FdzYv2G?J?N_PSvh`FjZ^WHl(Y}6D>p)8@uDWho{gK zGudVU-2oK?zI%HK9Y^;W9|EO5$H4f=7Kk7DQVb3(WUxavupFTD@l-f7Y|Ia(-Dl@t zGY*Aq0vXd?`8O83sOy{{=g%wgeU+8&qVJy0Std^)(d%BANPZIkhx|l1FVML%2Z!Hi z4vdjMPW~PULwbBa%$yk{Rfgud3|wu~_MRxAF8E7u@h#sKC$b}tG zr`c7qEtGOS+_8<8^G)JKP z-Av`BP?Foo13ZTKd1LzFiip{iO6;TfjU(C{)`O8tJ1Df$3v#@U_N(921>5(5ePMiv zqVn_yl@|%xevsYCUUToD!D@25hIEQwQNdd-OPRTu{Xdnk2WKjRTdI>UHRd}97Jkr< z(~_asFYTHLu9}Cjgv~GmJ@mt?wesI8#K+4y%axjlI)O;RLovOeIYwpZGD1TMr2#1! zpF#ud592GA`T{}mZb^LzTlHmxQ_l5Y88{G&woQWuSCITJE_fR=n<-TbmwjVizNDAJ z#H?$ZXjQZ|RV=fH4aTLR!)E2UQ5n^^aZvssvpm67Whaon?#x^Y8~D6S8S10nKPy$r z$%3z>a%AZ7JB3mjbdzKEshCa(ucM0YGi7HW_r=>nx5e&;=lu0ICg~qaFDA($W4Rtk?H>3KNF&mpFA@$oN`sV>3vpX2hA+Hr~8YbL7)Ud zdzrp>;9&4EP6n?0?Fi4u3b@j_Gv$7|>Zk`m8=M+y05`LkB$le(vPgn0289sK zlHaP-RfPLcW#Thqcn`f}ko;yT6F^$!CAIjo^1HE$8)M%jJ`7mCHioWHdHT!97PuRs zEhvF}7o7taRWFj-*hXU&rzOrA!^Tlzq4+hi<{1iUEIkR6NLm>>$xCVw;Cg4~NHP{qXniusm-U40Fp+f5J5L9(H9lo(ltq}NK zN;(R{8)IKd(1IV$+W5JelhGD zTD?Q)riU5}<}^i_^7IFA301%?%xYj+auYkgV>z}c`Thgx+F#KR4dF-c?Csfd7~x)_rv7)dto4sXDb|lp=4Ta<~~?Wq|B^F z5`&xB&qLwFIR8b9yvO%h+TyZ!(JbB_g#0CFVv}ekTk*|DT!K6REnZYKJRe6WG=X3s5 z*yUEg>t+SXa$}lyvZ6z5Z){H zw?S(TH*oj5`w|~Xyn5>1Ci_`BD<~bCXP5A^D)Od*DzCl5cM6&W{iIe_kTl6C!UNK0 zsW~)adt+m?8_t4UzBHjSxY>xb7bCYkeT|F;nuW^6JY_Mj?6IO5bq4hi2wP&^XWdSq zvqar6rfZctRUQqm06^oX>C0kZ37=Chb0*RrL|yGdfoOO%2_7J z-1j~#_S%sel70WYnYaiTV99fUSXl7yqQ(r z2bpo}MzqQZNKA55de|VkF%FLAY7jDj0X!0Fagyn9ns2xn_r!{C*)rD+N4lFrj89jYD4E2cHIHv^s4UnH%uJ&dng z%fM%N&p_GAKsnzeowIMramOUpXWG;^qJy9_J1O1IxN?0NjiJgr)8bdk`K)-dLm>kD z(Q16En9IIJ6Xz5vLpUQ=^!+d7KS!KV5kS%VBAqcemmAD5xX)qZ%mlPZLc0PWGfY-0 zN69lx=z!n%I8)_??wOt}jF}{5!XkV0=&=nz^$=AyjP=|FsXfjtLZD{0NogCIB1(Bb cnF~w&ADF3q-jt%s;{X5v07*qoM6N<$g1P)zp#T5? diff --git a/theme/colored/STRATO_logo_w_suffix_frontend.svg b/theme/colored/STRATO_logo_w_suffix_frontend.svg index e65d8b2190ed7..4c2fc4f89fcb8 100644 --- a/theme/colored/STRATO_logo_w_suffix_frontend.svg +++ b/theme/colored/STRATO_logo_w_suffix_frontend.svg @@ -1,35 +1,21 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + From 967a34c90d5e015dba0c1e62fec164c057d0c7d9 Mon Sep 17 00:00:00 2001 From: Kevin Beraz Date: Fri, 24 Oct 2025 12:02:49 +0200 Subject: [PATCH 328/371] SES-357 replace dataProtectionLogo correctly --- src/gui/wizard/dataprotectionpage.cpp | 10 +++++++++- theme.qrc.in | 7 ++++--- theme/colored/ionos-data-protection-logo.png | Bin 0 -> 7590 bytes ...-logo.png => strato-data-protection-logo.png} | Bin 4 files changed, 13 insertions(+), 4 deletions(-) create mode 100644 theme/colored/ionos-data-protection-logo.png rename theme/colored/{data-protection-logo.png => strato-data-protection-logo.png} (100%) diff --git a/src/gui/wizard/dataprotectionpage.cpp b/src/gui/wizard/dataprotectionpage.cpp index f80c0da093aa4..7ae7c3551b4b5 100644 --- a/src/gui/wizard/dataprotectionpage.cpp +++ b/src/gui/wizard/dataprotectionpage.cpp @@ -38,7 +38,15 @@ namespace OCC{ _ocWizard->next(); }); - _ui->logoLabel->setPixmap(Theme::hidpiFileName(":/client/theme/colored/data-protection-logo.png")); + QString dataProtectionLogo = QString(); + +#if defined(IONOS_WL_BUILD) + dataProtectionLogo = Theme::hidpiFileName(":/client/theme/colored/ionos-data-protection-logo.png"); +#else defined(STRATO_WL_BUILD) + dataProtectionLogo = Theme::hidpiFileName(":/client/theme/colored/strato-data-protection-logo.png"); +#endif + + _ui->logoLabel->setPixmap(Theme::hidpiFileName(dataProtectionLogo)); _ui->descriptionLabel->setText(tr("This application uses tracking technologies. By clicking on Agree, you accept the processing of your anonymized data. You can adjust your choices at any time via the settings.

          Information on data processing and more can be found in our privacy policy.")); _ui->descriptionLabel->setOpenExternalLinks(true); _ui->descriptionLabel->setTextFormat(Qt::RichText); diff --git a/theme.qrc.in b/theme.qrc.in index d8c41932bdef8..f604b09d441cd 100644 --- a/theme.qrc.in +++ b/theme.qrc.in @@ -9,7 +9,8 @@ theme/colored/256-@APPLICATION_ICON_NAME@-icon.png theme/colored/512-@APPLICATION_ICON_NAME@-icon.png theme/colored/1024-@APPLICATION_ICON_NAME@-icon.png - theme/colored/data-protection-logo.png + theme/colored/ionos-data-protection-logo.png + theme/colored/strato-data-protection-logo.png theme/colored/state-error-32.png theme/colored/state-error-64.png theme/colored/state-error-128.png @@ -274,7 +275,7 @@ theme/ses/ses-snackbar-warning.svg theme/ses/ses-snackbar-error.svg theme/ses/ses-more.svg - theme/ses/ses-more-white.svg + theme/ses/ses-more-hover.svg theme/ses/ses-questionmark.svg theme/ses/ses-refresh.svg theme/ses/ses-settings.svg @@ -312,7 +313,7 @@ theme/ses/strato/ses-snackbar-warning.svg theme/ses/strato/ses-snackbar-error.svg theme/ses/strato/ses-more.svg - theme/ses/strato/ses-more-white.svg + theme/ses/strato/ses-more-hover.svg theme/ses/strato/ses-questionmark.svg theme/ses/strato/ses-refresh.svg theme/ses/strato/ses-settings.svg diff --git a/theme/colored/ionos-data-protection-logo.png b/theme/colored/ionos-data-protection-logo.png new file mode 100644 index 0000000000000000000000000000000000000000..1e609a11af747952d920720409a8dd08b29e511f GIT binary patch literal 7590 zcmbt(RZyHy^d&H8a2VVnxCNI0gA5wnoj}l_!I^=<-9oTn!Ciy96CgMQCb+vxa9Mu; z+S-?W*oS@S?&|)&u0HqPbGy1vN2;sJW4|GPgMfg5t*8Ljd~G{lOC37uYb|t8B=g!} zxF{I7As}E9{#OtY(lbe42NB&g<)sm-#wqt-JIFRtDpCjtKjSeU%~22#sNO4rrL?^f zkFzk{leW_avz@KK4QFArAYh~-%c|oAZRZiCzWw2(Q$Jl5)K<({V&iDvlx$dESxmHa zO}T97xa1@*-}c7j`lzu%7s6qxT8{BXH-RW9FT@Cy4k#@hw!}9)+I0Go*h(Z37@4WYx%qHkH+|K49U6&)vi)W21}D5)^ve%r+O7|N3sv0^_3=`mILOko4$<9s2WVYk3%t!9+wfPn-E%032`81$pc+nuRCG17N}N_ekm&%LeObm3!6i|v}ZcZ!{G{ejE$L9I{ zBITCL_Mz#vx}$bi>G1}JkO+%L7e0@2UTK9r(9FJ}Si$7keC9FQ2ih|ZAlZ9AL0Kr1 zg9P*QO@s;(jIPN9%8^&yBhUWLlqlv)>ra%$ZWPh;RInB=Q5(mLsWjtfD6hXv@mnHN;9R z|84+ZKY;&ON1@54fl+&2VTUQ5>lm?_hB}@9$BQt7TyL#(9r{AMi0p~~`Xf|nXGDz6 z9GsRh|1(biFZv^(UUV5YU-A5Xd>u+m^EgK9&%yBz~)isihSXWkqNtx1` z|AqSJI)CTNG6lm&xeLuxMb`fDW+Yb_P`5*net;VUwD$H>aUL?e9(Fzy&fcKb zb+^nv&3bWF#SLH7#ZQn19j-BCC=qak|-2hjUEamrs0bRzhDjo1|$n#gnRXI}$PN zf=Jm-PG~C^Jv1KK$Fdf`Mi7hEw?zN*L5_5x&5=ljgywg0B9!0@iP=g?P`*;@fA-rCvW0O+`gx zJ-u$3U`1)FGsYuy>DJd*aQ8CZgD)hGW&T&Q24hqxB*s+jtg1y}AwW zUFDx+7C$RUiUqYu*EX3e?j#aLjPZJ5*PCgGyEZ_qN%2%Pu7=P(=*kmdegbFO=Hw~h z1hP@{h;tr1n8BUk6}p?DsOY#j$UQRfh|Wc2)B>rH@XV z{zV@JNehj$=Kap&V5?6r;h&)I&z5N#&*d0ycOOGmt%uqW0euZ z+jFWh-|Lm1EK&-ZCrZ4*oAJiGoBl2K`H+klK&N(7OTT^z*CQcF)F;n^kDTH?WvSKg znG#m+39OKHI&rAaefqm)sAjG}u}&k*Cs|FkpTeb@@cq8gFo@)bMSwBu37+!Co<{Uu z0{jAtL_A;*L}>uL@`xS=dWPy6E?>sK&vaiqLTC^TD;eC!@j2%GV)HST`3vpWCphX; z+MGAIdOeH!A2Wd$Gbc$NR*UumY%geZOB-nV$lNz!zDZ@?@z6uzj89U$}UdVsAFKHum&sADTZ~s9@LUlk|AY=p` z#K8(PVSe~k)g!s~5w0&C*|~0{H(78%PEPJQ)lwxTI=dqOU?l3t#+#2w_QOr){-?39 z7xU)xMg+Q`f#^55C< z&nsSZE|y=-AUq@ge71hk|Avjvzfgc_gBsi{)>=CKT4Sz;k_RAA=>g63t>d@wcIC&0W}$- zQr;@QQ#|fx7Z7Ok^t9%libvNm4++RRGfOWl_f@P-I0KT!C4w+b#Q=_f-@`Z)J;ZWV z0jn`E_H_7!tV`7(`Jo?7Y8{gxF(6seXkce2OFhP^xGI1x7eTFzJ1xnk`|``h zEr(7MWX!|2T9d@ML`GTtrl%?5??=~8**Wx{gM3;XMtt~dJ_%ep+U;KV(?j^bPJg-! z;^j@>HL@1;0pX_1jiRrUM7cBio(W(^VdK*u1XxOC)*RJbu|Vel0CRKlS>%Dw`%mwS z0=F@Lhn6R*$X(WUI24zabzO^EQ3$pn)xNhojgj8NW1db$m#!Odqg?;&BaH|zYW>S* zWUfsd`n<`Rna*zWb@R@rhjj0-xQ~Xa;PUwRk55(bJ@mmgr^_t!G=JF2DoO9F8lzPq ze@AP&((e&lSDzzdLFya1L)VHxEk#AI$p%}SE1T{$Z zH_}hcb0}SyY}P;dElo!2i%uv4jUbvQsWkRUsOeYz!ZpWV^vf=RXu&flnpkBRpC`oN zkuu(DFiSF;b&c5MJp*Vb5S8|ps>@HxH@+$(K!}t@nA~iI?i4|&vcn{zQE&?ygKk+} z5*A(g=0mo@U1BaghnI=jd&|Pw*LO(z4{_W^^<)!$5A<=|EpaA(K zJqTx{f27jztK)GVwI&8Vzh!6pFjt_$kL0AwgQE=#S=pwJ=J3O#c13Dh{0u3KktBE7+m-0^~nBi{oTcB}Fd@ z)GMp8kd&)5GfaqGHv_F$c1F9TZ;$j8R;lC_eOe|CpXi4|?Sm&|@O-z{23;lh=@wxT z_9u7GfD7?bHpoZK+0Oz)bGR1jOU%AcVKHat_-piu!3Ksef(&O}UF|jBaWcsY;t=CK z96_-b&&cU8bBGNf|N1K4Lx~JI8vt=&JyC|a)x?A)L!6l%?55wrl8z&zg(#fxHs+8Kh$3E{< z79^5{?JqY<9FSvW4uc`CBZ+GJo&M{!jP>ix8FtS)(X8x?iRArj4c~#iu^3<8z~uOa zSes@4U2x?b82URi)$ZLawhgbh1=;Twt5q$n+?`Z6sdZW}V}t_#Y(0!Gu_>wka(qUG zqoo)Fs&I|z3WT0Mkki7@N70*XY{CCngRfC_Z@T=?KPOG#`6+!qhA?Ku})M`U#uUuv5Dq2%2eleq}SK6-Nh1{zt_kTc=}|oBt-{Jk^BT zm{u*VR(d~s76Yw6!eH5PYvL!Z*Z+I;nQ`JlH^`x-1^kO z<-99r;4HyIHUVE71*~1s%lf9{SC$lDLmLs0vpw9p(5E)X){9*x@d!S)s2aaQ3S>bI z(9Mr`x6GSA&meKH6KYy+P&G7M3O(s815+msWMRzH?nc<`+%|1^^#=%ZR`^|}JvaZ( zUBBOpr0H5@x1gpo5$12TLq2sYmwA`kZ##~LPqakAi3wPx@}k2+7zNO(OSn6!r$}|* zKg@`WYAsKbJw@?Gyx6a)7Fi+~?Yf=D<(Yl8Qx7KJ0+1j9AP{~;A2L72|C2W=N{K%A$uTj)0T(q#s8*OO zkZ))>ER+V#1yn1mgkOd7c!X4~>bP$EIKz&(yS8ClSG{6F`*C15WoNRTz#g0j53mOw z-Unx#G>fkpiyHV5!zh7qs=iW3=z{R^CPksQ#^N}>P-We_y7ns1BOWAs%e1wXHCqp1 zJ0}D8OZHo;6z%@T?-X?%5M9tLpBOpEqi|pY=q-|BGZXo`t|`^r7qS$1C00p8&&MEW zFyInbRqv{9$i>Hkvwx=U9s&>~GG8B*+TSxYDtGaEG{LKAe`EbG!^8K%{=lA<61rfK zp(h!G7d-+fkJrR-PQN+Ib$@ja8kHY|>o4tUJUnU46g}rlBazT0pSPvbzzK60-NKGu z1b&UM1aZ~1Ygc#a9AOfU3pEIb7JR$nB6Ah+5WF3?QrDx8dk8WY=qQV#mt}AH>sOnq zIHhUxa#@Os3Bpl zbM^#K$cNFq#7&Yfgpnqowm)wS{;tvv=j;rWbXW;>bYY*=RBt5axK831b`Jr~bH~~N z{~`nIbi@NmVg=`;3P-@rj0vR(Mvut6{D!i32UAY-LCAqFn*N>R5(q0H2WY@I{AEfW z`nQTmUI0t)IBc{i)T~JYlnU58GYJJ=HjWmbUv1W})B+(Y6dWRyzeJI`KnTso=uS{q zZeL*M6?a)IHD`%2rsV1)-*O0z=qH&v>uYy@&^5)#8j4C+GmjJSO&1>r66#LX(`1&o zxMWyfO$V1Om$q#)xt5n1BdmfPe1i=*4}sWLcf-bngQ}Qm7IW$K#iePd*U(PEHLE3Of> zm=Qu&moMrzTcqwN91`c;I;uMQx0~I)+kuN_g7JoPmjJHX?eA7CGW8!zHd<1lx@#MbJ{Fj)pz3vK|M zgTvZ7pG-J?Z>r!R6Ypt#3Y(=}kwgfs=4>z$k}z=IbZ@(vd+h33yU1Dz>IW5e69}$_ zdVp58laf>Sh62bw)ssuv@f*`}h~e%$(2tKsvG$>UKK+M%H!Rob>q z=YN57{GR&C!dd(OfUU_}kn71Tphd0-8_&-jFGbm^p{bkShykB9{%m%mwBi7|t0BN( z41)qT^Zl_6o)cahXt+m)vENA;q%2)xwkC^VkmA)Wr1H~j!teqAbDxPKKa!B`+5T+t z1qnRH0mzusB18<{GteUq?1;lM)G2cOgPpGRjT1F_mpo$S#N{{2_OnV=kqUe9%kBEI zYu|gUqSvej#dRO}ZyVj9W`>XCN1i@*M@$3}TKay>wZX*Sz(H6w?ksMQH}q*19RW{+%Oo8yA)pH?}iPz3_l{wYn8EC|4$Pwa1Y>fqz_$HEzv{>5PA=P$;e=c`> z<>EYf0j~DpYy~Y{#tYqRyVBc-+|o@Ca1i1*-Vz2Zo^)z8J)>;EIY7S83|TU~o13`5 zq*K(}YzkA8xw0rbm%PJB`I$qK!}q2#UZx&s(9aIn!=4u7Pi8sI=9Y^73y{>`v(2$q zfp>VI#@#6hoMF~`>+$PoJ60RFuJH+oPqMf*yl{kf17|e|T*PG};~LyzLjx7-o>nVo zDb5yr4AC_uZs$VV=;D?2ax_*Y#;F^{~?Z0XU|{r z`fZ|NU;Xj#ENR24)$~2-5__D~rz6*mO^)=I8o|r0TD52uE)E!s5QvLvQzy8dM3;1C z&w2K0TM4stOaG*I zfmdEgXf~?kU!U1oAm$*ptt(0{^Cx?4hV`|SVTISn0l8O+mY3jF&P;gKU1LH*CoJE- zisuZk5;K0VCbIkIzLUtvoXLZPPrL^YK1k7#qy|wr-kxe;l$}8Ihr@6H72Ug%ny)+h zsamk-QykA>&z;C1P6YF@#|zsp4?Yi1dAmabKRwGihs(+n50I@qBIp> zNc^g#)_AK7&dD&chksofa+>;+$rBhvu?v))%^@Bko%-i^jFe&g_C>C|dQTuK=!nVz z`PCx&OedWb-aeGT&}-B@?#Mi;%DFY-0mqpE8?N+kgtU;;iC-oIwyzEW3(GIn`igwF ziuXKJ@5gw(cCnt)_JIA*>)i58sfcliB?$3r#$6QGybkY{@N6o?Jw5#vXgqO0HfzbX zicv1{;%lWl=gMxkxMoZe@c{~h<3?SKCjY$2Fxs>|q{5-d{0v3tyWu9-IPruK_va`c zM@@+Umh5VNz)J>>UV&QFjN+kvCCiGET%|zVmj;cja;(%nSl))Rks_>=cc0b0^RBAq zB7Jbk@1Ll`AtXGTqLcI;lmq5gh%yye{G0koQtj1b8{t0|w9&jw{pzVv$*(JUNe?a< zf!wop?6v}fT-sPwO4W^wF3>g90Y0};;%pwQX4buluFAXiquJ^f23wPrgNV-HU{t0- z9FN;h&I!1a31ahwT2bDSBlb3B6Yl4^^}n;jHl{-3Q4T{~2T5ZkqOwF;H0g5~F|-n! zDRn-~eLgQDw?O_~x$)uXg(RvrOWVs0=-jO4`%@#Pr0hN^@65#L5hN-nchMwDPAq@r zkAL@O9V^#iv#OG9N;E2~C@#CQBzmiNI@TE;1(ISI=oyM=S(tK(&H7%l=3aFE=k>nb z!MY^dh#f1aqtl4T$5nGi7}P3~bQ`)?&XH0fx1Ohs&&TEBVcn}PlnDdmGvg%QEma04i2f}M>%=>0=~$jsM_uuHwVsfWh{G4;s{2G+$kBOtq%pX5jTRY+ zL)=MI6f|9QUv^{^?UwwrsHzg@=DEXhoJA0-fF(d=!0xD9s02MBRX=`7HF98P`izAS z8-8-G)Kf0<7S#IwuB1$<(uC{Y=ybr%1mKjBH_1V6v*fgjGty#US*KrX%C_7bJsqha fG#3&6g4Q_iq!6&^iTV1hil8W~3a*m=81%mYyE4i8 literal 0 HcmV?d00001 diff --git a/theme/colored/data-protection-logo.png b/theme/colored/strato-data-protection-logo.png similarity index 100% rename from theme/colored/data-protection-logo.png rename to theme/colored/strato-data-protection-logo.png From b15dd15e914541fdf54dfd86db380e4a756eff4a Mon Sep 17 00:00:00 2001 From: Kevin Beraz Date: Fri, 24 Oct 2025 14:05:51 +0200 Subject: [PATCH 329/371] SES-357 use new icons on settings toolbar buttons --- src/gui/settingsdialog.cpp | 6 +++--- src/libsync/basetheme.h | 6 +++++- theme/ses/strato/ses-darkPlus.svg | 11 ++--------- theme/ses/strato/ses-darkPlus.svg:Zone.Identifier | Bin 0 -> 25 bytes theme/ses/strato/ses-settings.svg | 2 +- theme/ses/strato/ses-settings.svg:Zone.Identifier | Bin 0 -> 25 bytes 6 files changed, 11 insertions(+), 14 deletions(-) create mode 100644 theme/ses/strato/ses-darkPlus.svg:Zone.Identifier create mode 100644 theme/ses/strato/ses-settings.svg:Zone.Identifier diff --git a/src/gui/settingsdialog.cpp b/src/gui/settingsdialog.cpp index 068db9781ab6c..f7ce7527e3bbc 100644 --- a/src/gui/settingsdialog.cpp +++ b/src/gui/settingsdialog.cpp @@ -130,7 +130,7 @@ SettingsDialog::SettingsDialog(ownCloudGui *gui, QWidget *parent) _actionGroup->setExclusive(true); connect(_actionGroup, &QActionGroup::triggered, this, &SettingsDialog::slotSwitchPage); - QAction *newAccountAction = createColorAwareAction(QLatin1String(":/client/theme/ses/ses-darkPlus.svg"), tr("New account")); + QAction *newAccountAction = createColorAwareAction(WLTheme.plusIcon(), tr("New account")); _actionGroup->addAction(newAccountAction); _toolBar->addAction(newAccountAction); connect(newAccountAction, &QAction::triggered, _gui, &ownCloudGui::slotNewAccountWizard); @@ -143,7 +143,7 @@ SettingsDialog::SettingsDialog(ownCloudGui *gui, QWidget *parent) _toolBar->addWidget(spacer); #endif - QAction *generalAction = createColorAwareAction(QLatin1String(":/client/theme/ses/ses-settings.svg"), tr("General")); + QAction *generalAction = createColorAwareAction(WLTheme.settingsIcon(), tr("General")); _actionGroup->addAction(generalAction); _toolBar->addAction(generalAction); auto *generalSettings = new GeneralSettings; @@ -271,7 +271,7 @@ void SettingsDialog::accountAdded(AccountState *s) bool brandingSingleAccount = !Theme::instance()->multiAccount(); const auto actionText = brandingSingleAccount ? tr("Account") : s->account()->displayName(); - const auto accountAction = createColorAwareAction(QLatin1String(":/client/theme/ses/ses-settingsAvatar.svg"), actionText); + const auto accountAction = createColorAwareAction(WLTheme.avatarIcon(), actionText); if (!brandingSingleAccount) { accountAction->setToolTip(s->account()->displayName()); diff --git a/src/libsync/basetheme.h b/src/libsync/basetheme.h index 7b21481ff1ffe..07cd2a0ae3f15 100644 --- a/src/libsync/basetheme.h +++ b/src/libsync/basetheme.h @@ -53,7 +53,11 @@ class BaseTheme : public QObject{ } virtual QString plusIcon() const { - return QStringLiteral("qrc:///client/theme/ses/ses-darkPlus.svg"); + return QString(Theme::themePrefix) + _sesFolder + additionalThemePrefix() + QStringLiteral("ses-darkPlus.svg"); + } + + virtual QString settingsIcon() const { + return QString(Theme::themePrefix) + _sesFolder + additionalThemePrefix() + QStringLiteral("ses-settings.svg"); } virtual QString sesHeaderLogoIcon() const = 0; diff --git a/theme/ses/strato/ses-darkPlus.svg b/theme/ses/strato/ses-darkPlus.svg index 74f4f7eca5844..87e16a643a166 100644 --- a/theme/ses/strato/ses-darkPlus.svg +++ b/theme/ses/strato/ses-darkPlus.svg @@ -1,10 +1,3 @@ - - - - - - - - - + + diff --git a/theme/ses/strato/ses-darkPlus.svg:Zone.Identifier b/theme/ses/strato/ses-darkPlus.svg:Zone.Identifier new file mode 100644 index 0000000000000000000000000000000000000000..d6c1ec682968c796b9f5e9e080cc6f674b57c766 GIT binary patch literal 25 dcma!!%Fjy;DN4*MPD?F{<>dl#JyUFr831@K2x - + diff --git a/theme/ses/strato/ses-settings.svg:Zone.Identifier b/theme/ses/strato/ses-settings.svg:Zone.Identifier new file mode 100644 index 0000000000000000000000000000000000000000..d6c1ec682968c796b9f5e9e080cc6f674b57c766 GIT binary patch literal 25 dcma!!%Fjy;DN4*MPD?F{<>dl#JyUFr831@K2x Date: Fri, 24 Oct 2025 16:37:20 +0200 Subject: [PATCH 330/371] SES-357 use round avatar icon in advancedsetuppage --- src/gui/wizard/owncloudadvancedsetuppage.cpp | 2 +- src/libsync/basetheme.h | 4 ++++ theme.qrc.in | 2 ++ .../ses-settingsAvatar - Copy.svg:Zone.Identifier | Bin 0 -> 25 bytes theme/ses/ses-settingsAvatarRound.svg | 3 +++ theme/ses/strato/ses-settingsAvatarRound.svg | 10 ++++++++++ .../ses-settingsAvatarRound.svg:Zone.Identifier | Bin 0 -> 25 bytes 7 files changed, 20 insertions(+), 1 deletion(-) create mode 100644 theme/ses/ses-settingsAvatar - Copy.svg:Zone.Identifier create mode 100644 theme/ses/ses-settingsAvatarRound.svg create mode 100644 theme/ses/strato/ses-settingsAvatarRound.svg create mode 100644 theme/ses/strato/ses-settingsAvatarRound.svg:Zone.Identifier diff --git a/src/gui/wizard/owncloudadvancedsetuppage.cpp b/src/gui/wizard/owncloudadvancedsetuppage.cpp index a57d8585fdef5..3d230e4f8fe44 100644 --- a/src/gui/wizard/owncloudadvancedsetuppage.cpp +++ b/src/gui/wizard/owncloudadvancedsetuppage.cpp @@ -247,7 +247,7 @@ void OwncloudAdvancedSetupPage::initializePage() void OwncloudAdvancedSetupPage::SetAvatarIcon() { - const auto icon = QIcon(WLTheme.avatarIcon()); + const auto icon = QIcon(WLTheme.roundAvatarIcon()); _ui.lServerIcon->setPixmap(icon.pixmap(32)); } diff --git a/src/libsync/basetheme.h b/src/libsync/basetheme.h index 07cd2a0ae3f15..f6960d63f83c8 100644 --- a/src/libsync/basetheme.h +++ b/src/libsync/basetheme.h @@ -36,6 +36,10 @@ class BaseTheme : public QObject{ return QString(Theme::themePrefix) + _sesFolder + additionalThemePrefix() + QStringLiteral("ses-settingsAvatar.svg"); } + virtual QString roundAvatarIcon() const { + return QString(Theme::themePrefix) + _sesFolder + additionalThemePrefix() + QStringLiteral("ses-settingsAvatarRound.svg"); + } + virtual QString folderIcon() const { return QString(Theme::themePrefix) + _sesFolder + additionalThemePrefix() + QStringLiteral("ses-folderIcon.svg"); } diff --git a/theme.qrc.in b/theme.qrc.in index f604b09d441cd..3409423d9ed5f 100644 --- a/theme.qrc.in +++ b/theme.qrc.in @@ -280,6 +280,7 @@ theme/ses/ses-refresh.svg theme/ses/ses-settings.svg theme/ses/ses-settingsAvatar.svg + theme/ses/ses-settingsAvatarRound.svg theme/ses/ses-info.svg theme/ses/ses-syncArrows.svg theme/ses/ses-external.svg @@ -318,6 +319,7 @@ theme/ses/strato/ses-refresh.svg theme/ses/strato/ses-settings.svg theme/ses/strato/ses-settingsAvatar.svg + theme/ses/strato/ses-settingsAvatarRound.svg theme/ses/strato/ses-info.svg theme/ses/strato/ses-syncArrows.svg theme/ses/strato/ses-external.svg diff --git a/theme/ses/ses-settingsAvatar - Copy.svg:Zone.Identifier b/theme/ses/ses-settingsAvatar - Copy.svg:Zone.Identifier new file mode 100644 index 0000000000000000000000000000000000000000..d6c1ec682968c796b9f5e9e080cc6f674b57c766 GIT binary patch literal 25 dcma!!%Fjy;DN4*MPD?F{<>dl#JyUFr831@K2x + + diff --git a/theme/ses/strato/ses-settingsAvatarRound.svg b/theme/ses/strato/ses-settingsAvatarRound.svg new file mode 100644 index 0000000000000..9b2393bd56839 --- /dev/null +++ b/theme/ses/strato/ses-settingsAvatarRound.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/theme/ses/strato/ses-settingsAvatarRound.svg:Zone.Identifier b/theme/ses/strato/ses-settingsAvatarRound.svg:Zone.Identifier new file mode 100644 index 0000000000000000000000000000000000000000..d6c1ec682968c796b9f5e9e080cc6f674b57c766 GIT binary patch literal 25 dcma!!%Fjy;DN4*MPD?F{<>dl#JyUFr831@K2x Date: Fri, 24 Oct 2025 16:38:40 +0200 Subject: [PATCH 331/371] SES-357 set external icon in flow2auth widget --- src/gui/wizard/flow2authwidget.cpp | 9 ++++++++- theme/ses/strato/ses-external.svg | 2 +- theme/ses/strato/ses-external.svg:Zone.Identifier | Bin 0 -> 25 bytes 3 files changed, 9 insertions(+), 2 deletions(-) create mode 100644 theme/ses/strato/ses-external.svg:Zone.Identifier diff --git a/src/gui/wizard/flow2authwidget.cpp b/src/gui/wizard/flow2authwidget.cpp index c6c698894c3a2..6e5484ccd615e 100644 --- a/src/gui/wizard/flow2authwidget.cpp +++ b/src/gui/wizard/flow2authwidget.cpp @@ -58,7 +58,14 @@ Flow2AuthWidget::Flow2AuthWidget(QWidget *parent) void Flow2AuthWidget::setLogo() { - const auto logoIconFileName = Theme::hidpiFileName(":/client/theme/ses/ses-external.svg"); + auto logoIconFileName = QString(); + +#if defined(IONOS_WL_BUILD) + logoIconFileName = Theme::hidpiFileName(":/client/theme/ses/ses-external.svg"); +#else defined(STRATO_WL_BUILD) + logoIconFileName = Theme::hidpiFileName(":/client/theme/ses/strato/ses-external.svg"); +#endif + _ui.logoLabel->setPixmap(logoIconFileName); } diff --git a/theme/ses/strato/ses-external.svg b/theme/ses/strato/ses-external.svg index 07f5a34f63f2f..80acf9af8d8b3 100644 --- a/theme/ses/strato/ses-external.svg +++ b/theme/ses/strato/ses-external.svg @@ -1,3 +1,3 @@ - + diff --git a/theme/ses/strato/ses-external.svg:Zone.Identifier b/theme/ses/strato/ses-external.svg:Zone.Identifier new file mode 100644 index 0000000000000000000000000000000000000000..d6c1ec682968c796b9f5e9e080cc6f674b57c766 GIT binary patch literal 25 dcma!!%Fjy;DN4*MPD?F{<>dl#JyUFr831@K2x Date: Fri, 24 Oct 2025 16:49:00 +0200 Subject: [PATCH 332/371] SES-357 add new icon for sync arrows --- theme/ses/strato/ses-syncArrows.svg | 2 +- .../ses/strato/ses-syncArrows.svg:Zone.Identifier | Bin 0 -> 25 bytes 2 files changed, 1 insertion(+), 1 deletion(-) create mode 100644 theme/ses/strato/ses-syncArrows.svg:Zone.Identifier diff --git a/theme/ses/strato/ses-syncArrows.svg b/theme/ses/strato/ses-syncArrows.svg index 88cd18033beb5..4e6cf0dfa32b0 100644 --- a/theme/ses/strato/ses-syncArrows.svg +++ b/theme/ses/strato/ses-syncArrows.svg @@ -1,3 +1,3 @@ - + diff --git a/theme/ses/strato/ses-syncArrows.svg:Zone.Identifier b/theme/ses/strato/ses-syncArrows.svg:Zone.Identifier new file mode 100644 index 0000000000000000000000000000000000000000..d6c1ec682968c796b9f5e9e080cc6f674b57c766 GIT binary patch literal 25 dcma!!%Fjy;DN4*MPD?F{<>dl#JyUFr831@K2x Date: Mon, 27 Oct 2025 09:31:34 +0100 Subject: [PATCH 333/371] SES-357 include qmlThemePrefix and tray icons --- src/gui/sesFileIconProvider.cpp | 3 ++- src/libsync/basetheme.h | 17 +++++++++++++++++ src/libsync/theme.h | 1 + theme/Style/Style.qml | 8 ++++---- .../{ses-more-white.svg => ses-more-hover.svg} | 0 theme/ses/strato/ses-folderIcon.svg | 4 ++-- .../strato/ses-folderIcon.svg:Zone.Identifier | Bin 0 -> 25 bytes theme/ses/strato/ses-more-hover.svg | 3 +++ theme/ses/strato/ses-more.svg | 4 ++-- 9 files changed, 31 insertions(+), 9 deletions(-) rename theme/ses/{ses-more-white.svg => ses-more-hover.svg} (100%) create mode 100644 theme/ses/strato/ses-folderIcon.svg:Zone.Identifier create mode 100644 theme/ses/strato/ses-more-hover.svg diff --git a/src/gui/sesFileIconProvider.cpp b/src/gui/sesFileIconProvider.cpp index 4cb9da66a477f..2e33867f9d7f1 100644 --- a/src/gui/sesFileIconProvider.cpp +++ b/src/gui/sesFileIconProvider.cpp @@ -1,4 +1,5 @@ #include "sesFileIconProvider.h" +#include "whitelabeltheme.h" #include #include @@ -9,7 +10,7 @@ QIcon SesFileIconProvider::icon(const QFileInfo &info) const if (info.isDir()) { - return QIcon(":/client/theme/ses/ses-folderIconBright.svg"); + return QIcon(OCC::WLTheme.folderIcon()); } if (info.suffix().isEmpty()) diff --git a/src/libsync/basetheme.h b/src/libsync/basetheme.h index f6960d63f83c8..4aa86c726f25f 100644 --- a/src/libsync/basetheme.h +++ b/src/libsync/basetheme.h @@ -4,6 +4,7 @@ #include #include #include "theme.h" +#include namespace OCC { @@ -25,6 +26,10 @@ class BaseTheme : public QObject{ Q_PROPERTY(QString trayErrorBorderColor READ trayErrorBorderColor CONSTANT) Q_PROPERTY(QString trayErrorTextColor READ trayErrorTextColor CONSTANT) Q_PROPERTY(QString sesHeaderLogoIcon READ sesHeaderLogoIcon CONSTANT) + Q_PROPERTY(QString websiteIcon READ websiteIcon CONSTANT) + Q_PROPERTY(QString folderIcon READ folderIcon CONSTANT) + Q_PROPERTY(QString moreIcon READ moreIcon CONSTANT) + Q_PROPERTY(QString moreHoverIcon READ moreHoverIcon CONSTANT) public: @@ -56,6 +61,18 @@ class BaseTheme : public QObject{ return QString(Theme::themePrefix) + _sesFolder + additionalThemePrefix() + QStringLiteral("ses-addlivebackup.svg"); } + virtual QString websiteIcon(QString context = "qml") const { + return QString(Theme::qmlThemePrefix) + _sesFolder + additionalThemePrefix() + QStringLiteral("ses-website.svg"); + } + + virtual QString moreIcon() const { + return QString(Theme::qmlThemePrefix) + _sesFolder + additionalThemePrefix() + QStringLiteral("ses-more.svg"); + } + + virtual QString moreHoverIcon() const { + return QString(Theme::qmlThemePrefix) + _sesFolder + additionalThemePrefix() + QStringLiteral("ses-more-hover.svg"); + } + virtual QString plusIcon() const { return QString(Theme::themePrefix) + _sesFolder + additionalThemePrefix() + QStringLiteral("ses-darkPlus.svg"); } diff --git a/src/libsync/theme.h b/src/libsync/theme.h index 16234a22604ea..e900ff9334be2 100644 --- a/src/libsync/theme.h +++ b/src/libsync/theme.h @@ -620,6 +620,7 @@ class OWNCLOUDSYNC_EXPORT Theme : public QObject static QColor defaultColor(); static constexpr const char *themePrefix = ":/client/theme/"; + static constexpr const char *qmlThemePrefix = "qrc:///client/theme/"; [[nodiscard]] QVariantMap systemPalette() const; [[nodiscard]] bool darkMode() const; diff --git a/theme/Style/Style.qml b/theme/Style/Style.qml index 1c9030b85f514..8f0760c613706 100644 --- a/theme/Style/Style.qml +++ b/theme/Style/Style.qml @@ -219,8 +219,8 @@ QtObject { } // SES - readonly property string sesWebsiteIcon: "qrc:///client/theme/ses/ses-website.svg" - readonly property string sesFolderIcon: "qrc:///client/theme/ses/ses-folderIcon.svg" + readonly property string sesWebsiteIcon: WLTheme.websiteIcon + readonly property string sesFolderIcon: WLTheme.folderIcon readonly property string sesHeaderLogoIcon: WLTheme.sesHeaderLogoIcon readonly property string sesAvatar: "qrc:///client/theme/ses/ses-settingsAvatar.svg" @@ -240,8 +240,8 @@ QtObject { readonly property string sesSyncSuccessIcon: "qrc:///client/theme/ses/ses-syncstate-success.svg" readonly property string sesOfflineIcon: "qrc:///client/theme/ses/ses-state-offline.svg" readonly property string sesChevron: "qrc:///client/theme/ses/ses-chevron.svg" - readonly property string sesMore: "qrc:///client/theme/ses/ses-more.svg" - readonly property string sesMoreHover: "qrc:///client/theme/ses/ses-more-hover.svg" + readonly property string sesMore: WLTheme.moreIcon + readonly property string sesMoreHover: WLTheme.moreHoverIcon readonly property color sesIconDarkColor: "#001B41" readonly property color sesIconColor: WLTheme.buttonIconColor diff --git a/theme/ses/ses-more-white.svg b/theme/ses/ses-more-hover.svg similarity index 100% rename from theme/ses/ses-more-white.svg rename to theme/ses/ses-more-hover.svg diff --git a/theme/ses/strato/ses-folderIcon.svg b/theme/ses/strato/ses-folderIcon.svg index b8fb4f1c7eebc..731f2cdc12342 100644 --- a/theme/ses/strato/ses-folderIcon.svg +++ b/theme/ses/strato/ses-folderIcon.svg @@ -1,3 +1,3 @@ - - + + diff --git a/theme/ses/strato/ses-folderIcon.svg:Zone.Identifier b/theme/ses/strato/ses-folderIcon.svg:Zone.Identifier new file mode 100644 index 0000000000000000000000000000000000000000..d6c1ec682968c796b9f5e9e080cc6f674b57c766 GIT binary patch literal 25 dcma!!%Fjy;DN4*MPD?F{<>dl#JyUFr831@K2x + + diff --git a/theme/ses/strato/ses-more.svg b/theme/ses/strato/ses-more.svg index 87baffb082247..165bd963ec6cf 100644 --- a/theme/ses/strato/ses-more.svg +++ b/theme/ses/strato/ses-more.svg @@ -1,3 +1,3 @@ - - + + From ded21677b4764978f1c83d455adc3fabb9fbd5b8 Mon Sep 17 00:00:00 2001 From: Kevin Beraz Date: Mon, 27 Oct 2025 09:32:11 +0100 Subject: [PATCH 334/371] SES-357 cleanup unused import --- src/libsync/basetheme.h | 1 - 1 file changed, 1 deletion(-) diff --git a/src/libsync/basetheme.h b/src/libsync/basetheme.h index 4aa86c726f25f..02f402995fa4c 100644 --- a/src/libsync/basetheme.h +++ b/src/libsync/basetheme.h @@ -4,7 +4,6 @@ #include #include #include "theme.h" -#include namespace OCC { From f6a34df008828667de1d86cf4ca995b94a8dc8a3 Mon Sep 17 00:00:00 2001 From: Kevin Beraz Date: Mon, 27 Oct 2025 09:55:40 +0100 Subject: [PATCH 335/371] SES-357 set avatar icon depending on context --- src/gui/settingsdialog.cpp | 2 +- src/libsync/basetheme.h | 7 ++++++- theme/Style/Style.qml | 2 +- 3 files changed, 8 insertions(+), 3 deletions(-) diff --git a/src/gui/settingsdialog.cpp b/src/gui/settingsdialog.cpp index f7ce7527e3bbc..1574036d133ef 100644 --- a/src/gui/settingsdialog.cpp +++ b/src/gui/settingsdialog.cpp @@ -271,7 +271,7 @@ void SettingsDialog::accountAdded(AccountState *s) bool brandingSingleAccount = !Theme::instance()->multiAccount(); const auto actionText = brandingSingleAccount ? tr("Account") : s->account()->displayName(); - const auto accountAction = createColorAwareAction(WLTheme.avatarIcon(), actionText); + const auto accountAction = createColorAwareAction(WLTheme.avatarIcon("qtwidget"), actionText); if (!brandingSingleAccount) { accountAction->setToolTip(s->account()->displayName()); diff --git a/src/libsync/basetheme.h b/src/libsync/basetheme.h index 02f402995fa4c..47b02d628b706 100644 --- a/src/libsync/basetheme.h +++ b/src/libsync/basetheme.h @@ -29,6 +29,7 @@ class BaseTheme : public QObject{ Q_PROPERTY(QString folderIcon READ folderIcon CONSTANT) Q_PROPERTY(QString moreIcon READ moreIcon CONSTANT) Q_PROPERTY(QString moreHoverIcon READ moreHoverIcon CONSTANT) + Q_PROPERTY(QString avatarIcon READ avatarIcon CONSTANT) public: @@ -36,10 +37,14 @@ class BaseTheme : public QObject{ virtual QString additionalThemePrefix() const { return QStringLiteral(""); } - virtual QString avatarIcon() const { + virtual QString avatarIcon(QString context = "qml") const { + if (context != "qml") { return QString(Theme::themePrefix) + _sesFolder + additionalThemePrefix() + QStringLiteral("ses-settingsAvatar.svg"); } + return QString(Theme::qmlThemePrefix) + _sesFolder + additionalThemePrefix() + QStringLiteral("ses-settingsAvatar.svg"); + } + virtual QString roundAvatarIcon() const { return QString(Theme::themePrefix) + _sesFolder + additionalThemePrefix() + QStringLiteral("ses-settingsAvatarRound.svg"); } diff --git a/theme/Style/Style.qml b/theme/Style/Style.qml index 8f0760c613706..12f7065678803 100644 --- a/theme/Style/Style.qml +++ b/theme/Style/Style.qml @@ -223,7 +223,7 @@ QtObject { readonly property string sesFolderIcon: WLTheme.folderIcon readonly property string sesHeaderLogoIcon: WLTheme.sesHeaderLogoIcon - readonly property string sesAvatar: "qrc:///client/theme/ses/ses-settingsAvatar.svg" + readonly property string sesAvatar: WLTheme.avatarIcon readonly property string sesAccountQuit: "qrc:///client/theme/ses/ses-accountQuit.svg" readonly property string sesAccountPause: "qrc:///client/theme/ses/ses-accountPause.svg" From 88c8d8d478e554949bc02999c89e583f6bdb8985 Mon Sep 17 00:00:00 2001 From: Kevin Beraz Date: Mon, 27 Oct 2025 09:56:15 +0100 Subject: [PATCH 336/371] SES-357 set folderIcon depending on context --- src/gui/sesFileIconProvider.cpp | 2 +- src/gui/wizard/owncloudadvancedsetuppage.cpp | 2 +- src/libsync/basetheme.h | 6 +++++- 3 files changed, 7 insertions(+), 3 deletions(-) diff --git a/src/gui/sesFileIconProvider.cpp b/src/gui/sesFileIconProvider.cpp index 2e33867f9d7f1..f8647e821e717 100644 --- a/src/gui/sesFileIconProvider.cpp +++ b/src/gui/sesFileIconProvider.cpp @@ -10,7 +10,7 @@ QIcon SesFileIconProvider::icon(const QFileInfo &info) const if (info.isDir()) { - return QIcon(OCC::WLTheme.folderIcon()); + return QIcon(OCC::WLTheme.folderIcon("qtwidget")); } if (info.suffix().isEmpty()) diff --git a/src/gui/wizard/owncloudadvancedsetuppage.cpp b/src/gui/wizard/owncloudadvancedsetuppage.cpp index 3d230e4f8fe44..7b84c66698a33 100644 --- a/src/gui/wizard/owncloudadvancedsetuppage.cpp +++ b/src/gui/wizard/owncloudadvancedsetuppage.cpp @@ -773,7 +773,7 @@ void OwncloudAdvancedSetupPage::customizeStyle() void OwncloudAdvancedSetupPage::styleLocalFolderLabel() { - const auto icon = QIcon(WLTheme.folderIcon()); + const auto icon = QIcon(WLTheme.folderIcon("qtwidget")); _ui.lLocal->setPixmap(icon.pixmap(32)); } diff --git a/src/libsync/basetheme.h b/src/libsync/basetheme.h index 47b02d628b706..073ba0bf6440a 100644 --- a/src/libsync/basetheme.h +++ b/src/libsync/basetheme.h @@ -49,10 +49,14 @@ class BaseTheme : public QObject{ return QString(Theme::themePrefix) + _sesFolder + additionalThemePrefix() + QStringLiteral("ses-settingsAvatarRound.svg"); } - virtual QString folderIcon() const { + virtual QString folderIcon(QString context = "qml") const { + if (context != "qml") { return QString(Theme::themePrefix) + _sesFolder + additionalThemePrefix() + QStringLiteral("ses-folderIcon.svg"); } + return QString(Theme::qmlThemePrefix) + _sesFolder + additionalThemePrefix() + QStringLiteral("ses-folderIcon.svg"); + } + virtual QString syncArrows() const { return QString(Theme::themePrefix) + _sesFolder + additionalThemePrefix() + QStringLiteral("ses-syncArrows.svg"); } From 36f3fdb3ef02d67994276389d227cc4113d61b9d Mon Sep 17 00:00:00 2001 From: Kevin Beraz Date: Mon, 27 Oct 2025 09:59:25 +0100 Subject: [PATCH 337/371] SES-357 set plusIcon depending on context --- src/gui/settingsdialog.cpp | 2 +- src/libsync/basetheme.h | 16 ++++++++++------ theme/Style/Style.qml | 2 +- 3 files changed, 12 insertions(+), 8 deletions(-) diff --git a/src/gui/settingsdialog.cpp b/src/gui/settingsdialog.cpp index 1574036d133ef..fe27de00e8df5 100644 --- a/src/gui/settingsdialog.cpp +++ b/src/gui/settingsdialog.cpp @@ -130,7 +130,7 @@ SettingsDialog::SettingsDialog(ownCloudGui *gui, QWidget *parent) _actionGroup->setExclusive(true); connect(_actionGroup, &QActionGroup::triggered, this, &SettingsDialog::slotSwitchPage); - QAction *newAccountAction = createColorAwareAction(WLTheme.plusIcon(), tr("New account")); + QAction *newAccountAction = createColorAwareAction(WLTheme.plusIcon("qtwidget"), tr("New account")); _actionGroup->addAction(newAccountAction); _toolBar->addAction(newAccountAction); connect(newAccountAction, &QAction::triggered, _gui, &ownCloudGui::slotNewAccountWizard); diff --git a/src/libsync/basetheme.h b/src/libsync/basetheme.h index 073ba0bf6440a..4c9bc318f26c7 100644 --- a/src/libsync/basetheme.h +++ b/src/libsync/basetheme.h @@ -30,6 +30,7 @@ class BaseTheme : public QObject{ Q_PROPERTY(QString moreIcon READ moreIcon CONSTANT) Q_PROPERTY(QString moreHoverIcon READ moreHoverIcon CONSTANT) Q_PROPERTY(QString avatarIcon READ avatarIcon CONSTANT) + Q_PROPERTY(QString plusIcon READ plusIcon CONSTANT) public: @@ -39,8 +40,8 @@ class BaseTheme : public QObject{ virtual QString avatarIcon(QString context = "qml") const { if (context != "qml") { - return QString(Theme::themePrefix) + _sesFolder + additionalThemePrefix() + QStringLiteral("ses-settingsAvatar.svg"); - } + return QString(Theme::themePrefix) + _sesFolder + additionalThemePrefix() + QStringLiteral("ses-settingsAvatar.svg"); + } return QString(Theme::qmlThemePrefix) + _sesFolder + additionalThemePrefix() + QStringLiteral("ses-settingsAvatar.svg"); } @@ -51,8 +52,8 @@ class BaseTheme : public QObject{ virtual QString folderIcon(QString context = "qml") const { if (context != "qml") { - return QString(Theme::themePrefix) + _sesFolder + additionalThemePrefix() + QStringLiteral("ses-folderIcon.svg"); - } + return QString(Theme::themePrefix) + _sesFolder + additionalThemePrefix() + QStringLiteral("ses-folderIcon.svg"); + } return QString(Theme::qmlThemePrefix) + _sesFolder + additionalThemePrefix() + QStringLiteral("ses-folderIcon.svg"); } @@ -81,8 +82,11 @@ class BaseTheme : public QObject{ return QString(Theme::qmlThemePrefix) + _sesFolder + additionalThemePrefix() + QStringLiteral("ses-more-hover.svg"); } - virtual QString plusIcon() const { - return QString(Theme::themePrefix) + _sesFolder + additionalThemePrefix() + QStringLiteral("ses-darkPlus.svg"); + virtual QString plusIcon(QString context = "qml") const { + if (context != "qml") { + return QString(Theme::themePrefix) + _sesFolder + additionalThemePrefix() + QStringLiteral("ses-darkPlus.svg"); + } + return QString(Theme::qmlThemePrefix) + _sesFolder + additionalThemePrefix() + QStringLiteral("ses-darkPlus.svg"); } virtual QString settingsIcon() const { diff --git a/theme/Style/Style.qml b/theme/Style/Style.qml index 12f7065678803..278d98e5f16d5 100644 --- a/theme/Style/Style.qml +++ b/theme/Style/Style.qml @@ -227,7 +227,7 @@ QtObject { readonly property string sesAccountQuit: "qrc:///client/theme/ses/ses-accountQuit.svg" readonly property string sesAccountPause: "qrc:///client/theme/ses/ses-accountPause.svg" - readonly property string sesDarkPlus: "qrc:///client/theme/ses/ses-darkPlus.svg" + readonly property string sesDarkPlus: WLTheme.plusIcon readonly property string sesLightPlus: "qrc:///client/theme/ses/ses-lightPlus.svg" readonly property string sesAccountSettings: "qrc:///client/theme/ses/ses-settings.svg" readonly property string sesAccountResume: "qrc:///client/theme/ses/ses-accountResume.svg" From 0059d1654c3538b125c34125d7eb34f6045eb68c Mon Sep 17 00:00:00 2001 From: Kevin Beraz Date: Mon, 27 Oct 2025 10:14:29 +0100 Subject: [PATCH 338/371] SES-357 set remaining accountMenu icons depending on context --- src/gui/settingsdialog.cpp | 2 +- src/libsync/basetheme.h | 18 ++++++++++++++++-- theme/Style/Style.qml | 6 +++--- theme/ses/strato/ses-accountPause.svg | 11 +++++++++-- .../ses-accountPause.svg:Zone.Identifier | Bin 0 -> 25 bytes theme/ses/strato/ses-accountQuit.svg | 2 +- 6 files changed, 30 insertions(+), 9 deletions(-) create mode 100644 theme/ses/strato/ses-accountPause.svg:Zone.Identifier diff --git a/src/gui/settingsdialog.cpp b/src/gui/settingsdialog.cpp index fe27de00e8df5..8216e64a9d81b 100644 --- a/src/gui/settingsdialog.cpp +++ b/src/gui/settingsdialog.cpp @@ -143,7 +143,7 @@ SettingsDialog::SettingsDialog(ownCloudGui *gui, QWidget *parent) _toolBar->addWidget(spacer); #endif - QAction *generalAction = createColorAwareAction(WLTheme.settingsIcon(), tr("General")); + QAction *generalAction = createColorAwareAction(WLTheme.settingsIcon("qtwidget"), tr("General")); _actionGroup->addAction(generalAction); _toolBar->addAction(generalAction); auto *generalSettings = new GeneralSettings; diff --git a/src/libsync/basetheme.h b/src/libsync/basetheme.h index 4c9bc318f26c7..6de7ba718c484 100644 --- a/src/libsync/basetheme.h +++ b/src/libsync/basetheme.h @@ -31,6 +31,9 @@ class BaseTheme : public QObject{ Q_PROPERTY(QString moreHoverIcon READ moreHoverIcon CONSTANT) Q_PROPERTY(QString avatarIcon READ avatarIcon CONSTANT) Q_PROPERTY(QString plusIcon READ plusIcon CONSTANT) + Q_PROPERTY(QString quitIcon READ quitIcon CONSTANT) + Q_PROPERTY(QString pauseIcon READ pauseIcon CONSTANT) + Q_PROPERTY(QString settingsIcon READ settingsIcon CONSTANT) public: @@ -89,8 +92,19 @@ class BaseTheme : public QObject{ return QString(Theme::qmlThemePrefix) + _sesFolder + additionalThemePrefix() + QStringLiteral("ses-darkPlus.svg"); } - virtual QString settingsIcon() const { - return QString(Theme::themePrefix) + _sesFolder + additionalThemePrefix() + QStringLiteral("ses-settings.svg"); + virtual QString quitIcon() const { + return QString(Theme::qmlThemePrefix) + _sesFolder + additionalThemePrefix() + QStringLiteral("ses-accountQuit.svg"); + } + + virtual QString pauseIcon() const { + return QString(Theme::qmlThemePrefix) + _sesFolder + additionalThemePrefix() + QStringLiteral("ses-accountPause.svg"); + } + + virtual QString settingsIcon(QString context = "qml") const { + if (context != "qml") { + return QString(Theme::themePrefix) + _sesFolder + additionalThemePrefix() + QStringLiteral("ses-settings.svg"); + } + return QString(Theme::qmlThemePrefix) + _sesFolder + additionalThemePrefix() + QStringLiteral("ses-settings.svg"); } virtual QString sesHeaderLogoIcon() const = 0; diff --git a/theme/Style/Style.qml b/theme/Style/Style.qml index 278d98e5f16d5..4f3e26df96cb8 100644 --- a/theme/Style/Style.qml +++ b/theme/Style/Style.qml @@ -225,11 +225,11 @@ QtObject { readonly property string sesAvatar: WLTheme.avatarIcon - readonly property string sesAccountQuit: "qrc:///client/theme/ses/ses-accountQuit.svg" - readonly property string sesAccountPause: "qrc:///client/theme/ses/ses-accountPause.svg" + readonly property string sesAccountQuit: WLTheme.quitIcon + readonly property string sesAccountPause: WLTheme.pauseIcon readonly property string sesDarkPlus: WLTheme.plusIcon readonly property string sesLightPlus: "qrc:///client/theme/ses/ses-lightPlus.svg" - readonly property string sesAccountSettings: "qrc:///client/theme/ses/ses-settings.svg" + readonly property string sesAccountSettings: WLTheme.settingsIcon readonly property string sesAccountResume: "qrc:///client/theme/ses/ses-accountResume.svg" readonly property string sesLogout: "qrc:///client/theme/ses/ses-accountLogout.svg" readonly property string sesDelete: "qrc:///client/theme/ses/ses-accountDelete.svg" diff --git a/theme/ses/strato/ses-accountPause.svg b/theme/ses/strato/ses-accountPause.svg index 6928b0a84ca1a..b22506e403c0a 100644 --- a/theme/ses/strato/ses-accountPause.svg +++ b/theme/ses/strato/ses-accountPause.svg @@ -1,3 +1,10 @@ - - + + + + + + + + + diff --git a/theme/ses/strato/ses-accountPause.svg:Zone.Identifier b/theme/ses/strato/ses-accountPause.svg:Zone.Identifier new file mode 100644 index 0000000000000000000000000000000000000000..d6c1ec682968c796b9f5e9e080cc6f674b57c766 GIT binary patch literal 25 dcma!!%Fjy;DN4*MPD?F{<>dl#JyUFr831@K2x - + From f8ce5305dedc7a10c8c51d957ac5d757c8b7dd9b Mon Sep 17 00:00:00 2001 From: Kevin Beraz Date: Mon, 27 Oct 2025 10:21:57 +0100 Subject: [PATCH 339/371] SES-357 use and override darkIconColor in Theme --- src/libsync/basetheme.h | 5 +++++ src/libsync/stratotheme.h | 4 ++++ theme/Style/Style.qml | 2 +- 3 files changed, 10 insertions(+), 1 deletion(-) diff --git a/src/libsync/basetheme.h b/src/libsync/basetheme.h index 6de7ba718c484..abb3b95efc462 100644 --- a/src/libsync/basetheme.h +++ b/src/libsync/basetheme.h @@ -14,6 +14,7 @@ class BaseTheme : public QObject{ Q_PROPERTY(QString trayBorderColor READ trayBorderColor CONSTANT) Q_PROPERTY(QString trayInputFieldBorderColor READ trayInputFieldBorderColor CONSTANT) Q_PROPERTY(QString trayBackgroundColor READ trayBackgroundColor CONSTANT) + Q_PROPERTY(QString iconDarkColor READ iconDarkColor CONSTANT) Q_PROPERTY(QString buttonIconColor READ buttonIconColor CONSTANT) Q_PROPERTY(QString buttonHoveredColor READ buttonHoveredColor CONSTANT) Q_PROPERTY(QString buttonPressedColor READ buttonPressedColor CONSTANT) @@ -379,6 +380,10 @@ class BaseTheme : public QObject{ return "#001B41"; } + virtual QString iconDarkColor() const { + return "#001B41"; + } + virtual QString menuSelectedItemColor() const { return "#F4F7FA"; } diff --git a/src/libsync/stratotheme.h b/src/libsync/stratotheme.h index 7b5871a0a66f2..657d3f68e2380 100644 --- a/src/libsync/stratotheme.h +++ b/src/libsync/stratotheme.h @@ -134,6 +134,10 @@ class StratoTheme : public BaseTheme { return "#FFFFFF"; } + QString iconDarkColor() const override { + return "#2F2F70"; + } + QString menuPressedItemColor() const override { return "#5A6782"; } diff --git a/theme/Style/Style.qml b/theme/Style/Style.qml index 4f3e26df96cb8..d22e89f315f75 100644 --- a/theme/Style/Style.qml +++ b/theme/Style/Style.qml @@ -243,7 +243,7 @@ QtObject { readonly property string sesMore: WLTheme.moreIcon readonly property string sesMoreHover: WLTheme.moreHoverIcon - readonly property color sesIconDarkColor: "#001B41" + readonly property color sesIconDarkColor: WLTheme.iconDarkColor readonly property color sesIconColor: WLTheme.buttonIconColor readonly property color sesBackgroundColor: WLTheme.trayBackgroundColor From 3df0e3fb634e600d3a84c9ae0265ab3f835438f6 Mon Sep 17 00:00:00 2001 From: Kevin Beraz Date: Mon, 27 Oct 2025 10:34:12 +0100 Subject: [PATCH 340/371] SES-357 replace logout icon --- src/libsync/basetheme.h | 5 +++++ theme/Style/Style.qml | 2 +- theme/ses/strato/ses-accountLogout.svg | 6 +++--- .../strato/ses-accountLogout.svg:Zone.Identifier | Bin 0 -> 25 bytes 4 files changed, 9 insertions(+), 4 deletions(-) create mode 100644 theme/ses/strato/ses-accountLogout.svg:Zone.Identifier diff --git a/src/libsync/basetheme.h b/src/libsync/basetheme.h index abb3b95efc462..16daeb69352fa 100644 --- a/src/libsync/basetheme.h +++ b/src/libsync/basetheme.h @@ -35,6 +35,7 @@ class BaseTheme : public QObject{ Q_PROPERTY(QString quitIcon READ quitIcon CONSTANT) Q_PROPERTY(QString pauseIcon READ pauseIcon CONSTANT) Q_PROPERTY(QString settingsIcon READ settingsIcon CONSTANT) + Q_PROPERTY(QString logoutIcon READ logoutIcon CONSTANT) public: @@ -107,6 +108,10 @@ class BaseTheme : public QObject{ } return QString(Theme::qmlThemePrefix) + _sesFolder + additionalThemePrefix() + QStringLiteral("ses-settings.svg"); } + + virtual QString logoutIcon() const { + return QString(Theme::qmlThemePrefix) + _sesFolder + additionalThemePrefix() + QStringLiteral("ses-accountLogout.svg"); + } virtual QString sesHeaderLogoIcon() const = 0; diff --git a/theme/Style/Style.qml b/theme/Style/Style.qml index d22e89f315f75..8bb8d12c67116 100644 --- a/theme/Style/Style.qml +++ b/theme/Style/Style.qml @@ -231,7 +231,7 @@ QtObject { readonly property string sesLightPlus: "qrc:///client/theme/ses/ses-lightPlus.svg" readonly property string sesAccountSettings: WLTheme.settingsIcon readonly property string sesAccountResume: "qrc:///client/theme/ses/ses-accountResume.svg" - readonly property string sesLogout: "qrc:///client/theme/ses/ses-accountLogout.svg" + readonly property string sesLogout: WLTheme.logoutIcon readonly property string sesDelete: "qrc:///client/theme/ses/ses-accountDelete.svg" readonly property string sesClipboard: "qrc:///client/theme/ses/ses-clipboard.svg" readonly property string sesLightClipboard: "qrc:///client/theme/ses/ses-lightClipboard.svg" diff --git a/theme/ses/strato/ses-accountLogout.svg b/theme/ses/strato/ses-accountLogout.svg index 60c5eacfcd135..dec3573009bd7 100644 --- a/theme/ses/strato/ses-accountLogout.svg +++ b/theme/ses/strato/ses-accountLogout.svg @@ -1,9 +1,9 @@ - - + + - + diff --git a/theme/ses/strato/ses-accountLogout.svg:Zone.Identifier b/theme/ses/strato/ses-accountLogout.svg:Zone.Identifier new file mode 100644 index 0000000000000000000000000000000000000000..d6c1ec682968c796b9f5e9e080cc6f674b57c766 GIT binary patch literal 25 dcma!!%Fjy;DN4*MPD?F{<>dl#JyUFr831@K2x Date: Mon, 27 Oct 2025 10:46:45 +0100 Subject: [PATCH 341/371] SES-357 replace and add seperate icons for delete icon --- src/gui/tray/activitylistmodel.cpp | 2 +- src/libsync/basetheme.h | 7 ++++++- theme/Style/Style.qml | 2 +- .../ses-accountDelete - Copy.svg:Zone.Identifier | Bin 0 -> 25 bytes theme/ses/ses-activityDelete.svg | 3 +++ theme/ses/strato/ses-accountDelete.svg | 11 +++++++++-- .../strato/ses-accountDelete.svg:Zone.Identifier | Bin 0 -> 25 bytes theme/ses/strato/ses-activityDelete.svg | 3 +++ .../strato/ses-activityDelete.svg:Zone.Identifier | Bin 0 -> 25 bytes 9 files changed, 23 insertions(+), 5 deletions(-) create mode 100644 theme/ses/ses-accountDelete - Copy.svg:Zone.Identifier create mode 100644 theme/ses/ses-activityDelete.svg create mode 100644 theme/ses/strato/ses-accountDelete.svg:Zone.Identifier create mode 100644 theme/ses/strato/ses-activityDelete.svg create mode 100644 theme/ses/strato/ses-activityDelete.svg:Zone.Identifier diff --git a/src/gui/tray/activitylistmodel.cpp b/src/gui/tray/activitylistmodel.cpp index 29a6e5be77b15..2a0f21fd57f2d 100644 --- a/src/gui/tray/activitylistmodel.cpp +++ b/src/gui/tray/activitylistmodel.cpp @@ -257,7 +257,7 @@ QVariant ActivityListModel::data(const QModelIndex &index, int role) const if (a._fileAction == "file_created") { return WLTheme.plusIcon(); } else if (a._fileAction == "file_deleted") { - return WLTheme.deleteIcon(); + return WLTheme.activityDeleteIcon(); } else { return WLTheme.refreshIcon(); } diff --git a/src/libsync/basetheme.h b/src/libsync/basetheme.h index 16daeb69352fa..3a9d91d00703e 100644 --- a/src/libsync/basetheme.h +++ b/src/libsync/basetheme.h @@ -36,6 +36,7 @@ class BaseTheme : public QObject{ Q_PROPERTY(QString pauseIcon READ pauseIcon CONSTANT) Q_PROPERTY(QString settingsIcon READ settingsIcon CONSTANT) Q_PROPERTY(QString logoutIcon READ logoutIcon CONSTANT) + Q_PROPERTY(QString deleteIcon READ deleteIcon CONSTANT) public: @@ -116,7 +117,11 @@ class BaseTheme : public QObject{ virtual QString sesHeaderLogoIcon() const = 0; virtual QString deleteIcon() const { - return QStringLiteral("qrc:///client/theme/ses/ses-accountDelete.svg"); + return QString(Theme::qmlThemePrefix) + _sesFolder + additionalThemePrefix() + QStringLiteral("ses-accountDelete.svg"); + } + + virtual QString activityDeleteIcon() const { + return QString(Theme::qmlThemePrefix) + _sesFolder + additionalThemePrefix() + QStringLiteral("ses-activityDelete.svg"); } virtual QString refreshIcon() const { diff --git a/theme/Style/Style.qml b/theme/Style/Style.qml index 8bb8d12c67116..08a1fb65ea608 100644 --- a/theme/Style/Style.qml +++ b/theme/Style/Style.qml @@ -232,7 +232,7 @@ QtObject { readonly property string sesAccountSettings: WLTheme.settingsIcon readonly property string sesAccountResume: "qrc:///client/theme/ses/ses-accountResume.svg" readonly property string sesLogout: WLTheme.logoutIcon - readonly property string sesDelete: "qrc:///client/theme/ses/ses-accountDelete.svg" + readonly property string sesDelete: WLTheme.deleteIcon readonly property string sesClipboard: "qrc:///client/theme/ses/ses-clipboard.svg" readonly property string sesLightClipboard: "qrc:///client/theme/ses/ses-lightClipboard.svg" readonly property string sesSyncErrorIcon: "qrc:///client/theme/ses/ses-syncstate-error.svg" diff --git a/theme/ses/ses-accountDelete - Copy.svg:Zone.Identifier b/theme/ses/ses-accountDelete - Copy.svg:Zone.Identifier new file mode 100644 index 0000000000000000000000000000000000000000..d6c1ec682968c796b9f5e9e080cc6f674b57c766 GIT binary patch literal 25 dcma!!%Fjy;DN4*MPD?F{<>dl#JyUFr831@K2x + + diff --git a/theme/ses/strato/ses-accountDelete.svg b/theme/ses/strato/ses-accountDelete.svg index 8b35ccf415249..159837e9c8429 100644 --- a/theme/ses/strato/ses-accountDelete.svg +++ b/theme/ses/strato/ses-accountDelete.svg @@ -1,3 +1,10 @@ - - + + + + + + + + + diff --git a/theme/ses/strato/ses-accountDelete.svg:Zone.Identifier b/theme/ses/strato/ses-accountDelete.svg:Zone.Identifier new file mode 100644 index 0000000000000000000000000000000000000000..d6c1ec682968c796b9f5e9e080cc6f674b57c766 GIT binary patch literal 25 dcma!!%Fjy;DN4*MPD?F{<>dl#JyUFr831@K2x + + diff --git a/theme/ses/strato/ses-activityDelete.svg:Zone.Identifier b/theme/ses/strato/ses-activityDelete.svg:Zone.Identifier new file mode 100644 index 0000000000000000000000000000000000000000..d6c1ec682968c796b9f5e9e080cc6f674b57c766 GIT binary patch literal 25 dcma!!%Fjy;DN4*MPD?F{<>dl#JyUFr831@K2x Date: Mon, 27 Oct 2025 11:06:40 +0100 Subject: [PATCH 342/371] SES-357 replace info icon --- src/gui/tray/activitylistmodel.cpp | 2 +- src/libsync/basetheme.h | 4 ++++ theme/ses/strato/ses-info.svg | 6 +++--- theme/ses/strato/ses-info.svg:Zone.Identifier | Bin 0 -> 25 bytes 4 files changed, 8 insertions(+), 4 deletions(-) create mode 100644 theme/ses/strato/ses-info.svg:Zone.Identifier diff --git a/src/gui/tray/activitylistmodel.cpp b/src/gui/tray/activitylistmodel.cpp index 2a0f21fd57f2d..018f273841b00 100644 --- a/src/gui/tray/activitylistmodel.cpp +++ b/src/gui/tray/activitylistmodel.cpp @@ -250,7 +250,7 @@ QVariant ActivityListModel::data(const QModelIndex &index, int role) const colorIconPath.append("state-warning.svg"); return colorIconPath; } else if (a._syncFileItemStatus == SyncFileItem::FileIgnored) { - colorIconPath = QStringLiteral("qrc:///client/theme/ses/ses-info.svg"); + colorIconPath = WLTheme.infoIcon(); return colorIconPath; } else { // File sync successful diff --git a/src/libsync/basetheme.h b/src/libsync/basetheme.h index 3a9d91d00703e..7e7b2f2483803 100644 --- a/src/libsync/basetheme.h +++ b/src/libsync/basetheme.h @@ -128,6 +128,10 @@ class BaseTheme : public QObject{ return QStringLiteral("qrc:///client/theme/ses/ses-refresh.svg"); } + virtual QString infoIcon() const { + return QString(Theme::qmlThemePrefix) + _sesFolder + additionalThemePrefix() + QStringLiteral("ses-info.svg"); + } + virtual QString syncOfflineIcon() const { return QStringLiteral("qrc:///client/theme/ses/ses-state-offline.svg"); } diff --git a/theme/ses/strato/ses-info.svg b/theme/ses/strato/ses-info.svg index bb88fa20fa785..8a5b6c2887340 100644 --- a/theme/ses/strato/ses-info.svg +++ b/theme/ses/strato/ses-info.svg @@ -1,9 +1,9 @@ - - + + - + diff --git a/theme/ses/strato/ses-info.svg:Zone.Identifier b/theme/ses/strato/ses-info.svg:Zone.Identifier new file mode 100644 index 0000000000000000000000000000000000000000..d6c1ec682968c796b9f5e9e080cc6f674b57c766 GIT binary patch literal 25 dcma!!%Fjy;DN4*MPD?F{<>dl#JyUFr831@K2x Date: Mon, 27 Oct 2025 11:13:14 +0100 Subject: [PATCH 343/371] SES-357 add activityDelete to theme.qrc.in --- theme.qrc.in | 2 ++ 1 file changed, 2 insertions(+) diff --git a/theme.qrc.in b/theme.qrc.in index 3409423d9ed5f..38e46bc6a5c95 100644 --- a/theme.qrc.in +++ b/theme.qrc.in @@ -251,6 +251,7 @@ fonts/OpenSans-SemiBold.ttf fonts/OpenSans-Regular.ttf theme/ses/ses-accountDelete.svg + theme/ses/ses-activityDelete.svg theme/ses/ses-accountLogout.svg theme/ses/ses-accountPause.svg theme/ses/ses-accountQuit.svg @@ -290,6 +291,7 @@ theme/colored/STRATO_logo_w_suffix_frontend@2x.png theme/colored/STRATO_logo_w_suffix_frontend.svg theme/ses/strato/ses-accountDelete.svg + theme/ses/strato/ses-activityDelete.svg theme/ses/strato/ses-accountLogout.svg theme/ses/strato/ses-accountPause.svg theme/ses/strato/ses-accountQuit.svg From afaa1d8710e294264e4aeb57968a8a33b62aacb3 Mon Sep 17 00:00:00 2001 From: Kevin Beraz Date: Mon, 27 Oct 2025 11:41:34 +0100 Subject: [PATCH 344/371] SES-357 replace clipboard icon --- src/libsync/basetheme.h | 5 +++++ theme/Style/Style.qml | 2 +- theme/ses/strato/ses-clipboard.svg | 11 ++--------- theme/ses/strato/ses-clipboard.svg:Zone.Identifier | Bin 0 -> 25 bytes 4 files changed, 8 insertions(+), 10 deletions(-) create mode 100644 theme/ses/strato/ses-clipboard.svg:Zone.Identifier diff --git a/src/libsync/basetheme.h b/src/libsync/basetheme.h index 7e7b2f2483803..4e75f27231722 100644 --- a/src/libsync/basetheme.h +++ b/src/libsync/basetheme.h @@ -37,6 +37,7 @@ class BaseTheme : public QObject{ Q_PROPERTY(QString settingsIcon READ settingsIcon CONSTANT) Q_PROPERTY(QString logoutIcon READ logoutIcon CONSTANT) Q_PROPERTY(QString deleteIcon READ deleteIcon CONSTANT) + Q_PROPERTY(QString clipboardIcon READ clipboardIcon CONSTANT) public: @@ -132,6 +133,10 @@ class BaseTheme : public QObject{ return QString(Theme::qmlThemePrefix) + _sesFolder + additionalThemePrefix() + QStringLiteral("ses-info.svg"); } + virtual QString clipboardIcon() const { + return QString(Theme::qmlThemePrefix) + _sesFolder + additionalThemePrefix() + QStringLiteral("ses-clipboard.svg"); + } + virtual QString syncOfflineIcon() const { return QStringLiteral("qrc:///client/theme/ses/ses-state-offline.svg"); } diff --git a/theme/Style/Style.qml b/theme/Style/Style.qml index 08a1fb65ea608..ac9652e7d7284 100644 --- a/theme/Style/Style.qml +++ b/theme/Style/Style.qml @@ -233,7 +233,7 @@ QtObject { readonly property string sesAccountResume: "qrc:///client/theme/ses/ses-accountResume.svg" readonly property string sesLogout: WLTheme.logoutIcon readonly property string sesDelete: WLTheme.deleteIcon - readonly property string sesClipboard: "qrc:///client/theme/ses/ses-clipboard.svg" + readonly property string sesClipboard: WLTheme.clipboardIcon readonly property string sesLightClipboard: "qrc:///client/theme/ses/ses-lightClipboard.svg" readonly property string sesSyncErrorIcon: "qrc:///client/theme/ses/ses-syncstate-error.svg" readonly property string sesErrorBoxIcon: "qrc:///client/theme/ses/ses-snackbar-error.svg" diff --git a/theme/ses/strato/ses-clipboard.svg b/theme/ses/strato/ses-clipboard.svg index 11e2a909d3851..6002fdc7db2f3 100644 --- a/theme/ses/strato/ses-clipboard.svg +++ b/theme/ses/strato/ses-clipboard.svg @@ -1,10 +1,3 @@ - - - - - - - - - + + diff --git a/theme/ses/strato/ses-clipboard.svg:Zone.Identifier b/theme/ses/strato/ses-clipboard.svg:Zone.Identifier new file mode 100644 index 0000000000000000000000000000000000000000..d6c1ec682968c796b9f5e9e080cc6f674b57c766 GIT binary patch literal 25 dcma!!%Fjy;DN4*MPD?F{<>dl#JyUFr831@K2x Date: Mon, 27 Oct 2025 12:06:58 +0100 Subject: [PATCH 345/371] SES-357 delete Zone.Identifier files --- .../ses-accountDelete - Copy.svg:Zone.Identifier | Bin 25 -> 0 bytes .../ses-settingsAvatar - Copy.svg:Zone.Identifier | Bin 25 -> 0 bytes .../strato/ses-accountDelete.svg:Zone.Identifier | Bin 25 -> 0 bytes .../strato/ses-accountLogout.svg:Zone.Identifier | Bin 25 -> 0 bytes .../strato/ses-accountPause.svg:Zone.Identifier | Bin 25 -> 0 bytes .../strato/ses-activityDelete.svg:Zone.Identifier | Bin 25 -> 0 bytes theme/ses/strato/ses-clipboard.svg:Zone.Identifier | Bin 25 -> 0 bytes theme/ses/strato/ses-darkPlus.svg:Zone.Identifier | Bin 25 -> 0 bytes theme/ses/strato/ses-external.svg:Zone.Identifier | Bin 25 -> 0 bytes .../ses/strato/ses-folderIcon.svg:Zone.Identifier | Bin 25 -> 0 bytes theme/ses/strato/ses-info.svg:Zone.Identifier | Bin 25 -> 0 bytes theme/ses/strato/ses-settings.svg:Zone.Identifier | Bin 25 -> 0 bytes .../ses-settingsAvatarRound.svg:Zone.Identifier | Bin 25 -> 0 bytes .../ses/strato/ses-syncArrows.svg:Zone.Identifier | Bin 25 -> 0 bytes 14 files changed, 0 insertions(+), 0 deletions(-) delete mode 100644 theme/ses/ses-accountDelete - Copy.svg:Zone.Identifier delete mode 100644 theme/ses/ses-settingsAvatar - Copy.svg:Zone.Identifier delete mode 100644 theme/ses/strato/ses-accountDelete.svg:Zone.Identifier delete mode 100644 theme/ses/strato/ses-accountLogout.svg:Zone.Identifier delete mode 100644 theme/ses/strato/ses-accountPause.svg:Zone.Identifier delete mode 100644 theme/ses/strato/ses-activityDelete.svg:Zone.Identifier delete mode 100644 theme/ses/strato/ses-clipboard.svg:Zone.Identifier delete mode 100644 theme/ses/strato/ses-darkPlus.svg:Zone.Identifier delete mode 100644 theme/ses/strato/ses-external.svg:Zone.Identifier delete mode 100644 theme/ses/strato/ses-folderIcon.svg:Zone.Identifier delete mode 100644 theme/ses/strato/ses-info.svg:Zone.Identifier delete mode 100644 theme/ses/strato/ses-settings.svg:Zone.Identifier delete mode 100644 theme/ses/strato/ses-settingsAvatarRound.svg:Zone.Identifier delete mode 100644 theme/ses/strato/ses-syncArrows.svg:Zone.Identifier diff --git a/theme/ses/ses-accountDelete - Copy.svg:Zone.Identifier b/theme/ses/ses-accountDelete - Copy.svg:Zone.Identifier deleted file mode 100644 index d6c1ec682968c796b9f5e9e080cc6f674b57c766..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 25 dcma!!%Fjy;DN4*MPD?F{<>dl#JyUFr831@K2xdl#JyUFr831@K2xdl#JyUFr831@K2xdl#JyUFr831@K2xdl#JyUFr831@K2xdl#JyUFr831@K2xdl#JyUFr831@K2xdl#JyUFr831@K2xdl#JyUFr831@K2xdl#JyUFr831@K2xdl#JyUFr831@K2xdl#JyUFr831@K2xdl#JyUFr831@K2xdl#JyUFr831@K2x Date: Mon, 27 Oct 2025 14:47:27 +0100 Subject: [PATCH 346/371] SES-357 fix background color of clipboard icon --- src/gui/filedetails/ShareDelegate.qml | 1 + src/gui/tray/SecondaryPillButton.qml | 3 ++- src/libsync/basetheme.h | 5 +++++ src/libsync/stratotheme.h | 4 ++++ theme/Style/Style.qml | 1 + 5 files changed, 13 insertions(+), 1 deletion(-) diff --git a/src/gui/filedetails/ShareDelegate.qml b/src/gui/filedetails/ShareDelegate.qml index 70a7655ec3c7d..70ee664e0d8c5 100644 --- a/src/gui/filedetails/ShareDelegate.qml +++ b/src/gui/filedetails/ShareDelegate.qml @@ -197,6 +197,7 @@ GridLayout { text: shareLinkCopied ? qsTr("Copied!") : "" textColor: Style.sesDarkGreen + backgroundColor: Style.clipboardBackgroundColor iconSource: shareLinkCopied ? Style.sesSyncSuccessIcon + Style.positiveColor : Style.sesClipboard + palette.brightText diff --git a/src/gui/tray/SecondaryPillButton.qml b/src/gui/tray/SecondaryPillButton.qml index a250fedc389fd..e9b9e89019a1f 100644 --- a/src/gui/tray/SecondaryPillButton.qml +++ b/src/gui/tray/SecondaryPillButton.qml @@ -14,6 +14,7 @@ Button{ property bool isMouseOver: false property bool removeBorder: false property color textColor: "black" + property color backgroundColor: Style.sesPillButtonSecondaryBackgroundColor contentItem: Row { spacing: Style.sesPillButtonVerticalPadding @@ -36,7 +37,7 @@ Button{ } background: Rectangle { - color: Style.sesPillButtonSecondaryBackgroundColor + color: backgroundColor opacity: root.isMouseOver ? Style.sesPillButtonHoverOpacity : 1.0 border.width: root.removeBorder ? 0 : 2 border.color: Style.sesPillButtonBorderColor diff --git a/src/libsync/basetheme.h b/src/libsync/basetheme.h index 4e75f27231722..77a5e513cf3ba 100644 --- a/src/libsync/basetheme.h +++ b/src/libsync/basetheme.h @@ -23,6 +23,7 @@ class BaseTheme : public QObject{ Q_PROPERTY(QString pillButtonPrimaryColor READ pillButtonPrimaryColor CONSTANT) Q_PROPERTY(QString pillButtonSecondaryColor READ pillButtonSecondaryColor CONSTANT) Q_PROPERTY(QString pillButtonBorderColor READ pillButtonBorderColor CONSTANT) + Q_PROPERTY(QString clipboardBackgroundColor READ clipboardBackgroundColor CONSTANT) Q_PROPERTY(QString trayErrorBorderColor READ trayErrorBorderColor CONSTANT) Q_PROPERTY(QString trayErrorTextColor READ trayErrorTextColor CONSTANT) Q_PROPERTY(QString sesHeaderLogoIcon READ sesHeaderLogoIcon CONSTANT) @@ -371,6 +372,10 @@ class BaseTheme : public QObject{ return "#0B2A63"; } + virtual QString clipboardBackgroundColor() const { + return "#FFFFFF"; + } + virtual QString white() const { return "#FFFFFF"; } diff --git a/src/libsync/stratotheme.h b/src/libsync/stratotheme.h index 657d3f68e2380..e96ca822d2247 100644 --- a/src/libsync/stratotheme.h +++ b/src/libsync/stratotheme.h @@ -98,6 +98,10 @@ class StratoTheme : public BaseTheme { return "#FFFFFF"; } + QString clipboardBackgroundColor() const override { + return "#f7f7f9"; + } + QString buttonIconColor() const override { return "#2f2f70"; } diff --git a/theme/Style/Style.qml b/theme/Style/Style.qml index ac9652e7d7284..2ccef081c127a 100644 --- a/theme/Style/Style.qml +++ b/theme/Style/Style.qml @@ -308,6 +308,7 @@ QtObject { property color sesPillButtonPrimaryBackgroundColor: WLTheme.pillButtonPrimaryColor property color sesPillButtonSecondaryBackgroundColor: WLTheme.pillButtonSecondaryColor property color sesPillButtonBorderColor: WLTheme.pillButtonBorderColor + property color clipboardBackgroundColor: WLTheme.clipboardBackgroundColor property real sesPillIconSize: 16 property int sesPillButtonVerticalPadding: 4 property int sesPillButtonHorizontalPadding: 10 From 04ab0590942af413e668f597b4fd137932d27423 Mon Sep 17 00:00:00 2001 From: Kevin Beraz Date: Mon, 27 Oct 2025 15:11:46 +0100 Subject: [PATCH 347/371] SES-357 replace chevron icon --- src/libsync/basetheme.h | 5 +++++ theme/Style/Style.qml | 2 +- theme/ses/strato/ses-chevron.svg | 4 ++-- 3 files changed, 8 insertions(+), 3 deletions(-) diff --git a/src/libsync/basetheme.h b/src/libsync/basetheme.h index 77a5e513cf3ba..479c9d3fc2f70 100644 --- a/src/libsync/basetheme.h +++ b/src/libsync/basetheme.h @@ -39,6 +39,7 @@ class BaseTheme : public QObject{ Q_PROPERTY(QString logoutIcon READ logoutIcon CONSTANT) Q_PROPERTY(QString deleteIcon READ deleteIcon CONSTANT) Q_PROPERTY(QString clipboardIcon READ clipboardIcon CONSTANT) + Q_PROPERTY(QString chevronIcon READ chevronIcon CONSTANT) public: @@ -138,6 +139,10 @@ class BaseTheme : public QObject{ return QString(Theme::qmlThemePrefix) + _sesFolder + additionalThemePrefix() + QStringLiteral("ses-clipboard.svg"); } + virtual QString chevronIcon() const { + return QString(Theme::qmlThemePrefix) + _sesFolder + additionalThemePrefix() + QStringLiteral("ses-chevron.svg"); + } + virtual QString syncOfflineIcon() const { return QStringLiteral("qrc:///client/theme/ses/ses-state-offline.svg"); } diff --git a/theme/Style/Style.qml b/theme/Style/Style.qml index 2ccef081c127a..3d3147ea364b8 100644 --- a/theme/Style/Style.qml +++ b/theme/Style/Style.qml @@ -239,7 +239,7 @@ QtObject { readonly property string sesErrorBoxIcon: "qrc:///client/theme/ses/ses-snackbar-error.svg" readonly property string sesSyncSuccessIcon: "qrc:///client/theme/ses/ses-syncstate-success.svg" readonly property string sesOfflineIcon: "qrc:///client/theme/ses/ses-state-offline.svg" - readonly property string sesChevron: "qrc:///client/theme/ses/ses-chevron.svg" + readonly property string sesChevron: WLTheme.chevronIcon readonly property string sesMore: WLTheme.moreIcon readonly property string sesMoreHover: WLTheme.moreHoverIcon diff --git a/theme/ses/strato/ses-chevron.svg b/theme/ses/strato/ses-chevron.svg index 0823e78819528..975615746a5c3 100644 --- a/theme/ses/strato/ses-chevron.svg +++ b/theme/ses/strato/ses-chevron.svg @@ -1,3 +1,3 @@ - - + + From 277e5587c076262495cea8ccb31e9bf999d2e0d9 Mon Sep 17 00:00:00 2001 From: Kevin Beraz Date: Mon, 27 Oct 2025 15:14:00 +0100 Subject: [PATCH 348/371] SES-357 use dynamic path pattern --- src/libsync/basetheme.h | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/libsync/basetheme.h b/src/libsync/basetheme.h index 479c9d3fc2f70..a346e4a158fcd 100644 --- a/src/libsync/basetheme.h +++ b/src/libsync/basetheme.h @@ -128,7 +128,7 @@ class BaseTheme : public QObject{ } virtual QString refreshIcon() const { - return QStringLiteral("qrc:///client/theme/ses/ses-refresh.svg"); + return QString(Theme::qmlThemePrefix) + _sesFolder + additionalThemePrefix() + QStringLiteral("ses-refresh.svg"); } virtual QString infoIcon() const { @@ -144,7 +144,7 @@ class BaseTheme : public QObject{ } virtual QString syncOfflineIcon() const { - return QStringLiteral("qrc:///client/theme/ses/ses-state-offline.svg"); + return QString(Theme::qmlThemePrefix) + _sesFolder + additionalThemePrefix() + QStringLiteral("ses-state-offline.svg"); } virtual int treeViewIconSize() const { From 3c0659bbf2cb7bed3314acb9285b9d9945dcf9cb Mon Sep 17 00:00:00 2001 From: Kevin Beraz Date: Mon, 27 Oct 2025 15:22:00 +0100 Subject: [PATCH 349/371] SES-357 get more icons from theme file --- src/libsync/basetheme.h | 21 +++++++++++++++++++++ theme/Style/Style.qml | 10 +++++----- 2 files changed, 26 insertions(+), 5 deletions(-) diff --git a/src/libsync/basetheme.h b/src/libsync/basetheme.h index a346e4a158fcd..941fdd03386b7 100644 --- a/src/libsync/basetheme.h +++ b/src/libsync/basetheme.h @@ -34,12 +34,17 @@ class BaseTheme : public QObject{ Q_PROPERTY(QString avatarIcon READ avatarIcon CONSTANT) Q_PROPERTY(QString plusIcon READ plusIcon CONSTANT) Q_PROPERTY(QString quitIcon READ quitIcon CONSTANT) + Q_PROPERTY(QString resumeIcon READ resumeIcon CONSTANT) Q_PROPERTY(QString pauseIcon READ pauseIcon CONSTANT) Q_PROPERTY(QString settingsIcon READ settingsIcon CONSTANT) Q_PROPERTY(QString logoutIcon READ logoutIcon CONSTANT) Q_PROPERTY(QString deleteIcon READ deleteIcon CONSTANT) Q_PROPERTY(QString clipboardIcon READ clipboardIcon CONSTANT) Q_PROPERTY(QString chevronIcon READ chevronIcon CONSTANT) + Q_PROPERTY(QString syncSuccessIcon READ syncSuccessIcon CONSTANT) + Q_PROPERTY(QString syncErrorIcon READ syncErrorIcon CONSTANT) + Q_PROPERTY(QString syncOfflineIcon READ syncOfflineIcon CONSTANT) + Q_PROPERTY(QString snackbarErrorIcon READ snackbarErrorIcon CONSTANT) public: @@ -102,6 +107,10 @@ class BaseTheme : public QObject{ return QString(Theme::qmlThemePrefix) + _sesFolder + additionalThemePrefix() + QStringLiteral("ses-accountQuit.svg"); } + virtual QString resumeIcon() const { + return QString(Theme::qmlThemePrefix) + _sesFolder + additionalThemePrefix() + QStringLiteral("ses-accountResume.svg"); + } + virtual QString pauseIcon() const { return QString(Theme::qmlThemePrefix) + _sesFolder + additionalThemePrefix() + QStringLiteral("ses-accountPause.svg"); } @@ -143,10 +152,22 @@ class BaseTheme : public QObject{ return QString(Theme::qmlThemePrefix) + _sesFolder + additionalThemePrefix() + QStringLiteral("ses-chevron.svg"); } + virtual QString syncSuccessIcon() const { + return QString(Theme::qmlThemePrefix) + _sesFolder + additionalThemePrefix() + QStringLiteral("ses-syncstate-success.svg"); + } + + virtual QString syncErrorIcon() const { + return QString(Theme::qmlThemePrefix) + _sesFolder + additionalThemePrefix() + QStringLiteral("ses-syncstate-error.svg"); + } + virtual QString syncOfflineIcon() const { return QString(Theme::qmlThemePrefix) + _sesFolder + additionalThemePrefix() + QStringLiteral("ses-state-offline.svg"); } + virtual QString snackbarErrorIcon() const { + return QString(Theme::qmlThemePrefix) + _sesFolder + additionalThemePrefix() + QStringLiteral("ses-snackbar-error.svg"); + } + virtual int treeViewIconSize() const { return 32; } diff --git a/theme/Style/Style.qml b/theme/Style/Style.qml index 3d3147ea364b8..d12d0984c674b 100644 --- a/theme/Style/Style.qml +++ b/theme/Style/Style.qml @@ -230,15 +230,15 @@ QtObject { readonly property string sesDarkPlus: WLTheme.plusIcon readonly property string sesLightPlus: "qrc:///client/theme/ses/ses-lightPlus.svg" readonly property string sesAccountSettings: WLTheme.settingsIcon - readonly property string sesAccountResume: "qrc:///client/theme/ses/ses-accountResume.svg" + readonly property string sesAccountResume: WLTheme.resumeIcon readonly property string sesLogout: WLTheme.logoutIcon readonly property string sesDelete: WLTheme.deleteIcon readonly property string sesClipboard: WLTheme.clipboardIcon readonly property string sesLightClipboard: "qrc:///client/theme/ses/ses-lightClipboard.svg" - readonly property string sesSyncErrorIcon: "qrc:///client/theme/ses/ses-syncstate-error.svg" - readonly property string sesErrorBoxIcon: "qrc:///client/theme/ses/ses-snackbar-error.svg" - readonly property string sesSyncSuccessIcon: "qrc:///client/theme/ses/ses-syncstate-success.svg" - readonly property string sesOfflineIcon: "qrc:///client/theme/ses/ses-state-offline.svg" + readonly property string sesSyncErrorIcon: WLTheme.syncErrorIcon + readonly property string sesErrorBoxIcon: WLTheme.snackbarErrorIcon + readonly property string sesSyncSuccessIcon: WLTheme,syncSuccessIcon + readonly property string sesOfflineIcon: WLTheme.syncOfflineIcon readonly property string sesChevron: WLTheme.chevronIcon readonly property string sesMore: WLTheme.moreIcon readonly property string sesMoreHover: WLTheme.moreHoverIcon From 655766f071b0090845907ada089d4e382b61a63d Mon Sep 17 00:00:00 2001 From: Kevin Beraz Date: Mon, 27 Oct 2025 15:26:29 +0100 Subject: [PATCH 350/371] SES-357 replace snackbar error icon --- theme/ses/strato/ses-snackbar-error.svg | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/theme/ses/strato/ses-snackbar-error.svg b/theme/ses/strato/ses-snackbar-error.svg index ddb015e7693c4..5fb9166552f98 100644 --- a/theme/ses/strato/ses-snackbar-error.svg +++ b/theme/ses/strato/ses-snackbar-error.svg @@ -1,9 +1,9 @@ - - + + - + From 578859214ea9f33bd5e57a9ce2824cb175a19eac Mon Sep 17 00:00:00 2001 From: Kevin Beraz Date: Mon, 27 Oct 2025 16:01:10 +0100 Subject: [PATCH 351/371] SES-357 replace activity icon --- src/gui/tray/ActivityList.qml | 2 +- src/libsync/basetheme.h | 5 +++++ theme/Style/Style.qml | 1 + theme/ses/strato/ses-activity.svg | 11 ++--------- 4 files changed, 9 insertions(+), 10 deletions(-) diff --git a/src/gui/tray/ActivityList.qml b/src/gui/tray/ActivityList.qml index eaaa732e40335..c9b767bf8c088 100644 --- a/src/gui/tray/ActivityList.qml +++ b/src/gui/tray/ActivityList.qml @@ -156,7 +156,7 @@ ScrollView { verticalAlignment: Image.AlignVCenter horizontalAlignment: Image.AlignHCenter fillMode: Image.PreserveAspectFit - source: "qrc:///client/theme/ses/ses-activity.svg" + source: Style.sesActivity sourceSize.height: 32 sourceSize.width: 22 } diff --git a/src/libsync/basetheme.h b/src/libsync/basetheme.h index 941fdd03386b7..5c23fe7eabaff 100644 --- a/src/libsync/basetheme.h +++ b/src/libsync/basetheme.h @@ -45,6 +45,7 @@ class BaseTheme : public QObject{ Q_PROPERTY(QString syncErrorIcon READ syncErrorIcon CONSTANT) Q_PROPERTY(QString syncOfflineIcon READ syncOfflineIcon CONSTANT) Q_PROPERTY(QString snackbarErrorIcon READ snackbarErrorIcon CONSTANT) + Q_PROPERTY(QString activityIcon READ activityIcon CONSTANT) public: @@ -168,6 +169,10 @@ class BaseTheme : public QObject{ return QString(Theme::qmlThemePrefix) + _sesFolder + additionalThemePrefix() + QStringLiteral("ses-snackbar-error.svg"); } + virtual QString activityIcon() const { + return QString(Theme::qmlThemePrefix) + _sesFolder + additionalThemePrefix() + QStringLiteral("ses-activity.svg"); + } + virtual int treeViewIconSize() const { return 32; } diff --git a/theme/Style/Style.qml b/theme/Style/Style.qml index d12d0984c674b..0e704ee5d5b0f 100644 --- a/theme/Style/Style.qml +++ b/theme/Style/Style.qml @@ -242,6 +242,7 @@ QtObject { readonly property string sesChevron: WLTheme.chevronIcon readonly property string sesMore: WLTheme.moreIcon readonly property string sesMoreHover: WLTheme.moreHoverIcon + readonly property string sesActivity: WLTheme.activityIcon readonly property color sesIconDarkColor: WLTheme.iconDarkColor readonly property color sesIconColor: WLTheme.buttonIconColor diff --git a/theme/ses/strato/ses-activity.svg b/theme/ses/strato/ses-activity.svg index 09d58a5868610..aa4317cc8eb1b 100644 --- a/theme/ses/strato/ses-activity.svg +++ b/theme/ses/strato/ses-activity.svg @@ -1,10 +1,3 @@ - - - - - - - - - + + From 1a26a05fe5b305698cb72a5036fdbe93c9d4c0f9 Mon Sep 17 00:00:00 2001 From: Kevin Beraz Date: Mon, 27 Oct 2025 16:01:55 +0100 Subject: [PATCH 352/371] SES-357 use trayFontColor instead of unnecessary darkBlue --- src/gui/macOS/ui/FileProviderSyncStatus.qml | 2 +- src/gui/tray/AccountMenuItem.qml | 2 +- src/gui/tray/ActivityList.qml | 2 +- src/gui/tray/UserLine.qml | 6 +++--- theme/Style/Style.qml | 1 - 5 files changed, 6 insertions(+), 7 deletions(-) diff --git a/src/gui/macOS/ui/FileProviderSyncStatus.qml b/src/gui/macOS/ui/FileProviderSyncStatus.qml index 85bc6ba4c21aa..dab6b8a08835d 100644 --- a/src/gui/macOS/ui/FileProviderSyncStatus.qml +++ b/src/gui/macOS/ui/FileProviderSyncStatus.qml @@ -54,7 +54,7 @@ GridLayout { Layout.columnSpan: root.syncStatus.syncing ? 2 : 1 Layout.fillWidth: true text: root.syncStatus.syncing ? qsTr("Syncing") : qsTr("All synced!") - color: Style.sesDarkBlue + color: Style.sesTrayFontColor } NCProgressBar { diff --git a/src/gui/tray/AccountMenuItem.qml b/src/gui/tray/AccountMenuItem.qml index 8c2a3c2f6ef88..7be108628aa33 100644 --- a/src/gui/tray/AccountMenuItem.qml +++ b/src/gui/tray/AccountMenuItem.qml @@ -14,7 +14,7 @@ MenuItem { property bool isActive: accountMenuItem.pressed font.pixelSize: Style.sesFontPixelSize - palette.text: Style.sesDarkBlue + palette.text: Style.sesTrayFontColor hoverEnabled: true leftPadding: Style.sesMediumMargin diff --git a/src/gui/tray/ActivityList.qml b/src/gui/tray/ActivityList.qml index c9b767bf8c088..736fb3c1d26a4 100644 --- a/src/gui/tray/ActivityList.qml +++ b/src/gui/tray/ActivityList.qml @@ -164,7 +164,7 @@ ScrollView { EnforcedPlainTextLabel { width: parent.width text: qsTr("No activities yet") - color: Style.sesDarkBlue + color: Style.sesTrayFontColor wrapMode: Text.Wrap horizontalAlignment: Text.AlignHCenter verticalAlignment: Text.AlignVCenter diff --git a/src/gui/tray/UserLine.qml b/src/gui/tray/UserLine.qml index b91b991390e34..e81daaa0cce32 100644 --- a/src/gui/tray/UserLine.qml +++ b/src/gui/tray/UserLine.qml @@ -69,7 +69,7 @@ AbstractButton { text: name elide: Text.ElideRight font: userLine.font - color: Style.sesDarkBlue + color: Style.sesTrayFontColor } RowLayout { @@ -144,7 +144,7 @@ AbstractButton { property bool isHovered: logInOutButton.hovered || logInOutButton.visualFocus property bool isActive: logInOutButton.pressed - palette.text: Style.sesDarkBlue + palette.text: Style.sesTrayFontColor Component.onCompleted: { if (contentItem && contentItem.hasOwnProperty("color")) { @@ -198,7 +198,7 @@ AbstractButton { property bool isHovered: removeAccountButton.hovered || removeAccountButton.visualFocus property bool isActive: removeAccountButton.pressed - palette.text: Style.sesDarkBlue + palette.text: Style.sesTrayFontColor Component.onCompleted: { if (contentItem && contentItem.hasOwnProperty("color")) { diff --git a/theme/Style/Style.qml b/theme/Style/Style.qml index 0e704ee5d5b0f..900423ce87bb5 100644 --- a/theme/Style/Style.qml +++ b/theme/Style/Style.qml @@ -259,7 +259,6 @@ QtObject { readonly property color sesButtonPressed: WLTheme.toolButtonPressedColor readonly property color sesAccountMenuHover: WLTheme.toolButtonHoveredColor readonly property color sesDarkGreen: "#096B35" - readonly property color sesDarkBlue: "#001B41" readonly property color sesTrayFontColor: WLTheme.trayFontColor readonly property color sesErrorBoxBorder: WLTheme.trayErrorBorderColor readonly property color sesErrorBoxText: WLTheme.trayErrorTextColor From 1f009a92dcd26ea527d296fd23027a8d12f24a48 Mon Sep 17 00:00:00 2001 From: Kevin Beraz Date: Mon, 27 Oct 2025 16:55:27 +0100 Subject: [PATCH 353/371] SES-357 fix typo --- theme/Style/Style.qml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/theme/Style/Style.qml b/theme/Style/Style.qml index 900423ce87bb5..fff9a8efe5c99 100644 --- a/theme/Style/Style.qml +++ b/theme/Style/Style.qml @@ -237,7 +237,7 @@ QtObject { readonly property string sesLightClipboard: "qrc:///client/theme/ses/ses-lightClipboard.svg" readonly property string sesSyncErrorIcon: WLTheme.syncErrorIcon readonly property string sesErrorBoxIcon: WLTheme.snackbarErrorIcon - readonly property string sesSyncSuccessIcon: WLTheme,syncSuccessIcon + readonly property string sesSyncSuccessIcon: WLTheme.syncSuccessIcon readonly property string sesOfflineIcon: WLTheme.syncOfflineIcon readonly property string sesChevron: WLTheme.chevronIcon readonly property string sesMore: WLTheme.moreIcon From a649b77d98d7fe31c7395a2930223d5ce7852282 Mon Sep 17 00:00:00 2001 From: Kevin Beraz Date: Mon, 27 Oct 2025 16:56:30 +0100 Subject: [PATCH 354/371] SES-357 replace white clipboard and plus icon --- src/libsync/basetheme.h | 10 ++++++++++ theme/Style/Style.qml | 4 ++-- theme/ses/strato/ses-lightClipboard.svg | 9 +-------- theme/ses/strato/ses-lightPlus.svg | 6 +++--- 4 files changed, 16 insertions(+), 13 deletions(-) diff --git a/src/libsync/basetheme.h b/src/libsync/basetheme.h index 5c23fe7eabaff..236d880c54b57 100644 --- a/src/libsync/basetheme.h +++ b/src/libsync/basetheme.h @@ -33,6 +33,7 @@ class BaseTheme : public QObject{ Q_PROPERTY(QString moreHoverIcon READ moreHoverIcon CONSTANT) Q_PROPERTY(QString avatarIcon READ avatarIcon CONSTANT) Q_PROPERTY(QString plusIcon READ plusIcon CONSTANT) + Q_PROPERTY(QString lightPlusIcon READ lightPlusIcon CONSTANT) Q_PROPERTY(QString quitIcon READ quitIcon CONSTANT) Q_PROPERTY(QString resumeIcon READ resumeIcon CONSTANT) Q_PROPERTY(QString pauseIcon READ pauseIcon CONSTANT) @@ -40,6 +41,7 @@ class BaseTheme : public QObject{ Q_PROPERTY(QString logoutIcon READ logoutIcon CONSTANT) Q_PROPERTY(QString deleteIcon READ deleteIcon CONSTANT) Q_PROPERTY(QString clipboardIcon READ clipboardIcon CONSTANT) + Q_PROPERTY(QString lightClipboardIcon READ lightClipboardIcon CONSTANT) Q_PROPERTY(QString chevronIcon READ chevronIcon CONSTANT) Q_PROPERTY(QString syncSuccessIcon READ syncSuccessIcon CONSTANT) Q_PROPERTY(QString syncErrorIcon READ syncErrorIcon CONSTANT) @@ -104,6 +106,10 @@ class BaseTheme : public QObject{ return QString(Theme::qmlThemePrefix) + _sesFolder + additionalThemePrefix() + QStringLiteral("ses-darkPlus.svg"); } + virtual QString lightPlusIcon() const { + return QString(Theme::qmlThemePrefix) + _sesFolder + additionalThemePrefix() + QStringLiteral("ses-lightPlus.svg"); + } + virtual QString quitIcon() const { return QString(Theme::qmlThemePrefix) + _sesFolder + additionalThemePrefix() + QStringLiteral("ses-accountQuit.svg"); } @@ -149,6 +155,10 @@ class BaseTheme : public QObject{ return QString(Theme::qmlThemePrefix) + _sesFolder + additionalThemePrefix() + QStringLiteral("ses-clipboard.svg"); } + virtual QString lightClipboardIcon() const { + return QString(Theme::qmlThemePrefix) + _sesFolder + additionalThemePrefix() + QStringLiteral("ses-lightClipboard.svg"); + } + virtual QString chevronIcon() const { return QString(Theme::qmlThemePrefix) + _sesFolder + additionalThemePrefix() + QStringLiteral("ses-chevron.svg"); } diff --git a/theme/Style/Style.qml b/theme/Style/Style.qml index fff9a8efe5c99..8cc9eb9d950c6 100644 --- a/theme/Style/Style.qml +++ b/theme/Style/Style.qml @@ -228,13 +228,13 @@ QtObject { readonly property string sesAccountQuit: WLTheme.quitIcon readonly property string sesAccountPause: WLTheme.pauseIcon readonly property string sesDarkPlus: WLTheme.plusIcon - readonly property string sesLightPlus: "qrc:///client/theme/ses/ses-lightPlus.svg" + readonly property string sesLightPlus: WLTheme.lightPlusIcon readonly property string sesAccountSettings: WLTheme.settingsIcon readonly property string sesAccountResume: WLTheme.resumeIcon readonly property string sesLogout: WLTheme.logoutIcon readonly property string sesDelete: WLTheme.deleteIcon readonly property string sesClipboard: WLTheme.clipboardIcon - readonly property string sesLightClipboard: "qrc:///client/theme/ses/ses-lightClipboard.svg" + readonly property string sesLightClipboard: WLTheme.lightClipboardIcon readonly property string sesSyncErrorIcon: WLTheme.syncErrorIcon readonly property string sesErrorBoxIcon: WLTheme.snackbarErrorIcon readonly property string sesSyncSuccessIcon: WLTheme.syncSuccessIcon diff --git a/theme/ses/strato/ses-lightClipboard.svg b/theme/ses/strato/ses-lightClipboard.svg index cf099bb8fd6b1..e6bb8c4b3b490 100644 --- a/theme/ses/strato/ses-lightClipboard.svg +++ b/theme/ses/strato/ses-lightClipboard.svg @@ -1,10 +1,3 @@ - - - - - - - - + diff --git a/theme/ses/strato/ses-lightPlus.svg b/theme/ses/strato/ses-lightPlus.svg index b19ae735102f4..05e7de7ff6992 100644 --- a/theme/ses/strato/ses-lightPlus.svg +++ b/theme/ses/strato/ses-lightPlus.svg @@ -1,9 +1,9 @@ - - + + - + From 4e1e8b68a74ec20eb87d3cc18fd91f4857109094 Mon Sep 17 00:00:00 2001 From: Kevin Beraz Date: Tue, 28 Oct 2025 10:20:00 +0100 Subject: [PATCH 355/371] SES-357 reduce context depending code --- src/libsync/basetheme.h | 70 +++++++++++++++++++---------------------- src/libsync/theme.h | 1 - 2 files changed, 32 insertions(+), 39 deletions(-) diff --git a/src/libsync/basetheme.h b/src/libsync/basetheme.h index 236d880c54b57..79613bd07c42d 100644 --- a/src/libsync/basetheme.h +++ b/src/libsync/basetheme.h @@ -53,14 +53,17 @@ class BaseTheme : public QObject{ virtual ~BaseTheme() = default; + virtual QString themePrefix(QString context = "qml") const { + if (context == "qml") { + return QString("qrc:///client/theme/"); + } + return QString(Theme::themePrefix); + } + virtual QString additionalThemePrefix() const { return QStringLiteral(""); } virtual QString avatarIcon(QString context = "qml") const { - if (context != "qml") { - return QString(Theme::themePrefix) + _sesFolder + additionalThemePrefix() + QStringLiteral("ses-settingsAvatar.svg"); - } - - return QString(Theme::qmlThemePrefix) + _sesFolder + additionalThemePrefix() + QStringLiteral("ses-settingsAvatar.svg"); + return themePrefix(context) + _sesFolder + additionalThemePrefix() + QStringLiteral("ses-settingsAvatar.svg"); } virtual QString roundAvatarIcon() const { @@ -68,11 +71,7 @@ class BaseTheme : public QObject{ } virtual QString folderIcon(QString context = "qml") const { - if (context != "qml") { - return QString(Theme::themePrefix) + _sesFolder + additionalThemePrefix() + QStringLiteral("ses-folderIcon.svg"); - } - - return QString(Theme::qmlThemePrefix) + _sesFolder + additionalThemePrefix() + QStringLiteral("ses-folderIcon.svg"); + return themePrefix(context) + _sesFolder + additionalThemePrefix() + QStringLiteral("ses-folderIcon.svg"); } virtual QString syncArrows() const { @@ -88,99 +87,93 @@ class BaseTheme : public QObject{ } virtual QString websiteIcon(QString context = "qml") const { - return QString(Theme::qmlThemePrefix) + _sesFolder + additionalThemePrefix() + QStringLiteral("ses-website.svg"); + return themePrefix(context) + _sesFolder + additionalThemePrefix() + QStringLiteral("ses-website.svg"); } virtual QString moreIcon() const { - return QString(Theme::qmlThemePrefix) + _sesFolder + additionalThemePrefix() + QStringLiteral("ses-more.svg"); + return themePrefix() + _sesFolder + additionalThemePrefix() + QStringLiteral("ses-more.svg"); } virtual QString moreHoverIcon() const { - return QString(Theme::qmlThemePrefix) + _sesFolder + additionalThemePrefix() + QStringLiteral("ses-more-hover.svg"); + return themePrefix() + _sesFolder + additionalThemePrefix() + QStringLiteral("ses-more-hover.svg"); } virtual QString plusIcon(QString context = "qml") const { - if (context != "qml") { - return QString(Theme::themePrefix) + _sesFolder + additionalThemePrefix() + QStringLiteral("ses-darkPlus.svg"); - } - return QString(Theme::qmlThemePrefix) + _sesFolder + additionalThemePrefix() + QStringLiteral("ses-darkPlus.svg"); + return themePrefix(context) + _sesFolder + additionalThemePrefix() + QStringLiteral("ses-darkPlus.svg"); } virtual QString lightPlusIcon() const { - return QString(Theme::qmlThemePrefix) + _sesFolder + additionalThemePrefix() + QStringLiteral("ses-lightPlus.svg"); + return themePrefix() + _sesFolder + additionalThemePrefix() + QStringLiteral("ses-lightPlus.svg"); } virtual QString quitIcon() const { - return QString(Theme::qmlThemePrefix) + _sesFolder + additionalThemePrefix() + QStringLiteral("ses-accountQuit.svg"); + return themePrefix() + _sesFolder + additionalThemePrefix() + QStringLiteral("ses-accountQuit.svg"); } virtual QString resumeIcon() const { - return QString(Theme::qmlThemePrefix) + _sesFolder + additionalThemePrefix() + QStringLiteral("ses-accountResume.svg"); + return themePrefix() + _sesFolder + additionalThemePrefix() + QStringLiteral("ses-accountResume.svg"); } virtual QString pauseIcon() const { - return QString(Theme::qmlThemePrefix) + _sesFolder + additionalThemePrefix() + QStringLiteral("ses-accountPause.svg"); + return themePrefix() + _sesFolder + additionalThemePrefix() + QStringLiteral("ses-accountPause.svg"); } virtual QString settingsIcon(QString context = "qml") const { - if (context != "qml") { - return QString(Theme::themePrefix) + _sesFolder + additionalThemePrefix() + QStringLiteral("ses-settings.svg"); - } - return QString(Theme::qmlThemePrefix) + _sesFolder + additionalThemePrefix() + QStringLiteral("ses-settings.svg"); + return themePrefix(context) + _sesFolder + additionalThemePrefix() + QStringLiteral("ses-settings.svg"); } virtual QString logoutIcon() const { - return QString(Theme::qmlThemePrefix) + _sesFolder + additionalThemePrefix() + QStringLiteral("ses-accountLogout.svg"); + return themePrefix() + _sesFolder + additionalThemePrefix() + QStringLiteral("ses-accountLogout.svg"); } virtual QString sesHeaderLogoIcon() const = 0; virtual QString deleteIcon() const { - return QString(Theme::qmlThemePrefix) + _sesFolder + additionalThemePrefix() + QStringLiteral("ses-accountDelete.svg"); + return themePrefix() + _sesFolder + additionalThemePrefix() + QStringLiteral("ses-accountDelete.svg"); } virtual QString activityDeleteIcon() const { - return QString(Theme::qmlThemePrefix) + _sesFolder + additionalThemePrefix() + QStringLiteral("ses-activityDelete.svg"); + return themePrefix() + _sesFolder + additionalThemePrefix() + QStringLiteral("ses-activityDelete.svg"); } virtual QString refreshIcon() const { - return QString(Theme::qmlThemePrefix) + _sesFolder + additionalThemePrefix() + QStringLiteral("ses-refresh.svg"); + return themePrefix() + _sesFolder + additionalThemePrefix() + QStringLiteral("ses-refresh.svg"); } virtual QString infoIcon() const { - return QString(Theme::qmlThemePrefix) + _sesFolder + additionalThemePrefix() + QStringLiteral("ses-info.svg"); + return themePrefix() + _sesFolder + additionalThemePrefix() + QStringLiteral("ses-info.svg"); } virtual QString clipboardIcon() const { - return QString(Theme::qmlThemePrefix) + _sesFolder + additionalThemePrefix() + QStringLiteral("ses-clipboard.svg"); + return themePrefix() + _sesFolder + additionalThemePrefix() + QStringLiteral("ses-clipboard.svg"); } virtual QString lightClipboardIcon() const { - return QString(Theme::qmlThemePrefix) + _sesFolder + additionalThemePrefix() + QStringLiteral("ses-lightClipboard.svg"); + return themePrefix() + _sesFolder + additionalThemePrefix() + QStringLiteral("ses-lightClipboard.svg"); } virtual QString chevronIcon() const { - return QString(Theme::qmlThemePrefix) + _sesFolder + additionalThemePrefix() + QStringLiteral("ses-chevron.svg"); + return themePrefix() + _sesFolder + additionalThemePrefix() + QStringLiteral("ses-chevron.svg"); } virtual QString syncSuccessIcon() const { - return QString(Theme::qmlThemePrefix) + _sesFolder + additionalThemePrefix() + QStringLiteral("ses-syncstate-success.svg"); + return themePrefix() + _sesFolder + additionalThemePrefix() + QStringLiteral("ses-syncstate-success.svg"); } virtual QString syncErrorIcon() const { - return QString(Theme::qmlThemePrefix) + _sesFolder + additionalThemePrefix() + QStringLiteral("ses-syncstate-error.svg"); + return themePrefix() + _sesFolder + additionalThemePrefix() + QStringLiteral("ses-syncstate-error.svg"); } virtual QString syncOfflineIcon() const { - return QString(Theme::qmlThemePrefix) + _sesFolder + additionalThemePrefix() + QStringLiteral("ses-state-offline.svg"); + return themePrefix() + _sesFolder + additionalThemePrefix() + QStringLiteral("ses-state-offline.svg"); } virtual QString snackbarErrorIcon() const { - return QString(Theme::qmlThemePrefix) + _sesFolder + additionalThemePrefix() + QStringLiteral("ses-snackbar-error.svg"); + return themePrefix() + _sesFolder + additionalThemePrefix() + QStringLiteral("ses-snackbar-error.svg"); } virtual QString activityIcon() const { - return QString(Theme::qmlThemePrefix) + _sesFolder + additionalThemePrefix() + QStringLiteral("ses-activity.svg"); + return themePrefix() + _sesFolder + additionalThemePrefix() + QStringLiteral("ses-activity.svg"); } virtual int treeViewIconSize() const { @@ -238,6 +231,7 @@ class BaseTheme : public QObject{ } virtual QString contextMenuFont() const { + //TODO return ":/client/fonts/OpenSans-Regular.ttf"; } diff --git a/src/libsync/theme.h b/src/libsync/theme.h index e900ff9334be2..16234a22604ea 100644 --- a/src/libsync/theme.h +++ b/src/libsync/theme.h @@ -620,7 +620,6 @@ class OWNCLOUDSYNC_EXPORT Theme : public QObject static QColor defaultColor(); static constexpr const char *themePrefix = ":/client/theme/"; - static constexpr const char *qmlThemePrefix = "qrc:///client/theme/"; [[nodiscard]] QVariantMap systemPalette() const; [[nodiscard]] bool darkMode() const; From 66138dd9cd501f041a357c9ea2fa610eca7c5e85 Mon Sep 17 00:00:00 2001 From: Kevin Beraz Date: Wed, 29 Oct 2025 11:51:20 +0100 Subject: [PATCH 356/371] WIP remove Q_OBJECT macro --- src/libsync/basetheme.h | 1 - 1 file changed, 1 deletion(-) diff --git a/src/libsync/basetheme.h b/src/libsync/basetheme.h index 79613bd07c42d..f095701c108da 100644 --- a/src/libsync/basetheme.h +++ b/src/libsync/basetheme.h @@ -8,7 +8,6 @@ namespace OCC { class BaseTheme : public QObject{ - Q_OBJECT Q_PROPERTY(QString dialogBackgroundColor READ dialogBackgroundColor CONSTANT) Q_PROPERTY(QString trayFontColor READ trayFontColor CONSTANT) Q_PROPERTY(QString trayBorderColor READ trayBorderColor CONSTANT) From 5450f19801e6cd987e550ffd97a0f803df8c9583 Mon Sep 17 00:00:00 2001 From: Kevin Beraz Date: Wed, 29 Oct 2025 12:09:03 +0100 Subject: [PATCH 357/371] Revert "WIP remove Q_OBJECT macro" This reverts commit eb1575e42d2014b528a9e695ea131a997c9458e1. --- src/libsync/basetheme.h | 1 + 1 file changed, 1 insertion(+) diff --git a/src/libsync/basetheme.h b/src/libsync/basetheme.h index f095701c108da..79613bd07c42d 100644 --- a/src/libsync/basetheme.h +++ b/src/libsync/basetheme.h @@ -8,6 +8,7 @@ namespace OCC { class BaseTheme : public QObject{ + Q_OBJECT Q_PROPERTY(QString dialogBackgroundColor READ dialogBackgroundColor CONSTANT) Q_PROPERTY(QString trayFontColor READ trayFontColor CONSTANT) Q_PROPERTY(QString trayBorderColor READ trayBorderColor CONSTANT) From 04cd70809b4dd56413229ccbcd259e75949b97a1 Mon Sep 17 00:00:00 2001 From: Kevin Beraz Date: Fri, 31 Oct 2025 08:54:56 +0100 Subject: [PATCH 358/371] SES-357 move theme files into gui folder --- src/gui/CMakeLists.txt | 4 ++++ src/{libsync => gui}/basetheme.h | 0 src/{libsync => gui}/ionostheme.h | 0 src/{libsync => gui}/stratotheme.h | 0 src/{libsync => gui}/whitelabeltheme.h | 0 src/libsync/CMakeLists.txt | 4 ---- 6 files changed, 4 insertions(+), 4 deletions(-) rename src/{libsync => gui}/basetheme.h (100%) rename src/{libsync => gui}/ionostheme.h (100%) rename src/{libsync => gui}/stratotheme.h (100%) rename src/{libsync => gui}/whitelabeltheme.h (100%) diff --git a/src/gui/CMakeLists.txt b/src/gui/CMakeLists.txt index 193e4af0f0f55..924b85873dddf 100644 --- a/src/gui/CMakeLists.txt +++ b/src/gui/CMakeLists.txt @@ -149,6 +149,10 @@ set(client_SRCS sslerrordialog.cpp syncrunfilelog.h syncrunfilelog.cpp + ionostheme.h + whitelabeltheme.h + stratotheme.h + basetheme.h systray.h systray.cpp EncryptionTokenSelectionWindow.qml diff --git a/src/libsync/basetheme.h b/src/gui/basetheme.h similarity index 100% rename from src/libsync/basetheme.h rename to src/gui/basetheme.h diff --git a/src/libsync/ionostheme.h b/src/gui/ionostheme.h similarity index 100% rename from src/libsync/ionostheme.h rename to src/gui/ionostheme.h diff --git a/src/libsync/stratotheme.h b/src/gui/stratotheme.h similarity index 100% rename from src/libsync/stratotheme.h rename to src/gui/stratotheme.h diff --git a/src/libsync/whitelabeltheme.h b/src/gui/whitelabeltheme.h similarity index 100% rename from src/libsync/whitelabeltheme.h rename to src/gui/whitelabeltheme.h diff --git a/src/libsync/CMakeLists.txt b/src/libsync/CMakeLists.txt index e8ef566faa62a..72ec2eedee479 100644 --- a/src/libsync/CMakeLists.txt +++ b/src/libsync/CMakeLists.txt @@ -117,10 +117,6 @@ set(libsync_SRCS syncoptions.cpp theme.h theme.cpp - ionostheme.h - whitelabeltheme.h - stratotheme.h - basetheme.h updatee2eefoldermetadatajob.h updatee2eefoldermetadatajob.cpp updatemigratede2eemetadatajob.h From 250514a7b0d38ccd20a6f9ae707344a4ab59d5a3 Mon Sep 17 00:00:00 2001 From: Kevin Beraz Date: Fri, 31 Oct 2025 09:56:45 +0100 Subject: [PATCH 359/371] SES-357 only set Ionos or StratoTheme --- src/gui/whitelabeltheme.h | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/src/gui/whitelabeltheme.h b/src/gui/whitelabeltheme.h index a0f65050be102..ecb6add56bbd4 100644 --- a/src/gui/whitelabeltheme.h +++ b/src/gui/whitelabeltheme.h @@ -12,10 +12,8 @@ namespace OCC { #if defined(IONOS_WL_BUILD) static IonosTheme WLTheme; -#elif defined(STRATO_WL_BUILD) - static StratoTheme WLTheme; #else - static BaseTheme WLTheme; + static StratoTheme WLTheme; #endif } // namespace OCC From df1a7d88e41da65d98622e820fb0833667f19725 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Christopher=20H=C3=A4tty?= Date: Mon, 8 Dec 2025 13:10:22 +0100 Subject: [PATCH 360/371] SES-416 changed default value of checkbox --- src/gui/wizard/dataprotectionsettingspage.cpp | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/src/gui/wizard/dataprotectionsettingspage.cpp b/src/gui/wizard/dataprotectionsettingspage.cpp index 9b6a6d59edf4b..0f51c2fcd9713 100644 --- a/src/gui/wizard/dataprotectionsettingspage.cpp +++ b/src/gui/wizard/dataprotectionsettingspage.cpp @@ -26,7 +26,6 @@ namespace OCC{ void DataProtectionSettingsPage::initializePage() { - _ui->anonymousDataCheckBox->setChecked(true); customizeStyle(); } @@ -35,7 +34,7 @@ namespace OCC{ ConfigFile cfgFile; connect(_ui->backButton, &QPushButton::clicked, this, [this, &cfgFile]() { - _ui->anonymousDataCheckBox->setChecked(true); + _ui->anonymousDataCheckBox->setChecked(false); _ocWizard->back(); }); @@ -50,7 +49,7 @@ namespace OCC{ _ui->descriptionLabel->setText(tr("We collect anonymized data to optimize our app. We use software solutions from various partners for this purpose. We want to give you full transparency and freedom of choice regarding the collection and processing of your anonymized usage. You can change your settings at any time under the menu item Data Protection.")); - _ui->anonymousDataCheckBox->setChecked(true); + _ui->anonymousDataCheckBox->setChecked(false); } int DataProtectionSettingsPage::nextId() const @@ -64,7 +63,7 @@ namespace OCC{ _ui->mainVBox->setContentsMargins(32, 0, 32, 0); - //_ui->necessaryDataCheckBox->setEnabled(false); + _ui->necessaryDataCheckBox->setEnabled(false); _ui->necessaryDataCheckBox->setChecked(true); _ui->necessaryDataCheckBox->setStyleSheet( From a384e7151dc0c5ee932cd582a226e79ebf12bdb3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Christopher=20H=C3=A4tty?= Date: Mon, 8 Dec 2025 15:41:31 +0100 Subject: [PATCH 361/371] SES-417 - Reset error after picking valid folder --- src/gui/folderwizard.cpp | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) diff --git a/src/gui/folderwizard.cpp b/src/gui/folderwizard.cpp index eaab82a77a655..f72472c7c7bfa 100644 --- a/src/gui/folderwizard.cpp +++ b/src/gui/folderwizard.cpp @@ -120,7 +120,6 @@ bool FolderWizardLocalPath::isComplete() const QUrl serverUrl = _account->url(); serverUrl.setUserName(_account->credentials()->user()); - SyncDirValidator syncDirValidator(_ui.localFolderLineEdit->text()); if (!syncDirValidator.isValidDir()) { _ui.sesSnackBar->show(); @@ -162,16 +161,19 @@ void FolderWizardLocalPath::slotChooseLocalFolder() tr("Select the source folder"), sf); + if (!dir.isEmpty()) { + // set the last directory component name as alias + _ui.localFolderLineEdit->setText(QDir::toNativeSeparators(dir)); + } + SyncDirValidator syncDirValidator(_ui.localFolderLineEdit->text()); if (!syncDirValidator.isValidDir() && !dir.isEmpty()) { _ui.sesSnackBar->show(); _ui.sesSnackBar->setError(syncDirValidator.message()); + emit completeChanged(); return; } - if (!dir.isEmpty()) { - // set the last directory component name as alias - _ui.localFolderLineEdit->setText(QDir::toNativeSeparators(dir)); - } + emit completeChanged(); } From 21529ef698b5a974e534cf0dd4e6676753b06c3a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Christopher=20H=C3=A4tty?= Date: Mon, 8 Dec 2025 16:40:31 +0100 Subject: [PATCH 362/371] SES-384 - Used correct import --- src/gui/EncryptionTokenSelectionWindow.qml | 2 +- src/gui/owncloudgui.cpp | 14 +++++++------- src/gui/tray/EncryptionTokenDiscoveryDialog.qml | 2 +- 3 files changed, 9 insertions(+), 9 deletions(-) diff --git a/src/gui/EncryptionTokenSelectionWindow.qml b/src/gui/EncryptionTokenSelectionWindow.qml index 8872d978335a5..bd3a2b3be80bb 100644 --- a/src/gui/EncryptionTokenSelectionWindow.qml +++ b/src/gui/EncryptionTokenSelectionWindow.qml @@ -17,7 +17,7 @@ import QtQuick.Layouts 1.15 import QtQuick.Controls 2.15 import QtQml.Models 2.15 -import com.nextcloud.desktopclient 1.0 +import com.ionos.hidrivenext.desktopclient 1.0 import Style 1.0 import "./tray" diff --git a/src/gui/owncloudgui.cpp b/src/gui/owncloudgui.cpp index 0420f214c2911..eecd87cb9277f 100644 --- a/src/gui/owncloudgui.cpp +++ b/src/gui/owncloudgui.cpp @@ -145,13 +145,13 @@ ownCloudGui::ownCloudGui(Application *parent) qmlRegisterType("com.ionos.hidrivenext.desktopclient", 1, 0, "SortedShareModel"); qmlRegisterType("com.ionos.hidrivenext.desktopclient", 1, 0, "SyncConflictsModel"); - qmlRegisterUncreatableType("com.nextcloud.desktopclient", 1, 0, "QAbstractItemModel", "QAbstractItemModel"); - qmlRegisterUncreatableType("com.nextcloud.desktopclient", 1, 0, "Activity", "Activity"); - qmlRegisterUncreatableType("com.nextcloud.desktopclient", 1, 0, "TalkNotificationData", "TalkNotificationData"); - qmlRegisterUncreatableType("com.nextcloud.desktopclient", 1, 0, "UnifiedSearchResultsListModel", "UnifiedSearchResultsListModel"); - qmlRegisterUncreatableType("com.nextcloud.desktopclient", 1, 0, "UserStatus", "Access to Status enum"); - qmlRegisterUncreatableType("com.nextcloud.desktopclient", 1, 0, "Sharee", "Access to Type enum"); - qmlRegisterUncreatableType("com.nextcloud.desktopclient", 1, 0, "ClientSideEncryptionTokenSelector", "Access to the certificate selector"); + qmlRegisterUncreatableType("com.ionos.hidrivenext.desktopclient", 1, 0, "QAbstractItemModel", "QAbstractItemModel"); + qmlRegisterUncreatableType("com.ionos.hidrivenext.desktopclient", 1, 0, "Activity", "Activity"); + qmlRegisterUncreatableType("com.ionos.hidrivenext.desktopclient", 1, 0, "TalkNotificationData", "TalkNotificationData"); + qmlRegisterUncreatableType("com.ionos.hidrivenext.desktopclient", 1, 0, "UnifiedSearchResultsListModel", "UnifiedSearchResultsListModel"); + qmlRegisterUncreatableType("com.ionos.hidrivenext.desktopclient", 1, 0, "UserStatus", "Access to Status enum"); + qmlRegisterUncreatableType("com.ionos.hidrivenext.desktopclient", 1, 0, "Sharee", "Access to Type enum"); + qmlRegisterUncreatableType("com.ionos.hidrivenext.desktopclient", 1, 0, "ClientSideEncryptionTokenSelector", "Access to the certificate selector"); qRegisterMetaType("ActivityListModel*"); qRegisterMetaType("UnifiedSearchResultsListModel*"); diff --git a/src/gui/tray/EncryptionTokenDiscoveryDialog.qml b/src/gui/tray/EncryptionTokenDiscoveryDialog.qml index 123cc750f7aa3..348c145a82c99 100644 --- a/src/gui/tray/EncryptionTokenDiscoveryDialog.qml +++ b/src/gui/tray/EncryptionTokenDiscoveryDialog.qml @@ -1,7 +1,7 @@ import QtQuick 2.15 import QtQuick.Window 2.15 import Style 1.0 -import com.nextcloud.desktopclient 1.0 +import com.ionos.hidrivenext.desktopclient 1.0 import QtQuick.Layouts 1.15 import QtQuick.Controls 2.15 From 487eb415fdb7a84a262a203e2d4c534f14d1f7a7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Christopher=20H=C3=A4tty?= Date: Tue, 9 Dec 2025 11:19:52 +0100 Subject: [PATCH 363/371] SES-425 Renamed macos icons, fixed automatic icon rename on macOS build --- IONOS.cmake | 8 ++++---- ...t-macOS-icon.svg => ionos-hidrive-next-macOS-icon.svg} | 0 ...S-sidebar.svg => ionos-hidrive-next-macOS-sidebar.svg} | 0 ...-macOS-icon.svg => strato-hidrive-next-macOS-icon.svg} | 0 ...-sidebar.svg => strato-hidrive-next-macOS-sidebar.svg} | 0 ...t-macOS-icon.svg => ionos-hidrive-next-macOS-icon.svg} | 0 ...S-sidebar.svg => ionos-hidrive-next-macOS-sidebar.svg} | 0 ...-macOS-icon.svg => strato-hidrive-next-macOS-icon.svg} | 0 ...-sidebar.svg => strato-hidrive-next-macOS-sidebar.svg} | 0 ...t-macOS-icon.svg => ionos-hidrive-next-macOS-icon.svg} | 0 ...S-sidebar.svg => ionos-hidrive-next-macOS-sidebar.svg} | 0 ...-macOS-icon.svg => strato-hidrive-next-macOS-icon.svg} | 0 ...-sidebar.svg => strato-hidrive-next-macOS-sidebar.svg} | 0 13 files changed, 4 insertions(+), 4 deletions(-) rename theme/black/{ionos_hidrive_next-macOS-icon.svg => ionos-hidrive-next-macOS-icon.svg} (100%) rename theme/black/{ionos_hidrive_next-macOS-sidebar.svg => ionos-hidrive-next-macOS-sidebar.svg} (100%) rename theme/black/{strato_hidrive_next-macOS-icon.svg => strato-hidrive-next-macOS-icon.svg} (100%) rename theme/black/{strato_hidrive_next-macOS-sidebar.svg => strato-hidrive-next-macOS-sidebar.svg} (100%) rename theme/colored/{ionos_hidrive_next-macOS-icon.svg => ionos-hidrive-next-macOS-icon.svg} (100%) rename theme/colored/{ionos_hidrive_next-macOS-sidebar.svg => ionos-hidrive-next-macOS-sidebar.svg} (100%) rename theme/colored/{strato_hidrive_next-macOS-icon.svg => strato-hidrive-next-macOS-icon.svg} (100%) rename theme/colored/{strato_hidrive_next-macOS-sidebar.svg => strato-hidrive-next-macOS-sidebar.svg} (100%) rename theme/white/{ionos_hidrive_next-macOS-icon.svg => ionos-hidrive-next-macOS-icon.svg} (100%) rename theme/white/{ionos_hidrive_next-macOS-sidebar.svg => ionos-hidrive-next-macOS-sidebar.svg} (100%) rename theme/white/{strato_hidrive_next-macOS-icon.svg => strato-hidrive-next-macOS-icon.svg} (100%) rename theme/white/{strato_hidrive_next-macOS-sidebar.svg => strato-hidrive-next-macOS-sidebar.svg} (100%) diff --git a/IONOS.cmake b/IONOS.cmake index f164fcb38b8f6..40c8b3a6df33d 100644 --- a/IONOS.cmake +++ b/IONOS.cmake @@ -27,7 +27,7 @@ if(LOCALBUILD) if("${WHITELABEL_NAME}" STREQUAL "strato") set( APPLICATION_NAME "STRATO HiDrive Next" ) set( APPLICATION_SHORTNAME "STRATOHiDriveNext" ) - set( APPLICATION_EXECUTABLE "STRATO_HiDrive_Next" ) + set( APPLICATION_EXECUTABLE "strato-hidrive-next" ) set( APPLICATION_CONFIG_NAME "STRATO-HiDrive-Next" ) set( APPLICATION_ICON_NAME "strato_hidrive_next" ) set( APPLICATION_DOMAIN "strato.com" ) @@ -37,7 +37,7 @@ if(LOCALBUILD) elseif("${WHITELABEL_NAME}" STREQUAL "ionos") set( APPLICATION_NAME "IONOS HiDrive Next" ) set( APPLICATION_SHORTNAME "IONOSHiDriveNext" ) - set( APPLICATION_EXECUTABLE "IONOS_HiDrive_Next" ) + set( APPLICATION_EXECUTABLE "ionos-hidrive-next" ) set( APPLICATION_CONFIG_NAME "IONOS-HiDrive-Next" ) set( APPLICATION_ICON_NAME "ionos_hidrive_next" ) set( APPLICATION_DOMAIN "ionos.com" ) @@ -50,12 +50,12 @@ endif() if(APPLE AND "${APPLICATION_NAME}" MATCHES "HiDrive Next") - set(APPLICATION_ICON_NAME "${APPLICATION_ICON_NAME}-macOS") + set(APPLICATION_ICON_NAME "${APPLICATION_EXECUTABLE}-macOS") message("Using macOS-specific application icon: ${APPLICATION_ICON_NAME}") endif() if(APPLICATION_NAME STREQUAL "STRATO HiDrive Next") - set( APPLICATION_VENDOR "STRATO SE" ) + set( APPLICATION_VENDOR "STRATO" ) add_compile_definitions(STRATO_WL_BUILD) elseif(APPLICATION_NAME STREQUAL "IONOS HiDrive Next") set( APPLICATION_VENDOR "IONOS SE" ) diff --git a/theme/black/ionos_hidrive_next-macOS-icon.svg b/theme/black/ionos-hidrive-next-macOS-icon.svg similarity index 100% rename from theme/black/ionos_hidrive_next-macOS-icon.svg rename to theme/black/ionos-hidrive-next-macOS-icon.svg diff --git a/theme/black/ionos_hidrive_next-macOS-sidebar.svg b/theme/black/ionos-hidrive-next-macOS-sidebar.svg similarity index 100% rename from theme/black/ionos_hidrive_next-macOS-sidebar.svg rename to theme/black/ionos-hidrive-next-macOS-sidebar.svg diff --git a/theme/black/strato_hidrive_next-macOS-icon.svg b/theme/black/strato-hidrive-next-macOS-icon.svg similarity index 100% rename from theme/black/strato_hidrive_next-macOS-icon.svg rename to theme/black/strato-hidrive-next-macOS-icon.svg diff --git a/theme/black/strato_hidrive_next-macOS-sidebar.svg b/theme/black/strato-hidrive-next-macOS-sidebar.svg similarity index 100% rename from theme/black/strato_hidrive_next-macOS-sidebar.svg rename to theme/black/strato-hidrive-next-macOS-sidebar.svg diff --git a/theme/colored/ionos_hidrive_next-macOS-icon.svg b/theme/colored/ionos-hidrive-next-macOS-icon.svg similarity index 100% rename from theme/colored/ionos_hidrive_next-macOS-icon.svg rename to theme/colored/ionos-hidrive-next-macOS-icon.svg diff --git a/theme/colored/ionos_hidrive_next-macOS-sidebar.svg b/theme/colored/ionos-hidrive-next-macOS-sidebar.svg similarity index 100% rename from theme/colored/ionos_hidrive_next-macOS-sidebar.svg rename to theme/colored/ionos-hidrive-next-macOS-sidebar.svg diff --git a/theme/colored/strato_hidrive_next-macOS-icon.svg b/theme/colored/strato-hidrive-next-macOS-icon.svg similarity index 100% rename from theme/colored/strato_hidrive_next-macOS-icon.svg rename to theme/colored/strato-hidrive-next-macOS-icon.svg diff --git a/theme/colored/strato_hidrive_next-macOS-sidebar.svg b/theme/colored/strato-hidrive-next-macOS-sidebar.svg similarity index 100% rename from theme/colored/strato_hidrive_next-macOS-sidebar.svg rename to theme/colored/strato-hidrive-next-macOS-sidebar.svg diff --git a/theme/white/ionos_hidrive_next-macOS-icon.svg b/theme/white/ionos-hidrive-next-macOS-icon.svg similarity index 100% rename from theme/white/ionos_hidrive_next-macOS-icon.svg rename to theme/white/ionos-hidrive-next-macOS-icon.svg diff --git a/theme/white/ionos_hidrive_next-macOS-sidebar.svg b/theme/white/ionos-hidrive-next-macOS-sidebar.svg similarity index 100% rename from theme/white/ionos_hidrive_next-macOS-sidebar.svg rename to theme/white/ionos-hidrive-next-macOS-sidebar.svg diff --git a/theme/white/strato_hidrive_next-macOS-icon.svg b/theme/white/strato-hidrive-next-macOS-icon.svg similarity index 100% rename from theme/white/strato_hidrive_next-macOS-icon.svg rename to theme/white/strato-hidrive-next-macOS-icon.svg diff --git a/theme/white/strato_hidrive_next-macOS-sidebar.svg b/theme/white/strato-hidrive-next-macOS-sidebar.svg similarity index 100% rename from theme/white/strato_hidrive_next-macOS-sidebar.svg rename to theme/white/strato-hidrive-next-macOS-sidebar.svg From 045447465b7708e5c2bda2824a43b54f9fcb02bc Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Christopher=20H=C3=A4tty?= Date: Tue, 9 Dec 2025 13:39:32 +0100 Subject: [PATCH 364/371] SES-416 - dont disable checkbox it is displayed as not checked on mac --- src/gui/wizard/dataprotectionsettingspage.cpp | 1 - 1 file changed, 1 deletion(-) diff --git a/src/gui/wizard/dataprotectionsettingspage.cpp b/src/gui/wizard/dataprotectionsettingspage.cpp index 0f51c2fcd9713..1b8ab34546a54 100644 --- a/src/gui/wizard/dataprotectionsettingspage.cpp +++ b/src/gui/wizard/dataprotectionsettingspage.cpp @@ -63,7 +63,6 @@ namespace OCC{ _ui->mainVBox->setContentsMargins(32, 0, 32, 0); - _ui->necessaryDataCheckBox->setEnabled(false); _ui->necessaryDataCheckBox->setChecked(true); _ui->necessaryDataCheckBox->setStyleSheet( From 339ac608f48ce23d9200a189a56e69f0b157a14c Mon Sep 17 00:00:00 2001 From: Kevin Beraz Date: Thu, 16 Oct 2025 10:48:57 +0200 Subject: [PATCH 365/371] lupdate nextcloud stable-3.16 --- translations/client_de.ts | 1825 +++--------------------------- translations/client_en.ts | 1401 ----------------------- translations/client_en_GB.ts | 1825 +++--------------------------- translations/client_es.ts | 1824 +++--------------------------- translations/client_fr.ts | 1849 +++--------------------------- translations/client_nl.ts | 2035 +++++----------------------------- 6 files changed, 834 insertions(+), 9925 deletions(-) diff --git a/translations/client_de.ts b/translations/client_de.ts index 8c2924b432385..bebf388818b08 100644 --- a/translations/client_de.ts +++ b/translations/client_de.ts @@ -1,13 +1,13 @@ - + + + ActivityItem - Open %1 locally %1 lokal öffnen - In %1 In %1 @@ -15,12 +15,10 @@ ActivityItemContent - Open file details Dateidetails öffnen - Dismiss Ablehnen @@ -28,17 +26,14 @@ ActivityList - Activity list Aktivitätenliste - Scroll to top Nach unten blättern - No activities yet Noch keine Aktivitäten vorhanden @@ -46,22 +41,18 @@ CallNotificationDialog - Talk notification caller avatar Avatar zu Benachrichtigung über Talk-Anrufer - Answer Talk call notification Benachrichtigung zu Talk-Anruf beantworten - Decline Ablehnen - Decline Talk call notification Benachrichtigung zu Talk-Anruf ablehnen @@ -69,83 +60,66 @@ CloudProviderWrapper - %1 (%2, %3) %1 (%2, %3) - Checking for changes in "%1" Nach Änderungen suchen in "%1" - Syncing %1 of %2 (%3 left) Synchronisiere %1 von %2 (%3 übrig) - Syncing %1 of %2 Synchronisiere %1 von %2 - Syncing %1 (%2 left) Synchronisiere %1 (%2 übrig) - Syncing %1 Synchronisiere %1 - - No recently changed files Keine kürzlich geänderten Dateien - Sync paused Synchronisierung pausiert - Syncing Synchronisiere - Open website Webseite öffnen - Recently changed Zuletzt geändert - Pause synchronization Synchronisierung pausieren - Help Hilfe - Settings Einstellungen - Log out Abmelden - Quit sync client Sync-Client beenden @@ -153,12 +127,10 @@ ConflictDelegate - Local version Lokale Version - Server version Serverversion @@ -166,59 +138,46 @@ CurrentAccountHeaderButton - Current account Aktuelles Konto - - Resume sync for all Synchronisierung für alle fortsetzen - - Pause sync for all Synchronisierung für alle pausieren - Add account Konto hinzufügen - Add new account Neues Konto hinzufügen - Settings Einstellungen - Exit Beenden - Current account avatar Avatar des aktuellen Kontos - Current account status is online Aktueller Kontostatus ist "Online" - Current account status is do not disturb Aktueller Kontostatus ist "Nicht stören" - Account switcher and settings menu Konto-Umschalter und Einstellungsmenü @@ -226,7 +185,6 @@ EditFileLocallyLoadingDialog - Opening file for local editing Datei wird für die lokale Bearbeitung geöffnet @@ -234,7 +192,6 @@ EmojiPicker - No recent emojis Keine aktuellen Emojis @@ -242,7 +199,6 @@ EncryptionTokenDiscoveryDialog - Discovering the certificates stored on your USB token Erkennen der auf Ihrem USB-Token gespeicherten Zertifikate @@ -250,22 +206,18 @@ EncryptionTokenSelectionWindow - Token Encryption Key Chooser Auswahl des Token-Schlüssels - Available Keys for end-to-end Encryption: Verfügbare Schlüssel für Ende-zu-Ende-Verschlüsselung: - Choose Auswählen - Cancel Abbrechen @@ -273,7 +225,6 @@ ErrorBox - Error Fehler @@ -281,12 +232,10 @@ FileDetailsPage - Activity Aktivität - Sharing Teilen @@ -294,7 +243,6 @@ FileDetailsWindow - File details of %1 · %2 Dateidetails von %1 · %2 @@ -302,35 +250,32 @@ FileProviderEvictionDialog - - Remove local copies - Lokale Kopien entfernen - - - Evict materialised files Materialisierte Dateien löschen - - Local copies - Lokale Kopien - - - Reload Neu laden - Materialised items Materialisierte Elemente + + FileProviderFastEnumerationSettings + + Enable fast sync + Schnelle Synchronisierung aktivieren + + + Fast sync will only sync changes in files and folders within folders that have been explored. This can significantly increase responsiveness on initial configuration of virtual files. However, it will cause redundant downloads of files moved to an unexplored folder. + Bei der schnellen Synchronisierung werden nur Änderungen an Dateien und Ordnern innerhalb der Ordner synchronisiert, die bereits untersucht wurden. Dies kann die Reaktionsfähigkeit bei der Ersteinrichtung virtueller Dateien erheblich erhöhen. Allerdings führt dies zu redundanten Downloads von Dateien, die in einen noch nicht erfassten Ordner verschoben wurden. + + FileProviderFileDelegate - Delete Löschen @@ -338,50 +283,29 @@ FileProviderSettings - Virtual files settings Einstellungen für virtuelle Dateien - General settings Allgemeine Einstellungen - Enable virtual files Virtuelle Dateien aktivieren - - - Allow deletion of items in Trash - Löschen von Objekten im Papierkorb zulassen - - - - Reset virtual files environment - Virtuelle Dateienumgebung zurücksetzen - FileProviderStorageInfo - Local storage use Lokaler Speicher verwenden - %1 GB of %2 GB remote files synced %1 GB von %2 GB der entfernten Dateien synchronisiert - - Free up space … - Speicherplatz freigeben … - - - Evict local copies … Lokale Kopien entfernen … @@ -389,22 +313,18 @@ FileProviderSyncStatus - Syncing Synchronisiere - All synced! Alles synchronisiert! - Request sync Synchronisierung anfordern - Request a sync of changes for the VFS environment. macOS may ignore or delay this request. Eine Synchronisierung der Änderungen für die VFS-Umgebung anfordern. @@ -414,12 +334,10 @@ macOS kann diese Anforderung ignorieren oder verzögern. FileSystem - Error removing "%1": %2 Fehler beim Entfernen von "%1": %2 - Could not remove folder "%1" Der Ordner "%1" konnte nicht entfernt werden @@ -427,22 +345,18 @@ macOS kann diese Anforderung ignorieren oder verzögern. Flow2AuthWidget - Browser Authentication Browser-Authentifizierung - Logo Logo - Switch to your browser to connect your account Wechseln Sie zu Ihrem Browser, um Ihr Konto zu verbinden - An error occurred while connecting. Please try again. Es ist ein Fehler beim Herstellen der Verbindung aufgetreten. Bitte erneut versuchen. @@ -450,12 +364,10 @@ macOS kann diese Anforderung ignorieren oder verzögern. FolderWizardSourcePage - Pick a local folder on your computer to sync Wählen Sie einen lokalen Ordner zum Synchronisieren aus - &Choose … &Wählen … @@ -463,22 +375,18 @@ macOS kann diese Anforderung ignorieren oder verzögern. FolderWizardTargetPage - Select a remote destination folder Einen entfernten Zielordner auswählen - Create folder Ordner erstellen - Refresh Aktualisieren - Folders Ordner @@ -486,17 +394,14 @@ macOS kann diese Anforderung ignorieren oder verzögern. MainWindow - Nextcloud desktop main dialog Nextcloud Desktop-Hauptdialog - Unified search results list Einheitliche Suchergebnisliste - New activities Neue Aktivitäten @@ -504,17 +409,14 @@ macOS kann diese Anforderung ignorieren oder verzögern. OCC::AbstractNetworkJob - Connection timed out Zeitüberschreitung bei der Verbindung - Unknown error: network reply was deleted Unbekannter Fehler: Netzwerk-Antwort wurde gelöscht - Server replied "%1 %2" to "%3 %4" Server hat "%1 %2" auf "%3 %4" geantwortet @@ -522,17 +424,14 @@ macOS kann diese Anforderung ignorieren oder verzögern. OCC::Account - File %1 is already locked by %2. Datei %1 ist bereits von %2 gesperrt. - Lock operation on %1 failed with error %2 Das Sperren von %1 ist mit Fehler %2 fehlgeschlagen - Unlock operation on %1 failed with error %2 Das Entsperren von %1 ist mit Fehler %2 fehlgeschlagen @@ -540,44 +439,30 @@ macOS kann diese Anforderung ignorieren oder verzögern. OCC::AccountManager - - An account was detected from a legacy desktop client. -Should the account be imported? - Ein Konto wurde von einem älteren Desktop-Client erkannt. -Soll das Konto importiert werden? - - - %1 accounts were detected from a legacy desktop client. Should the accounts be imported? %1 Konten wurden von einem älteren Desktop-Client erkannt. Sollen die Konten importiert werden? - - Legacy import Import früherer Konfiguration - Import Importieren - 1 account was detected from a legacy desktop client. Should the account be imported? 1 Konto wurde von einem älteren Desktop-Client erkannt. Soll das Konto importiert werden? - Skip Überspringen - Could not import accounts from legacy client configuration. Konten von älterer Client-Konfiguration konnten nicht importiert werden. @@ -585,256 +470,187 @@ Soll das Konto importiert werden? OCC::AccountSettings - Unchecked folders will be <b>removed</b> from your local file system and will not be synchronized to this computer anymore Nicht markierte Ordner werden von Ihrem lokalen Dateisystem <b>entfernt</b> und werden auch nicht mehr auf diesem Rechner synchronisiert - Synchronize all Alles synchronisieren - Synchronize none Nichts synchronisieren - Apply manual changes Manuelle Änderungen anwenden - Standard file sync Standard Dateisynchronisierung - Virtual file sync Virtuelle Dateisynchronisierung - Connection settings Verbindungseinstellungen - Apply Anwenden - Storage space: … Speicherplatz: … - - - Cancel Abbrechen - Connected with <server> as <user> Verbunden mit <server> als <user> - No account configured. Kein Konto konfiguriert. - End-to-end Encryption with Virtual Files Ende-zu-Ende-Verschlüsselung mit virtuellen Dateien - You seem to have the Virtual Files feature enabled on this folder. At the moment, it is not possible to implicitly download virtual files that are end-to-end encrypted. To get the best experience with virtual files and end-to-end encryption, make sure the encrypted folder is marked with "Make always available locally". Sie scheinen die Funktion "Virtuelle Dateien" für diesen Ordner aktiviert zu haben. Im Moment ist es nicht möglich, virtuelle Dateien, die Ende-zu-Ende-verschlüsselt sind, implizit herunterzuladen. Um die beste Erfahrung mit virtuellen Dateien und Ende-zu-Ende-Verschlüsselung zu machen, stellen Sie sicher, dass der verschlüsselte Ordner mit "Immer lokal verfügbar machen" markiert ist. - - Do not encrypt folder Ordner nicht verschlüsseln - - Encrypt folder Ordner verschlüsseln - End-to-end Encryption Ende-zu-Ende-Verschlüsselung - This will encrypt your folder and all files within it. These files will no longer be accessible without your encryption mnemonic key. <b>This process is not reversible. Are you sure you want to proceed?</b> Dadurch werden Ihr Ordner und alle darin enthaltenen Dateien verschlüsselt. Auf diese Dateien kann ohne Ihren mnemonischen Verschlüsselungsschlüssel nicht mehr zugegriffen werden. <b>Dies kann nicht rückgängig gemacht werden. Sind Sie sicher, dass Sie fortfahren möchten?</b> - - Forget encryption setup - Verschlüsselungseinrichtung vergessen - - - Disable encryption Verschlüsselung deaktivieren - Display mnemonic Gedächtnisstütze anzeigen - - Encryption is set-up. Remember to <b>Encrypt</b> a folder to end-to-end encrypt any new files added to it. - Die Verschlüsselung ist eingerichtet. Nicht vergessen, einen Ordner zu <b>verschlüsseln</b>, um alle neu hinzugefügten Dateien Ende-zu-Ende zu verschlüsseln. - - - End-to-end encryption has been enabled for this account Für dieses Konto wurde die Ende-zu-Ende-Verschlüsselung aktiviert - Warning Warnung - Please wait for the folder to sync before trying to encrypt it. Bitte warten Sie, bis der Ordner synchronisiert ist, bevor Sie versuchen, ihn zu verschlüsseln. - The folder has a minor sync problem. Encryption of this folder will be possible once it has synced successfully Der Ordner weist ein geringfügiges Synchronisierungsproblem auf. Die Verschlüsselung dieses Ordners ist möglich, sobald er synchronisiert wurde - The folder has a sync error. Encryption of this folder will be possible once it has synced successfully Der Ordner weist einen Synchronisierungsfehler auf. Die Verschlüsselung dieses Ordners ist möglich, sobald er synchronisiert wurde - - You cannot encrypt this folder because the end-to-end encryption is not set-up yet on this device. -Would you like to do this now? - Dieser Ordner kann nicht verschlüsselt werden, da die Ende-zu-Ende-Verschlüsselung auf diesem Gerät noch nicht eingerichtet ist. -Möchten Sie dies jetzt tun? - - - End-to-end encryption is not configured on this device. Once it is configured, you will be able to encrypt this folder. Would you like to set up end-to-end encryption? Auf diesem Gerät ist keine Ende-zu-Ende-Verschlüsselung konfiguriert. Sobald sie konfiguriert ist, kann dieser Ordner verschlüsselt werden. Soll die Ende-zu-Ende-Verschlüsselung eingerichtet werden? - You cannot encrypt a folder with contents, please remove the files. Wait for the new sync, then encrypt it. Sie können einen Ordner nicht mit Inhalten verschlüsseln, bitte Dateien entfernen. Warten Sie auf die neue Synchronisierung und verschlüsseln Sie sie dann. - Encryption failed Verschlüsselung fehlgeschlagen - Could not encrypt folder because the folder does not exist anymore Der Ordner konnte nicht verschlüsselt werden, da er nicht mehr existiert - Encrypt Verschlüsseln - - Edit Ignored Files Ignorierte Dateien bearbeiten - - Create new folder Neuen Ordner erstellen - - Availability Verfügbarkeit - Choose what to sync Zu synchronisierende Elemente auswählen - Force sync now Synchronisierung jetzt erzwingen - Restart sync Synchronisierung neustarten - Remove folder sync connection Ordner-Synchronisierung entfernen - Disable virtual file support … Unterstützung für virtuelle Dateien deaktivieren - Enable virtual file support %1 … Unterstützung für virtuelle Dateien aktivieren %1 … - (experimental) (experimentell) - Folder creation failed Anlegen des Ordners fehlgeschlagen - Confirm Folder Sync Connection Removal Bestätigen Sie die Löschung der Ordner-Synchronisierung - Remove Folder Sync Connection Ordner-Synchronisierung entfernen - Disable virtual file support? Unterstützung für virtuelle Dateien deaktivieren? - This action will disable virtual file support. As a consequence contents of folders that are currently marked as "available online only" will be downloaded. The only advantage of disabling virtual file support is that the selective sync feature will become available again. @@ -847,218 +663,150 @@ Der einzige Vorteil der Deaktivierung der Unterstützung für virtuelle Dateien Diese Aktion bricht jede derzeit laufende Synchronisierung ab. - Disable support Unterstützung deaktivieren - End-to-end encryption mnemonic Gedächtnisstütze für die Ende-zu-Ende-Verschlüsselung - - To protect your Cryptographic Identity, we encrypt it with a mnemonic of 12 dictionary words. Please note it down and keep it safe. You will need it to set-up the synchronization of encrypted folders on your other devices. - Um Ihre kryptografische Identität zu schützen, verschlüsseln wir sie mit einer Eselsbrücke aus zwölf Wörtern aus dem Wörterbuch. Bitte notieren Sie sich diese und bewahren Sie sie sicher auf. Sie benötigen sie, um die Synchronisierung verschlüsselter Ordner auf Ihren anderen Geräten einzurichten. - - - - Forget the end-to-end encryption on this device - Die Ende-zu-Ende-Verschlüsselung auf diesem Gerät vergessen - - - - Do you want to forget the end-to-end encryption settings for %1 on this device? - Soll die Ende-zu-Ende-Verschlüsselungseinstellungen für %1 auf diesem Gerät vergessen werden? - - - - Forgetting end-to-end encryption will remove the sensitive data and all the encrypted files from this device.<br>However, the encrypted files will remain on the server and all your other devices, if configured. - Wenn die Ende-zu-Ende-Verschlüsselung vergessen wird, werden die vertraulichen Daten und alle verschlüsselten Dateien von diesem Gerät entfernt. Die verschlüsselten Dateien verbleiben jedoch auf dem Server und allen Ihren anderen Geräten, sofern eingerichtet. - - - Sync Running Synchronisierung läuft - The syncing operation is running.<br/>Do you want to terminate it? Die Synchronisierung läuft gerade.<br/>Wollen Sie diese beenden? - %1 in use %1 wird verwendet - Migrate certificate to a new one Zertifikat auf ein neues migrieren - There are folders that have grown in size beyond %1MB: %2 Es gibt Ordner, deren Größe über %1 MB hinaus gewachsen ist: %2 - - End-to-end encryption has been initialized on this account with another device.<br>Enter the unique mnemonic to have the encrypted folders synchronize on this device as well. - Die Ende-zu-Ende-Verschlüsselung wurde für dieses Konto mit einem anderen Gerät initialisiert. <br>Geben Sie den eindeutigen Mnemonic ein, um die verschlüsselten Ordner auch auf diesem Gerät zu synchronisieren. - - - End-to-end encryption has been enabled on this account with another device.<br>It can be enabled on this device by entering your mnemonic.<br>This will enable synchronisation of existing encrypted folders. Die Ende-zu-Ende-Verschlüsselung wurde auf diesem Konto mit einem anderen Gerät aktiviert.<br>Sie kann auf diesem Gerät durch Eingabe Ihrer Gedächtnisstütze aktiviert werden.<br>Dadurch wird die Synchronisierung vorhandener verschlüsselter Ordner aktiviert. - - This account supports end-to-end encryption, but it needs to be set up first. - Dieses Konto unterstützt die Ende-zu-Ende-Verschlüsselung, diese muss aber zuerst eingerichtet werden. - - - Set up encryption Verschlüsselung einrichten - This account supports end-to-end encryption Dieses Konto unterstützt Ende-zu-Ende-Verschlüsselung - Connected to %1. Verbunden mit %1. - Server %1 is temporarily unavailable. Server %1 ist derzeit nicht verfügbar. - Server %1 is currently in maintenance mode. Server %1 befindet sich im Wartungsmodus. - Signed out from %1. Abgemeldet von %1. - There are folders that were not synchronized because they are too big: Einige Ordner konnten nicht synchronisiert werden, da sie zu groß sind: - There are folders that were not synchronized because they are external storages: Es gibt Ordner, die nicht synchronisiert werden konnten, da sie externe Speicher sind: - There are folders that were not synchronized because they are too big or external storages: Es gibt Ordner, die nicht synchronisiert werden konnten, da sie zu groß oder externe Speicher sind: - - Open folder Ordner öffnen - Resume sync Synchronisierung fortsetzen - Pause sync Synchronisierung pausieren - <p>Could not create local folder <i>%1</i>.</p> <p>Konnte lokalen Ordner <i>%1</i> nicht anle‏gen.‎</p> - <p>Do you really want to stop syncing the folder <i>%1</i>?</p><p><b>Note:</b> This will <b>not</b> delete any files.</p> <p>Möchten Sie den Ordner <i>%1</i> nicht mehr synchronisieren?</p><p><b>Anmerkung:</b> Dies wird <b>keine</b> Dateien löschen.</p> - To protect your Cryptographic Identity, we encrypt it with a mnemonic of 12 dictionary words. Please note these down and keep them safe. They will be needed to add other devices to your account (like your mobile phone or laptop). Um Ihre kryptografische Identität zu schützen, verschlüsseln wir sie mit einer Gedächtnisstütze von 12 Wörterbuchwörtern. Bitte notieren Sie sich diese und bewahren Sie sie auf. Sie werden benötigt, um Ihrem Konto weitere Geräte hinzuzufügen (z. B. Ihr Mobiltelefon oder Laptop). - Disable end-to-end encryption Ende-zu-Ende-Verschlüsselung deaktivieren - Disable end-to-end encryption for %1? Ende-zu-Ende-Verschlüsselung für %1 deaktivieren? - Removing end-to-end encryption will remove locally-synced files that are encrypted.<br>Encrypted files will remain on the server. Durch das Entfernen der Ende-zu-Ende-Verschlüsselung werden lokal synchronisierte Dateien entfernt, die verschlüsselt sind.<br>Verschlüsselte Dateien verbleiben auf dem Server. - %1 (%3%) of %2 in use. Some folders, including network mounted or shared folders, might have different limits. %1 (%3%) von %2 Serverkapazität verwendet. Einige Ordner, einschließlich über das Netzwerk verbundene oder geteilte Ordner, können unterschiedliche Beschränkungen aufweisen. - %1 of %2 in use %1 von %2 Serverkapazität verwendet - Currently there is no storage usage information available. Derzeit sind keine Speichernutzungsinformationen verfügbar. - %1 as %2 %1 als %2 - The server version %1 is unsupported! Proceed at your own risk. Die Serverversion %1 wird nicht unterstützt! Fortfahren auf eigenes Risiko. - Server %1 is currently being redirected, or your connection is behind a captive portal. Server %1 wird derzeit umgeleitet oder Ihre Verbindung befindet sich hinter einem Captive-Portal. - Connecting to %1 … Verbinde zu %1 … - Unable to connect to %1. Verbindung zu %1 kann nicht hergestellt werden. - Server configuration error: %1 at %2. Konfigurationsfehler des Servers: %1 auf %2. - You need to accept the terms of service at %1. Die Nutzungsbedingungen unter %1 müssen bestätigt werden. - No %1 connection configured. Keine %1-Verbindung konfiguriert. @@ -1066,17 +814,14 @@ Diese Aktion bricht jede derzeit laufende Synchronisierung ab. OCC::AccountSetupFromCommandLineJob - The authenticated request to the server was redirected to "%1". The URL is bad, the server is misconfigured. Die genehmigte Anfrage an den Server wurde an "%1" umgeleitet. Die URL ist fehlerhaft, der Server ist falsch konfiguriert. - Access forbidden by server. To verify that you have proper access, <a href="%1">click here</a> to access the service with your browser. Zugriff durch Server verboten. Um zu überprüfen, ob Sie über den richtigen Zugriff verfügen, <a href="%1">klicken Sie hier</a>, um mit Ihrem Browser auf den Dienst zuzugreifen. - There was an invalid response to an authenticated WebDAV request Es gab eine ungültige Antwort auf eine authentifizierte WebDAV-Anfrage @@ -1084,57 +829,46 @@ Diese Aktion bricht jede derzeit laufende Synchronisierung ab. OCC::AccountState - Signed out Abgemeldet - Disconnected Getrennt - Connected Verbunden - Service unavailable Dienst nicht verfügbar - Maintenance mode Wartungsmodus - Redirect detected Umleitung erkannt - Network error Netzwerkfehler - Configuration error Konfigurationsfehler - Asking Credentials Zugangsdaten werden abgefragt - Need the user to accept the terms of service Der Benutzer muss die Nutzungsbedingungen akzeptieren - Unknown account state Unbekannter Konto-Zustand @@ -1142,17 +876,14 @@ Diese Aktion bricht jede derzeit laufende Synchronisierung ab. OCC::ActivityListModel - For more activities please open the Activity app. Um weitere Aktivitäten anzusehen, bitte die Activity-App öffnen. - Fetching activities … Aktivitäten abrufen… - Network error occurred: client will retry syncing. Netzwerkfehler aufgetreten: Client startet die Synchronisation neu @@ -1160,42 +891,34 @@ Diese Aktion bricht jede derzeit laufende Synchronisierung ab. OCC::AddCertificateDialog - SSL client certificate authentication SSL-Client-Zertifikat-Authentifizierung - This server probably requires a SSL client certificate. Der Server benötigt vermutlich ein SSL-Client-Zertifikat - Certificate & Key (pkcs12): Zertifikat & Schlüssel (pkcs12): - Certificate password: Zertifikatspasswort: - An encrypted pkcs12 bundle is strongly recommended as a copy will be stored in the configuration file. Ein verschlüsseltes pkcs12-Bundle wird dringend empfohlen, da eine Kopie in der Konfigurationsdatei gespeichert wird. - Browse … Durchsuchen … - Select a certificate Zertifikat auswählen - Certificate files (*.p12 *.pfx) Zertifikatsdateien (*.p12 *.pfx) @@ -1203,71 +926,58 @@ Diese Aktion bricht jede derzeit laufende Synchronisierung ab. OCC::Application - Some settings were configured in %1 versions of this client and use features that are not available in this version.<br><br>Continuing will mean <b>%2 these settings</b>.<br><br>The current configuration file was already backed up to <i>%3</i>. Einige Einstellungen wurden in %1-Versionen dieses Clients konfiguriert und verwenden Funktionen, die in dieser Version nicht verfügbar sind.<br><br>Fortfahren bedeutet <b>%2 dieser Einstellungen</b>.<br><br>Die aktuelle Konfigurationsdatei wurde bereits auf <i>%3</i> gesichert. - newer newer software version Neuer - older older software version Älter - ignoring Ignoriere - deleting Lösche - Quit Beenden - Continue Fortsetzen - %1 accounts number of accounts imported %1 Konten - 1 account 1 Konto - %1 folders number of folders imported %1 Ordner - 1 folder 1 Ordner - Legacy import Import früherer Konfiguration - Imported %1 and %2 from a legacy desktop client. %3 number of accounts and folders imported. list of users. @@ -1275,12 +985,10 @@ Diese Aktion bricht jede derzeit laufende Synchronisierung ab. %3 - Error accessing the configuration file Fehler beim Zugriff auf die Konfigurationsdatei - There was an error while accessing the configuration file at %1. Please make sure the file can be accessed by your system account. Beim Zugriff auf die Konfigurationsdatei unter %1 ist ein Fehler aufgetreten. Stellen Sie sicher, dass Ihr Systemkonto auf die Datei zugreifen kann. @@ -1288,22 +996,18 @@ Diese Aktion bricht jede derzeit laufende Synchronisierung ab. OCC::AuthenticationDialog - Authentication Required Authentifizierung erforderlich - Enter username and password for "%1" at %2. Benutzername und Passwort für "%1" auf %2 eingeben. - &Username: &Benutzername: - &Password: &Passwort: @@ -1311,115 +1015,57 @@ Diese Aktion bricht jede derzeit laufende Synchronisierung ab. OCC::BasePropagateRemoteDeleteEncrypted - "%1 Failed to unlock encrypted folder %2". "%1 Der verschlüsselte Ordner %2 konnte nicht entsperrt werden". - Wrong HTTP code returned by server. Expected 204, but received "%1 %2". Falscher HTTP-Code vom Server zurückgegeben. Erwartet wird 204, jedoch "%1 %2" erhalten. - - OCC::BulkPropagatorDownloadJob - - - - File has changed since discovery - Datei hat sich seit der Entdeckung geändert - - - - Could not delete file record %1 from local DB - Dateidatensatz %1 konnte nicht aus der lokalen Datenbank gelöscht werden - - - - File %1 cannot be downloaded because it is non virtual! - Die Datei %1 kann nicht heruntergeladen werden, da sie nicht virtuell ist! - - - - Could not get file %1 from local DB - Datei %1 konnte nicht aus der lokalen Datenbank abgerufen werden - - - - File %1 cannot be downloaded because encryption information is missing. - Die Datei %1 kann nicht heruntergeladen werden, da die Verschlüsselungsinformationen fehlen. - - - - Error updating metadata: %1 - Fehler beim Aktualisieren der Metadaten: %1 - - - - The file %1 is currently in use - Die Datei %1 ist derzeit in Gebrauch - - OCC::BulkPropagatorJob - File %1 cannot be uploaded because another file with the same name, differing only in case, exists Die Datei %1 kann nicht hochgeladen werden, da eine andere Datei mit demselben Namen, nur unterschiedlicher Groß-/Kleinschreibung, existiert - - File contains leading or trailing spaces and couldn't be renamed - Dateiname enthält Leerzeichen am Anfang oder am Ende und konnte nicht umbenannt werden - - - File %1 has invalid modified time. Do not upload to the server. Die Datei %1 hat eine ungültige Änderungszeit. Nicht auf den Server hochladen. - File Removed (start upload) %1 Datei entfernt (starte das Hochladen) %1 - File %1 has invalid modification time. Do not upload to the server. Die Datei %1 hat eine ungültige Änderungszeit. Nicht auf den Server hochladen. - Local file changed during syncing. It will be resumed. Lokale Datei hat sich während der Synchronisierung geändert. Die Synchronisierung wird wieder aufgenommen. - - Local file changed during sync. Lokale Datei wurde während der Synchronisierung geändert. - Network error: %1 Netzwerkfehler: %1 - Error updating metadata: %1 Fehler beim Aktualisieren der Metadaten: %1 - The file %1 is currently in use Die Datei %1 wird aktuell verwendet - The local file was removed during sync. Die lokale Datei wurde während der Synchronisierung entfernt. - Restoration failed: %1 Wiederherstellung fehlgeschlagen: %1 @@ -1427,37 +1073,30 @@ Diese Aktion bricht jede derzeit laufende Synchronisierung ab. OCC::CaseClashConflictSolver - Cannot rename file because a file with the same name already exists on the server. Please pick another name. Die Datei kann nicht umbenannt werden, da eine Datei mit demselben Namen bereits auf dem Server existiert. Bitte einen anderen Namen wählen. - Could not rename file. Please make sure you are connected to the server. Datei konnte nicht umbenannt werden. Bitte stellen Sie sicher, dass Sie mit dem Server verbunden sind. - You don't have the permission to rename this file. Please ask the author of the file to rename it. Sie haben nicht die Berechtigung, diese Datei umzubenennen. Bitte wenden Sie sich zum Umbenennen der Datei an deren Ersteller. - Failed to fetch permissions with error %1 Berechtigungen konnten nicht abgerufen werden. Fehler: %1 - Filename contains leading and trailing spaces. Dateiname enthält Leerzeichen am Anfang und am Ende. - Filename contains leading spaces. Dateiname enthält Leerzeichen am Anfang. - Filename contains trailing spaces. Dateiname enthält Leerzeichen am Ende. @@ -1465,111 +1104,86 @@ Diese Aktion bricht jede derzeit laufende Synchronisierung ab. OCC::CaseClashFilenameDialog - Case Clash Conflict Konflikt mit der Groß- und Kleinschreibung - The file could not be synced because it generates a case clash conflict with an existing file on this system. Die Datei konnte nicht synchronisiert werden, da diese einen Konflikt bezüglich der Groß- und Kleinschreibung mit einer vorhandenen Datei auf diesem System erzeugt. - Error Fehler - Existing file Vorhandene Datei - file A Datei A - - today Heute - - 0 byte 0 Byte - - Open existing file Existierende Datei öffnen - Case clashing file Datei mit dem Problem der Groß- und Kleinschreibung - file B Datei B - - Open clashing file Datei mit dem Problem der Groß- und Kleinschreibung öffnen - Please enter a new name for the clashing file: Bitte einen neuen Namen für die Datei mit dem Problem der Groß- und Kleinschreibung eingeben: - New filename Neuer Dateiname - Rename file Datei umbenennen - The file "%1" could not be synced because of a case clash conflict with an existing file on this system. Die Datei "%1" konnte aufgrund eines Konflikts (Groß- / Kleinschreibung) mit einer vorhandenen Datei auf diesem System nicht synchronisiert werden. - %1 does not support equal file names with only letter casing differences. %1 unterstützt keine gleichen Dateinamen mit Unterschieden nur in der Groß- und Kleinschreibung. - Filename contains leading and trailing spaces. Dateiname enthält Leerzeichen am Anfang und am Ende. - Filename contains leading spaces. Dateiname enthält Leerzeichen am Anfang. - Filename contains trailing spaces. Dateiname enthält Leerzeichen am Ende. - Use invalid name Ungültigen Namen verwenden - Filename contains illegal characters: %1 Dateiname enthält unzulässige Zeichen: %1 @@ -1577,7 +1191,6 @@ Diese Aktion bricht jede derzeit laufende Synchronisierung ab. OCC::CleanupPollsJob - Error writing metadata to the database Fehler beim Schreiben der Metadaten in die Datenbank @@ -1585,33 +1198,27 @@ Diese Aktion bricht jede derzeit laufende Synchronisierung ab. OCC::ClientSideEncryption - Input PIN code Please keep it short and shorter than "Enter Certificate USB Token PIN:" PIN-Code eingeben - Enter Certificate USB Token PIN: PIN des USB-Token-Zertifikats eingeben: - Invalid PIN. Login failed Ungültige PIN. Anmeldung fehlgeschlagen - Login to the token failed after providing the user PIN. It may be invalid or wrong. Please try again! Die Anmeldung am Token ist nach Eingabe der Benutzer-PIN fehlgeschlagen. Sie kann ungültig oder falsch sein. Bitte erneut versuchen! - Please enter your end-to-end encryption passphrase:<br><br>Username: %2<br>Account: %3<br> Geben Sie Ihre Passphrase für Ende-zu-Ende-Verschlüsselung ein:<br><br>Benutzername: %2<br>Konto: %3<br> - Enter E2E passphrase E2E-Passphrase eingeben @@ -1619,87 +1226,66 @@ Diese Aktion bricht jede derzeit laufende Synchronisierung ab. OCC::ConflictDialog - Sync Conflict Synchronisations-Konflikt - - Conflicting versions of %1. Konflikt-Versionen von %1. - Which version of the file do you want to keep?<br/>If you select both versions, the local file will have a number added to its name. Welche Version der Datei soll behalten werden?<br/>Wenn Sie beide Versionen wählen, wird der lokalen Datei eine Zahl am Ende des Dateinamens angefügt. - Local version Lokale Version - - Click to open the file Klicken, um die Datei zu öffnen - - today Heute - - 0 byte 0 Byte - <a href="%1">Open local version</a> <a href="%1">Lokale Version öffnen</a> - Server version Serverversion - <a href="%1">Open server version</a> <a href="%1">Serverversion öffnen</a> - - Keep selected version Ausgewählte Version behalten - Open local version Lokale Version öffnen - Open server version Serverversion öffnen - Keep both versions Beide Versionen behalten - Keep local version Lokale Version behalten - Keep server version Serverversion behalten @@ -1707,14 +1293,10 @@ Diese Aktion bricht jede derzeit laufende Synchronisierung ab. OCC::ConflictSolver - - Error Fehler - - Moving file failed: %1 @@ -1723,17 +1305,14 @@ Diese Aktion bricht jede derzeit laufende Synchronisierung ab. %1 - Do you want to delete the directory <i>%1</i> and all its contents permanently? Möchten Sie den Ordner <i>%1</i> und dessen Inhalte dauerhaft löschen? - Do you want to delete the file <i>%1</i> permanently? Möchten Sie die Datei <i>%1</i> dauerhaft löschen? - Confirm deletion Löschen bestätigen @@ -1741,32 +1320,26 @@ Diese Aktion bricht jede derzeit laufende Synchronisierung ab. OCC::ConnectionValidator - Timeout Zeitüberschreitung - The configured server for this client is too old Der konfigurierte Server ist für diesen Client zu alt - Please update to the latest server and restart the client. Aktualisieren Sie auf die neueste Serverversion und starten Sie den Client neu. - Authentication error: Either username or password are wrong. Authentifizierungsfehler: Benutzername oder Passwort ist falsch. - No Nextcloud account configured Kein Nextcloud-Konto konfiguriert - The provided credentials are not correct Die zur Verfügung gestellten Anmeldeinformationen sind nicht korrekt @@ -1774,12 +1347,10 @@ Diese Aktion bricht jede derzeit laufende Synchronisierung ab. OCC::DiscoveryPhase - Error while canceling deletion of a file Fehler beim Abbrechen des Löschens einer Datei - Error while canceling deletion of %1 Fehler beim Abbrechen des Löschens von %1 @@ -1787,19 +1358,14 @@ Diese Aktion bricht jede derzeit laufende Synchronisierung ab. OCC::DiscoverySingleDirectoryJob - - Server error: PROPFIND reply is not XML formatted! Serverantwort: PROPFIND-Antwort ist nicht im XML-Format! - - Encrypted metadata setup error! Einrichtungsfehler für verschlüsselte Metadaten! - Encrypted metadata setup error: initial signature from server is empty. Fehler bei der Einrichtung der verschlüsselten Metadaten: Die ursprüngliche Signatur vom Server ist leer. @@ -1807,27 +1373,22 @@ Diese Aktion bricht jede derzeit laufende Synchronisierung ab. OCC::DiscoverySingleLocalDirectoryJob - Error while opening directory %1 Fehler beim Öffnen des Ordners %1 - Directory not accessible on client, permission denied Verzeichnis auf dem Client nicht zugreifbar, Berechtigung verweigert - Directory not found: %1 Ordner nicht gefunden: %1 - Filename encoding is not valid Dateinamenkodierung ist ungültig - Error while reading directory %1 Fehler beim Lesen des Ordners %1 @@ -1835,93 +1396,62 @@ Diese Aktion bricht jede derzeit laufende Synchronisierung ab. OCC::EditLocallyJob - - - - - - - - Could not start editing locally. Lokale Bearbeitung konnte nicht gestartet werden. - - An error occurred during setup. Es ist ein Fehler während der Einrichtung aufgetreten. - - Could not find a file for local editing. Make sure its path is valid and it is synced locally. Datei zur lokalen Bearbeitung konnte nicht gefunden werden. Stellen Sie sicher, dass der Pfad gültig ist und lokal synchronisiert wird. - - - - Could not find a file for local editing. Make sure it is not excluded via selective sync. Datei zur lokalen Bearbeitung konnte nicht gefunden werden. Stellen Sie sicher, dass sie nicht durch die selektive Synchronisierung ausgeschlossen wird. - - - An error occurred during data retrieval. Es ist ein Fehler beim Datenabruf aufgetreten. - - An error occurred trying to synchronise the file to edit locally. Es ist ein Fehler beim Versuch, die Datei zu synchronisieren, um sie lokal zu bearbeiten, aufgetreten. - Server error: PROPFIND reply is not XML formatted! Serverantwort: PROPFIND-Antwort ist nicht im XML-Format! - Could not find a remote file info for local editing. Make sure its path is valid. Remote-Dateiinformationen für die lokale Bearbeitung konnten nicht gefunden werden. Stellen Sie sicher, dass der Pfad gültig ist. - Invalid local file path. Ungültiger lokaler Dateipfad. - Could not open %1 %1 konnte nicht geöffnet werden - Please try again. Bitte erneut versuchen. - File %1 already locked. Datei %1 bereits gesperrt. - - Lock will last for %1 minutes. You can also unlock this file manually once you are finished editing. Die Sperre dauert noch %1 Minuten. Sie können diese Datei auch manuell entsperren, sobald Sie mit der Bearbeitung fertig sind. - File %1 now locked. Datei %1 ist jetzt gesperrt. - File %1 could not be locked. Datei %1 konnte nicht gesperrt werden. @@ -1929,12 +1459,10 @@ Diese Aktion bricht jede derzeit laufende Synchronisierung ab. OCC::EditLocallyManager - Could not validate the request to open a file from server. Die Anforderung zum Öffnen einer Datei vom Server konnte nicht validiert werden. - Please try again. Bitte erneut versuchen. @@ -1942,34 +1470,26 @@ Diese Aktion bricht jede derzeit laufende Synchronisierung ab. OCC::EditLocallyVerificationJob - Invalid token received. Ungültiges Token empfangen. - - - Please try again. Bitte erneut versuchen. - Invalid file path was provided. Ungültiger Dateipfad wurde angegeben. - Could not find an account for local editing. Es konnte kein Konto für die lokale Bearbeitung gefunden werden. - Could not start editing locally. Lokale Bearbeitung konnte nicht gestartet werden. - An error occurred trying to verify the request to edit locally. Es ist ein Fehler beim Versuch, die Anfrage zur lokalen Bearbeitung zu überprüfen, aufgetreten. @@ -1977,7 +1497,6 @@ Diese Aktion bricht jede derzeit laufende Synchronisierung ab. OCC::EncryptFolderJob - Could not generate the metadata for encryption, Unlocking the folder. This can be an issue with your OpenSSL libraries. Die Metadaten für die Verschlüsselung konnten nicht generiert werden. Entsperren des Ordners. @@ -1987,34 +1506,22 @@ Dies kann ein Problem mit Ihren OpenSSL-Bibliotheken sein. OCC::EncryptedFolderMetadataHandler - - - - - - Error fetching metadata. Fehler beim Abrufen der Metadaten. - - - Error locking folder. Fehler beim Sperren des Ordners. - Error fetching encrypted folder ID. Fehler beim Abrufen der verschlüsselten Ordner-ID. - Error parsing or decrypting metadata. Fehler beim Lesen oder Entschlüsseln von Metadaten. - Failed to upload metadata Metadaten konnten nicht hochgeladen werden @@ -2022,86 +1529,85 @@ Dies kann ein Problem mit Ihren OpenSSL-Bibliotheken sein. OCC::FileDetails - %1 second(s) ago seconds elapsed since file last modified - Vor %1 SekundeVor %1 Sekunden + + Vor %1 Sekunde + Vor %1 Sekunden + - %1 minute(s) ago minutes elapsed since file last modified - Vor %1 MinuteVor %1 Minuten + + Vor %1 Minute + Vor %1 Minuten + - %1 hour(s) ago hours elapsed since file last modified - Vor %1 StundeVor %1 Stunden + + Vor %1 Stunde + Vor %1 Stunden + - %1 day(s) ago days elapsed since file last modified - Vor %1 TagVor %1 Tagen + + Vor %1 Tag + Vor %1 Tagen + - %1 month(s) ago months elapsed since file last modified - Vor %1 MonatVor %1 Monaten + + Vor %1 Monat + Vor %1 Monaten + - %1 year(s) ago years elapsed since file last modified - Vor %1 JahrVor %1 Jahren + + Vor %1 Jahr + Vor %1 Jahren + - Locked by %1 - Expires in %2 minute(s) remaining time before lock expires - Gesperrt von %1 - Läuft in %2 Minute abGesperrt von %1 - Läuft in %2 Minuten ab + + Gesperrt von %1 - Läuft in %2 Minute ab + Gesperrt von %1 - Läuft in %2 Minuten ab + OCC::Flow2Auth - The returned server URL does not start with HTTPS despite the login URL started with HTTPS. Login will not be possible because this might be a security issue. Please contact your administrator. Die zurückgegebene Server-URL beginnt nicht mit HTTPS, obwohl die Anmelde-URL mit HTTPS beginnt. Die Anmeldung ist nicht möglich, da dies ein Sicherheitsproblem darstellen könnte. Bitte wenden Sie sich an Ihre Administration. - - Error returned from the server: <em>%1</em> Vom Server zurückgegebener Fehler: <em>%1</em> - The polling URL does not start with HTTPS despite the login URL started with HTTPS. Login will not be possible because this might be a security issue. Please contact your administrator. Die Polling-URL beginnt nicht mit HTTPS, obwohl die Anmelde-URL mit HTTPS beginnt. Die Anmeldung ist nicht möglich, da dies ein Sicherheitsproblem darstellen könnte. Bitte wenden Sie sich an Ihre Administration. - - There was an error accessing the "token" endpoint: <br><em>%1</em> Fehler beim Zugriff auf den "Token"-Endpunkt: <br><em>%1</em> - - The reply from the server did not contain all expected fields Die Antwort des Servers enthielt nicht alle erwarteten Felder - - The reply from the server did not contain all expected fields: <br><em>%1</em> - Die Antwort des Servers enthielt nicht alle erwarteten Felder: <br><em>%1</em> - - - - Could not parse the JSON returned from the server: <br><em>%1</em> Der vom Server zurückgegebene JSON-Code konnte nicht verarbeitet werden: <br><em>%1</em> @@ -2109,37 +1615,30 @@ Dies kann ein Problem mit Ihren OpenSSL-Bibliotheken sein. OCC::Flow2AuthWidget - Unable to open the Browser, please copy the link to your Browser. Der Browser kann nicht geöffnet werden. Bitte kopieren Sie den Link in Ihren Browser. - Waiting for authorization Warte auf Autorisierung - Polling for authorization Abruf der Autorisierung - Starting authorization Starte Autorisierung - Link copied to clipboard. Link in die Zwischenablage kopiert. - Open Browser Browser öffnen - Copy Link Link kopieren @@ -2147,172 +1646,164 @@ Dies kann ein Problem mit Ihren OpenSSL-Bibliotheken sein. OCC::Folder - %1 has been removed. %1 names a file. %1 wurde entfernt. - %1 has been updated. %1 names a file. %1 wurde aktualisiert. - %1 has been renamed to %2. %1 and %2 name files. %1 wurde in %2 umbenannt. - %1 has been moved to %2. %1 wurde in %2 verschoben. - %1 and %n other file(s) have been removed. - %1 und %n andere Datei wurden gelöscht.%1 und %n andere Dateien wurden entfernt. + + %1 und %n andere Datei wurden gelöscht. + %1 und %n andere Dateien wurden entfernt. + - Please choose a different location. The folder %1 doesn't exist. Bitte wählen Sie einen anderen Speicherort. Der Ordner %1 ist nicht vorhanden. - Please choose a different location. %1 isn't a valid folder. Bitte wählen Sie einen anderen Speicherort. %1 ist kein gültiger Ordner. - Please choose a different location. %1 isn't a readable folder. Bitte wählen Sie einen anderen Speicherort. %1 ist kein lesbarer Ordner. - %1 and %n other file(s) have been added. - %1 und %n andere Datei wurden hinzugefügt.%1 und %n andere Dateien wurden hinzugefügt. + + %1 und %n andere Datei wurden hinzugefügt. + %1 und %n andere Dateien wurden hinzugefügt. + - %1 has been added. %1 names a file. %1 wurde hinzugefügt. - %1 and %n other file(s) have been updated. - %1 und %n andere Datei wurde aktualisiert.%1 und %n andere Dateien wurden aktualisiert. + + %1 und %n andere Datei wurde aktualisiert. + %1 und %n andere Dateien wurden aktualisiert. + - %1 has been renamed to %2 and %n other file(s) have been renamed. - %1 wurde in %2 umbenannt und %n andere Datei wurde umbenannt.%1 wurde in %2 umbenannt und %n andere Dateien wurden umbenannt. + + %1 wurde in %2 umbenannt und %n andere Datei wurde umbenannt. + %1 wurde in %2 umbenannt und %n andere Dateien wurden umbenannt. + - %1 has been moved to %2 and %n other file(s) have been moved. - %1 wurde in %2 verschoben und %n andere Datei wurde verschoben.%1 wurde in %2 verschoben und %n andere Dateien wurden verschoben. + + %1 wurde in %2 verschoben und %n andere Datei wurde verschoben. + %1 wurde in %2 verschoben und %n andere Dateien wurden verschoben. + - %1 has and %n other file(s) have sync conflicts. - %1 und %n andere Datei haben Konflikte beim Abgleichen.%1 und %n andere Dateien haben Konflikte beim Abgleichen. + + %1 und %n andere Datei haben Konflikte beim Abgleichen. + %1 und %n andere Dateien haben Konflikte beim Abgleichen. + - %1 has a sync conflict. Please check the conflict file! Es gab einen Konflikt bei der Synchronisierung von %1. Bitte prüfen Sie die Konfliktdatei! - %1 and %n other file(s) could not be synced due to errors. See the log for details. - %1 und %n weitere Datei konnten aufgrund von Fehlern nicht synchronisiert werden. Schauen Sie in das Protokoll für Details.%1 und %n weitere Dateien konnten aufgrund von Fehlern nicht synchronisiert werden. Details finden Sie im Protokoll. + + %1 und %n weitere Datei konnten aufgrund von Fehlern nicht synchronisiert werden. Schauen Sie in das Protokoll für Details. + %1 und %n weitere Dateien konnten aufgrund von Fehlern nicht synchronisiert werden. Details finden Sie im Protokoll. + - %1 could not be synced due to an error. See the log for details. %1 konnte aufgrund eines Fehlers nicht synchronisiert werden. Details finden Sie im Protokoll. - %1 and %n other file(s) are currently locked. - %1 und %n andere Datei sind aktuell gesperrt.%1 und %n andere Dateien sind aktuell gesperrt. + + %1 und %n andere Datei sind aktuell gesperrt. + %1 und %n andere Dateien sind aktuell gesperrt. + - %1 is currently locked. %1 ist aktuell gesperrt. - Sync Activity Synchronisierungsaktivität - Could not read system exclude file Systemeigene Ausschlussdatei kann nicht gelesen werden - A new folder larger than %1 MB has been added: %2. Ein neuer Ordner größer als %1 MB wurde hinzugefügt: %2. - A folder from an external storage has been added. Ein Ordner von einem externen Speicher wurde hinzugefügt. - Please go in the settings to select it if you wish to download it. Bitte wechseln Sie zu den Einstellungen, falls Sie den Ordner herunterladen möchten. - A folder has surpassed the set folder size limit of %1MB: %2. %3 Ein Ordner hat die festgelegte Ordnergrößenbeschränkung von %1 MB überschritten: %2. %3 - Keep syncing Weiterhin synchronisieren - Stop syncing Synchronisation stoppen - The folder %1 has surpassed the set folder size limit of %2MB. Der Ordner %1 hat die festgelegte Größenbeschränkung von %2 MB überschritten. - Would you like to stop syncing this folder? Möchten Sie die Synchronisierung dieses Ordners stoppen? - The folder %1 was created but was excluded from synchronization previously. Data inside it will not be synchronized. Der Ordner %1 wurde erstellt, wurde jedoch zuvor von der Synchronisierung ausgeschlossen. Die darin enthaltenen Daten werden nicht synchronisiert. - The file %1 was created but was excluded from synchronization previously. It will not be synchronized. Die Datei % 1 wurde erstellt, jedoch bereits zuvor von der Synchronisierung ausgeschlossen. Sie wird nicht synchronisiert werden. - Changes in synchronized folders could not be tracked reliably. This means that the synchronization client might not upload local changes immediately and will instead only scan for local changes and upload them occasionally (every two hours by default). @@ -2325,45 +1816,38 @@ Dies bedeutet, dass der Synchronisierungs-Client lokale Änderungen möglicherwe %1 - Virtual file download failed with code "%1", status "%2" and error message "%3" Der Download der virtuellen Datei ist mit dem Code "%1", dem Status "%2" und der Fehlermeldung "%3" fehlgeschlagen. - A large number of files in the server have been deleted. -Please confirm if you'd like to proceed with these deletions. +Please confirm if you'd like to proceed with these deletions. Alternatively, you can restore all deleted files by uploading from '%1' folder to the server. Eine große Anzahl von Dateien auf dem Server wurde gelöscht. Bitte bestätigen Sie, dass Sie mit diesen Löschungen fortfahren möchten. Alternativ können Sie alle gelöschten Dateien wiederherstellen, indem Sie von Ordner '%1' auf den Server hochladen. - - A large number of files in your local '%1' folder have been deleted. -Please confirm if you'd like to proceed with these deletions. + A large number of files in your local '%1' folder have been deleted. +Please confirm if you'd like to proceed with these deletions. Alternatively, you can restore all deleted files by downloading them from the server. Eine große Anzahl von Dateien wurde lokal im Ordner '%1' gelöscht. Bitte bestätigen Sie, dass Sie mit diesen Löschungen fortfahren möchten. Alternativ können Sie auch alle gelöschten Dateien wiederherstellen, indem Sie sie vom Server herunterladen. - Remove all files? Alle Dateien entfernen? - Proceed with Deletion Mit der Löschung fortfahren - Restore Files to Server Dateien auf dem Server wiederherstellen - Restore Files from Server Dateien vom Server wiederherstellen @@ -2371,27 +1855,22 @@ Alternativ können Sie auch alle gelöschten Dateien wiederherstellen, indem Sie OCC::FolderCreationDialog - Create new folder Neuen Ordner erstellen - Enter folder name Ordnernamen eingeben - Folder already exists Ordner existiert bereits - Error Fehler - Could not create a folder! Check your write permissions. Ordner konnte nicht erstellt werden! Prüfen Sie die Schreibberechtigungen. @@ -2399,136 +1878,108 @@ Alternativ können Sie auch alle gelöschten Dateien wiederherstellen, indem Sie OCC::FolderMan - Could not reset folder state Konnte Ordner-Zustand nicht zurücksetzen - (backup) (Sicherung) - (backup %1) (Sicherung %1) - An old sync journal "%1" was found, but could not be removed. Please make sure that no application is currently using it. Ein altes Synchronisierungsprotokoll "%1" wurde gefunden, konnte jedoch nicht entfernt werden. Bitte stellen Sie sicher, dass keine Anwendung es verwendet. - Undefined state. Undefinierter Zustand. - Waiting to start syncing. Wartet auf Beginn der Synchronisierung. - Preparing for sync. Synchronisierung wird vorbereitet. - Syncing %1 of %2 (A few seconds left) Synchronisiere %1 von %2 (ein paar Sekunden übrig) - Syncing %1 of %2 (%3 left) Synchronisiere %1 von %2 (%3 übrig) - Syncing %1 of %2 Synchronisiere %1 von %2 - Syncing %1 (A few seconds left) Synchronisiere %1 (ein paar Sekunden übrig) - Syncing %1 (%2 left) Synchronisiere %1 (%2 übrig) - Syncing %1 Synchronisiere %1 - Sync is running. Synchronisierung läuft. - Sync finished with unresolved conflicts. Synchronisierung mit ungelösten Konflikten beendet. - Last sync was successful. Die letzte Synchronisierung war erfolgreich. - Setup error. Einrichtungsfehler. - Sync request was cancelled. Synchronisierungsanfrage wurde abgebrochen. - Please choose a different location. The selected folder isn't valid. Bitte wählen Sie einen anderen Speicherort. Der ausgewählte Ordner ist ungültig. - - Please choose a different location. %1 is already being used as a sync folder. Bitte wählen Sie einen anderen Speicherort. %1 wird bereits als Synchronisationsordner verwendet. - Please choose a different location. The path %1 doesn't exist. Bitte wählen Sie einen anderen Speicherort. Der Pfad %1 existiert nicht. - Please choose a different location. The path %1 isn't a folder. Bitte wählen Sie einen anderen Speicherort. Der Pfad %1 ist kein Ordner. - - Please choose a different location. You don't have enough permissions to write to %1. folder location Bitte wählen Sie einen anderen Speicherort. Sie haben nicht genügend Berechtigungen, um in %1 zu schreiben. - Please choose a different location. %1 is already contained in a folder used as a sync folder. Bitte wählen Sie einen anderen Speicherort. %1 ist bereits in einem Ordner enthalten, der als Synchronisierungsordner verwendet wird. - Please choose a different location. %1 is already being used as a sync folder for %2. folder location, server url Bitte wählen Sie einen anderen Speicherort. %1 wird bereits als Synchronisierungsordner für %2 verwendet. - The folder %1 is linked to multiple accounts. This setup can cause data loss and it is no longer supported. To resolve this issue: please remove %1 from one of the accounts and create a new sync folder. @@ -2539,12 +1990,10 @@ So beheben Sie dieses Problem: Entfernen Sie %1 von einem der Konten und erstell Für fortgeschrittene Benutzer: Dieses Problem kann damit zusammenhängen, dass sich mehrere Synchronisierungsdatenbankdateien in einem Ordner befinden. Suchen Sie in %1 nach veralteten und nicht verwendeten .sync_*.db-Dateien und entfernen Sie diese. - Sync is paused. Synchronisierung ist pausiert. - %1 (Sync is paused) %1 (Synchronisierung ist pausiert) @@ -2552,12 +2001,10 @@ Für fortgeschrittene Benutzer: Dieses Problem kann damit zusammenhängen, dass OCC::FolderStatusDelegate - Add Folder Sync Connection Ordner-Synchronisierung hinzufügen - File Datei @@ -2565,156 +2012,128 @@ Für fortgeschrittene Benutzer: Dieses Problem kann damit zusammenhängen, dass OCC::FolderStatusModel - You need to be connected to add a folder Sie müssen verbunden sein, um einen Ordner hinzuzufügen - Click this button to add a folder to synchronize. Wählen Sie diese Schaltfläche, um einen zu synchronisierenden Ordner hinzuzufügen. - Could not decrypt! Konnte nicht entschlüsseln! - - %1 (%2) %1 (%2) - Error while loading the list of folders from the server. Fehler beim Empfang der Ordnerliste vom Server. - Virtual file support is enabled. Unterstützung für virtuelle Dateien ist aktiviert. - Signed out Abgemeldet - Synchronizing virtual files in local folder Virtuelle Dateien im lokalen Ordner synchronisieren - Synchronizing files in local folder Dateien im lokalen Ordner synchronisieren - Checking for changes in remote "%1" Nach Änderungen in entfernten "%1" suchen - Checking for changes in local "%1" Nach Änderungen in lokalem "%1" suchen - Syncing local and remote changes Synchronisieren von lokalen und Remote-Änderungen - %1 %2 … - Example text: "Uploading foobar.png (1MB of 2MB) time left 2 minutes at a rate of 24Kb/s" Example text: "Syncing 'foo.txt', 'bar.txt'" + Example text: "Uploading foobar.png (1MB of 2MB) time left 2 minutes at a rate of 24Kb/s" Example text: "Syncing 'foo.txt', 'bar.txt'" %1 %2 … - Download %1/s Example text: "Download 24Kb/s" (%1 is replaced by 24Kb (translated)) %1/s herunterladen - File %1 of %2 Datei %1 von %2 - There are unresolved conflicts. Click for details. Es existieren ungelöste Konflikte. Für Details klicken. - - , , - Fetching folder list from server … Rufe Ordnerliste vom Server ab … - ↓ %1/s ↓ %1/s - Upload %1/s Example text: "Upload 24Kb/s" (%1 is replaced by 24Kb (translated)) %1/s hochladen - ↑ %1/s ↑ %1/s - %1 %2 (%3 of %4) Example text: "Uploading foobar.png (2MB of 2MB)" %1 %2 (%3 von %4) - %1 %2 Example text: "Uploading foobar.png" %1 %2 - A few seconds left, %1 of %2, file %3 of %4 Example text: "5 minutes left, 12 MB of 345 MB, file 6 of 7" Noch ein paar Sekunden, %1 von %2, Datei %3 von %4 - %5 left, %1 of %2, file %3 of %4 %5 übrig, %1 von %2, Datei %3 von %4 - %1 of %2, file %3 of %4 Example text: "12 MB of 345 MB, file 6 of 7" %1 of %2, Datei %3 von %4 - Waiting for %n other folder(s) … - Warte auf %n anderen Ordner …Warte auf %n andere Ordner … + + Warte auf %n anderen Ordner … + Warte auf %n andere Ordner … + - About to start syncing Die Synchronisierung beginnt - Preparing to sync … Synchronisierung wird vorbereitet … @@ -2722,7 +2141,6 @@ Für fortgeschrittene Benutzer: Dieses Problem kann damit zusammenhängen, dass OCC::FolderWatcher - The watcher did not receive a test notification. Der Beobachter hat keine Testbenachrichtigung erhalten. @@ -2730,7 +2148,6 @@ Für fortgeschrittene Benutzer: Dieses Problem kann damit zusammenhängen, dass OCC::FolderWatcherPrivate - This problem usually happens when the inotify watches are exhausted. Check the FAQ for details. Dieses Problem tritt zumeist auf, wenn die Inotify-Zähler voll sind. Details finden Sie im FAQ. @@ -2738,12 +2155,10 @@ Für fortgeschrittene Benutzer: Dieses Problem kann damit zusammenhängen, dass OCC::FolderWizard - Add Folder Sync Connection Ordner-Synchronisierung hinzufügen - Add Sync Connection Synchronisierung hinzufügen @@ -2751,17 +2166,14 @@ Für fortgeschrittene Benutzer: Dieses Problem kann damit zusammenhängen, dass OCC::FolderWizardLocalPath - Click to select a local folder to sync. Hier klicken, um einen lokalen Ordner zum Synchronisieren auszuwählen. - Enter the path to the local folder. Pfad zum lokalen Ordner eingeben - Select the source folder Quellordner auswählen @@ -2769,74 +2181,53 @@ Für fortgeschrittene Benutzer: Dieses Problem kann damit zusammenhängen, dass OCC::FolderWizardRemotePath - Create Remote Folder Entfernten Ordner erstellen - Enter the name of the new folder to be created below "%1": Geben Sie den Namen des neuen, unter "%1" zu erstellenden Ordners ein: - Folder was successfully created on %1. Ordner auf %1 erstellt. - Authentication failed accessing %1 Beim Zugriff auf %1 ist die Authentifizierung fehlgeschlagen - Failed to create the folder on %1. Please check manually. Der Ordner konnte nicht auf %1 erstellt werden. Bitte prüfen Sie dies manuell. - Failed to list a folder. Error: %1 Ordner konnte nicht gelistet werden. Fehler: %1 - Choose this to sync the entire account Wählen Sie dies, um das gesamte Konto zu synchronisieren - - - Please choose a different location. %1 is already being synced to %2. Bitte wählen Sie einen anderen Speicherort. %1 wird bereits mit %2 synchronisiert. - - - You are already syncing the subfolder %1 at %2. - Sie synchronisieren bereits den Unterordner %1 bei %2. - OCC::FolderWizardSelectiveSync - - Use virtual files instead of downloading content immediately %1 Virtuelle Dateien verwenden, anstatt den Inhalt sofort herunterzuladen %1 - - (experimental) (experimentell) - Virtual files are not supported for Windows partition roots as local folder. Please choose a valid subfolder under drive letter. Virtuelle Dateien werden für die Wurzel von Windows-Partitionen als lokaler Ordner nicht unterstützt. Bitte wählen Sie einen gültigen Unterordner unter dem Laufwerksbuchstaben. - Virtual files are not supported at the selected location Virtuelle Dateien werden an dem ausgewählten Speicherort nicht unterstützt @@ -2844,27 +2235,22 @@ Für fortgeschrittene Benutzer: Dieses Problem kann damit zusammenhängen, dass OCC::GETFileJob - No E-Tag received from server, check Proxy/Gateway Kein E-Tag vom Server empfangen, bitte Proxy/Gateway überprüfen - We received a different E-Tag for resuming. Retrying next time. Es wurde ein unterschiedliches E-Tag zum Fortfahren empfangen. Bitte beim nächsten mal nochmal versuchen. - We received an unexpected download Content-Length. Wir haben eine unerwartete Download-Content-Länge erhalten. - Server returned wrong content-range Server hat falschen Bereich für den Inhalt zurückgegeben - Connection Timeout Zeitüberschreitung der Verbindung @@ -2872,199 +2258,151 @@ Für fortgeschrittene Benutzer: Dieses Problem kann damit zusammenhängen, dass OCC::GeneralSettings - General Settings Allgemeine Einstellungen - Show Call Notifications Anrufbenachrichtigungen anzeigen - For System Tray Für das Systembenachrichtungsfeld - Show Chat Notifications Chat-Benachrichtigungen anzeigen - Show Server &Notifications Server&benachrichtigungen anzeigen - Advanced Erweitert - MB Trailing part of "Ask confirmation before syncing folder larger than" MB - Ask for confirmation before synchronizing external storages Bestätigung erfragen, bevor externe Speicher synchronisiert werden - &Launch on System Startup Beim &Systemstart starten - Use &Monochrome Icons &Monochrome Symbole verwenden - Ask for confirmation before synchronizing new folders larger than Bestätigung erfragen, bevor neue Ordner synchronisiert werden, die größer sind als - Notify when synchronised folders grow larger than specified limit Benachrichtigen, wenn synchronisierte Ordner größer werden als das angegebene Limit - Automatically disable synchronisation of folders that overcome limit Automatisch die Synchronisierung von Ordnern beenden, die das Limit überschreiten - Move removed files to trash Entfernte Dateien in den Papierkorb verschieben - Show sync folders in &Explorer's navigation pane Synchronisierungsordner im Navigationsbereich des &Explorers anzeigen - S&how crash reporter &Crash-Reporter anzeigen - Server poll interval Serverabrufintervall - seconds (if <a href="https://github.com/nextcloud/notify_push">Client Push</a> is unavailable) Sekunden (Wenn <a href="https://github.com/nextcloud/notify_push">Client Push</a> nicht verfügbar ist) - Edit &Ignored Files I&gnorierte Dateien bearbeiten - - Create Debug Archive Debug-Archiv erstellen - Info Info - Desktop client x.x.x Desktop-Client x.x.x - Update channel Update-Kanal - &Automatically check for updates &Automatisch auf Aktualisierungen prüfen - Check Now Jetzt prüfen - Usage Documentation Nutzungsdokumentation - Legal Notice Impressum - - Restore &Default - &Standard wiederherstellen - - - &Restart && Update &Neustarten && aktualisieren - Server notifications that require attention. Server-Benachrichtigungen, die Aufmerksamkeit erfordern. - Show chat notification dialogs. Dialog zu Chat-Benachrichtigungen anzeigen - Show call notification dialogs. Dialog zu Anrufbenachrichtigungen anzeigen - You cannot disable autostart because system-wide autostart is enabled. Sie können den Autostart nicht deaktivieren, da der systemweite Autostart aktiviert ist. - - Restore to &%1 - Wiederherstellen auf &%1 - - - stable Stabil - beta Beta - daily Täglich - enterprise Unternehmensversion - - beta: contains versions with new features that may not be tested thoroughly - daily: contains versions created daily only for testing and development @@ -3076,7 +2414,6 @@ Downgrading versions is not possible immediately: changing from beta to stable m Ein Downgrade von Versionen ist nicht sofort möglich: Der Wechsel von Beta auf Stabil bedeutet, dass man auf die neue stabile Version warten muss. - - enterprise: contains stable versions for customers. Downgrading versions is not possible immediately: changing from stable to enterprise means waiting for the new enterprise version. @@ -3086,12 +2423,10 @@ Downgrading versions is not possible immediately: changing from stable to enterp Ein Downgrade von Versionen ist nicht sofort möglich: Der Wechsel von Beta auf Stabil bedeutet, dass man auf die neue stabile Version warten muss. - Changing update channel? Update-Kanal ändern? - The channel determines which upgrades will be offered to install: - stable: contains tested versions considered reliable @@ -3100,55 +2435,41 @@ Ein Downgrade von Versionen ist nicht sofort möglich: Der Wechsel von Beta auf - Stabil: enthält getestete Versionen, die als zuverlässig gelten - Change update channel Update-Kanal ändern - Cancel Abbrechen - Zip Archives Zip-Archive - Debug Archive Created Debug-Archiv erstellt - Debug archive is created at %1 Debug-Archiv erstellt in %1 - - - Redact information deemed sensitive before sharing! Debug archive created at %1 - Informationen, die als vertraulich gelten, vor der Weitergabe redigieren! Debug-Archiv erstellt unter %1 - OCC::GetOrCreatePublicLinkShare - Password for share required Passwort für die Freigabe erforderlich - Please enter a password for your link share: Bitte Passwort für die Link-Freigabe eingeben: - Sharing error Fehler beim Teilen - Could not retrieve or create the public link share. Error: %1 @@ -3160,22 +2481,18 @@ Ein Downgrade von Versionen ist nicht sofort möglich: Der Wechsel von Beta auf OCC::HttpCredentialsGui - Please enter %1 password:<br><br>Username: %2<br>Account: %3<br> Bitte %1 Passwort:<br><br>Benutzername: %2<br>Konto: %3<br>eingeben - Reading from keychain failed with error: "%1" Lesen vom Schlüsselbund fehlgeschlagen mit Fehler: "%1" - Enter Password Passwort eingeben - <a href="%1">Click here</a> to request an app password from the web interface. <a href="%1">Hier klicken</a>, um von der Web-Oberfläche ein App-Passwort zu erhalten. @@ -3183,27 +2500,22 @@ Ein Downgrade von Versionen ist nicht sofort möglich: Der Wechsel von Beta auf OCC::IgnoreListEditor - Ignored Files Editor Editor für ignorierte Dateien - Global Ignore Settings Globale Ignorier-Einstellungen - Sync hidden files Synchronisiere versteckte Dateien - Files Ignored by Patterns Nach Muster ignorierte Dateien - This entry is provided by the system at "%1" and cannot be modified in this view. Dieser Eintrag wird vom System auf "%1" bereitgestellt und kann in dieser Ansicht nicht geändert werden. @@ -3211,32 +2523,26 @@ Ein Downgrade von Versionen ist nicht sofort möglich: Der Wechsel von Beta auf OCC::IgnoreListTableWidget - Pattern Muster - Allow Deletion Löschen erlauben - Add Hinzufügen - Remove Entfernen - Remove all Alle entfernen - Files or folders matching a pattern will not be synchronized. Items where deletion is allowed will be deleted if they prevent a directory from being removed. This is useful for meta data. @@ -3245,22 +2551,18 @@ Items where deletion is allowed will be deleted if they prevent a directory from Objekte, bei denen Löschen erlaubt ist, werden gelöscht, wenn diese das Entfernen eines Ordners verhindern würden. Dies ist für Metadaten nützlich. - Could not open file Datei konnte nicht geöffnet werden - Cannot write changes to "%1". Konnte Änderungen nicht in "%1" schreiben. - Add Ignore Pattern Ignoriermuster hinzufügen - Add a new ignore pattern: Neues Ignoriermuster hinzufügen @@ -3268,159 +2570,117 @@ Objekte, bei denen Löschen erlaubt ist, werden gelöscht, wenn diese das Entfer OCC::InvalidFilenameDialog - Invalid filename Ungültiger Dateiname - The file could not be synced because it contains characters which are not allowed on this system. Die Datei konnte nicht synchronisiert werden, da der Name Zeichen enthält, die auf diesem System nicht zulässig sind. - Error Fehler - Please enter a new name for the file: Bitte geben Sie einen neuen Namen für die Datei ein: - New filename Neuer Dateiname - Rename file Datei umbenennen - The file "%1" could not be synced because the name contains characters which are not allowed on this system. Die Datei "%1" konnte nicht synchronisiert werden, da der Name Zeichen enthält, die auf diesem System nicht zulässig sind. - The following characters are not allowed on the system: \ / : ? * " < > | leading/trailing spaces Die folgenden Zeichen sind auf dem System nicht zulässig: \ / : ? * " < > | führende/nachgestellte Leerzeichen - The file "%1" could not be synced because the name contains characters which are not allowed on the server. Die Datei "%1" konnte nicht synchronisiert werden, da der Name Zeichen enthält, die auf dem Server unzulässig sind. - The following characters are not allowed: %1 Die folgenden Zeichen sind nicht erlaubt: %1 - The following basenames are not allowed: %1 Die folgenden Basisnamen sind nicht erlaubt: %1 - The following filenames are not allowed: %1 Die folgenden Dateinamen sind nicht erlaubt: %1 - The following file extensions are not allowed: %1 Die folgenden Dateierweiterungen sind nicht erlaubt: %1 - Checking rename permissions … Prüfe Umbenennungs-Rechte … - You don't have the permission to rename this file. Please ask the author of the file to rename it. Sie haben nicht die Berechtigung, diese Datei umzubenennen. Bitte wenden Sie sich an den Autor der Datei, um sie umzubenennen. - Failed to fetch permissions with error %1 Rechte konnten nicht abgerufen werden. Fehler: %1 - Filename contains leading and trailing spaces. Dateiname enthält Leerzeichen am Anfang und am Ende. - Filename contains leading spaces. Dateiname enthält Leerzeichen am Anfang. - Filename contains trailing spaces. Dateiname enthält Leerzeichen am Ende. - Use invalid name Ungültigen Namen verwenden - Filename contains illegal characters: %1 Dateiname enthält unzulässige Zeichen: %1 - Could not rename file. Please make sure you are connected to the server. Datei konnte nicht umbenannt werden. Bitte stellen Sie sicher, dass Sie mit dem Server verbunden sind. - Cannot rename file because a file with the same name does already exist on the server. Please pick another name. Die Datei kann nicht umbenannt werden, da eine Datei mit demselben Namen bereits auf dem Server existiert. Bitte wählen Sie einen anderen Namen. - Could not rename local file. %1 Lokale Datei konnte nicht umbenannt werden. %1 - - OCC::LegacyAccountSelectionDialog - - - Legacy import - Legacy-Import - - - - Select the accounts to import from the legacy configuration: - Bitte die Konten auswählen, die aus der alten Konfiguration importiert werden sollen: - - OCC::LegalNotice - - Legal notice Impressum - Close Schliessen - <p>Copyright 2017-2025 Nextcloud GmbH<br />Copyright 2012-2023 ownCloud GmbH</p> <p>Copyright 2017-2025 Nextcloud GmbH<br />Copyright 2012-2023 ownCloud GmbH</p> - <p>Licensed under the GNU General Public License (GPL) Version 2.0 or any later version.</p> <p>Lizensiert unter der GNU General Public License (GPL) Version 2.0 oder jeder neueren Version.</p> @@ -3428,12 +2688,10 @@ Objekte, bei denen Löschen erlaubt ist, werden gelöscht, wenn diese das Entfer OCC::LogBrowser - Log Output Protokoll-Ausgabe - The client can write debug logs to a temporary folder. These logs are very helpful for diagnosing problems. Since log files can get large, the client will start a new one for each sync run and compress older ones. It will also delete log files after a couple of hours to avoid consuming too much disk space. If enabled, logs will be written to %1 @@ -3442,19 +2700,16 @@ Da die Protokolldateien sehr groß werden können, erstellt der Client für jede Wenn aktiviert, werden die Protokolle nach %1 geschrieben. - Enable logging to temporary folder Protokollierung in temporären Ordner aktivieren - This setting persists across client restarts. Note that using any logging command line options will override this setting. Diese Einstellung bleibt über Client-Neustarts hinweg bestehen. Beachten Sie, dass die Verwendung von Befehlszeilenoptionen für die Protokollierung diese Einstellung außer Kraft setzt. - Open folder Ordner öffnen @@ -3462,14 +2717,10 @@ Beachten Sie, dass die Verwendung von Befehlszeilenoptionen für die Protokollie OCC::Logger - - Error Fehler - - <nobr>File "%1"<br/>cannot be opened for writing.<br/><br/>The log output <b>cannot</b> be saved!</nobr> <nobr>Datei "%1"<br/>kann nicht zum Schreiben geöffnet werden.<br/><br/>Die Protokolldatei kann <b>nicht</b> gespeichert werden!</nobr> @@ -3477,32 +2728,26 @@ Beachten Sie, dass die Verwendung von Befehlszeilenoptionen für die Protokollie OCC::Mac::FileProviderEditLocallyJob - Could not start editing locally. Lokale Bearbeitung konnte nicht gestartet werden. - An error occurred during setup. Es ist ein Fehler während der Einrichtung aufgetreten. - Could not find a file for local editing. Make sure its path is valid and it is synced locally. Eine Datei für die lokale Bearbeitung konnte nicht gefunden werden. Stellen Sie sicher, dass der Pfad gültig ist und die Datei lokal synchronisiert wird. - Could not get file ID. Datei-ID konnte nicht abgerufen werden. - Could not get file identifier. Dateikennung konnte nicht abgerufen werden. - The file identifier is empty. Dateikennung ist leer @@ -3510,47 +2755,38 @@ Beachten Sie, dass die Verwendung von Befehlszeilenoptionen für die Protokollie OCC::NSISUpdater - New Version Available Eine neue Version ist verfügbar - <p>A new version of the %1 Client is available.</p><p><b>%2</b> is available for download. The installed version is %3.</p> <p>Eine neue Version des %1 - Clients ist verfügbar.</p><p><b>%2</b> steht zum Herunterladen bereit. Die installierte Version ist %3.</p> - Update Failed Aktualisierung fehlgeschlagen - <p>A new version of the %1 Client is available but the updating process failed.</p><p><b>%2</b> has been downloaded. The installed version is %3. If you confirm restart and update, your computer may reboot to complete the installation.</p> <p>Eine neue Version des %1 - Clients ist verfügbar, aber die Aktualisierung ist fehlgeschlagen.</p><p><b>%2</b> wurde heruntergeladen. Die installierte Version ist %3. Wenn Sie Neustart und Aktualisieren bestätigen, wird Ihr Computer möglicherweise neu gestartet, um die Installation abzuschließen.</p> - Ask again later Versuchen Sie es später erneut - Restart and update Neu starten und aktualisieren - Update manually Manuell aktualisieren - Skip this time Dieses Mal überspringen - Get update Aktualisierung durchführen @@ -3558,109 +2794,82 @@ Beachten Sie, dass die Verwendung von Befehlszeilenoptionen für die Protokollie OCC::NetworkSettings - Proxy Settings Proxy-Einstellungen - Use system proxy System-Proxy verwenden - Host Host - Proxy server requires authentication Proxy-Server erfordert eine Authentifizierung - Download Bandwidth Download-Bandbreite - - Limit to Begrenzen auf - - KBytes/s KBytes/s - Note: proxy settings have no effects for accounts on localhost Hinweis: Proxy-Einstellungen haben keine Auswirkungen für Konten auf localhost - Manually specify proxy Proxy manuell festlegen - No proxy Kein Proxy - - - Use global settings Globale Einstellungen verwenden - - No limit Keine Begrenzung - - Limit to 3/4 of estimated bandwidth Auf 3/4 der geschätzten Bandbreite begrenzen - Upload Bandwidth Upload-Bandbreite - - Limit automatically Automatisch begrenzen - Hostname of proxy server Hostname des Proxy-Servers - Username for proxy server Benutzername für den Proxy-Server - Password for proxy server Passwort für den Proxy-Server - HTTP(S) proxy HTTP(S)-Proxy - SOCKS5 proxy SOCKS5-Proxy @@ -3668,77 +2877,54 @@ Beachten Sie, dass die Verwendung von Befehlszeilenoptionen für die Protokollie OCC::OCUpdater - Could not check for new updates. Auf neue Aktualisierungen kann nicht geprüft werden. - Checking update server … Aktualisierungsserver wird überprüft … - New %1 update ready Neue %1 Aktualisierung verfügbar - A new update for %1 is about to be installed. The updater may ask for additional privileges during the process. Your computer may reboot to complete the installation. Eine neue Aktualisierung für %1 wird installiert. Während des Aktualisierungsvorgangs werden Sie eventuell aufgefordert, zusätzliche Berechtigungen zu gewähren. Ihr Computer wird möglicherweise neu gestartet, um die Installation abzuschließen. - Downloading %1 … Lade %1 herunter … - %1 available. Restart application to start the update. %1-Version verfügbar. Anwendung zum Start der Aktualisierung neustarten. - Could not download update. Please open <a href='%1'>%1</a> to download the update manually. Aktualisierung kann nicht heruntergeladen werden. Bitte öffnen Sie <a href='%1'>%1</a>, um die Aktualisierung manuell herunterzuladen. - Could not download update. Please open %1 to download the update manually. Aktualisierung kann nicht heruntergeladen werden. Bitte öffnen Sie %1, um die Aktualisierung manuell herunterzuladen. - New %1 is available. Please open <a href='%2'>%2</a> to download the update. Neue Version von %1 vorhanden. Bitte öffnen Sie <a href='%2'>%2</a>, um die Aktualisierung herunterzuladen. - New %1 is available. Please open %2 to download the update. Neue Version von %1 vorhanden. Bitte öffnen Sie %2, um die Aktualisierung herunterzuladen. - Update status is unknown: Did not check for new updates. Aktualisierungsstatus unbekannt: Auf neue Aktualisierungen wurde nicht geprüft. - - You are using the %1 update channel. Your installation is the latest version. - Sie verwenden den Update-Kanal %1. Ihre Installation ist die neueste Version. - - - - No updates available. Your installation is the latest version. - Keine Aktualisierungen verfügbar. Ihre Installation ist die neueste Version. - - - No updates available. Your installation is at the latest version. Keine Aktualisierungen verfügbar. Ihre Installation ist auf dem neuesten Stand. - Update Check Aktualitätsprüfung @@ -3746,72 +2932,55 @@ Beachten Sie, dass die Verwendung von Befehlszeilenoptionen für die Protokollie OCC::OwncloudAdvancedSetupPage - Connect Verbinden - - (experimental) (experimentell) - - Use &virtual files instead of downloading content immediately %1 &Virtuelle Dateien verwenden, anstatt den Inhalt sofort herunterzuladen %1 - Virtual files are not supported for Windows partition roots as local folder. Please choose a valid subfolder under drive letter. Virtuelle Dateien werden für die Wurzel von Windows-Partitionen als lokaler Ordner nicht unterstützt. Bitte wählen Sie einen gültigen Unterordner unter dem Laufwerksbuchstaben. - %1 folder "%2" is synced to local folder "%3" %1 Ordner "%2" wird mit dem lokalen Ordner "%3" synchronisiert - Sync the folder "%1" Ordner "%1" synchronisieren - Warning: The local folder is not empty. Pick a resolution! Achtung: Der lokale Ordner ist nicht leer. Bitte wählen Sie eine entsprechende Lösung! - - %1 free space %1 gets replaced with the size and a matching unit. Example: 3 MB or 5 GB %1 freier Platz - Virtual files are not supported at the selected location Virtuelle Dateien werden an dem ausgewählten Speicherort nicht unterstützt - Local Sync Folder Lokaler Ordner für die Synchronisierung - - (%1) (%1) - There isn't enough free space in the local folder! Nicht genug freier Platz im lokalen Ordner vorhanden! - In Finder's "Locations" sidebar section In der Finder-Seitenleiste unter "Orte" @@ -3819,32 +2988,26 @@ Beachten Sie, dass die Verwendung von Befehlszeilenoptionen für die Protokollie OCC::OwncloudConnectionMethodDialog - Connection failed Verbindung fehlgeschlagen - <html><head/><body><p>Failed to connect to the secure server address specified. How do you wish to proceed?</p></body></html> <html><head/><body><p>Verbindung mit der angegebenen sicheren Serveradresse fehlgeschlagen. Wie möchten Sie fortfahren?</p></body></html> - Select a different URL Andere URL wählen - Retry unencrypted over HTTP (insecure) Unverschlüsselt über HTTP versuchen (unsicher) - Configure client-side TLS certificate Clientseitiges TLS-Zertifikat konfigurieren. - <html><head/><body><p>Failed to connect to the secure server address <em>%1</em>. How do you wish to proceed?</p></body></html> <html><head/><body><p>Sichere Verbindung zur Serveradresse <em>%1</em> fehlgeschlagen. Wie wollen Sie fortfahren?</p></body></html> @@ -3852,17 +3015,14 @@ Beachten Sie, dass die Verwendung von Befehlszeilenoptionen für die Protokollie OCC::OwncloudHttpCredsPage - &Email &E-Mail - Connect to %1 Verbinden mit %1 - Enter user credentials Geben Sie Ihre Benutzer-Anmeldeinformationen ein @@ -3870,8 +3030,6 @@ Beachten Sie, dass die Verwendung von Befehlszeilenoptionen für die Protokollie OCC::OwncloudPropagator - - Impossible to get modification time for file in conflict %1 Es ist nicht möglich, die Änderungszeit für die in Konflikt stehende Datei abzurufen %1 @@ -3879,23 +3037,19 @@ Beachten Sie, dass die Verwendung von Befehlszeilenoptionen für die Protokollie OCC::OwncloudSetupPage - The link to your %1 web interface when you open it in the browser. %1 will be replaced with the application name Der Link zu Ihrer %1 Webseite, wenn Sie diese im Browser öffnen. - &Next > &Weiter > - Server address does not seem to be valid Serveradresse scheint nicht gültig zu sein - Could not load certificate. Maybe wrong password? Das Zertifikat konnte nicht geladen werden. Vielleicht ein falsches Passwort? @@ -3903,159 +3057,126 @@ Beachten Sie, dass die Verwendung von Befehlszeilenoptionen für die Protokollie OCC::OwncloudSetupWizard - <font color="green">Successfully connected to %1: %2 version %3 (%4)</font><br/><br/> <font color="green">Erfolgreich mit %1 verbunden: %2 Version %3 (%4)</font><br/><br/> - Failed to connect to %1 at %2:<br/>%3 Die Verbindung zu %1 auf %2 konnte nicht hergestellt werden: <br/>%3 - Timeout while trying to connect to %1 at %2. Zeitüberschreitung beim Verbindungsversuch mit %1 unter %2. - Access forbidden by server. To verify that you have proper access, <a href="%1">click here</a> to access the service with your browser. Zugang vom Server nicht erlaubt. <a href="%1">Klicken Sie hier</a> zum Zugriff auf den Dienst mithilfe Ihres Browsers, so dass Sie sicherstellen können, dass Ihr Zugang ordnungsgemäß funktioniert. - Invalid URL Ungültige URL - Trying to connect to %1 at %2 … Verbindungsversuch mit %1 unter %2 … - The authenticated request to the server was redirected to "%1". The URL is bad, the server is misconfigured. Die Authentifizierungs-Anfrage an den Server wurde weitergeleitet an "%1". Diese Adresse ist ungültig, der Server ist falsch konfiguriert. - There was an invalid response to an authenticated WebDAV request Ungültige Antwort auf eine WebDAV-Authentifizierungs-Anfrage - Local sync folder %1 already exists, setting it up for sync.<br/><br/> Lokaler Sync-Ordner %1 existiert bereits, aktiviere Synchronistation.<br/><br/> - Creating local sync folder %1 … Lokaler Ordner %1 für die Synchronisierung wird erstellt … - OK OK - failed. fehlgeschlagen. - Could not create local folder %1 Der lokale Ordner %1 konnte nicht erstellt werden - No remote folder specified! Kein entfernter Ordner angegeben! - Error: %1 Fehler: %1 - creating folder on Nextcloud: %1 Erstelle Ordner auf Nextcloud: %1 - Remote folder %1 created successfully. Entfernter Ordner %1 erstellt. - The remote folder %1 already exists. Connecting it for syncing. Der Ordner %1 ist auf dem Server bereits vorhanden. Verbinde zur Synchronisierung. - - The folder creation resulted in HTTP error code %1 Das Erstellen des Ordners erzeugte den HTTP-Fehler-Code %1 - The remote folder creation failed because the provided credentials are wrong!<br/>Please go back and check your credentials.</p> Die Erstellung des entfernten Ordners ist fehlgeschlagen, weil die angegebenen Zugangsdaten falsch sind. <br/>Bitte gehen Sie zurück und überprüfen Sie die Zugangsdaten.</p> - <p><font color="red">Remote folder creation failed probably because the provided credentials are wrong.</font><br/>Please go back and check your credentials.</p> <p><font color="red">Die Erstellung des entfernten Ordners ist fehlgeschlagen, vermutlich sind die angegebenen Zugangsdaten falsch.</font><br/>Bitte gehen Sie zurück und überprüfen Sie Ihre Zugangsdaten.</p> - - Remote folder %1 creation failed with error <tt>%2</tt>. Entfernter Ordner %1 konnte mit folgendem Fehler nicht erstellt werden: <tt>%2</tt>. - A sync connection from %1 to remote directory %2 was set up. Eine Synchronisierungsverbindung für Ordner %1 zum entfernten Ordner %2 wurde eingerichtet. - Successfully connected to %1! Erfolgreich mit %1 verbunden! - Connection to %1 could not be established. Please check again. Die Verbindung zu %1 konnte nicht hergestellt werden. Bitte prüfen Sie die Einstellungen erneut. - Folder rename failed Ordner umbenennen fehlgeschlagen. - Cannot remove and back up the folder because the folder or a file in it is open in another program. Please close the folder or file and hit retry or cancel the setup. Der Ordner kann nicht entfernt und gesichert werden, da der Ordner oder einer seiner Dateien in einem anderen Programm geöffnet ist. Bitte schließen Sie den Ordner oder die Datei und versuchen Sie es erneut oder beenden Sie die Installation. - <font color="green"><b>File Provider-based account %1 successfully created!</b></font> <font color="green"><b>Dateianbieter-basiertes Konto %1 erstellt!</b></font> - Virtual files enabled Virtuelle Dateien aktiviert - Your account is now syncing with virtual files support. This means that all your files are online-only by default, and will be downloaded on-demand when you open them. You may find your files under the <b>Locations</b> section of the Finder sidebar. Ihr Konto wird jetzt mithilfe virtueller Dateien synchronisiert. Das bedeutet, dass alle Ihre Dateien standardmäßig online gespeichert sind und erst dann heruntergeladen werden, wenn Sie sie öffnen. Sie finden Ihre Dateien unter dem Abschnitt <b>Speicherorte</b> in der Finder-Seitenleiste. - <font color="green"><b>Local sync folder %1 successfully created!</b></font> <font color="green"><b>Lokaler Sync-Ordner %1 erstellt!</b></font> @@ -4063,27 +3184,22 @@ Beachten Sie, dass die Verwendung von Befehlszeilenoptionen für die Protokollie OCC::OwncloudWizard - Add %1 account %1 Konto hinzufügen - Skip folders configuration Ordner-Konfiguration überspringen - Cancel Abbrechen - Enable experimental feature? Experimentelle Funktion aktivieren? - When the "virtual files" mode is enabled no files will be downloaded initially. Instead, a tiny "%1" file will be created for each file that exists on the server. The contents can be downloaded by running these files or by using their context menu. The virtual files mode is mutually exclusive with selective sync. Currently unselected folders will be translated to online-only folders and your selective sync settings will be reset. @@ -4100,12 +3216,10 @@ Wenn Sie in diesen Modus wechseln, wird eine aktuell laufende Synchronisierung a Dies ist ein neuer, experimenteller Modus. Wenn Sie sich entscheiden, ihn zu verwenden, melden Sie bitte alle auftretenden Probleme. - Enable experimental placeholder mode Experimentellen Platzhaltermodus aktivieren - Stay safe Bleiben Sie sicher @@ -4113,12 +3227,10 @@ Dies ist ein neuer, experimenteller Modus. Wenn Sie sich entscheiden, ihn zu ver OCC::PasswordInputDialog - Password for share required Passwort für die Freigabe erforderlich - Please enter a password for your share: Bitte vergeben sie für die Freigabe ein Passwort: @@ -4126,7 +3238,6 @@ Dies ist ein neuer, experimenteller Modus. Wenn Sie sich entscheiden, ihn zu ver OCC::PollJob - Invalid JSON reply from the poll URL Ungültige JSON-Antwort von der Poll-URL @@ -4134,252 +3245,165 @@ Dies ist ein neuer, experimenteller Modus. Wenn Sie sich entscheiden, ihn zu ver OCC::ProcessDirectoryJob - Symbolic links are not supported in syncing. Symbolische Verknüpfungen werden bei der Synchronisierung nicht unterstützt. - File is listed on the ignore list. Die Datei ist in der Ignorierliste aufgeführt. - File names ending with a period are not supported on this file system. Dateinamen, die mit einem Punkt enden, werden von diesem Dateisystem nicht unterstützt. - - Folder names containing the character "%1" are not supported on this file system. - %1: the invalid character - Ordnernamen, die das Zeichen "%1" enthalten, werden von diesem Dateisystem nicht unterstützt. - - - - File names containing the character "%1" are not supported on this file system. - %1: the invalid character - Dateinamen, die das Zeichen "%1" enthalten, werden von diesem Dateisystem nicht unterstützt. - - - - Folder name contains at least one invalid character - Ordnername enthält mindestens ein ungültiges Zeichen - - - - File name contains at least one invalid character - Der Dateiname enthält mindestens ein ungültiges Zeichen - - - - Folder name is a reserved name on this file system. - Der Ordnername ist ein reservierter Name in diesem Dateisystem. - - - - File name is a reserved name on this file system. - Der Dateiname ist ein reservierter Name auf diesem Dateisystem. - - - Filename contains trailing spaces. Dateiname enthält Leerzeichen am Ende. - - - - Cannot be renamed or uploaded. Kann nicht umbenannt oder hochgeladen werden. - Folder name of folder entity to use when warning about invalid name Ordner - File name of folder entity to use when warning about invalid name Datei - %1 name containing the character "%2" is not supported on this file system. folder or file impossible to sync due to an invalid name, placeholders will be file or folder and the invalid character %1 Namen, die das Zeichen "%2" enthalten, werden von diesem Dateisystem nicht unterstützt. - Filename contains leading spaces. Dateiname enthält Leerzeichen am Anfang. - %1 name contains at least one invalid character %1 Der Name enthält mindestens ein ungültiges Zeichen - %1 name is a reserved name on this file system. %1 Der Name ist in diesem Dateisystem ein reservierter Name. - Filename contains leading and trailing spaces. Dateiname enthält Leerzeichen am Anfang und am Ende. - Filename is too long. Der Dateiname ist zu lang. - File/Folder is ignored because it's hidden. Datei/Ordner wird ignoriert, weil sie unsichtbar ist. - Stat failed. Stat fehlgeschlagen. - Conflict: Server version downloaded, local copy renamed and not uploaded. Konflikt: Serverversion heruntergeladen, lokale Kopie umbenannt und nicht hochgeladen. - Case Clash Conflict: Server file downloaded and renamed to avoid clash. Problem der Groß- und Kleinschreibung: Serverdatei heruntergeladen und umbenannt, um Konflikte zu vermeiden. - The filename cannot be encoded on your file system. Der Dateiname kann auf Ihrem Dateisystem nicht entschlüsselt werden. - The filename is blacklisted on the server. Der Dateiname steht auf dem Server auf einer schwarzen Liste. - Reason: the entire filename is forbidden. Grund: Der gesamte Dateiname ist unzulässig. - Reason: the filename has a forbidden base name (filename start). Grund: Der Dateiname hat einen unzulässigen Basisnamen (Beginn des Dateinamens). - Reason: the file has a forbidden extension (.%1). Grund: Die Datei hat eine unzulässige Erweiterung (.%1). - Reason: the filename contains a forbidden character (%1). Grund: Der Dateiname enthält ein unzulässiges Zeichen (%1). - File has extension reserved for virtual files. Die Endung der Datei ist für virtuelle Dateien reserviert. - size Größe - permission Berechtigung - file id Datei-ID - Server reported no %1 Server meldet keine %1 - Cannot sync due to invalid modification time Synchronisierung wegen ungültiger Änderungszeit nicht möglich - - Upload of %1 exceeds %2 of space left in personal files. - Hochladen von %1 übersteigt %2 des in den persönlichen Dateien verfügbaren Speicherplatzes. - - - - Upload of %1 exceeds %2 of space left in folder %3. - Hochladen von %1 übersteigt %2 des in dem Ordner %3 verfügbaren Speicherplatzes. - - - Could not upload file, because it is open in "%1". Datei konnte nicht hochgeladen werden, da sie in "%1" geöffnet ist. - Error while deleting file record %1 from the database Fehler beim Löschen des Dateidatensatzes %1 aus der Datenbank - - Moved to invalid target, restoring Auf ungültiges Ziel verschoben, wiederherstellen. - Cannot modify encrypted item because the selected certificate is not valid. Das verschlüsselte Element kann nicht geändert werden, da das ausgewählte Zertifikat nicht gültig ist. - Ignored because of the "choose what to sync" blacklist Ignoriert wegen der "Choose what to sync"-Blacklist - - Not allowed because you don't have permission to add subfolders to that folder Nicht erlaubt, da Sie nicht die Berechtigung haben, Unterordner zu diesem Ordner hinzuzufügen. - Not allowed because you don't have permission to add files in that folder Nicht erlaubt, da Sie keine Berechtigung zum Hinzufügen von Dateien in diesen Ordner haben. - Not allowed to upload this file because it is read-only on the server, restoring Das Hochladen dieser Datei ist nicht erlaubt, da die Datei auf dem Server schreibgeschützt ist. Wiederherstellen. - Not allowed to remove, restoring Entfernen nicht erlaubt, wiederherstellen. - Error while reading the database Fehler beim Lesen der Datenbank - Server replied with an error while reading directory "%1" : %2 Der Server hat während des Lesens des Verzeichnisses "%1" mit einem Fehler geantwortet: %2 @@ -4387,38 +3411,26 @@ Dies ist ein neuer, experimenteller Modus. Wenn Sie sich entscheiden, ihn zu ver OCC::PropagateDirectory - Could not delete file %1 from local DB Datei %1 konnte nicht aus der lokalen Datenbank gelöscht werden - Error updating metadata due to invalid modification time Fehler beim Aktualisieren der Metadaten aufgrund einer ungültigen Änderungszeit - - - - - - The folder %1 cannot be made read-only: %2 Der Ordner %1 kann nicht schreibgeschützt werden: %2 - - unknown exception Unbekannter Ausnahmefehler - Error updating metadata: %1 Fehler beim Aktualisieren der Metadaten: %1 - File is currently in use Datei ist aktuell in Benutzung @@ -4426,75 +3438,58 @@ Dies ist ein neuer, experimenteller Modus. Wenn Sie sich entscheiden, ihn zu ver OCC::PropagateDownloadFile - Could not get file %1 from local DB Datei %1 konnte nicht aus der lokalen Datenbank abgerufen werden - File %1 cannot be downloaded because encryption information is missing. Die Datei %1 kann nicht heruntergeladen werden, da die Verschlüsselungsinformationen fehlen. - - Could not delete file record %1 from local DB Der Dateidatensatz %1 konnte nicht aus der lokalen Datenbank gelöscht werden - File %1 can not be downloaded because of a local file name clash! Die Datei %1 kann aufgrund eines Konfliktes mit dem lokalen Dateinamen nicht herunter geladen werden! - The download would reduce free local disk space below the limit Das Herunterladen würde den lokalen freien Speicherplatz unter die Grenze reduzieren - Free space on disk is less than %1 Der freie Speicher auf der Festplatte ist weniger als %1 - File was deleted from server Die Datei wurde vom Server gelöscht - The file could not be downloaded completely. Die Datei konnte nicht vollständig heruntergeladen werden. - The downloaded file is empty, but the server said it should have been %1. Die heruntergeladene Datei ist leer, obwohl der Server %1 als Größe übermittelt hat. - - File %1 has invalid modified time reported by server. Do not save it. Datei %1 hat eine ungültige Änderungszeit, die vom Server gemeldet wurde. Speichern Sie sie nicht. - File %1 downloaded but it resulted in a local file name clash! Datei %1 heruntergeladen, aber dies führte zu einem lokalen Dateinamenskonflikt! - Error updating metadata: %1 Fehler beim Aktualisieren der Metadaten: %1 - The file %1 is currently in use Die Datei %1 ist aktuell in Benutzung - - File has changed since discovery Datei ist seit der Entdeckung geändert worden @@ -4502,12 +3497,10 @@ Dies ist ein neuer, experimenteller Modus. Wenn Sie sich entscheiden, ihn zu ver OCC::PropagateItemJob - ; Restoration Failed: %1 ; Wiederherstellung fehlgeschlagen: %1 - A file or folder was removed from a read only share, but restoring failed: %1 Eine Datei oder ein Ordner wurde von einer Nur-Lese-Freigabe wiederhergestellt, aber die Wiederherstellung ist mit folgendem Fehler fehlgeschlagen: %1 @@ -4515,39 +3508,30 @@ Dies ist ein neuer, experimenteller Modus. Wenn Sie sich entscheiden, ihn zu ver OCC::PropagateLocalMkdir - could not delete file %1, error: %2 Konnte Datei %1 nicht löschen. Fehler: %2 - Folder %1 cannot be created because of a local file or folder name clash! Ordner %1 kann aufgrund einer lokalen Datei- oder Ordnernamenskollision nicht erstellt werden! - Could not create folder %1 Ordner %1 konnte nicht erstellt werden - - - The folder %1 cannot be made read-only: %2 Der Ordner %1 kann nicht schreibgeschützt werden: %2 - unknown exception Unbekannter Ausnahmefehler - Error updating metadata: %1 Fehler beim Aktualisieren der Metadaten: %1 - The file %1 is currently in use Die Datei %1 ist aktuell in Benutzung @@ -4555,19 +3539,14 @@ Dies ist ein neuer, experimenteller Modus. Wenn Sie sich entscheiden, ihn zu ver OCC::PropagateLocalRemove - Could not remove %1 because of a local file name clash %1 kann aufgrund eines Konfliktes mit dem lokalen Dateinamen nicht entfernt werden - - - Temporary error when removing local item removed from server. Vorübergehender Fehler beim Entfernen eines vom Server entfernten lokalen Objekts. - Could not delete file record %1 from local DB Der Dateidatensatz %1 konnte nicht aus der lokalen Datenbank gelöscht werden @@ -4575,49 +3554,38 @@ Dies ist ein neuer, experimenteller Modus. Wenn Sie sich entscheiden, ihn zu ver OCC::PropagateLocalRename - Folder %1 cannot be renamed because of a local file or folder name clash! Ordner %1 kann aufgrund einer lokalen Datei- oder Ordnernamenskollision nicht umbenannt werden! - File %1 downloaded but it resulted in a local file name clash! Datei %1 heruntergeladen, aber dies führte zu einem lokalen Dateinamenskonflikt! - - Could not get file %1 from local DB Datei %1 konnte nicht aus der lokalen Datenbank abgerufen werden - - Error setting pin state Fehler beim Setzen des PIN-Status - Error updating metadata: %1 Fehler beim Aktualisieren der Metadaten: %1 - The file %1 is currently in use Die Datei %1 ist aktuell in Benutzung - Failed to propagate directory rename in hierarchy Die Umbenennung des Verzeichnisses in der Hierarchie konnte nicht weitergegeben werden - Failed to rename file Datei konnte nicht umbenannt werden - Could not delete file record %1 from local DB Der Dateidatensatz %1 konnte nicht aus der lokalen Datenbank gelöscht werden @@ -4625,12 +3593,10 @@ Dies ist ein neuer, experimenteller Modus. Wenn Sie sich entscheiden, ihn zu ver OCC::PropagateRemoteDelete - Wrong HTTP code returned by server. Expected 204, but received "%1 %2". Es wurde ein falscher HTTP-Status-Code vom Server gesendet. Erwartet wurde 204, aber gesendet wurde "%1 %2". - Could not delete file record %1 from local DB Der Dateidatensatz %1 konnte nicht aus der lokalen Datenbank gelöscht werden @@ -4638,7 +3604,6 @@ Dies ist ein neuer, experimenteller Modus. Wenn Sie sich entscheiden, ihn zu ver OCC::PropagateRemoteDeleteEncryptedRootFolder - Wrong HTTP code returned by server. Expected 204, but received "%1 %2". Falscher HTTP-Code vom Server zurückgegeben. 204 erwartet, aber "%1 %2" erhalten. @@ -4646,22 +3611,18 @@ Dies ist ein neuer, experimenteller Modus. Wenn Sie sich entscheiden, ihn zu ver OCC::PropagateRemoteMkdir - Wrong HTTP code returned by server. Expected 201, but received "%1 %2". Es wurde ein falscher HTTP-Status-Code vom Server gesendet. Erwartet wurde 201, aber gesendet wurde "%1 %2". - Failed to encrypt a folder %1 Ordner konnte nicht verschlüsselt werden %1 - Error writing metadata to the database: %1 Fehler beim Schreiben der Metadaten in die Datenbank: %1 - The file %1 is currently in use Die Datei %1 ist aktuell in Benutzung @@ -4669,44 +3630,34 @@ Dies ist ein neuer, experimenteller Modus. Wenn Sie sich entscheiden, ihn zu ver OCC::PropagateRemoteMove - Could not rename %1 to %2, error: %3 Konnte %1 nicht nach %2 umbenennen. Fehler: %3 - - Error updating metadata: %1 Fehler beim Aktualisieren der Metadaten: %1 - - The file %1 is currently in use Die Datei %1 ist aktuell in Benutzung - Wrong HTTP code returned by server. Expected 201, but received "%1 %2". Es wurde ein falscher HTTP-Status-Code vom Server gesendet. Erwartet wurde 201, aber gesendet wurde "%1 %2". - Could not get file %1 from local DB Datei %1 konnte nicht aus der lokalen Datenbank abgerufen werden - Could not delete file record %1 from local DB Der Dateidatensatz %1 konnte nicht aus der lokalen Datenbank gelöscht werden - Error setting pin state Fehler beim Setzen des PIN-Status - Error writing metadata to the database Fehler beim Schreiben der Metadaten in die Datenbank @@ -4714,60 +3665,46 @@ Dies ist ein neuer, experimenteller Modus. Wenn Sie sich entscheiden, ihn zu ver OCC::PropagateUploadFileCommon - File %1 cannot be uploaded because another file with the same name, differing only in case, exists Die Datei %1 kann nicht hochgeladen werden, da eine andere Datei mit dem selben Namen, nur unterschiedlicher Groß-/Kleinschreibung, existiert - - - File %1 has invalid modification time. Do not upload to the server. Die Datei %1 hat eine ungültige Änderungszeit. Nicht auf den Server hochladen. - Local file changed during syncing. It will be resumed. Lokale Datei hat sich während der Synchronisierung geändert. Die Synchronisierung wird wiederaufgenommen. - Local file changed during sync. Eine lokale Datei wurde während der Synchronisierung geändert. - Failed to unlock encrypted folder. Verschlüsselter Ordner konnte nicht entsperrt werden. - Unable to upload an item with invalid characters Ein Element mit ungültigen Zeichen kann nicht hochgeladen werden - Error updating metadata: %1 Fehler beim Aktualisieren der Metadaten: %1 - The file %1 is currently in use Die Datei %1 ist aktuell in Benutzung - - Upload of %1 exceeds the quota for the folder Das Hochladen von %1 überschreitet das Speicherkontingent des Ordners - Failed to upload encrypted file. Verschlüsselte Datei konnte nicht hochgeladen werden. - File Removed (start upload) %1 Datei entfernt (starte Hochladen) %1 @@ -4775,32 +3712,26 @@ Dies ist ein neuer, experimenteller Modus. Wenn Sie sich entscheiden, ihn zu ver OCC::PropagateUploadFileNG - The local file was removed during sync. Die lokale Datei wurde während der Synchronisierung entfernt. - Local file changed during sync. Eine lokale Datei wurde während der Synchronisierung geändert. - Poll URL missing Poll-URL fehlt - Unexpected return code from server (%1) Unerwarteter Rückgabe-Code Antwort vom Server (%1) - Missing File ID from server Fehlende Datei-ID vom Server - Missing ETag from server Fehlender ETag vom Server @@ -4808,22 +3739,18 @@ Dies ist ein neuer, experimenteller Modus. Wenn Sie sich entscheiden, ihn zu ver OCC::PropagateUploadFileV1 - Poll URL missing Poll-URL fehlt - The local file was removed during sync. Die lokale Datei wurde während der Synchronisierung entfernt. - Local file changed during sync. Eine lokale Datei wurde während der Synchronisierung geändert. - The server did not acknowledge the last chunk. (No e-tag was present) Der Server hat den letzten Block nicht bestätigt. (Kein E-Tag vorhanden) @@ -4831,27 +3758,22 @@ Dies ist ein neuer, experimenteller Modus. Wenn Sie sich entscheiden, ihn zu ver OCC::ProxyAuthDialog - Proxy authentication required Proxy-Authentifzierung erforderlich - Username: Benutzername: - Proxy: Proxy: - The proxy server needs a username and password. Der Proxy-Server benötigt Benutzername und Passwort - Password: Passwort: @@ -4859,7 +3781,6 @@ Dies ist ein neuer, experimenteller Modus. Wenn Sie sich entscheiden, ihn zu ver OCC::SelectiveSyncDialog - Choose What to Sync Zu synchronisierende Elemente auswählen @@ -4867,33 +3788,26 @@ Dies ist ein neuer, experimenteller Modus. Wenn Sie sich entscheiden, ihn zu ver OCC::SelectiveSyncWidget - Loading … Lade … - Deselect remote folders you do not wish to synchronize. Entfernte Ordner abwählen, die nicht synchronisiert werden sollen. - Name Name - Size Größe - - No subfolders currently on the server. Aktuell befinden sich keine Unterordner auf dem Server. - An error occurred while loading the list of sub folders. Es ist ein Fehler während des Ladens der Liste der Unterordner aufgetreten. @@ -4901,7 +3815,6 @@ Dies ist ein neuer, experimenteller Modus. Wenn Sie sich entscheiden, ihn zu ver OCC::ServerNotificationHandler - Reply Antworten @@ -4909,28 +3822,23 @@ Dies ist ein neuer, experimenteller Modus. Wenn Sie sich entscheiden, ihn zu ver OCC::SettingsDialog - Settings Einstellungen - %1 Settings This name refers to the application name e.g Nextcloud %1-Einstellungen - General Allgemein - Network Netzwerk - Account Konto @@ -4938,7 +3846,6 @@ Dies ist ein neuer, experimenteller Modus. Wenn Sie sich entscheiden, ihn zu ver OCC::ShareManager - Error Fehler @@ -4946,47 +3853,38 @@ Dies ist ein neuer, experimenteller Modus. Wenn Sie sich entscheiden, ihn zu ver OCC::ShareModel - %1 days %1 Tage - 1 day 1 Tag - Today Heute - Secure file drop link Sicherer Link zur Dateiablage - Share link Freigabe-Link - Link share Link teilen - Internal link Interner Link - Secure file drop Sichere Dateiablage - Could not find local folder for %1 Lokaler Ordner für %1 nicht gefunden @@ -4994,23 +3892,18 @@ Dies ist ein neuer, experimenteller Modus. Wenn Sie sich entscheiden, ihn zu ver OCC::ShareeModel - - Search globally Global suchen - No results found Keine Ergebnisse gefunden - Global search results Globale Suchergebnisse - %1 (%2) sharee (shareWithAdditionalInfo) %1 (%2) @@ -5019,48 +3912,38 @@ Dies ist ein neuer, experimenteller Modus. Wenn Sie sich entscheiden, ihn zu ver OCC::SocketApi - Context menu share Kontextmenü Freigabe - I shared something with you Ich habe etwas mit Ihnen geteilt - - Share options Freigabeoptionen - Send private link by email … Privaten Link als E-Mail verschicken … - Copy private link to clipboard Privater Link in die Zwischenablage kopiert - Failed to encrypt folder at "%1" Ordner unter "%1" konnte nicht verschlüsselt werden - The account %1 does not have end-to-end encryption configured. Please configure this in your account settings to enable folder encryption. Für das Konto %1 ist keine Ende-zu-Ende-Verschlüsselung konfiguriert. Bitte konfigurieren Sie diese in Ihren Kontoeinstellungen, um die Ordnerverschlüsselung zu aktivieren. - Failed to encrypt folder Ordner konnte nicht verschlüsselt werden - Could not encrypt the following folder: "%1". Server replied with error: %2 @@ -5069,105 +3952,86 @@ Server replied with error: %2 Server antwortete mit Fehler: %2 - Folder encrypted successfully Ordner verschlüsselt - The following folder was encrypted successfully: "%1" Der folgende Ordner wurde verschlüsselt: "%1" - Select new location … Neuen Ort auswählen … - - Activity Aktivität - Leave this share Freigabe verlassen - Resharing this file is not allowed Weiterteilen dieser Datei ist nicht erlaubt - Resharing this folder is not allowed Weiterteilen dieses Ordners ist nicht erlaubt - Encrypt Verschlüsseln - Lock file Datei sperren - Unlock file Datei entsperren - Locked by %1 Gesperrt von %1 - Expires in %1 minutes remaining time before lock expires - Läuft ab in %1 MinuteLäuft ab in %1 Minuten + + Läuft ab in %1 Minute + Läuft ab in %1 Minuten + - Resolve conflict … Konflikt lösen… - Move and rename … Verschieben und umbenennen … - Move, rename and upload … Verschieben, umbenennen und hochladen … - Delete local changes Lokale Änderungen löschen - Move and upload … Verschieben und hochladen … - Delete Löschen - Copy internal link Internen Link kopieren - - Open in browser Im Browser öffnen @@ -5175,124 +4039,100 @@ Server antwortete mit Fehler: %2 OCC::SslButton - <h3>Certificate Details</h3> <h3>Zertifikatdetails</h3> - Common Name (CN): Gemeinsamer Name (CN): - Subject Alternative Names: Subject Alternative Names: - Organization (O): Organisation (O): - Organizational Unit (OU): Organisationseinheit (OU): - State/Province: Staat/Provinz: - Country: Land: - Serial: Seriennummer: - <h3>Issuer</h3> <h3>Aussteller</h3> - Issuer: Aussteller: - Issued on: Ausgestellt am: - Expires on: Ablaufdatum: - <h3>Fingerprints</h3> <h3>Fingerabdrücke</h3> - SHA-256: SHA-256: - SHA-1: SHA-1: - <p><b>Note:</b> This certificate was manually approved</p> <p><b>Hinweis:</b> Dieses Zertifikat wurde manuell bestätigt</p> - %1 (self-signed) %1 (selbst signiert) - %1 %1 - This connection is encrypted using %1 bit %2. Diese Verbindung ist verschlüsselt mit %1 Bit %2. - Server version: %1 Serverversion: %1 - No support for SSL session tickets/identifiers Keine Unterstützung für SSL session tickets - Certificate information: Zertifikatsinformation: - The connection is not secure Die Verbindung ist nicht sicher - This connection is NOT secure as it is not encrypted. Diese Verbindung ist NICHT sicher, da diese nicht verschlüsselt ist. @@ -5302,82 +4142,62 @@ Server antwortete mit Fehler: %2 OCC::SslErrorDialog - Trust this certificate anyway Diesem Zertifikat trotzdem vertrauen - Untrusted Certificate Nicht vertrauenswürdiges Zertifikat - Cannot connect securely to <i>%1</i>: Kann keine sichere Verbindung zu <i>%1</i> herstellen: - Additional errors: Zusätzliche Fehler: - with Certificate %1 mit Zertifikat %1 - - - &lt;not specified&gt; &lt;nicht angegeben&gt; - - Organization: %1 Organisation: %1 - - Unit: %1 Einheit: %1 - - Country: %1 Land: %1 - Fingerprint (SHA1): <tt>%1</tt> Fingerabdruck (SHA1): <tt>%1</tt> - Fingerprint (SHA-256): <tt>%1</tt> Fingerabdruck (SHA-256): <tt>%1</tt> - Fingerprint (SHA-512): <tt>%1</tt> Fingerabdruck (SHA-512): <tt>%1</tt> - Effective Date: %1 Datum des Inkrafttretens: %1 - Expiration Date: %1 Ablaufdatum: %1 - Issuer: %1 Aussteller: %1 @@ -5385,73 +4205,59 @@ Server antwortete mit Fehler: %2 OCC::SyncEngine - %1 (skipped due to earlier error, trying again in %2) %1 (übersprungen aufgrund des früheren Fehlers, erneuter Versuch in %2) - Only %1 are available, need at least %2 to start Placeholders are postfixed with file sizes using Utility::octetsToString() Nur %1 sind verfügbar. Zum Beginnen werden mindestens %2 benötigt. - Unable to open or create the local sync database. Make sure you have write access in the sync folder. Öffnen oder erstellen der Sync-Datenbank nicht möglich. Bitte sicherstellen, dass Schreibrechte für den zu synchronisierenden Ordner existieren. - Disk space is low: Downloads that would reduce free space below %1 were skipped. Der freie Speicherplatz wird knapp: Downloads, die den freien Speicher unter %1 reduzieren, wurden ausgelassen. - There is insufficient space available on the server for some uploads. Auf dem Server ist für einige Dateien zum Hochladen nicht genug Platz. - Unresolved conflict. Ungelöster Konflikt. - Could not update file: %1 Datei konnte nicht aktualisiert werden: %1 - Could not update virtual file metadata: %1 Metadaten der virtuellen Datei konnten nicht aktualisiert werden: %1 - Could not update file metadata: %1 Die Metadaten der Datei konnten nicht aktualisiert werden: %1 - Could not set file record to local DB: %1 Der Dateidatensatz konnte nicht in die lokale Datenbank eingestellt werden: %1 - Using virtual files with suffix, but suffix is not set Virtuelle Dateien mit Endung verwenden, aber Endung ist nicht gesetzt. - Unable to read the blacklist from the local database Fehler beim Einlesen der Blacklist aus der lokalen Datenbank - Unable to read from the sync journal. Fehler beim Einlesen des Synchronisierungsprotokolls. - Cannot open the sync journal Synchronisierungsprotokoll kann nicht geöffnet werden @@ -5459,75 +4265,54 @@ Server antwortete mit Fehler: %2 OCC::SyncStatusSummary - - Offline Offline - - You need to accept the terms of service - Die Nutzungsbedingungen müssen bestätigt werden - - - - - All synced! Alles synchronisiert! - Some files couldn't be synced! Einige Dateien konnten nicht synchronisiert werden! - See below for errors Warnungen siehe unten - Checking folder changes Prüfe Ordneränderungen - Syncing changes Synchronisiere Änderungen - Sync paused Synchronisierung pausiert - Some files could not be synced! Einige Dateien konnten nicht synchronisiert werden! - See below for warnings Warnungen siehe unten - Syncing Synchronisiere - %1 of %2 · %3 left %1 von %2 · %3 verbleiben - %1 of %2 %1 von %2 - Syncing file %1 of %2 Synchronisiere Datei %1 von %2 @@ -5535,54 +4320,42 @@ Server antwortete mit Fehler: %2 OCC::Systray - Download Herunterladen - Add account Konto hinzufügen - Open main dialog Hauptfenster öffnen - - Pause sync Synchronisierung pausieren - - Resume sync Synchronisierung fortsetzen - Settings Einstellungen - Help Hilfe - Exit %1 %1 beenden - Pause sync for all Synchronisierung für alle pausieren - Resume sync for all Synchronisierung für alle fortsetzen @@ -5590,27 +4363,22 @@ Server antwortete mit Fehler: %2 OCC::TermsOfServiceCheckWidget - Waiting for terms to be accepted Es wird auf die Bestätigung der Nutzungsbedingungen gewartet - Polling Abfrage - Link copied to clipboard. Link in die Zwischenablage kopiert. - Open Browser Browser öffnen - Copy Link Link kopieren @@ -5618,18 +4386,15 @@ Server antwortete mit Fehler: %2 OCC::Theme - %1 Desktop Client Version %2 (%3) %1 is application name. %2 is the human version string. %3 is the operating system name. %1 Desktop-Client Version %2 (%3) - <p><small>Using virtual files plugin: %1</small></p> <p><small>Plugin für virtuelle Dateien: %1</small></p> - <p>This release was supplied by %1.</p> <p>Diese Version wird von %1 bereitgestellt</p>. @@ -5637,22 +4402,18 @@ Server antwortete mit Fehler: %2 OCC::UnifiedSearchResultsListModel - Failed to fetch providers. Anbieter konnten nicht abgerufen werden. - Failed to fetch search providers for '%1'. Error: %2 Suchanbieter für '%1' konnte nicht abgerufen werden. Fehler: %2 - Search has failed for '%2'. Suche nach '%2' fehlgeschlagen. - Search has failed for '%1'. Error: %2 Suche nach '%1' fehlgeschlagen. Fehler: %2 @@ -5660,17 +4421,14 @@ Server antwortete mit Fehler: %2 OCC::UpdateE2eeFolderMetadataJob - Failed to update folder metadata. Ordner-Metadaten konnten nicht aktualisiert werden - Failed to unlock encrypted folder. Verschlüsselter Ordner konnte nicht entsperrt werden. - Failed to finalize item. Element konnte nicht fertiggestellt werden @@ -5678,35 +4436,22 @@ Server antwortete mit Fehler: %2 OCC::UpdateE2eeFolderUsersMetadataJob - - - - - - - - - Error updating metadata for a folder %1 Fehler beim Aktualisieren der Metadaten für einen Ordner %1 - Could not fetch public key for user %1 Öffentlicher Schlüssel für den Benutzer %1 konnte nicht abgerufen werden - Could not find root encrypted folder for folder %1 Verschlüsselter Stammordner für den Ordner %1 nicht gefunden - Could not add or remove user %1 to access folder %2 Benutzer %1 konnte für den Zugriff auf Ordner %2 nicht hinzugefügt oder entfernt werden - Failed to unlock a folder. Ordner konnte nicht entsperrt werden @@ -5714,43 +4459,37 @@ Server antwortete mit Fehler: %2 OCC::User - End-to-end certificate needs to be migrated to a new one Das Ende-zu-Ende-Zertifikat muss auf ein neues migriert werden - Trigger the migration Starten der Migration - %n notification(s) - %n Benachrichtigung%n Benachrichtigungen + + %n Benachrichtigung + %n Benachrichtigungen + - Retry all uploads Alle Uploads neu starten - - Resolve conflict Konflikt lösen - Rename file Datei umbenennen - Open Nextcloud Assistant in browser Nextcloud Assistant im Browser öffnen - Open Nextcloud Talk in browser Nextcloud-Talk im Browser öffnen @@ -5758,22 +4497,18 @@ Server antwortete mit Fehler: %2 OCC::UserModel - Confirm Account Removal Kontenentfernung bestätigen - <p>Do you really want to remove the connection to the account <i>%1</i>?</p><p><b>Note:</b> This will <b>not</b> delete any files.</p> <p>Möchten Sie wirklich die Verbindung zum Konto <i>%1</i> entfernen?</p><p><b>Hinweis:</b> Es werden <b>keine</b> Dateien gelöscht.</p> - Remove connection Verbindung entfernen - Cancel Abbrechen @@ -5781,129 +4516,98 @@ Server antwortete mit Fehler: %2 OCC::UserStatusSelectorModel - Could not fetch predefined statuses. Make sure you are connected to the server. Vordefinierte Status konnten nicht abgerufen werden. Stellen Sie bitte sicher, dass Sie mit dem Server verbunden sind. - Could not fetch status. Make sure you are connected to the server. Benutzerstatus konnte nicht abgerufen werden. Bitte sicherstellen, dass Sie mit dem Server verbunden sind. - Status feature is not supported. You will not be able to set your status. Benutzerstatus-Funktion wird nicht unterstützt. Benutzerstatus kann nicht gesetzt werden. - Emojis are not supported. Some status functionality may not work. Emoji-Funktion wird nicht unterstützt. Einige Benutzerstatus-Funktionen funktionieren unter Umständen nicht. - Could not set status. Make sure you are connected to the server. Benutzerstatus konnte nicht gesetzt werden. Bitte sicherstellen, dass eine Verbindung mit dem Server besteht. - Could not clear status message. Make sure you are connected to the server. Statusnachricht konnte nicht gelöscht werden. Bitte sicherstellen, dass eine Verbindung mit dem Server besteht. - - Don't clear Nicht löschen - 30 minutes 30 Minuten - - 1 hour 1 Stunde - 4 hours 4 Stunden - - Today Heute - - This week Diese Woche - Less than a minute Weniger als eine Minute - 1 minute 1 Minute - %1 minutes - %1 Minute%1 Minuten + + %1 Minute + %1 Minuten + - %1 hours - %1 Stunde%1 Stunden + + %1 Stunde + %1 Stunden + - 1 day 1 Tag - %1 days - %1 Tag%1 Tage - - - - %n minute(s) - %n Minute%n Minuten - - - - %n hour(s) - %n Stunde%n Stunden - - - - %n day(s) - %n Tag%n Tage + + %1 Tag + %1 Tage + OCC::Vfs - Please choose a different location. %1 is a drive. It doesn't support virtual files. Bitte wählen Sie einen anderen Speicherort. %1 ist ein Laufwerk. Es unterstützt keine virtuellen Dateien. - Please choose a different location. %1 isn't a NTFS file system. It doesn't support virtual files. Bitte wählen Sie einen anderen Speicherort. %1 ist kein NTFS-Dateisystem. Es unterstützt keine virtuellen Dateien. - Please choose a different location. %1 is a network drive. It doesn't support virtual files. Bitte wählen Sie einen anderen Speicherort. %1 ist ein Netzlaufwerk. Es unterstützt keine virtuellen Dateien. @@ -5911,37 +4615,30 @@ Server antwortete mit Fehler: %2 OCC::VfsDownloadErrorDialog - Download error Fehler beim Herunterladen - Error downloading Fehler beim Herunterladen - could not be downloaded Konnte nicht heruntergeladen werden - > More details > Weitere Details - More details Weitere Details - Error downloading %1 Fehler beim Herunterladen von %1 - %1 could not be downloaded. %1 konnte nicht heruntergeladen werden. @@ -5949,8 +4646,6 @@ Server antwortete mit Fehler: %2 OCC::VfsSuffix - - Error updating metadata due to invalid modification time Fehler beim Aktualisieren der Metadaten aufgrund einer ungültigen Änderungszeit @@ -5958,8 +4653,6 @@ Server antwortete mit Fehler: %2 OCC::VfsXAttr - - Error updating metadata due to invalid modification time Fehler beim Aktualisieren der Metadaten aufgrund einer ungültigen Änderungszeit @@ -5967,12 +4660,10 @@ Server antwortete mit Fehler: %2 OCC::WebEnginePage - Invalid certificate detected Ungültiges Zertifikat gefunden - The host "%1" provided an invalid certificate. Continue? Der Server "%1" hat ein ungültiges Zertifikat. Fortsetzen? @@ -5980,7 +4671,6 @@ Server antwortete mit Fehler: %2 OCC::WebFlowCredentials - You have been logged out of your account %1 at %2. Please login again. Sie wurden von Ihrem Konto %1 als %2 abgemeldet. Bitte melden Sie sich erneut an. @@ -5988,42 +4678,34 @@ Server antwortete mit Fehler: %2 OCC::WelcomePage - Form Formular - Log in Anmelden - Sign up with provider Mit Provider anmelden - Keep your data secure and under your control Halten Sie Ihre Daten sicher und unter Ihrer Kontrolle - Secure collaboration & file exchange Sichere Zusammenarbeit & Dateiaustausch - Easy-to-use web mail, calendaring & contacts Einfach zu bedienende Webmail, Kalender & Kontakte - Screensharing, online meetings & web conferences Bildschirmfreigabe, Online-Meetings & Webkonferenzen - Host your own server Eigenen Server betreiben @@ -6031,88 +4713,71 @@ Server antwortete mit Fehler: %2 OCC::ownCloudGui - Please sign in Bitte melden Sie sich an - There are no sync folders configured. Es wurden keine Synchronisierungsordner konfiguriert. - Disconnected from %1 Von %1 getrennt - Unsupported Server Version Nicht unterstütze Serverversion - The server on account %1 runs an unsupported version %2. Using this client with unsupported server versions is untested and potentially dangerous. Proceed at your own risk. Der Server auf Konto %1 verwendet die nicht unterstützte Version %2. Die Verwendung dieses Clients mit nicht unterstützten Serverversionen ist ungetestet und potenziell gefährlich. Die Verwendung erfolgt auf eigene Gefahr. - Terms of service Nutzungsbedingungen - Your account %1 requires you to accept the terms of service of your server. You will be redirected to %2 to acknowledge that you have read it and agrees with it. Für Ihr Konto %1 müssen Sie die Nutzungsbedingungen Ihres Servers akzeptieren. Sie werden weitergeleitet an %2, um zu bestätigen, dass Sie die Nutzungsbedingungen gelesen haben und damit einverstanden sind. - %1: %2 Example text: "Nextcloud: Syncing 25MB (3 minutes left)" (%1 is the folder name to be synced, %2 a status message for that folder) %1: %2 - macOS VFS for %1: Sync is running. macOS VFS für %1: Synchronisierung läuft. - macOS VFS for %1: Last sync was successful. macOS VFS für %1: Letzte Synchronisierung war erfolgreich. - macOS VFS for %1: A problem was encountered. macOS VFS für %1: Es ist ein Problem aufgetreten. - Checking for changes in remote "%1" Nach Änderungen in entfernten "%1" suchen - Checking for changes in local "%1" Nach Änderungen in lokalem "%1" suchen - Disconnected from accounts: Verbindungen zu Konten getrennt: - Account %1: %2 Konto %1: %2 - Account synchronization is disabled Konto-Synchronisierung ist deaktiviert - %1 (%2, %3) %1 (%2, %3) @@ -6120,73 +4785,59 @@ Server antwortete mit Fehler: %2 OwncloudAdvancedSetupPage - Username Benutzername - Local Folder Lokaler Ordner - Choose different folder Anderen Ordner wählen - Server address Serveradresse - Sync Logo Sync-Logo - Synchronize everything from server Alle Daten vom Server synchronisieren - Ask before syncing folders larger than Fragen, bevor Ordner synchronisiert werden. Grenze: - Ask before syncing external storages Fragen, bevor externe Speicher synchronisiert werden - Keep local data Lokale Daten behalten - <html><head/><body><p>If this box is checked, existing content in the local folder will be erased to start a clean sync from the server.</p><p>Do not check this if the local content should be uploaded to the servers folder.</p></body></html> <html><head/><body><p>Wenn diese Option gesetzt ist, werden bestehende Inhalte im lokalen Ordner gelöscht, um eine saubere Synchronisierung nur der Serverdaten zu ermöglichen.</p><p>Wählen Sie diese Option nicht, wenn die lokalen Inhalte auf den Server übertragen werden sollen.</p></body></html> - Erase local folder and start a clean sync Lokalen Ordner löschen und eine saubere Synchronisierung starten - MB Trailing part of "Ask confirmation before syncing folder larger than" MB - Choose what to sync Zu synchronisierende Elemente auswählen - &Local Folder &Lokaler Ordner @@ -6194,12 +4845,10 @@ Server antwortete mit Fehler: %2 OwncloudHttpCredsPage - &Username &Benutzername - &Password &Passwort @@ -6207,23 +4856,18 @@ Server antwortete mit Fehler: %2 OwncloudSetupPage - - TextLabel TextLabel - Logo Logo - Server address Serveradresse - This is the link to your %1 web interface when you open it in the browser. Dies ist der Link zu Ihrer %1 Webseite, wenn Sie diese im Browser öffnen. @@ -6231,97 +4875,88 @@ Server antwortete mit Fehler: %2 QObject - %nd delay in days after an activity - %nd%nd + + %nd + %nd + - in the future in der Zukunft - %nh delay in hours after an activity - %nh%nh + + %nh + %nh + - 1m one minute after activity date and time 1m - %nm delay in minutes after an activity - %nm%nm + + %nm + %nm + - now jetzt - Some time ago Vor einiger Zeit - %1: %2 this displays an error string (%2) for a file %1 %1: %2 - New folder Neuer Ordner - Failed to create debug archive Debug-Archiv konnte nicht erstellt werden - Could not create debug archive in selected location! Es konnte kein Debug-Archiv am ausgewählten Ort erstellt werden! - You renamed %1 Sie haben %1 umbenannt - You deleted %1 Sie haben %1 gelöscht - You created %1 Sie haben %1 erstellt - You changed %1 Sie haben %1 geändert - Synced %1 %1 synchronisiert - Error deleting the file Fehler beim Löschen der Datei - Paths beginning with '#' character are not supported in VFS mode. Pfade, die mit dem Zeichen '#' beginnen, werden im VFS-Modus nicht unterstützt. @@ -6329,38 +4964,34 @@ Server antwortete mit Fehler: %2 ResolveConflictsDialog - Solve sync conflicts Synchronisationskonflikte lösen - %1 files in conflict indicate the number of conflicts to resolve - %1 Dateikonflikt%1 Dateikonflikte + + %1 Dateikonflikt + %1 Dateikonflikte + - Choose if you want to keep the local version, server version, or both. If you choose both, the local file will have a number added to its name. Wählen Sie, ob Sie die lokale Version, die Serverversion oder beide behalten möchten. Wenn Sie beide auswählen, wird dem Namen der lokalen Datei eine Nummer hinzugefügt. - All local versions Alle lokalen Versionen - All server versions Alle Serverversionen - Resolve conflicts Konflikte lösen - Cancel Abbrechen @@ -6368,7 +4999,6 @@ Server antwortete mit Fehler: %2 ShareDelegate - Copied! Kopiert! @@ -6376,83 +5006,66 @@ Server antwortete mit Fehler: %2 ShareDetailsPage - An error occurred setting the share password. Es ist ein Fehler beim Festlegen des Freigabekennworts aufgetreten. - Edit share Freigabe bearbeiten - Share label Freigabe-Label - - Allow upload and editing Hochladen und Bearbeiten erlauben - View only Nur anzeigen - File drop (upload only) Dateien ablegen (nur Hochladen) - Allow resharing Weiterteilen erlauben - Hide download Download verbergen - Password protection Passwortschutz - Set expiration date Ablaufdatum setzen - Note to recipient Notiz an Empfänger - Enter a note for the recipient Eine Notiz für den Empfänger eingeben - Unshare Freigabe aufheben - Add another link Weiteren Link hinzufügen - Share link copied! Freigabelink kopiert! - Copy share link Freigabe-Link kopieren @@ -6460,37 +5073,30 @@ Server antwortete mit Fehler: %2 ShareView - Password required for new share Passwort für neue Freigabe erforderlich - Share password Freigabe-Passwort - Shared with you by %1 Geteilt mit Ihnen von %1 - Expires in %1 Läuft ab in %1 - Sharing is disabled Teilen ist deaktiviert - This item cannot be shared. Dieses Element kann nicht geteilt werden - Sharing is disabled. Teilen ist deaktiviert. @@ -6498,12 +5104,10 @@ Server antwortete mit Fehler: %2 ShareeSearchField - Search for users or groups… Suche nach Benutzern oder Gruppen… - Sharing is not available for this folder Teilen ist für diesen Ordner nicht verfügbar @@ -6511,7 +5115,6 @@ Server antwortete mit Fehler: %2 SyncJournalDb - Failed to connect database. Verbindung zur Datenbank fehlgeschlagen @@ -6519,17 +5122,14 @@ Server antwortete mit Fehler: %2 SyncStatus - Sync now Jetzt synchronisieren - Resolve conflicts Konflikte lösen - Open browser Browser öffnen @@ -6537,12 +5137,10 @@ Server antwortete mit Fehler: %2 TalkReplyTextField - Reply to … Antworten an … - Send reply to chat message Antwort auf Chatnachricht senden @@ -6550,78 +5148,29 @@ Server antwortete mit Fehler: %2 TermsOfServiceCheckWidget - Terms of Service Nutzungsbedingungen - Logo Logo - Switch to your browser to accept the terms of service Zum Browser wechseln, um die Nutzungsbedingungen zu bestätigen - - TrayFoldersMenuButton - - - Open local or group folders - Lokale Ordner oder Gruppen-Ordner öffnen - - - - Open local folder - Lokalen Ordner öffnen - - - - Connected - Verbunden - - - - Disconnected - Getrennt - - - - Open local folder "%1" - Lokalen Ordner "%1" öffnen - - - - Open group folder "%1" - Gruppenordner "%1" öffnen - - - - Open %1 in file explorer - "%1" im Dateiexplorer öffnen - - - - User group and local folders menu - Menü für Benutzergruppen und lokale Ordner - - TrayWindowHeader - Open local or group folders Lokalen oder Gruppenordner öffnen - More apps Weitere Apps - Open %1 in browser %1 im Browser öffnen @@ -6629,7 +5178,6 @@ Server antwortete mit Fehler: %2 UnifiedSearchInputContainer - Search files, messages, events … Suche Dateien, Nachrichten und Termine … @@ -6637,7 +5185,6 @@ Server antwortete mit Fehler: %2 UnifiedSearchPlaceholderView - Start typing to search Beginnen Sie mit der Eingabe, um zu suchen @@ -6645,7 +5192,6 @@ Server antwortete mit Fehler: %2 UnifiedSearchResultFetchMoreTrigger - Load more results Weitere Ergebnisse laden @@ -6653,7 +5199,6 @@ Server antwortete mit Fehler: %2 UnifiedSearchResultItemSkeleton - Search result skeleton. Suchergebnis-Skelett. @@ -6661,7 +5206,6 @@ Server antwortete mit Fehler: %2 UnifiedSearchResultListItem - Load more results Weitere Ergebnisse laden @@ -6669,7 +5213,6 @@ Server antwortete mit Fehler: %2 UnifiedSearchResultNothingFound - No results for Keine Ergebnisse für @@ -6677,7 +5220,6 @@ Server antwortete mit Fehler: %2 UnifiedSearchResultSectionItem - Search results section %1 Suchergebnisse Abschnitt %1 @@ -6685,44 +5227,34 @@ Server antwortete mit Fehler: %2 UserLine - Switch to account Zu Konto wechseln - Current account status is online Aktueller Kontostatus ist "Online" - Current account status is do not disturb Aktueller Kontostatus ist "Nicht stören" - Account actions Konto-Aktionen - Set status Status setzen - - Log out Abmelden - - Log in Anmelden - Remove account Konto entfernen @@ -6730,67 +5262,54 @@ Server antwortete mit Fehler: %2 UserStatusSelector - Online status Online-Status - Online Online - Away Abwesend - Do not disturb Nicht stören - Mute all notifications Alle Benachrichtigungen stummschalten - Invisible Unsichtbar - Appear offline Offline erscheinen - Status message Statusnachricht - What is your status? Wie ist Ihr Status? - Clear status message after Statusnachricht löschen nach - Cancel Abbrechen - Clear Leeren - Apply Anwenden @@ -6798,62 +5317,68 @@ Server antwortete mit Fehler: %2 Utility - %L1 GB %L1 GB - %L1 MB %L1 MB - %L1 KB %L1 KB - %L1 B %L1 B - %L1 TB %L1 TB - %n year(s) - %n Jahr%n Jahre + + %n Jahr + %n Jahre + - %n month(s) - %n Monat%n Monate + + %n Monat + %n Monate + - %n day(s) - %n Tag%n Tage + + %n Tag + %n Tage + - %n hour(s) - %n Stunde%n Stunden + + %n Stunde + %n Stunden + - %n minute(s) - %n Minute%n Minuten + + %n Minute + %n Minuten + - %n second(s) - %n Sekunde%n Sekunden + + %n Sekunde + %n Sekunden + - %1 %2 %1 %2 @@ -6861,17 +5386,14 @@ Server antwortete mit Fehler: %2 ValidateChecksumHeader - The checksum header is malformed. Der Prüfsummen-Header hat ein fehlerhaftes Format. - The checksum header contained an unknown checksum type "%1" Der Prüfsummen-Header enthielt einen unbekannten Prüfsummentyp "%1" - The downloaded file does not match the checksum, it will be resumed. "%1" != "%2" Die heruntergeladene Datei stimmt nicht mit der Prüfsumme überein, sie wird fortgesetzt. "%1" != "%2" @@ -6879,12 +5401,10 @@ Server antwortete mit Fehler: %2 main.cpp - System Tray not available Benachrichtigungsfeld (Taskleiste) ist nicht verfügbar. - %1 requires on a working system tray. If you are running XFCE, please follow <a href="http://docs.xfce.org/xfce/xfce4-panel/systray">these instructions</a>. Otherwise, please install a system tray application such as "trayer" and try again. %1 benötigt ein funktionierendes Benachrichtigungsfeld. Falls Sie XFCE einsetzen, dann folgen Sie bitte <a href="http://docs.xfce.org/xfce/xfce4-panel/systray">diesen Anweisungen</a>. Andernfalls installieren Sie bitte ein Benachrichtigungsfeld wie zum Beispiel "Trayer" und versuchen es nochmal. @@ -6892,7 +5412,6 @@ Server antwortete mit Fehler: %2 nextcloudTheme::aboutInfo() - <p><small>Built from Git revision <a href="%1">%2</a> on %3, %4 using Qt %5, %6</small></p> <p><small>Erstellt aus der Git-Revision <a href="%1">%2</a> auf %3, %4 unter Verwendung von Qt %5, %6</small></p> @@ -6900,119 +5419,94 @@ Server antwortete mit Fehler: %2 progress - Virtual file created Virtuelle Datei erstellt - Replaced by virtual file Ersetzt durch virtuelle Datei - Downloaded Heruntergeladen - Uploaded Hochgeladen - Server version downloaded, copied changed local file into conflict file Serverversion heruntergeladen. Die bearbeitete lokale Datei wurde in eine Konfliktdatei kopiert. - Server version downloaded, copied changed local file into case conflict conflict file Serverversion heruntergeladen, geänderte lokale Datei in Fallkonflikt-Konfliktdatei kopiert - Deleted Gelöscht - Moved to %1 Verschoben nach %1 - Ignored Ignoriert - Filesystem access error Zugriffsfehler im Dateisystem - - Error Fehler - Updated local metadata Lokale Metadaten aktualisiert - Updated local virtual files metadata Metadaten für lokale virtuelle Dateien aktualisiert - Updated end-to-end encryption metadata Metadaten für die Ende-zu-Ende-Verschlüsselung aktualisiert - - Unknown Unbekannt - Downloading Lade herunter - Uploading Lade hoch - Deleting Lösche - Moving Verschiebe - Ignoring ignoriere - Updating local metadata Aktualisiere lokale Metadaten - Updating local virtual files metadata Aktualisiere Metadaten für lokale virtuelle Dateien - Updating end-to-end encryption metadata Aktualisieren der Metadaten für die Ende-zu-Ende-Verschlüsselung @@ -7020,52 +5514,42 @@ Server antwortete mit Fehler: %2 theme - Sync status is unknown Synchronisierungsstatus ist unbekannt - Waiting to start syncing Warte auf Beginn der Synchronisierung. - Sync is running Synchronisierung läuft - Sync was successful Synchronisierung war erfolgreich - Sync was successful but some files were ignored Synchronisierung war erfolgreich, aber einige Dateien wurden ignoriert - Error occurred during sync Fehler beim Synchronisieren aufgetreten - Error occurred during setup Fehler bei der Einrichtung aufgetreten - Stopping sync Beende Synchronisierung - Preparing to sync Synchronisierung wird vorbereitet - Sync is paused Synchronisierung ist angehalten. @@ -7073,67 +5557,44 @@ Server antwortete mit Fehler: %2 utility - Could not open browser Konnte Browser nicht öffnen - There was an error when launching the browser to go to URL %1. Maybe no default browser is configured? Die URL %1 konnte aufgrund eines Fehlers beim Start des Browsers nicht aufgerufen werden. Ist vielleicht kein Standardbrowser konfiguriert? - Could not open email client Die E-Mail-Anwendung konnte nicht geöffnet werden - There was an error when launching the email client to create a new message. Maybe no default email client is configured? Fehler beim Öffnen der E-Mail-Anwendung zum Erstellen einer neuen Nachricht. Vielleicht ist keine Standard-E-Mail Anwendung eingerichtet? - Always available locally Immer lokal verfügbar - Currently available locally Derzeit lokal verfügbar - Some available online only Einige sind nur online abrufbar - Available online only Nur online verfügbar - Make always available locally Immer lokal verfügbar machen - Free up local space Lokalen Speicherplatz freigeben - - FileProviderFastEnumerationSettings - - - Enable fast sync - Schnelle Synchronisierung aktivieren - - - - Fast sync will only sync changes in files and folders within folders that have been explored. This can significantly increase responsiveness on initial configuration of virtual files. However, it will cause redundant downloads of files moved to an unexplored folder. - Bei der schnellen Synchronisierung werden nur Änderungen an Dateien und Ordnern innerhalb der Ordner synchronisiert, die bereits untersucht wurden. Dies kann die Reaktionsfähigkeit bei der Ersteinrichtung virtueller Dateien erheblich erhöhen. Allerdings führt dies zu redundanten Downloads von Dateien, die in einen noch nicht erfassten Ordner verschoben wurden. - - - \ No newline at end of file + diff --git a/translations/client_en.ts b/translations/client_en.ts index 3574cc06096dd..fa6e4edad1645 100644 --- a/translations/client_en.ts +++ b/translations/client_en.ts @@ -4,12 +4,10 @@ ActivityItem - Open %1 locally - In %1 @@ -17,12 +15,10 @@ ActivityItemContent - Open file details - Dismiss @@ -30,17 +26,14 @@ ActivityList - Activity list - Scroll to top - No activities yet @@ -48,22 +41,18 @@ CallNotificationDialog - Talk notification caller avatar - Answer Talk call notification - Decline - Decline Talk call notification @@ -71,83 +60,66 @@ CloudProviderWrapper - %1 (%2, %3) - Checking for changes in "%1" - Syncing %1 of %2 (%3 left) - Syncing %1 of %2 - Syncing %1 (%2 left) - Syncing %1 - - No recently changed files - Sync paused - Syncing - Open website - Recently changed - Pause synchronization - Help - Settings - Log out - Quit sync client @@ -155,12 +127,10 @@ ConflictDelegate - Local version - Server version @@ -168,59 +138,46 @@ CurrentAccountHeaderButton - Current account - - Resume sync for all - - Pause sync for all - Add account - Add new account - Settings - Exit - Current account avatar - Current account status is online - Current account status is do not disturb - Account switcher and settings menu @@ -228,7 +185,6 @@ EditFileLocallyLoadingDialog - Opening file for local editing @@ -236,7 +192,6 @@ EmojiPicker - No recent emojis @@ -244,7 +199,6 @@ EncryptionTokenDiscoveryDialog - Discovering the certificates stored on your USB token @@ -252,22 +206,18 @@ EncryptionTokenSelectionWindow - Token Encryption Key Chooser - Available Keys for end-to-end Encryption: - Choose - Cancel @@ -275,7 +225,6 @@ ErrorBox - Error @@ -283,12 +232,10 @@ FileDetailsPage - Activity - Sharing @@ -296,7 +243,6 @@ FileDetailsWindow - File details of %1 · %2 @@ -304,17 +250,14 @@ FileProviderEvictionDialog - Evict materialised files - Materialised items - Reload @@ -322,12 +265,10 @@ FileProviderFastEnumerationSettings - Enable fast sync - Fast sync will only sync changes in files and folders within folders that have been explored. This can significantly increase responsiveness on initial configuration of virtual files. However, it will cause redundant downloads of files moved to an unexplored folder. @@ -335,7 +276,6 @@ FileProviderFileDelegate - Delete @@ -343,17 +283,14 @@ FileProviderSettings - Virtual files settings - General settings - Enable virtual files @@ -361,17 +298,14 @@ FileProviderStorageInfo - Local storage use - %1 GB of %2 GB remote files synced - Evict local copies … @@ -379,22 +313,18 @@ FileProviderSyncStatus - Syncing - All synced! - Request sync - Request a sync of changes for the VFS environment. macOS may ignore or delay this request. @@ -403,12 +333,10 @@ macOS may ignore or delay this request. FileSystem - Error removing "%1": %2 - Could not remove folder "%1" @@ -416,22 +344,18 @@ macOS may ignore or delay this request. Flow2AuthWidget - Browser Authentication - Logo - Switch to your browser to connect your account - An error occurred while connecting. Please try again. @@ -439,12 +363,10 @@ macOS may ignore or delay this request. FolderWizardSourcePage - Pick a local folder on your computer to sync - &Choose … @@ -452,22 +374,18 @@ macOS may ignore or delay this request. FolderWizardTargetPage - Select a remote destination folder - Create folder - Refresh - Folders @@ -475,17 +393,14 @@ macOS may ignore or delay this request. MainWindow - Nextcloud desktop main dialog - Unified search results list - New activities @@ -493,17 +408,14 @@ macOS may ignore or delay this request. OCC::AbstractNetworkJob - Connection timed out - Unknown error: network reply was deleted - Server replied "%1 %2" to "%3 %4" @@ -511,17 +423,14 @@ macOS may ignore or delay this request. OCC::Account - File %1 is already locked by %2. - Lock operation on %1 failed with error %2 - Unlock operation on %1 failed with error %2 @@ -529,35 +438,28 @@ macOS may ignore or delay this request. OCC::AccountManager - %1 accounts were detected from a legacy desktop client. Should the accounts be imported? - 1 account was detected from a legacy desktop client. Should the account be imported? - - Legacy import - Import - Skip - Could not import accounts from legacy client configuration. @@ -565,257 +467,201 @@ Should the account be imported? OCC::AccountSettings - Unchecked folders will be <b>removed</b> from your local file system and will not be synchronized to this computer anymore - Synchronize all - Synchronize none - Apply manual changes - Standard file sync - Virtual file sync - Connection settings - Apply - Storage space: … - - - Cancel - Connected with <server> as <user> - No account configured. - Migrate certificate to a new one - There are folders that have grown in size beyond %1MB: %2 - End-to-end encryption has been enabled on this account with another device.<br>It can be enabled on this device by entering your mnemonic.<br>This will enable synchronisation of existing encrypted folders. - This account supports end-to-end encryption - End-to-end Encryption with Virtual Files - You seem to have the Virtual Files feature enabled on this folder. At the moment, it is not possible to implicitly download virtual files that are end-to-end encrypted. To get the best experience with virtual files and end-to-end encryption, make sure the encrypted folder is marked with "Make always available locally". - - Do not encrypt folder - - Encrypt folder - End-to-end Encryption - This will encrypt your folder and all files within it. These files will no longer be accessible without your encryption mnemonic key. <b>This process is not reversible. Are you sure you want to proceed?</b> - Disable encryption - Display mnemonic - End-to-end encryption has been enabled for this account - Warning - Please wait for the folder to sync before trying to encrypt it. - The folder has a minor sync problem. Encryption of this folder will be possible once it has synced successfully - The folder has a sync error. Encryption of this folder will be possible once it has synced successfully - End-to-end encryption is not configured on this device. Once it is configured, you will be able to encrypt this folder. Would you like to set up end-to-end encryption? - You cannot encrypt a folder with contents, please remove the files. Wait for the new sync, then encrypt it. - Encryption failed - Could not encrypt folder because the folder does not exist anymore - Encrypt - - Edit Ignored Files - - Create new folder - - Availability - Choose what to sync - Force sync now - Restart sync - Remove folder sync connection - Disable virtual file support … - Enable virtual file support %1 … - (experimental) - Folder creation failed - Confirm Folder Sync Connection Removal - Remove Folder Sync Connection - Disable virtual file support? - This action will disable virtual file support. As a consequence contents of folders that are currently marked as "available online only" will be downloaded. The only advantage of disabling virtual file support is that the selective sync feature will become available again. @@ -824,168 +670,134 @@ This action will abort any currently running synchronization. - Disable support - End-to-end encryption mnemonic - To protect your Cryptographic Identity, we encrypt it with a mnemonic of 12 dictionary words. Please note these down and keep them safe. They will be needed to add other devices to your account (like your mobile phone or laptop). - Disable end-to-end encryption - Disable end-to-end encryption for %1? - Removing end-to-end encryption will remove locally-synced files that are encrypted.<br>Encrypted files will remain on the server. - Sync Running - The syncing operation is running.<br/>Do you want to terminate it? - %1 in use - Set up encryption - Connected to %1. - Server %1 is temporarily unavailable. - Server %1 is currently in maintenance mode. - Signed out from %1. - There are folders that were not synchronized because they are too big: - There are folders that were not synchronized because they are external storages: - There are folders that were not synchronized because they are too big or external storages: - - Open folder - Resume sync - Pause sync - <p>Could not create local folder <i>%1</i>.</p> - <p>Do you really want to stop syncing the folder <i>%1</i>?</p><p><b>Note:</b> This will <b>not</b> delete any files.</p> - %1 (%3%) of %2 in use. Some folders, including network mounted or shared folders, might have different limits. - %1 of %2 in use - Currently there is no storage usage information available. - %1 as %2 - The server version %1 is unsupported! Proceed at your own risk. - Server %1 is currently being redirected, or your connection is behind a captive portal. - Connecting to %1 … - Unable to connect to %1. - Server configuration error: %1 at %2. - You need to accept the terms of service at %1. - No %1 connection configured. @@ -993,17 +805,14 @@ This action will abort any currently running synchronization. OCC::AccountSetupFromCommandLineJob - The authenticated request to the server was redirected to "%1". The URL is bad, the server is misconfigured. - Access forbidden by server. To verify that you have proper access, <a href="%1">click here</a> to access the service with your browser. - There was an invalid response to an authenticated WebDAV request @@ -1011,57 +820,46 @@ This action will abort any currently running synchronization. OCC::AccountState - Signed out - Disconnected - Connected - Service unavailable - Maintenance mode - Redirect detected - Network error - Configuration error - Asking Credentials - Need the user to accept the terms of service - Unknown account state @@ -1069,17 +867,14 @@ This action will abort any currently running synchronization. OCC::ActivityListModel - For more activities please open the Activity app. - Fetching activities … - Network error occurred: client will retry syncing. @@ -1087,42 +882,34 @@ This action will abort any currently running synchronization. OCC::AddCertificateDialog - SSL client certificate authentication - This server probably requires a SSL client certificate. - Certificate & Key (pkcs12): - Certificate password: - An encrypted pkcs12 bundle is strongly recommended as a copy will be stored in the configuration file. - Browse … - Select a certificate - Certificate files (*.p12 *.pfx) @@ -1130,83 +917,68 @@ This action will abort any currently running synchronization. OCC::Application - Some settings were configured in %1 versions of this client and use features that are not available in this version.<br><br>Continuing will mean <b>%2 these settings</b>.<br><br>The current configuration file was already backed up to <i>%3</i>. - newer newer software version - older older software version - ignoring - deleting - Quit - Continue - %1 accounts number of accounts imported - 1 account - %1 folders number of folders imported - 1 folder - Legacy import - Imported %1 and %2 from a legacy desktop client. %3 number of accounts and folders imported. list of users. - Error accessing the configuration file - There was an error while accessing the configuration file at %1. Please make sure the file can be accessed by your system account. @@ -1214,22 +986,18 @@ This action will abort any currently running synchronization. OCC::AuthenticationDialog - Authentication Required - Enter username and password for "%1" at %2. - &Username: - &Password: @@ -1237,12 +1005,10 @@ This action will abort any currently running synchronization. OCC::BasePropagateRemoteDeleteEncrypted - "%1 Failed to unlock encrypted folder %2". - Wrong HTTP code returned by server. Expected 204, but received "%1 %2". @@ -1250,58 +1016,46 @@ This action will abort any currently running synchronization. OCC::BulkPropagatorJob - File %1 cannot be uploaded because another file with the same name, differing only in case, exists - File %1 has invalid modified time. Do not upload to the server. - File Removed (start upload) %1 - File %1 has invalid modification time. Do not upload to the server. - Local file changed during syncing. It will be resumed. - - Local file changed during sync. - Network error: %1 - Error updating metadata: %1 - The file %1 is currently in use - The local file was removed during sync. - Restoration failed: %1 @@ -1309,37 +1063,30 @@ This action will abort any currently running synchronization. OCC::CaseClashConflictSolver - Cannot rename file because a file with the same name already exists on the server. Please pick another name. - Could not rename file. Please make sure you are connected to the server. - You don't have the permission to rename this file. Please ask the author of the file to rename it. - Failed to fetch permissions with error %1 - Filename contains leading and trailing spaces. - Filename contains leading spaces. - Filename contains trailing spaces. @@ -1347,111 +1094,86 @@ This action will abort any currently running synchronization. OCC::CaseClashFilenameDialog - Case Clash Conflict - The file could not be synced because it generates a case clash conflict with an existing file on this system. - Error - Existing file - file A - - today - - 0 byte - - Open existing file - Case clashing file - file B - - Open clashing file - Please enter a new name for the clashing file: - New filename - Rename file - The file "%1" could not be synced because of a case clash conflict with an existing file on this system. - %1 does not support equal file names with only letter casing differences. - Filename contains leading and trailing spaces. - Filename contains leading spaces. - Filename contains trailing spaces. - Use invalid name - Filename contains illegal characters: %1 @@ -1459,7 +1181,6 @@ This action will abort any currently running synchronization. OCC::CleanupPollsJob - Error writing metadata to the database @@ -1467,33 +1188,27 @@ This action will abort any currently running synchronization. OCC::ClientSideEncryption - Input PIN code Please keep it short and shorter than "Enter Certificate USB Token PIN:" - Enter Certificate USB Token PIN: - Invalid PIN. Login failed - Login to the token failed after providing the user PIN. It may be invalid or wrong. Please try again! - Please enter your end-to-end encryption passphrase:<br><br>Username: %2<br>Account: %3<br> - Enter E2E passphrase @@ -1501,87 +1216,66 @@ This action will abort any currently running synchronization. OCC::ConflictDialog - Sync Conflict - - Conflicting versions of %1. - Which version of the file do you want to keep?<br/>If you select both versions, the local file will have a number added to its name. - Local version - - Click to open the file - - today - - 0 byte - <a href="%1">Open local version</a> - Server version - <a href="%1">Open server version</a> - - Keep selected version - Open local version - Open server version - Keep both versions - Keep local version - Keep server version @@ -1589,29 +1283,22 @@ This action will abort any currently running synchronization. OCC::ConflictSolver - Do you want to delete the directory <i>%1</i> and all its contents permanently? - Do you want to delete the file <i>%1</i> permanently? - Confirm deletion - - Error - - Moving file failed: %1 @@ -1621,32 +1308,26 @@ This action will abort any currently running synchronization. OCC::ConnectionValidator - Timeout - The configured server for this client is too old - Please update to the latest server and restart the client. - Authentication error: Either username or password are wrong. - No Nextcloud account configured - The provided credentials are not correct @@ -1654,12 +1335,10 @@ This action will abort any currently running synchronization. OCC::DiscoveryPhase - Error while canceling deletion of a file - Error while canceling deletion of %1 @@ -1667,19 +1346,14 @@ This action will abort any currently running synchronization. OCC::DiscoverySingleDirectoryJob - - Server error: PROPFIND reply is not XML formatted! - - Encrypted metadata setup error! - Encrypted metadata setup error: initial signature from server is empty. @@ -1687,27 +1361,22 @@ This action will abort any currently running synchronization. OCC::DiscoverySingleLocalDirectoryJob - Error while opening directory %1 - Directory not accessible on client, permission denied - Directory not found: %1 - Filename encoding is not valid - Error while reading directory %1 @@ -1715,93 +1384,62 @@ This action will abort any currently running synchronization. OCC::EditLocallyJob - - - - - - - - Could not start editing locally. - - An error occurred during setup. - - Could not find a file for local editing. Make sure its path is valid and it is synced locally. - - - - Could not find a file for local editing. Make sure it is not excluded via selective sync. - - - An error occurred during data retrieval. - - An error occurred trying to synchronise the file to edit locally. - Server error: PROPFIND reply is not XML formatted! - Could not find a remote file info for local editing. Make sure its path is valid. - Invalid local file path. - Could not open %1 - Please try again. - File %1 already locked. - - Lock will last for %1 minutes. You can also unlock this file manually once you are finished editing. - File %1 now locked. - File %1 could not be locked. @@ -1809,12 +1447,10 @@ This action will abort any currently running synchronization. OCC::EditLocallyManager - Could not validate the request to open a file from server. - Please try again. @@ -1822,34 +1458,26 @@ This action will abort any currently running synchronization. OCC::EditLocallyVerificationJob - Invalid token received. - - - Please try again. - Invalid file path was provided. - Could not find an account for local editing. - Could not start editing locally. - An error occurred trying to verify the request to edit locally. @@ -1857,7 +1485,6 @@ This action will abort any currently running synchronization. OCC::EncryptFolderJob - Could not generate the metadata for encryption, Unlocking the folder. This can be an issue with your OpenSSL libraries. @@ -1866,34 +1493,22 @@ This can be an issue with your OpenSSL libraries. OCC::EncryptedFolderMetadataHandler - - - - - - Error fetching metadata. - - - Error locking folder. - Error fetching encrypted folder ID. - Error parsing or decrypting metadata. - Failed to upload metadata @@ -1901,7 +1516,6 @@ This can be an issue with your OpenSSL libraries. OCC::FileDetails - %1 second(s) ago seconds elapsed since file last modified @@ -1910,7 +1524,6 @@ This can be an issue with your OpenSSL libraries. - %1 minute(s) ago minutes elapsed since file last modified @@ -1919,7 +1532,6 @@ This can be an issue with your OpenSSL libraries. - %1 hour(s) ago hours elapsed since file last modified @@ -1928,7 +1540,6 @@ This can be an issue with your OpenSSL libraries. - %1 day(s) ago days elapsed since file last modified @@ -1937,7 +1548,6 @@ This can be an issue with your OpenSSL libraries. - %1 month(s) ago months elapsed since file last modified @@ -1946,7 +1556,6 @@ This can be an issue with your OpenSSL libraries. - %1 year(s) ago years elapsed since file last modified @@ -1955,7 +1564,6 @@ This can be an issue with your OpenSSL libraries. - Locked by %1 - Expires in %2 minute(s) remaining time before lock expires @@ -1967,36 +1575,26 @@ This can be an issue with your OpenSSL libraries. OCC::Flow2Auth - - Error returned from the server: <em>%1</em> - The polling URL does not start with HTTPS despite the login URL started with HTTPS. Login will not be possible because this might be a security issue. Please contact your administrator. - - There was an error accessing the "token" endpoint: <br><em>%1</em> - - Could not parse the JSON returned from the server: <br><em>%1</em> - - The reply from the server did not contain all expected fields - The returned server URL does not start with HTTPS despite the login URL started with HTTPS. Login will not be possible because this might be a security issue. Please contact your administrator. @@ -2004,37 +1602,30 @@ This can be an issue with your OpenSSL libraries. OCC::Flow2AuthWidget - Unable to open the Browser, please copy the link to your Browser. - Waiting for authorization - Polling for authorization - Starting authorization - Link copied to clipboard. - Open Browser - Copy Link @@ -2042,30 +1633,25 @@ This can be an issue with your OpenSSL libraries. OCC::Folder - %1 has been removed. %1 names a file. - %1 has been updated. %1 names a file. - %1 has been renamed to %2. %1 and %2 name files. - %1 has been moved to %2. - %1 and %n other file(s) have been removed. @@ -2073,22 +1659,18 @@ This can be an issue with your OpenSSL libraries. - Please choose a different location. The folder %1 doesn't exist. - Please choose a different location. %1 isn't a valid folder. - Please choose a different location. %1 isn't a readable folder. - %1 and %n other file(s) have been added. @@ -2096,13 +1678,11 @@ This can be an issue with your OpenSSL libraries. - %1 has been added. %1 names a file. - %1 and %n other file(s) have been updated. @@ -2110,7 +1690,6 @@ This can be an issue with your OpenSSL libraries. - %1 has been renamed to %2 and %n other file(s) have been renamed. @@ -2118,7 +1697,6 @@ This can be an issue with your OpenSSL libraries. - %1 has been moved to %2 and %n other file(s) have been moved. @@ -2126,7 +1704,6 @@ This can be an issue with your OpenSSL libraries. - %1 has and %n other file(s) have sync conflicts. @@ -2134,12 +1711,10 @@ This can be an issue with your OpenSSL libraries. - %1 has a sync conflict. Please check the conflict file! - %1 and %n other file(s) could not be synced due to errors. See the log for details. @@ -2147,12 +1722,10 @@ This can be an issue with your OpenSSL libraries. - %1 could not be synced due to an error. See the log for details. - %1 and %n other file(s) are currently locked. @@ -2160,75 +1733,61 @@ This can be an issue with your OpenSSL libraries. - %1 is currently locked. - Sync Activity - Could not read system exclude file - A new folder larger than %1 MB has been added: %2. - A folder from an external storage has been added. - Please go in the settings to select it if you wish to download it. - A folder has surpassed the set folder size limit of %1MB: %2. %3 - Keep syncing - Stop syncing - The folder %1 has surpassed the set folder size limit of %2MB. - Would you like to stop syncing this folder? - The folder %1 was created but was excluded from synchronization previously. Data inside it will not be synchronized. - The file %1 was created but was excluded from synchronization previously. It will not be synchronized. - Changes in synchronized folders could not be tracked reliably. This means that the synchronization client might not upload local changes immediately and will instead only scan for local changes and upload them occasionally (every two hours by default). @@ -2237,41 +1796,34 @@ This means that the synchronization client might not upload local changes immedi - Virtual file download failed with code "%1", status "%2" and error message "%3" - A large number of files in the server have been deleted. Please confirm if you'd like to proceed with these deletions. Alternatively, you can restore all deleted files by uploading from '%1' folder to the server. - A large number of files in your local '%1' folder have been deleted. Please confirm if you'd like to proceed with these deletions. Alternatively, you can restore all deleted files by downloading them from the server. - Remove all files? - Proceed with Deletion - Restore Files to Server - Restore Files from Server @@ -2279,27 +1831,22 @@ Alternatively, you can restore all deleted files by downloading them from the se OCC::FolderCreationDialog - Create new folder - Enter folder name - Folder already exists - Error - Could not create a folder! Check your write permissions. @@ -2307,136 +1854,108 @@ Alternatively, you can restore all deleted files by downloading them from the se OCC::FolderMan - Could not reset folder state - (backup) - (backup %1) - An old sync journal "%1" was found, but could not be removed. Please make sure that no application is currently using it. - Undefined state. - Waiting to start syncing. - Preparing for sync. - Syncing %1 of %2 (A few seconds left) - Syncing %1 of %2 (%3 left) - Syncing %1 of %2 - Syncing %1 (A few seconds left) - Syncing %1 (%2 left) - Syncing %1 - Sync is running. - Sync finished with unresolved conflicts. - Last sync was successful. - Setup error. - Sync request was cancelled. - Please choose a different location. The selected folder isn't valid. - - Please choose a different location. %1 is already being used as a sync folder. - Please choose a different location. The path %1 doesn't exist. - Please choose a different location. The path %1 isn't a folder. - - Please choose a different location. You don't have enough permissions to write to %1. folder location - Please choose a different location. %1 is already contained in a folder used as a sync folder. - Please choose a different location. %1 is already being used as a sync folder for %2. folder location, server url - The folder %1 is linked to multiple accounts. This setup can cause data loss and it is no longer supported. To resolve this issue: please remove %1 from one of the accounts and create a new sync folder. @@ -2444,12 +1963,10 @@ For advanced users: this issue might be related to multiple sync database files - Sync is paused. - %1 (Sync is paused) @@ -2457,12 +1974,10 @@ For advanced users: this issue might be related to multiple sync database files OCC::FolderStatusDelegate - Add Folder Sync Connection - File @@ -2470,146 +1985,117 @@ For advanced users: this issue might be related to multiple sync database files OCC::FolderStatusModel - You need to be connected to add a folder - Click this button to add a folder to synchronize. - Could not decrypt! - - %1 (%2) - Error while loading the list of folders from the server. - Virtual file support is enabled. - Signed out - Synchronizing virtual files in local folder - Synchronizing files in local folder - Checking for changes in remote "%1" - Checking for changes in local "%1" - Syncing local and remote changes - %1 %2 … Example text: "Uploading foobar.png (1MB of 2MB) time left 2 minutes at a rate of 24Kb/s" Example text: "Syncing 'foo.txt', 'bar.txt'" - Download %1/s Example text: "Download 24Kb/s" (%1 is replaced by 24Kb (translated)) - File %1 of %2 - There are unresolved conflicts. Click for details. - - , - Fetching folder list from server … - ↓ %1/s - Upload %1/s Example text: "Upload 24Kb/s" (%1 is replaced by 24Kb (translated)) - ↑ %1/s - %1 %2 (%3 of %4) Example text: "Uploading foobar.png (2MB of 2MB)" - %1 %2 Example text: "Uploading foobar.png" - A few seconds left, %1 of %2, file %3 of %4 Example text: "5 minutes left, 12 MB of 345 MB, file 6 of 7" - %5 left, %1 of %2, file %3 of %4 - %1 of %2, file %3 of %4 Example text: "12 MB of 345 MB, file 6 of 7" - Waiting for %n other folder(s) … @@ -2617,12 +2103,10 @@ For advanced users: this issue might be related to multiple sync database files - About to start syncing - Preparing to sync … @@ -2630,7 +2114,6 @@ For advanced users: this issue might be related to multiple sync database files OCC::FolderWatcher - The watcher did not receive a test notification. @@ -2638,7 +2121,6 @@ For advanced users: this issue might be related to multiple sync database files OCC::FolderWatcherPrivate - This problem usually happens when the inotify watches are exhausted. Check the FAQ for details. @@ -2646,12 +2128,10 @@ For advanced users: this issue might be related to multiple sync database files OCC::FolderWizard - Add Folder Sync Connection - Add Sync Connection @@ -2659,17 +2139,14 @@ For advanced users: this issue might be related to multiple sync database files OCC::FolderWizardLocalPath - Click to select a local folder to sync. - Enter the path to the local folder. - Select the source folder @@ -2677,44 +2154,34 @@ For advanced users: this issue might be related to multiple sync database files OCC::FolderWizardRemotePath - Create Remote Folder - Enter the name of the new folder to be created below "%1": - Folder was successfully created on %1. - Authentication failed accessing %1 - Failed to create the folder on %1. Please check manually. - Failed to list a folder. Error: %1 - Choose this to sync the entire account - - - Please choose a different location. %1 is already being synced to %2. @@ -2722,24 +2189,18 @@ For advanced users: this issue might be related to multiple sync database files OCC::FolderWizardSelectiveSync - - Use virtual files instead of downloading content immediately %1 - - (experimental) - Virtual files are not supported for Windows partition roots as local folder. Please choose a valid subfolder under drive letter. - Virtual files are not supported at the selected location @@ -2747,27 +2208,22 @@ For advanced users: this issue might be related to multiple sync database files OCC::GETFileJob - No E-Tag received from server, check Proxy/Gateway - We received a different E-Tag for resuming. Retrying next time. - We received an unexpected download Content-Length. - Server returned wrong content-range - Connection Timeout @@ -2775,189 +2231,151 @@ For advanced users: this issue might be related to multiple sync database files OCC::GeneralSettings - General Settings - Show Call Notifications - For System Tray - Show Chat Notifications - Show Server &Notifications - Advanced - MB Trailing part of "Ask confirmation before syncing folder larger than" - Ask for confirmation before synchronizing external storages - &Launch on System Startup - Use &Monochrome Icons - Ask for confirmation before synchronizing new folders larger than - Notify when synchronised folders grow larger than specified limit - Automatically disable synchronisation of folders that overcome limit - Move removed files to trash - Show sync folders in &Explorer's navigation pane - Server poll interval - seconds (if <a href="https://github.com/nextcloud/notify_push">Client Push</a> is unavailable) - Edit &Ignored Files - - Create Debug Archive - Info - Desktop client x.x.x - Update channel - &Automatically check for updates - Check Now - Usage Documentation - Legal Notice - S&how crash reporter - &Restart && Update - Server notifications that require attention. - Show chat notification dialogs. - Show call notification dialogs. - You cannot disable autostart because system-wide autostart is enabled. - stable - beta - daily - enterprise - - beta: contains versions with new features that may not be tested thoroughly - daily: contains versions created daily only for testing and development @@ -2966,7 +2384,6 @@ Downgrading versions is not possible immediately: changing from beta to stable m - - enterprise: contains stable versions for customers. Downgrading versions is not possible immediately: changing from stable to enterprise means waiting for the new enterprise version. @@ -2974,12 +2391,10 @@ Downgrading versions is not possible immediately: changing from stable to enterp - Changing update channel? - The channel determines which upgrades will be offered to install: - stable: contains tested versions considered reliable @@ -2987,27 +2402,22 @@ Downgrading versions is not possible immediately: changing from stable to enterp - Change update channel - Cancel - Zip Archives - Debug Archive Created - Debug archive is created at %1 @@ -3015,22 +2425,18 @@ Downgrading versions is not possible immediately: changing from stable to enterp OCC::GetOrCreatePublicLinkShare - Password for share required - Please enter a password for your link share: - Sharing error - Could not retrieve or create the public link share. Error: %1 @@ -3040,22 +2446,18 @@ Downgrading versions is not possible immediately: changing from stable to enterp OCC::HttpCredentialsGui - Please enter %1 password:<br><br>Username: %2<br>Account: %3<br> - Reading from keychain failed with error: "%1" - Enter Password - <a href="%1">Click here</a> to request an app password from the web interface. @@ -3063,27 +2465,22 @@ Downgrading versions is not possible immediately: changing from stable to enterp OCC::IgnoreListEditor - Ignored Files Editor - Global Ignore Settings - Sync hidden files - Files Ignored by Patterns - This entry is provided by the system at "%1" and cannot be modified in this view. @@ -3091,54 +2488,44 @@ Downgrading versions is not possible immediately: changing from stable to enterp OCC::IgnoreListTableWidget - Pattern - Allow Deletion - Add - Remove - Remove all - Files or folders matching a pattern will not be synchronized. Items where deletion is allowed will be deleted if they prevent a directory from being removed. This is useful for meta data. - Could not open file - Cannot write changes to "%1". - Add Ignore Pattern - Add a new ignore pattern: @@ -3146,122 +2533,98 @@ Items where deletion is allowed will be deleted if they prevent a directory from OCC::InvalidFilenameDialog - Invalid filename - The file could not be synced because it contains characters which are not allowed on this system. - Error - Please enter a new name for the file: - New filename - Rename file - The file "%1" could not be synced because the name contains characters which are not allowed on this system. - The following characters are not allowed on the system: \ / : ? * " < > | leading/trailing spaces - The file "%1" could not be synced because the name contains characters which are not allowed on the server. - The following characters are not allowed: %1 - The following basenames are not allowed: %1 - The following filenames are not allowed: %1 - The following file extensions are not allowed: %1 - Checking rename permissions … - You don't have the permission to rename this file. Please ask the author of the file to rename it. - Failed to fetch permissions with error %1 - Filename contains leading and trailing spaces. - Filename contains leading spaces. - Filename contains trailing spaces. - Use invalid name - Filename contains illegal characters: %1 - Could not rename file. Please make sure you are connected to the server. - Cannot rename file because a file with the same name does already exist on the server. Please pick another name. - Could not rename local file. %1 @@ -3269,23 +2632,18 @@ Items where deletion is allowed will be deleted if they prevent a directory from OCC::LegalNotice - - Legal notice - Close - <p>Copyright 2017-2025 Nextcloud GmbH<br />Copyright 2012-2023 ownCloud GmbH</p> - <p>Licensed under the GNU General Public License (GPL) Version 2.0 or any later version.</p> @@ -3293,30 +2651,25 @@ Items where deletion is allowed will be deleted if they prevent a directory from OCC::LogBrowser - Log Output - The client can write debug logs to a temporary folder. These logs are very helpful for diagnosing problems. Since log files can get large, the client will start a new one for each sync run and compress older ones. It will also delete log files after a couple of hours to avoid consuming too much disk space. If enabled, logs will be written to %1 - Enable logging to temporary folder - This setting persists across client restarts. Note that using any logging command line options will override this setting. - Open folder @@ -3324,14 +2677,10 @@ Note that using any logging command line options will override this setting. OCC::Logger - - Error - - <nobr>File "%1"<br/>cannot be opened for writing.<br/><br/>The log output <b>cannot</b> be saved!</nobr> @@ -3339,32 +2688,26 @@ Note that using any logging command line options will override this setting. OCC::Mac::FileProviderEditLocallyJob - Could not start editing locally. - An error occurred during setup. - Could not find a file for local editing. Make sure its path is valid and it is synced locally. - Could not get file ID. - Could not get file identifier. - The file identifier is empty. @@ -3372,47 +2715,38 @@ Note that using any logging command line options will override this setting. OCC::NSISUpdater - New Version Available - <p>A new version of the %1 Client is available.</p><p><b>%2</b> is available for download. The installed version is %3.</p> - Update Failed - <p>A new version of the %1 Client is available but the updating process failed.</p><p><b>%2</b> has been downloaded. The installed version is %3. If you confirm restart and update, your computer may reboot to complete the installation.</p> - Ask again later - Restart and update - Update manually - Skip this time - Get update @@ -3420,109 +2754,82 @@ Note that using any logging command line options will override this setting. OCC::NetworkSettings - Proxy Settings - Use system proxy - Host - Proxy server requires authentication - Download Bandwidth - - Limit to - - KBytes/s - Note: proxy settings have no effects for accounts on localhost - Manually specify proxy - No proxy - - - Use global settings - - No limit - - Limit to 3/4 of estimated bandwidth - Upload Bandwidth - - Limit automatically - Hostname of proxy server - Username for proxy server - Password for proxy server - HTTP(S) proxy - SOCKS5 proxy @@ -3530,67 +2837,54 @@ Note that using any logging command line options will override this setting. OCC::OCUpdater - Could not check for new updates. - Checking update server … - New %1 update ready - A new update for %1 is about to be installed. The updater may ask for additional privileges during the process. Your computer may reboot to complete the installation. - Downloading %1 … - %1 available. Restart application to start the update. - Could not download update. Please open <a href='%1'>%1</a> to download the update manually. - Could not download update. Please open %1 to download the update manually. - New %1 is available. Please open <a href='%2'>%2</a> to download the update. - New %1 is available. Please open %2 to download the update. - Update status is unknown: Did not check for new updates. - No updates available. Your installation is at the latest version. - Update Check @@ -3598,72 +2892,55 @@ Note that using any logging command line options will override this setting. OCC::OwncloudAdvancedSetupPage - Connect - - (experimental) - - Use &virtual files instead of downloading content immediately %1 - Virtual files are not supported for Windows partition roots as local folder. Please choose a valid subfolder under drive letter. - %1 folder "%2" is synced to local folder "%3" - Sync the folder "%1" - Warning: The local folder is not empty. Pick a resolution! - - %1 free space %1 gets replaced with the size and a matching unit. Example: 3 MB or 5 GB - Virtual files are not supported at the selected location - Local Sync Folder - - (%1) - There isn't enough free space in the local folder! - In Finder's "Locations" sidebar section @@ -3671,32 +2948,26 @@ Note that using any logging command line options will override this setting. OCC::OwncloudConnectionMethodDialog - Connection failed - <html><head/><body><p>Failed to connect to the secure server address specified. How do you wish to proceed?</p></body></html> - Select a different URL - Retry unencrypted over HTTP (insecure) - Configure client-side TLS certificate - <html><head/><body><p>Failed to connect to the secure server address <em>%1</em>. How do you wish to proceed?</p></body></html> @@ -3704,17 +2975,14 @@ Note that using any logging command line options will override this setting. OCC::OwncloudHttpCredsPage - &Email - Connect to %1 - Enter user credentials @@ -3722,8 +2990,6 @@ Note that using any logging command line options will override this setting. OCC::OwncloudPropagator - - Impossible to get modification time for file in conflict %1 @@ -3731,23 +2997,19 @@ Note that using any logging command line options will override this setting. OCC::OwncloudSetupPage - The link to your %1 web interface when you open it in the browser. %1 will be replaced with the application name - &Next > - Server address does not seem to be valid - Could not load certificate. Maybe wrong password? @@ -3755,159 +3017,126 @@ Note that using any logging command line options will override this setting. OCC::OwncloudSetupWizard - <font color="green">Successfully connected to %1: %2 version %3 (%4)</font><br/><br/> - Failed to connect to %1 at %2:<br/>%3 - Timeout while trying to connect to %1 at %2. - Access forbidden by server. To verify that you have proper access, <a href="%1">click here</a> to access the service with your browser. - Invalid URL - Trying to connect to %1 at %2 … - The authenticated request to the server was redirected to "%1". The URL is bad, the server is misconfigured. - There was an invalid response to an authenticated WebDAV request - Local sync folder %1 already exists, setting it up for sync.<br/><br/> - Creating local sync folder %1 … - OK - failed. - Could not create local folder %1 - No remote folder specified! - Error: %1 - creating folder on Nextcloud: %1 - Remote folder %1 created successfully. - The remote folder %1 already exists. Connecting it for syncing. - - The folder creation resulted in HTTP error code %1 - The remote folder creation failed because the provided credentials are wrong!<br/>Please go back and check your credentials.</p> - <p><font color="red">Remote folder creation failed probably because the provided credentials are wrong.</font><br/>Please go back and check your credentials.</p> - - Remote folder %1 creation failed with error <tt>%2</tt>. - A sync connection from %1 to remote directory %2 was set up. - Successfully connected to %1! - Connection to %1 could not be established. Please check again. - Folder rename failed - Cannot remove and back up the folder because the folder or a file in it is open in another program. Please close the folder or file and hit retry or cancel the setup. - <font color="green"><b>File Provider-based account %1 successfully created!</b></font> - Virtual files enabled - Your account is now syncing with virtual files support. This means that all your files are online-only by default, and will be downloaded on-demand when you open them. You may find your files under the <b>Locations</b> section of the Finder sidebar. - <font color="green"><b>Local sync folder %1 successfully created!</b></font> @@ -3915,27 +3144,22 @@ Note that using any logging command line options will override this setting. OCC::OwncloudWizard - Add %1 account - Skip folders configuration - Cancel - Enable experimental feature? - When the "virtual files" mode is enabled no files will be downloaded initially. Instead, a tiny "%1" file will be created for each file that exists on the server. The contents can be downloaded by running these files or by using their context menu. The virtual files mode is mutually exclusive with selective sync. Currently unselected folders will be translated to online-only folders and your selective sync settings will be reset. @@ -3946,12 +3170,10 @@ This is a new, experimental mode. If you decide to use it, please report any iss - Enable experimental placeholder mode - Stay safe @@ -3959,12 +3181,10 @@ This is a new, experimental mode. If you decide to use it, please report any iss OCC::PasswordInputDialog - Password for share required - Please enter a password for your share: @@ -3972,7 +3192,6 @@ This is a new, experimental mode. If you decide to use it, please report any iss OCC::PollJob - Invalid JSON reply from the poll URL @@ -3980,210 +3199,165 @@ This is a new, experimental mode. If you decide to use it, please report any iss OCC::ProcessDirectoryJob - Symbolic links are not supported in syncing. - File is listed on the ignore list. - File names ending with a period are not supported on this file system. - Folder name of folder entity to use when warning about invalid name - File name of folder entity to use when warning about invalid name - %1 name containing the character "%2" is not supported on this file system. folder or file impossible to sync due to an invalid name, placeholders will be file or folder and the invalid character - %1 name contains at least one invalid character - %1 name is a reserved name on this file system. - Filename contains trailing spaces. - - - - Cannot be renamed or uploaded. - Filename contains leading spaces. - Filename contains leading and trailing spaces. - Filename is too long. - File/Folder is ignored because it's hidden. - Stat failed. - Conflict: Server version downloaded, local copy renamed and not uploaded. - Case Clash Conflict: Server file downloaded and renamed to avoid clash. - The filename cannot be encoded on your file system. - The filename is blacklisted on the server. - Reason: the entire filename is forbidden. - Reason: the filename has a forbidden base name (filename start). - Reason: the file has a forbidden extension (.%1). - Reason: the filename contains a forbidden character (%1). - File has extension reserved for virtual files. - size - permission - file id - Server reported no %1 - Cannot sync due to invalid modification time - Could not upload file, because it is open in "%1". - Error while deleting file record %1 from the database - - Moved to invalid target, restoring - Cannot modify encrypted item because the selected certificate is not valid. - Ignored because of the "choose what to sync" blacklist - - Not allowed because you don't have permission to add subfolders to that folder - Not allowed because you don't have permission to add files in that folder - Not allowed to upload this file because it is read-only on the server, restoring - Not allowed to remove, restoring - Error while reading the database - Server replied with an error while reading directory "%1" : %2 @@ -4191,38 +3365,26 @@ This is a new, experimental mode. If you decide to use it, please report any iss OCC::PropagateDirectory - Could not delete file %1 from local DB - Error updating metadata due to invalid modification time - - - - - - The folder %1 cannot be made read-only: %2 - - unknown exception - Error updating metadata: %1 - File is currently in use @@ -4230,75 +3392,58 @@ This is a new, experimental mode. If you decide to use it, please report any iss OCC::PropagateDownloadFile - Could not get file %1 from local DB - File %1 cannot be downloaded because encryption information is missing. - - Could not delete file record %1 from local DB - File %1 can not be downloaded because of a local file name clash! - The download would reduce free local disk space below the limit - Free space on disk is less than %1 - File was deleted from server - The file could not be downloaded completely. - The downloaded file is empty, but the server said it should have been %1. - - File %1 has invalid modified time reported by server. Do not save it. - File %1 downloaded but it resulted in a local file name clash! - Error updating metadata: %1 - The file %1 is currently in use - - File has changed since discovery @@ -4306,12 +3451,10 @@ This is a new, experimental mode. If you decide to use it, please report any iss OCC::PropagateItemJob - ; Restoration Failed: %1 - A file or folder was removed from a read only share, but restoring failed: %1 @@ -4319,39 +3462,30 @@ This is a new, experimental mode. If you decide to use it, please report any iss OCC::PropagateLocalMkdir - could not delete file %1, error: %2 - Folder %1 cannot be created because of a local file or folder name clash! - Could not create folder %1 - - - The folder %1 cannot be made read-only: %2 - unknown exception - Error updating metadata: %1 - The file %1 is currently in use @@ -4359,19 +3493,14 @@ This is a new, experimental mode. If you decide to use it, please report any iss OCC::PropagateLocalRemove - Could not remove %1 because of a local file name clash - - - Temporary error when removing local item removed from server. - Could not delete file record %1 from local DB @@ -4379,49 +3508,38 @@ This is a new, experimental mode. If you decide to use it, please report any iss OCC::PropagateLocalRename - Folder %1 cannot be renamed because of a local file or folder name clash! - File %1 downloaded but it resulted in a local file name clash! - - Could not get file %1 from local DB - - Error setting pin state - Error updating metadata: %1 - The file %1 is currently in use - Failed to propagate directory rename in hierarchy - Failed to rename file - Could not delete file record %1 from local DB @@ -4429,12 +3547,10 @@ This is a new, experimental mode. If you decide to use it, please report any iss OCC::PropagateRemoteDelete - Wrong HTTP code returned by server. Expected 204, but received "%1 %2". - Could not delete file record %1 from local DB @@ -4442,7 +3558,6 @@ This is a new, experimental mode. If you decide to use it, please report any iss OCC::PropagateRemoteDeleteEncryptedRootFolder - Wrong HTTP code returned by server. Expected 204, but received "%1 %2". @@ -4450,22 +3565,18 @@ This is a new, experimental mode. If you decide to use it, please report any iss OCC::PropagateRemoteMkdir - Wrong HTTP code returned by server. Expected 201, but received "%1 %2". - Failed to encrypt a folder %1 - Error writing metadata to the database: %1 - The file %1 is currently in use @@ -4473,44 +3584,34 @@ This is a new, experimental mode. If you decide to use it, please report any iss OCC::PropagateRemoteMove - Could not rename %1 to %2, error: %3 - - Error updating metadata: %1 - - The file %1 is currently in use - Wrong HTTP code returned by server. Expected 201, but received "%1 %2". - Could not get file %1 from local DB - Could not delete file record %1 from local DB - Error setting pin state - Error writing metadata to the database @@ -4518,60 +3619,46 @@ This is a new, experimental mode. If you decide to use it, please report any iss OCC::PropagateUploadFileCommon - File %1 cannot be uploaded because another file with the same name, differing only in case, exists - - - File %1 has invalid modification time. Do not upload to the server. - Local file changed during syncing. It will be resumed. - Local file changed during sync. - Failed to unlock encrypted folder. - Unable to upload an item with invalid characters - Error updating metadata: %1 - The file %1 is currently in use - - Upload of %1 exceeds the quota for the folder - Failed to upload encrypted file. - File Removed (start upload) %1 @@ -4579,32 +3666,26 @@ This is a new, experimental mode. If you decide to use it, please report any iss OCC::PropagateUploadFileNG - The local file was removed during sync. - Local file changed during sync. - Poll URL missing - Unexpected return code from server (%1) - Missing File ID from server - Missing ETag from server @@ -4612,22 +3693,18 @@ This is a new, experimental mode. If you decide to use it, please report any iss OCC::PropagateUploadFileV1 - Poll URL missing - The local file was removed during sync. - Local file changed during sync. - The server did not acknowledge the last chunk. (No e-tag was present) @@ -4635,27 +3712,22 @@ This is a new, experimental mode. If you decide to use it, please report any iss OCC::ProxyAuthDialog - Proxy authentication required - Username: - Proxy: - The proxy server needs a username and password. - Password: @@ -4663,7 +3735,6 @@ This is a new, experimental mode. If you decide to use it, please report any iss OCC::SelectiveSyncDialog - Choose What to Sync @@ -4671,33 +3742,26 @@ This is a new, experimental mode. If you decide to use it, please report any iss OCC::SelectiveSyncWidget - Loading … - Deselect remote folders you do not wish to synchronize. - Name - Size - - No subfolders currently on the server. - An error occurred while loading the list of sub folders. @@ -4705,7 +3769,6 @@ This is a new, experimental mode. If you decide to use it, please report any iss OCC::ServerNotificationHandler - Reply @@ -4713,28 +3776,23 @@ This is a new, experimental mode. If you decide to use it, please report any iss OCC::SettingsDialog - Settings - %1 Settings This name refers to the application name e.g Nextcloud - General - Network - Account @@ -4742,7 +3800,6 @@ This is a new, experimental mode. If you decide to use it, please report any iss OCC::ShareManager - Error @@ -4750,47 +3807,38 @@ This is a new, experimental mode. If you decide to use it, please report any iss OCC::ShareModel - %1 days - 1 day - Today - Secure file drop link - Share link - Link share - Internal link - Secure file drop - Could not find local folder for %1 @@ -4798,23 +3846,18 @@ This is a new, experimental mode. If you decide to use it, please report any iss OCC::ShareeModel - - Search globally - No results found - Global search results - %1 (%2) sharee (shareWithAdditionalInfo) @@ -4823,111 +3866,88 @@ This is a new, experimental mode. If you decide to use it, please report any iss OCC::SocketApi - Context menu share - I shared something with you - - Share options - Send private link by email … - Copy private link to clipboard - Failed to encrypt folder at "%1" - The account %1 does not have end-to-end encryption configured. Please configure this in your account settings to enable folder encryption. - Failed to encrypt folder - Could not encrypt the following folder: "%1". Server replied with error: %2 - Folder encrypted successfully - The following folder was encrypted successfully: "%1" - Select new location … - - Activity - Leave this share - Resharing this file is not allowed - Resharing this folder is not allowed - Encrypt - Lock file - Unlock file - Locked by %1 - Expires in %1 minutes remaining time before lock expires @@ -4936,43 +3956,34 @@ Server replied with error: %2 - Resolve conflict … - Move and rename … - Move, rename and upload … - Delete local changes - Move and upload … - Delete - Copy internal link - - Open in browser @@ -4980,123 +3991,99 @@ Server replied with error: %2 OCC::SslButton - <h3>Certificate Details</h3> - Common Name (CN): - Subject Alternative Names: - Organization (O): - Organizational Unit (OU): - State/Province: - Country: - Serial: - <h3>Issuer</h3> - Issuer: - Issued on: - Expires on: - <h3>Fingerprints</h3> - SHA-256: - SHA-1: - <p><b>Note:</b> This certificate was manually approved</p> - %1 (self-signed) - %1 - This connection is encrypted using %1 bit %2. - Server version: %1 - No support for SSL session tickets/identifiers - Certificate information: - The connection is not secure - This connection is NOT secure as it is not encrypted. @@ -5105,82 +4092,62 @@ Server replied with error: %2 OCC::SslErrorDialog - Trust this certificate anyway - Untrusted Certificate - Cannot connect securely to <i>%1</i>: - Additional errors: - with Certificate %1 - - - &lt;not specified&gt; - - Organization: %1 - - Unit: %1 - - Country: %1 - Fingerprint (SHA1): <tt>%1</tt> - Fingerprint (SHA-256): <tt>%1</tt> - Fingerprint (SHA-512): <tt>%1</tt> - Effective Date: %1 - Expiration Date: %1 - Issuer: %1 @@ -5188,73 +4155,59 @@ Server replied with error: %2 OCC::SyncEngine - %1 (skipped due to earlier error, trying again in %2) - Only %1 are available, need at least %2 to start Placeholders are postfixed with file sizes using Utility::octetsToString() - Unable to open or create the local sync database. Make sure you have write access in the sync folder. - Disk space is low: Downloads that would reduce free space below %1 were skipped. - There is insufficient space available on the server for some uploads. - Unresolved conflict. - Could not update file: %1 - Could not update virtual file metadata: %1 - Could not update file metadata: %1 - Could not set file record to local DB: %1 - Using virtual files with suffix, but suffix is not set - Unable to read the blacklist from the local database - Unable to read from the sync journal. - Cannot open the sync journal @@ -5262,70 +4215,54 @@ Server replied with error: %2 OCC::SyncStatusSummary - - Offline - - - All synced! - Some files couldn't be synced! - See below for errors - Checking folder changes - Syncing changes - Sync paused - Some files could not be synced! - See below for warnings - Syncing - %1 of %2 · %3 left - %1 of %2 - Syncing file %1 of %2 @@ -5333,54 +4270,42 @@ Server replied with error: %2 OCC::Systray - Download - Add account - Open main dialog - - Pause sync - - Resume sync - Settings - Help - Exit %1 - Pause sync for all - Resume sync for all @@ -5388,27 +4313,22 @@ Server replied with error: %2 OCC::TermsOfServiceCheckWidget - Waiting for terms to be accepted - Polling - Link copied to clipboard. - Open Browser - Copy Link @@ -5416,18 +4336,15 @@ Server replied with error: %2 OCC::Theme - %1 Desktop Client Version %2 (%3) %1 is application name. %2 is the human version string. %3 is the operating system name. - <p><small>Using virtual files plugin: %1</small></p> - <p>This release was supplied by %1.</p> @@ -5435,22 +4352,18 @@ Server replied with error: %2 OCC::UnifiedSearchResultsListModel - Failed to fetch providers. - Failed to fetch search providers for '%1'. Error: %2 - Search has failed for '%2'. - Search has failed for '%1'. Error: %2 @@ -5458,17 +4371,14 @@ Server replied with error: %2 OCC::UpdateE2eeFolderMetadataJob - Failed to update folder metadata. - Failed to unlock encrypted folder. - Failed to finalize item. @@ -5476,35 +4386,22 @@ Server replied with error: %2 OCC::UpdateE2eeFolderUsersMetadataJob - - - - - - - - - Error updating metadata for a folder %1 - Could not fetch public key for user %1 - Could not find root encrypted folder for folder %1 - Could not add or remove user %1 to access folder %2 - Failed to unlock a folder. @@ -5512,17 +4409,14 @@ Server replied with error: %2 OCC::User - End-to-end certificate needs to be migrated to a new one - Trigger the migration - %n notification(s) @@ -5530,28 +4424,22 @@ Server replied with error: %2 - Retry all uploads - - Resolve conflict - Rename file - Open Nextcloud Assistant in browser - Open Nextcloud Talk in browser @@ -5559,22 +4447,18 @@ Server replied with error: %2 OCC::UserModel - Confirm Account Removal - <p>Do you really want to remove the connection to the account <i>%1</i>?</p><p><b>Note:</b> This will <b>not</b> delete any files.</p> - Remove connection - Cancel @@ -5582,81 +4466,62 @@ Server replied with error: %2 OCC::UserStatusSelectorModel - Could not fetch predefined statuses. Make sure you are connected to the server. - Could not fetch status. Make sure you are connected to the server. - Status feature is not supported. You will not be able to set your status. - Emojis are not supported. Some status functionality may not work. - Could not set status. Make sure you are connected to the server. - Could not clear status message. Make sure you are connected to the server. - - Don't clear - 30 minutes - - 1 hour - 4 hours - - Today - - This week - Less than a minute - 1 minute - %1 minutes @@ -5664,7 +4529,6 @@ Server replied with error: %2 - %1 hours @@ -5672,12 +4536,10 @@ Server replied with error: %2 - 1 day - %1 days @@ -5688,17 +4550,14 @@ Server replied with error: %2 OCC::Vfs - Please choose a different location. %1 is a drive. It doesn't support virtual files. - Please choose a different location. %1 isn't a NTFS file system. It doesn't support virtual files. - Please choose a different location. %1 is a network drive. It doesn't support virtual files. @@ -5706,37 +4565,30 @@ Server replied with error: %2 OCC::VfsDownloadErrorDialog - Download error - Error downloading - could not be downloaded - > More details - More details - Error downloading %1 - %1 could not be downloaded. @@ -5744,8 +4596,6 @@ Server replied with error: %2 OCC::VfsSuffix - - Error updating metadata due to invalid modification time @@ -5753,8 +4603,6 @@ Server replied with error: %2 OCC::VfsXAttr - - Error updating metadata due to invalid modification time @@ -5762,12 +4610,10 @@ Server replied with error: %2 OCC::WebEnginePage - Invalid certificate detected - The host "%1" provided an invalid certificate. Continue? @@ -5775,7 +4621,6 @@ Server replied with error: %2 OCC::WebFlowCredentials - You have been logged out of your account %1 at %2. Please login again. @@ -5783,42 +4628,34 @@ Server replied with error: %2 OCC::WelcomePage - Form - Log in - Sign up with provider - Keep your data secure and under your control - Secure collaboration & file exchange - Easy-to-use web mail, calendaring & contacts - Screensharing, online meetings & web conferences - Host your own server @@ -5826,88 +4663,71 @@ Server replied with error: %2 OCC::ownCloudGui - Please sign in - There are no sync folders configured. - Disconnected from %1 - Unsupported Server Version - The server on account %1 runs an unsupported version %2. Using this client with unsupported server versions is untested and potentially dangerous. Proceed at your own risk. - Terms of service - Your account %1 requires you to accept the terms of service of your server. You will be redirected to %2 to acknowledge that you have read it and agrees with it. - %1: %2 Example text: "Nextcloud: Syncing 25MB (3 minutes left)" (%1 is the folder name to be synced, %2 a status message for that folder) - macOS VFS for %1: Sync is running. - macOS VFS for %1: Last sync was successful. - macOS VFS for %1: A problem was encountered. - Checking for changes in remote "%1" - Checking for changes in local "%1" - Disconnected from accounts: - Account %1: %2 - Account synchronization is disabled - %1 (%2, %3) @@ -5915,73 +4735,59 @@ Server replied with error: %2 OwncloudAdvancedSetupPage - Username - Local Folder - Choose different folder - Server address - Sync Logo - Synchronize everything from server - Ask before syncing folders larger than - Ask before syncing external storages - Keep local data - <html><head/><body><p>If this box is checked, existing content in the local folder will be erased to start a clean sync from the server.</p><p>Do not check this if the local content should be uploaded to the servers folder.</p></body></html> - Erase local folder and start a clean sync - MB Trailing part of "Ask confirmation before syncing folder larger than" - Choose what to sync - &Local Folder @@ -5989,12 +4795,10 @@ Server replied with error: %2 OwncloudHttpCredsPage - &Username - &Password @@ -6002,23 +4806,18 @@ Server replied with error: %2 OwncloudSetupPage - - TextLabel - Logo - Server address - This is the link to your %1 web interface when you open it in the browser. @@ -6026,7 +4825,6 @@ Server replied with error: %2 QObject - %nd delay in days after an activity @@ -6035,12 +4833,10 @@ Server replied with error: %2 - in the future - %nh delay in hours after an activity @@ -6049,13 +4845,11 @@ Server replied with error: %2 - 1m one minute after activity date and time - %nm delay in minutes after an activity @@ -6064,68 +4858,55 @@ Server replied with error: %2 - now - Some time ago - %1: %2 this displays an error string (%2) for a file %1 - New folder - Failed to create debug archive - Could not create debug archive in selected location! - You renamed %1 - You deleted %1 - You created %1 - You changed %1 - Synced %1 - Error deleting the file - Paths beginning with '#' character are not supported in VFS mode. @@ -6133,12 +4914,10 @@ Server replied with error: %2 ResolveConflictsDialog - Solve sync conflicts - %1 files in conflict indicate the number of conflicts to resolve @@ -6147,27 +4926,22 @@ Server replied with error: %2 - Choose if you want to keep the local version, server version, or both. If you choose both, the local file will have a number added to its name. - All local versions - All server versions - Resolve conflicts - Cancel @@ -6175,7 +4949,6 @@ Server replied with error: %2 ShareDelegate - Copied! @@ -6183,83 +4956,66 @@ Server replied with error: %2 ShareDetailsPage - An error occurred setting the share password. - Edit share - Share label - - Allow upload and editing - View only - File drop (upload only) - Allow resharing - Hide download - Password protection - Set expiration date - Note to recipient - Enter a note for the recipient - Unshare - Add another link - Share link copied! - Copy share link @@ -6267,37 +5023,30 @@ Server replied with error: %2 ShareView - Password required for new share - Share password - Shared with you by %1 - Expires in %1 - Sharing is disabled - This item cannot be shared. - Sharing is disabled. @@ -6305,12 +5054,10 @@ Server replied with error: %2 ShareeSearchField - Search for users or groups… - Sharing is not available for this folder @@ -6318,7 +5065,6 @@ Server replied with error: %2 SyncJournalDb - Failed to connect database. @@ -6326,17 +5072,14 @@ Server replied with error: %2 SyncStatus - Sync now - Resolve conflicts - Open browser @@ -6344,12 +5087,10 @@ Server replied with error: %2 TalkReplyTextField - Reply to … - Send reply to chat message @@ -6357,78 +5098,29 @@ Server replied with error: %2 TermsOfServiceCheckWidget - Terms of Service - Logo - Switch to your browser to accept the terms of service - - TrayFoldersMenuButton - - - Open local or group folders - - - - - Open local folder - - - - - Connected - - - - - Disconnected - - - - - Open local folder "%1" - - - - - Open group folder "%1" - - - - - Open %1 in file explorer - - - - - User group and local folders menu - - - TrayWindowHeader - Open local or group folders - More apps - Open %1 in browser @@ -6436,7 +5128,6 @@ Server replied with error: %2 UnifiedSearchInputContainer - Search files, messages, events … @@ -6444,7 +5135,6 @@ Server replied with error: %2 UnifiedSearchPlaceholderView - Start typing to search @@ -6452,7 +5142,6 @@ Server replied with error: %2 UnifiedSearchResultFetchMoreTrigger - Load more results @@ -6460,7 +5149,6 @@ Server replied with error: %2 UnifiedSearchResultItemSkeleton - Search result skeleton. @@ -6468,7 +5156,6 @@ Server replied with error: %2 UnifiedSearchResultListItem - Load more results @@ -6476,7 +5163,6 @@ Server replied with error: %2 UnifiedSearchResultNothingFound - No results for @@ -6484,7 +5170,6 @@ Server replied with error: %2 UnifiedSearchResultSectionItem - Search results section %1 @@ -6492,44 +5177,34 @@ Server replied with error: %2 UserLine - Switch to account - Current account status is online - Current account status is do not disturb - Account actions - Set status - - Log out - - Log in - Remove account @@ -6537,67 +5212,54 @@ Server replied with error: %2 UserStatusSelector - Online status - Online - Away - Do not disturb - Mute all notifications - Invisible - Appear offline - Status message - What is your status? - Clear status message after - Cancel - Clear - Apply @@ -6605,32 +5267,26 @@ Server replied with error: %2 Utility - %L1 GB - %L1 MB - %L1 KB - %L1 B - %L1 TB - %n year(s) @@ -6638,7 +5294,6 @@ Server replied with error: %2 - %n month(s) @@ -6646,7 +5301,6 @@ Server replied with error: %2 - %n day(s) @@ -6654,7 +5308,6 @@ Server replied with error: %2 - %n hour(s) @@ -6662,7 +5315,6 @@ Server replied with error: %2 - %n minute(s) @@ -6670,7 +5322,6 @@ Server replied with error: %2 - %n second(s) @@ -6678,7 +5329,6 @@ Server replied with error: %2 - %1 %2 @@ -6686,17 +5336,14 @@ Server replied with error: %2 ValidateChecksumHeader - The checksum header is malformed. - The checksum header contained an unknown checksum type "%1" - The downloaded file does not match the checksum, it will be resumed. "%1" != "%2" @@ -6704,12 +5351,10 @@ Server replied with error: %2 main.cpp - System Tray not available - %1 requires on a working system tray. If you are running XFCE, please follow <a href="http://docs.xfce.org/xfce/xfce4-panel/systray">these instructions</a>. Otherwise, please install a system tray application such as "trayer" and try again. @@ -6717,7 +5362,6 @@ Server replied with error: %2 nextcloudTheme::aboutInfo() - <p><small>Built from Git revision <a href="%1">%2</a> on %3, %4 using Qt %5, %6</small></p> @@ -6725,119 +5369,94 @@ Server replied with error: %2 progress - Virtual file created - Replaced by virtual file - Downloaded - Uploaded - Server version downloaded, copied changed local file into conflict file - Server version downloaded, copied changed local file into case conflict conflict file - Deleted - Moved to %1 - Ignored - Filesystem access error - - Error - Updated local metadata - Updated local virtual files metadata - Updated end-to-end encryption metadata - - Unknown - Downloading - Uploading - Deleting - Moving - Ignoring - Updating local metadata - Updating local virtual files metadata - Updating end-to-end encryption metadata @@ -6845,52 +5464,42 @@ Server replied with error: %2 theme - Sync status is unknown - Waiting to start syncing - Sync is running - Sync was successful - Sync was successful but some files were ignored - Error occurred during sync - Error occurred during setup - Stopping sync - Preparing to sync - Sync is paused @@ -6898,52 +5507,42 @@ Server replied with error: %2 utility - Could not open browser - There was an error when launching the browser to go to URL %1. Maybe no default browser is configured? - Could not open email client - There was an error when launching the email client to create a new message. Maybe no default email client is configured? - Always available locally - Currently available locally - Some available online only - Available online only - Make always available locally - Free up local space diff --git a/translations/client_en_GB.ts b/translations/client_en_GB.ts index 81d59d78ac2a1..84a48fec44f54 100644 --- a/translations/client_en_GB.ts +++ b/translations/client_en_GB.ts @@ -1,13 +1,13 @@ - + + + ActivityItem - Open %1 locally Open %1 locally - In %1 In %1 @@ -15,12 +15,10 @@ ActivityItemContent - Open file details Open file details - Dismiss Dismiss @@ -28,17 +26,14 @@ ActivityList - Activity list Activity list - Scroll to top Scroll to top - No activities yet No activities yet @@ -46,22 +41,18 @@ CallNotificationDialog - Talk notification caller avatar Talk notification caller avatar - Answer Talk call notification Answer Talk call notification - Decline Decline - Decline Talk call notification Decline Talk call notification @@ -69,83 +60,66 @@ CloudProviderWrapper - %1 (%2, %3) %1 (%2, %3) - Checking for changes in "%1" Checking for changes in "%1" - Syncing %1 of %2 (%3 left) Syncing %1 of %2 (%3 left) - Syncing %1 of %2 Syncing %1 of %2 - Syncing %1 (%2 left) Syncing %1 (%2 left) - Syncing %1 Syncing %1 - - No recently changed files No recently changed files - Sync paused Sync paused - Syncing Syncing - Open website Open website - Recently changed Recently changed - Pause synchronization Pause synchronization - Help Help - Settings Settings - Log out Log out - Quit sync client Quit sync client @@ -153,12 +127,10 @@ ConflictDelegate - Local version Local version - Server version Server version @@ -166,59 +138,46 @@ CurrentAccountHeaderButton - Current account Current account - - Resume sync for all Resume sync for all - - Pause sync for all Pause sync for all - Add account Add account - Add new account Add new account - Settings Settings - Exit Exit - Current account avatar Current account avatar - Current account status is online Current account status is online - Current account status is do not disturb Current account status is do not disturb - Account switcher and settings menu Account switcher and settings menu @@ -226,7 +185,6 @@ EditFileLocallyLoadingDialog - Opening file for local editing Opening file for local editing @@ -234,7 +192,6 @@ EmojiPicker - No recent emojis No recent emojis @@ -242,7 +199,6 @@ EncryptionTokenDiscoveryDialog - Discovering the certificates stored on your USB token Discovering the certificates stored on your USB token @@ -250,22 +206,18 @@ EncryptionTokenSelectionWindow - Token Encryption Key Chooser Token Encryption Key Chooser - Available Keys for end-to-end Encryption: Available Keys for end-to-end Encryption: - Choose Choose - Cancel Cancel @@ -273,7 +225,6 @@ ErrorBox - Error Error @@ -281,12 +232,10 @@ FileDetailsPage - Activity Activity - Sharing Sharing @@ -294,7 +243,6 @@ FileDetailsWindow - File details of %1 · %2 File details of %1 · %2 @@ -302,35 +250,32 @@ FileProviderEvictionDialog - - Remove local copies - Remove local copies - - - Evict materialised files Evict materialised files - - Local copies - Local copies - - - Reload Reload - Materialised items Materialised items + + FileProviderFastEnumerationSettings + + Enable fast sync + Enable fast sync + + + Fast sync will only sync changes in files and folders within folders that have been explored. This can significantly increase responsiveness on initial configuration of virtual files. However, it will cause redundant downloads of files moved to an unexplored folder. + Fast sync will only sync changes in files and folders within folders that have been explored. This can significantly increase responsiveness on initial configuration of virtual files. However, it will cause redundant downloads of files moved to an unexplored folder. + + FileProviderFileDelegate - Delete Delete @@ -338,50 +283,29 @@ FileProviderSettings - Virtual files settings Virtual files settings - General settings General settings - Enable virtual files Enable virtual files - - - Allow deletion of items in Trash - Allow deletion of items in Trash - - - - Reset virtual files environment - Reset virtual files environment - FileProviderStorageInfo - Local storage use Local storage use - %1 GB of %2 GB remote files synced %1 GB of %2 GB remote files synced - - Free up space … - Free up space … - - - Evict local copies … Evict local copies … @@ -389,22 +313,18 @@ FileProviderSyncStatus - Syncing Syncing - All synced! All synced! - Request sync Request sync - Request a sync of changes for the VFS environment. macOS may ignore or delay this request. Request a sync of changes for the VFS environment. @@ -414,12 +334,10 @@ macOS may ignore or delay this request. FileSystem - Error removing "%1": %2 Error removing "%1": %2 - Could not remove folder "%1" Could not remove folder "%1" @@ -427,22 +345,18 @@ macOS may ignore or delay this request. Flow2AuthWidget - Browser Authentication Browser Authentication - Logo Logo - Switch to your browser to connect your account Switch to your browser to connect your account - An error occurred while connecting. Please try again. An error occurred while connecting. Please try again. @@ -450,12 +364,10 @@ macOS may ignore or delay this request. FolderWizardSourcePage - Pick a local folder on your computer to sync Pick a local folder on your computer to sync - &Choose … &Choose … @@ -463,22 +375,18 @@ macOS may ignore or delay this request. FolderWizardTargetPage - Select a remote destination folder Select a remote destination folder - Create folder Create folder - Refresh Refresh - Folders Folders @@ -486,17 +394,14 @@ macOS may ignore or delay this request. MainWindow - Nextcloud desktop main dialog Nextcloud desktop main dialogue - Unified search results list Unified search results list - New activities New activities @@ -504,17 +409,14 @@ macOS may ignore or delay this request. OCC::AbstractNetworkJob - Connection timed out Connection timed out - Unknown error: network reply was deleted Unknown error: network reply was deleted - Server replied "%1 %2" to "%3 %4" Server replied "%1 %2" to "%3 %4" @@ -522,17 +424,14 @@ macOS may ignore or delay this request. OCC::Account - File %1 is already locked by %2. File %1 is already locked by %2. - Lock operation on %1 failed with error %2 Lock operation on %1 failed with error %2 - Unlock operation on %1 failed with error %2 Unlock operation on %1 failed with error %2 @@ -540,44 +439,30 @@ macOS may ignore or delay this request. OCC::AccountManager - - An account was detected from a legacy desktop client. -Should the account be imported? - An account was detected from a legacy desktop client. -Should the account be imported? - - - %1 accounts were detected from a legacy desktop client. Should the accounts be imported? %1 accounts were detected from a legacy desktop client. Should the accounts be imported? - - Legacy import Legacy import - Import Import - 1 account was detected from a legacy desktop client. Should the account be imported? 1 account was detected from a legacy desktop client. Should the account be imported? - Skip Skip - Could not import accounts from legacy client configuration. Could not import accounts from legacy client configuration. @@ -585,257 +470,188 @@ Should the account be imported? OCC::AccountSettings - Unchecked folders will be <b>removed</b> from your local file system and will not be synchronized to this computer anymore Unchecked folders will be <b>removed</b> from your local file system and will not be synchronised to this computer any more - Synchronize all Synchronise all - Synchronize none Synchronize none - Apply manual changes Apply manual changes - Standard file sync Standard file sync - Virtual file sync Virtual file sync - Connection settings Connection settings - Apply Apply - Storage space: … Storage space: … - - - Cancel Cancel - Connected with <server> as <user> Connected with <server> as <user> - No account configured. No account configured. - End-to-end Encryption with Virtual Files End-to-end Encryption with Virtual Files - You seem to have the Virtual Files feature enabled on this folder. At the moment, it is not possible to implicitly download virtual files that are end-to-end encrypted. To get the best experience with virtual files and end-to-end encryption, make sure the encrypted folder is marked with "Make always available locally". You seem to have the Virtual Files feature enabled on this folder. At the moment, it is not possible to implicitly download virtual files that are end-to-end encrypted. To get the best experience with virtual files and end-to-end encryption, make sure the encrypted folder is marked with "Make always available locally". - - Do not encrypt folder Do not encrypt folder - - Encrypt folder Encrypt folder - End-to-end Encryption End-to-end Encryption - This will encrypt your folder and all files within it. These files will no longer be accessible without your encryption mnemonic key. <b>This process is not reversible. Are you sure you want to proceed?</b> This will encrypt your folder and all files within it. These files will no longer be accessible without your encryption mnemonic key. <b>This process is not reversible. Are you sure you want to proceed?</b> - - Forget encryption setup - Forget encryption setup - - - Disable encryption Disable encryption - Display mnemonic Display mnemonic - - Encryption is set-up. Remember to <b>Encrypt</b> a folder to end-to-end encrypt any new files added to it. - Encryption is set-up. Remember to <b>Encrypt</b> a folder to end-to-end encrypt any new files added to it. - - - End-to-end encryption has been enabled for this account End-to-end encryption has been enabled for this account - Warning Warning - Please wait for the folder to sync before trying to encrypt it. Please wait for the folder to sync before trying to encrypt it. - The folder has a minor sync problem. Encryption of this folder will be possible once it has synced successfully The folder has a minor sync problem. Encryption of this folder will be possible once it has synced successfully - The folder has a sync error. Encryption of this folder will be possible once it has synced successfully The folder has a sync error. Encryption of this folder will be possible once it has synced successfully - - You cannot encrypt this folder because the end-to-end encryption is not set-up yet on this device. -Would you like to do this now? - You cannot encrypt this folder because the end-to-end encryption is not set-up yet on this device. -Would you like to do this now? - - - End-to-end encryption is not configured on this device. Once it is configured, you will be able to encrypt this folder. Would you like to set up end-to-end encryption? End-to-end encryption is not configured on this device. Once it is configured, you will be able to encrypt this folder. Would you like to set up end-to-end encryption? - You cannot encrypt a folder with contents, please remove the files. Wait for the new sync, then encrypt it. You cannot encrypt a folder with contents, please remove the files. Wait for the new sync, then encrypt it. - Encryption failed Encryption failed - Could not encrypt folder because the folder does not exist anymore Could not encrypt folder because the folder does not exist anymore - Encrypt Encrypt - - Edit Ignored Files Edit Ignored Files - - Create new folder Create new folder - - Availability Availability - Choose what to sync Choose what to sync - Force sync now Force sync now - Restart sync Restart sync - Remove folder sync connection Remove folder sync connection - Disable virtual file support … Disable virtual file support … - Enable virtual file support %1 … Enable virtual file support %1 … - (experimental) (experimental) - Folder creation failed Folder creation failed - Confirm Folder Sync Connection Removal Confirm Folder Sync Connection Removal - Remove Folder Sync Connection Remove Folder Sync Connection - Disable virtual file support? Disable virtual file support? - This action will disable virtual file support. As a consequence contents of folders that are currently marked as "available online only" will be downloaded. The only advantage of disabling virtual file support is that the selective sync feature will become available again. @@ -848,218 +664,150 @@ The only advantage of disabling virtual file support is that the selective sync This action will abort any currently running synchronization. - Disable support Disable support - End-to-end encryption mnemonic End-to-end encryption mnemonic - - To protect your Cryptographic Identity, we encrypt it with a mnemonic of 12 dictionary words. Please note it down and keep it safe. You will need it to set-up the synchronization of encrypted folders on your other devices. - To protect your Cryptographic Identity, we encrypt it with a mnemonic of 12 dictionary words. Please note it down and keep it safe. You will need it to set-up the synchronization of encrypted folders on your other devices. - - - - Forget the end-to-end encryption on this device - Forget the end-to-end encryption on this device - - - - Do you want to forget the end-to-end encryption settings for %1 on this device? - Do you want to forget the end-to-end encryption settings for %1 on this device? - - - - Forgetting end-to-end encryption will remove the sensitive data and all the encrypted files from this device.<br>However, the encrypted files will remain on the server and all your other devices, if configured. - Forgetting end-to-end encryption will remove the sensitive data and all the encrypted files from this device.<br>However, the encrypted files will remain on the server and all your other devices, if configured. - - - Sync Running Sync Running - The syncing operation is running.<br/>Do you want to terminate it? The syncing operation is running.<br/>Do you want to terminate it? - %1 in use %1 in use - Migrate certificate to a new one Migrate certificate to a new one - There are folders that have grown in size beyond %1MB: %2 There are folders that have grown in size beyond %1MB: %2 - - End-to-end encryption has been initialized on this account with another device.<br>Enter the unique mnemonic to have the encrypted folders synchronize on this device as well. - End-to-end encryption has been initialized on this account with another device.<br>Enter the unique mnemonic to have the encrypted folders synchronize on this device as well. - - - End-to-end encryption has been enabled on this account with another device.<br>It can be enabled on this device by entering your mnemonic.<br>This will enable synchronisation of existing encrypted folders. End-to-end encryption has been enabled on this account with another device.<br>It can be enabled on this device by entering your mnemonic.<br>This will enable synchronisation of existing encrypted folders. - - This account supports end-to-end encryption, but it needs to be set up first. - This account supports end-to-end encryption, but it needs to be set up first. - - - Set up encryption Set up encryption - This account supports end-to-end encryption This account supports end-to-end encryption - Connected to %1. Connected to %1. - Server %1 is temporarily unavailable. Server %1 is temporarily unavailable. - Server %1 is currently in maintenance mode. Server %1 is currently in maintenance mode. - Signed out from %1. Signed out from %1. - There are folders that were not synchronized because they are too big: There are folders that were not synchronised because they are too big: - There are folders that were not synchronized because they are external storages: There are folders that were not synchronised because they are external storages: - There are folders that were not synchronized because they are too big or external storages: There are folders that were not synchronised because they are too big or external storages: - - Open folder Open folder - Resume sync Resume sync - Pause sync Pause sync - <p>Could not create local folder <i>%1</i>.</p> <p>Could not create local folder <i>%1</i>.</p> - <p>Do you really want to stop syncing the folder <i>%1</i>?</p><p><b>Note:</b> This will <b>not</b> delete any files.</p> <p>Do you really want to stop syncing the folder <i>%1</i>?</p><p><b>Note:</b> This will <b>not</b> delete any files.</p> - To protect your Cryptographic Identity, we encrypt it with a mnemonic of 12 dictionary words. Please note these down and keep them safe. They will be needed to add other devices to your account (like your mobile phone or laptop). To protect your Cryptographic Identity, we encrypt it with a mnemonic of 12 dictionary words. Please note these down and keep them safe. They will be needed to add other devices to your account (like your mobile phone or laptop). - Disable end-to-end encryption Disable end-to-end encryption - Disable end-to-end encryption for %1? Disable end-to-end encryption for %1? - Removing end-to-end encryption will remove locally-synced files that are encrypted.<br>Encrypted files will remain on the server. Removing end-to-end encryption will remove locally-synced files that are encrypted.<br>Encrypted files will remain on the server. - %1 (%3%) of %2 in use. Some folders, including network mounted or shared folders, might have different limits. %1 (%3%) of %2 in use. Some folders, including network mounted or shared folders, might have different limits. - %1 of %2 in use %1 of %2 in use - Currently there is no storage usage information available. Currently there is no storage usage information available. - %1 as %2 %1 as %2 - The server version %1 is unsupported! Proceed at your own risk. The server version %1 is unsupported! Proceed at your own risk. - Server %1 is currently being redirected, or your connection is behind a captive portal. Server %1 is currently being redirected, or your connection is behind a captive portal. - Connecting to %1 … Connecting to %1 … - Unable to connect to %1. Unable to connect to %1. - Server configuration error: %1 at %2. Server configuration error: %1 at %2. - You need to accept the terms of service at %1. You need to accept the terms of service at %1. - No %1 connection configured. No %1 connection configured. @@ -1067,17 +815,14 @@ This action will abort any currently running synchronization. OCC::AccountSetupFromCommandLineJob - The authenticated request to the server was redirected to "%1". The URL is bad, the server is misconfigured. The authenticated request to the server was redirected to "%1". The URL is bad, the server is misconfigured. - Access forbidden by server. To verify that you have proper access, <a href="%1">click here</a> to access the service with your browser. Access forbidden by server. To verify that you have proper access, <a href="%1">click here</a> to access the service with your browser. - There was an invalid response to an authenticated WebDAV request There was an invalid response to an authenticated WebDAV request @@ -1085,57 +830,46 @@ This action will abort any currently running synchronization. OCC::AccountState - Signed out Signed out - Disconnected Disconnected - Connected Connected - Service unavailable Service unavailable - Maintenance mode Maintenance mode - Redirect detected Redirect detected - Network error Network error - Configuration error Configuration error - Asking Credentials Asking Credentials - Need the user to accept the terms of service Need the user to accept the terms of service - Unknown account state Unknown account state @@ -1143,17 +877,14 @@ This action will abort any currently running synchronization. OCC::ActivityListModel - For more activities please open the Activity app. For more activities please open the Activity app. - Fetching activities … Fetching activities … - Network error occurred: client will retry syncing. Network error occurred: client will retry syncing. @@ -1161,42 +892,34 @@ This action will abort any currently running synchronization. OCC::AddCertificateDialog - SSL client certificate authentication SSL client certificate authentication - This server probably requires a SSL client certificate. This server probably requires a SSL client certificate. - Certificate & Key (pkcs12): Certificate & Key (pkcs12): - Certificate password: Certificate password: - An encrypted pkcs12 bundle is strongly recommended as a copy will be stored in the configuration file. An encrypted pkcs12 bundle is strongly recommended as a copy will be stored in the configuration file. - Browse … Browse … - Select a certificate Select a certificate - Certificate files (*.p12 *.pfx) Certificate files (*.p12 *.pfx) @@ -1204,71 +927,58 @@ This action will abort any currently running synchronization. OCC::Application - Some settings were configured in %1 versions of this client and use features that are not available in this version.<br><br>Continuing will mean <b>%2 these settings</b>.<br><br>The current configuration file was already backed up to <i>%3</i>. Some settings were configured in %1 versions of this client and use features that are not available in this version.<br><br>Continuing will mean <b>%2 these settings</b>.<br><br>The current configuration file was already backed up to <i>%3</i>. - newer newer software version newer - older older software version older - ignoring ignoring - deleting deleting - Quit Quit - Continue Continue - %1 accounts number of accounts imported %1 accounts - 1 account 1 account - %1 folders number of folders imported %1 folders - 1 folder 1 folder - Legacy import Legacy import - Imported %1 and %2 from a legacy desktop client. %3 number of accounts and folders imported. list of users. @@ -1276,12 +986,10 @@ This action will abort any currently running synchronization. %3 - Error accessing the configuration file Error accessing the configuration file - There was an error while accessing the configuration file at %1. Please make sure the file can be accessed by your system account. There was an error while accessing the configuration file at %1. Please make sure the file can be accessed by your system account. @@ -1289,22 +997,18 @@ This action will abort any currently running synchronization. OCC::AuthenticationDialog - Authentication Required Authentication Required - Enter username and password for "%1" at %2. Enter username and password for "%1" at %2. - &Username: &Username: - &Password: &Password: @@ -1312,115 +1016,57 @@ This action will abort any currently running synchronization. OCC::BasePropagateRemoteDeleteEncrypted - "%1 Failed to unlock encrypted folder %2". "%1 Failed to unlock encrypted folder %2". - Wrong HTTP code returned by server. Expected 204, but received "%1 %2". Wrong HTTP code returned by server. Expected 204, but received "%1 %2". - - OCC::BulkPropagatorDownloadJob - - - - File has changed since discovery - File has changed since discovery - - - - Could not delete file record %1 from local DB - Could not delete file record %1 from local DB - - - - File %1 cannot be downloaded because it is non virtual! - File %1 cannot be downloaded because it is non virtual! - - - - Could not get file %1 from local DB - Could not get file %1 from local DB - - - - File %1 cannot be downloaded because encryption information is missing. - File %1 cannot be downloaded because encryption information is missing. - - - - Error updating metadata: %1 - Error updating metadata: %1 - - - - The file %1 is currently in use - The file %1 is currently in use - - OCC::BulkPropagatorJob - File %1 cannot be uploaded because another file with the same name, differing only in case, exists File %1 cannot be uploaded because another file with the same name, differing only in case, exists - - File contains leading or trailing spaces and couldn't be renamed - File contains leading or trailing spaces and couldn't be renamed - - - File %1 has invalid modified time. Do not upload to the server. File %1 has invalid modified time. Do not upload to the server. - File Removed (start upload) %1 File Removed (start upload) %1 - File %1 has invalid modification time. Do not upload to the server. File %1 has invalid modification time. Do not upload to the server. - Local file changed during syncing. It will be resumed. Local file changed during syncing. It will be resumed. - - Local file changed during sync. Local file changed during sync. - Network error: %1 Network error: %1 - Error updating metadata: %1 Error updating metadata: %1 - The file %1 is currently in use The file %1 is currently in use - The local file was removed during sync. The local file was removed during sync. - Restoration failed: %1 Restoration failed: %1 @@ -1428,37 +1074,30 @@ This action will abort any currently running synchronization. OCC::CaseClashConflictSolver - Cannot rename file because a file with the same name already exists on the server. Please pick another name. Cannot rename file because a file with the same name already exists on the server. Please pick another name. - Could not rename file. Please make sure you are connected to the server. Could not rename file. Please make sure you are connected to the server. - You don't have the permission to rename this file. Please ask the author of the file to rename it. You don't have the permission to rename this file. Please ask the author of the file to rename it. - Failed to fetch permissions with error %1 Failed to fetch permissions with error %1 - Filename contains leading and trailing spaces. Filename contains leading and trailing spaces. - Filename contains leading spaces. Filename contains leading spaces. - Filename contains trailing spaces. Filename contains trailing spaces. @@ -1466,111 +1105,86 @@ This action will abort any currently running synchronization. OCC::CaseClashFilenameDialog - Case Clash Conflict Case Clash Conflict - The file could not be synced because it generates a case clash conflict with an existing file on this system. The file could not be synced because it generates a case clash conflict with an existing file on this system. - Error Error - Existing file Existing file - file A file A - - today today - - 0 byte 0 byte - - Open existing file Open existing file - Case clashing file Case clashing file - file B file B - - Open clashing file Open clashing file - Please enter a new name for the clashing file: Please enter a new name for the clashing file: - New filename New filename - Rename file Rename file - The file "%1" could not be synced because of a case clash conflict with an existing file on this system. The file "%1" could not be synced because of a case clash conflict with an existing file on this system. - %1 does not support equal file names with only letter casing differences. %1 does not support equal file names with only letter casing differences. - Filename contains leading and trailing spaces. Filename contains leading and trailing spaces. - Filename contains leading spaces. Filename contains leading spaces. - Filename contains trailing spaces. Filename contains trailing spaces. - Use invalid name Use invalid name - Filename contains illegal characters: %1 Filename contains illegal characters: %1 @@ -1578,7 +1192,6 @@ This action will abort any currently running synchronization. OCC::CleanupPollsJob - Error writing metadata to the database Error writing metadata to the database @@ -1586,33 +1199,27 @@ This action will abort any currently running synchronization. OCC::ClientSideEncryption - Input PIN code Please keep it short and shorter than "Enter Certificate USB Token PIN:" Input PIN code - Enter Certificate USB Token PIN: Enter Certificate USB Token PIN: - Invalid PIN. Login failed Invalid PIN. Login failed - Login to the token failed after providing the user PIN. It may be invalid or wrong. Please try again! Login to the token failed after providing the user PIN. It may be invalid or wrong. Please try again! - Please enter your end-to-end encryption passphrase:<br><br>Username: %2<br>Account: %3<br> Please enter your end-to-end encryption passphrase:<br><br>Username: %2<br>Account: %3<br> - Enter E2E passphrase Enter E2E passphrase @@ -1620,87 +1227,66 @@ This action will abort any currently running synchronization. OCC::ConflictDialog - Sync Conflict Sync Conflict - - Conflicting versions of %1. Conflicting versions of %1. - Which version of the file do you want to keep?<br/>If you select both versions, the local file will have a number added to its name. Which version of the file do you want to keep?<br/>If you select both versions, the local file will have a number added to its name. - Local version Local version - - Click to open the file Click to open the file - - today today - - 0 byte 0 byte - <a href="%1">Open local version</a> <a href="%1">Open local version</a> - Server version Server version - <a href="%1">Open server version</a> <a href="%1">Open server version</a> - - Keep selected version Keep selected version - Open local version Open local version - Open server version Open server version - Keep both versions Keep both versions - Keep local version Keep local version - Keep server version Keep server version @@ -1708,14 +1294,10 @@ This action will abort any currently running synchronization. OCC::ConflictSolver - - Error Error - - Moving file failed: %1 @@ -1724,17 +1306,14 @@ This action will abort any currently running synchronization. %1 - Do you want to delete the directory <i>%1</i> and all its contents permanently? Do you want to delete the directory <i>%1</i> and all its contents permanently? - Do you want to delete the file <i>%1</i> permanently? Do you want to delete the file <i>%1</i> permanently? - Confirm deletion Confirm deletion @@ -1742,32 +1321,26 @@ This action will abort any currently running synchronization. OCC::ConnectionValidator - Timeout Timeout - The configured server for this client is too old The configured server for this client is too old - Please update to the latest server and restart the client. Please update to the latest server and restart the client. - Authentication error: Either username or password are wrong. Authentication error: Either username or password are wrong. - No Nextcloud account configured No Nextcloud account configured - The provided credentials are not correct The provided credentials are not correct @@ -1775,12 +1348,10 @@ This action will abort any currently running synchronization. OCC::DiscoveryPhase - Error while canceling deletion of a file Error while canceling deletion of a file - Error while canceling deletion of %1 Error while canceling deletion of %1 @@ -1788,19 +1359,14 @@ This action will abort any currently running synchronization. OCC::DiscoverySingleDirectoryJob - - Server error: PROPFIND reply is not XML formatted! Server error: PROPFIND reply is not XML formatted! - - Encrypted metadata setup error! Encrypted metadata setup error! - Encrypted metadata setup error: initial signature from server is empty. Encrypted metadata setup error: initial signature from server is empty. @@ -1808,27 +1374,22 @@ This action will abort any currently running synchronization. OCC::DiscoverySingleLocalDirectoryJob - Error while opening directory %1 Error while opening directory %1 - Directory not accessible on client, permission denied Directory not accessible on client, permission denied - Directory not found: %1 Directory not found: %1 - Filename encoding is not valid Filename encoding is not valid - Error while reading directory %1 Error while reading directory %1 @@ -1836,93 +1397,62 @@ This action will abort any currently running synchronization. OCC::EditLocallyJob - - - - - - - - Could not start editing locally. Could not start editing locally. - - An error occurred during setup. An error occurred during setup. - - Could not find a file for local editing. Make sure its path is valid and it is synced locally. Could not find a file for local editing. Make sure its path is valid and it is synced locally. - - - - Could not find a file for local editing. Make sure it is not excluded via selective sync. Could not find a file for local editing. Make sure it is not excluded via selective sync. - - - An error occurred during data retrieval. An error occurred during data retrieval. - - An error occurred trying to synchronise the file to edit locally. An error occurred trying to synchronise the file to edit locally. - Server error: PROPFIND reply is not XML formatted! Server error: PROPFIND reply is not XML formatted! - Could not find a remote file info for local editing. Make sure its path is valid. Could not find a remote file info for local editing. Make sure its path is valid. - Invalid local file path. Invalid local file path. - Could not open %1 Could not open %1 - Please try again. Please try again. - File %1 already locked. File %1 already locked. - - Lock will last for %1 minutes. You can also unlock this file manually once you are finished editing. Lock will last for %1 minutes. You can also unlock this file manually once you are finished editing. - File %1 now locked. File %1 now locked. - File %1 could not be locked. File %1 could not be locked. @@ -1930,12 +1460,10 @@ This action will abort any currently running synchronization. OCC::EditLocallyManager - Could not validate the request to open a file from server. Could not validate the request to open a file from server. - Please try again. Please try again. @@ -1943,34 +1471,26 @@ This action will abort any currently running synchronization. OCC::EditLocallyVerificationJob - Invalid token received. Invalid token received. - - - Please try again. Please try again. - Invalid file path was provided. Invalid file path was provided. - Could not find an account for local editing. Could not find an account for local editing. - Could not start editing locally. Could not start editing locally. - An error occurred trying to verify the request to edit locally. An error occurred trying to verify the request to edit locally. @@ -1978,7 +1498,6 @@ This action will abort any currently running synchronization. OCC::EncryptFolderJob - Could not generate the metadata for encryption, Unlocking the folder. This can be an issue with your OpenSSL libraries. Could not generate the metadata for encryption, Unlocking the folder. @@ -1988,34 +1507,22 @@ This can be an issue with your OpenSSL libraries. OCC::EncryptedFolderMetadataHandler - - - - - - Error fetching metadata. Error fetching metadata. - - - Error locking folder. Error locking folder. - Error fetching encrypted folder ID. Error fetching encrypted folder ID. - Error parsing or decrypting metadata. Error parsing or decrypting metadata. - Failed to upload metadata Failed to upload metadata @@ -2023,86 +1530,85 @@ This can be an issue with your OpenSSL libraries. OCC::FileDetails - %1 second(s) ago seconds elapsed since file last modified - %1 second(s) ago%1 second(s) ago + + %1 second(s) ago + %1 second(s) ago + - %1 minute(s) ago minutes elapsed since file last modified - %1 minute(s) ago%1 minute(s) ago + + %1 minute(s) ago + %1 minute(s) ago + - %1 hour(s) ago hours elapsed since file last modified - %1 hour(s) ago%1 hour(s) ago + + %1 hour(s) ago + %1 hour(s) ago + - %1 day(s) ago days elapsed since file last modified - %1 day(s) ago%1 day(s) ago + + %1 day(s) ago + %1 day(s) ago + - %1 month(s) ago months elapsed since file last modified - %1 month(s) ago%1 month(s) ago + + %1 month(s) ago + %1 month(s) ago + - %1 year(s) ago years elapsed since file last modified - %1 year(s) ago%1 year(s) ago + + %1 year(s) ago + %1 year(s) ago + - Locked by %1 - Expires in %2 minute(s) remaining time before lock expires - Locked by %1 - Expires in %2 minute(s)Locked by %1 - Expires in %2 minute(s) + + Locked by %1 - Expires in %2 minute(s) + Locked by %1 - Expires in %2 minute(s) + OCC::Flow2Auth - The returned server URL does not start with HTTPS despite the login URL started with HTTPS. Login will not be possible because this might be a security issue. Please contact your administrator. The returned server URL does not start with HTTPS despite the login URL started with HTTPS. Login will not be possible because this might be a security issue. Please contact your administrator. - - Error returned from the server: <em>%1</em> Error returned from the server: <em>%1</em> - The polling URL does not start with HTTPS despite the login URL started with HTTPS. Login will not be possible because this might be a security issue. Please contact your administrator. The polling URL does not start with HTTPS despite the login URL started with HTTPS. Login will not be possible because this might be a security issue. Please contact your administrator. - - There was an error accessing the "token" endpoint: <br><em>%1</em> There was an error accessing the "token" endpoint: <br><em>%1</em> - - The reply from the server did not contain all expected fields The reply from the server did not contain all expected fields - - The reply from the server did not contain all expected fields: <br><em>%1</em> - The reply from the server did not contain all expected fields: <br><em>%1</em> - - - - Could not parse the JSON returned from the server: <br><em>%1</em> Could not parse the JSON returned from the server: <br><em>%1</em> @@ -2110,37 +1616,30 @@ This can be an issue with your OpenSSL libraries. OCC::Flow2AuthWidget - Unable to open the Browser, please copy the link to your Browser. Unable to open the Browser, please copy the link to your Browser. - Waiting for authorization Waiting for authorization - Polling for authorization Polling for authorization - Starting authorization Starting authorization - Link copied to clipboard. Link copied to clipboard. - Open Browser Open Browser - Copy Link Copy Link @@ -2148,172 +1647,164 @@ This can be an issue with your OpenSSL libraries. OCC::Folder - %1 has been removed. %1 names a file. %1 has been removed. - %1 has been updated. %1 names a file. %1 has been updated. - %1 has been renamed to %2. %1 and %2 name files. %1 has been renamed to %2. - %1 has been moved to %2. %1 has been moved to %2. - %1 and %n other file(s) have been removed. - %1 and %n other file have been removed.%1 and %n other files have been removed. + + %1 and %n other file have been removed. + %1 and %n other files have been removed. + - Please choose a different location. The folder %1 doesn't exist. Please choose a different location. The folder %1 doesn't exist. - Please choose a different location. %1 isn't a valid folder. Please choose a different location. %1 isn't a valid folder. - Please choose a different location. %1 isn't a readable folder. Please choose a different location. %1 isn't a readable folder. - %1 and %n other file(s) have been added. - %1 and %n other file(s) have been added.%1 and %n other file(s) have been added. + + %1 and %n other file(s) have been added. + %1 and %n other file(s) have been added. + - %1 has been added. %1 names a file. %1 has been added. - %1 and %n other file(s) have been updated. - %1 and %n other file have been updated.%1 and %n other files have been updated. + + %1 and %n other file have been updated. + %1 and %n other files have been updated. + - %1 has been renamed to %2 and %n other file(s) have been renamed. - %1 has been renamed to %2 and %n other file have been renamed.%1 has been renamed to %2 and %n other files have been renamed. + + %1 has been renamed to %2 and %n other file have been renamed. + %1 has been renamed to %2 and %n other files have been renamed. + - %1 has been moved to %2 and %n other file(s) have been moved. - %1 has been moved to %2 and %n other file have been moved.%1 has been moved to %2 and %n other files have been moved. + + %1 has been moved to %2 and %n other file have been moved. + %1 has been moved to %2 and %n other files have been moved. + - %1 has and %n other file(s) have sync conflicts. - %1 has and %n other file have sync conflicts.%1 has and %n other files have sync conflicts. + + %1 has and %n other file have sync conflicts. + %1 has and %n other files have sync conflicts. + - %1 has a sync conflict. Please check the conflict file! %1 has a sync conflict. Please check the conflict file! - %1 and %n other file(s) could not be synced due to errors. See the log for details. - %1 and %n other file could not be synced due to errors. See the log for details.%1 and %n other files could not be synced due to errors. See the log for details. + + %1 and %n other file could not be synced due to errors. See the log for details. + %1 and %n other files could not be synced due to errors. See the log for details. + - %1 could not be synced due to an error. See the log for details. %1 could not be synced due to an error. See the log for details. - %1 and %n other file(s) are currently locked. - %1 and %n other file(s) are currently locked.%1 and %n other file(s) are currently locked. + + %1 and %n other file(s) are currently locked. + %1 and %n other file(s) are currently locked. + - %1 is currently locked. %1 is currently locked. - Sync Activity Sync Activity - Could not read system exclude file Could not read system exclude file - A new folder larger than %1 MB has been added: %2. A new folder larger than %1 MB has been added: %2. - A folder from an external storage has been added. A folder from an external storage has been added. - Please go in the settings to select it if you wish to download it. Please go in the settings to select it if you wish to download it. - A folder has surpassed the set folder size limit of %1MB: %2. %3 A folder has surpassed the set folder size limit of %1MB: %2. %3 - Keep syncing Keep syncing - Stop syncing Stop syncing - The folder %1 has surpassed the set folder size limit of %2MB. The folder %1 has surpassed the set folder size limit of %2MB. - Would you like to stop syncing this folder? Would you like to stop syncing this folder? - The folder %1 was created but was excluded from synchronization previously. Data inside it will not be synchronized. The folder %1 was created but was excluded from synchronization previously. Data inside it will not be synchronized. - The file %1 was created but was excluded from synchronization previously. It will not be synchronized. The file %1 was created but was excluded from synchronization previously. It will not be synchronized. - Changes in synchronized folders could not be tracked reliably. This means that the synchronization client might not upload local changes immediately and will instead only scan for local changes and upload them occasionally (every two hours by default). @@ -2326,45 +1817,38 @@ This means that the synchronization client might not upload local changes immedi %1 - Virtual file download failed with code "%1", status "%2" and error message "%3" Virtual file download failed with code "%1", status "%2" and error message "%3" - A large number of files in the server have been deleted. -Please confirm if you'd like to proceed with these deletions. +Please confirm if you'd like to proceed with these deletions. Alternatively, you can restore all deleted files by uploading from '%1' folder to the server. A large number of files in the server have been deleted. Please confirm if you'd like to proceed with these deletions. Alternatively, you can restore all deleted files by uploading from '%1' folder to the server. - - A large number of files in your local '%1' folder have been deleted. -Please confirm if you'd like to proceed with these deletions. + A large number of files in your local '%1' folder have been deleted. +Please confirm if you'd like to proceed with these deletions. Alternatively, you can restore all deleted files by downloading them from the server. A large number of files in your local '%1' folder have been deleted. Please confirm if you'd like to proceed with these deletions. Alternatively, you can restore all deleted files by downloading them from the server. - Remove all files? Remove all files? - Proceed with Deletion Proceed with Deletion - Restore Files to Server Restore Files to Server - Restore Files from Server Restore Files from Server @@ -2372,27 +1856,22 @@ Alternatively, you can restore all deleted files by downloading them from the se OCC::FolderCreationDialog - Create new folder Create new folder - Enter folder name Enter folder name - Folder already exists Folder already exists - Error Error - Could not create a folder! Check your write permissions. Could not create a folder! Check your write permissions. @@ -2400,136 +1879,108 @@ Alternatively, you can restore all deleted files by downloading them from the se OCC::FolderMan - Could not reset folder state Could not reset folder state - (backup) (backup) - (backup %1) (backup %1) - An old sync journal "%1" was found, but could not be removed. Please make sure that no application is currently using it. An old sync journal "%1" was found, but could not be removed. Please make sure that no application is currently using it. - Undefined state. Undefined state. - Waiting to start syncing. Waiting to start syncing. - Preparing for sync. Preparing for sync. - Syncing %1 of %2 (A few seconds left) Syncing %1 of %2 (A few seconds left) - Syncing %1 of %2 (%3 left) Syncing %1 of %2 (%3 left) - Syncing %1 of %2 Syncing %1 of %2 - Syncing %1 (A few seconds left) Syncing %1 (A few seconds left) - Syncing %1 (%2 left) Syncing %1 (%2 left) - Syncing %1 Syncing %1 - Sync is running. Sync is running. - Sync finished with unresolved conflicts. Sync finished with unresolved conflicts. - Last sync was successful. Last sync was successful. - Setup error. Setup error. - Sync request was cancelled. Sync request was cancelled. - Please choose a different location. The selected folder isn't valid. Please choose a different location. The selected folder isn't valid. - - Please choose a different location. %1 is already being used as a sync folder. Please choose a different location. %1 is already being used as a sync folder. - Please choose a different location. The path %1 doesn't exist. Please choose a different location. The path %1 doesn't exist. - Please choose a different location. The path %1 isn't a folder. Please choose a different location. The path %1 isn't a folder. - - Please choose a different location. You don't have enough permissions to write to %1. folder location Please choose a different location. You don't have enough permissions to write to %1. - Please choose a different location. %1 is already contained in a folder used as a sync folder. Please choose a different location. %1 is already contained in a folder used as a sync folder. - Please choose a different location. %1 is already being used as a sync folder for %2. folder location, server url Please choose a different location. %1 is already being used as a sync folder for %2. - The folder %1 is linked to multiple accounts. This setup can cause data loss and it is no longer supported. To resolve this issue: please remove %1 from one of the accounts and create a new sync folder. @@ -2540,12 +1991,10 @@ To resolve this issue: please remove %1 from one of the accounts and create a ne For advanced users: this issue might be related to multiple sync database files found in one folder. Please check %1 for outdated and unused .sync_*.db files and remove them. - Sync is paused. Sync is paused. - %1 (Sync is paused) %1 (Sync is paused) @@ -2553,12 +2002,10 @@ For advanced users: this issue might be related to multiple sync database files OCC::FolderStatusDelegate - Add Folder Sync Connection Add Folder Sync Connection - File File @@ -2566,156 +2013,128 @@ For advanced users: this issue might be related to multiple sync database files OCC::FolderStatusModel - You need to be connected to add a folder You need to be connected to add a folder - Click this button to add a folder to synchronize. Click this button to add a folder to synchronise. - Could not decrypt! Could not decrypt! - - %1 (%2) %1 (%2) - Error while loading the list of folders from the server. Error while loading the list of folders from the server. - Virtual file support is enabled. Virtual file support is enabled. - Signed out Signed out - Synchronizing virtual files in local folder Synchronizing virtual files in local folder - Synchronizing files in local folder Synchronizing files in local folder - Checking for changes in remote "%1" Checking for changes in remote "%1" - Checking for changes in local "%1" Checking for changes in local "%1" - Syncing local and remote changes Syncing local and remote changes - %1 %2 … - Example text: "Uploading foobar.png (1MB of 2MB) time left 2 minutes at a rate of 24Kb/s" Example text: "Syncing 'foo.txt', 'bar.txt'" + Example text: "Uploading foobar.png (1MB of 2MB) time left 2 minutes at a rate of 24Kb/s" Example text: "Syncing 'foo.txt', 'bar.txt'" %1 %2 … - Download %1/s Example text: "Download 24Kb/s" (%1 is replaced by 24Kb (translated)) Download %1/s - File %1 of %2 File %1 of %2 - There are unresolved conflicts. Click for details. There are unresolved conflicts. Click for details. - - , , - Fetching folder list from server … Fetching folder list from server … - ↓ %1/s ↓ %1/s - Upload %1/s Example text: "Upload 24Kb/s" (%1 is replaced by 24Kb (translated)) Upload %1/s - ↑ %1/s ↑ %1/s - %1 %2 (%3 of %4) Example text: "Uploading foobar.png (2MB of 2MB)" %1 %2 (%3 of %4) - %1 %2 Example text: "Uploading foobar.png" %1 %2 - A few seconds left, %1 of %2, file %3 of %4 Example text: "5 minutes left, 12 MB of 345 MB, file 6 of 7" A few seconds left, %1 of %2, file %3 of %4 - %5 left, %1 of %2, file %3 of %4 %5 left, %1 of %2, file %3 of %4 - %1 of %2, file %3 of %4 Example text: "12 MB of 345 MB, file 6 of 7" %1 of %2, file %3 of %4 - Waiting for %n other folder(s) … - Waiting for %n other folder(s) …Waiting for %n other folder(s) … + + Waiting for %n other folder(s) … + Waiting for %n other folder(s) … + - About to start syncing About to start syncing - Preparing to sync … Preparing to sync … @@ -2723,7 +2142,6 @@ For advanced users: this issue might be related to multiple sync database files OCC::FolderWatcher - The watcher did not receive a test notification. The watcher did not receive a test notification. @@ -2731,7 +2149,6 @@ For advanced users: this issue might be related to multiple sync database files OCC::FolderWatcherPrivate - This problem usually happens when the inotify watches are exhausted. Check the FAQ for details. This problem usually happens when the inotify watches are exhausted. Check the FAQ for details. @@ -2739,12 +2156,10 @@ For advanced users: this issue might be related to multiple sync database files OCC::FolderWizard - Add Folder Sync Connection Add Folder Sync Connection - Add Sync Connection Add Sync Connection @@ -2752,17 +2167,14 @@ For advanced users: this issue might be related to multiple sync database files OCC::FolderWizardLocalPath - Click to select a local folder to sync. Click to select a local folder to sync. - Enter the path to the local folder. Enter the path to the local folder. - Select the source folder Select the source folder @@ -2770,74 +2182,53 @@ For advanced users: this issue might be related to multiple sync database files OCC::FolderWizardRemotePath - Create Remote Folder Create Remote Folder - Enter the name of the new folder to be created below "%1": Enter the name of the new folder to be created below "%1": - Folder was successfully created on %1. Folder was successfully created on %1. - Authentication failed accessing %1 Authentication failed accessing %1 - Failed to create the folder on %1. Please check manually. Failed to create the folder on %1. Please check manually. - Failed to list a folder. Error: %1 Failed to list a folder. Error: %1 - Choose this to sync the entire account Choose this to sync the entire account - - - Please choose a different location. %1 is already being synced to %2. Please choose a different location. %1 is already being synced to %2. - - - You are already syncing the subfolder %1 at %2. - You are already syncing the subfolder %1 at %2. - OCC::FolderWizardSelectiveSync - - Use virtual files instead of downloading content immediately %1 Use virtual files instead of downloading content immediately %1 - - (experimental) (experimental) - Virtual files are not supported for Windows partition roots as local folder. Please choose a valid subfolder under drive letter. Virtual files are not supported for Windows partition roots as local folder. Please choose a valid subfolder under drive letter. - Virtual files are not supported at the selected location Virtual files are not supported at the selected location @@ -2845,27 +2236,22 @@ For advanced users: this issue might be related to multiple sync database files OCC::GETFileJob - No E-Tag received from server, check Proxy/Gateway No E-Tag received from server, check Proxy/Gateway - We received a different E-Tag for resuming. Retrying next time. We received a different E-Tag for resuming. Retrying next time. - We received an unexpected download Content-Length. We received an unexpected download Content-Length. - Server returned wrong content-range Server returned wrong content-range - Connection Timeout Connection Timeout @@ -2873,199 +2259,151 @@ For advanced users: this issue might be related to multiple sync database files OCC::GeneralSettings - General Settings General Settings - Show Call Notifications Show Call Notifications - For System Tray For System Tray - Show Chat Notifications Show Chat Notifications - Show Server &Notifications Show Server &Notifications - Advanced Advanced - MB Trailing part of "Ask confirmation before syncing folder larger than" MB - Ask for confirmation before synchronizing external storages Ask for confirmation before synchronising external storages - &Launch on System Startup &Launch on System Startup - Use &Monochrome Icons Use &Monochrome Icons - Ask for confirmation before synchronizing new folders larger than Ask for confirmation before synchronizing new folders larger than - Notify when synchronised folders grow larger than specified limit Notify when synchronised folders grow larger than specified limit - Automatically disable synchronisation of folders that overcome limit Automatically disable synchronisation of folders that overcome limit - Move removed files to trash Move removed files to trash - Show sync folders in &Explorer's navigation pane Show sync folders in &Explorer's navigation pane - S&how crash reporter S&how crash reporter - Server poll interval Server poll interval - seconds (if <a href="https://github.com/nextcloud/notify_push">Client Push</a> is unavailable) seconds (if <a href="https://github.com/nextcloud/notify_push">Client Push</a> is unavailable) - Edit &Ignored Files Edit &Ignored Files - - Create Debug Archive Create Debug Archive - Info Info - Desktop client x.x.x Desktop client x.x.x - Update channel Update channel - &Automatically check for updates &Automatically check for updates - Check Now Check Now - Usage Documentation Usage Documentation - Legal Notice Legal Notice - - Restore &Default - Restore &Default - - - &Restart && Update &Restart && Update - Server notifications that require attention. Server notifications that require attention. - Show chat notification dialogs. Show chat notification dialogs. - Show call notification dialogs. Show call notification dialogues. - You cannot disable autostart because system-wide autostart is enabled. You cannot disable autostart because system-wide autostart is enabled. - - Restore to &%1 - Restore to &%1 - - - stable stable - beta beta - daily daily - enterprise enterprise - - beta: contains versions with new features that may not be tested thoroughly - daily: contains versions created daily only for testing and development @@ -3077,7 +2415,6 @@ Downgrading versions is not possible immediately: changing from beta to stable m Downgrading versions is not possible immediately: changing from beta to stable means waiting for the new stable version. - - enterprise: contains stable versions for customers. Downgrading versions is not possible immediately: changing from stable to enterprise means waiting for the new enterprise version. @@ -3087,12 +2424,10 @@ Downgrading versions is not possible immediately: changing from stable to enterp Downgrading versions is not possible immediately: changing from stable to enterprise means waiting for the new enterprise version. - Changing update channel? Changing update channel? - The channel determines which upgrades will be offered to install: - stable: contains tested versions considered reliable @@ -3102,55 +2437,41 @@ Downgrading versions is not possible immediately: changing from stable to enterp - Change update channel Change update channel - Cancel Cancel - Zip Archives Zip Archives - Debug Archive Created Debug Archive Created - Debug archive is created at %1 Debug archive is created at %1 - - - Redact information deemed sensitive before sharing! Debug archive created at %1 - Redact information deemed sensitive before sharing! Debug archive created at %1 - OCC::GetOrCreatePublicLinkShare - Password for share required Password for share required - Please enter a password for your link share: Please enter a password for your link share: - Sharing error Sharing error - Could not retrieve or create the public link share. Error: %1 @@ -3162,22 +2483,18 @@ Downgrading versions is not possible immediately: changing from stable to enterp OCC::HttpCredentialsGui - Please enter %1 password:<br><br>Username: %2<br>Account: %3<br> Please enter %1 password:<br><br>Username: %2<br>Account: %3<br> - Reading from keychain failed with error: "%1" Reading from keychain failed with error: "%1" - Enter Password Enter Password - <a href="%1">Click here</a> to request an app password from the web interface. <a href="%1">Click here</a> to request an app password from the web interface. @@ -3185,27 +2502,22 @@ Downgrading versions is not possible immediately: changing from stable to enterp OCC::IgnoreListEditor - Ignored Files Editor Ignored Files Editor - Global Ignore Settings Global Ignore Settings - Sync hidden files Sync hidden files - Files Ignored by Patterns Files Ignored by Patterns - This entry is provided by the system at "%1" and cannot be modified in this view. This entry is provided by the system at "%1" and cannot be modified in this view. @@ -3213,32 +2525,26 @@ Downgrading versions is not possible immediately: changing from stable to enterp OCC::IgnoreListTableWidget - Pattern Pattern - Allow Deletion Allow Deletion - Add Add - Remove Remove - Remove all Remove all - Files or folders matching a pattern will not be synchronized. Items where deletion is allowed will be deleted if they prevent a directory from being removed. This is useful for meta data. @@ -3247,22 +2553,18 @@ Items where deletion is allowed will be deleted if they prevent a directory from Items where deletion is allowed will be deleted if they prevent a directory from being removed. This is useful for meta data. - Could not open file Could not open file - Cannot write changes to "%1". Cannot write changes to "%1". - Add Ignore Pattern Add Ignore Pattern - Add a new ignore pattern: Add a new ignore pattern: @@ -3270,159 +2572,117 @@ Items where deletion is allowed will be deleted if they prevent a directory from OCC::InvalidFilenameDialog - Invalid filename Invalid filename - The file could not be synced because it contains characters which are not allowed on this system. The file could not be synced because its name contains characters which are not allowed on this system. - Error Error - Please enter a new name for the file: Please enter a new name for the file: - New filename New filename - Rename file Rename file - The file "%1" could not be synced because the name contains characters which are not allowed on this system. The file "%1" could not be synced because the name contains characters which are not allowed on this system. - The following characters are not allowed on the system: \ / : ? * " < > | leading/trailing spaces The following characters are not allowed on the system: \ / : ? * " < > | leading/trailing spaces - The file "%1" could not be synced because the name contains characters which are not allowed on the server. The file "%1" could not be synced because the name contains characters which are not allowed on the server. - The following characters are not allowed: %1 The following characters are not allowed: %1 - The following basenames are not allowed: %1 The following basenames are not allowed: %1 - The following filenames are not allowed: %1 The following filenames are not allowed: %1 - The following file extensions are not allowed: %1 The following file extensions are not allowed: %1 - Checking rename permissions … Checking rename permissions … - You don't have the permission to rename this file. Please ask the author of the file to rename it. You don't have the permission to rename this file. Please ask the author of the file to rename it. - Failed to fetch permissions with error %1 Failed to fetch permissions with error %1 - Filename contains leading and trailing spaces. Filename contains leading and trailing spaces. - Filename contains leading spaces. Filename contains leading spaces. - Filename contains trailing spaces. Filename contains trailing spaces. - Use invalid name Use invalid name - Filename contains illegal characters: %1 Filename contains illegal characters: %1 - Could not rename file. Please make sure you are connected to the server. Could not rename file. Please make sure you are connected to the server. - Cannot rename file because a file with the same name does already exist on the server. Please pick another name. Cannot rename file because a file with the same name does already exist on the server. Please pick another name. - Could not rename local file. %1 Could not rename local file. %1 - - OCC::LegacyAccountSelectionDialog - - - Legacy import - Legacy import - - - - Select the accounts to import from the legacy configuration: - Select the accounts to import from the legacy configuration: - - OCC::LegalNotice - - Legal notice Legal notice - Close Close - <p>Copyright 2017-2025 Nextcloud GmbH<br />Copyright 2012-2023 ownCloud GmbH</p> <p>Copyright 2017-2025 Nextcloud GmbH<br />Copyright 2012-2023 ownCloud GmbH</p> - <p>Licensed under the GNU General Public License (GPL) Version 2.0 or any later version.</p> <p>Licensed under the GNU General Public License (GPL) Version 2.0 or any later version.</p> @@ -3430,12 +2690,10 @@ Items where deletion is allowed will be deleted if they prevent a directory from OCC::LogBrowser - Log Output Log Output - The client can write debug logs to a temporary folder. These logs are very helpful for diagnosing problems. Since log files can get large, the client will start a new one for each sync run and compress older ones. It will also delete log files after a couple of hours to avoid consuming too much disk space. If enabled, logs will be written to %1 @@ -3444,19 +2702,16 @@ Since log files can get large, the client will start a new one for each sync run If enabled, logs will be written to %1 - Enable logging to temporary folder Enable logging to temporary folder - This setting persists across client restarts. Note that using any logging command line options will override this setting. This setting persists across client restarts. Note that using any logging command line options will override this setting. - Open folder Open folder @@ -3464,14 +2719,10 @@ Note that using any logging command line options will override this setting. OCC::Logger - - Error Error - - <nobr>File "%1"<br/>cannot be opened for writing.<br/><br/>The log output <b>cannot</b> be saved!</nobr> <nobr>File "%1"<br/>cannot be opened for writing.<br/><br/>The log output <b>cannot</b> be saved!</nobr> @@ -3479,32 +2730,26 @@ Note that using any logging command line options will override this setting. OCC::Mac::FileProviderEditLocallyJob - Could not start editing locally. Could not start editing locally. - An error occurred during setup. An error occurred during setup. - Could not find a file for local editing. Make sure its path is valid and it is synced locally. Could not find a file for local editing. Make sure its path is valid and it is synced locally. - Could not get file ID. Could not get file ID. - Could not get file identifier. Could not get file identifier. - The file identifier is empty. The file identifier is empty. @@ -3512,47 +2757,38 @@ Note that using any logging command line options will override this setting. OCC::NSISUpdater - New Version Available New Version Available - <p>A new version of the %1 Client is available.</p><p><b>%2</b> is available for download. The installed version is %3.</p> <p>A new version of the %1 Client is available.</p><p><b>%2</b> is available for download. The installed version is %3.</p> - Update Failed Update Failed - <p>A new version of the %1 Client is available but the updating process failed.</p><p><b>%2</b> has been downloaded. The installed version is %3. If you confirm restart and update, your computer may reboot to complete the installation.</p> <p>A new version of the %1 Client is available but the updating process failed.</p><p><b>%2</b> has been downloaded. The installed version is %3. If you confirm restart and update, your computer may reboot to complete the installation.</p> - Ask again later Ask again later - Restart and update Restart and update - Update manually Update manually - Skip this time Skip this time - Get update Get update @@ -3560,109 +2796,82 @@ Note that using any logging command line options will override this setting. OCC::NetworkSettings - Proxy Settings Proxy Settings - Use system proxy Use system proxy - Host Host - Proxy server requires authentication Proxy server requires authentication - Download Bandwidth Download Bandwidth - - Limit to Limit to - - KBytes/s KBytes/s - Note: proxy settings have no effects for accounts on localhost Note: proxy settings have no effects for accounts on localhost - Manually specify proxy Manually specify proxy - No proxy No proxy - - - Use global settings Use global settings - - No limit No limit - - Limit to 3/4 of estimated bandwidth Limit to 3/4 of estimated bandwidth - Upload Bandwidth Upload Bandwidth - - Limit automatically Limit automatically - Hostname of proxy server Hostname of proxy server - Username for proxy server Username for proxy server - Password for proxy server Password for proxy server - HTTP(S) proxy HTTP(S) proxy - SOCKS5 proxy SOCKS5 proxy @@ -3670,77 +2879,54 @@ Note that using any logging command line options will override this setting. OCC::OCUpdater - Could not check for new updates. Could not check for new updates. - Checking update server … Checking update server … - New %1 update ready New %1 update ready - A new update for %1 is about to be installed. The updater may ask for additional privileges during the process. Your computer may reboot to complete the installation. A new update for %1 is about to be installed. The updater may ask for additional privileges during the process. Your computer may reboot to complete the installation. - Downloading %1 … Downloading %1 … - %1 available. Restart application to start the update. %1 available. Restart application to start the update. - Could not download update. Please open <a href='%1'>%1</a> to download the update manually. Could not download update. Please open <a href='%1'>%1</a> to download the update manually. - Could not download update. Please open %1 to download the update manually. Could not download update. Please open %1 to download the update manually. - New %1 is available. Please open <a href='%2'>%2</a> to download the update. New %1 is available. Please open <a href='%2'>%2</a> to download the update. - New %1 is available. Please open %2 to download the update. New %1 is available. Please open %2 to download the update. - Update status is unknown: Did not check for new updates. Update status is unknown: Did not check for new updates. - - You are using the %1 update channel. Your installation is the latest version. - You are using the %1 update channel. Your installation is the latest version. - - - - No updates available. Your installation is the latest version. - No updates available. Your installation is the latest version. - - - No updates available. Your installation is at the latest version. No updates available. Your installation is at the latest version. - Update Check Update Check @@ -3748,72 +2934,55 @@ Note that using any logging command line options will override this setting. OCC::OwncloudAdvancedSetupPage - Connect Connect - - (experimental) (experimental) - - Use &virtual files instead of downloading content immediately %1 Use &virtual files instead of downloading content immediately %1 - Virtual files are not supported for Windows partition roots as local folder. Please choose a valid subfolder under drive letter. Virtual files are not supported for Windows partition roots as local folder. Please choose a valid subfolder under drive letter. - %1 folder "%2" is synced to local folder "%3" %1 folder "%2" is synced to local folder "%3" - Sync the folder "%1" Sync the folder "%1" - Warning: The local folder is not empty. Pick a resolution! Warning: The local folder is not empty. Pick a resolution! - - %1 free space %1 gets replaced with the size and a matching unit. Example: 3 MB or 5 GB %1 free space - Virtual files are not supported at the selected location Virtual files are not supported at the selected location - Local Sync Folder Local Sync Folder - - (%1) (%1) - There isn't enough free space in the local folder! There isn't enough free space in the local folder! - In Finder's "Locations" sidebar section In Finder's "Locations" sidebar section @@ -3821,32 +2990,26 @@ Note that using any logging command line options will override this setting. OCC::OwncloudConnectionMethodDialog - Connection failed Connection failed - <html><head/><body><p>Failed to connect to the secure server address specified. How do you wish to proceed?</p></body></html> <html><head/><body><p>Failed to connect to the secure server address specified. How do you wish to proceed?</p></body></html> - Select a different URL Select a different URL - Retry unencrypted over HTTP (insecure) Retry unencrypted over HTTP (insecure) - Configure client-side TLS certificate Configure client-side TLS certificate - <html><head/><body><p>Failed to connect to the secure server address <em>%1</em>. How do you wish to proceed?</p></body></html> <html><head/><body><p>Failed to connect to the secure server address <em>%1</em>. How do you wish to proceed?</p></body></html> @@ -3854,17 +3017,14 @@ Note that using any logging command line options will override this setting. OCC::OwncloudHttpCredsPage - &Email &Email - Connect to %1 Connect to %1 - Enter user credentials Enter user credentials @@ -3872,8 +3032,6 @@ Note that using any logging command line options will override this setting. OCC::OwncloudPropagator - - Impossible to get modification time for file in conflict %1 Impossible to get modification time for file in conflict %1 @@ -3881,23 +3039,19 @@ Note that using any logging command line options will override this setting. OCC::OwncloudSetupPage - The link to your %1 web interface when you open it in the browser. %1 will be replaced with the application name The link to your %1 web interface when you open it in the browser. - &Next > &Next > - Server address does not seem to be valid Server address does not seem to be valid - Could not load certificate. Maybe wrong password? Could not load certificate. Maybe wrong password? @@ -3905,159 +3059,126 @@ Note that using any logging command line options will override this setting. OCC::OwncloudSetupWizard - <font color="green">Successfully connected to %1: %2 version %3 (%4)</font><br/><br/> <font colour="green">Successfully connected to %1: %2 version %3 (%4)</font><br/><br/> - Failed to connect to %1 at %2:<br/>%3 Failed to connect to %1 at %2:<br/>%3 - Timeout while trying to connect to %1 at %2. Timeout while trying to connect to %1 at %2. - Access forbidden by server. To verify that you have proper access, <a href="%1">click here</a> to access the service with your browser. Access forbidden by server. To verify that you have proper access, <a href="%1">click here</a> to access the service with your browser. - Invalid URL Invalid URL - Trying to connect to %1 at %2 … Trying to connect to %1 at %2 … - The authenticated request to the server was redirected to "%1". The URL is bad, the server is misconfigured. The authenticated request to the server was redirected to "%1". The URL is bad, the server is misconfigured. - There was an invalid response to an authenticated WebDAV request There was an invalid response to an authenticated WebDAV request - Local sync folder %1 already exists, setting it up for sync.<br/><br/> Local sync folder %1 already exists, setting it up for sync.<br/><br/> - Creating local sync folder %1 … Creating local sync folder %1 … - OK OK - failed. failed. - Could not create local folder %1 Could not create local folder %1 - No remote folder specified! No remote folder specified! - Error: %1 Error: %1 - creating folder on Nextcloud: %1 creating folder on Nextcloud: %1 - Remote folder %1 created successfully. Remote folder %1 created successfully. - The remote folder %1 already exists. Connecting it for syncing. The remote folder %1 already exists. Connecting it for syncing. - - The folder creation resulted in HTTP error code %1 The folder creation resulted in HTTP error code %1 - The remote folder creation failed because the provided credentials are wrong!<br/>Please go back and check your credentials.</p> The remote folder creation failed because the provided credentials are wrong!<br/>Please go back and check your credentials.</p> - <p><font color="red">Remote folder creation failed probably because the provided credentials are wrong.</font><br/>Please go back and check your credentials.</p> <p><font colour="red">Remote folder creation failed probably because the provided credentials are wrong.</font><br/>Please go back and check your credentials.</p> - - Remote folder %1 creation failed with error <tt>%2</tt>. Remote folder %1 creation failed with error <tt>%2</tt>. - A sync connection from %1 to remote directory %2 was set up. A sync connection from %1 to remote directory %2 was set up. - Successfully connected to %1! Successfully connected to %1! - Connection to %1 could not be established. Please check again. Connection to %1 could not be established. Please check again. - Folder rename failed Folder rename failed - Cannot remove and back up the folder because the folder or a file in it is open in another program. Please close the folder or file and hit retry or cancel the setup. Cannot remove and back up the folder because the folder or a file in it is open in another program. Please close the folder or file and hit retry or cancel the setup. - <font color="green"><b>File Provider-based account %1 successfully created!</b></font> <font color="green"><b>File Provider-based account %1 successfully created!</b></font> - Virtual files enabled Virtual files enabled - Your account is now syncing with virtual files support. This means that all your files are online-only by default, and will be downloaded on-demand when you open them. You may find your files under the <b>Locations</b> section of the Finder sidebar. Your account is now syncing with virtual files support. This means that all your files are online-only by default, and will be downloaded on-demand when you open them. You may find your files under the <b>Locations</b> section of the Finder sidebar. - <font color="green"><b>Local sync folder %1 successfully created!</b></font> <font colour="green"><b>Local sync folder %1 successfully created!</b></font> @@ -4065,27 +3186,22 @@ Note that using any logging command line options will override this setting. OCC::OwncloudWizard - Add %1 account Add %1 account - Skip folders configuration Skip folders configuration - Cancel Cancel - Enable experimental feature? Enable experimental feature? - When the "virtual files" mode is enabled no files will be downloaded initially. Instead, a tiny "%1" file will be created for each file that exists on the server. The contents can be downloaded by running these files or by using their context menu. The virtual files mode is mutually exclusive with selective sync. Currently unselected folders will be translated to online-only folders and your selective sync settings will be reset. @@ -4102,12 +3218,10 @@ Switching to this mode will abort any currently running synchronization. This is a new, experimental mode. If you decide to use it, please report any issues that come up. - Enable experimental placeholder mode Enable experimental placeholder mode - Stay safe Stay safe @@ -4115,12 +3229,10 @@ This is a new, experimental mode. If you decide to use it, please report any iss OCC::PasswordInputDialog - Password for share required Password for share required - Please enter a password for your share: Please enter a password for your share: @@ -4128,7 +3240,6 @@ This is a new, experimental mode. If you decide to use it, please report any iss OCC::PollJob - Invalid JSON reply from the poll URL Invalid JSON reply from the poll URL @@ -4136,252 +3247,165 @@ This is a new, experimental mode. If you decide to use it, please report any iss OCC::ProcessDirectoryJob - Symbolic links are not supported in syncing. Symbolic links are not supported in syncing. - File is listed on the ignore list. File is listed on the ignore list. - File names ending with a period are not supported on this file system. File names ending with a period are not supported on this file system. - - Folder names containing the character "%1" are not supported on this file system. - %1: the invalid character - Folder names containing the character "%1" are not supported on this file system. - - - - File names containing the character "%1" are not supported on this file system. - %1: the invalid character - File names containing the character "%1" are not supported on this file system. - - - - Folder name contains at least one invalid character - Folder name contains at least one invalid character - - - - File name contains at least one invalid character - File name contains at least one invalid character - - - - Folder name is a reserved name on this file system. - Folder name is a reserved name on this file system. - - - - File name is a reserved name on this file system. - File name is a reserved name on this file system. - - - Filename contains trailing spaces. Filename contains trailing spaces. - - - - Cannot be renamed or uploaded. Cannot be renamed or uploaded. - Folder name of folder entity to use when warning about invalid name Folder - File name of folder entity to use when warning about invalid name File - %1 name containing the character "%2" is not supported on this file system. folder or file impossible to sync due to an invalid name, placeholders will be file or folder and the invalid character %1 name containing the character "%2" is not supported on this file system. - Filename contains leading spaces. Filename contains leading spaces. - %1 name contains at least one invalid character %1 name contains at least one invalid character - %1 name is a reserved name on this file system. %1 name is a reserved name on this file system. - Filename contains leading and trailing spaces. Filename contains leading and trailing spaces. - Filename is too long. Filename is too long. - File/Folder is ignored because it's hidden. File/Folder is ignored because it's hidden. - Stat failed. Stat failed. - Conflict: Server version downloaded, local copy renamed and not uploaded. Conflict: Server version downloaded, local copy renamed and not uploaded. - Case Clash Conflict: Server file downloaded and renamed to avoid clash. Case Clash Conflict: Server file downloaded and renamed to avoid clash. - The filename cannot be encoded on your file system. The filename cannot be encoded on your file system. - The filename is blacklisted on the server. The filename is blacklisted on the server. - Reason: the entire filename is forbidden. Reason: the entire filename is forbidden. - Reason: the filename has a forbidden base name (filename start). Reason: the filename has a forbidden base name (filename start). - Reason: the file has a forbidden extension (.%1). Reason: the file has a forbidden extension (.%1). - Reason: the filename contains a forbidden character (%1). Reason: the filename contains a forbidden character (%1). - File has extension reserved for virtual files. File has extension reserved for virtual files. - size size - permission permission - file id file id - Server reported no %1 Server reported no %1 - Cannot sync due to invalid modification time Cannot sync due to invalid modification time - - Upload of %1 exceeds %2 of space left in personal files. - Upload of %1 exceeds %2 of space left in personal files. - - - - Upload of %1 exceeds %2 of space left in folder %3. - Upload of %1 exceeds %2 of space left in folder %3. - - - Could not upload file, because it is open in "%1". Could not upload file, because it is open in "%1". - Error while deleting file record %1 from the database Error while deleting file record %1 from the database - - Moved to invalid target, restoring Moved to invalid target, restoring - Cannot modify encrypted item because the selected certificate is not valid. Cannot modify encrypted item because the selected certificate is not valid. - Ignored because of the "choose what to sync" blacklist Ignored because of the "choose what to sync" blacklist - - Not allowed because you don't have permission to add subfolders to that folder Not allowed because you don't have permission to add subfolders to that folder - Not allowed because you don't have permission to add files in that folder Not allowed because you don't have permission to add files in that folder - Not allowed to upload this file because it is read-only on the server, restoring Not allowed to upload this file because it is read-only on the server, restoring - Not allowed to remove, restoring Not allowed to remove, restoring - Error while reading the database Error while reading the database - Server replied with an error while reading directory "%1" : %2 Server replied with an error while reading directory "%1" : %2 @@ -4389,38 +3413,26 @@ This is a new, experimental mode. If you decide to use it, please report any iss OCC::PropagateDirectory - Could not delete file %1 from local DB Could not delete file %1 from local DB - Error updating metadata due to invalid modification time Error updating metadata due to invalid modification time - - - - - - The folder %1 cannot be made read-only: %2 The folder %1 cannot be made read-only: %2 - - unknown exception unknown exception - Error updating metadata: %1 Error updating metadata: %1 - File is currently in use File is currently in use @@ -4428,75 +3440,58 @@ This is a new, experimental mode. If you decide to use it, please report any iss OCC::PropagateDownloadFile - Could not get file %1 from local DB Could not get file %1 from local DB - File %1 cannot be downloaded because encryption information is missing. File %1 cannot be downloaded because encryption information is missing. - - Could not delete file record %1 from local DB Could not delete file record %1 from local DB - File %1 can not be downloaded because of a local file name clash! File %1 can not be downloaded because of a local file name clash! - The download would reduce free local disk space below the limit The download would reduce free local disk space below the limit - Free space on disk is less than %1 Free space on disk is less than %1 - File was deleted from server File was deleted from server - The file could not be downloaded completely. The file could not be downloaded completely. - The downloaded file is empty, but the server said it should have been %1. The downloaded file is empty, but the server said it should have been %1. - - File %1 has invalid modified time reported by server. Do not save it. File %1 has invalid modified time reported by server. Do not save it. - File %1 downloaded but it resulted in a local file name clash! File %1 downloaded but it resulted in a local file name clash! - Error updating metadata: %1 Error updating metadata: %1 - The file %1 is currently in use The file %1 is currently in use - - File has changed since discovery File has changed since discovery @@ -4504,12 +3499,10 @@ This is a new, experimental mode. If you decide to use it, please report any iss OCC::PropagateItemJob - ; Restoration Failed: %1 ; Restoration Failed: %1 - A file or folder was removed from a read only share, but restoring failed: %1 A file or folder was removed from a read only share, but restoring failed: %1 @@ -4517,39 +3510,30 @@ This is a new, experimental mode. If you decide to use it, please report any iss OCC::PropagateLocalMkdir - could not delete file %1, error: %2 could not delete file %1, error: %2 - Folder %1 cannot be created because of a local file or folder name clash! Folder %1 cannot be created because of a local file or folder name clash! - Could not create folder %1 Could not create folder %1 - - - The folder %1 cannot be made read-only: %2 The folder %1 cannot be made read-only: %2 - unknown exception unknown exception - Error updating metadata: %1 Error updating metadata: %1 - The file %1 is currently in use The file %1 is currently in use @@ -4557,19 +3541,14 @@ This is a new, experimental mode. If you decide to use it, please report any iss OCC::PropagateLocalRemove - Could not remove %1 because of a local file name clash Could not remove %1 because of a local file name clash - - - Temporary error when removing local item removed from server. Temporary error when removing local item removed from server. - Could not delete file record %1 from local DB Could not delete file record %1 from local DB @@ -4577,49 +3556,38 @@ This is a new, experimental mode. If you decide to use it, please report any iss OCC::PropagateLocalRename - Folder %1 cannot be renamed because of a local file or folder name clash! Folder %1 cannot be renamed because of a local file or folder name clash! - File %1 downloaded but it resulted in a local file name clash! File %1 downloaded but it resulted in a local file name clash! - - Could not get file %1 from local DB Could not get file %1 from local DB - - Error setting pin state Error setting pin state - Error updating metadata: %1 Error updating metadata: %1 - The file %1 is currently in use The file %1 is currently in use - Failed to propagate directory rename in hierarchy Failed to propagate directory rename in hierarchy - Failed to rename file Failed to rename file - Could not delete file record %1 from local DB Could not delete file record %1 from local DB @@ -4627,12 +3595,10 @@ This is a new, experimental mode. If you decide to use it, please report any iss OCC::PropagateRemoteDelete - Wrong HTTP code returned by server. Expected 204, but received "%1 %2". Wrong HTTP code returned by server. Expected 204, but received "%1 %2". - Could not delete file record %1 from local DB Could not delete file record %1 from local DB @@ -4640,7 +3606,6 @@ This is a new, experimental mode. If you decide to use it, please report any iss OCC::PropagateRemoteDeleteEncryptedRootFolder - Wrong HTTP code returned by server. Expected 204, but received "%1 %2". Wrong HTTP code returned by server. Expected 204, but received "%1 %2". @@ -4648,22 +3613,18 @@ This is a new, experimental mode. If you decide to use it, please report any iss OCC::PropagateRemoteMkdir - Wrong HTTP code returned by server. Expected 201, but received "%1 %2". Wrong HTTP code returned by server. Expected 201, but received "%1 %2". - Failed to encrypt a folder %1 Failed to encrypt a folder %1 - Error writing metadata to the database: %1 Error writing metadata to the database: %1 - The file %1 is currently in use The file %1 is currently in use @@ -4671,44 +3632,34 @@ This is a new, experimental mode. If you decide to use it, please report any iss OCC::PropagateRemoteMove - Could not rename %1 to %2, error: %3 Could not rename %1 to %2, error: %3 - - Error updating metadata: %1 Error updating metadata: %1 - - The file %1 is currently in use The file %1 is currently in use - Wrong HTTP code returned by server. Expected 201, but received "%1 %2". Wrong HTTP code returned by server. Expected 201, but received "%1 %2". - Could not get file %1 from local DB Could not get file %1 from local DB - Could not delete file record %1 from local DB Could not delete file record %1 from local DB - Error setting pin state Error setting pin state - Error writing metadata to the database Error writing metadata to the database @@ -4716,60 +3667,46 @@ This is a new, experimental mode. If you decide to use it, please report any iss OCC::PropagateUploadFileCommon - File %1 cannot be uploaded because another file with the same name, differing only in case, exists File %1 cannot be uploaded because another file with the same name, differing only in case, exists - - - File %1 has invalid modification time. Do not upload to the server. File %1 has invalid modification time. Do not upload to the server. - Local file changed during syncing. It will be resumed. Local file changed during syncing. It will be resumed. - Local file changed during sync. Local file changed during sync. - Failed to unlock encrypted folder. Failed to unlock encrypted folder. - Unable to upload an item with invalid characters Unable to upload an item with invalid characters - Error updating metadata: %1 Error updating metadata: %1 - The file %1 is currently in use The file %1 is currently in use - - Upload of %1 exceeds the quota for the folder Upload of %1 exceeds the quota for the folder - Failed to upload encrypted file. Failed to upload encrypted file. - File Removed (start upload) %1 File Removed (start upload) %1 @@ -4777,32 +3714,26 @@ This is a new, experimental mode. If you decide to use it, please report any iss OCC::PropagateUploadFileNG - The local file was removed during sync. The local file was removed during sync. - Local file changed during sync. Local file changed during sync. - Poll URL missing Poll URL missing - Unexpected return code from server (%1) Unexpected return code from server (%1) - Missing File ID from server Missing File ID from server - Missing ETag from server Missing ETag from server @@ -4810,22 +3741,18 @@ This is a new, experimental mode. If you decide to use it, please report any iss OCC::PropagateUploadFileV1 - Poll URL missing Poll URL missing - The local file was removed during sync. The local file was removed during sync. - Local file changed during sync. Local file changed during sync. - The server did not acknowledge the last chunk. (No e-tag was present) The server did not acknowledge the last chunk. (No e-tag was present) @@ -4833,27 +3760,22 @@ This is a new, experimental mode. If you decide to use it, please report any iss OCC::ProxyAuthDialog - Proxy authentication required Proxy authentication required - Username: Username: - Proxy: Proxy: - The proxy server needs a username and password. The proxy server needs a username and password. - Password: Password: @@ -4861,7 +3783,6 @@ This is a new, experimental mode. If you decide to use it, please report any iss OCC::SelectiveSyncDialog - Choose What to Sync Choose What to Sync @@ -4869,33 +3790,26 @@ This is a new, experimental mode. If you decide to use it, please report any iss OCC::SelectiveSyncWidget - Loading … Loading … - Deselect remote folders you do not wish to synchronize. Deselect remote folders you do not wish to synchronise. - Name Name - Size Size - - No subfolders currently on the server. No subfolders currently on the server. - An error occurred while loading the list of sub folders. An error occurred while loading the list of sub folders. @@ -4903,7 +3817,6 @@ This is a new, experimental mode. If you decide to use it, please report any iss OCC::ServerNotificationHandler - Reply Reply @@ -4911,28 +3824,23 @@ This is a new, experimental mode. If you decide to use it, please report any iss OCC::SettingsDialog - Settings Settings - %1 Settings This name refers to the application name e.g Nextcloud %1 Settings - General General - Network Network - Account Account @@ -4940,7 +3848,6 @@ This is a new, experimental mode. If you decide to use it, please report any iss OCC::ShareManager - Error Error @@ -4948,47 +3855,38 @@ This is a new, experimental mode. If you decide to use it, please report any iss OCC::ShareModel - %1 days %1 days - 1 day 1 day - Today Today - Secure file drop link Secure file drop link - Share link Share link - Link share Link share - Internal link Internal link - Secure file drop Secure file drop - Could not find local folder for %1 Could not find local folder for %1 @@ -4996,23 +3894,18 @@ This is a new, experimental mode. If you decide to use it, please report any iss OCC::ShareeModel - - Search globally Search globally - No results found No results found - Global search results Global search results - %1 (%2) sharee (shareWithAdditionalInfo) %1 (%2) @@ -5021,48 +3914,38 @@ This is a new, experimental mode. If you decide to use it, please report any iss OCC::SocketApi - Context menu share Context menu share - I shared something with you I shared something with you - - Share options Share options - Send private link by email … Send private link by email … - Copy private link to clipboard Copy private link to clipboard - Failed to encrypt folder at "%1" Failed to encrypt folder at "%1" - The account %1 does not have end-to-end encryption configured. Please configure this in your account settings to enable folder encryption. The account %1 does not have end-to-end encryption configured. Please configure this in your account settings to enable folder encryption. - Failed to encrypt folder Failed to encrypt folder - Could not encrypt the following folder: "%1". Server replied with error: %2 @@ -5071,105 +3954,86 @@ Server replied with error: %2 Server replied with error: %2 - Folder encrypted successfully Folder encrypted successfully - The following folder was encrypted successfully: "%1" The following folder was encrypted successfully: "%1" - Select new location … Select new location … - - Activity Activity - Leave this share Leave this share - Resharing this file is not allowed Resharing this file is not allowed - Resharing this folder is not allowed Resharing this folder is not allowed - Encrypt Encrypt - Lock file Lock file - Unlock file Unlock file - Locked by %1 Locked by %1 - Expires in %1 minutes remaining time before lock expires - Expires in %1 minutesExpires in %1 minutes + + Expires in %1 minutes + Expires in %1 minutes + - Resolve conflict … Resolve conflict … - Move and rename … Move and rename … - Move, rename and upload … Move, rename and upload … - Delete local changes Delete local changes - Move and upload … Move and upload … - Delete Delete - Copy internal link Copy internal link - - Open in browser Open in browser @@ -5177,124 +4041,100 @@ Server replied with error: %2 OCC::SslButton - <h3>Certificate Details</h3> <h3>Certificate Details</h3> - Common Name (CN): Common Name (CN): - Subject Alternative Names: Subject Alternative Names: - Organization (O): Organization (O): - Organizational Unit (OU): Organizational Unit (OU): - State/Province: State/Province: - Country: Country: - Serial: Serial: - <h3>Issuer</h3> <h3>Issuer</h3> - Issuer: Issuer: - Issued on: Issued on: - Expires on: Expires on: - <h3>Fingerprints</h3> <h3>Fingerprints</h3> - SHA-256: SHA-256: - SHA-1: SHA-1: - <p><b>Note:</b> This certificate was manually approved</p> <p><b>Note:</b> This certificate was manually approved</p> - %1 (self-signed) %1 (self-signed) - %1 %1 - This connection is encrypted using %1 bit %2. This connection is encrypted using %1 bit %2. - Server version: %1 Server version: %1 - No support for SSL session tickets/identifiers No support for SSL session tickets/identifiers - Certificate information: Certificate information: - The connection is not secure The connection is not secure - This connection is NOT secure as it is not encrypted. This connection is NOT secure as it is not encrypted. @@ -5304,82 +4144,62 @@ Server replied with error: %2 OCC::SslErrorDialog - Trust this certificate anyway Trust this certificate anyway - Untrusted Certificate Untrusted Certificate - Cannot connect securely to <i>%1</i>: Cannot connect securely to <i>%1</i>: - Additional errors: Additional errors: - with Certificate %1 with Certificate %1 - - - &lt;not specified&gt; &lt;not specified&gt; - - Organization: %1 Organisation: %1 - - Unit: %1 Unit: %1 - - Country: %1 Country: %1 - Fingerprint (SHA1): <tt>%1</tt> Fingerprint (SHA1): <tt>%1</tt> - Fingerprint (SHA-256): <tt>%1</tt> Fingerprint (SHA-256): <tt>%1</tt> - Fingerprint (SHA-512): <tt>%1</tt> Fingerprint (SHA-512): <tt>%1</tt> - Effective Date: %1 Effective Date: %1 - Expiration Date: %1 Expiration Date: %1 - Issuer: %1 Issuer: %1 @@ -5387,73 +4207,59 @@ Server replied with error: %2 OCC::SyncEngine - %1 (skipped due to earlier error, trying again in %2) %1 (skipped due to earlier error, trying again in %2) - Only %1 are available, need at least %2 to start Placeholders are postfixed with file sizes using Utility::octetsToString() Only %1 are available, need at least %2 to start - Unable to open or create the local sync database. Make sure you have write access in the sync folder. Unable to open or create the local sync database. Make sure you have write access in the sync folder. - Disk space is low: Downloads that would reduce free space below %1 were skipped. Disk space is low: Downloads that would reduce free space below %1 were skipped. - There is insufficient space available on the server for some uploads. There is insufficient space available on the server for some uploads. - Unresolved conflict. Unresolved conflict. - Could not update file: %1 Could not update file: %1 - Could not update virtual file metadata: %1 Could not update virtual file metadata: %1 - Could not update file metadata: %1 Could not update file metadata: %1 - Could not set file record to local DB: %1 Could not set file record to local DB: %1 - Using virtual files with suffix, but suffix is not set Using virtual files with suffix, but suffix is not set - Unable to read the blacklist from the local database Unable to read the blacklist from the local database - Unable to read from the sync journal. Unable to read from the sync journal. - Cannot open the sync journal Cannot open the sync journal @@ -5461,75 +4267,54 @@ Server replied with error: %2 OCC::SyncStatusSummary - - Offline Offline - - You need to accept the terms of service - You need to accept the terms of service - - - - - All synced! All synced! - Some files couldn't be synced! Some files couldn't be synced! - See below for errors See below for errors - Checking folder changes Checking folder changes - Syncing changes Syncing changes - Sync paused Sync paused - Some files could not be synced! Some files could not be synced! - See below for warnings See below for warnings - Syncing Syncing - %1 of %2 · %3 left %1 of %2 · %3 left - %1 of %2 %1 of %2 - Syncing file %1 of %2 Syncing file %1 of %2 @@ -5537,54 +4322,42 @@ Server replied with error: %2 OCC::Systray - Download Download - Add account Add account - Open main dialog Open main dialogue - - Pause sync Pause sync - - Resume sync Resume sync - Settings Settings - Help Help - Exit %1 Exit %1 - Pause sync for all Pause sync for all - Resume sync for all Resume sync for all @@ -5592,27 +4365,22 @@ Server replied with error: %2 OCC::TermsOfServiceCheckWidget - Waiting for terms to be accepted Waiting for terms to be accepted - Polling Polling - Link copied to clipboard. Link copied to clipboard. - Open Browser Open Browser - Copy Link Copy Link @@ -5620,18 +4388,15 @@ Server replied with error: %2 OCC::Theme - %1 Desktop Client Version %2 (%3) %1 is application name. %2 is the human version string. %3 is the operating system name. %1 Desktop Client Version %2 (%3) - <p><small>Using virtual files plugin: %1</small></p> <p><small>Using virtual files plugin: %1</small></p> - <p>This release was supplied by %1.</p> <p>This release was supplied by %1.</p> @@ -5639,22 +4404,18 @@ Server replied with error: %2 OCC::UnifiedSearchResultsListModel - Failed to fetch providers. Failed to fetch providers. - Failed to fetch search providers for '%1'. Error: %2 Failed to fetch search providers for '%1'. Error: %2 - Search has failed for '%2'. Search has failed for '%2'. - Search has failed for '%1'. Error: %2 Search has failed for '%1'. Error: %2 @@ -5662,17 +4423,14 @@ Server replied with error: %2 OCC::UpdateE2eeFolderMetadataJob - Failed to update folder metadata. Failed to update folder metadata. - Failed to unlock encrypted folder. Failed to unlock encrypted folder. - Failed to finalize item. Failed to finalize item. @@ -5680,35 +4438,22 @@ Server replied with error: %2 OCC::UpdateE2eeFolderUsersMetadataJob - - - - - - - - - Error updating metadata for a folder %1 Error updating metadata for a folder %1 - Could not fetch public key for user %1 Could not fetch public key for user %1 - Could not find root encrypted folder for folder %1 Could not find root encrypted folder for folder %1 - Could not add or remove user %1 to access folder %2 Unable to add or remove user %1 from accessing folder %2. - Failed to unlock a folder. Failed to unlock a folder. @@ -5716,43 +4461,37 @@ Server replied with error: %2 OCC::User - End-to-end certificate needs to be migrated to a new one End-to-end certificate needs to be migrated to a new one - Trigger the migration Trigger the migration - %n notification(s) - %n notification(s)%n notification(s) + + %n notification(s) + %n notification(s) + - Retry all uploads Retry all uploads - - Resolve conflict Resolve conflict - Rename file Rename file - Open Nextcloud Assistant in browser Open Nextcloud Assistant in browser - Open Nextcloud Talk in browser Open Nextcloud Talk in browser @@ -5760,22 +4499,18 @@ Server replied with error: %2 OCC::UserModel - Confirm Account Removal Confirm Account Removal - <p>Do you really want to remove the connection to the account <i>%1</i>?</p><p><b>Note:</b> This will <b>not</b> delete any files.</p> <p>Do you really want to remove the connection to the account <i>%1</i>?</p><p><b>Note:</b> This will <b>not</b> delete any files.</p> - Remove connection Remove connection - Cancel Cancel @@ -5783,129 +4518,98 @@ Server replied with error: %2 OCC::UserStatusSelectorModel - Could not fetch predefined statuses. Make sure you are connected to the server. Could not fetch predefined statuses. Make sure you are connected to the server. - Could not fetch status. Make sure you are connected to the server. Could not fetch status. Make sure you are connected to the server. - Status feature is not supported. You will not be able to set your status. Status feature is not supported. You will not be able to set your status. - Emojis are not supported. Some status functionality may not work. Emojis are not supported. Some status functionality may not work. - Could not set status. Make sure you are connected to the server. Could not set status. Make sure you are connected to the server. - Could not clear status message. Make sure you are connected to the server. Could not clear status message. Make sure you are connected to the server. - - Don't clear Don't clear - 30 minutes 30 minutes - - 1 hour 1 hour - 4 hours 4 hours - - Today Today - - This week This week - Less than a minute Less than a minute - 1 minute 1 minute - %1 minutes - %1 minutes%1 minutes + + %1 minutes + %1 minutes + - %1 hours - %1 hours%1 hours + + %1 hours + %1 hours + - 1 day 1 day - %1 days - %1 days%1 days - - - - %n minute(s) - %n minute%n minutes - - - - %n hour(s) - %n hour%n hours - - - - %n day(s) - %n day%n days + + %1 days + %1 days + OCC::Vfs - Please choose a different location. %1 is a drive. It doesn't support virtual files. Please choose a different location. %1 is a drive. It doesn't support virtual files. - Please choose a different location. %1 isn't a NTFS file system. It doesn't support virtual files. Please choose a different location. %1 isn't a NTFS file system. It doesn't support virtual files. - Please choose a different location. %1 is a network drive. It doesn't support virtual files. Please choose a different location. %1 is a network drive. It doesn't support virtual files. @@ -5913,37 +4617,30 @@ Server replied with error: %2 OCC::VfsDownloadErrorDialog - Download error Download error - Error downloading Error downloading - could not be downloaded could not be downloaded - > More details > More details - More details More details - Error downloading %1 Error downloading %1 - %1 could not be downloaded. %1 could not be downloaded. @@ -5951,8 +4648,6 @@ Server replied with error: %2 OCC::VfsSuffix - - Error updating metadata due to invalid modification time Error updating metadata due to invalid modification time @@ -5960,8 +4655,6 @@ Server replied with error: %2 OCC::VfsXAttr - - Error updating metadata due to invalid modification time Error updating metadata due to invalid modification time @@ -5969,12 +4662,10 @@ Server replied with error: %2 OCC::WebEnginePage - Invalid certificate detected Invalid certificate detected - The host "%1" provided an invalid certificate. Continue? The host "%1" provided an invalid certificate. Continue? @@ -5982,7 +4673,6 @@ Server replied with error: %2 OCC::WebFlowCredentials - You have been logged out of your account %1 at %2. Please login again. You have been logged out of your account %1 at %2. Please login again. @@ -5990,42 +4680,34 @@ Server replied with error: %2 OCC::WelcomePage - Form Form - Log in Log in - Sign up with provider Sign up with provider - Keep your data secure and under your control Keep your data secure and under your control - Secure collaboration & file exchange Secure collaboration & file exchange - Easy-to-use web mail, calendaring & contacts Easy-to-use web mail, calendaring & contacts - Screensharing, online meetings & web conferences Screensharing, online meetings & web conferences - Host your own server Host your own server @@ -6033,88 +4715,71 @@ Server replied with error: %2 OCC::ownCloudGui - Please sign in Please sign in - There are no sync folders configured. There are no sync folders configured. - Disconnected from %1 Disconnected from %1 - Unsupported Server Version Unsupported Server Version - The server on account %1 runs an unsupported version %2. Using this client with unsupported server versions is untested and potentially dangerous. Proceed at your own risk. The server on account %1 runs an unsupported version %2. Using this client with unsupported server versions is untested and potentially dangerous. Proceed at your own risk. - Terms of service Terms of service - Your account %1 requires you to accept the terms of service of your server. You will be redirected to %2 to acknowledge that you have read it and agrees with it. Your account %1 requires you to accept the terms of service of your server. You will be redirected to %2 to acknowledge that you have read it and agrees with it. - %1: %2 Example text: "Nextcloud: Syncing 25MB (3 minutes left)" (%1 is the folder name to be synced, %2 a status message for that folder) %1: %2 - macOS VFS for %1: Sync is running. macOS VFS for %1: Sync is running. - macOS VFS for %1: Last sync was successful. macOS VFS for %1: Last sync was successful. - macOS VFS for %1: A problem was encountered. macOS VFS for %1: A problem was encountered. - Checking for changes in remote "%1" Checking for changes in remote "%1" - Checking for changes in local "%1" Checking for changes in local "%1" - Disconnected from accounts: Disconnected from accounts: - Account %1: %2 Account %1: %2 - Account synchronization is disabled Account synchronisation is disabled - %1 (%2, %3) %1 (%2, %3) @@ -6122,73 +4787,59 @@ Server replied with error: %2 OwncloudAdvancedSetupPage - Username Username - Local Folder Local Folder - Choose different folder Choose different folder - Server address Server address - Sync Logo Sync Logo - Synchronize everything from server Synchronize everything from server - Ask before syncing folders larger than Ask before syncing folders larger than - Ask before syncing external storages Ask before syncing external storages - Keep local data Keep local data - <html><head/><body><p>If this box is checked, existing content in the local folder will be erased to start a clean sync from the server.</p><p>Do not check this if the local content should be uploaded to the servers folder.</p></body></html> <html><head/><body><p>If this box is checked, existing content in the local folder will be erased to start a clean sync from the server.</p><p>Do not check this if the local content should be uploaded to the servers folder.</p></body></html> - Erase local folder and start a clean sync Erase local folder and start a clean sync - MB Trailing part of "Ask confirmation before syncing folder larger than" MB - Choose what to sync Choose what to sync - &Local Folder &Local Folder @@ -6196,12 +4847,10 @@ Server replied with error: %2 OwncloudHttpCredsPage - &Username &Username - &Password &Password @@ -6209,23 +4858,18 @@ Server replied with error: %2 OwncloudSetupPage - - TextLabel TextLabel - Logo Logo - Server address Server address - This is the link to your %1 web interface when you open it in the browser. This is the link to your %1 web interface when you open it in the browser. @@ -6233,97 +4877,88 @@ Server replied with error: %2 QObject - %nd delay in days after an activity - %nd%nd + + %nd + %nd + - in the future in the future - %nh delay in hours after an activity - %nh%nh + + %nh + %nh + - 1m one minute after activity date and time 1m - %nm delay in minutes after an activity - %nm%nm + + %nm + %nm + - now now - Some time ago Some time ago - %1: %2 this displays an error string (%2) for a file %1 %1: %2 - New folder New folder - Failed to create debug archive Failed to create debug archive - Could not create debug archive in selected location! Could not create debug archive in selected location! - You renamed %1 You renamed %1 - You deleted %1 You deleted %1 - You created %1 You created %1 - You changed %1 You changed %1 - Synced %1 Synced %1 - Error deleting the file Error deleting the file - Paths beginning with '#' character are not supported in VFS mode. Paths beginning with '#' character are not supported in VFS mode. @@ -6331,38 +4966,34 @@ Server replied with error: %2 ResolveConflictsDialog - Solve sync conflicts Solve sync conflicts - %1 files in conflict indicate the number of conflicts to resolve - %1 files in conflict%1 files in conflict + + %1 files in conflict + %1 files in conflict + - Choose if you want to keep the local version, server version, or both. If you choose both, the local file will have a number added to its name. Choose if you want to keep the local version, server version, or both. If you choose both, the local file will have a number added to its name. - All local versions All local versions - All server versions All server versions - Resolve conflicts Resolve conflicts - Cancel Cancel @@ -6370,7 +5001,6 @@ Server replied with error: %2 ShareDelegate - Copied! Copied! @@ -6378,83 +5008,66 @@ Server replied with error: %2 ShareDetailsPage - An error occurred setting the share password. An error occurred setting the share password. - Edit share Edit share - Share label Share label - - Allow upload and editing Allow upload and editing - View only View only - File drop (upload only) File drop (upload only) - Allow resharing Allow resharing - Hide download Hide download - Password protection Password protection - Set expiration date Set expiration date - Note to recipient Note to recipient - Enter a note for the recipient Enter a note for the recipient - Unshare Unshare - Add another link Add another link - Share link copied! Share link copied! - Copy share link Copy share link @@ -6462,37 +5075,30 @@ Server replied with error: %2 ShareView - Password required for new share Password required for new share - Share password Share password - Shared with you by %1 Shared with you by %1 - Expires in %1 Expires in %1 - Sharing is disabled Sharing is disabled - This item cannot be shared. This item cannot be shared. - Sharing is disabled. Sharing is disabled. @@ -6500,12 +5106,10 @@ Server replied with error: %2 ShareeSearchField - Search for users or groups… Search for users or groups… - Sharing is not available for this folder Sharing is not available for this folder @@ -6513,7 +5117,6 @@ Server replied with error: %2 SyncJournalDb - Failed to connect database. Failed to connect database. @@ -6521,17 +5124,14 @@ Server replied with error: %2 SyncStatus - Sync now Sync now - Resolve conflicts Resolve conflicts - Open browser Open browser @@ -6539,12 +5139,10 @@ Server replied with error: %2 TalkReplyTextField - Reply to … Reply to … - Send reply to chat message Send reply to chat message @@ -6552,78 +5150,29 @@ Server replied with error: %2 TermsOfServiceCheckWidget - Terms of Service Terms of Service - Logo Logo - Switch to your browser to accept the terms of service Switch to your browser to accept the terms of service - - TrayFoldersMenuButton - - - Open local or group folders - Open local or group folders - - - - Open local folder - Open local folder - - - - Connected - Connected - - - - Disconnected - Disconnected - - - - Open local folder "%1" - Open local folder "%1" - - - - Open group folder "%1" - Open group folder "%1" - - - - Open %1 in file explorer - Open %1 in file explorer - - - - User group and local folders menu - User group and local folders menu - - TrayWindowHeader - Open local or group folders Open local or group folders - More apps More apps - Open %1 in browser Open %1 in browser @@ -6631,7 +5180,6 @@ Server replied with error: %2 UnifiedSearchInputContainer - Search files, messages, events … Search files, messages, events … @@ -6639,7 +5187,6 @@ Server replied with error: %2 UnifiedSearchPlaceholderView - Start typing to search Start typing to search @@ -6647,7 +5194,6 @@ Server replied with error: %2 UnifiedSearchResultFetchMoreTrigger - Load more results Load more results @@ -6655,7 +5201,6 @@ Server replied with error: %2 UnifiedSearchResultItemSkeleton - Search result skeleton. Search result skeleton. @@ -6663,7 +5208,6 @@ Server replied with error: %2 UnifiedSearchResultListItem - Load more results Load more results @@ -6671,7 +5215,6 @@ Server replied with error: %2 UnifiedSearchResultNothingFound - No results for No results for @@ -6679,7 +5222,6 @@ Server replied with error: %2 UnifiedSearchResultSectionItem - Search results section %1 Search results section %1 @@ -6687,44 +5229,34 @@ Server replied with error: %2 UserLine - Switch to account Switch to account - Current account status is online Current account status is online - Current account status is do not disturb Current account status is do not disturb - Account actions Account actions - Set status Set status - - Log out Log out - - Log in Log in - Remove account Remove account @@ -6732,67 +5264,54 @@ Server replied with error: %2 UserStatusSelector - Online status Online status - Online Online - Away Away - Do not disturb Do not disturb - Mute all notifications Mute all notifications - Invisible Invisible - Appear offline Appear offline - Status message Status message - What is your status? What is your status? - Clear status message after Clear status message after - Cancel Cancel - Clear Clear - Apply Apply @@ -6800,62 +5319,68 @@ Server replied with error: %2 Utility - %L1 GB %L1 GB - %L1 MB %L1 MB - %L1 KB %L1 KB - %L1 B %L1 B - %L1 TB %L1 TB - %n year(s) - %n year%n years + + %n year + %n years + - %n month(s) - %n month%n months + + %n month + %n months + - %n day(s) - %n day%n days + + %n day + %n days + - %n hour(s) - %n hour%n hours + + %n hour + %n hours + - %n minute(s) - %n minute%n minutes + + %n minute + %n minutes + - %n second(s) - %n second%n seconds + + %n second + %n seconds + - %1 %2 %1 %2 @@ -6863,17 +5388,14 @@ Server replied with error: %2 ValidateChecksumHeader - The checksum header is malformed. The checksum header is malformed. - The checksum header contained an unknown checksum type "%1" The checksum header contained an unknown checksum type "%1" - The downloaded file does not match the checksum, it will be resumed. "%1" != "%2" The downloaded file does not match the checksum, it will be resumed. "%1" != "%2" @@ -6881,12 +5403,10 @@ Server replied with error: %2 main.cpp - System Tray not available System Tray not available - %1 requires on a working system tray. If you are running XFCE, please follow <a href="http://docs.xfce.org/xfce/xfce4-panel/systray">these instructions</a>. Otherwise, please install a system tray application such as "trayer" and try again. %1 requires on a working system tray. If you are running XFCE, please follow <a href="http://docs.xfce.org/xfce/xfce4-panel/systray">these instructions</a>. Otherwise, please install a system tray application such as "trayer" and try again. @@ -6894,7 +5414,6 @@ Server replied with error: %2 nextcloudTheme::aboutInfo() - <p><small>Built from Git revision <a href="%1">%2</a> on %3, %4 using Qt %5, %6</small></p> <p><small>Built from Git revision <a href="%1">%2</a> on %3, %4 using Qt %5, %6</small></p> @@ -6902,119 +5421,94 @@ Server replied with error: %2 progress - Virtual file created Virtual file created - Replaced by virtual file Replaced by virtual file - Downloaded Downloaded - Uploaded Uploaded - Server version downloaded, copied changed local file into conflict file Server version downloaded, copied changed local file into conflict file - Server version downloaded, copied changed local file into case conflict conflict file Server version downloaded, copied changed local file into case conflict conflict file - Deleted Deleted - Moved to %1 Moved to %1 - Ignored Ignored - Filesystem access error Filesystem access error - - Error Error - Updated local metadata Updated local metadata - Updated local virtual files metadata Updated local virtual files metadata - Updated end-to-end encryption metadata Updated end-to-end encryption metadata - - Unknown Unknown - Downloading Downloading - Uploading Uploading - Deleting Deleting - Moving Moving - Ignoring Ignoring - Updating local metadata Updating local metadata - Updating local virtual files metadata Updating local virtual files metadata - Updating end-to-end encryption metadata Updating end-to-end encryption metadata @@ -7022,52 +5516,42 @@ Server replied with error: %2 theme - Sync status is unknown Sync status is unknown - Waiting to start syncing Waiting to start syncing - Sync is running Sync is running - Sync was successful Sync was successful - Sync was successful but some files were ignored Sync was successful but some files were ignored - Error occurred during sync Error occurred during sync - Error occurred during setup Error occurred during setup - Stopping sync Stopping sync - Preparing to sync Preparing to sync - Sync is paused Sync is paused @@ -7075,67 +5559,44 @@ Server replied with error: %2 utility - Could not open browser Could not open browser - There was an error when launching the browser to go to URL %1. Maybe no default browser is configured? There was an error when launching the browser to go to URL %1. Maybe no default browser is configured? - Could not open email client Could not open email client - There was an error when launching the email client to create a new message. Maybe no default email client is configured? There was an error when launching the email client to create a new message. Maybe no default email client is configured? - Always available locally Always available locally - Currently available locally Currently available locally - Some available online only Some available online only - Available online only Available online only - Make always available locally Make always available locally - Free up local space Free up local space - - FileProviderFastEnumerationSettings - - - Enable fast sync - Enable fast sync - - - - Fast sync will only sync changes in files and folders within folders that have been explored. This can significantly increase responsiveness on initial configuration of virtual files. However, it will cause redundant downloads of files moved to an unexplored folder. - Fast sync will only sync changes in files and folders within folders that have been explored. This can significantly increase responsiveness on initial configuration of virtual files. However, it will cause redundant downloads of files moved to an unexplored folder. - - - \ No newline at end of file + diff --git a/translations/client_es.ts b/translations/client_es.ts index f5ace2ab4ae3b..e03b31be29abb 100644 --- a/translations/client_es.ts +++ b/translations/client_es.ts @@ -1,13 +1,13 @@ - + + + ActivityItem - Open %1 locally Abrir %1 localmente - In %1 En %1 @@ -15,12 +15,10 @@ ActivityItemContent - Open file details Abrir detalles del archivo - Dismiss Descartar @@ -28,17 +26,14 @@ ActivityList - Activity list Lista de actividad - Scroll to top Desplazarse hasta la parte superior - No activities yet Aún no hay actividades @@ -46,22 +41,18 @@ CallNotificationDialog - Talk notification caller avatar Avatar de la notificación de llamada - Answer Talk call notification Aviso de llamada de Answer Talk - Decline Rechazar - Decline Talk call notification Rechazar la notificación de llamadas de Talk @@ -69,83 +60,66 @@ CloudProviderWrapper - %1 (%2, %3) %1 (%2, %3) - Checking for changes in "%1" Buscando cambios en "%1" - Syncing %1 of %2 (%3 left) Sincronizando %1 de %2 (%3 restantes) - Syncing %1 of %2 Sincronizando %1 de %2 - Syncing %1 (%2 left) Sincronizando %1 (quedan %2) - Syncing %1 Sincronizando %1 - - No recently changed files No hay archivos modificados recientemente - Sync paused Sincronización pausada - Syncing Sincronizando - Open website Abrir página web - Recently changed Cambiado recientemente - Pause synchronization Pausar sincronización - Help Ayuda - Settings Configuración - Log out Cerrar sesión - Quit sync client Cerrar cliente de sincronización @@ -153,12 +127,10 @@ ConflictDelegate - Local version Versión local - Server version Versión del servidor @@ -166,59 +138,46 @@ CurrentAccountHeaderButton - Current account Cuenta actual - - Resume sync for all Reanudar sincronización para todos - - Pause sync for all Pausar sincronización para todos - Add account Añadir cuenta - Add new account Añadir cuenta nueva - Settings Ajustes - Exit Salir - Current account avatar Avatar de la cuenta actual - Current account status is online El estado actual de la cuenta es en línea - Current account status is do not disturb El estado actual de la cuenta es no molestar - Account switcher and settings menu Menú para cambio de cuentas y ajustes @@ -226,7 +185,6 @@ EditFileLocallyLoadingDialog - Opening file for local editing Abriendo archivo para editarlo en local @@ -234,7 +192,6 @@ EmojiPicker - No recent emojis No hay emojis recientes @@ -242,7 +199,6 @@ EncryptionTokenDiscoveryDialog - Discovering the certificates stored on your USB token Descubriendo los certificados almacenados en su token USB @@ -250,22 +206,18 @@ EncryptionTokenSelectionWindow - Token Encryption Key Chooser Seleccionador de Token para llave de cifrado - Available Keys for end-to-end Encryption: Llaves disponibles para cifrado de extremo a extremo: - Choose Seleccione - Cancel Cancelar @@ -273,7 +225,6 @@ ErrorBox - Error Error @@ -281,12 +232,10 @@ FileDetailsPage - Activity Actividad - Sharing Compartir @@ -294,7 +243,6 @@ FileDetailsWindow - File details of %1 · %2 Detalles del archivo de %1 · %2 @@ -302,35 +250,32 @@ FileProviderEvictionDialog - - Remove local copies - Quitar copias locales - - - Evict materialised files Quitar los archivos materializados - - Local copies - Copias locales - - - Reload Recargar - Materialised items Elementos materializados + + FileProviderFastEnumerationSettings + + Enable fast sync + Habilitar sincronización rápida + + + Fast sync will only sync changes in files and folders within folders that have been explored. This can significantly increase responsiveness on initial configuration of virtual files. However, it will cause redundant downloads of files moved to an unexplored folder. + La sincronización rápida sólo sincronizará los cambios en archivos y carpetas dentro de las carpetas que se han explorado. Esto puede incrementar significativamente la capacidad de respuesta en la configuración inicial de los archivos virtuales. Sin embargo, esto provocará descargas redundantes de archivos movidos a carpetas inexploradas. + + FileProviderFileDelegate - Delete Borrar @@ -338,50 +283,29 @@ FileProviderSettings - Virtual files settings Configuración de archivos virtuales - General settings Configuración general - Enable virtual files Activar archivos virtuales - - - Allow deletion of items in Trash - Permitir la eliminación de los ítems en la Papelera - - - - Reset virtual files environment - Reestablecer el ambiente de archivos virtuales - FileProviderStorageInfo - Local storage use Uso de almacenamiento local - %1 GB of %2 GB remote files synced %1 GB de %2 GB de archivos remotos sincronizados - - Free up space … - Liberar espacio … - - - Evict local copies … Quitar copias locales … @@ -389,22 +313,18 @@ FileProviderSyncStatus - Syncing Sincronizando - All synced! ¡Todo está sincronizado! - Request sync Solicitar sincronización - Request a sync of changes for the VFS environment. macOS may ignore or delay this request. Solicitar una sincronización de cambios para el ambiente VFS. @@ -414,12 +334,10 @@ macOS podría ignorar o demorar esta solicitud. FileSystem - Error removing "%1": %2 Error al eliminar "%1": %2 - Could not remove folder "%1" No se ha podido eliminar la carpeta "%1" @@ -427,22 +345,18 @@ macOS podría ignorar o demorar esta solicitud. Flow2AuthWidget - Browser Authentication Autentificación del navegador - Logo Logo - Switch to your browser to connect your account Cambiar al navegador para conectar con tu cuenta - An error occurred while connecting. Please try again. Se ha producido un error al conectarse. Por favor, inténtelo de nuevo. @@ -450,12 +364,10 @@ macOS podría ignorar o demorar esta solicitud. FolderWizardSourcePage - Pick a local folder on your computer to sync Seleccione una carpeta local en su equipo para sincronizar - &Choose … &Seleccionar … @@ -463,22 +375,18 @@ macOS podría ignorar o demorar esta solicitud. FolderWizardTargetPage - Select a remote destination folder Seleccionar una carpeta remota de destino - Create folder Crear carpeta - Refresh Actualizar - Folders Carpetas @@ -486,17 +394,14 @@ macOS podría ignorar o demorar esta solicitud. MainWindow - Nextcloud desktop main dialog Diálogo principal de Nextcloud para escritorio - Unified search results list Lista de resultados de la búsqueda unificada - New activities Nuevas actividades @@ -504,17 +409,14 @@ macOS podría ignorar o demorar esta solicitud. OCC::AbstractNetworkJob - Connection timed out Tiempo de conexión agotado - Unknown error: network reply was deleted Error desconocido: la respuesta de red fue eliminada - Server replied "%1 %2" to "%3 %4" El servidor respondió "%1 %2" a "%3 %4" @@ -522,17 +424,14 @@ macOS podría ignorar o demorar esta solicitud. OCC::Account - File %1 is already locked by %2. El archivo %1 ya está bloqueado por %2. - Lock operation on %1 failed with error %2 La operación de bloqueo en %1 ha fallado con el error %2. - Unlock operation on %1 failed with error %2 La operación de desbloqueo en %1 ha fallado con el error %2. @@ -540,43 +439,30 @@ macOS podría ignorar o demorar esta solicitud. OCC::AccountManager - - An account was detected from a legacy desktop client. -Should the account be imported? - - - - %1 accounts were detected from a legacy desktop client. Should the accounts be imported? %1 cuentas se detectaron desde un cliente de escritorio antiguo. ¿Deben estas cuentas ser importadas? - - Legacy import Importación legada - Import Importar - 1 account was detected from a legacy desktop client. Should the account be imported? 1 cuenta se detectó desde un cliente de escritorio antiguo. ¿Debe importarse esta cuenta? - Skip Saltar - Could not import accounts from legacy client configuration. No se pudieron importar las cuentas desde la configuración del cliente antiguo. @@ -584,257 +470,188 @@ Should the account be imported? OCC::AccountSettings - Unchecked folders will be <b>removed</b> from your local file system and will not be synchronized to this computer anymore Las carpetas no seleccionadas serán <b>eliminadas</b> de su carpeta local y ya no serán sincronizadas en este ordenador - Synchronize all Sincronizar todo - Synchronize none No sincronizar nada - Apply manual changes Aplicar cambios manuales - Standard file sync Sincronización de archivos estándar - Virtual file sync Sincronización de archivos virtual - Connection settings Configuración de conexión - Apply Aplicar - Storage space: … Espacio de almacenamiento: ... - - - Cancel Cancelar - Connected with <server> as <user> Conectado a <server> como <user> - No account configured. No se ha configurado ninguna cuenta. - End-to-end Encryption with Virtual Files Cifrado de extremo a extremo con Archivos Virtuales - You seem to have the Virtual Files feature enabled on this folder. At the moment, it is not possible to implicitly download virtual files that are end-to-end encrypted. To get the best experience with virtual files and end-to-end encryption, make sure the encrypted folder is marked with "Make always available locally". Parece que tiene la función de Archivos Virtuales activada en esta carpeta. Por el momento, no es posible descargar implícitamente los archivos virtuales que están cifrados de extremo a extremo. Para obtener la mejor experiencia con los archivos virtuales y el cifrado de extremo a extremo, asegúrese de que la carpeta cifrada está marcada con "Hacer que esté siempre disponible localmente". - - Do not encrypt folder No cifrar carpeta - - Encrypt folder Cifrar carpeta - End-to-end Encryption Cifrado de extremo a extremo - This will encrypt your folder and all files within it. These files will no longer be accessible without your encryption mnemonic key. <b>This process is not reversible. Are you sure you want to proceed?</b> Esto cifrará su carpeta y todos los archivos contenidos en ella. Ya no se podrá acceder a estos archivos sin su clave de cifrado mnemónica. <b>Este proceso no es puede deshacer. ¿Seguro que desea continuar?</b> - - Forget encryption setup - Olvidar la configuración de cifrado - - - Disable encryption Deshabilitar cifrado - Display mnemonic Mostrar regla mnemotécnica - - Encryption is set-up. Remember to <b>Encrypt</b> a folder to end-to-end encrypt any new files added to it. - Se ha configurado el cifrado. Recuerde <b>Cifrar</b> una carpeta para cifrar de extremo a extremo cualesquiera archivos añadidos a esta. - - - End-to-end encryption has been enabled for this account El cifrado de extremo a extremo a sido habilitado para esta cuenta - Warning Aviso - Please wait for the folder to sync before trying to encrypt it. Por favor, espere a que la carpeta se sincronice antes de intentar cifrarla. - The folder has a minor sync problem. Encryption of this folder will be possible once it has synced successfully La carpeta tiene un pequeño problema de sincronización. El cifrado de esta carpeta será posible cuando se haya sincronizado correctamente. - The folder has a sync error. Encryption of this folder will be possible once it has synced successfully La carpeta tiene un problema de sincronización. El cifrado de esta carpeta será posible cuando se haya sincronizado correctamente. - - You cannot encrypt this folder because the end-to-end encryption is not set-up yet on this device. -Would you like to do this now? - No puede cifrar esta carpeta debido a que el cifrado de extremo a extremo no está configurado todavía en este dispositivo. -¿Desea hacer esto ahora mismo? - - - End-to-end encryption is not configured on this device. Once it is configured, you will be able to encrypt this folder. Would you like to set up end-to-end encryption? El cifrado de extremo a extremo no está configurado en este dispositivo. Una vez que esté configurado, podrá cifrar esta carpeta. ¿Desea configurar el cifrado de extremo a extremo? - You cannot encrypt a folder with contents, please remove the files. Wait for the new sync, then encrypt it. No puede cifrar una carpeta con contenidos, por favor, elimine los archivos. Espere a una nueva sincronización, luego cifrala. - Encryption failed Ha fallado el cifrado - Could not encrypt folder because the folder does not exist anymore No es posible cifrar la carpeta porque ya no existe - Encrypt Cifrar - - Edit Ignored Files Editar archivos ignorados - - Create new folder Crear nueva carpeta - - Availability Disponibilidad - Choose what to sync Elija qué sincronizar - Force sync now Forzar la sincronización ahora - Restart sync Reiniciar sync - Remove folder sync connection Eliminar la sincronización de carpetas conectadas - Disable virtual file support … Desactivar soporte para archivos virtuales … - Enable virtual file support %1 … Activar soporte para archivos virtuales %1 ... - (experimental) (experimental) - Folder creation failed Ha fallado la creación de la carpeta - Confirm Folder Sync Connection Removal Confirme la sincronización para la eliminación de la carpeta conectada - Remove Folder Sync Connection Eliminar carpeta de sincronización conectada - Disable virtual file support? ¿Desactivar soporte para archivos virtuales? - This action will disable virtual file support. As a consequence contents of folders that are currently marked as "available online only" will be downloaded. The only advantage of disabling virtual file support is that the selective sync feature will become available again. @@ -847,218 +664,150 @@ La única ventaja de deshabilitar el soporte de archivos virtuales es para la ca Además, esta acción interrumpirá cualquier sincronización en curso. - Disable support Desactivar soporte - End-to-end encryption mnemonic Mnemónico para cifrado de extremo a extremo - - To protect your Cryptographic Identity, we encrypt it with a mnemonic of 12 dictionary words. Please note it down and keep it safe. You will need it to set-up the synchronization of encrypted folders on your other devices. - Para proteger su Identidad Criptográfica, ciframos la misma con un mnemonico de 12 palabras de diccionario. Por favor, anótelo y consérvelo a salvo. Lo necesitará para configurar la sincronización de carpetas cifradas en sus otros dispositivos. - - - - Forget the end-to-end encryption on this device - Olvidar el cifrado de extremo a extremo en este dispositivo - - - - Do you want to forget the end-to-end encryption settings for %1 on this device? - ¿Desea olvidar los ajustes de cifrado de extremo a extremo para %1 en este dispositivo? - - - - Forgetting end-to-end encryption will remove the sensitive data and all the encrypted files from this device.<br>However, the encrypted files will remain on the server and all your other devices, if configured. - Al olvidar el cifrado de extremo a extremo se eliminarán los datos sensibles y todos los archivos cifrados de este dispositivo. <br>Sin embargo, los archivos cifrados permanecerán en el servidor y en todos sus otros dispositivos, si se encuentran configurados. - - - Sync Running Sincronización en curso - The syncing operation is running.<br/>Do you want to terminate it? La sincronización está en curso.<br/>¿Desea interrumpirla? - %1 in use %1 en uso - Migrate certificate to a new one Migrar certificado a uno nuevo - There are folders that have grown in size beyond %1MB: %2 Existen carpetas que han aumentado de tamaño más allá de %1MB: %2 - - End-to-end encryption has been initialized on this account with another device.<br>Enter the unique mnemonic to have the encrypted folders synchronize on this device as well. - El cifrado de extremo a extremo ha sido inicializado en esta cuenta con otro dispositivo. <br> Ingrese el mnemonico para que las carpetas cifradas se sincronicen en este dispositivo también. - - - End-to-end encryption has been enabled on this account with another device.<br>It can be enabled on this device by entering your mnemonic.<br>This will enable synchronisation of existing encrypted folders. El cifrado de extremo a extremo ha sido habilitado en esta cuenta con otro dispositivo.<br> puede ser habilitado en este dispositivo ingresando su mnemónico.<br> Esto habilitará la sincronización de las carpetas cifradas existentes - - This account supports end-to-end encryption, but it needs to be set up first. - Esta cuenta soporta cifrado de extremo a extremo, pero debe ser configurado primero. - - - Set up encryption Configurar cifrado - This account supports end-to-end encryption Esta cuenta soporta cifrado punto a punto - Connected to %1. Conectado a %1. - Server %1 is temporarily unavailable. Servidor %1 no está disponible temporalmente. - Server %1 is currently in maintenance mode. El servidor %1 se encuentra en modo mantenimiento. - Signed out from %1. Cerró sesión desde %1. - There are folders that were not synchronized because they are too big: Hay carpetas que no se han sincronizado porque son demasiado grandes: - There are folders that were not synchronized because they are external storages: Hay carpetas que no se han sincronizado porque están en el almacenamiento externo: - There are folders that were not synchronized because they are too big or external storages: Hay carpetas que no se han sincronizado porque son demasiado grandes o están en el almacenamiento externo: - - Open folder Abrir carpeta - Resume sync Continuar sincronización - Pause sync Pausar sincronización - <p>Could not create local folder <i>%1</i>.</p> <p>No pudo crear la carpeta local <i>%1</i>.</p> - <p>Do you really want to stop syncing the folder <i>%1</i>?</p><p><b>Note:</b> This will <b>not</b> delete any files.</p> <p>¿De verdad quiere dejar de sincronizar la carpeta <i>%1</i>?</p><p><b>Nota:</b> Esto <b>no</b> elminará los archivo.</p> - To protect your Cryptographic Identity, we encrypt it with a mnemonic of 12 dictionary words. Please note these down and keep them safe. They will be needed to add other devices to your account (like your mobile phone or laptop). Para proteger su identidad criptográfica, ciframos la misma con una regla mnemotécnica de 12 palabras de diccionario. Por favor, anótelas y consérvelas a salvo. Estas palabras serán necesarias para añadir otros dispositivos a su cuenta (como su teléfono móvil o un portátil). - Disable end-to-end encryption Deshabilitar cifrado de extremo a extremo - Disable end-to-end encryption for %1? ¿Deshabilitar cifrado de extremo a extremo para %1? - Removing end-to-end encryption will remove locally-synced files that are encrypted.<br>Encrypted files will remain on the server. Quitar el cifrado de extremo a extremo borrará los archivos sincronizados localmente que se encuentran cifrados.<br>Los archivos cifrados se mantendrán en el servidor. - %1 (%3%) of %2 in use. Some folders, including network mounted or shared folders, might have different limits. %1 (%3%) de %2 en uso. Algunas carpetas, como carpetas de red o compartidas, podrían tener límites diferentes. - %1 of %2 in use %1 de %2 en uso - Currently there is no storage usage information available. Actualmente no hay información disponible sobre el uso de almacenamiento. - %1 as %2 %1 como %2 - The server version %1 is unsupported! Proceed at your own risk. ¡La versión %1 del servidor no está soportada! Si continúas, lo haces bajo tu propio riesgo. - Server %1 is currently being redirected, or your connection is behind a captive portal. El servidor %1 está siendo redirigido actualmente, ó, su conexión está detrás de un portal cautivo. - Connecting to %1 … Conectando a %1 ... - Unable to connect to %1. No es posible conectarse con %1. - Server configuration error: %1 at %2. Error de configuración del servidor: %1 en %2, - You need to accept the terms of service at %1. Debe aceptar los términos de servicio en %1. - No %1 connection configured. No hay ninguna conexión de %1 configurada. @@ -1066,17 +815,14 @@ Además, esta acción interrumpirá cualquier sincronización en curso. OCC::AccountSetupFromCommandLineJob - The authenticated request to the server was redirected to "%1". The URL is bad, the server is misconfigured. La petición autenticada al servidor ha sido redirigida a "%1". La URL es errónea, el servidor está mal configurado. - Access forbidden by server. To verify that you have proper access, <a href="%1">click here</a> to access the service with your browser. Acceso denegado por el servidor. Para verificar que tiene acceso, <a href="%1">haga clic aquí</a> para acceder al servicio desde su navegador. - There was an invalid response to an authenticated WebDAV request Ha habido una respuesta no válida a una solicitud autenticada de WebDAV @@ -1084,57 +830,46 @@ Además, esta acción interrumpirá cualquier sincronización en curso. OCC::AccountState - Signed out Cerrar sesión - Disconnected Desconectado - Connected Conectado - Service unavailable Servicio no disponible - Maintenance mode Modo mantenimiento - Redirect detected Redirección detectada - Network error Error en la red - Configuration error Error en la configuración - Asking Credentials Solicitando credenciales - Need the user to accept the terms of service Necesita el usuario aceptar los términos de servicio - Unknown account state Estado de cuenta desconocido @@ -1142,17 +877,14 @@ Además, esta acción interrumpirá cualquier sincronización en curso. OCC::ActivityListModel - For more activities please open the Activity app. Para más detalles, por favor, abre la app Actividades. - Fetching activities … Actividades de búsqueda … - Network error occurred: client will retry syncing. Ha ocurrido un error de red: el cliente reintentará la sincronización. @@ -1160,42 +892,34 @@ Además, esta acción interrumpirá cualquier sincronización en curso. OCC::AddCertificateDialog - SSL client certificate authentication Certificado de autentificación SSL del cliente - This server probably requires a SSL client certificate. Probablemente este servidor requiera un certificado SSL del cliente. - Certificate & Key (pkcs12): Certificado & Key (pkcs12): - Certificate password: Contraseña del certificado: - An encrypted pkcs12 bundle is strongly recommended as a copy will be stored in the configuration file. Usar encriptación pkcs12 es muy recomendable, puesto que una copia se guardará en el archivo de configuración. - Browse … Explorar ... - Select a certificate Seleccione un certificado - Certificate files (*.p12 *.pfx) Archivos de certificado (*.p12 *.pfx) @@ -1203,71 +927,58 @@ Además, esta acción interrumpirá cualquier sincronización en curso. OCC::Application - Some settings were configured in %1 versions of this client and use features that are not available in this version.<br><br>Continuing will mean <b>%2 these settings</b>.<br><br>The current configuration file was already backed up to <i>%3</i>. Algunos ajustes fueron configurados en %1 versiones de este cliente y utilizan características que no están disponibles en esta versión.<br><br>Continuar implica <b>%2 estos ajustes</b>.<br><br>El archivo de configuración actual ya se respaldó en <i>%3</i>. - newer newer software version recientes - older older software version antiguos - ignoring ignorando - deleting eliminando - Quit Salir - Continue Continuar - %1 accounts number of accounts imported %1 cuentas - 1 account 1 cuenta - %1 folders number of folders imported %1 carpetas - 1 folder 1 carpeta - Legacy import Importación legada - Imported %1 and %2 from a legacy desktop client. %3 number of accounts and folders imported. list of users. @@ -1275,12 +986,10 @@ Además, esta acción interrumpirá cualquier sincronización en curso. - Error accessing the configuration file Error al acceder al archivo de configuración - There was an error while accessing the configuration file at %1. Please make sure the file can be accessed by your system account. Se ha producido un error al acceder al archivo de configuración en %1. Por favor, asegúrese de que su cuenta del sistema puede acceder al archivo. @@ -1288,22 +997,18 @@ Además, esta acción interrumpirá cualquier sincronización en curso. OCC::AuthenticationDialog - Authentication Required Se requiere autenticación - Enter username and password for "%1" at %2. Introduce usuario y contraseña para "%1" en %2. - &Username: &Usuario: - &Password: &Contraseña: @@ -1311,115 +1016,57 @@ Además, esta acción interrumpirá cualquier sincronización en curso. OCC::BasePropagateRemoteDeleteEncrypted - "%1 Failed to unlock encrypted folder %2". "%1 Fallo al desbloquear la carpeta cifrada %2". - Wrong HTTP code returned by server. Expected 204, but received "%1 %2". El código HTTP devuelto por el servidor es erróneo. Se esperaba 204, pero se recibió "%1 %2". - - OCC::BulkPropagatorDownloadJob - - - - File has changed since discovery - El archivo ha cambiado desde que se hizo el descubrimiento - - - - Could not delete file record %1 from local DB - No se pudo eliminar el registro del archivo %1 de la base de datos local - - - - File %1 cannot be downloaded because it is non virtual! - ¡El archivo %1 no puede ser descargado por que no es virtual! - - - - Could not get file %1 from local DB - No se pudo obtener el archivo %1 desde la base de datos local - - - - File %1 cannot be downloaded because encryption information is missing. - El archivo %1 no puede ser descargado por que no se encuentra la información de cifrado. - - - - Error updating metadata: %1 - Error al actualizar los metadatos: %1 - - - - The file %1 is currently in use - El archivo %1 se encuentra actualmente en uso - - OCC::BulkPropagatorJob - File %1 cannot be uploaded because another file with the same name, differing only in case, exists El archivo %1 no se puede subir porque ya existe otro con el mismo nombre, solo difiere en las mayúsculas/minúsculas - - File contains leading or trailing spaces and couldn't be renamed - El archivo tiene espacio iniciales o finales y no pudo ser renombrado - - - File %1 has invalid modified time. Do not upload to the server. El archivo %1 tiene una hora de modificación no válida. No subir al servidor. - File Removed (start upload) %1 Archivo eliminado (comenzar subida) %1 - File %1 has invalid modification time. Do not upload to the server. El archivo %1 tiene una hora de modificación no válida. No subir al servidor. - Local file changed during syncing. It will be resumed. Un archivo local ha cambiado durante la sincronización. Será subido. - - Local file changed during sync. Un archivo local ha cambiado durante la sincronización. - Network error: %1 Error de red: %1 - Error updating metadata: %1 Error al actualizar los metadatos: %1 - The file %1 is currently in use El archivo %1 se encuentra en uso - The local file was removed during sync. El archivo local ha sido eliminado durante la sincronización. - Restoration failed: %1 Fallo al restaurar: %1 @@ -1427,37 +1074,30 @@ Además, esta acción interrumpirá cualquier sincronización en curso. OCC::CaseClashConflictSolver - Cannot rename file because a file with the same name already exists on the server. Please pick another name. No se puede renombrar el archivo porque hay un archivo con el mismo nombre en el servidor. Por favor, elija otro nombre. - Could not rename file. Please make sure you are connected to the server. No se ha podido renombrar el archivo. Por favor, asegúrese de que está conectado al servidor. - You don't have the permission to rename this file. Please ask the author of the file to rename it. No tiene permisos para renombrar este archivo. Por favor, solicite al autor del archivo que lo renombre. - Failed to fetch permissions with error %1 Fallo al obtener permisos con error %1 - Filename contains leading and trailing spaces. El nombre del archivo contiene espacios iniciales y finales. - Filename contains leading spaces. El nombre del archivo contiene espacios al inicio. - Filename contains trailing spaces. El nombre del archivo contiene espacios al final. @@ -1465,111 +1105,86 @@ Además, esta acción interrumpirá cualquier sincronización en curso. OCC::CaseClashFilenameDialog - Case Clash Conflict Conflicto de capitalización - The file could not be synced because it generates a case clash conflict with an existing file on this system. El archivo no puede ser sincronizado porque genera un conflicto de capitalización con un archivo que ya existe en este sistema. - Error Error - Existing file Archivo existente - file A archivo A - - today hoy - - 0 byte 0 bytes - - Open existing file Abrir archivo existente - Case clashing file Archivo con conflicto de capitalización - file B archivo B - - Open clashing file Abrir archivo con problema de capitalización - Please enter a new name for the clashing file: Por favor ingrese un nombre nuevo para el archivo con el problema de capitalización: - New filename Nuevo nombre de archivo - Rename file Renombrar archivo - The file "%1" could not be synced because of a case clash conflict with an existing file on this system. El archivo "%1" no pudo ser sincronizado porque genera un conflicto de capitalización con un archivo que ya existe en este sistema. - %1 does not support equal file names with only letter casing differences. %1 no soporta nombres de archivo idénticos con diferencias de capitalización de letras. - Filename contains leading and trailing spaces. El nombre del archivo contiene espacios iniciales y finales. - Filename contains leading spaces. El nombre del archivo contiene espacios al inicio. - Filename contains trailing spaces. El nombre del archivo contiene espacios al final. - Use invalid name Usar nombre inválido - Filename contains illegal characters: %1 El nombre del archivo contiene caracteres ilegales: %1 @@ -1577,7 +1192,6 @@ Además, esta acción interrumpirá cualquier sincronización en curso. OCC::CleanupPollsJob - Error writing metadata to the database Error al escribir los metadatos en la base de datos @@ -1585,33 +1199,27 @@ Además, esta acción interrumpirá cualquier sincronización en curso. OCC::ClientSideEncryption - Input PIN code Please keep it short and shorter than "Enter Certificate USB Token PIN:" Ingrese código PIN - Enter Certificate USB Token PIN: Ingrese el PIN del Token USB para certificados: - Invalid PIN. Login failed PIN inválido, falló el inicio de sesión - Login to the token failed after providing the user PIN. It may be invalid or wrong. Please try again! El inicio de sesión al Token falló luego de proporcionar el PIN del usuario. Podría ser inválido o incorrecto. ¡Por favor, intente de nuevo! - Please enter your end-to-end encryption passphrase:<br><br>Username: %2<br>Account: %3<br> Por favor, introduzca su frase de cifrado de extremo a extremo:<br><br>Nombre de usuario: %2<br> Cuenta: %3<br> - Enter E2E passphrase Introduce la frase de acceso E2E @@ -1619,87 +1227,66 @@ Además, esta acción interrumpirá cualquier sincronización en curso. OCC::ConflictDialog - Sync Conflict Conflicto de sincronización - - Conflicting versions of %1. Versión conflictiva de %1. - Which version of the file do you want to keep?<br/>If you select both versions, the local file will have a number added to its name. ¿Qué versión del archivo quiere mantener?<br/>Si selecciona ambas versiones, al archivo local se le añadirá un número a su nombre - Local version Versión local - - Click to open the file Clic para abrir el archivo - - today hoy - - 0 byte 0 byte - <a href="%1">Open local version</a> <a href="%1">Abrir versión local</a> - Server version Versión del servidor - <a href="%1">Open server version</a> <a href="%1">Abrir versión en servidor</a> - - Keep selected version Mantener la versión seleccionada - Open local version Abrir la versión local - Open server version Abrir la versión en servidor - Keep both versions Mantener ambas versiones - Keep local version Mantener versión local - Keep server version Mantener la versión del servidor @@ -1707,14 +1294,10 @@ Además, esta acción interrumpirá cualquier sincronización en curso. OCC::ConflictSolver - - Error Error - - Moving file failed: %1 @@ -1723,17 +1306,14 @@ Además, esta acción interrumpirá cualquier sincronización en curso. - Do you want to delete the directory <i>%1</i> and all its contents permanently? ¿Quieres eliminar la carpeta <i>%1</i> y todo su contenido permanentemente? - Do you want to delete the file <i>%1</i> permanently? ¿Quieres eliminar el archivo <i>%1</i> permanentemente? - Confirm deletion Confirmar borrado @@ -1741,32 +1321,26 @@ Además, esta acción interrumpirá cualquier sincronización en curso. OCC::ConnectionValidator - Timeout Tiempo de espera superado - The configured server for this client is too old La configuración del servidor para este cliente es demasiado antigua - Please update to the latest server and restart the client. Por favor, actualice a la última versión del servidor y reinicie el cliente. - Authentication error: Either username or password are wrong. Error de autenticación: El usuario o la contraseña son incorrectos - No Nextcloud account configured La cuenta Nextcloud no está configurada - The provided credentials are not correct Las credenciales proporcionadas no son correctas @@ -1774,12 +1348,10 @@ Además, esta acción interrumpirá cualquier sincronización en curso. OCC::DiscoveryPhase - Error while canceling deletion of a file Error al cancelar la eliminación de un archivo - Error while canceling deletion of %1 Error al cancelar la eliminación de %1 @@ -1787,19 +1359,14 @@ Además, esta acción interrumpirá cualquier sincronización en curso. OCC::DiscoverySingleDirectoryJob - - Server error: PROPFIND reply is not XML formatted! Error del servidor: ¡la respuesta de PROPFIND no tiene formato XML! - - Encrypted metadata setup error! ¡Hubo un error al configurar los metadatos cifrados! - Encrypted metadata setup error: initial signature from server is empty. Error de configuración de los metadatos cifrados: la firma inicial del servidor está vacía. @@ -1807,27 +1374,22 @@ Además, esta acción interrumpirá cualquier sincronización en curso. OCC::DiscoverySingleLocalDirectoryJob - Error while opening directory %1 Error al abrir el directorio %1 - Directory not accessible on client, permission denied Directorio no accesible en el cliente, permiso denegado - Directory not found: %1 Directorio no encontrado: %1 - Filename encoding is not valid La codificación del nombre del archivo no es válida - Error while reading directory %1 Error al leer el directorio %1 @@ -1835,93 +1397,62 @@ Además, esta acción interrumpirá cualquier sincronización en curso. OCC::EditLocallyJob - - - - - - - - Could not start editing locally. No se pudo iniciar la edición local. - - An error occurred during setup. Ocurrió un error mientras se hacía la configuración. - - Could not find a file for local editing. Make sure its path is valid and it is synced locally. No fue posible encontrar un archivo para edición local. Asegúrese de que la ruta es válida y que esta se encuentra sincronizada localmente. - - - - Could not find a file for local editing. Make sure it is not excluded via selective sync. No fue posible encontrar un archivo para edición local. Asegúrese de que no está excluida a través de la sincronización selectiva. - - - An error occurred during data retrieval. Ocurrió un error mientras se recuperaban los datos. - - An error occurred trying to synchronise the file to edit locally. Ocurrió un error mientras se intentaba sincronizar el archivo para edición local. - Server error: PROPFIND reply is not XML formatted! Error del servidor: ¡la respuesta de PROPFIND no tiene formato XML! - Could not find a remote file info for local editing. Make sure its path is valid. No fue posible encontrar la información del archivo remoto para edición local. Asegúrese de que la ruta es válida. - Invalid local file path. Ruta al archivo local inválida. - Could not open %1 No fue posible abrir %1 - Please try again. Por favor intente de nuevo. - File %1 already locked. El archivo %1 ya está bloqueado. - - Lock will last for %1 minutes. You can also unlock this file manually once you are finished editing. El bloqueo se mantendrá por %1 minutos. Puede también desbloquear este archivo manualmente una vez que termine de editarlo. - File %1 now locked. El archivo %1 ahora está bloqueado. - File %1 could not be locked. El archivo %1 no pudo ser bloqueado. @@ -1929,12 +1460,10 @@ Además, esta acción interrumpirá cualquier sincronización en curso. OCC::EditLocallyManager - Could not validate the request to open a file from server. No se pudo validar la solicitud para abrir un archivo desde el servidor. - Please try again. Por favor, inténtelo de nuevo. @@ -1942,34 +1471,26 @@ Además, esta acción interrumpirá cualquier sincronización en curso. OCC::EditLocallyVerificationJob - Invalid token received. Se recibió un token inválido. - - - Please try again. Por favor, vuelve a intentarlo. - Invalid file path was provided. Se ha proporcionado una ruta de archivo inválida. - Could not find an account for local editing. No se ha podido encontrar una cuenta para edición local. - Could not start editing locally. No se ha podido comenzar la edición local. - An error occurred trying to verify the request to edit locally. Ha ocurrido un error intentando verificar la petición para editar localmente. @@ -1977,7 +1498,6 @@ Además, esta acción interrumpirá cualquier sincronización en curso. OCC::EncryptFolderJob - Could not generate the metadata for encryption, Unlocking the folder. This can be an issue with your OpenSSL libraries. No se pueden generar los metadatos para el cifrado, desbloquea la carpeta. @@ -1987,34 +1507,22 @@ Esto podría ser un problema con tu librería OpenSSL OCC::EncryptedFolderMetadataHandler - - - - - - Error fetching metadata. Error al obtener los metadatos. - - - Error locking folder. Error al bloquear la carpeta. - Error fetching encrypted folder ID. Error al obtener el ID de la carpeta cifrada. - Error parsing or decrypting metadata. Error al analizar o descifrar los metadatos. - Failed to upload metadata Fallo al subir los metadatos @@ -2022,86 +1530,85 @@ Esto podría ser un problema con tu librería OpenSSL OCC::FileDetails - %1 second(s) ago seconds elapsed since file last modified - Hace %1 segundoHace %1 segundo(s)Hace %1 segundo(s) + + Hace %1 segundo + Hace %1 segundo(s) + - %1 minute(s) ago minutes elapsed since file last modified - Hace %1 minutoHace %1 minuto(s)Hace %1 minuto(s) + + Hace %1 minuto + Hace %1 minuto(s) + - %1 hour(s) ago hours elapsed since file last modified - Hace %1 horaHace %1 hora(s)Hace %1 hora(s) + + Hace %1 hora + Hace %1 hora(s) + - %1 day(s) ago days elapsed since file last modified - Hace %1 díaHace %1 día(s)Hace %1 día(s) + + Hace %1 día + Hace %1 día(s) + - %1 month(s) ago months elapsed since file last modified - Hace %1 mesHace %1 mes(es)Hace %1 mes(es) + + Hace %1 mes + Hace %1 mes(es) + - %1 year(s) ago years elapsed since file last modified - Hace %1 añoHace %1 año(s)Hace %1 año(s) + + Hace %1 año + Hace %1 año(s) + - Locked by %1 - Expires in %2 minute(s) remaining time before lock expires - Bloqueado por %1 - Caduca en %2 minutoBloqueado por %1 - Caduca en %2 minuto(s)Bloqueado por %1 - Caduca en %2 minuto(s) + + Bloqueado por %1 - Caduca en %2 minuto + Bloqueado por %1 - Caduca en %2 minuto(s) + OCC::Flow2Auth - The returned server URL does not start with HTTPS despite the login URL started with HTTPS. Login will not be possible because this might be a security issue. Please contact your administrator. La URL de consulta no comienza con HTTPS a pesar de que la URL de inicio de sesión comenzó con HTTPS. El inicio de sesión no será posible porque esto podría ser un problema de seguridad. Por favor, póngase en contacto con su administrador. - - Error returned from the server: <em>%1</em> Error devuelto por el servidor: <em>%1</em> - The polling URL does not start with HTTPS despite the login URL started with HTTPS. Login will not be possible because this might be a security issue. Please contact your administrator. La URL de la consulta no comienza con HTTPS a pesar de que la URL de inicio de sesión comenzó con HTTPS. El inicio de sesión no será posible porque esto podría ser un problema de seguridad. Por favor, póngase en contacto con su administrador. - - There was an error accessing the "token" endpoint: <br><em>%1</em> Hubo un error accediendo al "token" endpoint: <br><em>%1</em> - - The reply from the server did not contain all expected fields La respuesta del servidor no contiene todos los campos esperados - - The reply from the server did not contain all expected fields: <br><em>%1</em> - La respuesta del servidor no contiene todos los campos esperados: <br><em>%1</em> - - - - Could not parse the JSON returned from the server: <br><em>%1</em> No se pudo procesar el código JSON recibido del servidor: <br><em>%1</em> @@ -2109,37 +1616,30 @@ Esto podría ser un problema con tu librería OpenSSL OCC::Flow2AuthWidget - Unable to open the Browser, please copy the link to your Browser. No se ha podido abrir el navegador, por favor copie el enlace en su navegador. - Waiting for authorization Esperando autorización - Polling for authorization Pidiendo autorización - Starting authorization Iniciando autorización - Link copied to clipboard. Enlace copiado al portapapeles. - Open Browser Abrir Navegador - Copy Link Copiar Link @@ -2147,172 +1647,164 @@ Esto podría ser un problema con tu librería OpenSSL OCC::Folder - %1 has been removed. %1 names a file. %1 ha sido eliminado. - %1 has been updated. %1 names a file. %1 ha sido actualizado. - %1 has been renamed to %2. %1 and %2 name files. %1 ha sido renombrado a %2. - %1 has been moved to %2. %1 ha sido movido a %2. - %1 and %n other file(s) have been removed. - %1 y %n otro archivo han sido eliminados%1 y %n otros archivos han sido eliminados.%1 y %n otros archivos han sido eliminados. + + %1 y %n otro archivo han sido eliminados + %1 y %n otros archivos han sido eliminados. + - Please choose a different location. The folder %1 doesn't exist. Por favor, escoja una ubicación diferente. La carpeta %1 no existe. - Please choose a different location. %1 isn't a valid folder. Por favor, escoja una ubicación diferente. La carpeta %1 no es válida. - Please choose a different location. %1 isn't a readable folder. Por favor, escoja una ubicación diferente. La carpeta %1 no se puede leer. - %1 and %n other file(s) have been added. - %1 y %n otro(s) archivo(s) ha(n) sido añadido(s).%1 y %n otro(s) archivo(s) ha(n) sido añadido(s).%1 y %n otro(s) archivo(s) ha(n) sido añadido(s). + + %1 y %n otro(s) archivo(s) ha(n) sido añadido(s). + %1 y %n otro(s) archivo(s) ha(n) sido añadido(s). + - %1 has been added. %1 names a file. %1 ha sido añadido. - %1 and %n other file(s) have been updated. - %1 y otro archivo han sido actualizados.%1 y otros %n archivos han sido actualizados.%1 y otros %n archivos han sido actualizados. + + %1 y otro archivo han sido actualizados. + %1 y otros %n archivos han sido actualizados. + - %1 has been renamed to %2 and %n other file(s) have been renamed. - %1 ha sido renombrado a %2 y otro archivo ha sido renombrado.%1 ha sido renombrado a %2 y otros %n archivos han sido renombrado.%1 ha sido renombrado a %2 y otros %n archivos han sido renombrado. + + %1 ha sido renombrado a %2 y otro archivo ha sido renombrado. + %1 ha sido renombrado a %2 y otros %n archivos han sido renombrado. + - %1 has been moved to %2 and %n other file(s) have been moved. - %1 ha sido movido a %2 y otro archivo ha sido movido.%1 ha sido movido a %2 y otros %n archivos han sido movidos.%1 ha sido movido a %2 y otros %n archivos han sido movidos. + + %1 ha sido movido a %2 y otro archivo ha sido movido. + %1 ha sido movido a %2 y otros %n archivos han sido movidos. + - %1 has and %n other file(s) have sync conflicts. - %1 y otro archivo han tenido conflictos al sincronizar.%1 y otros %n archivos han tenido conflictos al sincronizar.%1 y otros %n archivos han tenido conflictos al sincronizar. + + %1 y otro archivo han tenido conflictos al sincronizar. + %1 y otros %n archivos han tenido conflictos al sincronizar. + - %1 has a sync conflict. Please check the conflict file! Conflicto al sincronizar %1. ¡Por favor compruebe el archivo! - %1 and %n other file(s) could not be synced due to errors. See the log for details. - %1 y otro archivo no pudieron ser sincronizados debido a errores. Para más detalles vea el registro.%1 y otros %n archivos no se han podido sincronizar debido a errores. Para más detalles vea el registro.%1 y otros %n archivos no se han podido sincronizar debido a errores. Para más detalles vea el registro. + + %1 y otro archivo no pudieron ser sincronizados debido a errores. Para más detalles vea el registro. + %1 y otros %n archivos no se han podido sincronizar debido a errores. Para más detalles vea el registro. + - %1 could not be synced due to an error. See the log for details. %1 no se ha podido sincronizar debido a un error. Para más detalles, vea el registro. - %1 and %n other file(s) are currently locked. - %1 y otro %n archivo está actualmente bloqueado.%1 y otro(s) %n archivo(s) están bloqueados actualmente.%1 y otro(s) %n archivo(s) están bloqueados actualmente. + + %1 y otro %n archivo está actualmente bloqueado. + %1 y otro(s) %n archivo(s) están bloqueados actualmente. + - %1 is currently locked. %1 está actualmente bloqueado. - Sync Activity Actividad de la sincronización - Could not read system exclude file No se ha podido leer el archivo de exclusión del sistema - A new folder larger than %1 MB has been added: %2. Una carpeta mayor de %1 MB ha sido añadida: %2. - A folder from an external storage has been added. Una carpeta de almacenamiento externo ha sido añadida. - Please go in the settings to select it if you wish to download it. Por favor vaya a opciones a seleccionarlo si desea descargar esto. - A folder has surpassed the set folder size limit of %1MB: %2. %3 Una carpeta ha sobrepasado el límite establecido de tamaño de %1MB: %2. %3 - Keep syncing Continuar sincronización - Stop syncing Detener sincronización - The folder %1 has surpassed the set folder size limit of %2MB. La carpeta %1 ha sobrepasado el límite establecido de tamaño de %2MB. - Would you like to stop syncing this folder? ¿Desea detener la sincronización de esta carpeta? - The folder %1 was created but was excluded from synchronization previously. Data inside it will not be synchronized. Se ha creado la carpeta %1 pero se excluyó de la sincronización con anterioridad. Los datos en su interior no se sincronizarán. - The file %1 was created but was excluded from synchronization previously. It will not be synchronized. Se ha creado el archivo %1 pero se excluyó de la sincronización con anterioridad. No se sincronizará. - Changes in synchronized folders could not be tracked reliably. This means that the synchronization client might not upload local changes immediately and will instead only scan for local changes and upload them occasionally (every two hours by default). @@ -2325,45 +1817,38 @@ Esto significa que el cliente de sincronización podría no subir inmediatamente %1 - Virtual file download failed with code "%1", status "%2" and error message "%3" La descarga del archivo virtual ha fallado con código "%1" , estado "%2" y mensaje de error "%3" - A large number of files in the server have been deleted. -Please confirm if you'd like to proceed with these deletions. +Please confirm if you'd like to proceed with these deletions. Alternatively, you can restore all deleted files by uploading from '%1' folder to the server. Han sido eliminados un gran número de archivos en el servidor. Por favor, confirme si quiere proceder con estas eliminaciones. Alternativamente, puede restaurar todos los archivos borrados subiéndolos desde la carpeta '%1' al servidor. - - A large number of files in your local '%1' folder have been deleted. -Please confirm if you'd like to proceed with these deletions. + A large number of files in your local '%1' folder have been deleted. +Please confirm if you'd like to proceed with these deletions. Alternatively, you can restore all deleted files by downloading them from the server. Han sido eliminados un gran número de archivos en su carpeta local '%1'. Por favor, confirma si quiere continuar con estas eliminaciones. Alternativamente, puede restaurar todos los archivos borrados descargándolos del servidor. - Remove all files? ¿Eliminar todos los archivos? - Proceed with Deletion Continuar con la eliminación - Restore Files to Server Restaurar los archivos al servidor - Restore Files from Server Restaurar los archivos desde el servidor @@ -2371,27 +1856,22 @@ Alternativamente, puede restaurar todos los archivos borrados descargándolos de OCC::FolderCreationDialog - Create new folder Crear nueva carpeta - Enter folder name Escriba el nombre de la carpeta - Folder already exists Ya existe la carpeta - Error Error - Could not create a folder! Check your write permissions. ¡No se pudo crear la carpeta! Comprueba los permisos de escritura. @@ -2399,136 +1879,108 @@ Alternativamente, puede restaurar todos los archivos borrados descargándolos de OCC::FolderMan - Could not reset folder state No se ha podido restablecer el estado de la carpeta - (backup) (copia de seguridad) - (backup %1) (copia de seguridad %1) - An old sync journal "%1" was found, but could not be removed. Please make sure that no application is currently using it. Se ha encontrado un registro de sincronización antiguo "%1", que no se ha podido eliminar. Por favor, asegúrese de que ninguna aplicación lo está utilizando en este momento. - Undefined state. Estado no definido. - Waiting to start syncing. Esperando para comenzar la sincronización. - Preparing for sync. Preparándose para sincronizar. - Syncing %1 of %2 (A few seconds left) Sincronizando %1 de %2 (quedan unos segundos) - Syncing %1 of %2 (%3 left) Sicronizando %1 de %2 (quedan %3) - Syncing %1 of %2 Sincronizando %1 de %2 - Syncing %1 (A few seconds left) Sincronizando %1 (Quedan pocos segundos) - Syncing %1 (%2 left) Sincronizando %1 (Quedan %2) - Syncing %1 Sincronizando %1 - Sync is running. Sincronización en funcionamiento. - Sync finished with unresolved conflicts. La sincronización finalizó pero con conflictos sin resolver. - Last sync was successful. La última sincronización se ha realizado con éxito. - Setup error. Error de configuración. - Sync request was cancelled. La solicitud de sincronización fue cancelada. - Please choose a different location. The selected folder isn't valid. Por favor, escoja una ubicación diferente. La carpeta seleccionada no es válida. - - Please choose a different location. %1 is already being used as a sync folder. Por favor, escoja una ubicación diferente. %1 ya se está utilizando como una carpeta de sincronización. - Please choose a different location. The path %1 doesn't exist. Por favor, escoja una ubicación diferente. La ruta %1 no existe. - Please choose a different location. The path %1 isn't a folder. Por favor, escoja una ubicación diferente. La ruta %1 no es una carpeta. - - Please choose a different location. You don't have enough permissions to write to %1. folder location Por favor, escoja una ubicación diferente. No tiene suficientes permisos para escribir a%1. - Please choose a different location. %1 is already contained in a folder used as a sync folder. Por favor, escoja una ubicación diferente. %1 ya se está dentro de una carpeta que se está utilizando como carpeta de sincronización. - Please choose a different location. %1 is already being used as a sync folder for %2. folder location, server url Por favor, escoja una ubicación diferente. %1 ya se está utilizando como una carpeta de sincronización para %2. - The folder %1 is linked to multiple accounts. This setup can cause data loss and it is no longer supported. To resolve this issue: please remove %1 from one of the accounts and create a new sync folder. @@ -2539,12 +1991,10 @@ Para resolver este problema: Por favor, quite %1 de alguna de las cuentas y cree Para usuarios avanzados: Este problema puede estar relacionado a múltiples archivos de base de datos de sincronización ubicados en una carpeta. Por favor, chequee en %1 la existencia de archivos .sync_*.db desactualizados o sin usar y elimínelos. - Sync is paused. La sincronización está en pausa. - %1 (Sync is paused) %1 (Sincronización en pausa) @@ -2552,12 +2002,10 @@ Para usuarios avanzados: Este problema puede estar relacionado a múltiples arch OCC::FolderStatusDelegate - Add Folder Sync Connection Añadir conexión para el directorio de sincronización - File Archivo @@ -2565,156 +2013,128 @@ Para usuarios avanzados: Este problema puede estar relacionado a múltiples arch OCC::FolderStatusModel - You need to be connected to add a folder Necesita estar conectado para añadir una carpeta - Click this button to add a folder to synchronize. Haga clic en este botón para añadir una carpeta a sincronizar - Could not decrypt! ¡No fue posible descifrar! - - %1 (%2) %1 (%2) - Error while loading the list of folders from the server. Error mientras se cargaba la lista de carpetas desde el servidor. - Virtual file support is enabled. El soporte para archivos virtuales está activado. - Signed out Cerrar sesión - Synchronizing virtual files in local folder Sincronizando archivos virtuales en carpeta local - Synchronizing files in local folder Sincronizando archivos en carpeta local - Checking for changes in remote "%1" Buscando cambios en carpeta remota "%1" - Checking for changes in local "%1" Buscando cambios en carpeta local "%1" - Syncing local and remote changes Sincronizando cambios locales y remotos - %1 %2 … - Example text: "Uploading foobar.png (1MB of 2MB) time left 2 minutes at a rate of 24Kb/s" Example text: "Syncing 'foo.txt', 'bar.txt'" + Example text: "Uploading foobar.png (1MB of 2MB) time left 2 minutes at a rate of 24Kb/s" Example text: "Syncing 'foo.txt', 'bar.txt'" %1 %2 … - Download %1/s Example text: "Download 24Kb/s" (%1 is replaced by 24Kb (translated)) Descargando %1/s - File %1 of %2 Archivo %1 de %2 - There are unresolved conflicts. Click for details. Hay conflictos sin resolver. Haz clic para más detalles. - - , , - Fetching folder list from server … Obteniendo la lista de carpetas del servidor ... - ↓ %1/s ↓ %1/s - Upload %1/s Example text: "Upload 24Kb/s" (%1 is replaced by 24Kb (translated)) Subiendo %1/s - ↑ %1/s ↑ %1/s - %1 %2 (%3 of %4) Example text: "Uploading foobar.png (2MB of 2MB)" %1 %2 (%3 de %4) - %1 %2 Example text: "Uploading foobar.png" %1 %2 - A few seconds left, %1 of %2, file %3 of %4 Example text: "5 minutes left, 12 MB of 345 MB, file 6 of 7" Quedan pocos segundos, %1 de %2, archivo %3 de %4 - %5 left, %1 of %2, file %3 of %4 %5 restantes, %1 de %2, archivo %3 de %4 - %1 of %2, file %3 of %4 Example text: "12 MB of 345 MB, file 6 of 7" %1 de %2, archivo %3 de %4 - Waiting for %n other folder(s) … - Esperando a otra %n carpeta ...Esperando a %n carpeta(s)…Esperando a %n carpeta(s)… + + Esperando a otra %n carpeta ... + Esperando a %n carpeta(s)… + - About to start syncing A punto de comenzar a sincronizar - Preparing to sync … Preparando la sincronización ... @@ -2722,7 +2142,6 @@ Para usuarios avanzados: Este problema puede estar relacionado a múltiples arch OCC::FolderWatcher - The watcher did not receive a test notification. El vigilante no recibió una notificación de prueba. @@ -2730,7 +2149,6 @@ Para usuarios avanzados: Este problema puede estar relacionado a múltiples arch OCC::FolderWatcherPrivate - This problem usually happens when the inotify watches are exhausted. Check the FAQ for details. Este problema sucede habitualmente cuando las "inotify watches" están agotadas. Comprueba el FAQ para más detalles. @@ -2738,12 +2156,10 @@ Para usuarios avanzados: Este problema puede estar relacionado a múltiples arch OCC::FolderWizard - Add Folder Sync Connection Añadir conexión para el directorio de sincronización - Add Sync Connection Añadir conexión de sincronización @@ -2751,17 +2167,14 @@ Para usuarios avanzados: Este problema puede estar relacionado a múltiples arch OCC::FolderWizardLocalPath - Click to select a local folder to sync. Haga clic para seleccionar una carpeta local que sincronizar. - Enter the path to the local folder. Introduzca la ubicación de la carpeta local. - Select the source folder Seleccione la carpeta de origen @@ -2769,74 +2182,53 @@ Para usuarios avanzados: Este problema puede estar relacionado a múltiples arch OCC::FolderWizardRemotePath - Create Remote Folder Crear carpeta remota - Enter the name of the new folder to be created below "%1": Introduce el nombre de la nueva carpeta que se creará debajo de "%1": - Folder was successfully created on %1. La carpeta ha sido creada con éxito en %1. - Authentication failed accessing %1 Fallo de autenticación al acceder a %1 - Failed to create the folder on %1. Please check manually. Fallo al crear la carpeta %1. Por favor, revíselo manualmente. - Failed to list a folder. Error: %1 Fallo al listar una carpeta. Error: %1 - Choose this to sync the entire account Elija esto para sincronizar la cuenta entera - - - Please choose a different location. %1 is already being synced to %2. Por favor, escoja una ubicación diferente. %1 ya se está sincronizando para %2. - - - You are already syncing the subfolder %1 at %2. - Ya está sincronizando la subcarpeta %1 en %2 - OCC::FolderWizardSelectiveSync - - Use virtual files instead of downloading content immediately %1 Usa archivos virtuales en vez de descargar el contenido inmediatamente %1 - - (experimental) (experimental) - Virtual files are not supported for Windows partition roots as local folder. Please choose a valid subfolder under drive letter. Los archivos virtuales no son compatibles con la carpeta raíz de la partición de Windows como carpeta local. Por favor, elija una subcarpeta válida bajo la letra de la unidad. - Virtual files are not supported at the selected location Los archivos virtuales no están soportados en la ubicación seleccionada @@ -2844,27 +2236,22 @@ Para usuarios avanzados: Este problema puede estar relacionado a múltiples arch OCC::GETFileJob - No E-Tag received from server, check Proxy/Gateway No se ha recibido ninguna E-Tag del servidor, revise el proxy/puerta de enlace - We received a different E-Tag for resuming. Retrying next time. Se ha recibido una E-Tag distinta para reanudar. Se volverá a intentar. - We received an unexpected download Content-Length. Hemos recibido una longitud inesperada de contenido de la descarga. - Server returned wrong content-range El servidor ha devuelto un content-range erróneo - Connection Timeout Tiempo de espera de conexión agotado @@ -2872,199 +2259,151 @@ Para usuarios avanzados: Este problema puede estar relacionado a múltiples arch OCC::GeneralSettings - General Settings Ajustes generales - Show Call Notifications Mostrar notificaciones de llamadas - For System Tray A la bandeja del sistema - Show Chat Notifications Mostrar las notificaciones de Chat - Show Server &Notifications Mostrar &Notificaciones del Servidor - Advanced Avanzado - MB Trailing part of "Ask confirmation before syncing folder larger than" MB - Ask for confirmation before synchronizing external storages Preguntar si se desea sincronizar carpetas de almacenamiento externo - &Launch on System Startup &Ejecutar al iniciar el sistema - Use &Monochrome Icons Usar iconos &monocromáticos - Ask for confirmation before synchronizing new folders larger than Pedir confirmación antes de sincronizar carpetas nuevas mayores a - Notify when synchronised folders grow larger than specified limit Notificar cuando las carpetas sincronizadas aumenten su tamaño más allá del límite especificado - Automatically disable synchronisation of folders that overcome limit Deshabilitar sincronización de manera automática para las carpetas que sobrepasen el límite - Move removed files to trash Mover archivos eliminados a la papelera - Show sync folders in &Explorer's navigation pane Mostrar carpetas sincronizadas en el panel de navegación del &Explorador - S&how crash reporter M&ostrar el informe de fallos - Server poll interval Intervalo de sondeo del servidor - seconds (if <a href="https://github.com/nextcloud/notify_push">Client Push</a> is unavailable) segundos (si <a href="https://github.com/nextcloud/notify_push">Client Push</a>no está disponible) - Edit &Ignored Files Editar archivos &ignorados - - Create Debug Archive Crear archivo de depuración - Info Información - Desktop client x.x.x Cliente de escritorio x.x.x - Update channel Canal de actualización - &Automatically check for updates Comprobar &actualizaciones automáticamente - Check Now Comprobar ahora - Usage Documentation Documentación de uso - Legal Notice Aviso Legal - - Restore &Default - Restaurar &Predeterminados - - - &Restart && Update &Reiniciar && Actualizar - Server notifications that require attention. Notificaciones del servidor que requieren atención. - Show chat notification dialogs. Mostrar diálogos de notificación de chats. - Show call notification dialogs. Mostrar diálogos de notificación de llamadas. - You cannot disable autostart because system-wide autostart is enabled. No puedes desactivar el inicio automático porque el inicio automático de todo el sistema está activado. - - Restore to &%1 - Restaurar a &%1 - - - stable stable - beta beta - daily diariamente - enterprise empresarial - - beta: contains versions with new features that may not be tested thoroughly - daily: contains versions created daily only for testing and development @@ -3076,7 +2415,6 @@ Downgrading versions is not possible immediately: changing from beta to stable m Cambiar a una versión anterior no es inmediatamente posible: cambiar de beta a estable significa esperar a la siguiente version estable. - - enterprise: contains stable versions for customers. Downgrading versions is not possible immediately: changing from stable to enterprise means waiting for the new enterprise version. @@ -3086,12 +2424,10 @@ Downgrading versions is not possible immediately: changing from stable to enterp Cambiar a una versión anterior no es inmediatamente posible: cambiar de estable a empresarial significa esperar a la nueva versión empresarial. - Changing update channel? ¿Cambiar canal de actualización? - The channel determines which upgrades will be offered to install: - stable: contains tested versions considered reliable @@ -3101,55 +2437,41 @@ Cambiar a una versión anterior no es inmediatamente posible: cambiar de estable - Change update channel Cambiar canal de actualización - Cancel Cancelar - Zip Archives Archivos Zip - Debug Archive Created Archivo de depuración creado - Debug archive is created at %1 El archivo de depuración se ha creado en %1 - - - Redact information deemed sensitive before sharing! Debug archive created at %1 - ¡Redacte la información considerada sensible antes de compartir!, se creo el archivo de depuración en %1 - OCC::GetOrCreatePublicLinkShare - Password for share required Se requiere contraseña para compartir - Please enter a password for your link share: Por favor, introduce una contraseña para tu enlace compartido: - Sharing error Error al compartir - Could not retrieve or create the public link share. Error: %1 @@ -3161,22 +2483,18 @@ Cambiar a una versión anterior no es inmediatamente posible: cambiar de estable OCC::HttpCredentialsGui - Please enter %1 password:<br><br>Username: %2<br>Account: %3<br> Por favor, introduzca la contraseña de %1:<br><br>Usuario: %2<br>Cuenta: %3<br> - Reading from keychain failed with error: "%1" La lectura del keychain falló con el error "%1" - Enter Password Introduzca la contraseña - <a href="%1">Click here</a> to request an app password from the web interface. <a href="%1">Haga clic aquí</a> para solicitar una contraseña de aplicación desde la interfaz web. @@ -3184,27 +2502,22 @@ Cambiar a una versión anterior no es inmediatamente posible: cambiar de estable OCC::IgnoreListEditor - Ignored Files Editor Editor de archivos ignorados - Global Ignore Settings Ajustes de Ignorar de modo global - Sync hidden files Sincronizar archivos ocultos - Files Ignored by Patterns Archivos ignorados por patrones - This entry is provided by the system at "%1" and cannot be modified in this view. Esta entrada la proporciona el sistema en "%1" y no se puede modificar en esta vista. @@ -3212,32 +2525,26 @@ Cambiar a una versión anterior no es inmediatamente posible: cambiar de estable OCC::IgnoreListTableWidget - Pattern Patrón - Allow Deletion Permitir borrado - Add Añadir - Remove Eliminar - Remove all Eliminar todos - Files or folders matching a pattern will not be synchronized. Items where deletion is allowed will be deleted if they prevent a directory from being removed. This is useful for meta data. @@ -3246,22 +2553,18 @@ Items where deletion is allowed will be deleted if they prevent a directory from Los elementos que se permite su borrado se eliminarán si impiden que un directorio se elimine. Esto es útil para los metadatos. - Could not open file No se ha podido abrir el archivo - Cannot write changes to "%1". No se pudo escribir los cambios a "%1". - Add Ignore Pattern Añadir patrón de ignorados - Add a new ignore pattern: Añadir un nuevo patrón de archivos ignorados: @@ -3269,159 +2572,117 @@ Los elementos que se permite su borrado se eliminarán si impiden que un directo OCC::InvalidFilenameDialog - Invalid filename Nombre de archivo no válido - The file could not be synced because it contains characters which are not allowed on this system. El archivo no puede ser sincronizado porque contiene caracteres que no se permiten en el sistema. - Error Error - Please enter a new name for the file: Por favor, escribe un nuevo nombre para el archivo: - New filename Nuevo nombre de archivo - Rename file Renombrar archivo - The file "%1" could not be synced because the name contains characters which are not allowed on this system. El archivo "%1" no pudo ser sincronizado porque el nombre contiene caracteres no permitidos en este sistema. - The following characters are not allowed on the system: \ / : ? * " < > | leading/trailing spaces Los siguientes caracteres no se permiten en el sistema: \ / : ? * " < > | espacios al inicio/final - The file "%1" could not be synced because the name contains characters which are not allowed on the server. No se ha podido sincronizar el archivo "%1" porque su nombre contiene caracteres que no están permitidos en el servidor. - The following characters are not allowed: %1 Los siguientes caracteres no están permitidos: %1 - The following basenames are not allowed: %1 Los siguientes nombres base no están permitidos: %1 - The following filenames are not allowed: %1 Los siguientes nombres de archivo no están permitidos: %1 - The following file extensions are not allowed: %1 Las siguients extensiones de archivo no están permitidas: %1 - Checking rename permissions … Comprobando los permisos de para renombrado … - You don't have the permission to rename this file. Please ask the author of the file to rename it. No tienes permisos para renombrar este archivo. Por favor, dile al autor del archivo que lo renombre. - Failed to fetch permissions with error %1 Fallo en la obtención de permisos con error %1 - Filename contains leading and trailing spaces. El nombre del archivo contiene espacios iniciales y finales. - Filename contains leading spaces. El nombre del archivo contiene espacios iniciales. - Filename contains trailing spaces. El nombre del archivo contiene espacios finales. - Use invalid name Utilizar nombre inválido - Filename contains illegal characters: %1 El nombre del archivo contiene caracteres ilegales: %1 - Could not rename file. Please make sure you are connected to the server. No se ha podido renombrar el archivo. Por favor, asegúrese de que está conectado al servidor. - Cannot rename file because a file with the same name does already exist on the server. Please pick another name. No se puede renombrar el archivo porque hay un archivo con el mismo nombre en el servidor. Por favor, elija otro nombre. - Could not rename local file. %1 No se ha podido renombrar el archivo local. %1 - - OCC::LegacyAccountSelectionDialog - - - Legacy import - - - - - Select the accounts to import from the legacy configuration: - - - OCC::LegalNotice - - Legal notice Aviso legal - Close Cerrar - <p>Copyright 2017-2025 Nextcloud GmbH<br />Copyright 2012-2023 ownCloud GmbH</p> <p>Copyright 2017-2025 Nextcloud GmbH<br />Copyright 2012-2023 ownCloud GmbH</p> - <p>Licensed under the GNU General Public License (GPL) Version 2.0 or any later version.</p> <p>Bajo la Licencia Pública General de GNU (GPL) versión 2.0 o posterior.</p> @@ -3429,12 +2690,10 @@ Los elementos que se permite su borrado se eliminarán si impiden que un directo OCC::LogBrowser - Log Output Salida del registro - The client can write debug logs to a temporary folder. These logs are very helpful for diagnosing problems. Since log files can get large, the client will start a new one for each sync run and compress older ones. It will also delete log files after a couple of hours to avoid consuming too much disk space. If enabled, logs will be written to %1 @@ -3443,19 +2702,16 @@ Ya que los archivos de registro pueden acabar siendo grandes, el cliente creará Si está activado, los registros serán escritos en %1 - Enable logging to temporary folder Activar la escritura de registros a una carpeta temporal - This setting persists across client restarts. Note that using any logging command line options will override this setting. Este ajuste persiste tras el reinicio del cliente. Nótese que usar cualquier opción de toma de registros a través de línea de comandos anulará este ajuste. - Open folder Abrir carpeta @@ -3463,14 +2719,10 @@ Nótese que usar cualquier opción de toma de registros a través de línea de c OCC::Logger - - Error Error - - <nobr>File "%1"<br/>cannot be opened for writing.<br/><br/>The log output <b>cannot</b> be saved!</nobr> <nobr>El archivo "%1"<br/>no se puede abrir para escritura.<br/><br/>¡El archivo de registro <b>no se puede</b> guardar!</nobr> @@ -3478,32 +2730,26 @@ Nótese que usar cualquier opción de toma de registros a través de línea de c OCC::Mac::FileProviderEditLocallyJob - Could not start editing locally. No se ha podido empezar a editar localmente. - An error occurred during setup. Ha ocurrido un error durante la configuración. - Could not find a file for local editing. Make sure its path is valid and it is synced locally. No fue posible encontrar un archivo para edición local. Asegúrese de que su ruta es válida y que este se encuentra sincronizado localmente. - Could not get file ID. No se ha podido obtener la ID del archivo. - Could not get file identifier. No se pudo obtener el identificador del archivo. - The file identifier is empty. El identificador del archivo está vacío. @@ -3511,47 +2757,38 @@ Nótese que usar cualquier opción de toma de registros a través de línea de c OCC::NSISUpdater - New Version Available Nueva versión disponible - <p>A new version of the %1 Client is available.</p><p><b>%2</b> is available for download. The installed version is %3.</p> <p>Una nueva versión del programa cliente de %1 está disponible.</p><p><b>%2</b> está disponible para descargar. La versión instalada es la %3.</p> - Update Failed La actualización falló - <p>A new version of the %1 Client is available but the updating process failed.</p><p><b>%2</b> has been downloaded. The installed version is %3. If you confirm restart and update, your computer may reboot to complete the installation.</p> <p>Una nueva versión del Cliente %1 está disponible pero el proceso de actualización ha fallado.</p><p><b>%2</b> se ha descargado. La versión instalada es %3. Si confirmas el reinicio y la actualización, es posible que su ordenador se reinicie para completar la instalación. - Ask again later Preguntar de nuevo más tarde - Restart and update Reiniciar y actualizar - Update manually Actualizar manualmente - Skip this time Omitir esta vez - Get update Actualizar @@ -3559,109 +2796,82 @@ Nótese que usar cualquier opción de toma de registros a través de línea de c OCC::NetworkSettings - Proxy Settings Configuración del proxy - Use system proxy Usar proxy del sistema - Host Servidor - Proxy server requires authentication El servidor proxy requiere autenticación - Download Bandwidth Velocidad de descarga - - Limit to Limitar a - - KBytes/s KBytes/s - Note: proxy settings have no effects for accounts on localhost Nota: los ajustes de proxy no tienen efecto para cuentas en el sistema local. - Manually specify proxy Especificar proxy manualmente - No proxy Sin proxy - - - Use global settings Usar la configuración global - - No limit Ilimitado - - Limit to 3/4 of estimated bandwidth Limitar a 3/4 de la velocidad estimada - Upload Bandwidth Velocidad de subida - - Limit automatically Limitar automáticamente - Hostname of proxy server Nombre del host para servidor proxy - Username for proxy server Nombre de usuario para el servidor proxy - Password for proxy server Contraseña para el servidor proxy - HTTP(S) proxy Proxy HTTP(S) - SOCKS5 proxy Proxy SOCKS5 @@ -3669,77 +2879,54 @@ Nótese que usar cualquier opción de toma de registros a través de línea de c OCC::OCUpdater - Could not check for new updates. No se puede comprobar si hay actualizaciones. - Checking update server … Consultando al servidor de actualizaciones ... - New %1 update ready La nueva %1 actualización está lista - A new update for %1 is about to be installed. The updater may ask for additional privileges during the process. Your computer may reboot to complete the installation. Está a punto de ser instalada una nueva actualización para %1 . Es posible que el actualizador solicite privilegios adicionales durante el proceso. Es posible que su ordenador se deba reiniciar para completar la instalación. - Downloading %1 … Descargando %1 … - %1 available. Restart application to start the update. %1 disponible. Reinicia la aplicación para empezar la actualización. - Could not download update. Please open <a href='%1'>%1</a> to download the update manually. No se puede descargar la actualización. Por favor, abra <a href='%1'>%1</a> para descargar la actualización manualmente. - Could not download update. Please open %1 to download the update manually. No se pudo descargar la actualización. Por favor, abra %1 para descargarla manualmente. - New %1 is available. Please open <a href='%2'>%2</a> to download the update. La nueva %1 está disponible. Por favor, abra<a href='%2'>%2</a> para descargar la actualización. - New %1 is available. Please open %2 to download the update. La nueva %1 está disponible. Por favor, abra %2 para descargar la actualización. - Update status is unknown: Did not check for new updates. Estado de actualización desconocido: no se buscaron nuevas actualizaciones. - - You are using the %1 update channel. Your installation is the latest version. - Está utilizando el canal de actualización %1. Su instalación está en la versión mas reciente. - - - - No updates available. Your installation is the latest version. - No hay actualizaciones disponibles. Su instalación está en la versión más reciente. - - - No updates available. Your installation is at the latest version. No hay actualizaciones disponibles. Tiene la última versión. - Update Check Comprobar si hay actualizaciones @@ -3747,72 +2934,55 @@ Nótese que usar cualquier opción de toma de registros a través de línea de c OCC::OwncloudAdvancedSetupPage - Connect Conectar - - (experimental) (experimental) - - Use &virtual files instead of downloading content immediately %1 Usa &archivos virtuales en vez de descargar el contenido inmediatamente %1 - Virtual files are not supported for Windows partition roots as local folder. Please choose a valid subfolder under drive letter. Los archivos virtuales no son compatibles con la carpeta raíz de la partición de Windows como carpeta local. Por favor, elija una subcarpeta válida bajo la letra de la unidad. - %1 folder "%2" is synced to local folder "%3" %1 carpeta "%2" está sincronizada con la carpeta local "%3" - Sync the folder "%1" Sincronizar la carpeta "%1" - Warning: The local folder is not empty. Pick a resolution! Advertencia: La carpeta local no está vacía. ¡Elija una solución! - - %1 free space %1 gets replaced with the size and a matching unit. Example: 3 MB or 5 GB %1 espacio libre - Virtual files are not supported at the selected location Los archivos virtuales no están soportados en la ubicación seleccionada - Local Sync Folder Carpeta local de sincronización - - (%1) (%1) - There isn't enough free space in the local folder! ¡No hay suficiente espacio libre en la carpeta local! - In Finder's "Locations" sidebar section En la sección "Ubicaciones" de la barra lateral del Finder @@ -3820,32 +2990,26 @@ Nótese que usar cualquier opción de toma de registros a través de línea de c OCC::OwncloudConnectionMethodDialog - Connection failed La conexión ha fallado - <html><head/><body><p>Failed to connect to the secure server address specified. How do you wish to proceed?</p></body></html> <html><head/><body><p>Fallo al conectar con la dirección del servidor seguro especificado. ¿Cómo desea proceder?</p></body></html> - Select a different URL Seleccionar una URL diferente - Retry unencrypted over HTTP (insecure) Reintentar sin cifrado sobre HTTP (inseguro) - Configure client-side TLS certificate Configurar certificado TLS del cliente - <html><head/><body><p>Failed to connect to the secure server address <em>%1</em>. How do you wish to proceed?</p></body></html> <html><head/><body><p>Fallo al conectar con la dirección del servidor seguro <em>%1</em>. ¿Cómo desea proceder?</p></body></html> @@ -3853,17 +3017,14 @@ Nótese que usar cualquier opción de toma de registros a través de línea de c OCC::OwncloudHttpCredsPage - &Email &Correo electrónico - Connect to %1 Conectarse a %1 - Enter user credentials Introduzca las credenciales de usuario @@ -3871,8 +3032,6 @@ Nótese que usar cualquier opción de toma de registros a través de línea de c OCC::OwncloudPropagator - - Impossible to get modification time for file in conflict %1 Es imposible leer la hora de modificación del archivo en conflicto %1 @@ -3880,23 +3039,19 @@ Nótese que usar cualquier opción de toma de registros a través de línea de c OCC::OwncloudSetupPage - The link to your %1 web interface when you open it in the browser. %1 will be replaced with the application name El link a su interfaz web %1 cuando la abra en el navegador. - &Next > &Siguiente > - Server address does not seem to be valid La dirección del servidor no es válida - Could not load certificate. Maybe wrong password? No se ha podido guardar el certificado. ¿Quizás la contraseña sea incorrecta? @@ -3904,159 +3059,126 @@ Nótese que usar cualquier opción de toma de registros a través de línea de c OCC::OwncloudSetupWizard - <font color="green">Successfully connected to %1: %2 version %3 (%4)</font><br/><br/> <font color="green">Conectado con éxito a %1: versión %2 %3 (%4)</font><br/><br/> - Failed to connect to %1 at %2:<br/>%3 Fallo al conectar %1 a %2:<br/>%3 - Timeout while trying to connect to %1 at %2. Tiempo de espera agotado mientras se intentaba conectar a %1 en %2 - Access forbidden by server. To verify that you have proper access, <a href="%1">click here</a> to access the service with your browser. Acceso denegado por el servidor. Para verificar que tiene acceso, <a href="%1">haga clic aquí</a> para acceder al servicio desde el navegador. - Invalid URL URL no válida. - Trying to connect to %1 at %2 … Intentando conectar a %1 desde %2 ... - The authenticated request to the server was redirected to "%1". The URL is bad, the server is misconfigured. La petición autenticada al servidor ha sido redirigida a "%1". La URL es errónea, el servidor está mal configurado. - There was an invalid response to an authenticated WebDAV request Ha habido una respuesta no válida a una solicitud autenticada de WebDAV - Local sync folder %1 already exists, setting it up for sync.<br/><br/> La carpeta de sincronización local %1 ya existe, configurándola para la sincronización.<br/><br/> - Creating local sync folder %1 … Creando carpeta de sincronización local %1 ... - OK OK - failed. ha fallado. - Could not create local folder %1 No se ha podido crear la carpeta local %1 - No remote folder specified! ¡No se ha especificado ninguna carpeta remota! - Error: %1 Error: %1 - creating folder on Nextcloud: %1 Creando carpeta en Nextcloud: %1 - Remote folder %1 created successfully. Carpeta remota %1 creado correctamente. - The remote folder %1 already exists. Connecting it for syncing. La carpeta remota %1 ya existe. Conectándola para sincronizacion. - - The folder creation resulted in HTTP error code %1 La creación de la carpeta ha producido el código de error HTTP %1 - The remote folder creation failed because the provided credentials are wrong!<br/>Please go back and check your credentials.</p> ¡La creación de la carpeta remota ha fallado debido a que las credenciales proporcionadas son incorrectas!<br/>Por favor, vuelva atrás y compruebe sus credenciales</p> - <p><font color="red">Remote folder creation failed probably because the provided credentials are wrong.</font><br/>Please go back and check your credentials.</p> <p><font color="red">La creación de la carpeta remota ha fallado, probablemente porque las credenciales proporcionadas son incorrectas.</font><br/>Por favor, vuelva atrás y compruebe sus credenciales.</p> - - Remote folder %1 creation failed with error <tt>%2</tt>. Creación %1 de carpeta remota ha fallado con el error <tt>%2</tt>. - A sync connection from %1 to remote directory %2 was set up. Se ha configarado una conexión de sincronización desde %1 al directorio remoto %2 - Successfully connected to %1! ¡Conectado con éxito a %1! - Connection to %1 could not be established. Please check again. No se ha podido establecer la conexión con %1. Por favor, compruébelo de nuevo. - Folder rename failed Error al renombrar la carpeta - Cannot remove and back up the folder because the folder or a file in it is open in another program. Please close the folder or file and hit retry or cancel the setup. No se pudo eliminar y restaurar la carpeta porque ella o un archivo dentro de ella está abierto por otro programa. Por favor, cierre la carpeta o el archivo y pulsa en reintentar o cancelar la instalación. - <font color="green"><b>File Provider-based account %1 successfully created!</b></font> <font color="green"><b>¡La cuenta basada en proveedor de archivos %1 fue creada exitosamente! </b></font> - Virtual files enabled Archivos virtuales habilitados - Your account is now syncing with virtual files support. This means that all your files are online-only by default, and will be downloaded on-demand when you open them. You may find your files under the <b>Locations</b> section of the Finder sidebar. Su cuenta se encuentra ahora sincronizando con soporte a archivos virtuales. Esto significa que, por defecto, todos sus archivos están en modo solo en línea, y se descargarán bajo demanda cuando los abra. Puede conseguir sus archivos bajo la sección <b>Ubicaciones</b> de la barra lateral del Finder. - <font color="green"><b>Local sync folder %1 successfully created!</b></font> <font color="green"><b>Carpeta de sincronización local %1 creada con éxito</b></font> @@ -4064,27 +3186,22 @@ Nótese que usar cualquier opción de toma de registros a través de línea de c OCC::OwncloudWizard - Add %1 account Añadir %1 cuenta - Skip folders configuration Omitir la configuración de carpetas - Cancel Cancelar - Enable experimental feature? ¿Activar característica experimental? - When the "virtual files" mode is enabled no files will be downloaded initially. Instead, a tiny "%1" file will be created for each file that exists on the server. The contents can be downloaded by running these files or by using their context menu. The virtual files mode is mutually exclusive with selective sync. Currently unselected folders will be translated to online-only folders and your selective sync settings will be reset. @@ -4101,12 +3218,10 @@ Cambiar a este modo interrumpirá cualquier sincronización en proceso. Esta es un modo nuevo y experimental. Si decides usarlo, por favor, informa de cualquier tipo de problema que pueda surgir. - Enable experimental placeholder mode Activar modo experimental de marcador de posición - Stay safe Mantente a salvo @@ -4114,12 +3229,10 @@ Esta es un modo nuevo y experimental. Si decides usarlo, por favor, informa de c OCC::PasswordInputDialog - Password for share required Se requiere la contraseña para el recurso compartido - Please enter a password for your share: Por favor, introduce una contraseña para tu recurso compartido: @@ -4127,7 +3240,6 @@ Esta es un modo nuevo y experimental. Si decides usarlo, por favor, informa de c OCC::PollJob - Invalid JSON reply from the poll URL Respuesta JSON invalida de la poll URL @@ -4135,252 +3247,165 @@ Esta es un modo nuevo y experimental. Si decides usarlo, por favor, informa de c OCC::ProcessDirectoryJob - Symbolic links are not supported in syncing. Los enlaces simbólicos no están soportados en la sincronización. - File is listed on the ignore list. El archivo está en la lista de ignorados. - File names ending with a period are not supported on this file system. Los nombres de archivo que terminan con un punto no son compatibles con este sistema de archivos. - - Folder names containing the character "%1" are not supported on this file system. - %1: the invalid character - Los nombres de carpeta que contienen el carácter "%1" no están soportados en este sistema de archivos. - - - - File names containing the character "%1" are not supported on this file system. - %1: the invalid character - Los nombres de archivo que contienen el carácter "%1" no están soportados en este sistema de archivos. - - - - Folder name contains at least one invalid character - El nombre de la carpeta contiene al menos un carácter inválido - - - - File name contains at least one invalid character - El nombre del archivo contiene al menos un carácter no válido - - - - Folder name is a reserved name on this file system. - El nombre de carpeta es un nombre reservado en este sistema de archivos. - - - - File name is a reserved name on this file system. - El nombre de archivo es un nombre reservado en este sistema de archivos. - - - Filename contains trailing spaces. El nombre del archivo contiene espacios finales. - - - - Cannot be renamed or uploaded. No puede ser renombrado o subido. - Folder name of folder entity to use when warning about invalid name Carpeta - File name of folder entity to use when warning about invalid name Archivo - %1 name containing the character "%2" is not supported on this file system. folder or file impossible to sync due to an invalid name, placeholders will be file or folder and the invalid character El nombre %1 que contiene el carácter "%2" no está soportado en este sistema de archivos. - Filename contains leading spaces. El nombre del archivo contiene espacios iniciales. - %1 name contains at least one invalid character El nombre %1 contiene al menos un carácter inválido - %1 name is a reserved name on this file system. El nombre %1 es un nombre reservado en este sistema de archivos. - Filename contains leading and trailing spaces. El nombre del archivo contiene espacios iniciales y finales. - Filename is too long. El nombre del archivo es demasiado largo. - File/Folder is ignored because it's hidden. El archivo o carpeta es ignorado porque está oculto. - Stat failed. Stat ha fallado. - Conflict: Server version downloaded, local copy renamed and not uploaded. Conflicto: Versión del servidor descargada, la copia local ha sido renombrada pero no se ha podido subir. - Case Clash Conflict: Server file downloaded and renamed to avoid clash. Conflicto de capitalización: Se descargó el archivo del servidor y se renombró para evitar el conflicto. - The filename cannot be encoded on your file system. El nombre de archivo no se puede codificar en tu sistema de archivos. - The filename is blacklisted on the server. El nombre del archivo está prohibido en el servidor. - Reason: the entire filename is forbidden. Motivo: el nombre de archivo completo no está permitido. - Reason: the filename has a forbidden base name (filename start). Motivo: el nombre de archivo tiene un nombre base (inicio del nombre del archivo) no permitido. - Reason: the file has a forbidden extension (.%1). Motivo: el archivo tiene una extensión no permitida (.%1). - Reason: the filename contains a forbidden character (%1). Motivo: el nombre del archivo contiene un carácter no permitido (%1). - File has extension reserved for virtual files. El archivo tiene una extensión reservada para archivos virtuales. - size tamaño - permission permisos - file id identificador de archivo - Server reported no %1 El servidor informó de no %1 - Cannot sync due to invalid modification time No se puede sincronizar debido a una hora de modificación no válida - - Upload of %1 exceeds %2 of space left in personal files. - La carga de %1 excede %2 del espacio disponible en los archivos personales. - - - - Upload of %1 exceeds %2 of space left in folder %3. - La carga de %1 excede %2 del espacio disponible en la carpeta %3. - - - Could not upload file, because it is open in "%1". No es posible subir el archivo, porque está abierto en "%1". - Error while deleting file record %1 from the database Error mientras se borraba el registro de archivo %1 de la base de datos - - Moved to invalid target, restoring Movido a un lugar no válido, restaurando - Cannot modify encrypted item because the selected certificate is not valid. No se puede modificar el item cifrado ya que el certificado seleccionado no es válido. - Ignored because of the "choose what to sync" blacklist Ignorado porque se encuentra en la lista negra de «elija qué va a sincronizar» - - Not allowed because you don't have permission to add subfolders to that folder No permitido porque no tienes permiso para añadir subcarpetas a esa carpeta. - Not allowed because you don't have permission to add files in that folder No permitido porque no tienes permiso para añadir archivos a esa carpeta. - Not allowed to upload this file because it is read-only on the server, restoring No está permitido subir este archivo porque es de solo lectura en el servidor, restaurando. - Not allowed to remove, restoring No está permitido borrar, restaurando - Error while reading the database Error mientras se leía la base de datos - Server replied with an error while reading directory "%1" : %2 El servidor contestó con un error al leer el directorio "%1" : %2 @@ -4388,38 +3413,26 @@ Esta es un modo nuevo y experimental. Si decides usarlo, por favor, informa de c OCC::PropagateDirectory - Could not delete file %1 from local DB No se pudo eliminar el archivo %1 de la DB local - Error updating metadata due to invalid modification time Error al actualizar los metadatos debido a una hora de modificación no válida - - - - - - The folder %1 cannot be made read-only: %2 La carpeta %1 no se puede hacer de sólo lectura: %2 - - unknown exception excepción inválida - Error updating metadata: %1 Error al actualizar los metadatos: %1 - File is currently in use El archivo se encuentra en uso @@ -4427,75 +3440,58 @@ Esta es un modo nuevo y experimental. Si decides usarlo, por favor, informa de c OCC::PropagateDownloadFile - Could not get file %1 from local DB No se pudo obtener el archivo %1 de la DB local - File %1 cannot be downloaded because encryption information is missing. El archivo %1 no puede ser descargado porque falta la información de cifrado, - - Could not delete file record %1 from local DB No fue posible borrar el registro del archivo %1 de la base de datos local - File %1 can not be downloaded because of a local file name clash! ¡El archivo %1 no se puede descargar a causa de un conflicto con el nombre de un archivo local! - The download would reduce free local disk space below the limit La descarga reducirá el espacio libre local por debajo del límite. - Free space on disk is less than %1 El espacio libre en el disco es inferior a %1 - File was deleted from server Se ha eliminado el archivo del servidor - The file could not be downloaded completely. No se ha podido descargar el archivo completamente. - The downloaded file is empty, but the server said it should have been %1. El archivo descargado está vacío, aunque el servidor dijo que debía ocupar %1. - - File %1 has invalid modified time reported by server. Do not save it. El servidor informa que el archivo %1 tiene una hora de modificación no válida. No lo guardes. - File %1 downloaded but it resulted in a local file name clash! ¡El archivo %1 se descargó pero resultó en un conflicto con el nombre de un archivo local! - Error updating metadata: %1 Error al actualizar los metadatos: %1 - The file %1 is currently in use El archivo %1 se encuentra en uso - - File has changed since discovery El archivo ha cambiado desde que fue descubierto @@ -4503,12 +3499,10 @@ Esta es un modo nuevo y experimental. Si decides usarlo, por favor, informa de c OCC::PropagateItemJob - ; Restoration Failed: %1 ; Fallo al restaurar: %1 - A file or folder was removed from a read only share, but restoring failed: %1 Un archivo o directorio ha sido eliminado de una carpeta compartida de solo lectura pero la recuperación ha fallado: %1 @@ -4516,39 +3510,30 @@ Esta es un modo nuevo y experimental. Si decides usarlo, por favor, informa de c OCC::PropagateLocalMkdir - could not delete file %1, error: %2 no se ha podido borrar el archivo %1, error: %2 - Folder %1 cannot be created because of a local file or folder name clash! ¡La carpeta %1 no se pudo crear a causa de un conflicto con el nombre de un archivo o carpeta local! - Could not create folder %1 No se pudo crear la carpeta %1 - - - The folder %1 cannot be made read-only: %2 La carpeta %1 no se puede hacer de sólo lectura: %2 - unknown exception excepción inválida - Error updating metadata: %1 Error al actualizar los metadatos: %1 - The file %1 is currently in use El archivo %1 se encuentra en uso @@ -4556,19 +3541,14 @@ Esta es un modo nuevo y experimental. Si decides usarlo, por favor, informa de c OCC::PropagateLocalRemove - Could not remove %1 because of a local file name clash No se ha podido eliminar %1 por causa de un conflicto con el nombre de un archivo local - - - Temporary error when removing local item removed from server. Error temporal al quitar ítem local que fue eliminado del servidor. - Could not delete file record %1 from local DB No fue posible borrar el registro del archivo %1 de la base de datos local @@ -4576,49 +3556,38 @@ Esta es un modo nuevo y experimental. Si decides usarlo, por favor, informa de c OCC::PropagateLocalRename - Folder %1 cannot be renamed because of a local file or folder name clash! ¡La carpeta %1 no puede ser renombrada ya que un archivo o carpeta local causa un conflicto de nombre! - File %1 downloaded but it resulted in a local file name clash! ¡El archivo %1 se descargó pero resultó en un conflicto con el nombre de un archivo local! - - Could not get file %1 from local DB No se pudo obtener el archivo %1 de la DB local - - Error setting pin state Error al configurar el estado fijado - Error updating metadata: %1 Error al actualizar los metadatos: %1 - The file %1 is currently in use El archivo %1 se encuentra en uso - Failed to propagate directory rename in hierarchy Fallo al propagar el renombrado de carpeta en la jerarquía - Failed to rename file Fallo al renombrar el archivo - Could not delete file record %1 from local DB No fue posible borrar el registro del archivo %1 de la base de datos local @@ -4626,12 +3595,10 @@ Esta es un modo nuevo y experimental. Si decides usarlo, por favor, informa de c OCC::PropagateRemoteDelete - Wrong HTTP code returned by server. Expected 204, but received "%1 %2". El código HTTP devuelto por el servidor es erróneo. Se esperaba 204, pero se recibió "%1 %2". - Could not delete file record %1 from local DB No fue posible borrar el registro del archivo %1 de la base de datos local @@ -4639,7 +3606,6 @@ Esta es un modo nuevo y experimental. Si decides usarlo, por favor, informa de c OCC::PropagateRemoteDeleteEncryptedRootFolder - Wrong HTTP code returned by server. Expected 204, but received "%1 %2". El código HTTP devuelto por el servidor es erróneo. Se esperaba 204, pero se recibió "%1 %2". @@ -4647,22 +3613,18 @@ Esta es un modo nuevo y experimental. Si decides usarlo, por favor, informa de c OCC::PropagateRemoteMkdir - Wrong HTTP code returned by server. Expected 201, but received "%1 %2". El código HTTP devuelto por el servidor es erróneo. Se esperaba 201, pero se recibió "%1 %2". - Failed to encrypt a folder %1 Fallo al cifrar una carpeta %1 - Error writing metadata to the database: %1 Error al escribir los metadatos en la base de datos: %1 - The file %1 is currently in use El archivo %1 se encuentra en uso @@ -4670,44 +3632,34 @@ Esta es un modo nuevo y experimental. Si decides usarlo, por favor, informa de c OCC::PropagateRemoteMove - Could not rename %1 to %2, error: %3 No se puede renombrar %1 a %2, error: %3 - - Error updating metadata: %1 Error al actualizar los metadatos: %1 - - The file %1 is currently in use El archivo %1 se encuentra en uso - Wrong HTTP code returned by server. Expected 201, but received "%1 %2". El código HTTP devuelto por el servidor es erróneo. Esperado 201, pero recibido "%1 %2". - Could not get file %1 from local DB No se pudo obtener el archivo %1 de la DB local - Could not delete file record %1 from local DB No fue posible borrar el registro del archivo %1 de la base de datos local - Error setting pin state Error al configurar el estado fijado - Error writing metadata to the database Error al escribir los metadatos en la base de datos @@ -4715,60 +3667,46 @@ Esta es un modo nuevo y experimental. Si decides usarlo, por favor, informa de c OCC::PropagateUploadFileCommon - File %1 cannot be uploaded because another file with the same name, differing only in case, exists El archivo %1 no se puede subir porque ya existe otro con el mismo nombre. Puede que sólo haya diferencias de mayúsculas/minúsculas - - - File %1 has invalid modification time. Do not upload to the server. El archivo %1 tiene una hora de modificación no válida. No subir al servidor. - Local file changed during syncing. It will be resumed. Un archivo local ha cambiado durante la sincronización. Se reanudará. - Local file changed during sync. Un archivo local ha sido modificado durante la sincronización. - Failed to unlock encrypted folder. Fallo al desbloquear la carpeta cifrada. - Unable to upload an item with invalid characters No se puede subir un elemento con caracteres no válidos - Error updating metadata: %1 Error al actualizar los metadatos: %1 - The file %1 is currently in use El archivo %1 se encuentra en uso - - Upload of %1 exceeds the quota for the folder La subida %1 excede el límite de tamaño de la carpeta - Failed to upload encrypted file. Fallo al subir el archivo cifrado. - File Removed (start upload) %1 Archivo eliminado (comenzar subida) %1 @@ -4776,32 +3714,26 @@ Esta es un modo nuevo y experimental. Si decides usarlo, por favor, informa de c OCC::PropagateUploadFileNG - The local file was removed during sync. El archivo local ha sido eliminado durante la sincronización. - Local file changed during sync. Un archivo local fue modificado durante la sincronización. - Poll URL missing Falta la URL de la encuesta - Unexpected return code from server (%1) Respuesta inesperada del servidor (%1) - Missing File ID from server ID perdido del archivo del servidor - Missing ETag from server Perdido ETag del servidor @@ -4809,22 +3741,18 @@ Esta es un modo nuevo y experimental. Si decides usarlo, por favor, informa de c OCC::PropagateUploadFileV1 - Poll URL missing Falta la URL de la encuesta - The local file was removed during sync. El archivo local ha sido eliminado durante la sincronización. - Local file changed during sync. Un archivo local ha sido modificado durante la sincronización. - The server did not acknowledge the last chunk. (No e-tag was present) El servidor no ha reconocido la última parte. (No había una e-tag presente) @@ -4832,27 +3760,22 @@ Esta es un modo nuevo y experimental. Si decides usarlo, por favor, informa de c OCC::ProxyAuthDialog - Proxy authentication required Autenticación de proxy necesaria - Username: Nombre de usuario: - Proxy: Proxy: - The proxy server needs a username and password. El servidor de proxy necesita de un usuario y contraseña. - Password: Contraseña: @@ -4860,7 +3783,6 @@ Esta es un modo nuevo y experimental. Si decides usarlo, por favor, informa de c OCC::SelectiveSyncDialog - Choose What to Sync Escoja qué sincronizar @@ -4868,33 +3790,26 @@ Esta es un modo nuevo y experimental. Si decides usarlo, por favor, informa de c OCC::SelectiveSyncWidget - Loading … Cargando ... - Deselect remote folders you do not wish to synchronize. Deseleccione las carpetas remotas que no desea sincronizar. - Name Nombre - Size Tamaño - - No subfolders currently on the server. No hay subcarpetas actualmente en el servidor. - An error occurred while loading the list of sub folders. Se ha producido un error al cargar la lista de carpetas. @@ -4902,7 +3817,6 @@ Esta es un modo nuevo y experimental. Si decides usarlo, por favor, informa de c OCC::ServerNotificationHandler - Reply Responder @@ -4910,28 +3824,23 @@ Esta es un modo nuevo y experimental. Si decides usarlo, por favor, informa de c OCC::SettingsDialog - Settings Ajustes - %1 Settings This name refers to the application name e.g Nextcloud %1 Configuración - General General - Network Red - Account Cuenta @@ -4939,7 +3848,6 @@ Esta es un modo nuevo y experimental. Si decides usarlo, por favor, informa de c OCC::ShareManager - Error Error @@ -4947,47 +3855,38 @@ Esta es un modo nuevo y experimental. Si decides usarlo, por favor, informa de c OCC::ShareModel - %1 days %1 días - 1 day 1 día - Today Hoy - Secure file drop link Enlace para entrega de archivos segura - Share link Compartir enlace - Link share Compartición de enlace - Internal link Enlace interno - Secure file drop Entrega segura de archivos - Could not find local folder for %1 No se ha podido encontrar una carpeta local para %1 @@ -4995,23 +3894,18 @@ Esta es un modo nuevo y experimental. Si decides usarlo, por favor, informa de c OCC::ShareeModel - - Search globally Buscar globalmente - No results found No se encontraron resultados - Global search results Resultados de búsqueda global - %1 (%2) sharee (shareWithAdditionalInfo) %1 (%2) @@ -5020,48 +3914,38 @@ Esta es un modo nuevo y experimental. Si decides usarlo, por favor, informa de c OCC::SocketApi - Context menu share Compartir en menú contextual - I shared something with you He compartido algo contigo - - Share options Opciones de compartir - Send private link by email … Enviar enlace privado por correo electrónico ... - Copy private link to clipboard Copiar enlace privado al portapapeles - Failed to encrypt folder at "%1" No se pudo cifrar carpeta en "%1" - The account %1 does not have end-to-end encryption configured. Please configure this in your account settings to enable folder encryption. La cuenta %1 no tiene el cifrado de extremo a extremo configurado. Por favor configure esto en sus opciones de cuenta para habilitar el cifrado de carpetas. - Failed to encrypt folder Fallo al cifrar la carpeta - Could not encrypt the following folder: "%1". Server replied with error: %2 @@ -5070,105 +3954,86 @@ Server replied with error: %2 El servidor respondió con el error: %2 - Folder encrypted successfully Se cifró la carpeta exitosamente - The following folder was encrypted successfully: "%1" La siguiente carpeta se cifró con éxito: "%1" - Select new location … Seleccione nueva ubicación … - - Activity Actividad - Leave this share Abandonar este recurso compartido - Resharing this file is not allowed No está permitido compartir de nuevo - Resharing this folder is not allowed No está permitido compartir de nuevo esta carpeta - Encrypt Cifrar - Lock file Bloquear archivo - Unlock file Desbloquear archivo - Locked by %1 Bloqueado por %1 - Expires in %1 minutes remaining time before lock expires - Caduca en %1 minutoCaduca en %1 minutosCaduca en %1 minutos + + Caduca en %1 minuto + Caduca en %1 minutos + - Resolve conflict … Resolver conflicto … - Move and rename … Mover y renombrar … - Move, rename and upload … Mover, renombrar y subir … - Delete local changes Borra cambios en local - Move and upload … Mover y subir … - Delete Eliminar - Copy internal link Copiar enlace interno - - Open in browser Abrir en navegador @@ -5176,124 +4041,100 @@ El servidor respondió con el error: %2 OCC::SslButton - <h3>Certificate Details</h3> <h3>Detalles del certificado</h3> - Common Name (CN): Nombre común (NC): - Subject Alternative Names: Nombres alternativos del sujeto: - Organization (O): Organización (O): - Organizational Unit (OU): Unidad organizativa (UO): - State/Province: Estado/Provincia: - Country: País: - Serial: Nº de serie: - <h3>Issuer</h3> <h3>Emisor</h3> - Issuer: Emisor: - Issued on: Emitido en: - Expires on: Caduca el: - <h3>Fingerprints</h3> <h3>Firma</h3> - SHA-256: SHA-256: - SHA-1: SHA-1: - <p><b>Note:</b> This certificate was manually approved</p> <p><b>Notificación:</b> Este certificado fue aprobado manualmente</p> - %1 (self-signed) %1 (autofirmado) - %1 %1 - This connection is encrypted using %1 bit %2. Esta conexión está cifrada con %1 bit %2. - Server version: %1 Versión del servidor: %1 - No support for SSL session tickets/identifiers No admite tickets de sesión/identificadores SSL - Certificate information: Información del certificado: - The connection is not secure La conexión no es segura - This connection is NOT secure as it is not encrypted. Esta conexión NO ES SEGURA, pues no está cifrada. @@ -5303,82 +4144,62 @@ El servidor respondió con el error: %2 OCC::SslErrorDialog - Trust this certificate anyway Confiar en este certificado de todas maneras - Untrusted Certificate Certificado sin verificar - Cannot connect securely to <i>%1</i>: No puedo conectar de forma segura a <i>%1</i>: - Additional errors: Errores adicionales: - with Certificate %1 con certificado %1 - - - &lt;not specified&gt; &lt;no especificado&gt; - - Organization: %1 Organización: %1 - - Unit: %1 Unidad: %1 - - Country: %1 País: %1 - Fingerprint (SHA1): <tt>%1</tt> Huella dactilar (SHA1): <tt>%1</tt> - Fingerprint (SHA-256): <tt>%1</tt> Huella digital (SHA-256):<tt>%1</tt> - Fingerprint (SHA-512): <tt>%1</tt> Huella digital (SHA-512): <tt>%1</tt> - Effective Date: %1 Fecha de vigencia: %1 - Expiration Date: %1 Fecha de caducidad: %1 - Issuer: %1 Emisor: %1 @@ -5386,73 +4207,59 @@ El servidor respondió con el error: %2 OCC::SyncEngine - %1 (skipped due to earlier error, trying again in %2) %1 (no realizado por el error anterior, intente de nuevo %2) - Only %1 are available, need at least %2 to start Placeholders are postfixed with file sizes using Utility::octetsToString() Solo %1 disponible, se necesita por lo menos %2 para comenzar - Unable to open or create the local sync database. Make sure you have write access in the sync folder. Imposible abrir o crear la BBDD local de sync. Asegurese de que tiene permisos de escritura en la carpeta de sync. - Disk space is low: Downloads that would reduce free space below %1 were skipped. Poco espacio libre en disco: La descarga lo reducirá por debajo del %1, deberia abortar. - There is insufficient space available on the server for some uploads. No hay suficiente espacio libre en el servidor para algunas subidas. - Unresolved conflict. Conflicto sin resolver. - Could not update file: %1 No se pudo actualizar el archivo: %1 - Could not update virtual file metadata: %1 No se ha podido actualizar los metadatos del archivo virtual: %1 - Could not update file metadata: %1 No se pudo actualizar los metadatos del archivo: %1 - Could not set file record to local DB: %1 No fue posible establecer el registro del archivo a la base de datos local: %1 - Using virtual files with suffix, but suffix is not set Usando archivos virtuales con sufijo, pero el sufijo no está establecido - Unable to read the blacklist from the local database No se pudo leer la lista de bloqueo de la base de datos local - Unable to read from the sync journal. No se ha podido leer desde el registro de sincronización - Cannot open the sync journal No es posible abrir el diario de sincronización @@ -5460,75 +4267,54 @@ El servidor respondió con el error: %2 OCC::SyncStatusSummary - - Offline No conectado - - You need to accept the terms of service - Debe aceptar los términos de servicio - - - - - All synced! ¡Todo está sincronizado! - Some files couldn't be synced! ¡Algunos archivos no han podido ser sincronizados! - See below for errors Comprueba abajo los errores - Checking folder changes Comprobando cambios en la carpeta - Syncing changes Sincronizando cambios - Sync paused Sincronización pausada - Some files could not be synced! ¡Algunos archivos no pueden ser sincronizados! - See below for warnings Comprueba abajo los avisos - Syncing Sincronizando - %1 of %2 · %3 left %1 de %2 · quedan %3 - %1 of %2 %1 de %2 - Syncing file %1 of %2 Sincronizando archivo %1 de %2 @@ -5536,54 +4322,42 @@ El servidor respondió con el error: %2 OCC::Systray - Download Descargar - Add account Agregar cuenta - Open main dialog Abrir diálogo principal - - Pause sync Pausar sincronización - - Resume sync Continuar sincronización - Settings Ajustes - Help Ayuda - Exit %1 Salir %1 - Pause sync for all Pausar sincronización para todo - Resume sync for all Continuar sincronización a todos @@ -5591,27 +4365,22 @@ El servidor respondió con el error: %2 OCC::TermsOfServiceCheckWidget - Waiting for terms to be accepted Esperando a que los términos de servicio sean aceptados - Polling Sondeando - Link copied to clipboard. Enlace copiado al portapapeles - Open Browser Abrir Navegador - Copy Link Copiar enlace @@ -5619,18 +4388,15 @@ El servidor respondió con el error: %2 OCC::Theme - %1 Desktop Client Version %2 (%3) %1 is application name. %2 is the human version string. %3 is the operating system name. %1 Versión del Cliente de Escritorio %2 (%3) - <p><small>Using virtual files plugin: %1</small></p> <p><small>Usando el plugin de archivos virtuales: %1</small></p> - <p>This release was supplied by %1.</p> <p>Esta versión ha sido suministrada por %1.</p> @@ -5638,22 +4404,18 @@ El servidor respondió con el error: %2 OCC::UnifiedSearchResultsListModel - Failed to fetch providers. Fallo al recuperar los proveedores. - Failed to fetch search providers for '%1'. Error: %2 Fallo al recuperar los proveedores de búsqueda para '%1'. Error: %2 - Search has failed for '%2'. La búsqueda ha fallado para '%2'. - Search has failed for '%1'. Error: %2 La búsqueda ha fallado para '%1'. Error: %2 @@ -5661,17 +4423,14 @@ El servidor respondió con el error: %2 OCC::UpdateE2eeFolderMetadataJob - Failed to update folder metadata. Fallo al actualizar los metadatos de la carpeta. - Failed to unlock encrypted folder. Fallo al desbloquear carpeta cifrada. - Failed to finalize item. Fallo al finalizar ítem. @@ -5679,35 +4438,22 @@ El servidor respondió con el error: %2 OCC::UpdateE2eeFolderUsersMetadataJob - - - - - - - - - Error updating metadata for a folder %1 Error al actualizar los metadatos de una carpeta %1 - Could not fetch public key for user %1 No se pudo obtener la llave pública para el usuario %1 - Could not find root encrypted folder for folder %1 No se ha podido encontrar la carpeta cifrada para la carpeta %1 - Could not add or remove user %1 to access folder %2 No se ha podido añadir o eliminar al usuario %1 para acceder a la carpeta %2 - Failed to unlock a folder. Fallo al desbloquear una carpeta. @@ -5715,43 +4461,37 @@ El servidor respondió con el error: %2 OCC::User - End-to-end certificate needs to be migrated to a new one El certificado de extremo a extremo debe ser migrado a uno nuevo - Trigger the migration Iniciar la migración - %n notification(s) - %n notificación%n notificación(es)%n notificación(es) + + %n notificación + %n notificación(es) + - Retry all uploads Reintentar todas las subidas - - Resolve conflict Resolver conflicto - Rename file Renombrar archivo - Open Nextcloud Assistant in browser Abrir Nextcloud Assistant en el navegador - Open Nextcloud Talk in browser Abrir Nextcloud Talk en el navegador @@ -5759,22 +4499,18 @@ El servidor respondió con el error: %2 OCC::UserModel - Confirm Account Removal Confirma la eliminación de cuenta - <p>Do you really want to remove the connection to the account <i>%1</i>?</p><p><b>Note:</b> This will <b>not</b> delete any files.</p> <p>¿De verdad quieres eliminar la conexión con la cuenta <i>%1</i>?</p><p><b>Aviso:</b> Esto <b>no eliminará</b> ningún archivo.</p> - Remove connection Eliminar vinculación - Cancel Cancelar @@ -5782,129 +4518,98 @@ El servidor respondió con el error: %2 OCC::UserStatusSelectorModel - Could not fetch predefined statuses. Make sure you are connected to the server. No se han podido recuperar los estados predefinidos. Asegúrese de que está conectado al servidor. - Could not fetch status. Make sure you are connected to the server. No se ha podido obtener el estado. Asegúrese de que está conectado al servidor. - Status feature is not supported. You will not be able to set your status. La característica de estado no está soportada. No podrá establecer su estado. - Emojis are not supported. Some status functionality may not work. La característica de emojis no está soportada. Es posible que algunas características de estado del usuario no funcionen. - Could not set status. Make sure you are connected to the server. No se ha podido establecer el estado. Asegúrese de que está conectado al servidor. - Could not clear status message. Make sure you are connected to the server. No se ha podido borrar el mensaje de estado. Asegúrese de que está conectado al servidor. - - Don't clear No borrar - 30 minutes 30 minutos - - 1 hour 1 hora - 4 hours 4 horas - - Today Hoy - - This week Esta semana - Less than a minute Hace menos de un minuto - 1 minute 1 minuto - %1 minutes - %1 minuto%1 minutos%1 minutos + + %1 minuto + %1 minutos + - %1 hours - %1 hora%1 horas%1 horas + + %1 hora + %1 horas + - 1 day 1 día - %1 days - %1 día%1 días%1 días - - - - %n minute(s) - %n minuto%n minutos%n minutos - - - - %n hour(s) - %n hora%n horas%n horas - - - - %n day(s) - %n día%n días%n días + + %1 día + %1 días + OCC::Vfs - Please choose a different location. %1 is a drive. It doesn't support virtual files. Por favor seleccione un ubicación diferente. %1 es una unidad. No soporta archivos virtuales. - Please choose a different location. %1 isn't a NTFS file system. It doesn't support virtual files. Por favor seleccione un ubicación diferente. %1no es un sistema de archivos NTFS. No soporta archivos virtuales. - Please choose a different location. %1 is a network drive. It doesn't support virtual files. Por favor seleccione un ubicación diferente. %1 es una unidad de red. No soporta archivos virtuales. @@ -5912,37 +4617,30 @@ El servidor respondió con el error: %2 OCC::VfsDownloadErrorDialog - Download error Error de descarga - Error downloading Error al descargar - could not be downloaded no pudo ser descargado - > More details > Más detalles - More details Más detalles - Error downloading %1 Error descargando %1 - %1 could not be downloaded. %1 no pudo ser descargado. @@ -5950,8 +4648,6 @@ El servidor respondió con el error: %2 OCC::VfsSuffix - - Error updating metadata due to invalid modification time Error al actualizar los metadatos debido a una fecha de modificación no válida. @@ -5959,8 +4655,6 @@ El servidor respondió con el error: %2 OCC::VfsXAttr - - Error updating metadata due to invalid modification time Error al actualizar los metadatos debido a una fecha de modificación no válida. @@ -5968,12 +4662,10 @@ El servidor respondió con el error: %2 OCC::WebEnginePage - Invalid certificate detected Certificado inválido detectado - The host "%1" provided an invalid certificate. Continue? El host "%1" ha entregado un certificado no válido. ¿Continuar? @@ -5981,7 +4673,6 @@ El servidor respondió con el error: %2 OCC::WebFlowCredentials - You have been logged out of your account %1 at %2. Please login again. Ha cerrado la sesión de su cuenta %1 en %2. Por favor, inicie sesión de nuevo. @@ -5989,42 +4680,34 @@ El servidor respondió con el error: %2 OCC::WelcomePage - Form Formulario - Log in Iniciar sesión - Sign up with provider Iniciar sesión a través de un proveedor - Keep your data secure and under your control Mantén tus datos seguros y bajo tu control - Secure collaboration & file exchange Colaboración segura e intercambio de archivos - Easy-to-use web mail, calendaring & contacts Correo web, calendario y contactos fáciles de usar - Screensharing, online meetings & web conferences Compartir pantalla, reuniones online y conferencias web - Host your own server Aloja tu propio servidor @@ -6032,88 +4715,71 @@ El servidor respondió con el error: %2 OCC::ownCloudGui - Please sign in Por favor, inicie sesión - There are no sync folders configured. No hay carpetas configuradas para sincronizar. - Disconnected from %1 Desconectado de %1 - Unsupported Server Version Versión del servidor no soportada - The server on account %1 runs an unsupported version %2. Using this client with unsupported server versions is untested and potentially dangerous. Proceed at your own risk. El servidor en la cuenta %1 usa una versión no soportada %2. El uso de este cliente con versiones de servidor no soportadas no ha sido probado y es potencialmente peligroso. Continúa bajo tu propio riesgo. - Terms of service Términos de servicio - Your account %1 requires you to accept the terms of service of your server. You will be redirected to %2 to acknowledge that you have read it and agrees with it. Su cuenta %1 requiere que acepte los términos de servicio de su servidor. Será redirigido a %2 para indicar que los ha leído y está de acuerdo. - %1: %2 Example text: "Nextcloud: Syncing 25MB (3 minutes left)" (%1 is the folder name to be synced, %2 a status message for that folder) %1:%2 - macOS VFS for %1: Sync is running. macOS VFS para %1: Sincronización en progreso. - macOS VFS for %1: Last sync was successful. macOS VFS para %1: la última sincronización fue exitosa. - macOS VFS for %1: A problem was encountered. macOS VFS para %1: Se ha encontrado un problema. - Checking for changes in remote "%1" Buscando cambios en carpeta remota "%1" - Checking for changes in local "%1" Buscando cambios en carpeta local "%1" - Disconnected from accounts: Desconectado desde cuentas: - Account %1: %2 Cuenta %1: %2 - Account synchronization is disabled La sincronización está deshabilitada - %1 (%2, %3) %1 (%2, %3) @@ -6121,73 +4787,59 @@ El servidor respondió con el error: %2 OwncloudAdvancedSetupPage - Username Nombre de usuario - Local Folder Carpeta Local - Choose different folder Elegir una carpeta diferente - Server address Nombre del servidor - Sync Logo Sync Logo - Synchronize everything from server Sincronizar todo desde el servidor - Ask before syncing folders larger than Preguntar antes sincronizar carpetas mayores de - Ask before syncing external storages Preguntar antes sincronizar almacenamientos externos - Keep local data Mantener datos locales - <html><head/><body><p>If this box is checked, existing content in the local folder will be erased to start a clean sync from the server.</p><p>Do not check this if the local content should be uploaded to the servers folder.</p></body></html> <html><head/><body><p>Si esta casilla está marcada, el contenido existente en el directorio local será eliminado para comenzar una sincronización limpia desde el servidor.</p><p>No marque esta casilla si el contenido local debería subirse al directorio del servidor.</p></body></html> - Erase local folder and start a clean sync Borrar carpeta local e iniciar una sincronización limpia - MB Trailing part of "Ask confirmation before syncing folder larger than" MB - Choose what to sync Elija qué sincronizar - &Local Folder Carpeta &local @@ -6195,12 +4847,10 @@ El servidor respondió con el error: %2 OwncloudHttpCredsPage - &Username &Nombre de usuario - &Password &Contraseña @@ -6208,23 +4858,18 @@ El servidor respondió con el error: %2 OwncloudSetupPage - - TextLabel TextLabel - Logo Logo - Server address Nombre del servidor - This is the link to your %1 web interface when you open it in the browser. Este es el link a su interfaz web %1 cuando la abra en el navegador. @@ -6232,97 +4877,88 @@ El servidor respondió con el error: %2 QObject - %nd delay in days after an activity - %nd%nd%nd + + %nd + %nd + - in the future en el futuro - %nh delay in hours after an activity - %nh%nh%nh + + %nh + %nh + - 1m one minute after activity date and time 1min - %nm delay in minutes after an activity - %nmin%nmin%nmin + + %nmin + %nmin + - now ahora - Some time ago Hace tiempo - %1: %2 this displays an error string (%2) for a file %1 %1: %2 - New folder Nueva carpeta - Failed to create debug archive Fallo al crear archivo de depuración - Could not create debug archive in selected location! ¡No se pudo crear el archivo de depuración en la ubicación seleccionada! - You renamed %1 Ha renombrado %1 - You deleted %1 Ha eliminado %1 - You created %1 Ha creado %1 - You changed %1 Ha cambiado %1 - Synced %1 Sincronizado %1 - Error deleting the file Error al eliminar el archivo - Paths beginning with '#' character are not supported in VFS mode. Las rutas que comienzan con el carácter '#' no están soportadas en el modo VFS. @@ -6330,38 +4966,34 @@ El servidor respondió con el error: %2 ResolveConflictsDialog - Solve sync conflicts Resolver conflictos de sincronización - %1 files in conflict indicate the number of conflicts to resolve - %1 archivo en conflicto%1 archivos en conflicto%1 archivos en conflicto + + %1 archivo en conflicto + %1 archivos en conflicto + - Choose if you want to keep the local version, server version, or both. If you choose both, the local file will have a number added to its name. Decida si quiere mantener la versión local, la versión del servidor, o ambas. Si escoge ambas, se le añadirá un número al nombre del archivo local. - All local versions Todas las versiones locales - All server versions Todas las versiones del servidor - Resolve conflicts Resolver conflictos - Cancel Cancelar @@ -6369,7 +5001,6 @@ El servidor respondió con el error: %2 ShareDelegate - Copied! ¡Copiado! @@ -6377,83 +5008,66 @@ El servidor respondió con el error: %2 ShareDetailsPage - An error occurred setting the share password. Ocurrió un error al establecer la contraseña del recurso compartido - Edit share Editar recurso compartido - Share label Etiqueta del recurso compartido - - Allow upload and editing Permitir la subida y edición - View only Solo lectura - File drop (upload only) Entrega de archivos (solo carga) - Allow resharing Permitir que otros compartan - Hide download Ocultar descarga - Password protection Protección por contraseña - Set expiration date Fijar fecha de caducidad - Note to recipient Nota para el destinatario - Enter a note for the recipient Ingrese una nota para el destinatario - Unshare Dejar de compartir - Add another link Añadir otro enlace - Share link copied! ¡Enlace al recurso compartido copiado! - Copy share link Copiar enlace de recurso compartido @@ -6461,37 +5075,30 @@ El servidor respondió con el error: %2 ShareView - Password required for new share Se requiere una contraseña para el nuevo recurso compartido - Share password Contraseña del recurso compartido - Shared with you by %1 Compartido con Ud. por %1 - Expires in %1 Caduca en %1 - Sharing is disabled Compartir está deshabilitado - This item cannot be shared. Este ítem no puede ser compartido. - Sharing is disabled. Compartir está deshabilitado. @@ -6499,12 +5106,10 @@ El servidor respondió con el error: %2 ShareeSearchField - Search for users or groups… Buscar usuarios o grupos… - Sharing is not available for this folder Compartir no está disponible para esta carpeta @@ -6512,7 +5117,6 @@ El servidor respondió con el error: %2 SyncJournalDb - Failed to connect database. Fallo en la conexión a la base de datos. @@ -6520,17 +5124,14 @@ El servidor respondió con el error: %2 SyncStatus - Sync now Sincronizar ahora - Resolve conflicts Resolver conflictos - Open browser Abrir navegador @@ -6538,12 +5139,10 @@ El servidor respondió con el error: %2 TalkReplyTextField - Reply to … Responder a … - Send reply to chat message Enviar respuesta al mensaje de chat @@ -6551,78 +5150,29 @@ El servidor respondió con el error: %2 TermsOfServiceCheckWidget - Terms of Service Términos de Servicio - Logo Logotipo - Switch to your browser to accept the terms of service Cambie al navegador para aceptar los términos de servicio - - TrayFoldersMenuButton - - - Open local or group folders - Abrir carpetas locales de de grupo - - - - Open local folder - Abrir carpeta local - - - - Connected - Conectado - - - - Disconnected - Desconectado - - - - Open local folder "%1" - Abrir carpeta local "%1" - - - - Open group folder "%1" - Abrir carpeta de grupo "%1" - - - - Open %1 in file explorer - Abrir %1 en el explorador de archivos - - - - User group and local folders menu - Menú de usuario de carpetas de grupo o locales - - TrayWindowHeader - Open local or group folders Abrir carpetas locales o de grupo - More apps Más apps - Open %1 in browser Abrir %1 en el navegador @@ -6630,7 +5180,6 @@ El servidor respondió con el error: %2 UnifiedSearchInputContainer - Search files, messages, events … Buscando archivos, mensajes, eventos … @@ -6638,7 +5187,6 @@ El servidor respondió con el error: %2 UnifiedSearchPlaceholderView - Start typing to search Comience a escribir para buscar @@ -6646,7 +5194,6 @@ El servidor respondió con el error: %2 UnifiedSearchResultFetchMoreTrigger - Load more results Cargar más resultados @@ -6654,7 +5201,6 @@ El servidor respondió con el error: %2 UnifiedSearchResultItemSkeleton - Search result skeleton. Árbol de resultados de la búsqueda @@ -6662,7 +5208,6 @@ El servidor respondió con el error: %2 UnifiedSearchResultListItem - Load more results Cargar más resultados @@ -6670,7 +5215,6 @@ El servidor respondió con el error: %2 UnifiedSearchResultNothingFound - No results for No se encontraron resultados para @@ -6678,7 +5222,6 @@ El servidor respondió con el error: %2 UnifiedSearchResultSectionItem - Search results section %1 Sección de resultados de búsqueda %1 @@ -6686,44 +5229,34 @@ El servidor respondió con el error: %2 UserLine - Switch to account Cambiar a la cuenta - Current account status is online El estado actual de la cuenta es en línea - Current account status is do not disturb El estado actual de la cuenta es no molestar - Account actions Acciones de la cuenta - Set status Establecer estado - - Log out Cerrar sesión - - Log in Iniciar sesión - Remove account Eliminar cuenta @@ -6731,67 +5264,54 @@ El servidor respondió con el error: %2 UserStatusSelector - Online status Estado en línea - Online En línea - Away Ausente - Do not disturb No molestar - Mute all notifications Silenciar todas las notificaciones - Invisible Invisible - Appear offline Mostrar como fuera de línea - Status message Mensaje de estado - What is your status? ¿Cuál es su estado? - Clear status message after Borrar el mensaje de estado después de - Cancel Cancelar - Clear Limpiar - Apply Aplicar @@ -6799,62 +5319,68 @@ El servidor respondió con el error: %2 Utility - %L1 GB %L1 GB - %L1 MB %L1 MB - %L1 KB %L1 KB - %L1 B %L1 B - %L1 TB %L1 TB - %n year(s) - %n año%n año(s)%n año(s) + + %n año + %n año(s) + - %n month(s) - %n Mes%n Mese(s)%n Mese(s) + + %n Mes + %n Mese(s) + - %n day(s) - %n dia%n dia(s)%n dia(s) + + %n dia + %n dia(s) + - %n hour(s) - %n hora%n hora(s)%n hora(s) + + %n hora + %n hora(s) + - %n minute(s) - %n minuto%n minuto(s)%n minuto(s) + + %n minuto + %n minuto(s) + - %n second(s) - %n segundo%n segundo(s)%n segundo(s) + + %n segundo + %n segundo(s) + - %1 %2 %1 %2 @@ -6862,17 +5388,14 @@ El servidor respondió con el error: %2 ValidateChecksumHeader - The checksum header is malformed. El encabezado de checksum está malformado. - The checksum header contained an unknown checksum type "%1" El encabezado del checksum contenía un tipo de comprobación desconocido: "%1" - The downloaded file does not match the checksum, it will be resumed. "%1" != "%2" El archivo descargado no coincide con la suma de comprobación (checksum), se reanudará. "%1" != "%2" @@ -6880,12 +5403,10 @@ El servidor respondió con el error: %2 main.cpp - System Tray not available La bandeja del sistema no está disponible - %1 requires on a working system tray. If you are running XFCE, please follow <a href="http://docs.xfce.org/xfce/xfce4-panel/systray">these instructions</a>. Otherwise, please install a system tray application such as "trayer" and try again. %1 requiere una bandeja del sistema de trabajo. Si estás ejecutando XFCE, por favor, siga <a href="http://docs.xfce.org/xfce/xfce4-panel/systray">estas instrucciones</a>. Por otro lado, instale una bandeja del sistema de aplicaciones como "trayer" e inténtelo de nuevo. @@ -6893,7 +5414,6 @@ El servidor respondió con el error: %2 nextcloudTheme::aboutInfo() - <p><small>Built from Git revision <a href="%1">%2</a> on %3, %4 using Qt %5, %6</small></p> <p><small>Creado desde la revisión Git <a href="%1">%2</a> en %3, %4 utilizando Qt %5, %6</small></p> @@ -6901,119 +5421,94 @@ El servidor respondió con el error: %2 progress - Virtual file created Archivo virtual creado - Replaced by virtual file Reemplazado por un archivo virtual - Downloaded Descargado - Uploaded Subido - Server version downloaded, copied changed local file into conflict file Versión del servidor descargada, se ha copiado el fichero local cambiado al fichero en conflicto - Server version downloaded, copied changed local file into case conflict conflict file Se descargó la versión del servidor, se copió el archivo local cambiado hacia archivo con conflictos de capitalización - Deleted Eliminado - Moved to %1 Movido a %1 - Ignored Ignorado - Filesystem access error Error de acceso al sistema de archivos - - Error Error - Updated local metadata Actualizados metadatos locales - Updated local virtual files metadata Se han actualizado los metadatos para los archivos virtuales - Updated end-to-end encryption metadata Metadatos de cifrado de extremo a extremo actualizados - - Unknown Desconocido - Downloading Descargando - Uploading Subiendo - Deleting Eliminando - Moving Moviendo - Ignoring Ignorando - Updating local metadata Actualizando los metadatos locales - Updating local virtual files metadata Actualizando los metadatos de los archivos virtuales locales - Updating end-to-end encryption metadata Actualizando metadatos de cifrado extremo a extremo @@ -7021,52 +5516,42 @@ El servidor respondió con el error: %2 theme - Sync status is unknown Estado de sincronización desconocido - Waiting to start syncing Esperando para empezar la sincronización - Sync is running Sincronizado en proceso - Sync was successful La sincronización fue exitosa - Sync was successful but some files were ignored La sincronización fue exitosa, pero se han ignorado algunos archivos - Error occurred during sync Ha ocurrido un error durante la sincronización - Error occurred during setup Ha ocurrido un error durante la configuración - Stopping sync Deteniendo la sincronización - Preparing to sync Preparando para sincronizar - Sync is paused La sincronización está en pausa. @@ -7074,67 +5559,44 @@ El servidor respondió con el error: %2 utility - Could not open browser No se ha podido abrir el navegador - There was an error when launching the browser to go to URL %1. Maybe no default browser is configured? Se ha producido un error al lanzar el navegador para ir a la URL: %1 , ¿puede ser que no tenga ningún navegador por defecto? - Could not open email client No se ha podido abrir el cliente de correo electrónico - There was an error when launching the email client to create a new message. Maybe no default email client is configured? Se ha producido un error al lanzar el cliente de correo electrónico para crear un nuevo mensaje. ¿Puede ser que no haya ningún cliente de correo electrónico configurado? - Always available locally Siempre disponible localmente - Currently available locally Disponible localmente ahora - Some available online only Algunos solo disponibles en línea - Available online only Disponible solo en línea - Make always available locally Hacer que esté siempre localmente disponible - Free up local space Liberar espacio local - - FileProviderFastEnumerationSettings - - - Enable fast sync - Habilitar sincronización rápida - - - - Fast sync will only sync changes in files and folders within folders that have been explored. This can significantly increase responsiveness on initial configuration of virtual files. However, it will cause redundant downloads of files moved to an unexplored folder. - La sincronización rápida sólo sincronizará los cambios en archivos y carpetas dentro de las carpetas que se han explorado. Esto puede incrementar significativamente la capacidad de respuesta en la configuración inicial de los archivos virtuales. Sin embargo, esto provocará descargas redundantes de archivos movidos a carpetas inexploradas. - - - \ No newline at end of file + diff --git a/translations/client_fr.ts b/translations/client_fr.ts index 860525216d290..986ab993936f3 100644 --- a/translations/client_fr.ts +++ b/translations/client_fr.ts @@ -1,13 +1,13 @@ - + + + ActivityItem - Open %1 locally Ouvrir %1 localement - In %1 Dans %1 @@ -15,12 +15,10 @@ ActivityItemContent - Open file details Ouvrir les détails du fichier - Dismiss Rejeter @@ -28,17 +26,14 @@ ActivityList - Activity list Liste des activités - Scroll to top Défiler vers le haut - No activities yet Pas encore d'activité @@ -46,22 +41,18 @@ CallNotificationDialog - Talk notification caller avatar Avatar de l'appelant de la notification Talk - Answer Talk call notification Répondre à la notification d'appel de Talk - Decline Décliner - Decline Talk call notification Décliner la notification d'appel de Talk @@ -69,83 +60,66 @@ CloudProviderWrapper - %1 (%2, %3) %1 (%2, %3) - Checking for changes in "%1" Vérification des modifications dans "%1" - Syncing %1 of %2 (%3 left) Synchronisation de %1 sur %2 (%3 restant) - Syncing %1 of %2 Synchronisation de %1 sur %2 - Syncing %1 (%2 left) Synchronisation de %1 (%2 restant) - Syncing %1 Synchronisation de %1 - - No recently changed files Aucun fichier modifié récemment - Sync paused Synchronisation en pause - Syncing Synchronisation en cours - Open website Consulter le site web - Recently changed Modifié récemment - Pause synchronization Suspendre la synchronisation - Help Aide - Settings Paramètres - Log out Se déconnecter - Quit sync client Quitter le client de synchro @@ -153,12 +127,10 @@ ConflictDelegate - Local version Version locale - Server version Version serveur @@ -166,59 +138,46 @@ CurrentAccountHeaderButton - Current account Compte actuel - - Resume sync for all Reprendre la synchronisation pour tous - - Pause sync for all Mettre en pause la synchronisation pour tous - Add account Ajouter un compte - Add new account Ajouter un nouveau compte - Settings Paramètres - Exit Quitter - Current account avatar Avatar du compte actuel - Current account status is online Le statuts de compte actuel est en ligne - Current account status is do not disturb Le statuts de compte actuel est ne pas déranger - Account switcher and settings menu Sélecteur de compte et menu de paramètres @@ -226,7 +185,6 @@ EditFileLocallyLoadingDialog - Opening file for local editing Ouverture du fichier pour édition locale @@ -234,7 +192,6 @@ EmojiPicker - No recent emojis Pas d'émojis récents @@ -242,7 +199,6 @@ EncryptionTokenDiscoveryDialog - Discovering the certificates stored on your USB token Découverte des certificats stockés sur votre jeton USB @@ -250,22 +206,18 @@ EncryptionTokenSelectionWindow - Token Encryption Key Chooser Choisir la clé de chiffrement du jeton - Available Keys for end-to-end Encryption: Clés disponibles pour le chiffrement de bout en bout: - Choose Choisir - Cancel Annuler @@ -273,7 +225,6 @@ ErrorBox - Error Erreur @@ -281,12 +232,10 @@ FileDetailsPage - Activity Activité - Sharing Partage @@ -294,7 +243,6 @@ FileDetailsWindow - File details of %1 · %2 Détails du fichier de %1 · %2 @@ -302,35 +250,32 @@ FileProviderEvictionDialog - - Remove local copies - Supprimer les copies locales - - - Evict materialised files Supprimer les fichiers matérialisés - - Local copies - Copies locales - - - Reload Recharger - Materialised items Éléments matérialisés + + FileProviderFastEnumerationSettings + + Enable fast sync + Activer la sync. rapide + + + Fast sync will only sync changes in files and folders within folders that have been explored. This can significantly increase responsiveness on initial configuration of virtual files. However, it will cause redundant downloads of files moved to an unexplored folder. + La synchronisation rapide va uniquement synchroniser les modifications des fichiers et des dossiers dans les dossiers qui ont été explorés. Ceci peut significativement augmenter la réactivité sur la configuration initiale des fichiers virtuelles. Cependant, cela va causer des téléchargements redondants de fichiers déplacés dans un dossier non exploré. + + FileProviderFileDelegate - Delete Supprimer @@ -338,50 +283,29 @@ FileProviderSettings - Virtual files settings Paramètres des fichiers virtuels - General settings Paramètres généraux - Enable virtual files Activer les fichiers virtuels - - - Allow deletion of items in Trash - Autoriser la suppression des éléments dans la corbeille - - - - Reset virtual files environment - - FileProviderStorageInfo - Local storage use Utilisation du stockage local - %1 GB of %2 GB remote files synced %1 Go sur %2 Go de fichiers distants synchronisés - - Free up space … - Libérer de l’espace… - - - Evict local copies … Évincer les copies locales… @@ -389,22 +313,18 @@ FileProviderSyncStatus - Syncing Synchronisation - All synced! Tout est synchronisé ! - Request sync Synchroniser - Request a sync of changes for the VFS environment. macOS may ignore or delay this request. Synchroniser les modifications pour l'environnement VFS. @@ -414,12 +334,10 @@ macOS may ignore or delay this request. FileSystem - Error removing "%1": %2 Erreur lors de la suppression de "%1" : %2 - Could not remove folder "%1" Impossible de supprimer le dossier "%1" @@ -427,22 +345,18 @@ macOS may ignore or delay this request. Flow2AuthWidget - Browser Authentication Authentification avec le navigateur Internet - Logo Logo - Switch to your browser to connect your account Basculez sur votre navigateur pour connecter votre compte - An error occurred while connecting. Please try again. Une erreur s'est produite pendant la connexion. Veuillez ré-essayer. @@ -450,12 +364,10 @@ macOS may ignore or delay this request. FolderWizardSourcePage - Pick a local folder on your computer to sync Sélectionnez un dossier local de votre ordinateur à synchroniser - &Choose … &Sélectionner … @@ -463,22 +375,18 @@ macOS may ignore or delay this request. FolderWizardTargetPage - Select a remote destination folder Veuillez sélectionner un dossier distant - Create folder Créer un dossier - Refresh Rafraîchir - Folders Dossiers @@ -486,17 +394,14 @@ macOS may ignore or delay this request. MainWindow - Nextcloud desktop main dialog Boîte de dialogue principale du bureau Nextcloud - Unified search results list Liste des résultats de la recherche unifiée - New activities Nouvelles activités @@ -504,17 +409,14 @@ macOS may ignore or delay this request. OCC::AbstractNetworkJob - Connection timed out Délai de connexion dépassé - Unknown error: network reply was deleted Erreur inconnue : La réponse du réseau a été supprimée - Server replied "%1 %2" to "%3 %4" Le serveur a répondu "%1 %2" à "%3 %4" @@ -522,17 +424,14 @@ macOS may ignore or delay this request. OCC::Account - File %1 is already locked by %2. Le fichier %1 est déjà verrouillé par %2. - Lock operation on %1 failed with error %2 L'opération de verrouillage de %1 a échoué avec l'erreur %2 - Unlock operation on %1 failed with error %2 L'opération de déverrouillage de %1 a échoué avec l'erreur %2 @@ -540,43 +439,30 @@ macOS may ignore or delay this request. OCC::AccountManager - - An account was detected from a legacy desktop client. -Should the account be imported? - - - - %1 accounts were detected from a legacy desktop client. Should the accounts be imported? %1 comptes ont été détectés à partir d'un ancien client de bureau. Doivent-ils être importés ? - - Legacy import Importation de l'héritage - Import Importer - 1 account was detected from a legacy desktop client. Should the account be imported? 1 compte a été détecté à partir d'un ancien client de bureau. Le compte doit-il être importé ? - Skip Ignorer - Could not import accounts from legacy client configuration. Impossible d'importer des comptes à partir de l'ancienne configuration client. @@ -584,255 +470,187 @@ Le compte doit-il être importé ? OCC::AccountSettings - Unchecked folders will be <b>removed</b> from your local file system and will not be synchronized to this computer anymore Les dossiers décochés seront <b>supprimés</b> de votre disque local et ne seront plus synchronisés avec cet ordinateur. - Synchronize all Tout synchroniser - Synchronize none Ne rien synchroniser - Apply manual changes Appliquer les changements manuels - Standard file sync Synchronisation standard des fichiers - Virtual file sync Synchronisation de fichiers virtuels - Connection settings Paramètres de connexion - Apply Appliquer - Storage space: … Espace de stockage : ... - - - Cancel Annuler - Connected with <server> as <user> Connecté au serveur <server> avec le compte <user> - No account configured. Aucun compte configuré. - End-to-end Encryption with Virtual Files Chiffrement de bout en bout avec fichiers virtuels - You seem to have the Virtual Files feature enabled on this folder. At the moment, it is not possible to implicitly download virtual files that are end-to-end encrypted. To get the best experience with virtual files and end-to-end encryption, make sure the encrypted folder is marked with "Make always available locally". Il semble que la fonctionnalité des Fichiers Virtuels soit activée sur ce dossier. Pour l'instant, il n'est pas possible de télécharger implicitement des fichiers virtuels qui sont chiffrés de bout en bout. Pour bénéficier d'une expérience optimale avec les fichiers virtuels et le chiffrement de bout en bout, assurez-vous que le dossier chiffré soit marqué par l'option "Toujours rendre disponible localement". - - Do not encrypt folder Ne pas chiffrer le dossier - - Encrypt folder Chiffrer le dossier - End-to-end Encryption Chiffrement de bout en bout - This will encrypt your folder and all files within it. These files will no longer be accessible without your encryption mnemonic key. <b>This process is not reversible. Are you sure you want to proceed?</b> Cela va chiffrer votre dossier et tous les fichiers qu'il contient. Ces fichiers ne seront plus accessibles sans votre clé de chiffrement mnémonique. <b>Ce processus n'est pas réversible. Êtes-vous sûr de vouloir le faire ?</b> - - Forget encryption setup - Oublier la configuration du chiffrement - - - Disable encryption Désactiver le chiffrement - Display mnemonic Afficher la phrase secrète - - Encryption is set-up. Remember to <b>Encrypt</b> a folder to end-to-end encrypt any new files added to it. - Le chiffrement est configuré. Souvenez-vous de <b>Chiffrer</b> un dossier pour chiffrer de bout en bout chaque nouveau fichier qui lui sera ajouté. - - - End-to-end encryption has been enabled for this account Le chiffrement de bout en bout a été activé sur ce compte - Warning Attention - Please wait for the folder to sync before trying to encrypt it. Merci d'attendre que le dossier soit synchronisé avant d'essayer de le chiffrer. - The folder has a minor sync problem. Encryption of this folder will be possible once it has synced successfully Le dossier a un défaut de synchronisation mineur. Le chiffrement de ce dossier sera possible quand la synchronisation aura réussi. - The folder has a sync error. Encryption of this folder will be possible once it has synced successfully Le dossier a une erreur de synchronisation. Le chiffrement de ce dossier sera possible quand la synchronisation aura réussi. - - You cannot encrypt this folder because the end-to-end encryption is not set-up yet on this device. -Would you like to do this now? - Vous ne pouvez pas chiffrer ce dossier puisque le chiffrement n'est pas encore configuré sur cet appareil. Voulez-vous le faire maintenant ? - - - End-to-end encryption is not configured on this device. Once it is configured, you will be able to encrypt this folder. Would you like to set up end-to-end encryption? Le chiffrement de bout en bout n'est pas configuré sur cet appareil. Une fois qu'il sera configuré, vous serez en mesure de chiffrer ce dossier. Souhaitez-vous configurer le chiffrement de bout en bout ? - You cannot encrypt a folder with contents, please remove the files. Wait for the new sync, then encrypt it. Vous ne pouvez pas chiffrer un dossier avec son contenu, veuillez enlever les fichiers. Attendez une nouvelle synchronisation puis chiffrez le dossier. - Encryption failed Le chiffrement a échoué - Could not encrypt folder because the folder does not exist anymore Impossible de chiffrer le dossier car il n'existe plus - Encrypt Chiffrer - - Edit Ignored Files Modifier les fichiers exclus - - Create new folder Créer un nouveau dossier - - Availability Disponibilités - Choose what to sync Sélectionner le contenu à synchroniser - Force sync now Forcer la synchronisation maintenant - Restart sync Redémarrer la synchronisation - Remove folder sync connection Retirer la connexion de synchronisation de dossier - Disable virtual file support … Désactiver la prise en charge du fichier virtuel… - Enable virtual file support %1 … Activer la prise en charge du fichier virtuel %1 … - (experimental) (expérimental) - Folder creation failed Échec de la création du dossier - Confirm Folder Sync Connection Removal Confirmer le retrait de la synchronisation de dossier - Remove Folder Sync Connection Retirer la synchronisation de ce dossier - Disable virtual file support? - Désactiver le support des fichiers virtuels ? + Désactiver le support des fichiers virtuels ? - This action will disable virtual file support. As a consequence contents of folders that are currently marked as "available online only" will be downloaded. The only advantage of disabling virtual file support is that the selective sync feature will become available again. @@ -843,219 +661,151 @@ Le seul avantage de désactiver la prise en charge du fichier virtuel est que le Cette action entraînera l'interruption de toute synchronisation en cours. - Disable support Désactiver le support - End-to-end encryption mnemonic Phrase secrète du chiffrement de bout en bout - - To protect your Cryptographic Identity, we encrypt it with a mnemonic of 12 dictionary words. Please note it down and keep it safe. You will need it to set-up the synchronization of encrypted folders on your other devices. - Pour protéger votre identité cryptographique, nous la chiffrons avec une phrase secrète de 12 mots du dictionnaire. Veuillez la noter et la garder en sécurité. Elle sera nécessaire pour configurer la synchronisation de dossiers chiffrés sur vos autres appareils. - - - - Forget the end-to-end encryption on this device - Oublier le chiffrement de bout en bout sur cet appareil - - - - Do you want to forget the end-to-end encryption settings for %1 on this device? - Voulez-vous oublier les paramètres de chiffrement de bout en bout pour %1 sur cet appareil ? - - - - Forgetting end-to-end encryption will remove the sensitive data and all the encrypted files from this device.<br>However, the encrypted files will remain on the server and all your other devices, if configured. - Oublier le chiffrement de bout en bout supprimera les données sensibles et tous les fichiers chiffrés sur cet appareil. <br> Cependant, les fichiers chiffrés resteront sur le serveur et sur vos autres appareils, si le chiffrement est configuré. - - - Sync Running Synchronisation en cours - The syncing operation is running.<br/>Do you want to terminate it? La synchronisation est en cours.<br/>Voulez-vous l'arrêter ? - %1 in use %1 utilisé(s) - Migrate certificate to a new one Migrer le certificat vers une nouvelle clé - There are folders that have grown in size beyond %1MB: %2 Il y a des dossiers qui ont augmenté de taille au-delà de %1 Mo : %2 - - End-to-end encryption has been initialized on this account with another device.<br>Enter the unique mnemonic to have the encrypted folders synchronize on this device as well. - Le chiffrement de bout en bout a été activé sur ce compte avec un autre appareil.<br>Entrez votre phrase secrète pour synchroniser les dossiers chiffrés sur cet appareil. - - - End-to-end encryption has been enabled on this account with another device.<br>It can be enabled on this device by entering your mnemonic.<br>This will enable synchronisation of existing encrypted folders. Le chiffrement de bout en bout a été activé sur ce compte avec un autre appareil.<br>Il peut être activé sur cet appareil en entrant votre phrase secrète.<br>Cela permettra la synchronisation des dossiers chiffrés existants. - - This account supports end-to-end encryption, but it needs to be set up first. - Ce compte supporte le chiffrement de bout en bout, mais il est d'abord nécessaire de le configurer. - - - Set up encryption Configurer le chiffrement - This account supports end-to-end encryption Ce compte prend en charge le chiffrement de bout en bout. - Connected to %1. Connecté au serveur %1. - Server %1 is temporarily unavailable. Le serveur %1 est temporairement indisponible. - Server %1 is currently in maintenance mode. Le serveur %1 est en cours de maintenance. - Signed out from %1. Session sur %1 fermée. - There are folders that were not synchronized because they are too big: Certains dossiers n'ont pas été synchronisés parce qu'ils sont de taille trop importante : - There are folders that were not synchronized because they are external storages: Certains dossiers n'ont pas été synchronisés parce qu'ils sont localisés sur un stockage externe : - There are folders that were not synchronized because they are too big or external storages: Certains dossiers n'ont pas été synchronisés parce qu'ils sont localisés sur un stockage externe ou qu'ils sont de taille trop importante : - - Open folder Ouvrir le dossier - Resume sync Reprendre la synchronisation - Pause sync Mettre en pause la synchronisation - <p>Could not create local folder <i>%1</i>.</p> <p>Impossible de créer le dossier local <i>%1</i>.</p> - <p>Do you really want to stop syncing the folder <i>%1</i>?</p><p><b>Note:</b> This will <b>not</b> delete any files.</p> <p>Voulez-vous vraiment arrêter de synchroniser le dossier <i>%1</i> ?</p><p><b>Note :</b> Aucun fichier ne sera supprimé.</p> - To protect your Cryptographic Identity, we encrypt it with a mnemonic of 12 dictionary words. Please note these down and keep them safe. They will be needed to add other devices to your account (like your mobile phone or laptop). Pour protéger votre identité cryptographique, nous la chiffrons avec une phrase secrète de 12 mots du dictionnaire. Veuillez la noter et la garder en sécurité. Elle sera nécessaire pour ajouter d’autres appareils à votre compte (comme votre smartphone ou votre ordinateur portable). - Disable end-to-end encryption Désactiver le chiffrement de bout en bout - Disable end-to-end encryption for %1? Désactiver le chiffrement de bout en bout pour %1 ? - Removing end-to-end encryption will remove locally-synced files that are encrypted.<br>Encrypted files will remain on the server. Le retrait du chiffrage de bout en bout supprimera localement les fichiers chiffrés synchronisés.<br>Les fichiers chiffrés demeureront sur le serveur. - %1 (%3%) of %2 in use. Some folders, including network mounted or shared folders, might have different limits. %1 (%3%) utilisés sur %2. Certains dossiers, montés depuis le réseau ou partagés, peuvent avoir des limites différentes. - %1 of %2 in use %1 utilisés sur %2 - Currently there is no storage usage information available. Actuellement aucune information d'utilisation de stockage n'est disponible. - %1 as %2 %1 avec le compte %2 - The server version %1 is unsupported! Proceed at your own risk. La version %1 du serveur n'est pas maintenue ! Vous prenez vos propres risques. - Server %1 is currently being redirected, or your connection is behind a captive portal. Le serveur %1 est actuellement redirigé ou votre connexion est derrière un portail captif. - Connecting to %1 … Connexion à %1 ... - Unable to connect to %1. Impossible de se connecter à %1. - Server configuration error: %1 at %2. Erreur de configuration serveur : %1 à %2. - You need to accept the terms of service at %1. Vous devez accepter les conditions d'utilisation ici %1. - No %1 connection configured. Aucune connexion à %1 configurée @@ -1063,17 +813,14 @@ Vous prenez vos propres risques. OCC::AccountSetupFromCommandLineJob - The authenticated request to the server was redirected to "%1". The URL is bad, the server is misconfigured. La requête authentifiée au serveur a été redirigée vers « %1 ». L'URL est mauvaise, le serveur est mal configuré. - Access forbidden by server. To verify that you have proper access, <a href="%1">click here</a> to access the service with your browser. Accès refusé par le serveur. Pour vérifier que vous disposez d'un accès approprié, <a href="%1">cliquez ici</a> pour accéder au service avec votre navigateur Web. - There was an invalid response to an authenticated WebDAV request Réponse invalide reçue suite à une requête WebDav authentifiée. @@ -1081,57 +828,46 @@ Vous prenez vos propres risques. OCC::AccountState - Signed out Session fermée - Disconnected Déconnecté - Connected Connecté - Service unavailable Service indisponible - Maintenance mode mode maintenance - Redirect detected Redirection détectée - Network error Erreur réseau - Configuration error Erreur de configuration - Asking Credentials informations d'identification demandées - Need the user to accept the terms of service Besoin que l'utilisateur accepte les conditions générales d'utilisation - Unknown account state État du compte inconnu @@ -1139,17 +875,14 @@ Vous prenez vos propres risques. OCC::ActivityListModel - For more activities please open the Activity app. Pour plus d'activités veuillez lancer l'application Activité. - Fetching activities … Récupération des activités... - Network error occurred: client will retry syncing. Une erreur de réseau est survenue : le client va réessayer la synchronisation. @@ -1157,42 +890,34 @@ Vous prenez vos propres risques. OCC::AddCertificateDialog - SSL client certificate authentication Authentification par certificat SSL client - This server probably requires a SSL client certificate. Ce serveur requiert probablement un certificat SSL client. - Certificate & Key (pkcs12): Certificat & clé (pkcs12) : - Certificate password: Mot de passe du certificat : - An encrypted pkcs12 bundle is strongly recommended as a copy will be stored in the configuration file. Un paquet pkcs12 chiffré est vivement recommandé vu qu'une copie sera stockée dans le fichier de configuration. - Browse … Parcourir … - Select a certificate Sélectionner un certificat - Certificate files (*.p12 *.pfx) Fichiers de certificats (*.p12 *.pfx) @@ -1200,71 +925,58 @@ Vous prenez vos propres risques. OCC::Application - Some settings were configured in %1 versions of this client and use features that are not available in this version.<br><br>Continuing will mean <b>%2 these settings</b>.<br><br>The current configuration file was already backed up to <i>%3</i>. Des paramètres ont été configurés dans des versions %1 de ce client et utilisent des fonctionnalités non disponibles dans la version actuelle. <br><br>Continuer impliquera que <b>ces paramètres seront %2</b>.<br><br> Le fichier de configuration actuel a été sauvegardé dans <i>%3</i>. - newer newer software version ultérieures - older older software version antérieures - ignoring ignorés - deleting supprimés - Quit Quitter - Continue Continuer - %1 accounts number of accounts imported %1 comptes - 1 account 1 compte - %1 folders number of folders imported %1 dossiers - 1 folder 1 dossier - Legacy import Importation héritée - Imported %1 and %2 from a legacy desktop client. %3 number of accounts and folders imported. list of users. @@ -1272,12 +984,10 @@ Vous prenez vos propres risques. %3 - Error accessing the configuration file Erreur lors de l'accès au fichier de configuration - There was an error while accessing the configuration file at %1. Please make sure the file can be accessed by your system account. Une erreur est survenue lors de l'accès au fichier de configuration à %1. Merci de vérifier que le fichier est accessible du compte système. @@ -1285,22 +995,18 @@ Vous prenez vos propres risques. OCC::AuthenticationDialog - Authentication Required Authentification requise - Enter username and password for "%1" at %2. - Saisir le nom d’utilisateur et le mot de passe pour « %1 » sur %2. + Saisir le nom d’utilisateur et le mot de passe pour « %1 » sur %2. - &Username: &Username: - &Password: &Password: @@ -1308,115 +1014,57 @@ Vous prenez vos propres risques. OCC::BasePropagateRemoteDeleteEncrypted - "%1 Failed to unlock encrypted folder %2". « %1 Impossible de déverrouiller le dossier chiffré %2 ». - Wrong HTTP code returned by server. Expected 204, but received "%1 %2". Le code HTTP retourné par le serveur n'est pas valide. La valeur attendue est 204 mais la valeur retournée est « %1 %2 ». - - OCC::BulkPropagatorDownloadJob - - - - File has changed since discovery - Le fichier a changé depuis la découverte - - - - Could not delete file record %1 from local DB - Impossible de supprimer l'enregistrement du fichier %1 de la base de données locale - - - - File %1 cannot be downloaded because it is non virtual! - Le document %1 ne peut pas être télécharger car il n'est pas virtuel ! - - - - Could not get file %1 from local DB - Impossible de récupérer le fichier %1 depuis la base de données locale - - - - File %1 cannot be downloaded because encryption information is missing. - Le fichier %1 ne peut pas être téléchargé car les informations de chiffrement sont manquantes. - - - - Error updating metadata: %1 - Erreur lors de la mise à jour des métadonnées : %1 - - - - The file %1 is currently in use - Le fichier %1 est en cours d'utilisation - - OCC::BulkPropagatorJob - File %1 cannot be uploaded because another file with the same name, differing only in case, exists Le fichier %1 ne peut être téléversé parce qu'un autre fichier avec le même nom hormis la casse existe - - File contains leading or trailing spaces and couldn't be renamed - Le fichier contient des espaces en début ou en fin de fichier et n'a pas pu être renommé - - - File %1 has invalid modified time. Do not upload to the server. Le fichier %1 présente une heure de modification invalide. Téléversement vers le serveur impossible. - File Removed (start upload) %1 Fichier retiré (début du téléversement) %1 - File %1 has invalid modification time. Do not upload to the server. Le fichier %1 présente une heure de modification invalide. Téléversement vers le serveur impossible. - Local file changed during syncing. It will be resumed. Fichier local modifié pendant la synchronisation. La synchronisation sera reprise. - - Local file changed during sync. Fichier local modifié pendant la synchronisation. - Network error: %1 Erreur réseau : %1 - Error updating metadata: %1 Erreur à la mise à jour des méta-données : %1 - The file %1 is currently in use Le fichier %1 est en cours d'utilisation - The local file was removed during sync. Le fichier local a été supprimé pendant la synchronisation. - Restoration failed: %1 Échec de la restauration : %1 @@ -1424,37 +1072,30 @@ Vous prenez vos propres risques. OCC::CaseClashConflictSolver - Cannot rename file because a file with the same name already exists on the server. Please pick another name. Impossible de renommer le fichier parce qu'un fichier portant le même nom existe déjà sur le serveur. Veuillez choisir un autre nom. - Could not rename file. Please make sure you are connected to the server. Impossible de renommer le fichier. Assurez-vous de bien être connecté au serveur. - You don't have the permission to rename this file. Please ask the author of the file to rename it. Vous n'avez pas les permissions de renommer ce fichier. Veuillez demander à son auteur de le renommer. - Failed to fetch permissions with error %1 Échec de récupération de permissions avec l'erreur %1 - Filename contains leading and trailing spaces. Le nom de fichier contient des espaces de début et de fin. - Filename contains leading spaces. Le nom de fichier contient des espaces de début. - Filename contains trailing spaces. Le nom de fichier contient des espaces de fin. @@ -1462,111 +1103,86 @@ Vous prenez vos propres risques. OCC::CaseClashFilenameDialog - Case Clash Conflict Conflit de casse - The file could not be synced because it generates a case clash conflict with an existing file on this system. Le fichier n'a pas pu être synchronisé parce qu'il génère un conflit de casse avec un fichier existant dans ce système. - Error Erreur - Existing file Fichier existant - file A fichier A - - today aujourd'hui - - 0 byte 0 octets - - Open existing file Ouvrir un fichier existant - Case clashing file Fichier avec conflit de casse - file B fichier B - - Open clashing file Ouvrir le fichier conflictuel - Please enter a new name for the clashing file: Veuillez saisir un nouveau nom pour le fichier conflictuel : - New filename Nouveau nom de fichier - Rename file Renomer le fichier - The file "%1" could not be synced because of a case clash conflict with an existing file on this system. Le fichier "%1" n'a pas pu être synchronisé à cause d'un conflit de casse avec un fichier existant dans ce système. - %1 does not support equal file names with only letter casing differences. %1 ne supporte pas les noms de fichiers identiques avec seulement des différences de casse de caractère. - Filename contains leading and trailing spaces. Le nom de fichier contient des espaces de début et de fin. - Filename contains leading spaces. Le nom de fichier contient des espaces de début. - Filename contains trailing spaces. Le nom de fichier contient des espaces de fin. - Use invalid name Nom invalide - Filename contains illegal characters: %1 Le nom du fichier contient des caractères illégaux : %1 @@ -1574,7 +1190,6 @@ Vous prenez vos propres risques. OCC::CleanupPollsJob - Error writing metadata to the database Erreur à l'écriture des métadonnées dans la base de données @@ -1582,33 +1197,27 @@ Vous prenez vos propres risques. OCC::ClientSideEncryption - Input PIN code Please keep it short and shorter than "Enter Certificate USB Token PIN:" Saisir le code PIN - Enter Certificate USB Token PIN: Entrez le PIN du jeton USB de certificat: - Invalid PIN. Login failed PIN invalide. Connexion échouée - Login to the token failed after providing the user PIN. It may be invalid or wrong. Please try again! - La connexion au token a échoué après la saisie du code PIN. Il est peut-être invalide ou erroné. Veuillez réessayer ! + La connexion au token a échoué après la saisie du code PIN. Il est peut-être invalide ou erroné. Veuillez réessayer ! - Please enter your end-to-end encryption passphrase:<br><br>Username: %2<br>Account: %3<br> Veuillez entrer votre phrase de passe de chiffrement de bout en bout :<br><br>Nom d'utilisateur : %2<br>Compte : %3<br> - Enter E2E passphrase Entrez la phrase secrète E2E @@ -1616,87 +1225,66 @@ Vous prenez vos propres risques. OCC::ConflictDialog - Sync Conflict Conflit de synchronisation - - Conflicting versions of %1. Versions en conflit de %1. - Which version of the file do you want to keep?<br/>If you select both versions, the local file will have a number added to its name. Quelle version du fichier souhaitez-vous garder ?<br/>Si vous sélectionnez les deux versions, le fichier local aura un numéro ajouté à son nom. - Local version Version locale - - Click to open the file Cliquez pour ouvrir le fichier - - today aujourd'hui - - 0 byte 0 octet - <a href="%1">Open local version</a> <a href="%1">Ouvrir la version locale</a> - Server version Version du serveur - <a href="%1">Open server version</a> <a href="%1">Ouvrir la version serveur</a> - - Keep selected version Conserver la version sélectionnée - Open local version Ouvrir la version locale - Open server version Ouvrir la version serveur - Keep both versions Conserver les deux versions - Keep local version Conserver la version locale - Keep server version Conserver la version serveur @@ -1704,14 +1292,10 @@ Vous prenez vos propres risques. OCC::ConflictSolver - - Error Erreur - - Moving file failed: %1 @@ -1720,17 +1304,14 @@ Vous prenez vos propres risques. %1 - Do you want to delete the directory <i>%1</i> and all its contents permanently? Voulez-vous supprimer le dossier <i>%1</i> et tout son contenu définitivement ? - Do you want to delete the file <i>%1</i> permanently? Voulez-vous supprimer le fichier <i>%1</i> définitivement ? - Confirm deletion Confirmer la suppression @@ -1738,32 +1319,26 @@ Vous prenez vos propres risques. OCC::ConnectionValidator - Timeout Délai d'attente - The configured server for this client is too old Le serveur configuré pour ce client est trop vieux - Please update to the latest server and restart the client. Veuillez mettre à jour le serveur vers la dernière version et redémarrer le client. - Authentication error: Either username or password are wrong. - Erreur d'authentification : nom d’utilisateur et/ou mot de passe incorrect(s). + Erreur d'authentification : nom d’utilisateur et/ou mot de passe incorrect(s). - No Nextcloud account configured Aucun compte Nextcloud n'est paramétré - The provided credentials are not correct Les informations d'identification fournies ne sont pas correctes @@ -1771,12 +1346,10 @@ Vous prenez vos propres risques. OCC::DiscoveryPhase - Error while canceling deletion of a file Erreur lors de l'annulation de la suppression d'un fichier - Error while canceling deletion of %1 Erreur lors de l'annulation de la suppression de %1 @@ -1784,19 +1357,14 @@ Vous prenez vos propres risques. OCC::DiscoverySingleDirectoryJob - - Server error: PROPFIND reply is not XML formatted! Erreur du serveur : La réponse PROPFIND n'est pas au format XML ! - - Encrypted metadata setup error! Erreur lors de la configuration des métadonnées chiffrées ! - Encrypted metadata setup error: initial signature from server is empty. Erreur de configuration des métadonnées chiffrées: la signature initiale du serveur est vide. @@ -1804,27 +1372,22 @@ Vous prenez vos propres risques. OCC::DiscoverySingleLocalDirectoryJob - Error while opening directory %1 Erreur à l’ouverture du dossier %1 - Directory not accessible on client, permission denied Dossier non accessible au client, permission refusée - Directory not found: %1 Dossier non trouvé : %1 - Filename encoding is not valid L’encodage du nom de fichier n’est pas valide - Error while reading directory %1 Erreur de lecture du dossier %1 @@ -1832,93 +1395,62 @@ Vous prenez vos propres risques. OCC::EditLocallyJob - - - - - - - - Could not start editing locally. Impossible de démarrer l'édition localement. - - An error occurred during setup. Une erreur est survenue pendant l'installation - - Could not find a file for local editing. Make sure its path is valid and it is synced locally. Impossible de trouver le fichier pour l'édition locale. Assurez-vous que le chemin est valide et qu'il est synchronisé localement. - - - - Could not find a file for local editing. Make sure it is not excluded via selective sync. Impossible de trouver le fichier pour l'édition locale. Assurez-vous qu'il n'est pas exclus par un filtre de synchronisation. - - - An error occurred during data retrieval. Une erreur est survenue pendant le rapatriement des données. - - An error occurred trying to synchronise the file to edit locally. Une erreur s'est produite lors de la synchronisation du fichier à éditer localement. - Server error: PROPFIND reply is not XML formatted! Erreur de serveur : La réponse de PROPFIND n'est pas formatée en XML ! - Could not find a remote file info for local editing. Make sure its path is valid. Impossible de trouver une info fichier distante pour l'édition locale. Assurez-vous que son chemin est valide. - Invalid local file path. Chemin d'accès au fichier local non valide. - Could not open %1 Impossible d'ouvrir %1 - Please try again. Merci de réessayer. - File %1 already locked. Fichier %1 déjà verrouillé. - - Lock will last for %1 minutes. You can also unlock this file manually once you are finished editing. Le verrouillage durera %1 minutes. Vous pouvez également déverrouiller ce fichier manuellement une fois que vous avez terminé l'édition. - File %1 now locked. Fichier %1 désormais verrouillé. - File %1 could not be locked. Impossible de verrouiller le fichier %1. @@ -1926,12 +1458,10 @@ Vous prenez vos propres risques. OCC::EditLocallyManager - Could not validate the request to open a file from server. Impossible de valider la requête pour ouvrir un fichier du serveur. - Please try again. Merci de réessayer. @@ -1939,34 +1469,26 @@ Vous prenez vos propres risques. OCC::EditLocallyVerificationJob - Invalid token received. Le jeton reçu est invalide. - - - Please try again. Merci de réessayer. - Invalid file path was provided. Un chemin d'accès au fichier invalide a été fourni. - Could not find an account for local editing. Impossible de trouver un compte pour l'édition locale. - Could not start editing locally. Impossible de démarrer l'édition locale. - An error occurred trying to verify the request to edit locally. Une erreur est survenue, tentative de vérification de la requête pour éditer localement. @@ -1974,7 +1496,6 @@ Vous prenez vos propres risques. OCC::EncryptFolderJob - Could not generate the metadata for encryption, Unlocking the folder. This can be an issue with your OpenSSL libraries. Impossible de générer les métadonnées pour le chiffrement, déverrouillage du dossier. @@ -1984,34 +1505,22 @@ Cela peut être un problème avec vos bibliothèques OpenSSL. OCC::EncryptedFolderMetadataHandler - - - - - - Error fetching metadata. Erreur à la récupération des méta-données. - - - Error locking folder. Erreur de verrouillage du dossier. - Error fetching encrypted folder ID. Erreur dans la récupération de l’ID du dossier chiffré. - Error parsing or decrypting metadata. Erreur lors du parsing ou du déchiffrement des métadonnées. - Failed to upload metadata Échec du téléversement des métadonnées @@ -2019,86 +1528,85 @@ Cela peut être un problème avec vos bibliothèques OpenSSL. OCC::FileDetails - %1 second(s) ago seconds elapsed since file last modified - Il y a %1 secondeIl y a %1 seconde(s)Il y a %1 seconde(s) + + Il y a %1 seconde + Il y a %1 seconde(s) + - %1 minute(s) ago minutes elapsed since file last modified - Il y a %1 minuteIl y a %1 minute(s)Il y a %1 minute(s) + + Il y a %1 minute + Il y a %1 minute(s) + - %1 hour(s) ago hours elapsed since file last modified - Il y a %1 heureIl y a %1 heure(s)Il y a %1 heure(s) + + Il y a %1 heure + Il y a %1 heure(s) + - %1 day(s) ago days elapsed since file last modified - Il y a %1 jourIl y a %1 jour(s)Il y a %1 jour(s) + + Il y a %1 jour + Il y a %1 jour(s) + - %1 month(s) ago months elapsed since file last modified - Il y a %1 moisIl y a %1 moisIl y a %1 mois + + Il y a %1 mois + Il y a %1 mois + - %1 year(s) ago years elapsed since file last modified - Il y a %1 anIl y a %1 an(s)Il y a %1 an(s) + + Il y a %1 an + Il y a %1 an(s) + - Locked by %1 - Expires in %2 minute(s) remaining time before lock expires - Verrouillé par %1 - Expire dans %2 minuteVerrouillé par %1 - Expire dans %2 minute(s)Verrouillé par %1 - Expire dans %2 minute(s) + + Verrouillé par %1 - Expire dans %2 minute + Verrouillé par %1 - Expire dans %2 minute(s) + OCC::Flow2Auth - The returned server URL does not start with HTTPS despite the login URL started with HTTPS. Login will not be possible because this might be a security issue. Please contact your administrator. L'URL renvoyée par le serveur ne commence pas par HTTPS alors que l'URL de connexion commence par HTTPS. La connexion ne sera pas possible car cela pourrait être un problème de sécurité. Veuillez contacter votre administrateur. - - Error returned from the server: <em>%1</em> Erreur renvoyée par le serveur : <em>%1</em> - The polling URL does not start with HTTPS despite the login URL started with HTTPS. Login will not be possible because this might be a security issue. Please contact your administrator. L'URL du sondage ne commence pas par HTTPS alors que l'URL de connexion commence par HTTPS. La connexion ne sera pas possible car cela pourrait être un problème de sécurité. Veuillez contacter votre administrateur. - - There was an error accessing the "token" endpoint: <br><em>%1</em> Une erreur est survenue en accédant au "jeton" : <br><em>%1</em> - - The reply from the server did not contain all expected fields La réponse du serveur ne contient pas tous les champs attendus - - The reply from the server did not contain all expected fields: <br><em>%1</em> - La réponse du serveur ne contenait pas tous les champs attendus : <br><em>%1</em> - - - - Could not parse the JSON returned from the server: <br><em>%1</em> Impossible d'analyser le JSON renvoyé par le serveur : <br><em>%1</em> @@ -2106,37 +1614,30 @@ Cela peut être un problème avec vos bibliothèques OpenSSL. OCC::Flow2AuthWidget - Unable to open the Browser, please copy the link to your Browser. Impossible d'ouvrir le navigateur, veuillez copier le lien dans votre navigateur Web. - Waiting for authorization En attente de l'autorisation - Polling for authorization En attente de l'autorisation - Starting authorization Démarrage de l'autorisation - Link copied to clipboard. Lien copié dans le presse-papier - Open Browser Ouvrir le navigateur - Copy Link Copier le lien @@ -2144,123 +1645,124 @@ Cela peut être un problème avec vos bibliothèques OpenSSL. OCC::Folder - %1 has been removed. %1 names a file. %1 a été supprimé. - %1 has been updated. %1 names a file. %1 a été mis à jour. - %1 has been renamed to %2. %1 and %2 name files. %1 a été renommé en %2. - %1 has been moved to %2. %1 a été déplacé vers %2. - %1 and %n other file(s) have been removed. - %1 a été supprimé.%1 et %n autres fichiers ont été supprimés.%1 et %n autre(s) fichier(s) ont été supprimés. + + %1 a été supprimé. + %1 et %n autres fichiers ont été supprimés. + - Please choose a different location. The folder %1 doesn't exist. Veuillez choisir un emplacement différent. Le dossier %1 n'existe pas. - Please choose a different location. %1 isn't a valid folder. Veuillez choisir un emplacement différent. %1 n'est pas un dossier valide. - Please choose a different location. %1 isn't a readable folder. Veuillez choisir un emplacement différent. %1 n'est pas un dossier lisible. - %1 and %n other file(s) have been added. - %1 et %n autre fichier ont été ajoutés.%1 et %n autres fichiers ont été ajoutés.%1 et %n autres fichiers ont été ajoutés. + + %1 et %n autre fichier ont été ajoutés. + %1 et %n autres fichiers ont été ajoutés. + - %1 has been added. %1 names a file. %1 a été ajouté. - %1 and %n other file(s) have been updated. - %1 a été mis à jour.%1 et %n autres fichiers ont été mis à jour.%1 et %n autres fichiers ont été mis à jour. + + %1 a été mis à jour. + %1 et %n autres fichiers ont été mis à jour. + - %1 has been renamed to %2 and %n other file(s) have been renamed. - %1 a été renommé en %2.%1 a été renommé en %2 et %n autres fichiers ont été renommés.%1 a été renommé en %2 et %n autres fichiers ont été renommés. + + %1 a été renommé en %2. + %1 a été renommé en %2 et %n autres fichiers ont été renommés. + - %1 has been moved to %2 and %n other file(s) have been moved. - %1 a été déplacé vers %2.%1 a été déplacé vers %2 et %n autres fichiers ont été déplacés.%1 a été déplacé vers %2 et %n autres fichiers ont été déplacés. + + %1 a été déplacé vers %2. + %1 a été déplacé vers %2 et %n autres fichiers ont été déplacés. + - %1 has and %n other file(s) have sync conflicts. - %1 a un conflit de synchronisation.%1 et %n autres fichiers ont des problèmes de synchronisation.%1 et %n autres fichiers ont des problèmes de synchronisation. + + %1 a un conflit de synchronisation. + %1 et %n autres fichiers ont des problèmes de synchronisation. + - %1 has a sync conflict. Please check the conflict file! %1 a un problème de synchronisation. Merci de vérifier le fichier conflit ! - %1 and %n other file(s) could not be synced due to errors. See the log for details. - %1 ne peut pas être synchronisé en raison d'erreurs. Consultez les logs pour les détails.%1 et %n autres fichiers n'ont pas pu être synchronisés en raison d'erreurs. Consultez les logs pour les détails.%1 et %n autres fichiers n'ont pas pu être synchronisés en raison d'erreurs. Consultez les logs pour les détails. + + %1 ne peut pas être synchronisé en raison d'erreurs. Consultez les logs pour les détails. + %1 et %n autres fichiers n'ont pas pu être synchronisés en raison d'erreurs. Consultez les logs pour les détails. + - %1 could not be synced due to an error. See the log for details. %1 n'a pu être synchronisé pour cause d'erreur. Consultez les logs pour les détails. - %1 and %n other file(s) are currently locked. - %1 et %n autre fichier sont verrouillés.%1 et %n autres fichiers sont verrouillés.%1 et %n autres fichiers sont verrouillés. + + %1 et %n autre fichier sont verrouillés. + %1 et %n autres fichiers sont verrouillés. + - %1 is currently locked. %1 est actuellement verrouillé. - Sync Activity Activité de synchronisation - Could not read system exclude file Impossible de lire le fichier d'exclusion du système - A new folder larger than %1 MB has been added: %2. Un nouveau dossier de taille supérieure à %1 Mo a été ajouté : %2. - A folder from an external storage has been added. Un nouveau dossier localisé sur un stockage externe a été ajouté. @@ -2268,49 +1770,40 @@ Cela peut être un problème avec vos bibliothèques OpenSSL. - Please go in the settings to select it if you wish to download it. Merci d'aller dans les Paramètres pour indiquer si vous souhaitez le télécharger. - A folder has surpassed the set folder size limit of %1MB: %2. %3 Un dossier a dépassé la taille limite fixée de %1 Mo : %2. %3 - Keep syncing Continuer la synchronisation - Stop syncing Arrêter la synchronisation - The folder %1 has surpassed the set folder size limit of %2MB. Le dossier %1 a dépassé la taille limite fixée de %2 Mo. - Would you like to stop syncing this folder? Voulez vous arrêter la synchronisation de ce dossier ? - The folder %1 was created but was excluded from synchronization previously. Data inside it will not be synchronized. Le dossier %1 a été créé mais il était exclu de la synchronisation auparavant. Les données qu'il contient ne seront pas synchronisées. - The file %1 was created but was excluded from synchronization previously. It will not be synchronized. Le fichier %1 a été créé mais il était exclu de la synchronisation auparavant. Il ne sera pas synchronisé. - Changes in synchronized folders could not be tracked reliably. This means that the synchronization client might not upload local changes immediately and will instead only scan for local changes and upload them occasionally (every two hours by default). @@ -2323,45 +1816,38 @@ Cela signifie que le client de bureau ne va pas téléverser immédiatement les %1 - Virtual file download failed with code "%1", status "%2" and error message "%3" Le téléchargement du fichier virtuel a échoué avec le code « %1 », état « %2 » et le message d'erreur « %3 » - A large number of files in the server have been deleted. -Please confirm if you'd like to proceed with these deletions. +Please confirm if you'd like to proceed with these deletions. Alternatively, you can restore all deleted files by uploading from '%1' folder to the server. Un grand nombre de fichiers du serveur ont été supprimés. Veuillez confirmer si vous souhaitez procéder à ces suppressions. Vous pouvez également restaurer tous les fichiers supprimés en les téléversant depuis le dossier '%1' vers le serveur. - - A large number of files in your local '%1' folder have been deleted. -Please confirm if you'd like to proceed with these deletions. + A large number of files in your local '%1' folder have been deleted. +Please confirm if you'd like to proceed with these deletions. Alternatively, you can restore all deleted files by downloading them from the server. Un grand nombre de fichiers de votre dossier local '%1' ont été supprimés. Veuillez confirmer si vous souhaitez procéder à ces suppressions. Vous pouvez également restaurer tous les fichiers supprimés en les téléchargeant depuis le serveur. - Remove all files? Supprimer tous les fichiers ? - Proceed with Deletion Procéder à la suppression - Restore Files to Server Restaurer les fichiers sur le serveur - Restore Files from Server Restaurer des fichiers à partir du serveur @@ -2369,27 +1855,22 @@ Vous pouvez également restaurer tous les fichiers supprimés en les télécharg OCC::FolderCreationDialog - Create new folder Créer un nouveau dossier - Enter folder name Saisissez le nom du dossier - Folder already exists Le dossier existe déjà - Error Erreur - Could not create a folder! Check your write permissions. Impossible de créer le dossier ! Veuillez vérifier vos permissions d’écriture. @@ -2397,136 +1878,108 @@ Vous pouvez également restaurer tous les fichiers supprimés en les télécharg OCC::FolderMan - Could not reset folder state Impossible de réinitialiser l'état du dossier - (backup) (sauvegarde) - (backup %1) (sauvegarde %1) - An old sync journal "%1" was found, but could not be removed. Please make sure that no application is currently using it. Un ancien fichier journal "%1" a été trouvé, mais ne peut être supprimé. Veuillez vous assurer qu’aucune application ne l'utilise en ce moment. - Undefined state. Statut indéfini. - Waiting to start syncing. En attente de synchronisation. - Preparing for sync. Préparation de la synchronisation. - Syncing %1 of %2 (A few seconds left) Synchronisation de %1 sur %2 (il reste quelques secondes) - Syncing %1 of %2 (%3 left) Synchronisation de %1 sur %2 (%3 restant⸱s) - Syncing %1 of %2 Synchronisation de %1 sur %2 - Syncing %1 (A few seconds left) Synchronisation de %1 (il reste quelques secondes) - Syncing %1 (%2 left) Synchronisation de %1 (%2 restant⸱s) - Syncing %1 Synchronisation de %1 - Sync is running. Synchronisation en cours - Sync finished with unresolved conflicts. Synchronisation terminée avec des conflits non résolus. - Last sync was successful. Synchronisation terminée avec succès - Setup error. Erreur de paramétrage. - Sync request was cancelled. La requête de synchronisation a été annulée. - Please choose a different location. The selected folder isn't valid. Veuillez choisir un emplacement différent. Le dossier sélectionné n'est pas valide. - - Please choose a different location. %1 is already being used as a sync folder. Veuillez choisir un emplacement différent. %1 est déjà utilisé comme dossier de synchronisation. - Please choose a different location. The path %1 doesn't exist. Veuillez choisir un emplacement différent. Le chemin %1 n'existe pas. - Please choose a different location. The path %1 isn't a folder. Veuillez choisir un emplacement différent. Le chemin %1 n'est pas un dossier. - - Please choose a different location. You don't have enough permissions to write to %1. folder location Veuillez choisir un emplacement différent. Vous ne disposez pas d'autorisations suffisantes pour écrire dans %1. - Please choose a different location. %1 is already contained in a folder used as a sync folder. Veuillez choisir un emplacement différent. %1 est déjà contenu dans un dossier utilisé comme dossier de synchronisation. - Please choose a different location. %1 is already being used as a sync folder for %2. folder location, server url Veuillez choisir un emplacement différent. %1 est déjà utilisé comme dossier de synchronisation pour %2. - The folder %1 is linked to multiple accounts. This setup can cause data loss and it is no longer supported. To resolve this issue: please remove %1 from one of the accounts and create a new sync folder. @@ -2537,12 +1990,10 @@ Pour résoudre ce problème: veuillez enlever %1 d'un des comptes et créer Pour les utilisateurs avancés: ce problème peut aussi venir de plusieurs fichiers de bases de données de synchronisation dans un seul dossier. Veuillez vérifier si %1 contient des fichiers .sync_*.db périmés ou inutilisés et supprimez-les. - Sync is paused. La synchronisation est en pause. - %1 (Sync is paused) %1 (Synchronisation en pause) @@ -2550,12 +2001,10 @@ Pour les utilisateurs avancés: ce problème peut aussi venir de plusieurs fichi OCC::FolderStatusDelegate - Add Folder Sync Connection Ajouter une synchronisation de dossier - File Fichier @@ -2563,156 +2012,128 @@ Pour les utilisateurs avancés: ce problème peut aussi venir de plusieurs fichi OCC::FolderStatusModel - You need to be connected to add a folder Vous devez être connecté pour ajouter un dossier - Click this button to add a folder to synchronize. Cliquez sur ce bouton pour ajouter un dossier à synchroniser. - Could not decrypt! Déchiffrage impossible ! - - %1 (%2) %1 (%2) - Error while loading the list of folders from the server. Une erreur est survenue lors du chargement de la liste des dossiers depuis le serveur. - Virtual file support is enabled. Support des fichiers virtuels activé. - Signed out Session fermée - Synchronizing virtual files in local folder Synchronisation des fichiers virtuels dans le dossier local - Synchronizing files in local folder Synchronisation des fichiers dans le dossier local - Checking for changes in remote "%1" Vérification des modifications dans "%1" distant - Checking for changes in local "%1" Vérification des modifications dans "%1" local - Syncing local and remote changes Synchronisation des changements locaux et distants - %1 %2 … - Example text: "Uploading foobar.png (1MB of 2MB) time left 2 minutes at a rate of 24Kb/s" Example text: "Syncing 'foo.txt', 'bar.txt'" + Example text: "Uploading foobar.png (1MB of 2MB) time left 2 minutes at a rate of 24Kb/s" Example text: "Syncing 'foo.txt', 'bar.txt'" %1 %2 … - Download %1/s Example text: "Download 24Kb/s" (%1 is replaced by 24Kb (translated)) Télécharger %1/s - File %1 of %2 Fichier %1 sur %2 - There are unresolved conflicts. Click for details. Il y a des conflits non résolus. Cliquez pour plus de détails. - - , , - Fetching folder list from server … Récupération de la liste des dossiers depuis le serveur... - ↓ %1/s ↓ %1/s - Upload %1/s Example text: "Upload 24Kb/s" (%1 is replaced by 24Kb (translated)) Téléverser %1/s - ↑ %1/s ↑ %1/s - %1 %2 (%3 of %4) Example text: "Uploading foobar.png (2MB of 2MB)" %1 %2 (%3 sur %4) - %1 %2 Example text: "Uploading foobar.png" %1 %2 - A few seconds left, %1 of %2, file %3 of %4 Example text: "5 minutes left, 12 MB of 345 MB, file 6 of 7" Quelques secondes restantes, %1 de %2, fichier %3 parmi %4 - %5 left, %1 of %2, file %3 of %4 %5 restantes, %1 sur %2, fichier %3 sur %4 - %1 of %2, file %3 of %4 Example text: "12 MB of 345 MB, file 6 of 7" %1 sur %2, fichier %3 sur %4 - Waiting for %n other folder(s) … - En attente de %n autre dossier ...En attente de %n autres dossiers ...En attente de %n autres dossiers ... + + En attente de %n autre dossier ... + En attente de %n autres dossiers ... + - About to start syncing Sur le point de démarrer la synchronisation - Preparing to sync … Préparation de la synchronisation ... @@ -2720,7 +2141,6 @@ Pour les utilisateurs avancés: ce problème peut aussi venir de plusieurs fichi OCC::FolderWatcher - The watcher did not receive a test notification. L'observateur n'a pas reçu de notification de test. @@ -2728,7 +2148,6 @@ Pour les utilisateurs avancés: ce problème peut aussi venir de plusieurs fichi OCC::FolderWatcherPrivate - This problem usually happens when the inotify watches are exhausted. Check the FAQ for details. Ce problème survient généralement lorsque les points de surveillance inotify sont épuisés. Consultez la FAQ pour plus de détails. @@ -2736,12 +2155,10 @@ Pour les utilisateurs avancés: ce problème peut aussi venir de plusieurs fichi OCC::FolderWizard - Add Folder Sync Connection Ajouter une connexion de synchronisation de dossiers - Add Sync Connection Ajouter la synchronisation @@ -2749,17 +2166,14 @@ Pour les utilisateurs avancés: ce problème peut aussi venir de plusieurs fichi OCC::FolderWizardLocalPath - Click to select a local folder to sync. Cliquez pour choisir un dossier local à synchroniser. - Enter the path to the local folder. Entrez le chemin du dossier local. - Select the source folder Sélectionnez le dossier source @@ -2767,74 +2181,53 @@ Pour les utilisateurs avancés: ce problème peut aussi venir de plusieurs fichi OCC::FolderWizardRemotePath - Create Remote Folder Créer un dossier distant - Enter the name of the new folder to be created below "%1": Entrez le nom du nouveau dossier à créer dans "%1" : - Folder was successfully created on %1. Le dossier a été créé sur %1 - Authentication failed accessing %1 Erreur d'authentification lors de l'accès à %1 - Failed to create the folder on %1. Please check manually. Échec à la création du dossier sur %1. Veuillez vérifier manuellement. - Failed to list a folder. Error: %1 Impossible de lister un dossier. Erreur : %1 - Choose this to sync the entire account Sélectionnez ceci pour synchroniser l'ensemble du compte - - - Please choose a different location. %1 is already being synced to %2. Veuillez choisir un emplacement différent. %1 est déjà synchronisé avec %2. - - - You are already syncing the subfolder %1 at %2. - - OCC::FolderWizardSelectiveSync - - Use virtual files instead of downloading content immediately %1 Utiliser les fichiers virtuels au lieu de télécharger le contenu immédiatement %1 - - (experimental) (expérimental) - Virtual files are not supported for Windows partition roots as local folder. Please choose a valid subfolder under drive letter. Vous ne pouvez pas définir la racine d'une partition Windows pour votre dossier local. Veuillez choisir un (sous)dossier de la partition. - Virtual files are not supported at the selected location Les fichiers virtuels ne sont pas pris en charge à l'emplacement sélectionné @@ -2842,27 +2235,22 @@ Pour les utilisateurs avancés: ce problème peut aussi venir de plusieurs fichi OCC::GETFileJob - No E-Tag received from server, check Proxy/Gateway Aucun E-Tag reçu du serveur, vérifiez le proxy / la passerelle - We received a different E-Tag for resuming. Retrying next time. Nous avons reçu un E-Tag différent pour reprendre le téléchargement. Nouvel essai la prochaine fois. - We received an unexpected download Content-Length. Nous avons reçu un téléchargement de Contenu-Longeur inattendu - Server returned wrong content-range Le serveur a retourné une gamme de contenu erronée - Connection Timeout Délai d'attente de connexion dépassé @@ -2870,199 +2258,151 @@ Pour les utilisateurs avancés: ce problème peut aussi venir de plusieurs fichi OCC::GeneralSettings - General Settings Paramètres généraux - Show Call Notifications Afficher les notifications d'appel - For System Tray Pour la zone de notification système - Show Chat Notifications Afficher les notifications de discussion - Show Server &Notifications Afficher les &notifications serveur - Advanced Avancés - MB Trailing part of "Ask confirmation before syncing folder larger than" Mo - Ask for confirmation before synchronizing external storages Demander confirmation avant de synchroniser des stockages externes - &Launch on System Startup &Lancer au démarrage du système - Use &Monochrome Icons Utiliser les icônes &monochromes - Ask for confirmation before synchronizing new folders larger than Demander confirmation avant de synchroniser les dossiers plus grands que - Notify when synchronised folders grow larger than specified limit Notifier lorsque les dossiers synchronisés dépassent la limite spécifiée - Automatically disable synchronisation of folders that overcome limit Désactiver automatiquement la synchronisation des dossiers qui dépassent la limite fixée - Move removed files to trash Déplacer les fichiers supprimés vers la corbeille - Show sync folders in &Explorer's navigation pane Afficher les dossiers synchronisés dans le panneau de navigation de l'&Explorateur de fichiers - S&how crash reporter Affic&her le rapport d'incident - Server poll interval Intervalle de vérification du serveur - seconds (if <a href="https://github.com/nextcloud/notify_push">Client Push</a> is unavailable) secondes (si le Client Push n'est pas disponible) - Edit &Ignored Files Modifier les fichiers exclus - - Create Debug Archive Créer une archive de débogage - Info Informations - Desktop client x.x.x Client de bureau x.x.x - Update channel Canal de mise à jour - &Automatically check for updates &Vérifier automatiquement les mises à jour - Check Now Vérifier maintenant - Usage Documentation Documentation d'utilisation - Legal Notice Mentions légales - - Restore &Default - Restaurer les valeurs par défaut - - - &Restart && Update Redémarrer et Mettre à jour - Server notifications that require attention. Notifications du serveur requérant votre attention. - Show chat notification dialogs. Afficher les boîtes de dialogue de notification de chat. - Show call notification dialogs. Montre les fenêtres de notification d'appel. - You cannot disable autostart because system-wide autostart is enabled. Vous ne pouvez pas désactiver le démarrage automatique parce que le démarrage automatique à l'échelle du système est activé. - - Restore to &%1 - Rétablir vers &%1 - - - stable stable - beta bêta - daily quotidien - enterprise enterprise - - beta: contains versions with new features that may not be tested thoroughly - daily: contains versions created daily only for testing and development @@ -3074,7 +2414,6 @@ Downgrading versions is not possible immediately: changing from beta to stable m La rétrogradation des versions n'est pas possible immédiatement: passer de la version bêta à la version stable signifie attendre la nouvelle version stable. - - enterprise: contains stable versions for customers. Downgrading versions is not possible immediately: changing from stable to enterprise means waiting for the new enterprise version. @@ -3084,12 +2423,10 @@ Downgrading versions is not possible immediately: changing from stable to enterp La rétrogradation des versions n'est pas possible immédiatement: passer de stable à entreprise signifie attendre la nouvelle version d'entreprise. - Changing update channel? Changement du canal de mise à jour ? - The channel determines which upgrades will be offered to install: - stable: contains tested versions considered reliable @@ -3099,55 +2436,41 @@ La rétrogradation des versions n'est pas possible immédiatement: passer d - Change update channel Changer de canal de mise à jour - Cancel Annuler - Zip Archives Archives Zip - Debug Archive Created Archive de débogage créée - Debug archive is created at %1 Archive de débogage créée à %1 - - - Redact information deemed sensitive before sharing! Debug archive created at %1 - - OCC::GetOrCreatePublicLinkShare - Password for share required Mot de passe requis - Please enter a password for your link share: Veuillez saisir un mot de passe pour votre lien partagé : - Sharing error Erreur de partage - Could not retrieve or create the public link share. Error: %1 @@ -3159,22 +2482,18 @@ La rétrogradation des versions n'est pas possible immédiatement: passer d OCC::HttpCredentialsGui - Please enter %1 password:<br><br>Username: %2<br>Account: %3<br> Merci de saisir %1 mot de passe :<br><br>Identifiant : %2<br>Compte : %3<br> - Reading from keychain failed with error: "%1" La lecture à partir du trousseau a échoué avec l'erreur : "%1" - Enter Password Saisissez le mot de passe - <a href="%1">Click here</a> to request an app password from the web interface. <a href="%1">Cliquez ici</a> pour demander un mot de passe d'application depuis l'interface web. @@ -3182,27 +2501,22 @@ La rétrogradation des versions n'est pas possible immédiatement: passer d OCC::IgnoreListEditor - Ignored Files Editor Éditeur d'exclusion de fichiers - Global Ignore Settings Paramètres globaux d'exclusion - Sync hidden files Synchroniser les fichiers cachés - Files Ignored by Patterns Fichiers ignorés par modèles - This entry is provided by the system at "%1" and cannot be modified in this view. Cette entrée est fournie par le système dans "%1" et ne peut être modifiée dans cette vue. @@ -3210,32 +2524,26 @@ La rétrogradation des versions n'est pas possible immédiatement: passer d OCC::IgnoreListTableWidget - Pattern Modèle - Allow Deletion Autoriser la suppression - Add Ajouter - Remove Retirer - Remove all Tout retirer - Files or folders matching a pattern will not be synchronized. Items where deletion is allowed will be deleted if they prevent a directory from being removed. This is useful for meta data. @@ -3243,22 +2551,18 @@ Items where deletion is allowed will be deleted if they prevent a directory from Les éléments dont la suppression est autorisée seront supprimés s'ils empêchent la suppression d'un répertoire. Cette fonction est utile pour les métadonnées. - Could not open file Impossible d'ouvrir le fichier - Cannot write changes to "%1". Impossible d'écrire les modifications sur "%1". - Add Ignore Pattern Ajouter un modèle d'exclusion - Add a new ignore pattern: Ajouter un nouveau modèle d'exclusion : @@ -3266,159 +2570,117 @@ Les éléments dont la suppression est autorisée seront supprimés s'ils e OCC::InvalidFilenameDialog - Invalid filename Nom de fichier invalide - The file could not be synced because it contains characters which are not allowed on this system. Le fichier n'a pas pu être synchronisé parce qu'il contiens des caractères invalides ou non-supportés par votre système. - Error Erreur - Please enter a new name for the file: Veuillez saisir le nouveau nom du fichier : - New filename Nouveau nom de fichier - Rename file Renommer le fichier - The file "%1" could not be synced because the name contains characters which are not allowed on this system. Le fichier "%1" n'a pas pu être synchronisé car son nom contient des caractères qui ne sont pas autorisés sur ce système. - The following characters are not allowed on the system: \ / : ? * " < > | leading/trailing spaces Les caractères suivants ne sont pas autorisés sur ce système : \ / : ? * " < > | espaces en début et fin de chaîne - The file "%1" could not be synced because the name contains characters which are not allowed on the server. Le fichier "%1" n'a pas pu être synchronisé, car le nom contient des caractères qui ne sont pas autorisés sur le serveur. - The following characters are not allowed: %1 Les caractères suivants ne sont pas autorisés : %1 - The following basenames are not allowed: %1 Les noms de base suivants de fichiers ne sont pas autorisés : %1 - The following filenames are not allowed: %1 Les noms de fichiers suivants ne sont pas autorisés : %1 - The following file extensions are not allowed: %1 Les extensions de fichiers suivantes ne sont pas autorisées : %1 - Checking rename permissions … Vérification des permissions de renommage... - You don't have the permission to rename this file. Please ask the author of the file to rename it. Vous n'avez pas la permission de renommer ce fichier. Veuillez demander à son auteur de le renommer. - Failed to fetch permissions with error %1 Erreur à la récupération des permissions : %1 - Filename contains leading and trailing spaces. Le nom de fichier contient des espaces en début ou en fin de chaîne. - Filename contains leading spaces. Le nom du fichier contient des espaces au début. - Filename contains trailing spaces. Le nom de fichier contient des espaces à la fin. - Use invalid name Nom invalide - Filename contains illegal characters: %1 Le nom du fichier contiens des caractères illégaux: %1 - Could not rename file. Please make sure you are connected to the server. Impossible de renommer le fichier. Veuillez vous certifier que vous êtes bien connecté au serveur. - Cannot rename file because a file with the same name does already exist on the server. Please pick another name. Impossible de renommer le fichier parce qu'un fichier avec le même nom existe déjà sur le serveur. Merci de choisir un autre nom. - Could not rename local file. %1 Impossible de renommer le dossier local %1 - - OCC::LegacyAccountSelectionDialog - - - Legacy import - - - - - Select the accounts to import from the legacy configuration: - - - OCC::LegalNotice - - Legal notice Notice légale - Close Fermer - <p>Copyright 2017-2025 Nextcloud GmbH<br />Copyright 2012-2023 ownCloud GmbH</p> <p>Copyright 2017-2025 Nextcloud GmbH<br />Copyright 2012-2023 ownCloud GmbH</p> - <p>Licensed under the GNU General Public License (GPL) Version 2.0 or any later version.</p> <p>Sous licence GNU General Public License (GPL) Version 2.0 ou supérieure.</p> @@ -3426,12 +2688,10 @@ Les éléments dont la suppression est autorisée seront supprimés s'ils e OCC::LogBrowser - Log Output Consigner la sortie dans des fichiers de log - The client can write debug logs to a temporary folder. These logs are very helpful for diagnosing problems. Since log files can get large, the client will start a new one for each sync run and compress older ones. It will also delete log files after a couple of hours to avoid consuming too much disk space. If enabled, logs will be written to %1 @@ -3440,19 +2700,16 @@ Comme ces fichiers de log peuvent devenir lourds, le client en commence un nouve Si activés, les logs seront écrits dans %1 - Enable logging to temporary folder Activer la journalisation dans le dossier temporaire - This setting persists across client restarts. Note that using any logging command line options will override this setting. Ce paramètre persiste lors des redémarrages du client. Notez que l'utilisation de toute option de ligne de commande de journalisation remplacera ce paramètre. - Open folder Ouvrir le dossier @@ -3460,14 +2717,10 @@ Notez que l'utilisation de toute option de ligne de commande de journalisat OCC::Logger - - Error Erreur - - <nobr>File "%1"<br/>cannot be opened for writing.<br/><br/>The log output <b>cannot</b> be saved!</nobr> <nobr>Le fichier "%1"<br/>ne peut pas être ouvert en écriture.<br/><br/>Le fichier journal <b>ne peut pas</b> être sauvegardé !</nobr> @@ -3475,32 +2728,26 @@ Notez que l'utilisation de toute option de ligne de commande de journalisat OCC::Mac::FileProviderEditLocallyJob - Could not start editing locally. Impossible de démarrer l'édition locale. - An error occurred during setup. Une erreur est survenue pendant l'installation - Could not find a file for local editing. Make sure its path is valid and it is synced locally. Impossible de trouver un fichier à modifier localement. Assurez-vous que son chemin est valide et qu'il est synchronisé localement. - Could not get file ID. Impossible d'obtenir l'identifiant du fichier. - Could not get file identifier. Impossible d'obtenir l'identifiant du fichier. - The file identifier is empty. L'identifiant du fichier est vide. @@ -3508,47 +2755,38 @@ Notez que l'utilisation de toute option de ligne de commande de journalisat OCC::NSISUpdater - New Version Available Nouvelle version disponible - <p>A new version of the %1 Client is available.</p><p><b>%2</b> is available for download. The installed version is %3.</p> <p>Une nouvelle version du client %1 est disponible.</p><p><b>%2</b> est disponible en téléchargement. La version actuellement installée est %3.<p> - Update Failed Échec de mise à jour - <p>A new version of the %1 Client is available but the updating process failed.</p><p><b>%2</b> has been downloaded. The installed version is %3. If you confirm restart and update, your computer may reboot to complete the installation.</p> <p>Une nouvelle version du Client %1 est disponible mais la mise à jour a échoué.</p><p><b>%2</b> a été téléchargé. La version installée est %3. Si vous confirmez le redémarrage et la mise à jour, votre ordinateur peut redémarrer pour terminer l'installation.</p> - Ask again later Demander plus tard - Restart and update Redémarrer et mettre à jour - Update manually Mettre à jour manuellement - Skip this time Ignorer pour cette fois - Get update Télécharger la version @@ -3556,109 +2794,82 @@ Notez que l'utilisation de toute option de ligne de commande de journalisat OCC::NetworkSettings - Proxy Settings Paramètres de serveur proxy - Use system proxy Utiliser les paramètres du système - Host Hôte - Proxy server requires authentication Le serveur proxy requiert une authentification - Download Bandwidth Bande passante de réception - - Limit to Limiter à - - KBytes/s Ko/s - Note: proxy settings have no effects for accounts on localhost Remarque: les paramètres de proxy n'ont aucun effet sur les comptes sur localhost - Manually specify proxy Spécifier manuellement le serveur proxy - No proxy Aucun serveur proxy - - - Use global settings Utiliser les paramètres globaux - - No limit Aucune limite - - Limit to 3/4 of estimated bandwidth Limiter aux 3/4 de la bande passante estimée - Upload Bandwidth Bande passante d'émission - - Limit automatically Limiter automatiquement - Hostname of proxy server Nom d'hôte du serveur proxy - Username for proxy server Nom d’utilisateur pour le serveur proxy - Password for proxy server Mot de passe pour le serveur proxy - HTTP(S) proxy Proxy HTTP(S) - SOCKS5 proxy Proxy SOCKS5 @@ -3666,77 +2877,54 @@ Notez que l'utilisation de toute option de ligne de commande de journalisat OCC::OCUpdater - Could not check for new updates. Impossible de vérifier la présence de nouvelles mises à jour. - Checking update server … Vérification du serveur de mises à jour ... - New %1 update ready Une nouvelle mise à jour de %1 est disponible - A new update for %1 is about to be installed. The updater may ask for additional privileges during the process. Your computer may reboot to complete the installation. Une nouvelle mise à jour pour %1 est sur le point d'être installée. Le dispositif de mise à jour peut demander des autorisations supplémentaires au cours du processus. Votre ordinateur peut nécessiter un redémarrage pour terminer l'installation. - Downloading %1 … Téléchargement de %1 … - %1 available. Restart application to start the update. %1 disponible. Redémarrez l'application pour effectuer la mise à jour. - Could not download update. Please open <a href='%1'>%1</a> to download the update manually. Impossible de télécharger la mise à jour. Merci d'ouvrir <a href='%1'>%1</a> pour télécharger la mise à jour manuellement. - Could not download update. Please open %1 to download the update manually. Impossible de télécharger la mise à jour. Ouvrez %1 pour télécharger manuellement la mise à jour. - New %1 is available. Please open <a href='%2'>%2</a> to download the update. Un nouveau %1 est disponible. Merci d'ouvrir <a href='%2'>%2</a> pour télécharger la mise à jour. - New %1 is available. Please open %2 to download the update. Un nouveau %1 est disponible. Merci d'ouvrir %2 pour télécharger la mise à jour. - Update status is unknown: Did not check for new updates. L'état du processus de mise à jour est inconnu. Impossible de vérifier la présence de mises à jour. - - You are using the %1 update channel. Your installation is the latest version. - Vous utilisez le canal de mise à jour %1. Votre installation est la dernière version. - - - - No updates available. Your installation is the latest version. - Aucune mise à jour n'est disponible. Votre installation est la dernière version. - - - No updates available. Your installation is at the latest version. Aucune mise à jour disponible. Votre installation est à jour. - Update Check Recherche de mise à jour @@ -3744,72 +2932,55 @@ Notez que l'utilisation de toute option de ligne de commande de journalisat OCC::OwncloudAdvancedSetupPage - Connect Connexion - - (experimental) (expérimental) - - Use &virtual files instead of downloading content immediately %1 Utiliser les fichiers virtuels plutôt que de télécharger le contenu immédiatement %1 - Virtual files are not supported for Windows partition roots as local folder. Please choose a valid subfolder under drive letter. Les fichiers virtuels ne sont pas pris en charge pour les racines de partition Windows en tant que dossier local. Veuillez choisir un sous-dossier valide sous la lettre du lecteur. - %1 folder "%2" is synced to local folder "%3" Le dossier %1 "%2" est synchronisé avec le dossier local "%3". - Sync the folder "%1" Synchroniser le dossier "%1" - Warning: The local folder is not empty. Pick a resolution! Avertissement : Le dossier local n'est pas vide. Choisissez une option. - - %1 free space %1 gets replaced with the size and a matching unit. Example: 3 MB or 5 GB espace libre %1 - Virtual files are not supported at the selected location Les fichiers virtuels ne sont pas pris en charge à l'emplacement sélectionné - Local Sync Folder Dossier de synchronisation local - - (%1) (%1) - There isn't enough free space in the local folder! L'espace libre dans le dossier local est insuffisant ! - In Finder's "Locations" sidebar section Dans la section « Emplacements » de la barre latérale du Finder @@ -3817,32 +2988,26 @@ Notez que l'utilisation de toute option de ligne de commande de journalisat OCC::OwncloudConnectionMethodDialog - Connection failed Échec de la connexion - <html><head/><body><p>Failed to connect to the secure server address specified. How do you wish to proceed?</p></body></html> <html><head/><body><p>Impossible de se connecter au serveur via l'adresse sécurisée indiquée. Que souhaitez-vous faire ?</p></body></html> - Select a different URL Choisir une URL différente - Retry unencrypted over HTTP (insecure) Essayer en clair sur HTTP (non sécurisé) - Configure client-side TLS certificate Configurer le certificat TLS client - <html><head/><body><p>Failed to connect to the secure server address <em>%1</em>. How do you wish to proceed?</p></body></html> <html><head/><body><p>Impossible de se connecter à l'adresse sécurisée <em>%1</em>. Que souhaitez-vous faire ?</p></body></html> @@ -3850,17 +3015,14 @@ Notez que l'utilisation de toute option de ligne de commande de journalisat OCC::OwncloudHttpCredsPage - &Email &Adresse mail - Connect to %1 Connexion à %1 - Enter user credentials Saisissez les identifiants de connexion de l'utilisateur @@ -3868,8 +3030,6 @@ Notez que l'utilisation de toute option de ligne de commande de journalisat OCC::OwncloudPropagator - - Impossible to get modification time for file in conflict %1 Impossible de récupérer la date de modification du fichier en conflit %1 @@ -3877,23 +3037,19 @@ Notez que l'utilisation de toute option de ligne de commande de journalisat OCC::OwncloudSetupPage - The link to your %1 web interface when you open it in the browser. %1 will be replaced with the application name Adresse URL visible dans la barre d'adresse de votre navigateur Web lorsque vous êtes connecté à %1. - &Next > &Suivant > - Server address does not seem to be valid L'adresse du serveur ne semble pas être valide - Could not load certificate. Maybe wrong password? Impossible de charger le certificat. Vérifiez le mot de passe saisi. @@ -3901,159 +3057,126 @@ Notez que l'utilisation de toute option de ligne de commande de journalisat OCC::OwncloudSetupWizard - <font color="green">Successfully connected to %1: %2 version %3 (%4)</font><br/><br/> <font color="green">Connecté avec succès à %1 : %2 version %3 (%4)</font><br/><br/> - Failed to connect to %1 at %2:<br/>%3 Échec de la connexion à %1 sur %2 :<br/>%3 - Timeout while trying to connect to %1 at %2. Délai d'attente dépassé lors de la connexion à %1 sur %2. - Access forbidden by server. To verify that you have proper access, <a href="%1">click here</a> to access the service with your browser. Accès impossible. Afin de vérifier l'accès au serveur, <a href="%1">cliquez ici</a> et connectez-vous au service avec votre navigateur web. - Invalid URL URL invalide - Trying to connect to %1 at %2 … Tentative de connexion à %1 sur %2 ... - The authenticated request to the server was redirected to "%1". The URL is bad, the server is misconfigured. La demande authentifiée au serveur a été redirigée vers "%1". L'URL est mauvaise, le serveur est mal configuré. - There was an invalid response to an authenticated WebDAV request Il y a eu une réponse invalide à une demande WebDAV authentifiée - Local sync folder %1 already exists, setting it up for sync.<br/><br/> Le dossier de synchronisation local %1 existe déjà, configuration de la synchronisation.<br/><br/> - Creating local sync folder %1 … Création du dossier local de synchronisation %1 ... - OK OK - failed. échoué. - Could not create local folder %1 Impossible de créer le dossier local %1 - No remote folder specified! Aucun dossier distant spécifié ! - Error: %1 Erreur : %1 - creating folder on Nextcloud: %1 Création du dossier sur Nextcloud : %1 - Remote folder %1 created successfully. Le dossier distant %1 a été créé avec succès. - The remote folder %1 already exists. Connecting it for syncing. Le dossier distant %1 existe déjà. Connexion. - - The folder creation resulted in HTTP error code %1 La création du dossier a généré le code d'erreur HTTP %1 - The remote folder creation failed because the provided credentials are wrong!<br/>Please go back and check your credentials.</p> La création du dossier distant a échoué car les identifiants de connexion sont erronés !<br/>Veuillez revenir en arrière et vérifier ces derniers.</p> - <p><font color="red">Remote folder creation failed probably because the provided credentials are wrong.</font><br/>Please go back and check your credentials.</p> <p><font color="red">La création du dossier distant a échoué, probablement parce que les informations d'identification fournies sont fausses.</font><br/>Veuillez revenir en arrière et les vérifier.</p> - - Remote folder %1 creation failed with error <tt>%2</tt>. La création du dossier distant "%1" a échouée avec l'erreur <tt>%2</tt>. - A sync connection from %1 to remote directory %2 was set up. Une synchronisation entre le dossier local %1 et le dossier distant %2 a été configurée. - Successfully connected to %1! Connecté avec succès à %1 ! - Connection to %1 could not be established. Please check again. La connexion à %1 n'a pu être établie. Veuillez réessayer. - Folder rename failed Echec du renommage du dossier - Cannot remove and back up the folder because the folder or a file in it is open in another program. Please close the folder or file and hit retry or cancel the setup. Impossible de supprimer et sauvegarder le dossier parce que le dossier ou un fichier qu'il contient est ouvert dans un autre programme. Merci de fermer le dossier ou le fichier et recommencer ou annuler la configuration. - <font color="green"><b>File Provider-based account %1 successfully created!</b></font> <font color="green"><b> Compte basé sur un fournisseur de fichiers %1 créé avec succès ! </b></font> - Virtual files enabled Fichiers virtuels activés - Your account is now syncing with virtual files support. This means that all your files are online-only by default, and will be downloaded on-demand when you open them. You may find your files under the <b>Locations</b> section of the Finder sidebar. Votre compte est désormais synchronisé avec la prise en charge des fichiers virtuels. Cela signifie que tous vos fichiers sont par défaut accessibles en ligne uniquement et seront téléchargés à la demande à votre ouverture. Vous trouverez vos fichiers dans la section <b> Emplacement </b> de la barre latérale du Finder. - <font color="green"><b>Local sync folder %1 successfully created!</b></font> <font color="green"><b>Dossier de synchronisation local %1 créé avec succès !</b></font> @@ -4061,27 +3184,22 @@ Notez que l'utilisation de toute option de ligne de commande de journalisat OCC::OwncloudWizard - Add %1 account Ajout du compte %1 - Skip folders configuration Ignorer la configuration des dossiers - Cancel Annuler - Enable experimental feature? Activer la fonction expérimentale ? - When the "virtual files" mode is enabled no files will be downloaded initially. Instead, a tiny "%1" file will be created for each file that exists on the server. The contents can be downloaded by running these files or by using their context menu. The virtual files mode is mutually exclusive with selective sync. Currently unselected folders will be translated to online-only folders and your selective sync settings will be reset. @@ -4098,12 +3216,10 @@ Le passage à ce mode annulera toute synchronisation en cours. Il s'agit d'un nouveau mode expérimental. Si vous décidez de l'utiliser, veuillez signaler tout problème qui surviendrait. - Enable experimental placeholder mode Activer la fonction expérimentale de fichiers virtuels ? - Stay safe Restez en sécurité @@ -4111,12 +3227,10 @@ Il s'agit d'un nouveau mode expérimental. Si vous décidez de l' OCC::PasswordInputDialog - Password for share required Mot de passe requis pour le partage - Please enter a password for your share: Veuillez saisir un mot de passe pour votre partage : @@ -4124,7 +3238,6 @@ Il s'agit d'un nouveau mode expérimental. Si vous décidez de l' OCC::PollJob - Invalid JSON reply from the poll URL L'URL de sondage a renvoyé une réponse JSON non valide @@ -4132,252 +3245,165 @@ Il s'agit d'un nouveau mode expérimental. Si vous décidez de l' OCC::ProcessDirectoryJob - Symbolic links are not supported in syncing. Les liens symboliques ne sont pas pris en charge par la synchronisation. - File is listed on the ignore list. Le fichier est présent dans la liste des fichiers exclus. - File names ending with a period are not supported on this file system. Les noms de fichier se terminant par un point ne sont pas pris en charge sur votre système. - - Folder names containing the character "%1" are not supported on this file system. - %1: the invalid character - Les noms de dossiers contenant le caractère "%1" ne sont pas pris en charge par ce système de fichiers. - - - - File names containing the character "%1" are not supported on this file system. - %1: the invalid character - Les noms de fichiers contenant le caractère "%1" ne sont pas pris en charge par ce système de fichiers. - - - - Folder name contains at least one invalid character - Le nom du dossier contient au moins un caractère interdit - - - - File name contains at least one invalid character - Le nom du fichier contient au moins un caractère interdit - - - - Folder name is a reserved name on this file system. - Le nom du dossier est un nom réservé sur ce système de fichiers. - - - - File name is a reserved name on this file system. - Le nom du fichier est un nom réservé sur ce système de fichiers. - - - Filename contains trailing spaces. Le nom du fichier finit par des espaces. - - - - Cannot be renamed or uploaded. Ne peut être renommé ou téléversé. - Folder name of folder entity to use when warning about invalid name Dossier - File name of folder entity to use when warning about invalid name Fichier - %1 name containing the character "%2" is not supported on this file system. folder or file impossible to sync due to an invalid name, placeholders will be file or folder and the invalid character - Le nom %1 contenant le caractère « %2 » n’est pas supporté sur ce système de fichiers. + Le nom %1 contenant le caractère « %2 » n’est pas supporté sur ce système de fichiers. - Filename contains leading spaces. Nom de fichier contenant des espaces au début. - %1 name contains at least one invalid character Le nom %1 contient au moins un caractère invalide - %1 name is a reserved name on this file system. Le nom %1 est un nom réservé sur ce système de fichiers. - Filename contains leading and trailing spaces. Nom de fichier contenant des espaces au début et à la fin. - Filename is too long. Le nom du fichier est trop long. - File/Folder is ignored because it's hidden. Le fichier/dossier est exclu, car il est caché. - Stat failed. Stat échoué. - Conflict: Server version downloaded, local copy renamed and not uploaded. - Conflit : la version du serveur a été téléchargée, la version locale a été renommée, mais pas téléversée. + Conflit : la version du serveur a été téléchargée, la version locale a été renommée, mais pas téléversée. - Case Clash Conflict: Server file downloaded and renamed to avoid clash. Conflit de casse : fichier serveur téléchargé et renommé pour éviter le conflit. - The filename cannot be encoded on your file system. Le nom de fichier ne peut pas être encodé sur votre système de fichiers. - The filename is blacklisted on the server. Le nom du fichier est sur la liste noire du serveur. - Reason: the entire filename is forbidden. Motif : le nom de fichier entier est interdit. - Reason: the filename has a forbidden base name (filename start). Motif : le nom de fichier a un nom de base interdit (début du nom de fichier). - Reason: the file has a forbidden extension (.%1). Motif : le fichier a une extension interdite (.%1). - Reason: the filename contains a forbidden character (%1). Motif : le nom du fichier contient un caractère interdit (%1). - File has extension reserved for virtual files. Le fichier a une extension réservée pour les fichiers virtuels. - size taille - permission permission - file id ID du fichier - Server reported no %1 Le serveur n'a signalé aucun %1 - Cannot sync due to invalid modification time Impossible de synchroniser à cause d'une date de modification invalide - - Upload of %1 exceeds %2 of space left in personal files. - Le téléversement de %1 dépasse les %2 d'espace restant de l'espace personnel. - - - - Upload of %1 exceeds %2 of space left in folder %3. - Le téléversement de %1 dépasse les %2 d'espace restant du dossier %3. - - - Could not upload file, because it is open in "%1". Impossible de téléverser le fichier, car il est ouvert dans « %1 ». - Error while deleting file record %1 from the database Erreur à la suppression de l'enregistrement du fichier %1 de la base de données - - Moved to invalid target, restoring Déplacé vers une cible invalide, restauration - Cannot modify encrypted item because the selected certificate is not valid. Impossible de modifier l'élément chiffré car le certificat sélectionné n'est pas valide. - Ignored because of the "choose what to sync" blacklist Exclus en raison de la liste noire "Sélectionner le contenu à synchroniser". - - Not allowed because you don't have permission to add subfolders to that folder Non autorisé car vous n'avez pas la permission d'ajouter des sous-dossiers dans ce dossier - Not allowed because you don't have permission to add files in that folder Non autorisé car vous n'avez pas la permission d'ajouter des fichiers dans ce dossier - Not allowed to upload this file because it is read-only on the server, restoring Non autorisé à téléverser ce fichier, car il est en lecture seule sur le serveur, restauration en cours - Not allowed to remove, restoring Suppression non autorisée, restauration en cours - Error while reading the database Erreur de lecture de la base de données - Server replied with an error while reading directory "%1" : %2 Le serveur a répondu avec une erreur lors de la lecture du dossier "%1" : %2 @@ -4385,38 +3411,26 @@ Il s'agit d'un nouveau mode expérimental. Si vous décidez de l' OCC::PropagateDirectory - Could not delete file %1 from local DB Impossible de supprimer le fichier %1 de la base de données locale - Error updating metadata due to invalid modification time Erreur de mise à jour des métadonnées à cause d'une date de modification invalide - - - - - - The folder %1 cannot be made read-only: %2 Le dossier %1 ne peut pas être mis en lecture seule : %2 - - unknown exception Exception inconnue - Error updating metadata: %1 Erreur lors de la mise à jour des métadonnées : %1 - File is currently in use Le fichier est actuellement en cours d'utilisation @@ -4424,75 +3438,58 @@ Il s'agit d'un nouveau mode expérimental. Si vous décidez de l' OCC::PropagateDownloadFile - Could not get file %1 from local DB Impossible de récupérer le fichier %1 depuis la base de données locale - File %1 cannot be downloaded because encryption information is missing. Le fichier %1 ne peut pas être téléchargé car les informations de chiffrement sont manquantes. - - Could not delete file record %1 from local DB Impossible de supprimer l'enregistrement du fichier %1 depuis la base de données locale - File %1 can not be downloaded because of a local file name clash! Le fichier %1 ne peut pas être téléchargé en raison d'un conflit sur le nom de fichier local. - The download would reduce free local disk space below the limit Le téléchargement réduira l'espace disque libre en dessous de la limite - Free space on disk is less than %1 Il y a moins de %1 d'espace libre sur le disque - File was deleted from server Le fichier a été supprimé du serveur - The file could not be downloaded completely. Le fichier n'a pas pu être téléchargé intégralement. - The downloaded file is empty, but the server said it should have been %1. Le fichier téléchargé est vide bien que le serveur indique que sa taille devrait être de %1. - - File %1 has invalid modified time reported by server. Do not save it. Le fichier %1 présente une date de modification invalide sur le serveur. Enregistrement impossible. - File %1 downloaded but it resulted in a local file name clash! Fichier %1 téléchargé, mais a abouti à un conflit de casse du nom de fichier local ! - Error updating metadata: %1 Erreur lors de la mise à jour des métadonnées : %1 - The file %1 is currently in use Le fichier %1 est en cours d'utilisation - - File has changed since discovery Le fichier a changé depuis sa découverte @@ -4500,12 +3497,10 @@ Il s'agit d'un nouveau mode expérimental. Si vous décidez de l' OCC::PropagateItemJob - ; Restoration Failed: %1 ; Échec de la restauration : %1 - A file or folder was removed from a read only share, but restoring failed: %1 Un fichier ou un dossier a été supprimé d'un partage en lecture seule, mais la restauration a échoué : %1 @@ -4513,39 +3508,30 @@ Il s'agit d'un nouveau mode expérimental. Si vous décidez de l' OCC::PropagateLocalMkdir - could not delete file %1, error: %2 impossible de supprimer le fichier %1. Erreur : %2 - Folder %1 cannot be created because of a local file or folder name clash! Le dossier %1 n'a pu être créé à cause d'un conflit local de nom de fichier ou de dossier ! - Could not create folder %1 Impossible de créer le dossier %1 - - - The folder %1 cannot be made read-only: %2 Le dossier %1 ne peut être rendu en lecture seule : %2 - unknown exception Exception inconnue - Error updating metadata: %1 Erreur lors de la mise à jour des métadonnées : %1 - The file %1 is currently in use Le fichier %1 est en cours d'utilisation @@ -4553,19 +3539,14 @@ Il s'agit d'un nouveau mode expérimental. Si vous décidez de l' OCC::PropagateLocalRemove - Could not remove %1 because of a local file name clash Impossible de retirer %1 en raison d'un conflit de nom de fichier local - - - Temporary error when removing local item removed from server. Erreur temporaire lors de la suppression d'un élément local supprimé du serveur. - Could not delete file record %1 from local DB Impossible de supprimer l'enregistrement du fichier %1 depuis la base de données locale @@ -4573,49 +3554,38 @@ Il s'agit d'un nouveau mode expérimental. Si vous décidez de l' OCC::PropagateLocalRename - Folder %1 cannot be renamed because of a local file or folder name clash! Le dossier %1 n’a pu être renommé à cause d’un conflit local de nom de fichier ou de dossier ! - File %1 downloaded but it resulted in a local file name clash! Fichier %1 téléchargé, mais a abouti à un conflit de casse du nom de fichier local ! - - Could not get file %1 from local DB Impossible de récupérer le fichier %1 depuis la base de données locale - - Error setting pin state Erreur lors de la modification de l'état du fichier - Error updating metadata: %1 Erreur lors de la mise à jour des métadonnées : %1 - The file %1 is currently in use Le fichier %1 est en cours d'utilisation - Failed to propagate directory rename in hierarchy Impossible de propager le renommage du dossier dans la hiérarchie - Failed to rename file Échec lors du changement de nom du fichier - Could not delete file record %1 from local DB Impossible de récupérer le fichier %1 depuis la base de données locale @@ -4623,12 +3593,10 @@ Il s'agit d'un nouveau mode expérimental. Si vous décidez de l' OCC::PropagateRemoteDelete - Wrong HTTP code returned by server. Expected 204, but received "%1 %2". Le code HTTP retourné par le serveur n'est pas valide. La valeur attendue est 204 mais la valeur reçue est "%1 %2". - Could not delete file record %1 from local DB Impossible de récupérer le fichier %1 depuis la base de données locale @@ -4636,7 +3604,6 @@ Il s'agit d'un nouveau mode expérimental. Si vous décidez de l' OCC::PropagateRemoteDeleteEncryptedRootFolder - Wrong HTTP code returned by server. Expected 204, but received "%1 %2". Le code HTTP retourné par le serveur n'est pas valide. La valeur attendue est 204 mais la valeur retournée est "%1 %2". @@ -4644,22 +3611,18 @@ Il s'agit d'un nouveau mode expérimental. Si vous décidez de l' OCC::PropagateRemoteMkdir - Wrong HTTP code returned by server. Expected 201, but received "%1 %2". Le code HTTP retourné par le serveur n'est pas valide. La valeur attendue est 201 mais la valeur reçue est "%1 %2". - Failed to encrypt a folder %1 Échec du chiffrement d'un dossier %1 - Error writing metadata to the database: %1 - Erreur d'écriture des métadonnées dans la base de données : %1 + Erreur d'écriture des métadonnées dans la base de données : %1 - The file %1 is currently in use Le fichier %1 est en cours d'utilisation @@ -4667,44 +3630,34 @@ Il s'agit d'un nouveau mode expérimental. Si vous décidez de l' OCC::PropagateRemoteMove - Could not rename %1 to %2, error: %3 Impossible de renommer %1 en %2, erreur: %3 - - Error updating metadata: %1 Erreur lors de la mise à jour des métadonnées : %1 - - The file %1 is currently in use Le fichier %1 est en cours d'utilisation - Wrong HTTP code returned by server. Expected 201, but received "%1 %2". Le code HTTP retourné par le serveur n'est pas valide. La valeur attendue est 201 mais la valeur reçue est "%1 %2". - Could not get file %1 from local DB Impossible de récupérer le fichier %1 depuis la base de données locale - Could not delete file record %1 from local DB Impossible de récupérer le fichier %1 depuis la base de données locale - Error setting pin state Erreur lors de la modification de l'état du fichier - Error writing metadata to the database Erreur à l'écriture des métadonnées dans la base de données @@ -4712,60 +3665,46 @@ Il s'agit d'un nouveau mode expérimental. Si vous décidez de l' OCC::PropagateUploadFileCommon - File %1 cannot be uploaded because another file with the same name, differing only in case, exists Impossible de téléverser le fichier %1 car un autre fichier de même nom existe, différent seulement par la casse. - - - File %1 has invalid modification time. Do not upload to the server. Le fichier %1 présente une heure de modification invalide. Ne téléversez pas sur le serveur. - Local file changed during syncing. It will be resumed. Fichier local modifié pendant la synchronisation. Elle va reprendre. - Local file changed during sync. Fichier local modifié pendant la synchronisation. - Failed to unlock encrypted folder. Impossible de déverrouiller le dossier chiffré. - Unable to upload an item with invalid characters Impossible de téléverser un élément contenant des caractères non valides - Error updating metadata: %1 Erreur lors de la mise à jour des métadonnées : %1 - The file %1 is currently in use Le fichier %1 est en cours d'utilisation - - Upload of %1 exceeds the quota for the folder Le téléversement de %1 provoque un dépassement du quota du dossier - Failed to upload encrypted file. Échec de téléversement du fichier chiffré. - File Removed (start upload) %1 Fichier supprimé (début du téléversement) %1 @@ -4773,32 +3712,26 @@ Il s'agit d'un nouveau mode expérimental. Si vous décidez de l' OCC::PropagateUploadFileNG - The local file was removed during sync. Fichier local supprimé pendant la synchronisation. - Local file changed during sync. Fichier local modifié pendant la synchronisation. - Poll URL missing URL du sondage manquante - Unexpected return code from server (%1) Le serveur a retourné un code inattendu (%1) - Missing File ID from server L'identifiant de fichier est manquant sur le serveur - Missing ETag from server L'information Etag de modification de fichier est manquante sur le serveur @@ -4806,22 +3739,18 @@ Il s'agit d'un nouveau mode expérimental. Si vous décidez de l' OCC::PropagateUploadFileV1 - Poll URL missing URL de sondage manquante - The local file was removed during sync. Fichier local supprimé pendant la synchronisation. - Local file changed during sync. Fichier local modifié pendant la synchronisation. - The server did not acknowledge the last chunk. (No e-tag was present) Le serveur n'a pas confirmé la réception du dernier morceau. (Aucun e-tag n'était présent). @@ -4829,35 +3758,29 @@ Il s'agit d'un nouveau mode expérimental. Si vous décidez de l' OCC::ProxyAuthDialog - Proxy authentication required Authentification requise sur le proxy - Username: - Nom d’utilisateur : + Nom d’utilisateur : - Proxy: Proxy : - The proxy server needs a username and password. Le serveur proxy requiert un identifiant et un mot de passe. - Password: - Mot de passe : + Mot de passe : OCC::SelectiveSyncDialog - Choose What to Sync Sélectionner le contenu à synchroniser @@ -4865,33 +3788,26 @@ Il s'agit d'un nouveau mode expérimental. Si vous décidez de l' OCC::SelectiveSyncWidget - Loading … Chargement… - Deselect remote folders you do not wish to synchronize. Désélectionnez les sous-dossiers distants que vous ne souhaitez pas synchroniser. - Name Nom - Size Taille - - No subfolders currently on the server. Aucun sous-dossier sur le serveur. - An error occurred while loading the list of sub folders. Une erreur est survenue lors du chargement de la liste des sous-dossiers. @@ -4899,7 +3815,6 @@ Il s'agit d'un nouveau mode expérimental. Si vous décidez de l' OCC::ServerNotificationHandler - Reply Répondre @@ -4907,28 +3822,23 @@ Il s'agit d'un nouveau mode expérimental. Si vous décidez de l' OCC::SettingsDialog - Settings Paramètres - %1 Settings This name refers to the application name e.g Nextcloud Paramètres %1 - General Général - Network Réseau - Account Compte @@ -4936,7 +3846,6 @@ Il s'agit d'un nouveau mode expérimental. Si vous décidez de l' OCC::ShareManager - Error Erreur @@ -4944,47 +3853,38 @@ Il s'agit d'un nouveau mode expérimental. Si vous décidez de l' OCC::ShareModel - %1 days %1 jours - 1 day 1 jour - Today Aujourd'hui - Secure file drop link Lien de dépôt sécurisé de fichier - Share link Partager un lien - Link share Lien de partage - Internal link Lien interne - Secure file drop Dépôt de fichier sécurisé - Could not find local folder for %1 Impossible de trouver le dossier local pour %1 @@ -4992,23 +3892,18 @@ Il s'agit d'un nouveau mode expérimental. Si vous décidez de l' OCC::ShareeModel - - Search globally Rechercher globalement - No results found Aucun résultat trouvé - Global search results Résultats de la recherche globale - %1 (%2) sharee (shareWithAdditionalInfo) %1 (%2) @@ -5017,48 +3912,38 @@ Il s'agit d'un nouveau mode expérimental. Si vous décidez de l' OCC::SocketApi - Context menu share Partage du menu contextuel - I shared something with you J'ai partagé quelque chose avec vous - - Share options Options de partage - Send private link by email … Envoyer le lien privé par e-mail ... - Copy private link to clipboard Copier le lien privé dans le presse-papier - Failed to encrypt folder at "%1" Échec du chiffrement du dossier à "%1" - The account %1 does not have end-to-end encryption configured. Please configure this in your account settings to enable folder encryption. Le compte %1 n'a pas de chiffrement de bout en bout configuré. Veuillez le configurer dans les paramètres de votre compte pour activer le chiffrement des dossiers. - Failed to encrypt folder Échec du chiffrement du dossier - Could not encrypt the following folder: "%1". Server replied with error: %2 @@ -5067,105 +3952,86 @@ Server replied with error: %2 Le serveur a répondu avec l'erreur : %2 - Folder encrypted successfully Dossier chiffré avec succès - The following folder was encrypted successfully: "%1" Le dossier suivant a été chiffré avec succès : "%1" - Select new location … Sélectionnez le nouvel emplacement ... - - Activity Activité - Leave this share Quitter ce partage - Resharing this file is not allowed Repartager ce fichier est interdit - Resharing this folder is not allowed Repartager ce dossier est interdit - Encrypt Chiffrer - Lock file Verrouiller le fichier - Unlock file Déverrouiller le fichier - Locked by %1 Verrouillé par %1 - Expires in %1 minutes remaining time before lock expires - Expire dans %1 minuteExpire dans %1 minutesExpire dans %1 minutes + + Expire dans %1 minute + Expire dans %1 minutes + - Resolve conflict … Résoudre le conflit… - Move and rename … Déplacer et renommer... - Move, rename and upload … Déplacer, renommer et téléverser… - Delete local changes Supprimer les modifications locales - Move and upload … Déplacer et téléverser… - Delete Supprimer - Copy internal link Copier le lien interne - - Open in browser Ouvrir dans le navigateur @@ -5173,124 +4039,100 @@ Le serveur a répondu avec l'erreur : %2 OCC::SslButton - <h3>Certificate Details</h3> <h3>Détails du certificat</h3> - Common Name (CN): Nom commun (CN) : - Subject Alternative Names: Noms alternatifs du sujet : - Organization (O): Organisation (O) : - Organizational Unit (OU): Unité d'organisation (OU) : - State/Province: État/Région : - Country: Pays : - Serial: Numéro de série : - <h3>Issuer</h3> <h3>Émetteur</h3> - Issuer: Émetteur : - Issued on: Émis le : - Expires on: Expire le : - <h3>Fingerprints</h3> <h3>Empreintes numériques</h3> - SHA-256: SHA-256 : - SHA-1: SHA-1 : - <p><b>Note:</b> This certificate was manually approved</p> <p><b>Note :</b> Ce certificat a été approuvé manuellement</p> - %1 (self-signed) %1 (auto-signé) - %1 %1 - This connection is encrypted using %1 bit %2. Cette connexion est chiffrée en utilisant %1 bit %2. - Server version: %1 Version du serveur : %1 - No support for SSL session tickets/identifiers Identifiants/tickets de sessions SSL non pris en charge - Certificate information: Informations du certificat : - The connection is not secure La connexion n'est pas sécurisée - This connection is NOT secure as it is not encrypted. Cette connexion n'est PAS sécurisée car elle n'est pas chiffrée. @@ -5300,82 +4142,62 @@ Le serveur a répondu avec l'erreur : %2 OCC::SslErrorDialog - Trust this certificate anyway Faire confiance à ce certificat malgré tout - Untrusted Certificate Certificat non fiable - Cannot connect securely to <i>%1</i>: Impossible de se connecter de manière sécurisée à <i>%1</i> : - Additional errors: - Erreurs supplémentaires : + Erreurs supplémentaires : - with Certificate %1 avec certificat %1 - - - &lt;not specified&gt; &lt;non spécifié&gt; - - Organization: %1 Organisation : %1 - - Unit: %1 Unité : %1 - - Country: %1 Pays : %1 - Fingerprint (SHA1): <tt>%1</tt> Empreinte (SHA1) : <tt>%1</tt> - Fingerprint (SHA-256): <tt>%1</tt> Empreinte (SHA-256): <tt>%1</tt> - Fingerprint (SHA-512): <tt>%1</tt> Empreinte (SHA-512): <tt>%1</tt> - Effective Date: %1 Date de début de validité : %1 - Expiration Date: %1 Date d'expiration : %1 - Issuer: %1 Émetteur : %1 @@ -5383,73 +4205,59 @@ Le serveur a répondu avec l'erreur : %2 OCC::SyncEngine - %1 (skipped due to earlier error, trying again in %2) %1 (ignoré à cause d'une précédente erreur, nouvel essai dans %2) - Only %1 are available, need at least %2 to start Placeholders are postfixed with file sizes using Utility::octetsToString() Seulement %1 disponibles, il faut au moins %2 pour démarrer - Unable to open or create the local sync database. Make sure you have write access in the sync folder. Impossible d'accéder ou de créer une base de données locale de synchronisation. Assurez vous de disposer des droits d'écriture dans le dossier de synchronisation. - Disk space is low: Downloads that would reduce free space below %1 were skipped. L'espace disque est faible : les téléchargements qui amèneraient à réduire l'espace libre en dessous de %1 ont été ignorés. - There is insufficient space available on the server for some uploads. Il n'y a pas suffisamment d’espace disponible sur le serveur pour certains téléversements. - Unresolved conflict. conflit non résolu. - Could not update file: %1 Impossible de mettre à jour le fichier : %1 - Could not update virtual file metadata: %1 Impossible de mettre à jour les métadonnées du fichier virutel : %1 - Could not update file metadata: %1 Impossible de mettre à jour les métadonnées du fichier : %1 - Could not set file record to local DB: %1 Impossible de définir l'enregistrement du fichier dans la base de données locale : %1 - Using virtual files with suffix, but suffix is not set Utilisation de fichiers virtuels avec suffixe, mais le suffixe n'est pas défini - Unable to read the blacklist from the local database Impossible de lire la liste noire de la base de données locale - Unable to read from the sync journal. Impossible de lire le journal de synchronisation. - Cannot open the sync journal Impossible d'ouvrir le journal de synchronisation @@ -5457,75 +4265,54 @@ Le serveur a répondu avec l'erreur : %2 OCC::SyncStatusSummary - - Offline Hors ligne - - You need to accept the terms of service - Vous devez accepter les conditions d'utilisation - - - - - All synced! Tout est synchronisé ! - Some files couldn't be synced! - Certains fichiers n’ont pas pu être synchronisés ! + Certains fichiers n’ont pas pu être synchronisés ! - See below for errors Voir ci-dessous pour les erreurs - Checking folder changes Vérification des modifications du dossier - Syncing changes Synchronisation des modifications - Sync paused Synchronisation mise en pause - Some files could not be synced! - Certains fichiers n’ont pas pu être synchronisés ! + Certains fichiers n’ont pas pu être synchronisés ! - See below for warnings Voir ci-dessous pour les avertissements - Syncing Synchronisation - %1 of %2 · %3 left %1 sur %2 · %3 restants - %1 of %2 %1 sur %2 - Syncing file %1 of %2 Synchronisation du fichier %1 sur %2 @@ -5533,54 +4320,42 @@ Le serveur a répondu avec l'erreur : %2 OCC::Systray - Download Télécharger - Add account Ajouter un compte - Open main dialog Ouvrir la boîte de dialogue principale - - Pause sync Suspendre la synchronisation - - Resume sync Relancer la synchro - Settings Paramètres - Help Aide - Exit %1 Quitter %1 - Pause sync for all Suspendre toutes les synchros - Resume sync for all Relancer toutes les synchros @@ -5588,27 +4363,22 @@ Le serveur a répondu avec l'erreur : %2 OCC::TermsOfServiceCheckWidget - Waiting for terms to be accepted En attente de l'acceptation des conditions - Polling Vote - Link copied to clipboard. Lien copié dans le presse-papiers. - Open Browser Ouvrir le navigateur - Copy Link Copier le lien @@ -5616,18 +4386,15 @@ Le serveur a répondu avec l'erreur : %2 OCC::Theme - %1 Desktop Client Version %2 (%3) %1 is application name. %2 is the human version string. %3 is the operating system name. %1 Version du client de bureau %2 (%3) - <p><small>Using virtual files plugin: %1</small></p> <p><small>Utilise l'extension de fichiers virtuels : %1</small></p> - <p>This release was supplied by %1.</p> <p>Cette version a été fournie par %1.</p> @@ -5635,22 +4402,18 @@ Le serveur a répondu avec l'erreur : %2 OCC::UnifiedSearchResultsListModel - Failed to fetch providers. Échec de la récupération des fournisseurs. - Failed to fetch search providers for '%1'. Error: %2 Échec de la récupération des fournisseurs de recherche pour '%1'. Erreur : %2 - Search has failed for '%2'. La recherche de '%2' a échoué. - Search has failed for '%1'. Error: %2 La recherche de '%1' a échoué. Erreur: %2 @@ -5658,17 +4421,14 @@ Le serveur a répondu avec l'erreur : %2 OCC::UpdateE2eeFolderMetadataJob - Failed to update folder metadata. Échec du téléversement du dossier des métadonnées. - Failed to unlock encrypted folder. Échec du déverrouillage du dossier chiffré. - Failed to finalize item. Impossible de finaliser l'item. @@ -5676,35 +4436,22 @@ Le serveur a répondu avec l'erreur : %2 OCC::UpdateE2eeFolderUsersMetadataJob - - - - - - - - - Error updating metadata for a folder %1 Erreur lors de la mise à jour des métadonnées pour un dossier %1 - Could not fetch public key for user %1 Impossible de récupérer la clé publique pour l'utilisateur %1 - Could not find root encrypted folder for folder %1 Impossible de trouver le dossier racine chiffré pour le dossier %1 - Could not add or remove user %1 to access folder %2 Impossible d’ajouter ou de supprimer l’utilisateur %1 de l’accès au dossier %2 - Failed to unlock a folder. Échec du déverrouillage d’un dossier. @@ -5712,43 +4459,37 @@ Le serveur a répondu avec l'erreur : %2 OCC::User - End-to-end certificate needs to be migrated to a new one Le certificat de bout en bout doit être migré vers une nouvelle clé - Trigger the migration Déclencher la migration - %n notification(s) - %n notification%n notifications%n notification(s) + + %n notification + %n notifications + - Retry all uploads Réessayer tous les téléversements - - Resolve conflict Résoudre le conflit - Rename file Renommer le fichier - Open Nextcloud Assistant in browser Ouvrir l'assistant Nextcloud dans le navigateur - Open Nextcloud Talk in browser Ouvrir Nextcloud Discussion dans le navigateur @@ -5756,22 +4497,18 @@ Le serveur a répondu avec l'erreur : %2 OCC::UserModel - Confirm Account Removal Confirmer le retrait du compte - <p>Do you really want to remove the connection to the account <i>%1</i>?</p><p><b>Note:</b> This will <b>not</b> delete any files.</p> <p>Êtes-vous certain de vouloir retirer la connexion au compte <i>%1</i> ?</p><p><b>Note :</b> cette opération <b>ne supprimera aucun de vos fichiers</b> et ne supprimera pas non plus votre compte du serveur.</p> - Remove connection Supprimer la connexion - Cancel Annuler @@ -5779,129 +4516,98 @@ Le serveur a répondu avec l'erreur : %2 OCC::UserStatusSelectorModel - Could not fetch predefined statuses. Make sure you are connected to the server. Impossible de récupérer les statuts prédéfinis. Assurez-vous que vous êtes connecté au serveur. - Could not fetch status. Make sure you are connected to the server. Impossible de récupérer le statut. Merci de vérifier que vous êtes bien connecté(e) au serveur. - Status feature is not supported. You will not be able to set your status. La fonctionnalité "statut" n'est pas supporté. Vous ne pourrez pas définir votre statut. - Emojis are not supported. Some status functionality may not work. Les Emojis ne sont pas supportés. Certaines fonctionnalités de statut pourront ne pas fonctionner. - Could not set status. Make sure you are connected to the server. Impossible de définir le statut. Merci de vérifier que vous êtes connecté(e) au serveur. - Could not clear status message. Make sure you are connected to the server. Impossible d'effacer le message de statut. Assurez-vous que vous êtes connecté au serveur. - - Don't clear Ne pas effacer - 30 minutes 30 minutes - - 1 hour 1 heure - 4 hours 4 heures - - Today Aujourd'hui - - This week Cette semaine - Less than a minute Il y a moins d'une minute - 1 minute 1 minute - %1 minutes - %1 minutes%1 minutes%1 minutes + + %1 minutes + %1 minutes + - %1 hours - %1 heures%1 heures%1 heures + + %1 heures + %1 heures + - 1 day 1 jour - %1 days - %1 jours%1 jours%1 jours - - - - %n minute(s) - - - - - %n hour(s) - - - - - %n day(s) - + + %1 jours + %1 jours + OCC::Vfs - Please choose a different location. %1 is a drive. It doesn't support virtual files. Veuillez choisir un emplacement différent. %1 est un lecteur. Il ne prend pas en charge les fichiers virtuels. - Please choose a different location. %1 isn't a NTFS file system. It doesn't support virtual files. Veuillez choisir un emplacement différent. %1 n'est pas un système de fichiers NTFS. Il ne prend pas en charge les fichiers virtuels. - Please choose a different location. %1 is a network drive. It doesn't support virtual files. Veuillez choisir un emplacement différent. %1 est un lecteur réseau. Il ne prend pas en charge les fichiers virtuels. @@ -5909,37 +4615,30 @@ Le serveur a répondu avec l'erreur : %2 OCC::VfsDownloadErrorDialog - Download error Erreur de téléchargement - Error downloading Erreur au téléchargement - could not be downloaded ne peut pas être téléchargé - > More details > Plus de détails - More details Plus de détails - Error downloading %1 Erreur au téléchargement %1 - %1 could not be downloaded. %1 ne peut pas être téléchargé. @@ -5947,8 +4646,6 @@ Le serveur a répondu avec l'erreur : %2 OCC::VfsSuffix - - Error updating metadata due to invalid modification time Erreur de mise à jour des métadonnées à cause d'une date de modification invalide @@ -5956,8 +4653,6 @@ Le serveur a répondu avec l'erreur : %2 OCC::VfsXAttr - - Error updating metadata due to invalid modification time Erreur de mise à jour des métadonnées à cause d'une date de modification invalide @@ -5965,12 +4660,10 @@ Le serveur a répondu avec l'erreur : %2 OCC::WebEnginePage - Invalid certificate detected Certificat invalide - The host "%1" provided an invalid certificate. Continue? L’hôte "%1" utilise un certificat invalide. Continuer ? @@ -5978,7 +4671,6 @@ Le serveur a répondu avec l'erreur : %2 OCC::WebFlowCredentials - You have been logged out of your account %1 at %2. Please login again. Vous avez été déconnecté de votre compte %1 à %2. Merci de vous reconnecter. @@ -5986,42 +4678,34 @@ Le serveur a répondu avec l'erreur : %2 OCC::WelcomePage - Form Formulaire - Log in Se connecter - Sign up with provider S'inscrire auprès d'un fournisseur - Keep your data secure and under your control Gardez vos données en sécurité et sous votre contrôle - Secure collaboration & file exchange Collaboration et échange de fichiers sécurisés - Easy-to-use web mail, calendaring & contacts E-mail, agenda et contacts en ligne faciles à utiliser - Screensharing, online meetings & web conferences Partage d'écran, réunions en ligne et conférences Web - Host your own server Hébergez votre propre serveur @@ -6029,88 +4713,71 @@ Le serveur a répondu avec l'erreur : %2 OCC::ownCloudGui - Please sign in Veuillez vous connecter - There are no sync folders configured. Aucun dossier à synchroniser n'est configuré - Disconnected from %1 Déconnecté de %1 - Unsupported Server Version Version du Serveur non prise en charge - The server on account %1 runs an unsupported version %2. Using this client with unsupported server versions is untested and potentially dangerous. Proceed at your own risk. Le serveur sur le compte %1 fonctionne avec une version non-supportée %2. Utiliser ce client avec des versions non-supportées du serveur n'est pas testé et est potentiellement dangereux. Procédez à vos risques et périls. - Terms of service Conditions d'utilisation - Your account %1 requires you to accept the terms of service of your server. You will be redirected to %2 to acknowledge that you have read it and agrees with it. Votre compte %1 vous demande d'accepter les conditions générales d'utilisation de votre serveur. Vous serez redirigé vers %2 pour confirmer que vous l'avez lu et que vous l'acceptez. - %1: %2 Example text: "Nextcloud: Syncing 25MB (3 minutes left)" (%1 is the folder name to be synced, %2 a status message for that folder) %1: %2 - macOS VFS for %1: Sync is running. macOS VFS pour %1: Synchronisation en cours. - macOS VFS for %1: Last sync was successful. macOS VFS pour %1: La dernière synchronisation a réussi. - macOS VFS for %1: A problem was encountered. macOS VFS pour %1: Une erreur est survenue. - Checking for changes in remote "%1" Vérification des modifications dans "%1" distant - Checking for changes in local "%1" Vérification des modifications dans "%1" local - Disconnected from accounts: Déconnecté des comptes : - Account %1: %2 Compte %1 : %2 - Account synchronization is disabled La synchronisation est en pause - %1 (%2, %3) %1 (%2, %3) @@ -6118,73 +4785,59 @@ Le serveur a répondu avec l'erreur : %2 OwncloudAdvancedSetupPage - Username Nom d’utilisateur - Local Folder Dossier local - Choose different folder Choisir un autre dossier - Server address Adresse du serveur - Sync Logo Logo de synchronisation - Synchronize everything from server Tout synchroniser depuis le serveur - Ask before syncing folders larger than Demander confirmation avant de synchroniser les dossiers de taille supérieure à - Ask before syncing external storages Demander confirmation avant de synchroniser des stockages externes - Keep local data Conserver les données locales - <html><head/><body><p>If this box is checked, existing content in the local folder will be erased to start a clean sync from the server.</p><p>Do not check this if the local content should be uploaded to the servers folder.</p></body></html> <html><head/><body><p>Si cette case est cochée, le contenu existant du dossier local sera supprimé pour démarrer une synchronisation propre depuis le serveur.</p><p>Ne pas cocher si le contenu local doit être téléversé vers le serveur.</p></body></html> - Erase local folder and start a clean sync Effacer le dossier local et démarrer une synchronisation complète - MB Trailing part of "Ask confirmation before syncing folder larger than" Mo - Choose what to sync Sélectionner le contenu à synchroniser - &Local Folder &Dossier local @@ -6192,12 +4845,10 @@ Le serveur a répondu avec l'erreur : %2 OwncloudHttpCredsPage - &Username &Nom d’utilisateur - &Password &Mot de passe @@ -6205,23 +4856,18 @@ Le serveur a répondu avec l'erreur : %2 OwncloudSetupPage - - TextLabel Étiquette de texte - Logo Logo - Server address Adresse du serveur - This is the link to your %1 web interface when you open it in the browser. Il s'agit de l'adresse URL lorsque vous utilisez %1 dans un navigateur. @@ -6229,97 +4875,88 @@ Le serveur a répondu avec l'erreur : %2 QObject - %nd delay in days after an activity - %nj.%njrs%njrs + + %nj. + %njrs + - in the future Dans le futur - %nh delay in hours after an activity - %nh%nh%nh + + %nh + %nh + - 1m one minute after activity date and time 1m - %nm delay in minutes after an activity - %nmin%nmin%nmin + + %nmin + %nmin + - now A l'instant - Some time ago Il y a quelque temps - %1: %2 this displays an error string (%2) for a file %1 %1 : %2 - New folder Nouveau dossier - Failed to create debug archive Échec lors de la création de l'archive de déboguage - Could not create debug archive in selected location! Impossible de créer l'archive de débogage à l'emplacement indiqué ! - You renamed %1 Vous avez renommé %1 - You deleted %1 Vous avez supprimé %1 - You created %1 Vous avez créé %1 - You changed %1 Vous avez modifié %1 - Synced %1 %1 a été synchronisé - Error deleting the file Le fichier est déjà supprimé - Paths beginning with '#' character are not supported in VFS mode. Les chemins commençant par le caractère « # » ne sont pas pris en charge dans le mode VFS. @@ -6327,38 +4964,34 @@ Le serveur a répondu avec l'erreur : %2 ResolveConflictsDialog - Solve sync conflicts Résoudre les conflits de synchronisation - %1 files in conflict indicate the number of conflicts to resolve - %1 fichier en conflit%1 fichiers en conflit%1 fichiers en conflit + + %1 fichier en conflit + %1 fichiers en conflit + - Choose if you want to keep the local version, server version, or both. If you choose both, the local file will have a number added to its name. Choisissez si vous souhaitez conserver la version locale, la version serveur, ou les deux. Si vous choisissez les deux, un numéro sera ajouté au nom du fichier local. - All local versions Toutes les versions locales - All server versions Toutes les versions serveur - Resolve conflicts Résoudre les conflits - Cancel Annuler @@ -6366,7 +4999,6 @@ Le serveur a répondu avec l'erreur : %2 ShareDelegate - Copied! Copié ! @@ -6374,83 +5006,66 @@ Le serveur a répondu avec l'erreur : %2 ShareDetailsPage - An error occurred setting the share password. Une erreur est survenue lors de la configuration du mot de passe de partage. - Edit share Modifier le partage - Share label Libellé du partage - - Allow upload and editing Autoriser le téléversement et l'édition - View only Afficher seulement - File drop (upload only) Dépôt de fichiers (téléversement seulement) - Allow resharing Permettre le repartage - Hide download Masquer le téléchargement - Password protection Protection par mot de passe - Set expiration date Définir une date d'expiration - Note to recipient Note au destinataire - Enter a note for the recipient Saisir une note pour le destinataire - Unshare Cesser le partage - Add another link Ajouter un autre lien - Share link copied! Lien de partage copié ! - Copy share link Copier le lien de partage @@ -6458,37 +5073,30 @@ Le serveur a répondu avec l'erreur : %2 ShareView - Password required for new share Mot de passe requis pour le nouveau partage - Share password Mot de passe du partage - Shared with you by %1 Partagé avec vous par %1 - Expires in %1 Expire dans %1 - Sharing is disabled Le partage est désactivté - This item cannot be shared. L'élément ne peut pas être partagé. - Sharing is disabled. Le partage est désactivé. @@ -6496,12 +5104,10 @@ Le serveur a répondu avec l'erreur : %2 ShareeSearchField - Search for users or groups… Rechercher des utilisateurs ou des groupes... - Sharing is not available for this folder Le partage n'est pas disponible pour ce dossier @@ -6509,7 +5115,6 @@ Le serveur a répondu avec l'erreur : %2 SyncJournalDb - Failed to connect database. Impossible de connecter la base de données. @@ -6517,17 +5122,14 @@ Le serveur a répondu avec l'erreur : %2 SyncStatus - Sync now Synchroniser maintenant - Resolve conflicts Résoudre les conflits - Open browser Ouvrir le navigateur @@ -6535,12 +5137,10 @@ Le serveur a répondu avec l'erreur : %2 TalkReplyTextField - Reply to … Répondre à... - Send reply to chat message Envoyer la réponse dans la discussion @@ -6548,78 +5148,29 @@ Le serveur a répondu avec l'erreur : %2 TermsOfServiceCheckWidget - Terms of Service Conditions d'utilisation - Logo Logo - Switch to your browser to accept the terms of service Accédez à votre navigateur pour accepter les conditions d'utilisation - - TrayFoldersMenuButton - - - Open local or group folders - Ouvrir des dossiers locaux ou de groupe - - - - Open local folder - Ouvrir le dossier local - - - - Connected - Connecté - - - - Disconnected - Déconnecté - - - - Open local folder "%1" - Ouvrir le dossier local « %1 » - - - - Open group folder "%1" - Ouvrir le dossier de groupes "%1" - - - - Open %1 in file explorer - Ouvrir %1 dans l'explorateur de fichiers - - - - User group and local folders menu - Menu de groupe d'utilisateurs et dossiers locaux - - TrayWindowHeader - Open local or group folders Ouvrir des dossiers locaux ou de groupe - More apps Plus d'applications - Open %1 in browser Ouvrir %1 dans le navigateur @@ -6627,7 +5178,6 @@ Le serveur a répondu avec l'erreur : %2 UnifiedSearchInputContainer - Search files, messages, events … Rechercher des fichiers, des messages, des événements … @@ -6635,7 +5185,6 @@ Le serveur a répondu avec l'erreur : %2 UnifiedSearchPlaceholderView - Start typing to search Commencez à écrire pour rechercher @@ -6643,7 +5192,6 @@ Le serveur a répondu avec l'erreur : %2 UnifiedSearchResultFetchMoreTrigger - Load more results Charger plus de résultats @@ -6651,7 +5199,6 @@ Le serveur a répondu avec l'erreur : %2 UnifiedSearchResultItemSkeleton - Search result skeleton. Squelette de résultat de recherche. @@ -6659,7 +5206,6 @@ Le serveur a répondu avec l'erreur : %2 UnifiedSearchResultListItem - Load more results Charger plus de résultats @@ -6667,7 +5213,6 @@ Le serveur a répondu avec l'erreur : %2 UnifiedSearchResultNothingFound - No results for Aucun résultat pour @@ -6675,7 +5220,6 @@ Le serveur a répondu avec l'erreur : %2 UnifiedSearchResultSectionItem - Search results section %1 Section de résultats de recherche %1 @@ -6683,44 +5227,34 @@ Le serveur a répondu avec l'erreur : %2 UserLine - Switch to account Utiliser ce compte - Current account status is online Le statut actuel du compte est "en ligne" - Current account status is do not disturb Le statut actuel du compte est "ne pas déranger" - Account actions Actions du compte - Set status Définir le statut - - Log out Se déconnecter - - Log in Se connecter - Remove account Retirer le compte @@ -6728,67 +5262,54 @@ Le serveur a répondu avec l'erreur : %2 UserStatusSelector - Online status Statut en ligne - Online En ligne - Away Absent(e) - Do not disturb Ne pas déranger - Mute all notifications Désactiver toutes les notifications - Invisible Invisible - Appear offline Apparaitre hors ligne - Status message Message de statut - What is your status? Quel est votre statut ? - Clear status message after Effacer le message de statut après - Cancel Annuler - Clear Effacer - Apply Appliquer @@ -6796,62 +5317,68 @@ Le serveur a répondu avec l'erreur : %2 Utility - %L1 GB %L1 Go - %L1 MB %L1 Mo - %L1 KB %L1 Ko - %L1 B %L1 octets - %L1 TB %L1 To - %n year(s) - %n an%n ans%n ans + + %n an + %n ans + - %n month(s) - %n mois%n mois%n mois + + %n mois + %n mois + - %n day(s) - %n jour%n jours%n jours + + %n jour + %n jours + - %n hour(s) - %n heure%n heures%n heures + + %n heure + %n heures + - %n minute(s) - %n minute%n minutes%n minutes + + %n minute + %n minutes + - %n second(s) - %n seconde%n secondes%n secondes + + %n seconde + %n secondes + - %1 %2 %1 %2 @@ -6859,17 +5386,14 @@ Le serveur a répondu avec l'erreur : %2 ValidateChecksumHeader - The checksum header is malformed. L’en-tête de la somme de contrôle est mal formé. - The checksum header contained an unknown checksum type "%1" - L’en-tête de somme de contrôle contenait un type de somme de contrôle inconnu « %1 » + L’en-tête de somme de contrôle contenait un type de somme de contrôle inconnu « %1 » - The downloaded file does not match the checksum, it will be resumed. "%1" != "%2" Le fichier téléchargé ne correspond pas à la somme de contrôle, il sera repris. "%1" != "%2" @@ -6877,12 +5401,10 @@ Le serveur a répondu avec l'erreur : %2 main.cpp - System Tray not available Zone de notification système non disponible - %1 requires on a working system tray. If you are running XFCE, please follow <a href="http://docs.xfce.org/xfce/xfce4-panel/systray">these instructions</a>. Otherwise, please install a system tray application such as "trayer" and try again. %1 nécessite une zone de notification système fonctionnelle. Si vous utiliser XFCE, veuillez suivre <a href="http://docs.xfce.org/xfce/xfce4-panel/systray">ces instructions</a>. Sinon, installez une application de la barre d'état système telle que "trayer" et réessayez. @@ -6890,7 +5412,6 @@ Le serveur a répondu avec l'erreur : %2 nextcloudTheme::aboutInfo() - <p><small>Built from Git revision <a href="%1">%2</a> on %3, %4 using Qt %5, %6</small></p> <p><small>Généré à partir de la révision Git <a href="%1">%2</a> du %3, %4 en utilisant Qt %5, %6</small></p> @@ -6898,119 +5419,94 @@ Le serveur a répondu avec l'erreur : %2 progress - Virtual file created Fichier virtuel créé - Replaced by virtual file Remplacé par un fichier virtuel - Downloaded Reçu - Uploaded Téléversé - Server version downloaded, copied changed local file into conflict file La version du serveur est téléchargée, les changements locaux ont été copiés dans un fichier conflit. - Server version downloaded, copied changed local file into case conflict conflict file La version du serveur est téléchargée, les changements locaux ont été copiés dans un fichier de conflit de casse. - Deleted Supprimé - Moved to %1 Déplacé vers %1 - Ignored Exclu - Filesystem access error Erreur d'accès au système de fichiers - - Error Erreur - Updated local metadata Métadonnées locales mises à jour - Updated local virtual files metadata Fichiers locaux virtuels de métadonnées mis à jour - Updated end-to-end encryption metadata Métadonnées de chiffrement de bout en bout mises à jour - - Unknown Inconnu - Downloading Téléchargement - Uploading Téléversement - Deleting Suppression - Moving Déplacement - Ignoring Ignoré - Updating local metadata Mise à jour des méta-données locales - Updating local virtual files metadata Mise à jour des méta-données des fichiers virtuels - Updating end-to-end encryption metadata Mise à jour des métadonnées de chiffrement de bout en bout @@ -7018,52 +5514,42 @@ Le serveur a répondu avec l'erreur : %2 theme - Sync status is unknown Le statut de synchronisations est inconnu - Waiting to start syncing En attente du démarrage de la synchronisation - Sync is running Synchronisation en cours - Sync was successful Synchronisation réussie - Sync was successful but some files were ignored La syncronisation a réussi mais certains fichiers ont été ignorés - Error occurred during sync Une erreur est survenue pendant la synchronisation - Error occurred during setup Une erreur est survenue pendant l'installation - Stopping sync Arrêt de la synchronisation - Preparing to sync Préparation à la synchronisation - Sync is paused La synchronisation est en pause @@ -7071,67 +5557,44 @@ Le serveur a répondu avec l'erreur : %2 utility - Could not open browser Impossible de démarrer le navigateur - There was an error when launching the browser to go to URL %1. Maybe no default browser is configured? Une erreur est survenue au lancement du navigateur pour visiter l'adresse %1. Il est possible qu'aucun navigateur par défaut ne soit configuré. - Could not open email client Impossible d'ouvrir le client de messagerie - There was an error when launching the email client to create a new message. Maybe no default email client is configured? Il y a eu une erreur lors du lancement du client de messagerie pour créer un nouveau message. Peut-être qu'aucun client de messagerie n'est configuré ? - Always available locally Toujours disponible localement - Currently available locally Actuellement disponible en local - Some available online only Certains sont disponibles en ligne seulement - Available online only Disponible seulement en ligne - Make always available locally Toujours rendre disponible localement - Free up local space Libérer de l'espace local - - FileProviderFastEnumerationSettings - - - Enable fast sync - Activer la sync. rapide - - - - Fast sync will only sync changes in files and folders within folders that have been explored. This can significantly increase responsiveness on initial configuration of virtual files. However, it will cause redundant downloads of files moved to an unexplored folder. - La synchronisation rapide va uniquement synchroniser les modifications des fichiers et des dossiers dans les dossiers qui ont été explorés. Ceci peut significativement augmenter la réactivité sur la configuration initiale des fichiers virtuelles. Cependant, cela va causer des téléchargements redondants de fichiers déplacés dans un dossier non exploré. - - - \ No newline at end of file + diff --git a/translations/client_nl.ts b/translations/client_nl.ts index 462edcaf6f3ef..256eb9c44320f 100644 --- a/translations/client_nl.ts +++ b/translations/client_nl.ts @@ -1,13 +1,13 @@ - + + + ActivityItem - Open %1 locally %1 lokaal openen - In %1 In %1 @@ -15,12 +15,10 @@ ActivityItemContent - Open file details Bestandsdetails openen - Dismiss Negeren @@ -28,17 +26,14 @@ ActivityList - Activity list Activiteitenlijst - Scroll to top Naar boven schuiven - No activities yet Nog geen activiteiten @@ -46,22 +41,18 @@ CallNotificationDialog - Talk notification caller avatar Talk notificatie beller avatar - Answer Talk call notification Beantwoord Talk oproepmelding - Decline Afwijzen - Decline Talk call notification Wijs Talk oproepmelding af @@ -69,83 +60,66 @@ CloudProviderWrapper - %1 (%2, %3) %1 (%2, %3) - Checking for changes in "%1" Controleren op wijzigingen in '%1' - Syncing %1 of %2 (%3 left) Synchroniseer %1 van %2 (%3 over) - Syncing %1 of %2 Synchroniseren %1 van %2 - Syncing %1 (%2 left) Synchroniseren %1 (%2 over) - Syncing %1 Synchroniseren %1 - - No recently changed files Geen recent gewijzigde bestanden - Sync paused Synchroniseren gepauzeerd - Syncing Synchroniseren - Open website Openen website - Recently changed Recent gewijzigd - Pause synchronization Pauzeer synchronisatie - Help Help - Settings Instellingen - Log out Uitloggen - Quit sync client Afsluiten synchronisatieclient @@ -153,12 +127,10 @@ ConflictDelegate - Local version Lokale versie - Server version Server versie @@ -166,59 +138,46 @@ CurrentAccountHeaderButton - Current account Huidige gebruiker - - Resume sync for all Synchronisatie hervatten voor alles - - Pause sync for all Synchronisatie pauzeren voor alles - Add account Gebruiker toevoegen - Add new account Nieuwe gebruiker toevoegen - Settings Instellingen - Exit Verlaat - Current account avatar Huidige gebruiker avatar - Current account status is online Huidige gebruikersstatus is Online - Current account status is do not disturb Huidige gebruikersstatus is Niet Storen - Account switcher and settings menu Wisselen van gebruiker en instellingsmenu @@ -226,7 +185,6 @@ EditFileLocallyLoadingDialog - Opening file for local editing Bestand openen voor lokaal bewerken @@ -234,7 +192,6 @@ EmojiPicker - No recent emojis Geen recente emojis @@ -242,7 +199,6 @@ EncryptionTokenDiscoveryDialog - Discovering the certificates stored on your USB token De certificaten ontdekken die op je USB-token zijn opgeslagen @@ -250,22 +206,18 @@ EncryptionTokenSelectionWindow - Token Encryption Key Chooser Token-versleutelingssleutelkiezer - Available Keys for end-to-end Encryption: Beschikbare sleutels voor end-to-end-versleuteling - Choose Kies - Cancel Afbreken @@ -273,7 +225,6 @@ ErrorBox - Error Fout @@ -281,12 +232,10 @@ FileDetailsPage - Activity Activiteit - Sharing Delen @@ -294,7 +243,6 @@ FileDetailsWindow - File details of %1 · %2 Bestandseigenschappen van %1 · %2 @@ -302,35 +250,32 @@ FileProviderEvictionDialog - - Remove local copies - Verwijder lokale kopieën - - - Evict materialised files Gecreëerde items verwijderen - - Local copies - Lokale kopieën - - - Reload Herlaad - Materialised items Gecreëerde items + + FileProviderFastEnumerationSettings + + Enable fast sync + Snelle sync inschakelen + + + Fast sync will only sync changes in files and folders within folders that have been explored. This can significantly increase responsiveness on initial configuration of virtual files. However, it will cause redundant downloads of files moved to an unexplored folder. + Snelle synchronisatie synchroniseert alleen wijzigingen in bestanden en mappen binnen mappen die zijn verkend. Dit kan de reactiesnelheid bij de eerste configuratie van virtuele bestanden aanzienlijk verbeteren. Het zal echter leiden tot overbodige downloads van bestanden die verplaatst zijn naar een niet verkende map. + + FileProviderFileDelegate - Delete Verwijder @@ -338,50 +283,29 @@ FileProviderSettings - Virtual files settings Virtuele bestandsinstellingen - General settings Algemene instellingen - Enable virtual files Virtuele bestanden inschakelen - - - Allow deletion of items in Trash - Sta verwijdering van items in de prullenbak toe - - - - Reset virtual files environment - - FileProviderStorageInfo - Local storage use Gebruik lokale opslag - %1 GB of %2 GB remote files synced %1 GB van %2 GB remote bestanden gesychroniseerd - - Free up space … - Maak ruimte ... - - - Evict local copies … Lokale kopieën verwijderen … @@ -389,22 +313,18 @@ FileProviderSyncStatus - Syncing Synchroniseren - All synced! Alles gesynchroniseerd! - Request sync Vraag synchronisatie aan - Request a sync of changes for the VFS environment. macOS may ignore or delay this request. Vraag een synchronisatie van wijzigingen voor de VFS-omgeving aan. @@ -414,12 +334,10 @@ macOS kan dit verzoek negeren of uitstellen. FileSystem - Error removing "%1": %2 Fout bij verwijderen '%1': %2 - Could not remove folder "%1" Kan map "%1" niet verwijderen @@ -427,22 +345,18 @@ macOS kan dit verzoek negeren of uitstellen. Flow2AuthWidget - Browser Authentication Browserauthenticatie - Logo Logo - Switch to your browser to connect your account Schakel over naar je browser om je account te verbinden - An error occurred while connecting. Please try again. Er is een fout opgetreden tijdens het verbinden. Probeer het opnieuw. @@ -450,12 +364,10 @@ macOS kan dit verzoek negeren of uitstellen. FolderWizardSourcePage - Pick a local folder on your computer to sync Kies een map op je computer om te synchroniseren - &Choose … &Kies ... @@ -463,22 +375,18 @@ macOS kan dit verzoek negeren of uitstellen. FolderWizardTargetPage - Select a remote destination folder Kies een externe doelmap - Create folder Maak map - Refresh Vernieuwen - Folders Mappen @@ -486,35 +394,29 @@ macOS kan dit verzoek negeren of uitstellen. MainWindow - Nextcloud desktop main dialog Nextcloud desktop basisdialoog - Unified search results list - + - New activities - + OCC::AbstractNetworkJob - Connection timed out De verbindingstijd is verstreken - Unknown error: network reply was deleted Onbekende fout: netwerkantwoord verwijderd - Server replied "%1 %2" to "%3 %4" Server antwoordde "%1 %2" naar "%3 %4" @@ -522,17 +424,14 @@ macOS kan dit verzoek negeren of uitstellen. OCC::Account - File %1 is already locked by %2. Bestand %1 is al vergrendeld door %2. - Lock operation on %1 failed with error %2 Vergrendeling van %1 mislukt met fout %2 - Unlock operation on %1 failed with error %2 Ontgrendeling van %1 mislukt met fout %2 @@ -540,41 +439,28 @@ macOS kan dit verzoek negeren of uitstellen. OCC::AccountManager - - An account was detected from a legacy desktop client. -Should the account be imported? - - - - %1 accounts were detected from a legacy desktop client. Should the accounts be imported? %1 accounts van een eerdere desktop cliënt zijn gevonden. Moeten de accounts geïmporteerd worden? - - Legacy import Legacy import - Import Import - 1 account was detected from a legacy desktop client. Should the account be imported? 1 account van een eerdere desktop cliënt is gevonden. Moet dit account geïmporteerd worden? - Skip Overslaan - Could not import accounts from legacy client configuration. Kon geen accounts importeren van legacy client configuratie. @@ -582,255 +468,187 @@ Should the account be imported? OCC::AccountSettings - Unchecked folders will be <b>removed</b> from your local file system and will not be synchronized to this computer anymore Niet-geselecteerde mappen worden <b>verwijderd</b> van je lokale bestandssysteem en zullen niet meer met deze computer worden gesynchroniseerd - Synchronize all Alles synchroniseren - Synchronize none Niets synchroniseren - Apply manual changes Handmatige wijzigingen toepassen - Standard file sync Standaard bestandssynchronisatie - Virtual file sync Virtuele bestandssynchronisatie - Connection settings Verbindingsinstellingen - Apply Toepassen - Storage space: … Opslagruimte: ... - - - Cancel Annuleren - Connected with <server> as <user> Verbonden met <server> als <user> - No account configured. Geen account ingesteld. - End-to-end Encryption with Virtual Files End-to-end versleuteling met virtuele bestanden - You seem to have the Virtual Files feature enabled on this folder. At the moment, it is not possible to implicitly download virtual files that are end-to-end encrypted. To get the best experience with virtual files and end-to-end encryption, make sure the encrypted folder is marked with "Make always available locally". Het lijkt erop dat de functie Virtuele bestanden voor deze map is ingeschakeld. Momenteel is het niet mogelijk om impliciet virtuele bestanden te downloaden die begin-tot-eind versleuteld zijn. Om de beste ervaring met virtuele bestanden en begin-tot-eind versleuteling te krijgen, moet je ervoor zorgen dat de versleutelde map is gemarkeerd met "Altijd lokaal beschikbaar maken". - - Do not encrypt folder Map niet versleutelen - - Encrypt folder Versleutel map - End-to-end Encryption Begin-tot-eind versleuteling - This will encrypt your folder and all files within it. These files will no longer be accessible without your encryption mnemonic key. <b>This process is not reversible. Are you sure you want to proceed?</b> Dit versleutelt je map en alle bestanden in de map. Deze bestanden zijn niet langer toegankelijk zonder je geheugensteunsleutel. <b>Deze actie is onomkeerbaar. Weet je het zeker?</b> - - Forget encryption setup - - - - Disable encryption Encryptie deactiveren - Display mnemonic Geheugensteun weergeven - - Encryption is set-up. Remember to <b>Encrypt</b> a folder to end-to-end encrypt any new files added to it. - - - - End-to-end encryption has been enabled for this account Begin-tot-eind versleuteling is ingeschakeld voor dit account - Warning Waarschuwing - Please wait for the folder to sync before trying to encrypt it. Wacht tot de map gesynchroniseerd is alvorens deze te versleutelen. - The folder has a minor sync problem. Encryption of this folder will be possible once it has synced successfully De map heeft een klein synchronisatieprobleem. Versleuteling van de map is mogelijk als de synchronisatie gelukt is. - The folder has a sync error. Encryption of this folder will be possible once it has synced successfully De map heeft een synchronisatiefout. Versleuteling van de map is mogelijk als de synchronisatie gelukt is. - - You cannot encrypt this folder because the end-to-end encryption is not set-up yet on this device. -Would you like to do this now? - - - - End-to-end encryption is not configured on this device. Once it is configured, you will be able to encrypt this folder. Would you like to set up end-to-end encryption? Begin-tot-eind versleuteling is niet ingesteld op dit apparaat. Als dit ingesteld is kan je deze map versleutelen. Wil je begin-tot-eind versleuteling instellen? - You cannot encrypt a folder with contents, please remove the files. Wait for the new sync, then encrypt it. Je kunt een map met inhoud niet versleutelen, verwijder de bestanden. Wacht op de nieuwe synchronisatie en versleutel ze vervolgens. - Encryption failed Versleuteling mislukt - Could not encrypt folder because the folder does not exist anymore Kon map niet versleutelen omdat de map niet meer bestaat - Encrypt Versleutelen - - Edit Ignored Files Genegeerde bestanden bewerken - - Create new folder Maak nieuwe map aan - - Availability Beschikbaarheid - Choose what to sync Kies wat je wilt synchroniseren - Force sync now Synchronisatie nu forceren - Restart sync Synchronisatie herstarten - Remove folder sync connection Verwijder verbinding voor mapsynchronisatie - Disable virtual file support … Ondersteuning voor virtuele bestanden uitschakelen... - Enable virtual file support %1 … Virtuele bestandsondersteuning inschakelen %1... - (experimental) (experimenteel) - Folder creation failed Map maken mislukt - Confirm Folder Sync Connection Removal Bevestig het verwijderen van de verbinding voor mapsynchronisatie - Remove Folder Sync Connection Verwijder verbinding voor mapsynchronisatie - Disable virtual file support? Ondersteuning voor virtuele bestanden uitschakelen? - This action will disable virtual file support. As a consequence contents of folders that are currently marked as "available online only" will be downloaded. The only advantage of disabling virtual file support is that the selective sync feature will become available again. @@ -843,218 +661,150 @@ Het enige voordeel van het uitschakelen van ondersteuning voor virtuele bestande Dit zal alle synchronisaties, die op dit moment bezig zijn, afbreken. - Disable support Ondersteuning uitschakelen - End-to-end encryption mnemonic Geheugensteun voor begin-tot-eind versleuteling - - To protect your Cryptographic Identity, we encrypt it with a mnemonic of 12 dictionary words. Please note it down and keep it safe. You will need it to set-up the synchronization of encrypted folders on your other devices. - - - - - Forget the end-to-end encryption on this device - - - - - Do you want to forget the end-to-end encryption settings for %1 on this device? - - - - - Forgetting end-to-end encryption will remove the sensitive data and all the encrypted files from this device.<br>However, the encrypted files will remain on the server and all your other devices, if configured. - - - - Sync Running Bezig met synchroniseren - The syncing operation is running.<br/>Do you want to terminate it? Bezig met synchroniseren.<br/>Wil je stoppen met synchroniseren? - %1 in use %1 in gebruik - Migrate certificate to a new one - + - There are folders that have grown in size beyond %1MB: %2 Er zijn bestanden die groter zijn geworden dan %1MB: %2 - - End-to-end encryption has been initialized on this account with another device.<br>Enter the unique mnemonic to have the encrypted folders synchronize on this device as well. - - - - End-to-end encryption has been enabled on this account with another device.<br>It can be enabled on this device by entering your mnemonic.<br>This will enable synchronisation of existing encrypted folders. Begin-tot-eind versleuteling is ingesteld voor dit account op een ander apparaat.<br>Het kan aangezet worden op dit apparaat door je geheugensteun in te voeren.<br>Dit activeert de synchronisatie van bestaande, versleutelde mappen. - - This account supports end-to-end encryption, but it needs to be set up first. - - - - Set up encryption Versleuteling instellen - This account supports end-to-end encryption Dit account ondersteunt end-to-end-versleuteling - Connected to %1. Verbonden met %1. - Server %1 is temporarily unavailable. Server %1 is tijdelijk niet beschikbaar. - Server %1 is currently in maintenance mode. Server %1 is momenteel in onderhoudsmodus. - Signed out from %1. Uitgelogd van %1. - There are folders that were not synchronized because they are too big: Er zijn mappen die niet gesynchroniseerd zijn, omdat ze te groot zijn: - There are folders that were not synchronized because they are external storages: Er zijn mappen die niet gesynchroniseerd zijn, omdat ze op externe opslag staan: - There are folders that were not synchronized because they are too big or external storages: Er zijn mappen die niet gesynchroniseerd zijn, omdat ze te groot zijn of op externe opslag staan: - - Open folder Map openen - Resume sync Synchronisatie hervatten - Pause sync Synchronisatie pauzeren - <p>Could not create local folder <i>%1</i>.</p> <p>Kan lokale map <i>%1</i> niet maken.</p> - <p>Do you really want to stop syncing the folder <i>%1</i>?</p><p><b>Note:</b> This will <b>not</b> delete any files.</p> <p>Weet je zeker dat je het synchroniseren van map <i>%1</i> wilt stoppen?</p><p><b>Opmerking:</b> Dit zal <b>geen</b> bestanden verwijderen.</p> - To protect your Cryptographic Identity, we encrypt it with a mnemonic of 12 dictionary words. Please note these down and keep them safe. They will be needed to add other devices to your account (like your mobile phone or laptop). Om je cryptografische identiteit te beschermen, versleutelen we die met een geheugensteun van 12 woordenboekwoorden. Schrijf deze op en bewaar ze op een veilige plek. Ze zijn nodig om nieuwe apparaten aan je account toe te voegen (zoals je smartphone of laptop). - Disable end-to-end encryption Begin-tot-eind versleuteling uitzetten - Disable end-to-end encryption for %1? Begin-tot-eind versleuteling uitzetten voor %1? - Removing end-to-end encryption will remove locally-synced files that are encrypted.<br>Encrypted files will remain on the server. Verwijderen van begin-tot-eind versleuteling zal de lokale gesynchroniseerde bestanden verwijderen die versleuteld zijn.<br>Versleutelde bestanden blijven aanwezig op de server. - %1 (%3%) of %2 in use. Some folders, including network mounted or shared folders, might have different limits. %1 (%3%) van %2 in gebruik. Sommige mappen, inclusief netwerkmappen en gedeelde mappen, kunnen andere limieten hebben. - %1 of %2 in use %1 van %2 in gebruik - Currently there is no storage usage information available. Er is nu geen informatie over het gebruik van de opslagruimte beschikbaar. - %1 as %2 %1 als %2 - The server version %1 is unsupported! Proceed at your own risk. De serverversie %1 wordt niet ondersteund! Verdergaan is op eigen risico. - Server %1 is currently being redirected, or your connection is behind a captive portal. Server %1 wordt momenteel doorgestuurd of je verbinding zit achter een 'captive portal'. - Connecting to %1 … Verbinden met %1 ... - Unable to connect to %1. Kan niet verbinden met %1. - Server configuration error: %1 at %2. Serverconfiguratiefout: %1 op %2. - You need to accept the terms of service at %1. - + - No %1 connection configured. Geen %1 connectie geconfigureerd. @@ -1062,17 +812,14 @@ Dit zal alle synchronisaties, die op dit moment bezig zijn, afbreken. OCC::AccountSetupFromCommandLineJob - The authenticated request to the server was redirected to "%1". The URL is bad, the server is misconfigured. De geverifieerde aanvraag voor de server werd omgeleid naar "%1". De URL is onjuist, de server is verkeerd geconfigureerd. - Access forbidden by server. To verify that you have proper access, <a href="%1">click here</a> to access the service with your browser. Toegang door server verboden. Om te verifiëren dat je toegang mag hebben, <a href="%1">klik hier</a> om met je browser toegang tot de service te krijgen. - There was an invalid response to an authenticated WebDAV request Er is een ongeldig antwoord ontvangen op een geverifieerde WebDAV aanvraag @@ -1080,57 +827,46 @@ Dit zal alle synchronisaties, die op dit moment bezig zijn, afbreken. OCC::AccountState - Signed out Afgemeld - Disconnected Niet verbonden - Connected Verbonden - Service unavailable Dienst niet beschikbaar - Maintenance mode Onderhoudsmodus - Redirect detected Redirect waargenomen - Network error Netwerkfout - Configuration error Configuratiefout - Asking Credentials Vragen naar inloggegevens - Need the user to accept the terms of service - + - Unknown account state Onbekende account-status @@ -1138,17 +874,14 @@ Dit zal alle synchronisaties, die op dit moment bezig zijn, afbreken. OCC::ActivityListModel - For more activities please open the Activity app. Voor meer activiteiten open de Activiteit app. - Fetching activities … Ophalen activiteiten... - Network error occurred: client will retry syncing. Netwerkfout opgetreden: cliënt probeert synchronisatie opnieuw. @@ -1156,42 +889,34 @@ Dit zal alle synchronisaties, die op dit moment bezig zijn, afbreken. OCC::AddCertificateDialog - SSL client certificate authentication SSL client certificaat authenticatie - This server probably requires a SSL client certificate. De server vereist vermoedelijk een SSL client certificaat. - Certificate & Key (pkcs12): Certificaat & Sleutel (pkcs12): - Certificate password: Wachtwoord certificaat: - An encrypted pkcs12 bundle is strongly recommended as a copy will be stored in the configuration file. Een versleutelde pkcs12-bundel wordt sterk aanbevolen, aangezien er een kopie wordt opgeslagen in het configuratiebestand. - Browse … Bladeren ... - Select a certificate Selecteer een certificaat - Certificate files (*.p12 *.pfx) Certificaat bestanden (*.p12 *.pfx) @@ -1199,71 +924,58 @@ Dit zal alle synchronisaties, die op dit moment bezig zijn, afbreken. OCC::Application - Some settings were configured in %1 versions of this client and use features that are not available in this version.<br><br>Continuing will mean <b>%2 these settings</b>.<br><br>The current configuration file was already backed up to <i>%3</i>. Sommige instellingen zijn geconfigureerd in nieuwere versies van deze cliënt en maken gebruik van functies die niet beschikbaar zijn in deze versie.<br><br>Doorgaan betekent <br>%2 van deze instellingen</br>. Van het huidige configuratiebestand is al een back-up gemaakt naar <i>%3</i>. - newer newer software version recenter - older older software version ouder - ignoring negeren - deleting verwijderen - Quit Stoppen - Continue Doorgaan - %1 accounts number of accounts imported %1 accounts - 1 account 1 account - %1 folders number of folders imported %1 mappen - 1 folder 1 map - Legacy import Legacy import - Imported %1 and %2 from a legacy desktop client. %3 number of accounts and folders imported. list of users. @@ -1271,12 +983,10 @@ Dit zal alle synchronisaties, die op dit moment bezig zijn, afbreken. - Error accessing the configuration file Fout bij benaderen configuratiebestand - There was an error while accessing the configuration file at %1. Please make sure the file can be accessed by your system account. Fout bij het benaderen van het configuratiebestand op %1. Zorg ervoor dat het bestand door je systeemaccount kan worden benaderd. @@ -1284,22 +994,18 @@ Dit zal alle synchronisaties, die op dit moment bezig zijn, afbreken. OCC::AuthenticationDialog - Authentication Required Authenticatie vereist - Enter username and password for "%1" at %2. Geef gebruikersnaam en wachtwoord op voor "%1" bij %2. - &Username: &Gebruikersnaam: - &Password: &Wachtwoord: @@ -1307,115 +1013,57 @@ Dit zal alle synchronisaties, die op dit moment bezig zijn, afbreken. OCC::BasePropagateRemoteDeleteEncrypted - "%1 Failed to unlock encrypted folder %2". "%1 kon versleutelde map %2" niet ontgrendelen. - Wrong HTTP code returned by server. Expected 204, but received "%1 %2". Foutieve HTTP code ontvangen van de server. Verwacht was 204, maar ontvangen "%1 %2". - - OCC::BulkPropagatorDownloadJob - - - - File has changed since discovery - - - - - Could not delete file record %1 from local DB - - - - - File %1 cannot be downloaded because it is non virtual! - - - - - Could not get file %1 from local DB - - - - - File %1 cannot be downloaded because encryption information is missing. - - - - - Error updating metadata: %1 - - - - - The file %1 is currently in use - - - OCC::BulkPropagatorJob - File %1 cannot be uploaded because another file with the same name, differing only in case, exists Bestand %1 kan niet worden geüpload omdat er al een ander bestand met dezelfde naam bestaat, al verschillen hoofd/kleine letters - - File contains leading or trailing spaces and couldn't be renamed - - - - File %1 has invalid modified time. Do not upload to the server. Bestand %1 heeft een ongeldige wijzigingstijd. Niet uploaden naar de server. - File Removed (start upload) %1 Bestand verwijderd (start upload) %1 - File %1 has invalid modification time. Do not upload to the server. Bestand %1 heeft een ongeldige laatste wijziging datum. Upload niet naar de server. - Local file changed during syncing. It will be resumed. Lokaal bestand gewijzigd gedurende synchronisatie. Wordt opnieuw meegenomen. - - Local file changed during sync. Lokaal bestand gewijzigd tijdens synchronisatie. - Network error: %1 Netwerkfout: %1 - Error updating metadata: %1 Fout bij bijwerken metadata: %1 - The file %1 is currently in use Bestand %1 is momenteel in gebruik - The local file was removed during sync. Het lokale bestand werd verwijderd tijdens synchronisatie. - Restoration failed: %1 Herstellen mislukt: %1 @@ -1423,37 +1071,30 @@ Dit zal alle synchronisaties, die op dit moment bezig zijn, afbreken. OCC::CaseClashConflictSolver - Cannot rename file because a file with the same name already exists on the server. Please pick another name. Kan het bestand niet hernoemen omdat er al een bestand met dezelfde naam op de server bestaat. Kies een andere naam. - Could not rename file. Please make sure you are connected to the server. Kan het bestand niet hernoemen. Zorg dat je verbonden bent met de server. - You don't have the permission to rename this file. Please ask the author of the file to rename it. Je bent niet gemachtigd om dit bestand te hernoemen. Vraag de auteur van het bestand om het te hernoemen. - Failed to fetch permissions with error %1 Ophalen van machtigingen mislukt met fout %1 - Filename contains leading and trailing spaces. De bestandsnaam bevat spaties vooraan en achteraan. - Filename contains leading spaces. De bestandsnaam bevat spaties vooraan. - Filename contains trailing spaces. De bestandsnaam bevat spaties achteraan. @@ -1461,111 +1102,86 @@ Dit zal alle synchronisaties, die op dit moment bezig zijn, afbreken. OCC::CaseClashFilenameDialog - Case Clash Conflict Conflict in hoofdlettergebruik - The file could not be synced because it generates a case clash conflict with an existing file on this system. Dit bestand kon niet worden gesynchroniseerd omdat er een conflict is in hoofdlettergebruik. - Error Fout - Existing file Bestaand bestand - file A bestand A - - today vandaag - - 0 byte 0 bytes - - Open existing file Open bestaand bestand - Case clashing file Bestand met conflict in hoofdlettergebruik - file B bestand B - - Open clashing file Open bestand met conflict - Please enter a new name for the clashing file: Voer alsjeblieft een nieuwe naam in voor het bestand met het conflict: - New filename Nieuwe bestandsnaam - Rename file Bestand hernoemen - The file "%1" could not be synced because of a case clash conflict with an existing file on this system. Het bestand %1 kan niet worden gesynchroniseerd vanwege een conflict in hoofdlettergebruik met een bestaand bestand op dit systeem. - %1 does not support equal file names with only letter casing differences. %1 ondersteund geen overeenkomstige bestandsnamen met verschil in hoofdlettergebruik. - Filename contains leading and trailing spaces. De bestandsnaam bevat spaties vooraan en achteraan. - Filename contains leading spaces. De bestandsnaam bevat spaties vooraan. - Filename contains trailing spaces. De bestandsnaam bevat spaties achteraan. - Use invalid name Gebruik ongeldige naam - Filename contains illegal characters: %1 Bestandsnaam bevat ongeldige tekens: %1 @@ -1573,7 +1189,6 @@ Dit zal alle synchronisaties, die op dit moment bezig zijn, afbreken. OCC::CleanupPollsJob - Error writing metadata to the database Fout bij schrijven van metadata naar de database @@ -1581,33 +1196,27 @@ Dit zal alle synchronisaties, die op dit moment bezig zijn, afbreken. OCC::ClientSideEncryption - Input PIN code Please keep it short and shorter than "Enter Certificate USB Token PIN:" - + - Enter Certificate USB Token PIN: - + - Invalid PIN. Login failed - + - Login to the token failed after providing the user PIN. It may be invalid or wrong. Please try again! - + - Please enter your end-to-end encryption passphrase:<br><br>Username: %2<br>Account: %3<br> Voer je begin-tot-eind versleutelingswachtwoord in: <br><br>Gebruiker: %2<br>Account: %3<br> - Enter E2E passphrase Invoeren E2E wachtwoord @@ -1615,87 +1224,66 @@ Dit zal alle synchronisaties, die op dit moment bezig zijn, afbreken. OCC::ConflictDialog - Sync Conflict Synchronisatieconflict - - Conflicting versions of %1. Conflicterende versies van %1. - Which version of the file do you want to keep?<br/>If you select both versions, the local file will have a number added to its name. Welke versie van het bestand wil je bewaren? <br/>Als je beide versies selecteert, wordt er een getal achter de bestandsnaam van het lokale bestand gezet. - Local version Lokale versie - - Click to open the file Klik om het bestand te openen - - today vandaag - - 0 byte 0 bytes - <a href="%1">Open local version</a> <a href="%1">Open lokale versie</a> - Server version Serverversie - <a href="%1">Open server version</a> <a href="%1">Open serverversie</a> - - Keep selected version Bewaar geselecteerde versie - Open local version Open lokale versie - Open server version Open serverversie - Keep both versions Bewaar beide versies - Keep local version Bewaar lokale versie - Keep server version Bewaar serverversie @@ -1703,14 +1291,10 @@ Dit zal alle synchronisaties, die op dit moment bezig zijn, afbreken. OCC::ConflictSolver - - Error Fout - - Moving file failed: %1 @@ -1719,17 +1303,14 @@ Dit zal alle synchronisaties, die op dit moment bezig zijn, afbreken. - Do you want to delete the directory <i>%1</i> and all its contents permanently? Wil je de map <i>%1</i>met gehele inhoud permanent verwijderen? - Do you want to delete the file <i>%1</i> permanently? Wil je het bestand <i>%1</i>permanent verwijderen? - Confirm deletion Bevestig verwijderen @@ -1737,32 +1318,26 @@ Dit zal alle synchronisaties, die op dit moment bezig zijn, afbreken. OCC::ConnectionValidator - Timeout Time-out - The configured server for this client is too old De voor dit programma ingestelde server is te oud - Please update to the latest server and restart the client. Werk de server bij naar de nieuwste versie en herstart het programma. - Authentication error: Either username or password are wrong. Authenticatiefout: Gebruikersnaam of wachtwoord onjuist. - No Nextcloud account configured Geen Nextcloud-account geconfigureerd - The provided credentials are not correct De verstrekte inloggegevens zijn niet juist @@ -1770,12 +1345,10 @@ Dit zal alle synchronisaties, die op dit moment bezig zijn, afbreken. OCC::DiscoveryPhase - Error while canceling deletion of a file Fout bij het annuleren van verwijdering van een bestand - Error while canceling deletion of %1 Fout bij annuleren verwijderen van %1 @@ -1783,47 +1356,37 @@ Dit zal alle synchronisaties, die op dit moment bezig zijn, afbreken. OCC::DiscoverySingleDirectoryJob - - Server error: PROPFIND reply is not XML formatted! Serverfout: PROPFIND-antwoord heeft geen XML-opmaak! - - Encrypted metadata setup error! Fout bij instellen versleutelde metadata! - Encrypted metadata setup error: initial signature from server is empty. - + OCC::DiscoverySingleLocalDirectoryJob - Error while opening directory %1 Fout bij het openen van map %1 - Directory not accessible on client, permission denied Map niet toegankelijk op client, toegang geweigerd - Directory not found: %1 Map niet gevonden: %1 - Filename encoding is not valid Bestandsnaamcodering is niet geldig - Error while reading directory %1 Fout tijdens lezen van map %1 @@ -1831,93 +1394,62 @@ Dit zal alle synchronisaties, die op dit moment bezig zijn, afbreken. OCC::EditLocallyJob - - - - - - - - Could not start editing locally. Kon lokaal bewerken niet starten. - - An error occurred during setup. Er trad een fout op bij het instellen. - - Could not find a file for local editing. Make sure its path is valid and it is synced locally. Kon geen bestand vinden om lokaal te bewerken. Zorg ervoor dat het pad juist is en dat het lokaal gesynchroniseerd is. - - - - Could not find a file for local editing. Make sure it is not excluded via selective sync. Kon geen bestand vinden om lokaal te bewerken. Zorg ervoor dat het niet uitgesloten is door selectieve synchronisatie. - - - An error occurred during data retrieval. Er trad een fout op tijdens het ophalen van data. - - An error occurred trying to synchronise the file to edit locally. Er trad een fout op bij de poging het bestand voor lokaal bewerken te synchroniseren. - Server error: PROPFIND reply is not XML formatted! Serverfout: PROPFIND-antwoord heeft geen XML-opmaak! - Could not find a remote file info for local editing. Make sure its path is valid. Kon geen remote bestandsinformatie vinden om lokaal te bewerken. Zorg ervoor dat het pad juist is. - Invalid local file path. Ongeldig lokaal bestandspad. - Could not open %1 Kon %1 niet openen - Please try again. Probeer a.u.b opnieuw - File %1 already locked. Bestand %1 is al vergrendeld. - - Lock will last for %1 minutes. You can also unlock this file manually once you are finished editing. Vergrendeling duurt %1 minuten. Als je klaar bent met verwerken, kan je het bestand ook handmatig ontgrendelen. - File %1 now locked. Bestand %1 is nu vergrendeld. - File %1 could not be locked. Bestand %1 kon niet vergrendeld worden. @@ -1925,12 +1457,10 @@ Dit zal alle synchronisaties, die op dit moment bezig zijn, afbreken. OCC::EditLocallyManager - Could not validate the request to open a file from server. Kon de aanvraag niet valideren voor het openen van een bestand op de server. - Please try again. Probeer a.u.b opnieuw @@ -1938,34 +1468,26 @@ Dit zal alle synchronisaties, die op dit moment bezig zijn, afbreken. OCC::EditLocallyVerificationJob - Invalid token received. Ongeldig token ontvangen. - - - Please try again. Probeer a.u.b opnieuw - Invalid file path was provided. Ongeldig pad opgegeven. - Could not find an account for local editing. Kon geen account vinden voor lokaal bewerken. - Could not start editing locally. Kon lokaal bewerken niet starten. - An error occurred trying to verify the request to edit locally. Er trad een fout op bij de aanvraag voor lokaal bewerken. @@ -1973,7 +1495,6 @@ Dit zal alle synchronisaties, die op dit moment bezig zijn, afbreken. OCC::EncryptFolderJob - Could not generate the metadata for encryption, Unlocking the folder. This can be an issue with your OpenSSL libraries. Kan de metadata voor versleuteling niet genereren, de map wordt ontgrendeld. @@ -1983,34 +1504,22 @@ Dit kan een probleem zijn met je OpenSSL-bibliotheken. OCC::EncryptedFolderMetadataHandler - - - - - - Error fetching metadata. Fout bij ophalen metadata: %1 - - - Error locking folder. Fout bij vergrendelen map. - Error fetching encrypted folder ID. Fout bij ophalen ID van versleutelde map. - Error parsing or decrypting metadata. Fout bij verwerken of ontsleutelen metadata. - Failed to upload metadata Kon metadata niet uploaden. @@ -2018,86 +1527,85 @@ Dit kan een probleem zijn met je OpenSSL-bibliotheken. OCC::FileDetails - %1 second(s) ago seconds elapsed since file last modified - + + + + - %1 minute(s) ago minutes elapsed since file last modified - + + + + - %1 hour(s) ago hours elapsed since file last modified - + + + + - %1 day(s) ago days elapsed since file last modified - + + + + - %1 month(s) ago months elapsed since file last modified - + + + + - %1 year(s) ago years elapsed since file last modified - + + + + - Locked by %1 - Expires in %2 minute(s) remaining time before lock expires - + + + + OCC::Flow2Auth - The returned server URL does not start with HTTPS despite the login URL started with HTTPS. Login will not be possible because this might be a security issue. Please contact your administrator. De geretourneerde server-URL begint niet met HTTPS, ondanks dat de inlog-URL begint met HTTPS. Inloggen is niet mogelijk omdat dit een beveiligingsprobleem kan zijn. Neem contact op met je beheerder. - - Error returned from the server: <em>%1</em> Fout gemeld door de server: <em>%1</em> - The polling URL does not start with HTTPS despite the login URL started with HTTPS. Login will not be possible because this might be a security issue. Please contact your administrator. De polling-URL begint niet met HTTPS, ondanks dat de login-URL met HTTPS begint. Inloggen is niet mogelijk omdat dit een beveiligingsprobleem kan zijn. Neem contact op met je beheerder. - - There was an error accessing the "token" endpoint: <br><em>%1</em> Er trad een fout op bij het benaderen van het "token" endpoint: <br><em>%1</em> - - The reply from the server did not contain all expected fields Het antwoord van de server bevatte niet alle verwachte velden - - The reply from the server did not contain all expected fields: <br><em>%1</em> - - - - - Could not parse the JSON returned from the server: <br><em>%1</em> Kan de van de server ontvangen JSON niet verwerken: <br><em>%1</em> @@ -2105,37 +1613,30 @@ Dit kan een probleem zijn met je OpenSSL-bibliotheken. OCC::Flow2AuthWidget - Unable to open the Browser, please copy the link to your Browser. Kan de browser niet openen, kopieer de link naar je browser. - Waiting for authorization Wachten op autorisatie - Polling for authorization Controleren op autorisatie - Starting authorization Starten autorisatie - Link copied to clipboard. Link gekopieerd naar het klembord. - Open Browser - + - Copy Link Kopiëren link @@ -2143,172 +1644,164 @@ Dit kan een probleem zijn met je OpenSSL-bibliotheken. OCC::Folder - %1 has been removed. %1 names a file. %1 is verwijderd. - %1 has been updated. %1 names a file. %1 is bijgewerkt. - %1 has been renamed to %2. %1 and %2 name files. %1 is hernoemd naar %2. - %1 has been moved to %2. %1 is verplaatst naar %2. - %1 and %n other file(s) have been removed. - + + + + - Please choose a different location. The folder %1 doesn't exist. - + - Please choose a different location. %1 isn't a valid folder. - + - Please choose a different location. %1 isn't a readable folder. - + - %1 and %n other file(s) have been added. - %1 en %n andere bestand zijn toegevoegd.%1 en %n andere bestanden zijn toegevoegd. + + %1 en %n andere bestand zijn toegevoegd. + %1 en %n andere bestanden zijn toegevoegd. + - %1 has been added. %1 names a file. %1 is toegevoegd. - %1 and %n other file(s) have been updated. - %1 en %n ander bestand(en) zijn bijgewerkt.%1 en %n andere bestand(en) zijn bijgewerkt. + + %1 en %n ander bestand(en) zijn bijgewerkt. + %1 en %n andere bestand(en) zijn bijgewerkt. + - %1 has been renamed to %2 and %n other file(s) have been renamed. - %1 is hernoemd naar %2 en %n ander bestand(en) is hernoemd.%1 is hernoemd naar %2 en %n andere bestand(en) zijn hernoemd. + + %1 is hernoemd naar %2 en %n ander bestand(en) is hernoemd. + %1 is hernoemd naar %2 en %n andere bestand(en) zijn hernoemd. + - %1 has been moved to %2 and %n other file(s) have been moved. - %1 is verplaatst naar %2 en %n ander bestand(en) is verplaatst.%1 is verplaatst naar %2 en %n andere bestand(en) zijn verplaatst. + + %1 is verplaatst naar %2 en %n ander bestand(en) is verplaatst. + %1 is verplaatst naar %2 en %n andere bestand(en) zijn verplaatst. + - %1 has and %n other file(s) have sync conflicts. - %1 en %n ander bestand(en) hebben een sync conflict.%1 en %n andere bestand(en) hebben synchronisatie-conflicten. + + %1 en %n ander bestand(en) hebben een sync conflict. + %1 en %n andere bestand(en) hebben synchronisatie-conflicten. + - %1 has a sync conflict. Please check the conflict file! %1 heeft een synchronisatie-conflict. Controleer het conflictbestand! - %1 and %n other file(s) could not be synced due to errors. See the log for details. - %1 en %n ander bestand(en) konden niet worden gesynchroniseerd wegens fouten. Bekijk het log voor details.%1 en %n andere bestand(en) konden niet worden gesynchroniseerd wegens fouten. Bekijk het log voor details. + + %1 en %n ander bestand(en) konden niet worden gesynchroniseerd wegens fouten. Bekijk het log voor details. + %1 en %n andere bestand(en) konden niet worden gesynchroniseerd wegens fouten. Bekijk het log voor details. + - %1 could not be synced due to an error. See the log for details. %1 kon niet worden gesynchroniseerd door een fout. Bekijk het log voor details. - %1 and %n other file(s) are currently locked. - %1 en %n ander bestand zijn momenteel op slot.%1 en %n ander(e) bestand(en) zijn momenteel op slot. + + %1 en %n ander bestand zijn momenteel op slot. + %1 en %n ander(e) bestand(en) zijn momenteel op slot. + - %1 is currently locked. %1 is momenteel op slot. - Sync Activity Synchronisatie-activiteit - Could not read system exclude file Kon het systeem-uitsluitingsbestand niet lezen - A new folder larger than %1 MB has been added: %2. Er is een nieuwe map groter dan %1 MB toegevoegd: %2. - A folder from an external storage has been added. Er is een map op externe opslag toegevoegd. - Please go in the settings to select it if you wish to download it. Ga naar de instellingen om het te selecteren als u deze wilt downloaden. - A folder has surpassed the set folder size limit of %1MB: %2. %3 Een map is groter geworden dan de ingestelde limiet van %1MB: %2. %3 - Keep syncing Doorgaan met synchronisatie - Stop syncing Stop synchronisatie - The folder %1 has surpassed the set folder size limit of %2MB. De map %1 is groter geworden dan de ingestelde limiet van %2MB - Would you like to stop syncing this folder? Wil je stoppen met het synchroniseren van deze map? - The folder %1 was created but was excluded from synchronization previously. Data inside it will not be synchronized. Map %1 is gecreëerd, maar eerder uitgesloten van synchronisatie. Bestanden erin worden niet gesynchroniseerd. - The file %1 was created but was excluded from synchronization previously. It will not be synchronized. Bestand %1 is gecreëerd, maar eerder uitgesloten van synchronisatie. Het wordt niet gesynchroniseerd. - Changes in synchronized folders could not be tracked reliably. This means that the synchronization client might not upload local changes immediately and will instead only scan for local changes and upload them occasionally (every two hours by default). @@ -2321,69 +1814,57 @@ Dit betekent dat de synchronisatieclient misschien niet meteen lokale wijziginge %1 - Virtual file download failed with code "%1", status "%2" and error message "%3" - + - A large number of files in the server have been deleted. -Please confirm if you'd like to proceed with these deletions. +Please confirm if you'd like to proceed with these deletions. Alternatively, you can restore all deleted files by uploading from '%1' folder to the server. - + - - A large number of files in your local '%1' folder have been deleted. -Please confirm if you'd like to proceed with these deletions. + A large number of files in your local '%1' folder have been deleted. +Please confirm if you'd like to proceed with these deletions. Alternatively, you can restore all deleted files by downloading them from the server. - + - Remove all files? Alle bestanden verwijderen? - Proceed with Deletion - + - Restore Files to Server - + - Restore Files from Server - + OCC::FolderCreationDialog - Create new folder Maak nieuwe map aan - Enter folder name Geef mapnaam op - Folder already exists Map bestaat al - Error Fout - Could not create a folder! Check your write permissions. Kan map niet aanmaken! Controleer je schrijfmachtiging. @@ -2391,149 +1872,119 @@ Alternatively, you can restore all deleted files by downloading them from the se OCC::FolderMan - Could not reset folder state Kan de beginstaat van de map niet terugzetten - (backup) (backup) - (backup %1) (backup %1) - An old sync journal "%1" was found, but could not be removed. Please make sure that no application is currently using it. Een oud synchronisatieverslag "%1" is gevonden maar kan niet worden verwijderd. Zorg ervoor dat geen applicatie dit bestand gebruikt. - Undefined state. Ongedefinieerde status. - Waiting to start syncing. In afwachting van synchronisatie. - Preparing for sync. Synchronisatie wordt voorbereid - Syncing %1 of %2 (A few seconds left) - + - Syncing %1 of %2 (%3 left) - + - Syncing %1 of %2 - + Synchroniseren %1 van %2 - Syncing %1 (A few seconds left) - + - Syncing %1 (%2 left) - + Synchroniseren %1 (%2 over) - Syncing %1 - + Synchroniseren %1 - Sync is running. Bezig met synchroniseren. - Sync finished with unresolved conflicts. Synchronisatie beëindigd met niet opgeloste conflicten. - Last sync was successful. Laatste synchronisatie was geslaagd. - Setup error. Installatiefout. - Sync request was cancelled. Synchronisatieaanvraag werd geannuleerd. - Please choose a different location. The selected folder isn't valid. - + - - Please choose a different location. %1 is already being used as a sync folder. - + - Please choose a different location. The path %1 doesn't exist. - + - Please choose a different location. The path %1 isn't a folder. - + - - Please choose a different location. You don't have enough permissions to write to %1. folder location - + - Please choose a different location. %1 is already contained in a folder used as a sync folder. - + - Please choose a different location. %1 is already being used as a sync folder for %2. folder location, server url - + - The folder %1 is linked to multiple accounts. This setup can cause data loss and it is no longer supported. To resolve this issue: please remove %1 from one of the accounts and create a new sync folder. For advanced users: this issue might be related to multiple sync database files found in one folder. Please check %1 for outdated and unused .sync_*.db files and remove them. - + - Sync is paused. Synchronisatie gepauzeerd. - %1 (Sync is paused) %1 (Synchronisatie onderbroken) @@ -2541,12 +1992,10 @@ For advanced users: this issue might be related to multiple sync database files OCC::FolderStatusDelegate - Add Folder Sync Connection Toevoegen mapsynchronisatie verbinding - File Bestand @@ -2554,157 +2003,129 @@ For advanced users: this issue might be related to multiple sync database files OCC::FolderStatusModel - You need to be connected to add a folder U moet verbonden zijn om een map toe te voegen - Click this button to add a folder to synchronize. Klik op deze knop om een te synchroniseren map toe te voegen. - Could not decrypt! Kon niet ontsleutelen! - - %1 (%2) %1 (%2) - Error while loading the list of folders from the server. Fout bij ophalen mappenlijst van de server. - Virtual file support is enabled. Virtuele bestandsondersteuning is ingeschakeld. - Signed out Afgemeld - Synchronizing virtual files in local folder Synchroniseren virtuele bestanden in lokale map - Synchronizing files in local folder Synchroniseren bestanden in lokale map - Checking for changes in remote "%1" Controleren op wijzigingen in externe "%1" - Checking for changes in local "%1" Controleren op wijzigingen in lokale "%1" - Syncing local and remote changes Synchroniseren lokale en remote aanpassingen - %1 %2 … - Example text: "Uploading foobar.png (1MB of 2MB) time left 2 minutes at a rate of 24Kb/s" Example text: "Syncing 'foo.txt', 'bar.txt'" + Example text: "Uploading foobar.png (1MB of 2MB) time left 2 minutes at a rate of 24Kb/s" Example text: "Syncing 'foo.txt', 'bar.txt'" %1 %2 ... - Download %1/s Example text: "Download 24Kb/s" (%1 is replaced by 24Kb (translated)) Download %1/s - File %1 of %2 Bestand %1 van %2 - There are unresolved conflicts. Click for details. Er zijn nog niet-opgehelderde conflicten. Klik voor details. - - , , - Fetching folder list from server … Mappenlijst ophalen van de server ... - ↓ %1/s ↓ %1/s - Upload %1/s Example text: "Upload 24Kb/s" (%1 is replaced by 24Kb (translated)) Upload %1/s - ↑ %1/s ↑ %1/s - %1 %2 (%3 of %4) Example text: "Uploading foobar.png (2MB of 2MB)" %1 %2 (%3 van %4) - %1 %2 Example text: "Uploading foobar.png" %1 %2 - A few seconds left, %1 of %2, file %3 of %4 Example text: "5 minutes left, 12 MB of 345 MB, file 6 of 7" Een paar seconden over, %1 van %2, bestand %3 van %4 - %5 left, %1 of %2, file %3 of %4 %5 over, %1 van %2, bestand %3 van %4 - %1 of %2, file %3 of %4 Example text: "12 MB of 345 MB, file 6 of 7" %1 van %2, bestand %3 van %4 - Waiting for %n other folder(s) … - Wacht op %n andere map ...Wacht op %n andere mappen ... + + Wacht op %n andere map ... + Wacht op %n andere mappen ... + - About to start syncing In afwachting van synchronisatie - Preparing to sync … Voorbereiden synchronisatie ... @@ -2712,7 +2133,6 @@ For advanced users: this issue might be related to multiple sync database files OCC::FolderWatcher - The watcher did not receive a test notification. De kijker ontving geen testmelding. @@ -2720,7 +2140,6 @@ For advanced users: this issue might be related to multiple sync database files OCC::FolderWatcherPrivate - This problem usually happens when the inotify watches are exhausted. Check the FAQ for details. Dit gebeurt gewoonlijk wanneer de inotify monitors op zijn. Klik op de FAQ voor details. @@ -2728,12 +2147,10 @@ For advanced users: this issue might be related to multiple sync database files OCC::FolderWizard - Add Folder Sync Connection Toevoegen mapsynchronisatie verbinding - Add Sync Connection Toevoegen Sync verbinding @@ -2741,17 +2158,14 @@ For advanced users: this issue might be related to multiple sync database files OCC::FolderWizardLocalPath - Click to select a local folder to sync. Klikken om een lokale map te selecteren voor synchronisatie - Enter the path to the local folder. Geef het pad op naar de lokale map. - Select the source folder Selecteer de bronmap @@ -2759,102 +2173,76 @@ For advanced users: this issue might be related to multiple sync database files OCC::FolderWizardRemotePath - Create Remote Folder Externe map aanmaken - Enter the name of the new folder to be created below "%1": Voer de naam van de hieronder te maken nieuwe map in "%1": - Folder was successfully created on %1. Map is succesvol aangemaakt op %1. - Authentication failed accessing %1 Authenticatie mislukt bij benaderen %1 - Failed to create the folder on %1. Please check manually. Aanmaken van de map op %1 mislukt. Controleer handmatig. - Failed to list a folder. Error: %1 Tonen mappenlijst mislukt. Fout: %1 - Choose this to sync the entire account Kies dit om je volledige account te synchroniseren - - - Please choose a different location. %1 is already being synced to %2. - - - - - You are already syncing the subfolder %1 at %2. - + OCC::FolderWizardSelectiveSync - - Use virtual files instead of downloading content immediately %1 Gebruik virtuele bestanden in plaats van de content direct te downloaden %1 - - (experimental) (experimenteel) - Virtual files are not supported for Windows partition roots as local folder. Please choose a valid subfolder under drive letter. Virtuele bestanden worden niet ondersteund voor Windows-partitie-hoofdmappen als lokale map. Kies een geldige submap onder de stationsletter. - Virtual files are not supported at the selected location - + OCC::GETFileJob - No E-Tag received from server, check Proxy/Gateway Geen E-Tag ontvangen van de server, controleer Proxy/Gateway - We received a different E-Tag for resuming. Retrying next time. We ontvingen een afwijkende E-Tag om door te gaan. We proberen het later opnieuw. - We received an unexpected download Content-Length. We ontvingen een onverwachte download Content-Lengte. - Server returned wrong content-range Server retourneerde verkeerde content-bandbreedte - Connection Timeout Verbindingstime-out @@ -2862,277 +2250,212 @@ For advanced users: this issue might be related to multiple sync database files OCC::GeneralSettings - General Settings Algemene instellingen - Show Call Notifications Toon oproepmeldingen - For System Tray Voor systeemvak - Show Chat Notifications - + - Show Server &Notifications Tonen server&meldingen - Advanced Geavanceerd - MB Trailing part of "Ask confirmation before syncing folder larger than" MB - Ask for confirmation before synchronizing external storages Vraag bevestiging voor synchronisatie van mappen op externe opslag - &Launch on System Startup &Starten bij systeemstart - Use &Monochrome Icons &Monochrome pictogrammen gebruiken - Ask for confirmation before synchronizing new folders larger than Vraag bevestiging voordat mappen worden gesynchroniseerd groter dan - Notify when synchronised folders grow larger than specified limit Melding als gesynchroniseerde mappen groter worden dan de opgegeven limiet - Automatically disable synchronisation of folders that overcome limit Synchronisatie automatisch uitschakelen van mappen die de limiet overschrijden - Move removed files to trash Verplaats verwijderde bestanden naar de prullenbak - Show sync folders in &Explorer's navigation pane Toon synchronisatiemappen in &Verkennen navigatievenster - S&how crash reporter T&onen crash reporter - Server poll interval - + - seconds (if <a href="https://github.com/nextcloud/notify_push">Client Push</a> is unavailable) - + - Edit &Ignored Files Bewerken &genegeerde bestanden - - Create Debug Archive Debugarchief maken - Info Info - Desktop client x.x.x Desktop cliënt x.x.x - Update channel Bijwerkkanaal - &Automatically check for updates &Controleer automatisch op updates - Check Now Controleer nu - Usage Documentation Gebruiksdocumentatie - Legal Notice Juridische bepalingen - - Restore &Default - - - - &Restart && Update &Herstarten && Bijwerken - Server notifications that require attention. Servermeldingen die aandacht nodig hebben. - Show chat notification dialogs. - + - Show call notification dialogs. Toon oproepmeldingenvensters. - You cannot disable autostart because system-wide autostart is enabled. Je kunt autostart niet uitschakelen omdat systeem-brede autostart is ingeschakeld. - - Restore to &%1 - - - - stable stabiel - beta beta - daily dagelijks - enterprise zakelijk - - beta: contains versions with new features that may not be tested thoroughly - daily: contains versions created daily only for testing and development Downgrading versions is not possible immediately: changing from beta to stable means waiting for the new stable version. list of available update channels to non enterprise users and downgrading warning - + - - enterprise: contains stable versions for customers. Downgrading versions is not possible immediately: changing from stable to enterprise means waiting for the new enterprise version. list of available update channels to enterprise users and downgrading warning - + - Changing update channel? Wijzigen bijwerkkanaal? - The channel determines which upgrades will be offered to install: - stable: contains tested versions considered reliable starts list of available update channels, stable is always available - + - Change update channel Wijzigen bijwerkkanaal - Cancel Annuleren - Zip Archives Zip Archieven - Debug Archive Created Debugarchief Aangemaakt - Debug archive is created at %1 Debugarchief is gemaakt op %1 - - - Redact information deemed sensitive before sharing! Debug archive created at %1 - - OCC::GetOrCreatePublicLinkShare - Password for share required Wachtwoord voor deellink vereist - Please enter a password for your link share: Voer het wachtwoord in voor je deellink: - Sharing error Fout bij delen - Could not retrieve or create the public link share. Error: %1 @@ -3144,22 +2467,18 @@ Downgrading versions is not possible immediately: changing from stable to enterp OCC::HttpCredentialsGui - Please enter %1 password:<br><br>Username: %2<br>Account: %3<br> Voer %1 wachtwoord in:<br><br>Gebruiker: %2<br>Account: %3<br> - Reading from keychain failed with error: "%1" Het lezen van de sleutelketen is mislukt met fout: "%1" - Enter Password Vul het wachtwoord in - <a href="%1">Click here</a> to request an app password from the web interface. <a href="%1">Klik hier</a> om een nieuw app wachtwoord via de web interface op te vragen. @@ -3167,27 +2486,22 @@ Downgrading versions is not possible immediately: changing from stable to enterp OCC::IgnoreListEditor - Ignored Files Editor Genegeerde bestanden-editor - Global Ignore Settings Algemene negeer-instellingen - Sync hidden files Synchroniseer verborgen bestanden - Files Ignored by Patterns Bestanden volgens patroon genegeerd - This entry is provided by the system at "%1" and cannot be modified in this view. Dit gegeven is door het systeem vastgelegd op "%1" en kan niet worden aangepast in deze weergave. @@ -3195,32 +2509,26 @@ Downgrading versions is not possible immediately: changing from stable to enterp OCC::IgnoreListTableWidget - Pattern Patroon - Allow Deletion Verwijderen toestaan - Add Toevoegen - Remove Verwijderen - Remove all Alles verwijderen - Files or folders matching a pattern will not be synchronized. Items where deletion is allowed will be deleted if they prevent a directory from being removed. This is useful for meta data. @@ -3229,22 +2537,18 @@ Items where deletion is allowed will be deleted if they prevent a directory from Onderdelen die gewist mogen worden, worden verwijderd als ze verhinderen dat een map verdwijnt. Dit is nuttig voor metadata. - Could not open file Kan het bestand niet openen - Cannot write changes to "%1". Kan geen wijzigingen wegschrijven naar "%1". - Add Ignore Pattern Toevoegen negeerpatroon - Add a new ignore pattern: Voeg nieuw negeerpatroon toe: @@ -3252,159 +2556,117 @@ Onderdelen die gewist mogen worden, worden verwijderd als ze verhinderen dat een OCC::InvalidFilenameDialog - Invalid filename Ongeldige bestandsnaam - The file could not be synced because it contains characters which are not allowed on this system. Dit bestand kon niet worden gesynchroniseerd omdat het symbolen bevat die niet toegestaan zijn op dit systeem. - Error Fout - Please enter a new name for the file: Voer alsjeblieft een nieuwe naam voor dit bestand in: - New filename Nieuwe bestandsnaam - Rename file Bestand hernoemen - The file "%1" could not be synced because the name contains characters which are not allowed on this system. Het bestand %1 kan niet worden gesynchroniseerd omdat de naam tekens bevat die niet zijn toegestaan op dit systeem. - The following characters are not allowed on the system: \ / : ? * " < > | leading/trailing spaces - + - The file "%1" could not be synced because the name contains characters which are not allowed on the server. Het bestand %1 kan niet worden gesynchroniseerd omdat de naam tekens bevat die niet zijn toegestaan op dit systeem. - The following characters are not allowed: %1 De volgende tekens zijn niet toegestaan: %1 - The following basenames are not allowed: %1 De volgende basisnamen zijn niet toegestaan: %1 - The following filenames are not allowed: %1 De volgende bestandsnamen zijn niet toegestaan: %1 - The following file extensions are not allowed: %1 De volgende bestandsextensies zijn niet toegestaan: %1 - Checking rename permissions … Hernoem machtigingen controleren ... - You don't have the permission to rename this file. Please ask the author of the file to rename it. Je bent niet gemachtigd om dit bestand te hernoemen. Vraag de auteur van het bestand om het te hernoemen. - Failed to fetch permissions with error %1 Ophalen van machtigingen mislukt met fout %1 - Filename contains leading and trailing spaces. De bestandsnaam bevat spaties vooraan en achteraan. - Filename contains leading spaces. De bestandsnaam bevat spaties vooraan. - Filename contains trailing spaces. De bestandsnaam bevat spaties achteraan. - Use invalid name Gebruik ongeldige naam - Filename contains illegal characters: %1 Bestandsnaam bevat ongeldige tekens: %1 - Could not rename file. Please make sure you are connected to the server. Kan het bestand niet hernoemen. Zorg ervoor dat je verbonden bent met de server. - Cannot rename file because a file with the same name does already exist on the server. Please pick another name. Kan het bestand niet hernoemen omdat er al een bestand met dezelfde naam op de server bestaat. Kies een andere naam. - Could not rename local file. %1 Kan lokaal bestand niet hernoemen. %1 - - OCC::LegacyAccountSelectionDialog - - - Legacy import - - - - - Select the accounts to import from the legacy configuration: - - - OCC::LegalNotice - - Legal notice Juridische bepalingen - Close Sluiten - <p>Copyright 2017-2025 Nextcloud GmbH<br />Copyright 2012-2023 ownCloud GmbH</p> - + - <p>Licensed under the GNU General Public License (GPL) Version 2.0 or any later version.</p> <p>Gelicenseerd onder de GNU General Public License (GPL) Versie 2.0 of later</p> @@ -3412,12 +2674,10 @@ Onderdelen die gewist mogen worden, worden verwijderd als ze verhinderen dat een OCC::LogBrowser - Log Output Log Output - The client can write debug logs to a temporary folder. These logs are very helpful for diagnosing problems. Since log files can get large, the client will start a new one for each sync run and compress older ones. It will also delete log files after a couple of hours to avoid consuming too much disk space. If enabled, logs will be written to %1 @@ -3426,19 +2686,16 @@ Omdat logbestanden groot kunnen worden, zal de client een nieuwe starten voor el Indien ingeschakeld, worden logboeken naar % 1 geschreven - Enable logging to temporary folder Inschakelen logging naar tijdelijke map - This setting persists across client restarts. Note that using any logging command line options will override this setting. Deze instelling blijft bestaan tijdens het opnieuw opstarten van de client. Merk op dat het gebruik van logging-opdrachtregel opties deze instelling zal overschrijven. - Open folder Openen map @@ -3446,14 +2703,10 @@ Merk op dat het gebruik van logging-opdrachtregel opties deze instelling zal ove OCC::Logger - - Error Fout - - <nobr>File "%1"<br/>cannot be opened for writing.<br/><br/>The log output <b>cannot</b> be saved!</nobr> <nobr>Bestand "%1"<br/>kan niet voor schrijven worden geopend.<br/><br/>De log output kan <b>niet</b> opgeslagen worden!</nobr> @@ -3461,32 +2714,26 @@ Merk op dat het gebruik van logging-opdrachtregel opties deze instelling zal ove OCC::Mac::FileProviderEditLocallyJob - Could not start editing locally. Kon lokaal bewerken niet starten. - An error occurred during setup. Er trad een fout op bij het instellen. - Could not find a file for local editing. Make sure its path is valid and it is synced locally. - + Kon geen bestand vinden om lokaal te bewerken. Zorg ervoor dat het pad juist is en dat het lokaal gesynchroniseerd is. - Could not get file ID. Kon het bestands-ID niet ophalen. - Could not get file identifier. Kon het bestands-ID niet ophalen. - The file identifier is empty. Het bestands-ID is leeg. @@ -3494,47 +2741,38 @@ Merk op dat het gebruik van logging-opdrachtregel opties deze instelling zal ove OCC::NSISUpdater - New Version Available Nieuwe versie beschikbaar - <p>A new version of the %1 Client is available.</p><p><b>%2</b> is available for download. The installed version is %3.</p> <p>Er is een nieuwe versie van de %1 Client beschikbaar.</p><p><b>%2</b> is beschikbaar voor download. De geïnstalleerde versie is %3.</p> - Update Failed Bijwerken mislukt - <p>A new version of the %1 Client is available but the updating process failed.</p><p><b>%2</b> has been downloaded. The installed version is %3. If you confirm restart and update, your computer may reboot to complete the installation.</p> <p>Een nieuwe versie van de %1 Client is beschikbaar, maar het updaten is mislukt.</p><p><b>%2</b> is gedownload. De geïnstalleerde versie is %3. Als je herstarten en bijwerken bevestigt, kan je computer opnieuw opgestart worden om de installatie te voltooien.</p> - Ask again later Vraag later nogmaals - Restart and update Herstarten en bijwerken - Update manually Handmatig bijwerken - Skip this time Deze keer overslaan - Get update Ophalen update @@ -3542,109 +2780,82 @@ Merk op dat het gebruik van logging-opdrachtregel opties deze instelling zal ove OCC::NetworkSettings - Proxy Settings Proxy Instellingen - Use system proxy Gebruik systeem proxy - Host Server - Proxy server requires authentication Proxyserver heeft verificatie nodig - Download Bandwidth Download bandbreedte - - Limit to Beperkt tot - - KBytes/s KBytes/s - Note: proxy settings have no effects for accounts on localhost Let op: proxy-instellingen hebben geen effect voor accounts op localhost - Manually specify proxy Specificeer proxy handmatig - No proxy Geen proxy - - - Use global settings Gebruik globale instellingen - - No limit Geen beperking - - Limit to 3/4 of estimated bandwidth Beperk tot 3/4 van de geschatte bandbreedte - Upload Bandwidth Upload bandbreedte - - Limit automatically Beperk automatisch - Hostname of proxy server Hostnaam van proxyserver - Username for proxy server Gebruikersnaam voor proxyserver - Password for proxy server Wachtwoord voor proxyserver - HTTP(S) proxy HTTP(S) proxy - SOCKS5 proxy SOCKS5 proxy @@ -3652,77 +2863,54 @@ Merk op dat het gebruik van logging-opdrachtregel opties deze instelling zal ove OCC::OCUpdater - Could not check for new updates. Kan niet controleren op nieuwe updates. - Checking update server … Controleren updateserver ... - New %1 update ready Nieuwe %1 update is klaar - A new update for %1 is about to be installed. The updater may ask for additional privileges during the process. Your computer may reboot to complete the installation. Een nieuwe update voor %1 wordt geïnstalleerd. De updater kan om extra privileges vragen tijdens het update proces. Je computer kan herstart worden om de installatie te voltooien. - Downloading %1 … Downloaden %1 … - %1 available. Restart application to start the update. %1 beschikbaar. Herstart de applicatie om de update te starten. - Could not download update. Please open <a href='%1'>%1</a> to download the update manually. Kon de download niet bijwerken. Open <a href='%1'>%1</a> om de update handmatig te downloaden. - Could not download update. Please open %1 to download the update manually. Kon de update niet downloaden. Open %1 om de update handmatig te downloaden. - New %1 is available. Please open <a href='%2'>%2</a> to download the update. Nieuwe %1 beschikbaar. Open <a href='%2'>%1</a> om de update te downloaden. - New %1 is available. Please open %2 to download the update. Nieuwe %1 beschikbaar. Open %2 om de update te downloaden. - Update status is unknown: Did not check for new updates. Update status is onbekend: niet gecontroleerd op nieuwe updates. - - You are using the %1 update channel. Your installation is the latest version. - - - - - No updates available. Your installation is the latest version. - - - - No updates available. Your installation is at the latest version. Geen updates beschikbaar. Je installatie is al van de laatste versie. - Update Check Controle update @@ -3730,105 +2918,82 @@ Merk op dat het gebruik van logging-opdrachtregel opties deze instelling zal ove OCC::OwncloudAdvancedSetupPage - Connect Verbinden - - (experimental) (experimenteel) - - Use &virtual files instead of downloading content immediately %1 Gebruik &virtuele bestanden in plaats van direct downloaden content%1 - Virtual files are not supported for Windows partition roots as local folder. Please choose a valid subfolder under drive letter. Virtuele bestanden worden niet ondersteund voor Windows-partitie-hoofdmappen als lokale map. Kies een geldige submap onder de stationsletter. - %1 folder "%2" is synced to local folder "%3" %1 map "%2" is gesynchroniseerd naar de lokale map "%3" - Sync the folder "%1" Synchroniseer de map "%1" - Warning: The local folder is not empty. Pick a resolution! Waarschuwing: De lokale map is niet leeg. Maak een keuze! - - %1 free space %1 gets replaced with the size and a matching unit. Example: 3 MB or 5 GB %1 vrije ruimte - Virtual files are not supported at the selected location - + - Local Sync Folder Lokale synchronisatiemap - - (%1) (%1) - There isn't enough free space in the local folder! Er is niet genoeg ruimte beschikbaar in de lokale map! - In Finder's "Locations" sidebar section - + OCC::OwncloudConnectionMethodDialog - Connection failed Verbinding mislukt - <html><head/><body><p>Failed to connect to the secure server address specified. How do you wish to proceed?</p></body></html> <html><head/><body><p>Kan niet verbinden met het opgegeven beveiligde serveradres. Hoe wilt u verder gaan?</p></body></html> - Select a different URL Selecteer een andere URL - Retry unencrypted over HTTP (insecure) Probeer onversleuteld over HTTP (onbeveiligd) - Configure client-side TLS certificate Configureer het client-side TLS-certificaat - <html><head/><body><p>Failed to connect to the secure server address <em>%1</em>. How do you wish to proceed?</p></body></html> <html><head/><body><p>Kan niet verbinden met het opgegeven beveiligde serveradres <em>%1</em>.Hoe wilt u verder gaan?</p></body></html> @@ -3836,17 +3001,14 @@ Merk op dat het gebruik van logging-opdrachtregel opties deze instelling zal ove OCC::OwncloudHttpCredsPage - &Email &E-mail - Connect to %1 Verbinden met %1 - Enter user credentials Vul uw inloggegevens in @@ -3854,8 +3016,6 @@ Merk op dat het gebruik van logging-opdrachtregel opties deze instelling zal ove OCC::OwncloudPropagator - - Impossible to get modification time for file in conflict %1 Onmogelijk om wijzigingstijd te krijgen voor bestand in conflict %1) @@ -3863,23 +3023,19 @@ Merk op dat het gebruik van logging-opdrachtregel opties deze instelling zal ove OCC::OwncloudSetupPage - The link to your %1 web interface when you open it in the browser. %1 will be replaced with the application name De link naar je %1 web interface wanneer je die opent in de browser. - &Next > &Volgende > - Server address does not seem to be valid Het serveradres lijkt niet geldig - Could not load certificate. Maybe wrong password? Kan certificaat niet laden. Misschien is het wachtwoord onjuist? @@ -3887,159 +3043,126 @@ Merk op dat het gebruik van logging-opdrachtregel opties deze instelling zal ove OCC::OwncloudSetupWizard - <font color="green">Successfully connected to %1: %2 version %3 (%4)</font><br/><br/> <font color="green">Succesvol verbonden met %1: %2 versie %3 (%4)</font><br/><br/> - Failed to connect to %1 at %2:<br/>%3 Kon geen verbinding maken met %1 op %2:<br/>%3 - Timeout while trying to connect to %1 at %2. Time-out bij verbinden met %1 op %2. - Access forbidden by server. To verify that you have proper access, <a href="%1">click here</a> to access the service with your browser. Toegang door server verboden. Om te verifiëren dat je toegang mag hebben, <a href="%1">klik hier</a> om met je browser toegang tot de service te krijgen. - Invalid URL Ongeldige URL - Trying to connect to %1 at %2 … Probeer te verbinden met %1 om %2 ... - The authenticated request to the server was redirected to "%1". The URL is bad, the server is misconfigured. De geauthentiseerde aanvraag voor de server werd omgeleid naar "%1". De URL is onjuist, de server is verkeerd geconfigureerd. - There was an invalid response to an authenticated WebDAV request Er is een ongeldig antwoord ontvangen op een geauthenticeerde WebDAV opvraging - Local sync folder %1 already exists, setting it up for sync.<br/><br/> Lokale synchronisatie map %1 bestaat al, deze wordt ingesteld voor synchronisatie.<br/><br/> - Creating local sync folder %1 … Creëren lokale synchronisatie map %1 ... - OK OK - failed. mislukt. - Could not create local folder %1 Kan lokale map %1 niet aanmaken - No remote folder specified! Geen externe map opgegeven! - Error: %1 Fout: %1 - creating folder on Nextcloud: %1 aanmaken map op Nextcloud: %1 - Remote folder %1 created successfully. Externe map %1 succesvol gecreëerd. - The remote folder %1 already exists. Connecting it for syncing. De externe map %1 bestaat al. Verbinden voor synchroniseren. - - The folder creation resulted in HTTP error code %1 Het aanmaken van de map resulteerde in HTTP foutcode %1 - The remote folder creation failed because the provided credentials are wrong!<br/>Please go back and check your credentials.</p> Het aanmaken van de externe map is mislukt, waarschijnlijk omdat je inloggegevens fout waren.<br/>Ga terug en controleer je inloggegevens.</p> - <p><font color="red">Remote folder creation failed probably because the provided credentials are wrong.</font><br/>Please go back and check your credentials.</p> <p><font color="red">Het aanmaken van de externe map is mislukt, waarschijnlijk omdat je inloggegevens fout waren.</font><br/>ga terug en controleer je inloggevens.</p> - - Remote folder %1 creation failed with error <tt>%2</tt>. Aanmaken van externe map %1 mislukt met fout <tt>%2</tt>. - A sync connection from %1 to remote directory %2 was set up. Er is een synchronisatie verbinding van %1 naar externe map %2 opgezet. - Successfully connected to %1! Succesvol verbonden met %1! - Connection to %1 could not be established. Please check again. Er kan geen verbinding worden gemaakt met %1. Probeer het nog eens. - Folder rename failed Hernoemen map mislukt - Cannot remove and back up the folder because the folder or a file in it is open in another program. Please close the folder or file and hit retry or cancel the setup. Kan de map niet verwijderen en back-uppen, omdat de map of een bestand daarin, geopend is in een ander programma. Sluit de map of het bestand en drup op Opnieuw of annuleer de installatie. - <font color="green"><b>File Provider-based account %1 successfully created!</b></font> - + - Virtual files enabled - + - Your account is now syncing with virtual files support. This means that all your files are online-only by default, and will be downloaded on-demand when you open them. You may find your files under the <b>Locations</b> section of the Finder sidebar. - + - <font color="green"><b>Local sync folder %1 successfully created!</b></font> <font color="green"><b>Lokale synch map %1 is succesvol aangemaakt!</b></font> @@ -4047,27 +3170,22 @@ Merk op dat het gebruik van logging-opdrachtregel opties deze instelling zal ove OCC::OwncloudWizard - Add %1 account Toevoegen %1 account - Skip folders configuration Sla configuratie van mappen over - Cancel Annuleren - Enable experimental feature? Inschakelen experimentele functies? - When the "virtual files" mode is enabled no files will be downloaded initially. Instead, a tiny "%1" file will be created for each file that exists on the server. The contents can be downloaded by running these files or by using their context menu. The virtual files mode is mutually exclusive with selective sync. Currently unselected folders will be translated to online-only folders and your selective sync settings will be reset. @@ -4084,12 +3202,10 @@ Als je naar deze modus overschakelt, wordt elke momenteel lopende synchronisatie Dit is een nieuwe, experimentele modus. Als je besluit het te gebruiken, vragen we je om eventuele problemen te melden. - Enable experimental placeholder mode Inschakelen experimentele aanduider modus - Stay safe Blijf veilig @@ -4097,12 +3213,10 @@ Dit is een nieuwe, experimentele modus. Als je besluit het te gebruiken, vragen OCC::PasswordInputDialog - Password for share required Wachtwoord voor delen vereist - Please enter a password for your share: Voer het wachtwoord in voor je deellink: @@ -4110,7 +3224,6 @@ Dit is een nieuwe, experimentele modus. Als je besluit het te gebruiken, vragen OCC::PollJob - Invalid JSON reply from the poll URL Ongeldig JSON antwoord van de opgegeven URL @@ -4118,252 +3231,165 @@ Dit is een nieuwe, experimentele modus. Als je besluit het te gebruiken, vragen OCC::ProcessDirectoryJob - Symbolic links are not supported in syncing. Symbolische links worden niet ondersteund bij het synchroniseren. - File is listed on the ignore list. Het bestand is opgenomen op de negeerlijst. - File names ending with a period are not supported on this file system. Bestandsnamen die eindigen met een punt worden niet ondersteund door het bestandssysteem. - - Folder names containing the character "%1" are not supported on this file system. - %1: the invalid character - - - - - File names containing the character "%1" are not supported on this file system. - %1: the invalid character - - - - - Folder name contains at least one invalid character - - - - - File name contains at least one invalid character - De bestandsnaam bevat ten minste één ongeldig teken - - - - Folder name is a reserved name on this file system. - - - - - File name is a reserved name on this file system. - - - - Filename contains trailing spaces. De bestandsnaam bevat spaties achteraan. - - - - Cannot be renamed or uploaded. - + - Folder name of folder entity to use when warning about invalid name Map - File name of folder entity to use when warning about invalid name Bestand - %1 name containing the character "%2" is not supported on this file system. folder or file impossible to sync due to an invalid name, placeholders will be file or folder and the invalid character %1 naam met teken "%2" wordt niet ondersteund door het bestandssysteem. - Filename contains leading spaces. De bestandsnaam bevat spaties vooraan. - %1 name contains at least one invalid character %1 naam bevat op z'n minst één ongeldig teken - %1 name is a reserved name on this file system. %1 naam is een gereserveerde naam op dit bestandssysteem. - Filename contains leading and trailing spaces. De bestandsnaam bevat spaties vooraan en achteraan. - Filename is too long. De bestandsnaam is te lang. - File/Folder is ignored because it's hidden. Bestand/Map is genegeerd omdat het verborgen is. - Stat failed. Stat mislukt. - Conflict: Server version downloaded, local copy renamed and not uploaded. Bestandsconflict: serverversie is gedownload, de lokale kopie is hernoemd en niet geüpload - Case Clash Conflict: Server file downloaded and renamed to avoid clash. - + - The filename cannot be encoded on your file system. De bestandsnaam kan op je bestandssysteem niet worden gecodeerd. - The filename is blacklisted on the server. De bestandsnaam staat op de negeerlijst van de server. - Reason: the entire filename is forbidden. - + - Reason: the filename has a forbidden base name (filename start). - + - Reason: the file has a forbidden extension (.%1). - + - Reason: the filename contains a forbidden character (%1). - + - File has extension reserved for virtual files. Bestand heeft een extensie gereserveerd voor virtuele bestanden. - size omvang - permission machtiging - file id bestand id - Server reported no %1 Server rapporteerde nr %1 - Cannot sync due to invalid modification time Kan niet synchroniseren door ongeldig wijzigingstijdstip - - Upload of %1 exceeds %2 of space left in personal files. - - - - - Upload of %1 exceeds %2 of space left in folder %3. - - - - Could not upload file, because it is open in "%1". Kan bestand niet uploaden, omdat het geopend is in "%1". - Error while deleting file record %1 from the database Fout tijdens verwijderen bestandsrecord %1 uit de database - - Moved to invalid target, restoring Verplaatst naar ongeldig doel, herstellen - Cannot modify encrypted item because the selected certificate is not valid. - + - Ignored because of the "choose what to sync" blacklist Genegeerd vanwege de "wat synchroniseren" negeerlijst - - Not allowed because you don't have permission to add subfolders to that folder Niet toegestaan, omdat je geen machtiging hebt om submappen aan die map toe te voegen - Not allowed because you don't have permission to add files in that folder Niet toegestaan omdat je geen machtiging hebt om bestanden in die map toe te voegen - Not allowed to upload this file because it is read-only on the server, restoring Niet toegestaan om dit bestand te uploaden, omdat het alleen-lezen is op de server, herstellen - Not allowed to remove, restoring Niet toegestaan om te verwijderen, herstellen - Error while reading the database Fout bij lezen database - Server replied with an error while reading directory "%1" : %2 Server gaf een foutmelding bij lezen directory "%1'": %2 @@ -4371,38 +3397,26 @@ Dit is een nieuwe, experimentele modus. Als je besluit het te gebruiken, vragen OCC::PropagateDirectory - Could not delete file %1 from local DB - + - Error updating metadata due to invalid modification time Fout bij bijwerken metadata door ongeldige laatste wijziging datum - - - - - - The folder %1 cannot be made read-only: %2 Map %1 kon niet alleen-lezen gemaakt worden: %2 - - unknown exception - + - Error updating metadata: %1 Fout bij bijwerken metadata: %1 - File is currently in use Bestand is al in gebruik @@ -4410,75 +3424,58 @@ Dit is een nieuwe, experimentele modus. Als je besluit het te gebruiken, vragen OCC::PropagateDownloadFile - Could not get file %1 from local DB - + - File %1 cannot be downloaded because encryption information is missing. Bestand %1 kan niet worden gedownload, omdat crypto informatie ontbreekt. - - Could not delete file record %1 from local DB Kon bestandsrecord %1 niet verwijderen uit de lokale DB - File %1 can not be downloaded because of a local file name clash! Bestand %1 kan niet worden gedownload, omdat de naam conflicteert met een lokaal bestand - The download would reduce free local disk space below the limit De download zou de vrije lokale schijfruimte beperken tot onder de limiet - Free space on disk is less than %1 Vrije schijfruimte is minder dan %1 - File was deleted from server Bestand was verwijderd van de server - The file could not be downloaded completely. Het bestand kon niet volledig worden gedownload. - The downloaded file is empty, but the server said it should have been %1. Het gedownloade bestand is leeg, maar de server meldde dat het %1 zou moeten zijn. - - File %1 has invalid modified time reported by server. Do not save it. Bestand %1 heeft een ongeldige wijzigingstijd gerapporteerd door de server. Bewaar het niet. - File %1 downloaded but it resulted in a local file name clash! Bestand %1 gedownload maar het resulteerde in een lokaal bestandsnaam conflict! - Error updating metadata: %1 Fout bij bijwerken metadata: %1 - The file %1 is currently in use Bestand %1 is al in gebruik - - File has changed since discovery Het bestand is gewijzigd sinds het is gevonden @@ -4486,12 +3483,10 @@ Dit is een nieuwe, experimentele modus. Als je besluit het te gebruiken, vragen OCC::PropagateItemJob - ; Restoration Failed: %1 ; Herstellen mislukt: %1 - A file or folder was removed from a read only share, but restoring failed: %1 Er is een bestand of map verwijderd van een alleen-lezen share, maar herstellen is mislukt: %1 @@ -4499,39 +3494,30 @@ Dit is een nieuwe, experimentele modus. Als je besluit het te gebruiken, vragen OCC::PropagateLocalMkdir - could not delete file %1, error: %2 kon bestand file %1 niet verwijderen, fout: %2 - Folder %1 cannot be created because of a local file or folder name clash! Map %1 kan niet worden gemaakt wegens een lokaal map- of bestandsnaam conflict! - Could not create folder %1 Kon map %1 niet maken - - - The folder %1 cannot be made read-only: %2 Map %1 kon niet alleen-lezen gemaakt worden: %2 - unknown exception - + - Error updating metadata: %1 Fout bij bijwerken metadata: %1 - The file %1 is currently in use Bestand %1 is al in gebruik @@ -4539,19 +3525,14 @@ Dit is een nieuwe, experimentele modus. Als je besluit het te gebruiken, vragen OCC::PropagateLocalRemove - Could not remove %1 because of a local file name clash Bestand %1 kon niet worden verwijderd, omdat de naam conflicteert met een lokaal bestand - - - Temporary error when removing local item removed from server. - + - Could not delete file record %1 from local DB Kon bestandsrecord %1 niet verwijderen uit de lokale DB @@ -4559,49 +3540,38 @@ Dit is een nieuwe, experimentele modus. Als je besluit het te gebruiken, vragen OCC::PropagateLocalRename - Folder %1 cannot be renamed because of a local file or folder name clash! Map %1 kan niet worden hernoemd wegens een lokaal map- of bestandsnaam conflict! - File %1 downloaded but it resulted in a local file name clash! Bestand %1 gedownload maar het resulteerde in een lokaal bestandsnaam conflict! - - Could not get file %1 from local DB - + - - Error setting pin state Fout bij instellen pin status - Error updating metadata: %1 Fout bij bijwerken metadata: %1 - The file %1 is currently in use Bestand %1 is al in gebruik - Failed to propagate directory rename in hierarchy - + - Failed to rename file Kon bestand niet hernoemen - Could not delete file record %1 from local DB Kon bestandsrecord %1 niet verwijderen uit de lokale DB @@ -4609,12 +3579,10 @@ Dit is een nieuwe, experimentele modus. Als je besluit het te gebruiken, vragen OCC::PropagateRemoteDelete - Wrong HTTP code returned by server. Expected 204, but received "%1 %2". Foutieve HTTP code ontvangen van de server. Verwacht was 204, maar ontvangen "%1 %2". - Could not delete file record %1 from local DB Kon bestandsrecord %1 niet verwijderen uit de lokale DB @@ -4622,7 +3590,6 @@ Dit is een nieuwe, experimentele modus. Als je besluit het te gebruiken, vragen OCC::PropagateRemoteDeleteEncryptedRootFolder - Wrong HTTP code returned by server. Expected 204, but received "%1 %2". Foutieve HTTP code ontvangen van de server. Verwacht was 204, maar ontvangen "%1 %2". @@ -4630,22 +3597,18 @@ Dit is een nieuwe, experimentele modus. Als je besluit het te gebruiken, vragen OCC::PropagateRemoteMkdir - Wrong HTTP code returned by server. Expected 201, but received "%1 %2". Foutieve HTTP code ontvangen van de server. Verwacht was 201, maar ontvangen "%1 %2". - Failed to encrypt a folder %1 Kon een map %1 niet versleutelen - Error writing metadata to the database: %1 Fout bij schrijven van metadata naar de database: %1 - The file %1 is currently in use Bestand %1 is al in gebruik @@ -4653,44 +3616,34 @@ Dit is een nieuwe, experimentele modus. Als je besluit het te gebruiken, vragen OCC::PropagateRemoteMove - Could not rename %1 to %2, error: %3 Kon niet %1 hernoemen naar %2, fout: %3 - - Error updating metadata: %1 Fout bij bijwerken metadata: %1 - - The file %1 is currently in use Bestand %1 is al in gebruik - Wrong HTTP code returned by server. Expected 201, but received "%1 %2". Foutieve HTTP code ontvangen van de server. Verwacht werd 201, maar ontvangen "%1 %2". - Could not get file %1 from local DB - + - Could not delete file record %1 from local DB Kon bestandsrecord %1 niet verwijderen uit de lokale DB - Error setting pin state Fout bij instellen pin status - Error writing metadata to the database Fout bij schrijven van Metadata naar de database @@ -4698,60 +3651,46 @@ Dit is een nieuwe, experimentele modus. Als je besluit het te gebruiken, vragen OCC::PropagateUploadFileCommon - File %1 cannot be uploaded because another file with the same name, differing only in case, exists Bestand %1 kan niet worden geüpload omdat er al een ander bestand met dezelfde naam bestaat, al verschillen hoofd/kleine letters - - - File %1 has invalid modification time. Do not upload to the server. Bestand %1 heeft een ongeldige laatste wijziging datum. Upload niet naar de server. - Local file changed during syncing. It will be resumed. Lokaal bestand gewijzigd gedurende sync. Wordt opnieuw meegenomen. - Local file changed during sync. Lokaal bestand gewijzigd tijdens sync. - Failed to unlock encrypted folder. Kon versleutelde map niet ontgrendelen. - Unable to upload an item with invalid characters Kon een item met onjuiste tekens niet uploaden - Error updating metadata: %1 Fout bij bijwerken metadata: %1 - The file %1 is currently in use Bestand %1 is al in gebruik - - Upload of %1 exceeds the quota for the folder Upload van %1 overschrijdt het quotum voor de map - Failed to upload encrypted file. Kon versleuteld bestand niet uploaden. - File Removed (start upload) %1 Bestand verwijderd (start upload) %1 @@ -4759,32 +3698,26 @@ Dit is een nieuwe, experimentele modus. Als je besluit het te gebruiken, vragen OCC::PropagateUploadFileNG - The local file was removed during sync. Het lokale bestand werd verwijderd tijdens sync. - Local file changed during sync. Lokaal bestand gewijzigd tijdens sync. - Poll URL missing Peilingen-URL ontbreekt - Unexpected return code from server (%1) Onverwachte reactie van server (%1) - Missing File ID from server Ontbrekende File ID van de server - Missing ETag from server Ontbrekende ETag van de server @@ -4792,22 +3725,18 @@ Dit is een nieuwe, experimentele modus. Als je besluit het te gebruiken, vragen OCC::PropagateUploadFileV1 - Poll URL missing URL opvraag ontbreekt - The local file was removed during sync. Het lokale bestand werd verwijderd tijdens sync. - Local file changed during sync. Lokaal bestand gewijzigd tijdens sync. - The server did not acknowledge the last chunk. (No e-tag was present) De server heeft het laatste deel niet bevestigd (er was geen e-tag aanwezig) @@ -4815,27 +3744,22 @@ Dit is een nieuwe, experimentele modus. Als je besluit het te gebruiken, vragen OCC::ProxyAuthDialog - Proxy authentication required Proxy-authenticatie vereist - Username: Gebruikersnaam: - Proxy: Proxy: - The proxy server needs a username and password. De proxyserver heeft een gebruikersnaam en wachtwoord nodig - Password: Wachtwoord: @@ -4843,7 +3767,6 @@ Dit is een nieuwe, experimentele modus. Als je besluit het te gebruiken, vragen OCC::SelectiveSyncDialog - Choose What to Sync Kies wat te synchroniseren @@ -4851,33 +3774,26 @@ Dit is een nieuwe, experimentele modus. Als je besluit het te gebruiken, vragen OCC::SelectiveSyncWidget - Loading … Laden ... - Deselect remote folders you do not wish to synchronize. Deselecteer de externe mappen die u niet wenst te synchroniseren. - Name Naam - Size Grootte - - No subfolders currently on the server. Momenteel geen submappen op de server. - An error occurred while loading the list of sub folders. Er trad een fout op bij het laden van de lijst met submappen. @@ -4885,7 +3801,6 @@ Dit is een nieuwe, experimentele modus. Als je besluit het te gebruiken, vragen OCC::ServerNotificationHandler - Reply Antwoord @@ -4893,28 +3808,23 @@ Dit is een nieuwe, experimentele modus. Als je besluit het te gebruiken, vragen OCC::SettingsDialog - Settings Instellingen - %1 Settings This name refers to the application name e.g Nextcloud %1 Instellingen - General Algemeen - Network Netwerk - Account Account @@ -4922,7 +3832,6 @@ Dit is een nieuwe, experimentele modus. Als je besluit het te gebruiken, vragen OCC::ShareManager - Error Fout @@ -4930,47 +3839,38 @@ Dit is een nieuwe, experimentele modus. Als je besluit het te gebruiken, vragen OCC::ShareModel - %1 days - + - 1 day - + 1 dag - Today - + Vandaag - Secure file drop link Beveiligde bestands-drop link - Share link Deellink - Link share - + - Internal link Interne link - Secure file drop Beveiligde bestands-drop - Could not find local folder for %1 Kan lokale map niet vinden voor %1 @@ -4978,23 +3878,18 @@ Dit is een nieuwe, experimentele modus. Als je besluit het te gebruiken, vragen OCC::ShareeModel - - Search globally Zoek door alles - No results found Geen resultaten gevonden - Global search results Zoekresultaten (global) - %1 (%2) sharee (shareWithAdditionalInfo) %1 (%2) @@ -5003,48 +3898,38 @@ Dit is een nieuwe, experimentele modus. Als je besluit het te gebruiken, vragen OCC::SocketApi - Context menu share Contextmenu delen - I shared something with you Ik deelde iets met u - - Share options Deelopties - Send private link by email … Verstuur privélink per e-mail --- - Copy private link to clipboard Kopieer privé-link naar klembord - Failed to encrypt folder at "%1" Kon een map niet versleutelen in %1 - The account %1 does not have end-to-end encryption configured. Please configure this in your account settings to enable folder encryption. Het account %1 heeft geen begin-tot-eind versleuteling ingesteld. Ga naar je accountinstellingen om mapversleuteling in te stellen. - Failed to encrypt folder Kon de map niet versleutelen - Could not encrypt the following folder: "%1". Server replied with error: %2 @@ -5053,105 +3938,86 @@ Server replied with error: %2 Server antwoordde met fout: %2 - Folder encrypted successfully Map succesvol versleuteld - The following folder was encrypted successfully: "%1" De volgende map was succesvol versleuteld: "%1" - Select new location … Selecteer nieuwe locatie ... - - Activity Activiteit - Leave this share Verlaat deze gedeelde locatie - Resharing this file is not allowed Opnieuw delen van dit bestand is niet toegestaan - Resharing this folder is not allowed Opnieuw delen van deze map is niet toegestaan - Encrypt Versleutel - Lock file Vergrendel bestand - Unlock file Ontgrendel bestand - Locked by %1 Vergrendeld door %1 - Expires in %1 minutes remaining time before lock expires - Vervalt over %n maandenVervalt over %1 minuut/minuten + + Vervalt over %n maanden + Vervalt over %1 minuut/minuten + - Resolve conflict … Oplossen conflict ... - Move and rename … Verplaatsen en hernoemen ... - Move, rename and upload … Verplaatsen, hernoemen en uploaden ... - Delete local changes Verwijder lokale aanpassingen - Move and upload … Verplaatsen en uploaden ... - Delete Verwijderen - Copy internal link Kopieer interne link - - Open in browser Openen in browser @@ -5159,124 +4025,100 @@ Server antwoordde met fout: %2 OCC::SslButton - <h3>Certificate Details</h3> <h3>Certificaat details</h3> - Common Name (CN): Common Name (CN): - Subject Alternative Names: Alternatieve subject namen: - Organization (O): Organisatie (O): - Organizational Unit (OU): Organisatie unit (OU): - State/Province: Land/Provincie: - Country: Land: - Serial: Serienummer: - <h3>Issuer</h3> <h3>Uitgever</h3> - Issuer: Uitgever: - Issued on: Uitgegeven op: - Expires on: Vervalt op: - <h3>Fingerprints</h3> <h3>Vingerafdrukken</h3> - SHA-256: SHA-256: - SHA-1: SHA-1: - <p><b>Note:</b> This certificate was manually approved</p> <p><b>Let op:</b> Dit certificaat werd handmatig goedgekeurd</p> - %1 (self-signed) %1 (zelf ondertekend) - %1 %1 - This connection is encrypted using %1 bit %2. Deze verbinding is versleuteld via %1 bit %2. - Server version: %1 Serverversie: %1 - No support for SSL session tickets/identifiers Geen ondersteuning voor SSL-sessie tickets/identifiers - Certificate information: Certificaat informatie: - The connection is not secure De verbinding is niet veilig - This connection is NOT secure as it is not encrypted. Deze verbinding is NIET veilig, omdat deze niet versleuteld is. @@ -5286,82 +4128,62 @@ Server antwoordde met fout: %2 OCC::SslErrorDialog - Trust this certificate anyway Vertrouw dit certificaat alsnog - Untrusted Certificate Niet vertrouwd certificaat - Cannot connect securely to <i>%1</i>: Kan niet beveiligd verbinden met <i>%1</i>: - Additional errors: Additionele fouten: - with Certificate %1 met certificaat %1 - - - &lt;not specified&gt; &lt;niet gespecificeerd&gt; - - Organization: %1 Organisatie: %1 - - Unit: %1 Unit: %1 - - Country: %1 Land: %1 - Fingerprint (SHA1): <tt>%1</tt> Fingerprint (SHA1): <tt>%1</tt> - Fingerprint (SHA-256): <tt>%1</tt> Fingerprint (SHA-256): <tt>%1</tt> - Fingerprint (SHA-512): <tt>%1</tt> Fingerprint (SHA-512): <tt>%1</tt> - Effective Date: %1 Ingangsdatum: %1 - Expiration Date: %1 Vervaldatum: %1 - Issuer: %1 Uitgever: %1 @@ -5369,73 +4191,59 @@ Server antwoordde met fout: %2 OCC::SyncEngine - %1 (skipped due to earlier error, trying again in %2) %1 (overgeslagen wegens een eerdere fout, probeer opnieuw over %2) - Only %1 are available, need at least %2 to start Placeholders are postfixed with file sizes using Utility::octetsToString() Slechts %1 beschikbaar, maar heeft minimaal %2 nodig om te starten - Unable to open or create the local sync database. Make sure you have write access in the sync folder. Kon de lokale sync-database niet openen of aanmaken. Zorg ervoor dat je schrijf-toegang hebt in de sync-map - Disk space is low: Downloads that would reduce free space below %1 were skipped. Schijfruimte laag: Downloads die de vrije ruimte tot onder %1 zouden reduceren, zijn overgeslagen. - There is insufficient space available on the server for some uploads. Onvoldoende schijfruimte op de server voor sommige uploads. - Unresolved conflict. Bestandsconflict - Could not update file: %1 Kon bestand niet bijwerken: %1 - Could not update virtual file metadata: %1 Kon virtuele bestand metadata niet bijwerken: %1 - Could not update file metadata: %1 Kon bestand metadata niet bijwerken: %1 - Could not set file record to local DB: %1 Kon bestandsrecord %1 niet instellen op de lokale DB: %1 - Using virtual files with suffix, but suffix is not set gebruik maken van virtuele bestanden met achtervoegsel, maar achtervoegsel niet ingesteld - Unable to read the blacklist from the local database Kan de blacklist niet lezen uit de lokale database - Unable to read from the sync journal. Niet mogelijk om te lezen uit het synchronisatie verslag. - Cannot open the sync journal Kan het sync transactielog niet openen @@ -5443,75 +4251,54 @@ Server antwoordde met fout: %2 OCC::SyncStatusSummary - - Offline Offline - - You need to accept the terms of service - - - - - - All synced! Alles gesynchroniseerd! - Some files couldn't be synced! Sommige bestanden konden niet gesynchroniseerd worden! - See below for errors Zie hieronder voor fouten - Checking folder changes Controleren op wijzigingen map - Syncing changes Synchroniseren wijzigingen - Sync paused Synchronisatie gepauzeerd - Some files could not be synced! Sommige bestanden konden niet gesynchroniseerd worden! - See below for warnings Zie hieronder voor waarschuwingen - Syncing Synchroniseren - %1 of %2 · %3 left %1 van %2 · %3 resterend - %1 of %2 %1 van %2 - Syncing file %1 of %2 Bestand %1 van %2 synchroniseren @@ -5519,54 +4306,42 @@ Server antwoordde met fout: %2 OCC::Systray - Download Download - Add account Account toevoegen - Open main dialog Open het hoofdvenster - - Pause sync Pauzeer sync - - Resume sync Vervolg sync - Settings Instellingen - Help Help - Exit %1 %1 afsluiten - Pause sync for all Pauzeer sync voor iedereen - Resume sync for all Vervolg sync voor iedereen @@ -5574,46 +4349,38 @@ Server antwoordde met fout: %2 OCC::TermsOfServiceCheckWidget - Waiting for terms to be accepted - + - Polling - + - Link copied to clipboard. - + Link gekopieerd naar het klembord. - Open Browser - + - Copy Link - + Kopiëren link OCC::Theme - %1 Desktop Client Version %2 (%3) %1 is application name. %2 is the human version string. %3 is the operating system name. - + - <p><small>Using virtual files plugin: %1</small></p> <p><small>Gebruik makend van virtuele bestanden plugin: %1</small></p> - <p>This release was supplied by %1.</p> <p>Deze release is geleverd door %1</p> @@ -5621,22 +4388,18 @@ Server antwoordde met fout: %2 OCC::UnifiedSearchResultsListModel - Failed to fetch providers. Fout bij het laden van providers. - Failed to fetch search providers for '%1'. Error: %2 Fout bij het zoeken van providers voor '%1'. Error: %2 - Search has failed for '%2'. Fout bij het zoeken naar '%2'. - Search has failed for '%1'. Error: %2 Fout bij het zoeken naar '%1'. Error: %2 @@ -5644,17 +4407,14 @@ Server antwoordde met fout: %2 OCC::UpdateE2eeFolderMetadataJob - Failed to update folder metadata. Kon metadata niet uploaden. - Failed to unlock encrypted folder. Kon versleutelde map niet ontgrendelen. - Failed to finalize item. Kon item niet afronden. @@ -5662,35 +4422,22 @@ Server antwoordde met fout: %2 OCC::UpdateE2eeFolderUsersMetadataJob - - - - - - - - - Error updating metadata for a folder %1 Fout bij bijwerken metadata voor een map: %1 - Could not fetch public key for user %1 Kon de publieke sleutel voor gebruiker %1 niet vinden - Could not find root encrypted folder for folder %1 Kon de versleutelde basismap voor map %1 niet vinden - Could not add or remove user %1 to access folder %2 Kon gebruiker %1 niet toevoegen of verwijderen om toegang te krijgen tot map %2 - Failed to unlock a folder. Kon een map niet ontgrendelen. @@ -5698,43 +4445,37 @@ Server antwoordde met fout: %2 OCC::User - End-to-end certificate needs to be migrated to a new one - + - Trigger the migration - + - %n notification(s) - + + + + - Retry all uploads Probeer alle uploads opnieuw - - Resolve conflict Conflict oplossen... - Rename file Bestand hernoemen - Open Nextcloud Assistant in browser Open Nextcloud Assistant in browser - Open Nextcloud Talk in browser Open Nextcloud Talk in browser @@ -5742,22 +4483,18 @@ Server antwoordde met fout: %2 OCC::UserModel - Confirm Account Removal Bevestig verwijderen account - <p>Do you really want to remove the connection to the account <i>%1</i>?</p><p><b>Note:</b> This will <b>not</b> delete any files.</p> <p>Wilt je echt de verbinding met het account <i>%1</i> verbreken?</p><p><b>Let op:</b> Hierdoor verwijder je <b>geen</b> bestanden.</p> - Remove connection Verwijderen verbinding - Cancel Annuleren @@ -5765,167 +4502,129 @@ Server antwoordde met fout: %2 OCC::UserStatusSelectorModel - Could not fetch predefined statuses. Make sure you are connected to the server. Kan vooraf gedefinieerde statussen niet ophalen. Zorg ervoor dat je verbonden bent met de server. - Could not fetch status. Make sure you are connected to the server. Kan status niet ophalen. Zorg ervoor dat je verbonden bent met de server. - Status feature is not supported. You will not be able to set your status. Gebruikersstatus functie wordt niet ondersteund. Je zult je gebruikersstatus niet kunnen instellen. - Emojis are not supported. Some status functionality may not work. Emoji's worden niet ondersteund. Sommige gebruikersstatusfuncties werken mogelijk niet. - Could not set status. Make sure you are connected to the server. Kan status niet instellen. Zorg ervoor dat je verbonden bent met de server. - Could not clear status message. Make sure you are connected to the server. Kan het statusbericht niet wissen. Zorg ervoor dat je verbonden bent met de server. - - Don't clear Niet wissen - 30 minutes 30 minuten - - 1 hour 1 uur - 4 hours 4 uren - - Today Vandaag - - This week Deze week - Less than a minute Minder dan een minuut - 1 minute 1 minuut - %1 minutes - + + + + - %1 hours - + + + + - 1 day 1 dag - %1 days - - - - - %n minute(s) - - - - - %n hour(s) - - - - - %n day(s) - + + + + OCC::Vfs - Please choose a different location. %1 is a drive. It doesn't support virtual files. - + - Please choose a different location. %1 isn't a NTFS file system. It doesn't support virtual files. - + - Please choose a different location. %1 is a network drive. It doesn't support virtual files. - + OCC::VfsDownloadErrorDialog - Download error Downloadfout - Error downloading Fout bij downloaden - could not be downloaded kon niet worden gedownload - > More details > Meer details - More details Meer details - Error downloading %1 Fout bij downloaden %1 - %1 could not be downloaded. %1 kon niet worden gedownload. @@ -5933,8 +4632,6 @@ Server antwoordde met fout: %2 OCC::VfsSuffix - - Error updating metadata due to invalid modification time Fout bij bijwerken metadata door ongeldige laatste wijziging datum @@ -5942,8 +4639,6 @@ Server antwoordde met fout: %2 OCC::VfsXAttr - - Error updating metadata due to invalid modification time Fout bij bijwerken metadata door ongeldige laatste wijziging datum @@ -5951,12 +4646,10 @@ Server antwoordde met fout: %2 OCC::WebEnginePage - Invalid certificate detected Ongeldig certificaat gedetecteerd - The host "%1" provided an invalid certificate. Continue? De server "%1" heeft een ongeldig certificaat . Wilt u doorgaan? @@ -5964,7 +4657,6 @@ Server antwoordde met fout: %2 OCC::WebFlowCredentials - You have been logged out of your account %1 at %2. Please login again. Je bent afgemeld bij je account %1 op %2. Meld opnieuw aan. @@ -5972,42 +4664,34 @@ Server antwoordde met fout: %2 OCC::WelcomePage - Form Formulier - Log in Aanmelden - Sign up with provider Aanmelden bij provider - Keep your data secure and under your control Hou je gegevens veilig en in eigen beheer - Secure collaboration & file exchange Veilige samenwerking & bestandsuitwisseling - Easy-to-use web mail, calendaring & contacts Eenvoudig te gebruiken webmail, agenda & contacten - Screensharing, online meetings & web conferences Schermdelen, online afspraken & web conferenties - Host your own server Host je eigen server @@ -6015,88 +4699,71 @@ Server antwoordde met fout: %2 OCC::ownCloudGui - Please sign in Log alstublieft in - There are no sync folders configured. Er zijn geen synchronisatie-mappen geconfigureerd. - Disconnected from %1 Losgekoppeld van %1 - Unsupported Server Version Niet-ondersteunde server versie - The server on account %1 runs an unsupported version %2. Using this client with unsupported server versions is untested and potentially dangerous. Proceed at your own risk. De server van account %1 gebruikt een niet ondersteunde versie %2. Het gebruik van deze clientsoftware met niet-ondersteunde server versies is niet getest en mogelijk gevaarlijk. Verdergaan is op eigen risico. - Terms of service - + - Your account %1 requires you to accept the terms of service of your server. You will be redirected to %2 to acknowledge that you have read it and agrees with it. - + - %1: %2 Example text: "Nextcloud: Syncing 25MB (3 minutes left)" (%1 is the folder name to be synced, %2 a status message for that folder) - + %1: %2 - macOS VFS for %1: Sync is running. - + - macOS VFS for %1: Last sync was successful. - + - macOS VFS for %1: A problem was encountered. - + - Checking for changes in remote "%1" Controleren op wijzigingen in externe "%1" - Checking for changes in local "%1" Controleren op wijzigingen in lokale "%1" - Disconnected from accounts: Losgekoppeld van account: - Account %1: %2 Account %1: %2 - Account synchronization is disabled Account synchronisatie is uitgeschakeld - %1 (%2, %3) %1 (%2, %3) @@ -6104,73 +4771,59 @@ Server antwoordde met fout: %2 OwncloudAdvancedSetupPage - Username Gebruikersnaam - Local Folder Lokale map - Choose different folder Kies een andere map - Server address Serveradres - Sync Logo Sync Logo - Synchronize everything from server Synchroniseer alles vanaf de server - Ask before syncing folders larger than Vraag bevestiging voor synchronisatie van mappen groter dan - Ask before syncing external storages Vraag bevestiging voor synchronisatie externe opslag - Keep local data Bewaar de lokale gegevens - <html><head/><body><p>If this box is checked, existing content in the local folder will be erased to start a clean sync from the server.</p><p>Do not check this if the local content should be uploaded to the servers folder.</p></body></html> <html><head/><body><p>Als deze checkbox is aangevinkt zullen bestaande bestanden in de lokale map worden gewist om een schone sync vanaf de server te starten.</p><p>Vink dit niet aan als de lokale bestanden naar de map op de server zouden moeten worden geüploadet.</p></body></html> - Erase local folder and start a clean sync Wis de map op je computer en start een schone sync - MB Trailing part of "Ask confirmation before syncing folder larger than" MB - Choose what to sync Selectieve synchronisatie - &Local Folder &Lokale map @@ -6178,12 +4831,10 @@ Server antwoordde met fout: %2 OwncloudHttpCredsPage - &Username &Gebruikersnaam - &Password &Wachtwoord @@ -6191,23 +4842,18 @@ Server antwoordde met fout: %2 OwncloudSetupPage - - TextLabel TextLabel - Logo Logo - Server address Serveradres - This is the link to your %1 web interface when you open it in the browser. De link naar je %1 web interface wanneer je die opent in de browser. @@ -6215,136 +4861,123 @@ Server antwoordde met fout: %2 QObject - %nd delay in days after an activity - + + + + - in the future in de toekomst - %nh delay in hours after an activity - + + + + - 1m one minute after activity date and time - + - %nm delay in minutes after an activity - + + + + - now nu - Some time ago Even geleden - %1: %2 this displays an error string (%2) for a file %1 %1: %2 - New folder Nieuwe map - Failed to create debug archive Kon debugarchief niet maken - Could not create debug archive in selected location! Kon debugarchief niet maken op de geselecteerde locatie! - You renamed %1 Je hernoemde %1 - You deleted %1 Je verwijderde %1 - You created %1 Je creëerde %1 - You changed %1 Je wijzigde %1 - Synced %1 Gesynchroniseerd %1 - Error deleting the file - + - Paths beginning with '#' character are not supported in VFS mode. - + ResolveConflictsDialog - Solve sync conflicts Los synchronisatieconflicten op - %1 files in conflict indicate the number of conflicts to resolve - + + + + - Choose if you want to keep the local version, server version, or both. If you choose both, the local file will have a number added to its name. Kies of je lokale versie, server versie of beide wilt behouden. Als je voor beide kiest, krijgt het lokale bestand een nummer toegevoegd aan de naam. - All local versions Alle lokale versies - All server versions Alle server versies - Resolve conflicts Los conflicten op - Cancel Annuleren @@ -6352,7 +4985,6 @@ Server antwoordde met fout: %2 ShareDelegate - Copied! Gekopieerd! @@ -6360,83 +4992,66 @@ Server antwoordde met fout: %2 ShareDetailsPage - An error occurred setting the share password. Er trad een fout op bij het instellen van het wachtwoord voor de deellink - Edit share Bewerk deellink - Share label Deel label - - Allow upload and editing Uploaden en bewerken toestaan - View only Alleen bekijken - File drop (upload only) Bestands-drop (alleen uploaden) - Allow resharing Opnieuw delen toestaan - Hide download Verberg download - Password protection - + - Set expiration date Instellen vervaldatum - Note to recipient Notitie voor ontvanger - Enter a note for the recipient - + - Unshare Delen opheffen - Add another link Nog een link toevoegen - Share link copied! Deellink gekopieerd! - Copy share link Kopiëren deellink @@ -6444,37 +5059,30 @@ Server antwoordde met fout: %2 ShareView - Password required for new share Wachtwoord vereist voor delen - Share password Wachtwoord - Shared with you by %1 - + - Expires in %1 - + - Sharing is disabled Delen is uitgeschakeld - This item cannot be shared. Dit item kan niet worden gedeeld - Sharing is disabled. Delen is uitgeschakeld. @@ -6482,12 +5090,10 @@ Server antwoordde met fout: %2 ShareeSearchField - Search for users or groups… Zoeken naar gebruikers of groepen ... - Sharing is not available for this folder Delen is niet beschikbaar voor deze map @@ -6495,7 +5101,6 @@ Server antwoordde met fout: %2 SyncJournalDb - Failed to connect database. Kon niet verbinden met database. @@ -6503,30 +5108,25 @@ Server antwoordde met fout: %2 SyncStatus - Sync now Nu synchroniseren - Resolve conflicts Los conflicten op - Open browser - + TalkReplyTextField - Reply to … Antwoord aan ... - Send reply to chat message Stuur antwoord op chatbericht @@ -6534,86 +5134,36 @@ Server antwoordde met fout: %2 TermsOfServiceCheckWidget - Terms of Service - + - Logo - + Logo - Switch to your browser to accept the terms of service - - - - - TrayFoldersMenuButton - - - Open local or group folders - Open lokale of groepsmappen - - - - Open local folder - Open lokale map - - - - Connected - Verbonden - - - - Disconnected - Niet verbonden - - - - Open local folder "%1" - Open lokale map "%1" - - - - Open group folder "%1" - Open groepsmap "%1" - - - - Open %1 in file explorer - Open %1 in bestandsverkenner - - - - User group and local folders menu - Menu gebruikersgroep en lokale mappen + TrayWindowHeader - Open local or group folders - + Open lokale of groepsmappen - More apps - + - Open %1 in browser - + UnifiedSearchInputContainer - Search files, messages, events … Zoek in bestanden, berichten, afspraak ... @@ -6621,15 +5171,13 @@ Server antwoordde met fout: %2 UnifiedSearchPlaceholderView - Start typing to search - + UnifiedSearchResultFetchMoreTrigger - Load more results Laad meer resultaten @@ -6637,7 +5185,6 @@ Server antwoordde met fout: %2 UnifiedSearchResultItemSkeleton - Search result skeleton. Zoekresultaat skelet. @@ -6645,7 +5192,6 @@ Server antwoordde met fout: %2 UnifiedSearchResultListItem - Load more results Laad meer resultaten @@ -6653,7 +5199,6 @@ Server antwoordde met fout: %2 UnifiedSearchResultNothingFound - No results for Geen resultaten voor @@ -6661,7 +5206,6 @@ Server antwoordde met fout: %2 UnifiedSearchResultSectionItem - Search results section %1 Zoekresultaten sectie %1 @@ -6669,44 +5213,34 @@ Server antwoordde met fout: %2 UserLine - Switch to account Omschakelen naar account - Current account status is online Huidige gebruikersstatus is online - Current account status is do not disturb Huidige gebruikersstatus is niet storen - Account actions Accountacties - Set status Status instellen - - Log out Afmelden - - Log in Meld u aan - Remove account Verwijder account @@ -6714,130 +5248,123 @@ Server antwoordde met fout: %2 UserStatusSelector - Online status Online status - Online Online - Away Afwezig - Do not disturb Niet storen - Mute all notifications Demp alle meldingen - Invisible Onzichtbaar - Appear offline Toon als afwezig - Status message Statusbericht - What is your status? Wat is je status? - Clear status message after Statusbericht wissen na - Cancel Annuleren - Clear - + - Apply - + Toepassen Utility - %L1 GB %L1 GB - %L1 MB %L1 MB - %L1 KB %L1 KB - %L1 B %L1 B - %L1 TB %L1 TB - %n year(s) - %n jaar%n jaar + + %n jaar + %n jaar + - %n month(s) - %n maand%n maanden + + %n maand + %n maanden + - %n day(s) - %n dag%n dagen + + %n dag + %n dagen + - %n hour(s) - %n uur%n uur + + %n uur + %n uur + - %n minute(s) - %n minuut%n minuten + + %n minuut + %n minuten + - %n second(s) - %n seconde%n seconde(n) + + %n seconde + %n seconde(n) + - %1 %2 %1 %2 @@ -6845,17 +5372,14 @@ Server antwoordde met fout: %2 ValidateChecksumHeader - The checksum header is malformed. De header van het controlegetal is misvormd. - The checksum header contained an unknown checksum type "%1" Het header controlegetal bevat een onbekend controlegetal type "%1" - The downloaded file does not match the checksum, it will be resumed. "%1" != "%2" Het gedownloade bestand komt niet overeen met het controlegetal. Het wordt opnieuw verwerkt. "%1" != "%2" @@ -6863,12 +5387,10 @@ Server antwoordde met fout: %2 main.cpp - System Tray not available Systeemvak niet beschikbaar - %1 requires on a working system tray. If you are running XFCE, please follow <a href="http://docs.xfce.org/xfce/xfce4-panel/systray">these instructions</a>. Otherwise, please install a system tray application such as "trayer" and try again. %1 heeft een werkend systeemvak nodig. Als je XFCE draait volg je <a href="http://docs.xfce.org/xfce/xfce4-panel/systray">deze instructies</a>. Installeer anders een systeemvak applicatie zoals "trayer" en probeer het opnieuw. @@ -6876,7 +5398,6 @@ Server antwoordde met fout: %2 nextcloudTheme::aboutInfo() - <p><small>Built from Git revision <a href="%1">%2</a> on %3, %4 using Qt %5, %6</small></p> <p><small>Gebouwd vanaf Git revisie <a href="%1">%2</a> op %3, %4 gebruik makend van Qt %5, %6</small></p> @@ -6884,172 +5405,137 @@ Server antwoordde met fout: %2 progress - Virtual file created Virtueel bestand gecreëerd - Replaced by virtual file Vervangen door virtueel bestand - Downloaded Gedownload - Uploaded Geüpload - Server version downloaded, copied changed local file into conflict file Serverversie gedownload, gewijzigde lokale bestand gekopieerd in conflictbestand - Server version downloaded, copied changed local file into case conflict conflict file Serverversie gedownload, gewijzigde lokale bestand gekopieerd in conflictbestand - Deleted Verwijderd - Moved to %1 Verplaatst naar %1 - Ignored Genegeerd - Filesystem access error Toegangsfout van het bestandssysteem - - Error Fout - Updated local metadata Lokale metadata geüploaded - Updated local virtual files metadata Lokale virtuele bestanden metadata geüploaded - Updated end-to-end encryption metadata - + - - Unknown Onbekend - Downloading Downloaden - Uploading Uploaden - Deleting Verwijderen - Moving Verplaatsen - Ignoring Negeren - Updating local metadata Bijwerken lokale metadata - Updating local virtual files metadata Bijwerken lokale virtuele bestanden metadata - Updating end-to-end encryption metadata - + theme - Sync status is unknown Synchronisatiestatus is onbekend - Waiting to start syncing In afwachting van synchronisatie - Sync is running Bezig met synchroniseren - Sync was successful Synchronisatie was geslaagd - Sync was successful but some files were ignored Synchronisatie geslaagd, sommige bestanden werden genegeerd - Error occurred during sync Er trad een fout op tijdens synchronisatie - Error occurred during setup Er trad een fout op bij het instellen - Stopping sync Synchronisatie stoppen - Preparing to sync Voorbereiden synchronisatie - Sync is paused Synchronisatie is gepauzeerd @@ -7057,67 +5543,44 @@ Server antwoordde met fout: %2 utility - Could not open browser Kon browser niet openen - There was an error when launching the browser to go to URL %1. Maybe no default browser is configured? Er trad een fout op bij het starten van de browser om naar URL %1 te gaan. Misschien is er geen standaardbrowser geconfigureerd? - Could not open email client Kon e-mailclient niet openen - There was an error when launching the email client to create a new message. Maybe no default email client is configured? Er trad een fout op bij het starten van de e-mailclient om een nieuw bericht te maken. Misschien is er geen e-mailclient gedefinieerd? - Always available locally Altijd lokaal beschikbaar - Currently available locally Momenteel lokaal beschikbaar - Some available online only Sommige alleen online beschikbaar - Available online only Alleen online beschikbaar - Make always available locally Maak altijd lokaal beschikbaar - Free up local space Lokale ruimte vrijmaken - - FileProviderFastEnumerationSettings - - - Enable fast sync - Snelle sync inschakelen - - - - Fast sync will only sync changes in files and folders within folders that have been explored. This can significantly increase responsiveness on initial configuration of virtual files. However, it will cause redundant downloads of files moved to an unexplored folder. - Snelle synchronisatie synchroniseert alleen wijzigingen in bestanden en mappen binnen mappen die zijn verkend. Dit kan de reactiesnelheid bij de eerste configuratie van virtuele bestanden aanzienlijk verbeteren. Het zal echter leiden tot overbodige downloads van bestanden die verplaatst zijn naar een niet verkende map. - - - \ No newline at end of file + From 51175954cc36467447840b274e0464925ce8943e Mon Sep 17 00:00:00 2001 From: Kevin Beraz Date: Thu, 16 Oct 2025 10:49:32 +0200 Subject: [PATCH 366/371] sort step 0 --- translations/client_de.ts | 4755 +++++++++++++++--------------- translations/client_en.ts | 5357 +++++++++++++++++----------------- translations/client_en_GB.ts | 4759 +++++++++++++++--------------- translations/client_es.ts | 4759 +++++++++++++++--------------- translations/client_fr.ts | 4747 +++++++++++++++--------------- translations/client_nl.ts | 4821 +++++++++++++++--------------- 6 files changed, 14596 insertions(+), 14602 deletions(-) diff --git a/translations/client_de.ts b/translations/client_de.ts index bebf388818b08..d389a3c1b5c08 100644 --- a/translations/client_de.ts +++ b/translations/client_de.ts @@ -1,49 +1,44 @@ - - + ActivityItem - - Open %1 locally - %1 lokal öffnen - In %1 In %1 - + + Open %1 locally + %1 lokal öffnen + + ActivityItemContent - - Open file details - Dateidetails öffnen - Dismiss Ablehnen - + + Open file details + Dateidetails öffnen + + ActivityList Activity list Aktivitätenliste - - Scroll to top - Nach unten blättern - No activities yet Noch keine Aktivitäten vorhanden - + + Scroll to top + Nach unten blättern + + CallNotificationDialog - - Talk notification caller avatar - Avatar zu Benachrichtigung über Talk-Anrufer - Answer Talk call notification Benachrichtigung zu Talk-Anruf beantworten @@ -56,7 +51,11 @@ Decline Talk call notification Benachrichtigung zu Talk-Anruf ablehnen - + + Talk notification caller avatar + Avatar zu Benachrichtigung über Talk-Anrufer + + CloudProviderWrapper @@ -68,62 +67,62 @@ Nach Änderungen suchen in "%1" - Syncing %1 of %2 (%3 left) - Synchronisiere %1 von %2 (%3 übrig) - - - Syncing %1 of %2 - Synchronisiere %1 von %2 - - - Syncing %1 (%2 left) - Synchronisiere %1 (%2 übrig) + Help + Hilfe - Syncing %1 - Synchronisiere %1 + Log out + Abmelden No recently changed files Keine kürzlich geänderten Dateien - Sync paused - Synchronisierung pausiert + Open website + Webseite öffnen - Syncing - Synchronisiere + Pause synchronization + Synchronisierung pausieren - Open website - Webseite öffnen + Quit sync client + Sync-Client beenden - + Recently changed Zuletzt geändert - Pause synchronization - Synchronisierung pausieren + Settings + Einstellungen - Help - Hilfe + Sync paused + Synchronisierung pausiert - Settings - Einstellungen + Syncing + Synchronisiere - Log out - Abmelden + Syncing %1 + Synchronisiere %1 - Quit sync client - Sync-Client beenden + Syncing %1 (%2 left) + Synchronisiere %1 (%2 übrig) - + + Syncing %1 of %2 + Synchronisiere %1 von %2 + + + Syncing %1 of %2 (%3 left) + Synchronisiere %1 von %2 (%3 übrig) + + ConflictDelegate @@ -138,18 +137,10 @@ CurrentAccountHeaderButton - Current account - Aktuelles Konto - - - Resume sync for all - Synchronisierung für alle fortsetzen - - - Pause sync for all - Synchronisierung für alle pausieren + Account switcher and settings menu + Konto-Umschalter und Einstellungsmenü - + Add account Konto hinzufügen @@ -158,30 +149,38 @@ Neues Konto hinzufügen - Settings - Einstellungen - - - Exit - Beenden + Current account + Aktuelles Konto Current account avatar Avatar des aktuellen Kontos + + Current account status is do not disturb + Aktueller Kontostatus ist "Nicht stören" + Current account status is online Aktueller Kontostatus ist "Online" - Current account status is do not disturb - Aktueller Kontostatus ist "Nicht stören" + Exit + Beenden - Account switcher and settings menu - Konto-Umschalter und Einstellungsmenü + Pause sync for all + Synchronisierung für alle pausieren - + + Resume sync for all + Synchronisierung für alle fortsetzen + + + Settings + Einstellungen + + EditFileLocallyLoadingDialog @@ -205,23 +204,23 @@ EncryptionTokenSelectionWindow - - Token Encryption Key Chooser - Auswahl des Token-Schlüssels - Available Keys for end-to-end Encryption: Verfügbare Schlüssel für Ende-zu-Ende-Verschlüsselung: + Cancel + Abbrechen + + Choose Auswählen - Cancel - Abbrechen + Token Encryption Key Chooser + Auswahl des Token-Schlüssels - + ErrorBox @@ -253,15 +252,15 @@ Evict materialised files Materialisierte Dateien löschen - - Reload - Neu laden - Materialised items Materialisierte Elemente - + + Reload + Neu laden + + FileProviderFastEnumerationSettings @@ -283,24 +282,20 @@ FileProviderSettings - Virtual files settings - Einstellungen für virtuelle Dateien + Enable virtual files + Virtuelle Dateien aktivieren - + General settings Allgemeine Einstellungen - Enable virtual files - Virtuelle Dateien aktivieren + Virtual files settings + Einstellungen für virtuelle Dateien - + FileProviderStorageInfo - - Local storage use - Lokaler Speicher verwenden - %1 GB of %2 GB remote files synced %1 GB von %2 GB der entfernten Dateien synchronisiert @@ -309,42 +304,50 @@ Evict local copies … Lokale Kopien entfernen … - + + Local storage use + Lokaler Speicher verwenden + + FileProviderSyncStatus - - Syncing - Synchronisiere - All synced! Alles synchronisiert! - - Request sync - Synchronisierung anfordern - Request a sync of changes for the VFS environment. macOS may ignore or delay this request. Eine Synchronisierung der Änderungen für die VFS-Umgebung anfordern. macOS kann diese Anforderung ignorieren oder verzögern. - - - FileSystem + + Request sync + Synchronisierung anfordern + - Error removing "%1": %2 - Fehler beim Entfernen von "%1": %2 + Syncing + Synchronisiere + + + FileSystem Could not remove folder "%1" Der Ordner "%1" konnte nicht entfernt werden - + + Error removing "%1": %2 + Fehler beim Entfernen von "%1": %2 + + Flow2AuthWidget + An error occurred while connecting. Please try again. + Es ist ein Fehler beim Herstellen der Verbindung aufgetreten. Bitte erneut versuchen. + + Browser Authentication Browser-Authentifizierung @@ -356,44 +359,55 @@ macOS kann diese Anforderung ignorieren oder verzögern. Switch to your browser to connect your account Wechseln Sie zu Ihrem Browser, um Ihr Konto zu verbinden - - An error occurred while connecting. Please try again. - Es ist ein Fehler beim Herstellen der Verbindung aufgetreten. Bitte erneut versuchen. - - + FolderWizardSourcePage - - Pick a local folder on your computer to sync - Wählen Sie einen lokalen Ordner zum Synchronisieren aus - &Choose … &Wählen … - + + Pick a local folder on your computer to sync + Wählen Sie einen lokalen Ordner zum Synchronisieren aus + + FolderWizardTargetPage - - Select a remote destination folder - Einen entfernten Zielordner auswählen - Create folder Ordner erstellen + Folders + Ordner + + Refresh Aktualisieren - Folders - Ordner + Select a remote destination folder + Einen entfernten Zielordner auswählen - + + + main.cpp + + %1 requires on a working system tray. If you are running XFCE, please follow <a href="http://docs.xfce.org/xfce/xfce4-panel/systray">these instructions</a>. Otherwise, please install a system tray application such as "trayer" and try again. + %1 benötigt ein funktionierendes Benachrichtigungsfeld. Falls Sie XFCE einsetzen, dann folgen Sie bitte <a href="http://docs.xfce.org/xfce/xfce4-panel/systray">diesen Anweisungen</a>. Andernfalls installieren Sie bitte ein Benachrichtigungsfeld wie zum Beispiel "Trayer" und versuchen es nochmal. + + + System Tray not available + Benachrichtigungsfeld (Taskleiste) ist nicht verfügbar. + + MainWindow + New activities + Neue Aktivitäten + + Nextcloud desktop main dialog Nextcloud Desktop-Hauptdialog @@ -401,9 +415,12 @@ macOS kann diese Anforderung ignorieren oder verzögern. Unified search results list Einheitliche Suchergebnisliste + + + nextcloudTheme::aboutInfo() - New activities - Neue Aktivitäten + <p><small>Built from Git revision <a href="%1">%2</a> on %3, %4 using Qt %5, %6</small></p> + <p><small>Erstellt aus der Git-Revision <a href="%1">%2</a> auf %3, %4 unter Verwendung von Qt %5, %6</small></p> @@ -412,15 +429,15 @@ macOS kann diese Anforderung ignorieren oder verzögern. Connection timed out Zeitüberschreitung bei der Verbindung - - Unknown error: network reply was deleted - Unbekannter Fehler: Netzwerk-Antwort wurde gelöscht - Server replied "%1 %2" to "%3 %4" Server hat "%1 %2" auf "%3 %4" geantwortet - + + Unknown error: network reply was deleted + Unbekannter Fehler: Netzwerk-Antwort wurde gelöscht + + OCC::Account @@ -444,383 +461,383 @@ Should the accounts be imported? %1 Konten wurden von einem älteren Desktop-Client erkannt. Sollen die Konten importiert werden? - - Legacy import - Import früherer Konfiguration - - - Import - Importieren - 1 account was detected from a legacy desktop client. Should the account be imported? 1 Konto wurde von einem älteren Desktop-Client erkannt. Soll das Konto importiert werden? - - Skip - Überspringen - Could not import accounts from legacy client configuration. Konten von älterer Client-Konfiguration konnten nicht importiert werden. - + + Import + Importieren + + + Legacy import + Import früherer Konfiguration + + + Skip + Überspringen + + OCC::AccountSettings - Unchecked folders will be <b>removed</b> from your local file system and will not be synchronized to this computer anymore - Nicht markierte Ordner werden von Ihrem lokalen Dateisystem <b>entfernt</b> und werden auch nicht mehr auf diesem Rechner synchronisiert + %1 (%3%) of %2 in use. Some folders, including network mounted or shared folders, might have different limits. + %1 (%3%) von %2 Serverkapazität verwendet. Einige Ordner, einschließlich über das Netzwerk verbundene oder geteilte Ordner, können unterschiedliche Beschränkungen aufweisen. - Synchronize all - Alles synchronisieren + %1 as %2 + %1 als %2 - Synchronize none - Nichts synchronisieren + %1 in use + %1 wird verwendet - Apply manual changes - Manuelle Änderungen anwenden + %1 of %2 in use + %1 von %2 Serverkapazität verwendet - Standard file sync - Standard Dateisynchronisierung + (experimental) + (experimentell) - Virtual file sync - Virtuelle Dateisynchronisierung + <p>Could not create local folder <i>%1</i>.</p> + <p>Konnte lokalen Ordner <i>%1</i> nicht anle‏gen.‎</p> - Connection settings - Verbindungseinstellungen + <p>Do you really want to stop syncing the folder <i>%1</i>?</p><p><b>Note:</b> This will <b>not</b> delete any files.</p> + <p>Möchten Sie den Ordner <i>%1</i> nicht mehr synchronisieren?</p><p><b>Anmerkung:</b> Dies wird <b>keine</b> Dateien löschen.</p> Apply Anwenden - Storage space: … - Speicherplatz: … + Apply manual changes + Manuelle Änderungen anwenden + + + Availability + Verfügbarkeit Cancel Abbrechen - Connected with <server> as <user> - Verbunden mit <server> als <user> + Choose what to sync + Zu synchronisierende Elemente auswählen - No account configured. - Kein Konto konfiguriert. + Confirm Folder Sync Connection Removal + Bestätigen Sie die Löschung der Ordner-Synchronisierung - End-to-end Encryption with Virtual Files - Ende-zu-Ende-Verschlüsselung mit virtuellen Dateien + Connected to %1. + Verbunden mit %1. - You seem to have the Virtual Files feature enabled on this folder. At the moment, it is not possible to implicitly download virtual files that are end-to-end encrypted. To get the best experience with virtual files and end-to-end encryption, make sure the encrypted folder is marked with "Make always available locally". - Sie scheinen die Funktion "Virtuelle Dateien" für diesen Ordner aktiviert zu haben. Im Moment ist es nicht möglich, virtuelle Dateien, die Ende-zu-Ende-verschlüsselt sind, implizit herunterzuladen. Um die beste Erfahrung mit virtuellen Dateien und Ende-zu-Ende-Verschlüsselung zu machen, stellen Sie sicher, dass der verschlüsselte Ordner mit "Immer lokal verfügbar machen" markiert ist. + Connected with <server> as <user> + Verbunden mit <server> als <user> - Do not encrypt folder - Ordner nicht verschlüsseln + Connecting to %1 … + Verbinde zu %1 … - Encrypt folder - Ordner verschlüsseln + Connection settings + Verbindungseinstellungen - End-to-end Encryption - Ende-zu-Ende-Verschlüsselung + Could not encrypt folder because the folder does not exist anymore + Der Ordner konnte nicht verschlüsselt werden, da er nicht mehr existiert - This will encrypt your folder and all files within it. These files will no longer be accessible without your encryption mnemonic key. -<b>This process is not reversible. Are you sure you want to proceed?</b> - Dadurch werden Ihr Ordner und alle darin enthaltenen Dateien verschlüsselt. Auf diese Dateien kann ohne Ihren mnemonischen Verschlüsselungsschlüssel nicht mehr zugegriffen werden. -<b>Dies kann nicht rückgängig gemacht werden. Sind Sie sicher, dass Sie fortfahren möchten?</b> + Create new folder + Neuen Ordner erstellen - Disable encryption - Verschlüsselung deaktivieren + Currently there is no storage usage information available. + Derzeit sind keine Speichernutzungsinformationen verfügbar. - Display mnemonic - Gedächtnisstütze anzeigen + Disable encryption + Verschlüsselung deaktivieren - End-to-end encryption has been enabled for this account - Für dieses Konto wurde die Ende-zu-Ende-Verschlüsselung aktiviert + Disable end-to-end encryption + Ende-zu-Ende-Verschlüsselung deaktivieren - Warning - Warnung + Disable end-to-end encryption for %1? + Ende-zu-Ende-Verschlüsselung für %1 deaktivieren? - Please wait for the folder to sync before trying to encrypt it. - Bitte warten Sie, bis der Ordner synchronisiert ist, bevor Sie versuchen, ihn zu verschlüsseln. + Disable support + Unterstützung deaktivieren - The folder has a minor sync problem. Encryption of this folder will be possible once it has synced successfully - Der Ordner weist ein geringfügiges Synchronisierungsproblem auf. Die Verschlüsselung dieses Ordners ist möglich, sobald er synchronisiert wurde + Disable virtual file support … + Unterstützung für virtuelle Dateien deaktivieren - The folder has a sync error. Encryption of this folder will be possible once it has synced successfully - Der Ordner weist einen Synchronisierungsfehler auf. Die Verschlüsselung dieses Ordners ist möglich, sobald er synchronisiert wurde + Disable virtual file support? + Unterstützung für virtuelle Dateien deaktivieren? - End-to-end encryption is not configured on this device. Once it is configured, you will be able to encrypt this folder. -Would you like to set up end-to-end encryption? - Auf diesem Gerät ist keine Ende-zu-Ende-Verschlüsselung konfiguriert. Sobald sie konfiguriert ist, kann dieser Ordner verschlüsselt werden. Soll die Ende-zu-Ende-Verschlüsselung eingerichtet werden? + Display mnemonic + Gedächtnisstütze anzeigen - You cannot encrypt a folder with contents, please remove the files. -Wait for the new sync, then encrypt it. - Sie können einen Ordner nicht mit Inhalten verschlüsseln, bitte Dateien entfernen. -Warten Sie auf die neue Synchronisierung und verschlüsseln Sie sie dann. + Do not encrypt folder + Ordner nicht verschlüsseln - Encryption failed - Verschlüsselung fehlgeschlagen + Edit Ignored Files + Ignorierte Dateien bearbeiten - Could not encrypt folder because the folder does not exist anymore - Der Ordner konnte nicht verschlüsselt werden, da er nicht mehr existiert + Enable virtual file support %1 … + Unterstützung für virtuelle Dateien aktivieren %1 … Encrypt Verschlüsseln - Edit Ignored Files - Ignorierte Dateien bearbeiten - - - Create new folder - Neuen Ordner erstellen - - - Availability - Verfügbarkeit + Encrypt folder + Ordner verschlüsseln - Choose what to sync - Zu synchronisierende Elemente auswählen + Encryption failed + Verschlüsselung fehlgeschlagen - Force sync now - Synchronisierung jetzt erzwingen + End-to-end Encryption + Ende-zu-Ende-Verschlüsselung - Restart sync - Synchronisierung neustarten + End-to-end Encryption with Virtual Files + Ende-zu-Ende-Verschlüsselung mit virtuellen Dateien - Remove folder sync connection - Ordner-Synchronisierung entfernen + End-to-end encryption has been enabled for this account + Für dieses Konto wurde die Ende-zu-Ende-Verschlüsselung aktiviert - Disable virtual file support … - Unterstützung für virtuelle Dateien deaktivieren + End-to-end encryption has been enabled on this account with another device.<br>It can be enabled on this device by entering your mnemonic.<br>This will enable synchronisation of existing encrypted folders. + Die Ende-zu-Ende-Verschlüsselung wurde auf diesem Konto mit einem anderen Gerät aktiviert.<br>Sie kann auf diesem Gerät durch Eingabe Ihrer Gedächtnisstütze aktiviert werden.<br>Dadurch wird die Synchronisierung vorhandener verschlüsselter Ordner aktiviert. - Enable virtual file support %1 … - Unterstützung für virtuelle Dateien aktivieren %1 … + End-to-end encryption is not configured on this device. Once it is configured, you will be able to encrypt this folder. +Would you like to set up end-to-end encryption? + Auf diesem Gerät ist keine Ende-zu-Ende-Verschlüsselung konfiguriert. Sobald sie konfiguriert ist, kann dieser Ordner verschlüsselt werden. Soll die Ende-zu-Ende-Verschlüsselung eingerichtet werden? - (experimental) - (experimentell) + End-to-end encryption mnemonic + Gedächtnisstütze für die Ende-zu-Ende-Verschlüsselung Folder creation failed Anlegen des Ordners fehlgeschlagen - Confirm Folder Sync Connection Removal - Bestätigen Sie die Löschung der Ordner-Synchronisierung - - - Remove Folder Sync Connection - Ordner-Synchronisierung entfernen + Force sync now + Synchronisierung jetzt erzwingen - Disable virtual file support? - Unterstützung für virtuelle Dateien deaktivieren? + Migrate certificate to a new one + Zertifikat auf ein neues migrieren - This action will disable virtual file support. As a consequence contents of folders that are currently marked as "available online only" will be downloaded. - -The only advantage of disabling virtual file support is that the selective sync feature will become available again. - -This action will abort any currently running synchronization. - Durch diese Aktion wird die Unterstützung für virtuelle Dateien deaktiviert. Infolgedessen werden Inhalte von Ordnern, die derzeit als "nur online verfügbar" markiert sind, heruntergeladen. - -Der einzige Vorteil der Deaktivierung der Unterstützung für virtuelle Dateien besteht darin, dass die ausgewählte Synchronisierungsfunktion wieder verfügbar wird. - -Diese Aktion bricht jede derzeit laufende Synchronisierung ab. + No %1 connection configured. + Keine %1-Verbindung konfiguriert. - - Disable support - Unterstützung deaktivieren + + No account configured. + Kein Konto konfiguriert. - End-to-end encryption mnemonic - Gedächtnisstütze für die Ende-zu-Ende-Verschlüsselung + Open folder + Ordner öffnen - Sync Running - Synchronisierung läuft + Pause sync + Synchronisierung pausieren - The syncing operation is running.<br/>Do you want to terminate it? - Die Synchronisierung läuft gerade.<br/>Wollen Sie diese beenden? + Please wait for the folder to sync before trying to encrypt it. + Bitte warten Sie, bis der Ordner synchronisiert ist, bevor Sie versuchen, ihn zu verschlüsseln. - %1 in use - %1 wird verwendet + Remove Folder Sync Connection + Ordner-Synchronisierung entfernen - Migrate certificate to a new one - Zertifikat auf ein neues migrieren + Remove folder sync connection + Ordner-Synchronisierung entfernen - There are folders that have grown in size beyond %1MB: %2 - Es gibt Ordner, deren Größe über %1 MB hinaus gewachsen ist: %2 + Removing end-to-end encryption will remove locally-synced files that are encrypted.<br>Encrypted files will remain on the server. + Durch das Entfernen der Ende-zu-Ende-Verschlüsselung werden lokal synchronisierte Dateien entfernt, die verschlüsselt sind.<br>Verschlüsselte Dateien verbleiben auf dem Server. - End-to-end encryption has been enabled on this account with another device.<br>It can be enabled on this device by entering your mnemonic.<br>This will enable synchronisation of existing encrypted folders. - Die Ende-zu-Ende-Verschlüsselung wurde auf diesem Konto mit einem anderen Gerät aktiviert.<br>Sie kann auf diesem Gerät durch Eingabe Ihrer Gedächtnisstütze aktiviert werden.<br>Dadurch wird die Synchronisierung vorhandener verschlüsselter Ordner aktiviert. + Restart sync + Synchronisierung neustarten - Set up encryption - Verschlüsselung einrichten + Resume sync + Synchronisierung fortsetzen - This account supports end-to-end encryption - Dieses Konto unterstützt Ende-zu-Ende-Verschlüsselung + Server %1 is currently being redirected, or your connection is behind a captive portal. + Server %1 wird derzeit umgeleitet oder Ihre Verbindung befindet sich hinter einem Captive-Portal. - Connected to %1. - Verbunden mit %1. + Server %1 is currently in maintenance mode. + Server %1 befindet sich im Wartungsmodus. Server %1 is temporarily unavailable. Server %1 ist derzeit nicht verfügbar. - Server %1 is currently in maintenance mode. - Server %1 befindet sich im Wartungsmodus. + Server configuration error: %1 at %2. + Konfigurationsfehler des Servers: %1 auf %2. + + + Set up encryption + Verschlüsselung einrichten Signed out from %1. Abgemeldet von %1. - There are folders that were not synchronized because they are too big: - Einige Ordner konnten nicht synchronisiert werden, da sie zu groß sind: + Standard file sync + Standard Dateisynchronisierung - There are folders that were not synchronized because they are external storages: - Es gibt Ordner, die nicht synchronisiert werden konnten, da sie externe Speicher sind: + Storage space: … + Speicherplatz: … - There are folders that were not synchronized because they are too big or external storages: - Es gibt Ordner, die nicht synchronisiert werden konnten, da sie zu groß oder externe Speicher sind: + Sync Running + Synchronisierung läuft - Open folder - Ordner öffnen + Synchronize all + Alles synchronisieren - Resume sync - Synchronisierung fortsetzen + Synchronize none + Nichts synchronisieren - Pause sync - Synchronisierung pausieren + The folder has a minor sync problem. Encryption of this folder will be possible once it has synced successfully + Der Ordner weist ein geringfügiges Synchronisierungsproblem auf. Die Verschlüsselung dieses Ordners ist möglich, sobald er synchronisiert wurde - <p>Could not create local folder <i>%1</i>.</p> - <p>Konnte lokalen Ordner <i>%1</i> nicht anle‏gen.‎</p> + The folder has a sync error. Encryption of this folder will be possible once it has synced successfully + Der Ordner weist einen Synchronisierungsfehler auf. Die Verschlüsselung dieses Ordners ist möglich, sobald er synchronisiert wurde - <p>Do you really want to stop syncing the folder <i>%1</i>?</p><p><b>Note:</b> This will <b>not</b> delete any files.</p> - <p>Möchten Sie den Ordner <i>%1</i> nicht mehr synchronisieren?</p><p><b>Anmerkung:</b> Dies wird <b>keine</b> Dateien löschen.</p> + The server version %1 is unsupported! Proceed at your own risk. + Die Serverversion %1 wird nicht unterstützt! Fortfahren auf eigenes Risiko. - To protect your Cryptographic Identity, we encrypt it with a mnemonic of 12 dictionary words. Please note these down and keep them safe. They will be needed to add other devices to your account (like your mobile phone or laptop). - Um Ihre kryptografische Identität zu schützen, verschlüsseln wir sie mit einer Gedächtnisstütze von 12 Wörterbuchwörtern. Bitte notieren Sie sich diese und bewahren Sie sie auf. Sie werden benötigt, um Ihrem Konto weitere Geräte hinzuzufügen (z. B. Ihr Mobiltelefon oder Laptop). + The syncing operation is running.<br/>Do you want to terminate it? + Die Synchronisierung läuft gerade.<br/>Wollen Sie diese beenden? - Disable end-to-end encryption - Ende-zu-Ende-Verschlüsselung deaktivieren + There are folders that have grown in size beyond %1MB: %2 + Es gibt Ordner, deren Größe über %1 MB hinaus gewachsen ist: %2 - Disable end-to-end encryption for %1? - Ende-zu-Ende-Verschlüsselung für %1 deaktivieren? + There are folders that were not synchronized because they are external storages: + Es gibt Ordner, die nicht synchronisiert werden konnten, da sie externe Speicher sind: - Removing end-to-end encryption will remove locally-synced files that are encrypted.<br>Encrypted files will remain on the server. - Durch das Entfernen der Ende-zu-Ende-Verschlüsselung werden lokal synchronisierte Dateien entfernt, die verschlüsselt sind.<br>Verschlüsselte Dateien verbleiben auf dem Server. + There are folders that were not synchronized because they are too big or external storages: + Es gibt Ordner, die nicht synchronisiert werden konnten, da sie zu groß oder externe Speicher sind: - %1 (%3%) of %2 in use. Some folders, including network mounted or shared folders, might have different limits. - %1 (%3%) von %2 Serverkapazität verwendet. Einige Ordner, einschließlich über das Netzwerk verbundene oder geteilte Ordner, können unterschiedliche Beschränkungen aufweisen. + There are folders that were not synchronized because they are too big: + Einige Ordner konnten nicht synchronisiert werden, da sie zu groß sind: - %1 of %2 in use - %1 von %2 Serverkapazität verwendet + This account supports end-to-end encryption + Dieses Konto unterstützt Ende-zu-Ende-Verschlüsselung - Currently there is no storage usage information available. - Derzeit sind keine Speichernutzungsinformationen verfügbar. + This action will disable virtual file support. As a consequence contents of folders that are currently marked as "available online only" will be downloaded. + +The only advantage of disabling virtual file support is that the selective sync feature will become available again. + +This action will abort any currently running synchronization. + Durch diese Aktion wird die Unterstützung für virtuelle Dateien deaktiviert. Infolgedessen werden Inhalte von Ordnern, die derzeit als "nur online verfügbar" markiert sind, heruntergeladen. + +Der einzige Vorteil der Deaktivierung der Unterstützung für virtuelle Dateien besteht darin, dass die ausgewählte Synchronisierungsfunktion wieder verfügbar wird. + +Diese Aktion bricht jede derzeit laufende Synchronisierung ab. - %1 as %2 - %1 als %2 + This will encrypt your folder and all files within it. These files will no longer be accessible without your encryption mnemonic key. +<b>This process is not reversible. Are you sure you want to proceed?</b> + Dadurch werden Ihr Ordner und alle darin enthaltenen Dateien verschlüsselt. Auf diese Dateien kann ohne Ihren mnemonischen Verschlüsselungsschlüssel nicht mehr zugegriffen werden. +<b>Dies kann nicht rückgängig gemacht werden. Sind Sie sicher, dass Sie fortfahren möchten?</b> - The server version %1 is unsupported! Proceed at your own risk. - Die Serverversion %1 wird nicht unterstützt! Fortfahren auf eigenes Risiko. + To protect your Cryptographic Identity, we encrypt it with a mnemonic of 12 dictionary words. Please note these down and keep them safe. They will be needed to add other devices to your account (like your mobile phone or laptop). + Um Ihre kryptografische Identität zu schützen, verschlüsseln wir sie mit einer Gedächtnisstütze von 12 Wörterbuchwörtern. Bitte notieren Sie sich diese und bewahren Sie sie auf. Sie werden benötigt, um Ihrem Konto weitere Geräte hinzuzufügen (z. B. Ihr Mobiltelefon oder Laptop). - Server %1 is currently being redirected, or your connection is behind a captive portal. - Server %1 wird derzeit umgeleitet oder Ihre Verbindung befindet sich hinter einem Captive-Portal. + Unable to connect to %1. + Verbindung zu %1 kann nicht hergestellt werden. - Connecting to %1 … - Verbinde zu %1 … + Unchecked folders will be <b>removed</b> from your local file system and will not be synchronized to this computer anymore + Nicht markierte Ordner werden von Ihrem lokalen Dateisystem <b>entfernt</b> und werden auch nicht mehr auf diesem Rechner synchronisiert - Unable to connect to %1. - Verbindung zu %1 kann nicht hergestellt werden. + Virtual file sync + Virtuelle Dateisynchronisierung - Server configuration error: %1 at %2. - Konfigurationsfehler des Servers: %1 auf %2. + Warning + Warnung + + + You cannot encrypt a folder with contents, please remove the files. +Wait for the new sync, then encrypt it. + Sie können einen Ordner nicht mit Inhalten verschlüsseln, bitte Dateien entfernen. +Warten Sie auf die neue Synchronisierung und verschlüsseln Sie sie dann. You need to accept the terms of service at %1. Die Nutzungsbedingungen unter %1 müssen bestätigt werden. - No %1 connection configured. - Keine %1-Verbindung konfiguriert. + You seem to have the Virtual Files feature enabled on this folder. At the moment, it is not possible to implicitly download virtual files that are end-to-end encrypted. To get the best experience with virtual files and end-to-end encryption, make sure the encrypted folder is marked with "Make always available locally". + Sie scheinen die Funktion "Virtuelle Dateien" für diesen Ordner aktiviert zu haben. Im Moment ist es nicht möglich, virtuelle Dateien, die Ende-zu-Ende-verschlüsselt sind, implizit herunterzuladen. Um die beste Erfahrung mit virtuellen Dateien und Ende-zu-Ende-Verschlüsselung zu machen, stellen Sie sicher, dass der verschlüsselte Ordner mit "Immer lokal verfügbar machen" markiert ist. - + OCC::AccountSetupFromCommandLineJob - - The authenticated request to the server was redirected to "%1". The URL is bad, the server is misconfigured. - Die genehmigte Anfrage an den Server wurde an "%1" umgeleitet. Die URL ist fehlerhaft, der Server ist falsch konfiguriert. - Access forbidden by server. To verify that you have proper access, <a href="%1">click here</a> to access the service with your browser. Zugriff durch Server verboten. Um zu überprüfen, ob Sie über den richtigen Zugriff verfügen, <a href="%1">klicken Sie hier</a>, um mit Ihrem Browser auf den Dienst zuzugreifen. + + The authenticated request to the server was redirected to "%1". The URL is bad, the server is misconfigured. + Die genehmigte Anfrage an den Server wurde an "%1" umgeleitet. Die URL ist fehlerhaft, der Server ist falsch konfiguriert. + There was an invalid response to an authenticated WebDAV request Es gab eine ungültige Antwort auf eine authentifizierte WebDAV-Anfrage @@ -829,44 +846,44 @@ Diese Aktion bricht jede derzeit laufende Synchronisierung ab. OCC::AccountState - Signed out - Abgemeldet + Asking Credentials + Zugangsdaten werden abgefragt - Disconnected - Getrennt + Configuration error + Konfigurationsfehler Connected Verbunden - Service unavailable - Dienst nicht verfügbar + Disconnected + Getrennt Maintenance mode Wartungsmodus - Redirect detected - Umleitung erkannt + Need the user to accept the terms of service + Der Benutzer muss die Nutzungsbedingungen akzeptieren Network error Netzwerkfehler - Configuration error - Konfigurationsfehler + Redirect detected + Umleitung erkannt - Asking Credentials - Zugangsdaten werden abgefragt + Service unavailable + Dienst nicht verfügbar - Need the user to accept the terms of service - Der Benutzer muss die Nutzungsbedingungen akzeptieren + Signed out + Abgemeldet Unknown account state @@ -875,14 +892,14 @@ Diese Aktion bricht jede derzeit laufende Synchronisierung ab. OCC::ActivityListModel - - For more activities please open the Activity app. - Um weitere Aktivitäten anzusehen, bitte die Activity-App öffnen. - Fetching activities … Aktivitäten abrufen… + + For more activities please open the Activity app. + Um weitere Aktivitäten anzusehen, bitte die Activity-App öffnen. + Network error occurred: client will retry syncing. Netzwerkfehler aufgetreten: Client startet die Synchronisation neu @@ -891,91 +908,65 @@ Diese Aktion bricht jede derzeit laufende Synchronisierung ab. OCC::AddCertificateDialog - SSL client certificate authentication - SSL-Client-Zertifikat-Authentifizierung + An encrypted pkcs12 bundle is strongly recommended as a copy will be stored in the configuration file. + Ein verschlüsseltes pkcs12-Bundle wird dringend empfohlen, da eine Kopie in der Konfigurationsdatei gespeichert wird. - This server probably requires a SSL client certificate. - Der Server benötigt vermutlich ein SSL-Client-Zertifikat + Browse … + Durchsuchen … Certificate & Key (pkcs12): Zertifikat & Schlüssel (pkcs12): + Certificate files (*.p12 *.pfx) + Zertifikatsdateien (*.p12 *.pfx) + + Certificate password: Zertifikatspasswort: - An encrypted pkcs12 bundle is strongly recommended as a copy will be stored in the configuration file. - Ein verschlüsseltes pkcs12-Bundle wird dringend empfohlen, da eine Kopie in der Konfigurationsdatei gespeichert wird. - - - Browse … - Durchsuchen … + SSL client certificate authentication + SSL-Client-Zertifikat-Authentifizierung Select a certificate Zertifikat auswählen - Certificate files (*.p12 *.pfx) - Zertifikatsdateien (*.p12 *.pfx) + This server probably requires a SSL client certificate. + Der Server benötigt vermutlich ein SSL-Client-Zertifikat - + OCC::Application - - Some settings were configured in %1 versions of this client and use features that are not available in this version.<br><br>Continuing will mean <b>%2 these settings</b>.<br><br>The current configuration file was already backed up to <i>%3</i>. - Einige Einstellungen wurden in %1-Versionen dieses Clients konfiguriert und verwenden Funktionen, die in dieser Version nicht verfügbar sind.<br><br>Fortfahren bedeutet <b>%2 dieser Einstellungen</b>.<br><br>Die aktuelle Konfigurationsdatei wurde bereits auf <i>%3</i> gesichert. - - - newer - newer software version - Neuer - - - older - older software version - Älter - - - ignoring - Ignoriere - - - deleting - Lösche - - - Quit - Beenden - - - Continue - Fortsetzen - %1 accounts number of accounts imported %1 Konten - - 1 account - 1 Konto - %1 folders number of folders imported %1 Ordner + + 1 account + 1 Konto + 1 folder 1 Ordner - Legacy import - Import früherer Konfiguration + Continue + Fortsetzen + + + Error accessing the configuration file + Fehler beim Zugriff auf die Konfigurationsdatei Imported %1 and %2 from a legacy desktop client. @@ -985,38 +976,64 @@ Diese Aktion bricht jede derzeit laufende Synchronisierung ab. %3 - Error accessing the configuration file - Fehler beim Zugriff auf die Konfigurationsdatei + Legacy import + Import früherer Konfiguration + + + Quit + Beenden + + + Some settings were configured in %1 versions of this client and use features that are not available in this version.<br><br>Continuing will mean <b>%2 these settings</b>.<br><br>The current configuration file was already backed up to <i>%3</i>. + Einige Einstellungen wurden in %1-Versionen dieses Clients konfiguriert und verwenden Funktionen, die in dieser Version nicht verfügbar sind.<br><br>Fortfahren bedeutet <b>%2 dieser Einstellungen</b>.<br><br>Die aktuelle Konfigurationsdatei wurde bereits auf <i>%3</i> gesichert. There was an error while accessing the configuration file at %1. Please make sure the file can be accessed by your system account. Beim Zugriff auf die Konfigurationsdatei unter %1 ist ein Fehler aufgetreten. Stellen Sie sicher, dass Ihr Systemkonto auf die Datei zugreifen kann. - - - OCC::AuthenticationDialog + + deleting + Lösche + - Authentication Required - Authentifizierung erforderlich + ignoring + Ignoriere - Enter username and password for "%1" at %2. - Benutzername und Passwort für "%1" auf %2 eingeben. + newer + newer software version + Neuer - &Username: - &Benutzername: + older + older software version + Älter + + + OCC::AuthenticationDialog &Password: &Passwort: - - - OCC::BasePropagateRemoteDeleteEncrypted - - "%1 Failed to unlock encrypted folder %2". - "%1 Der verschlüsselte Ordner %2 konnte nicht entsperrt werden". + + &Username: + &Benutzername: + + + Authentication Required + Authentifizierung erforderlich + + + Enter username and password for "%1" at %2. + Benutzername und Passwort für "%1" auf %2 eingeben. + + + + OCC::BasePropagateRemoteDeleteEncrypted + + "%1 Failed to unlock encrypted folder %2". + "%1 Der verschlüsselte Ordner %2 konnte nicht entsperrt werden". Wrong HTTP code returned by server. Expected 204, but received "%1 %2". @@ -1025,10 +1042,18 @@ Diese Aktion bricht jede derzeit laufende Synchronisierung ab. OCC::BulkPropagatorJob + + Error updating metadata: %1 + Fehler beim Aktualisieren der Metadaten: %1 + File %1 cannot be uploaded because another file with the same name, differing only in case, exists Die Datei %1 kann nicht hochgeladen werden, da eine andere Datei mit demselben Namen, nur unterschiedlicher Groß-/Kleinschreibung, existiert + + File %1 has invalid modification time. Do not upload to the server. + Die Datei %1 hat eine ungültige Änderungszeit. Nicht auf den Server hochladen. + File %1 has invalid modified time. Do not upload to the server. Die Datei %1 hat eine ungültige Änderungszeit. Nicht auf den Server hochladen. @@ -1038,26 +1063,22 @@ Diese Aktion bricht jede derzeit laufende Synchronisierung ab. Datei entfernt (starte das Hochladen) %1 - File %1 has invalid modification time. Do not upload to the server. - Die Datei %1 hat eine ungültige Änderungszeit. Nicht auf den Server hochladen. + Local file changed during sync. + Lokale Datei wurde während der Synchronisierung geändert. Local file changed during syncing. It will be resumed. Lokale Datei hat sich während der Synchronisierung geändert. Die Synchronisierung wird wieder aufgenommen. - - Local file changed during sync. - Lokale Datei wurde während der Synchronisierung geändert. - Network error: %1 Netzwerkfehler: %1 - Error updating metadata: %1 - Fehler beim Aktualisieren der Metadaten: %1 + Restoration failed: %1 + Wiederherstellung fehlgeschlagen: %1 - + The file %1 is currently in use Die Datei %1 wird aktuell verwendet @@ -1065,11 +1086,7 @@ Diese Aktion bricht jede derzeit laufende Synchronisierung ab. The local file was removed during sync. Die lokale Datei wurde während der Synchronisierung entfernt. - - Restoration failed: %1 - Wiederherstellung fehlgeschlagen: %1 - - + OCC::CaseClashConflictSolver @@ -1080,10 +1097,6 @@ Diese Aktion bricht jede derzeit laufende Synchronisierung ab. Could not rename file. Please make sure you are connected to the server. Datei konnte nicht umbenannt werden. Bitte stellen Sie sicher, dass Sie mit dem Server verbunden sind. - - You don't have the permission to rename this file. Please ask the author of the file to rename it. - Sie haben nicht die Berechtigung, diese Datei umzubenennen. Bitte wenden Sie sich zum Umbenennen der Datei an deren Ersteller. - Failed to fetch permissions with error %1 Berechtigungen konnten nicht abgerufen werden. Fehler: %1 @@ -1100,16 +1113,28 @@ Diese Aktion bricht jede derzeit laufende Synchronisierung ab. Filename contains trailing spaces. Dateiname enthält Leerzeichen am Ende. - + + You don't have the permission to rename this file. Please ask the author of the file to rename it. + Sie haben nicht die Berechtigung, diese Datei umzubenennen. Bitte wenden Sie sich zum Umbenennen der Datei an deren Ersteller. + + OCC::CaseClashFilenameDialog + + %1 does not support equal file names with only letter casing differences. + %1 unterstützt keine gleichen Dateinamen mit Unterschieden nur in der Groß- und Kleinschreibung. + + + 0 byte + 0 Byte + Case Clash Conflict Konflikt mit der Groß- und Kleinschreibung - The file could not be synced because it generates a case clash conflict with an existing file on this system. - Die Datei konnte nicht synchronisiert werden, da diese einen Konflikt bezüglich der Groß- und Kleinschreibung mit einer vorhandenen Datei auf diesem System erzeugt. + Case clashing file + Datei mit dem Problem der Groß- und Kleinschreibung Error @@ -1120,40 +1145,36 @@ Diese Aktion bricht jede derzeit laufende Synchronisierung ab. Vorhandene Datei - file A - Datei A - - - today - Heute + Filename contains illegal characters: %1 + Dateiname enthält unzulässige Zeichen: %1 - - 0 byte - 0 Byte + + Filename contains leading and trailing spaces. + Dateiname enthält Leerzeichen am Anfang und am Ende. - Open existing file - Existierende Datei öffnen + Filename contains leading spaces. + Dateiname enthält Leerzeichen am Anfang. - Case clashing file - Datei mit dem Problem der Groß- und Kleinschreibung + Filename contains trailing spaces. + Dateiname enthält Leerzeichen am Ende. - file B - Datei B + New filename + Neuer Dateiname Open clashing file Datei mit dem Problem der Groß- und Kleinschreibung öffnen - Please enter a new name for the clashing file: - Bitte einen neuen Namen für die Datei mit dem Problem der Groß- und Kleinschreibung eingeben: + Open existing file + Existierende Datei öffnen - New filename - Neuer Dateiname + Please enter a new name for the clashing file: + Bitte einen neuen Namen für die Datei mit dem Problem der Groß- und Kleinschreibung eingeben: Rename file @@ -1164,30 +1185,26 @@ Diese Aktion bricht jede derzeit laufende Synchronisierung ab. Die Datei "%1" konnte aufgrund eines Konflikts (Groß- / Kleinschreibung) mit einer vorhandenen Datei auf diesem System nicht synchronisiert werden. - %1 does not support equal file names with only letter casing differences. - %1 unterstützt keine gleichen Dateinamen mit Unterschieden nur in der Groß- und Kleinschreibung. - - - Filename contains leading and trailing spaces. - Dateiname enthält Leerzeichen am Anfang und am Ende. + The file could not be synced because it generates a case clash conflict with an existing file on this system. + Die Datei konnte nicht synchronisiert werden, da diese einen Konflikt bezüglich der Groß- und Kleinschreibung mit einer vorhandenen Datei auf diesem System erzeugt. - Filename contains leading spaces. - Dateiname enthält Leerzeichen am Anfang. + Use invalid name + Ungültigen Namen verwenden - Filename contains trailing spaces. - Dateiname enthält Leerzeichen am Ende. + file A + Datei A - Use invalid name - Ungültigen Namen verwenden + file B + Datei B - Filename contains illegal characters: %1 - Dateiname enthält unzulässige Zeichen: %1 + today + Heute - + OCC::CleanupPollsJob @@ -1197,15 +1214,19 @@ Diese Aktion bricht jede derzeit laufende Synchronisierung ab. OCC::ClientSideEncryption - - Input PIN code - Please keep it short and shorter than "Enter Certificate USB Token PIN:" - PIN-Code eingeben - Enter Certificate USB Token PIN: PIN des USB-Token-Zertifikats eingeben: + + Enter E2E passphrase + E2E-Passphrase eingeben + + + Input PIN code + Please keep it short and shorter than "Enter Certificate USB Token PIN:" + PIN-Code eingeben + Invalid PIN. Login failed Ungültige PIN. Anmeldung fehlgeschlagen @@ -1218,56 +1239,48 @@ Diese Aktion bricht jede derzeit laufende Synchronisierung ab. Please enter your end-to-end encryption passphrase:<br><br>Username: %2<br>Account: %3<br> Geben Sie Ihre Passphrase für Ende-zu-Ende-Verschlüsselung ein:<br><br>Benutzername: %2<br>Konto: %3<br> - - Enter E2E passphrase - E2E-Passphrase eingeben - - + OCC::ConflictDialog - Sync Conflict - Synchronisations-Konflikt - - - Conflicting versions of %1. - Konflikt-Versionen von %1. + 0 byte + 0 Byte - Which version of the file do you want to keep?<br/>If you select both versions, the local file will have a number added to its name. - Welche Version der Datei soll behalten werden?<br/>Wenn Sie beide Versionen wählen, wird der lokalen Datei eine Zahl am Ende des Dateinamens angefügt. + <a href="%1">Open local version</a> + <a href="%1">Lokale Version öffnen</a> - Local version - Lokale Version + <a href="%1">Open server version</a> + <a href="%1">Serverversion öffnen</a> Click to open the file Klicken, um die Datei zu öffnen - today - Heute + Conflicting versions of %1. + Konflikt-Versionen von %1. - 0 byte - 0 Byte + Keep both versions + Beide Versionen behalten - <a href="%1">Open local version</a> - <a href="%1">Lokale Version öffnen</a> + Keep local version + Lokale Version behalten - Server version - Serverversion + Keep selected version + Ausgewählte Version behalten - <a href="%1">Open server version</a> - <a href="%1">Serverversion öffnen</a> + Keep server version + Serverversion behalten - - Keep selected version - Ausgewählte Version behalten + + Local version + Lokale Version Open local version @@ -1278,20 +1291,36 @@ Diese Aktion bricht jede derzeit laufende Synchronisierung ab. Serverversion öffnen - Keep both versions - Beide Versionen behalten + Server version + Serverversion - Keep local version - Lokale Version behalten + Sync Conflict + Synchronisations-Konflikt - Keep server version - Serverversion behalten + Which version of the file do you want to keep?<br/>If you select both versions, the local file will have a number added to its name. + Welche Version der Datei soll behalten werden?<br/>Wenn Sie beide Versionen wählen, wird der lokalen Datei eine Zahl am Ende des Dateinamens angefügt. - + + today + Heute + + OCC::ConflictSolver + + Confirm deletion + Löschen bestätigen + + + Do you want to delete the directory <i>%1</i> and all its contents permanently? + Möchten Sie den Ordner <i>%1</i> und dessen Inhalte dauerhaft löschen? + + + Do you want to delete the file <i>%1</i> permanently? + Möchten Sie die Datei <i>%1</i> dauerhaft löschen? + Error Fehler @@ -1304,63 +1333,47 @@ Diese Aktion bricht jede derzeit laufende Synchronisierung ab. %1 - - Do you want to delete the directory <i>%1</i> and all its contents permanently? - Möchten Sie den Ordner <i>%1</i> und dessen Inhalte dauerhaft löschen? - - - Do you want to delete the file <i>%1</i> permanently? - Möchten Sie die Datei <i>%1</i> dauerhaft löschen? - - - Confirm deletion - Löschen bestätigen - - + OCC::ConnectionValidator - Timeout - Zeitüberschreitung + Authentication error: Either username or password are wrong. + Authentifizierungsfehler: Benutzername oder Passwort ist falsch. - The configured server for this client is too old - Der konfigurierte Server ist für diesen Client zu alt + No Nextcloud account configured + Kein Nextcloud-Konto konfiguriert Please update to the latest server and restart the client. Aktualisieren Sie auf die neueste Serverversion und starten Sie den Client neu. - Authentication error: Either username or password are wrong. - Authentifizierungsfehler: Benutzername oder Passwort ist falsch. - - - No Nextcloud account configured - Kein Nextcloud-Konto konfiguriert + The configured server for this client is too old + Der konfigurierte Server ist für diesen Client zu alt The provided credentials are not correct Die zur Verfügung gestellten Anmeldeinformationen sind nicht korrekt - + + Timeout + Zeitüberschreitung + + OCC::DiscoveryPhase - - Error while canceling deletion of a file - Fehler beim Abbrechen des Löschens einer Datei - Error while canceling deletion of %1 Fehler beim Abbrechen des Löschens von %1 - + + Error while canceling deletion of a file + Fehler beim Abbrechen des Löschens einer Datei + + OCC::DiscoverySingleDirectoryJob - - Server error: PROPFIND reply is not XML formatted! - Serverantwort: PROPFIND-Antwort ist nicht im XML-Format! - Encrypted metadata setup error! Einrichtungsfehler für verschlüsselte Metadaten! @@ -1369,13 +1382,13 @@ Diese Aktion bricht jede derzeit laufende Synchronisierung ab. Encrypted metadata setup error: initial signature from server is empty. Fehler bei der Einrichtung der verschlüsselten Metadaten: Die ursprüngliche Signatur vom Server ist leer. - + + Server error: PROPFIND reply is not XML formatted! + Serverantwort: PROPFIND-Antwort ist nicht im XML-Format! + + OCC::DiscoverySingleLocalDirectoryJob - - Error while opening directory %1 - Fehler beim Öffnen des Ordners %1 - Directory not accessible on client, permission denied Verzeichnis auf dem Client nicht zugreifbar, Berechtigung verweigert @@ -1385,77 +1398,81 @@ Diese Aktion bricht jede derzeit laufende Synchronisierung ab. Ordner nicht gefunden: %1 - Filename encoding is not valid - Dateinamenkodierung ist ungültig + Error while opening directory %1 + Fehler beim Öffnen des Ordners %1 Error while reading directory %1 Fehler beim Lesen des Ordners %1 - + + Filename encoding is not valid + Dateinamenkodierung ist ungültig + + OCC::EditLocallyJob - Could not start editing locally. - Lokale Bearbeitung konnte nicht gestartet werden. + An error occurred during data retrieval. + Es ist ein Fehler beim Datenabruf aufgetreten. An error occurred during setup. Es ist ein Fehler während der Einrichtung aufgetreten. - Could not find a file for local editing. Make sure its path is valid and it is synced locally. - Datei zur lokalen Bearbeitung konnte nicht gefunden werden. Stellen Sie sicher, dass der Pfad gültig ist und lokal synchronisiert wird. + An error occurred trying to synchronise the file to edit locally. + Es ist ein Fehler beim Versuch, die Datei zu synchronisieren, um sie lokal zu bearbeiten, aufgetreten. Could not find a file for local editing. Make sure it is not excluded via selective sync. Datei zur lokalen Bearbeitung konnte nicht gefunden werden. Stellen Sie sicher, dass sie nicht durch die selektive Synchronisierung ausgeschlossen wird. - An error occurred during data retrieval. - Es ist ein Fehler beim Datenabruf aufgetreten. - - - An error occurred trying to synchronise the file to edit locally. - Es ist ein Fehler beim Versuch, die Datei zu synchronisieren, um sie lokal zu bearbeiten, aufgetreten. - - - Server error: PROPFIND reply is not XML formatted! - Serverantwort: PROPFIND-Antwort ist nicht im XML-Format! + Could not find a file for local editing. Make sure its path is valid and it is synced locally. + Datei zur lokalen Bearbeitung konnte nicht gefunden werden. Stellen Sie sicher, dass der Pfad gültig ist und lokal synchronisiert wird. Could not find a remote file info for local editing. Make sure its path is valid. Remote-Dateiinformationen für die lokale Bearbeitung konnten nicht gefunden werden. Stellen Sie sicher, dass der Pfad gültig ist. - - Invalid local file path. - Ungültiger lokaler Dateipfad. - Could not open %1 %1 konnte nicht geöffnet werden - Please try again. - Bitte erneut versuchen. + Could not start editing locally. + Lokale Bearbeitung konnte nicht gestartet werden. File %1 already locked. Datei %1 bereits gesperrt. + + File %1 could not be locked. + Datei %1 konnte nicht gesperrt werden. + + + File %1 now locked. + Datei %1 ist jetzt gesperrt. + + + Invalid local file path. + Ungültiger lokaler Dateipfad. + Lock will last for %1 minutes. You can also unlock this file manually once you are finished editing. Die Sperre dauert noch %1 Minuten. Sie können diese Datei auch manuell entsperren, sobald Sie mit der Bearbeitung fertig sind. - File %1 now locked. - Datei %1 ist jetzt gesperrt. + Please try again. + Bitte erneut versuchen. - File %1 could not be locked. - Datei %1 konnte nicht gesperrt werden. + Server error: PROPFIND reply is not XML formatted! + Serverantwort: PROPFIND-Antwort ist nicht im XML-Format! - + OCC::EditLocallyManager @@ -1470,18 +1487,10 @@ Diese Aktion bricht jede derzeit laufende Synchronisierung ab. OCC::EditLocallyVerificationJob - Invalid token received. - Ungültiges Token empfangen. - - - Please try again. - Bitte erneut versuchen. - - - Invalid file path was provided. - Ungültiger Dateipfad wurde angegeben. + An error occurred trying to verify the request to edit locally. + Es ist ein Fehler beim Versuch, die Anfrage zur lokalen Bearbeitung zu überprüfen, aufgetreten. - + Could not find an account for local editing. Es konnte kein Konto für die lokale Bearbeitung gefunden werden. @@ -1490,21 +1499,24 @@ Diese Aktion bricht jede derzeit laufende Synchronisierung ab. Lokale Bearbeitung konnte nicht gestartet werden. - An error occurred trying to verify the request to edit locally. - Es ist ein Fehler beim Versuch, die Anfrage zur lokalen Bearbeitung zu überprüfen, aufgetreten. + Invalid file path was provided. + Ungültiger Dateipfad wurde angegeben. - - - OCC::EncryptFolderJob - Could not generate the metadata for encryption, Unlocking the folder. -This can be an issue with your OpenSSL libraries. - Die Metadaten für die Verschlüsselung konnten nicht generiert werden. Entsperren des Ordners. -Dies kann ein Problem mit Ihren OpenSSL-Bibliotheken sein. + Invalid token received. + Ungültiges Token empfangen. - + + Please try again. + Bitte erneut versuchen. + + OCC::EncryptedFolderMetadataHandler + + Error fetching encrypted folder ID. + Fehler beim Abrufen der verschlüsselten Ordner-ID. + Error fetching metadata. Fehler beim Abrufen der Metadaten. @@ -1513,10 +1525,6 @@ Dies kann ein Problem mit Ihren OpenSSL-Bibliotheken sein. Error locking folder. Fehler beim Sperren des Ordners. - - Error fetching encrypted folder ID. - Fehler beim Abrufen der verschlüsselten Ordner-ID. - Error parsing or decrypting metadata. Fehler beim Lesen oder Entschlüsseln von Metadaten. @@ -1527,21 +1535,22 @@ Dies kann ein Problem mit Ihren OpenSSL-Bibliotheken sein. - OCC::FileDetails - - %1 second(s) ago - seconds elapsed since file last modified - - Vor %1 Sekunde - Vor %1 Sekunden - + OCC::EncryptFolderJob + + Could not generate the metadata for encryption, Unlocking the folder. +This can be an issue with your OpenSSL libraries. + Die Metadaten für die Verschlüsselung konnten nicht generiert werden. Entsperren des Ordners. +Dies kann ein Problem mit Ihren OpenSSL-Bibliotheken sein. + + + OCC::FileDetails - %1 minute(s) ago - minutes elapsed since file last modified + %1 day(s) ago + days elapsed since file last modified - Vor %1 Minute - Vor %1 Minuten + Vor %1 Tag + Vor %1 Tagen @@ -1553,11 +1562,11 @@ Dies kann ein Problem mit Ihren OpenSSL-Bibliotheken sein. - %1 day(s) ago - days elapsed since file last modified + %1 minute(s) ago + minutes elapsed since file last modified - Vor %1 Tag - Vor %1 Tagen + Vor %1 Minute + Vor %1 Minuten @@ -1568,6 +1577,14 @@ Dies kann ein Problem mit Ihren OpenSSL-Bibliotheken sein. Vor %1 Monaten + + %1 second(s) ago + seconds elapsed since file last modified + + Vor %1 Sekunde + Vor %1 Sekunden + + %1 year(s) ago years elapsed since file last modified @@ -1588,10 +1605,10 @@ Dies kann ein Problem mit Ihren OpenSSL-Bibliotheken sein. OCC::Flow2Auth - The returned server URL does not start with HTTPS despite the login URL started with HTTPS. Login will not be possible because this might be a security issue. Please contact your administrator. - Die zurückgegebene Server-URL beginnt nicht mit HTTPS, obwohl die Anmelde-URL mit HTTPS beginnt. Die Anmeldung ist nicht möglich, da dies ein Sicherheitsproblem darstellen könnte. Bitte wenden Sie sich an Ihre Administration. + Could not parse the JSON returned from the server: <br><em>%1</em> + Der vom Server zurückgegebene JSON-Code konnte nicht verarbeitet werden: <br><em>%1</em> - + Error returned from the server: <em>%1</em> Vom Server zurückgegebener Fehler: <em>%1</em> @@ -1599,28 +1616,32 @@ Dies kann ein Problem mit Ihren OpenSSL-Bibliotheken sein. The polling URL does not start with HTTPS despite the login URL started with HTTPS. Login will not be possible because this might be a security issue. Please contact your administrator. Die Polling-URL beginnt nicht mit HTTPS, obwohl die Anmelde-URL mit HTTPS beginnt. Die Anmeldung ist nicht möglich, da dies ein Sicherheitsproblem darstellen könnte. Bitte wenden Sie sich an Ihre Administration. - - There was an error accessing the "token" endpoint: <br><em>%1</em> - Fehler beim Zugriff auf den "Token"-Endpunkt: <br><em>%1</em> - The reply from the server did not contain all expected fields Die Antwort des Servers enthielt nicht alle erwarteten Felder - Could not parse the JSON returned from the server: <br><em>%1</em> - Der vom Server zurückgegebene JSON-Code konnte nicht verarbeitet werden: <br><em>%1</em> + The returned server URL does not start with HTTPS despite the login URL started with HTTPS. Login will not be possible because this might be a security issue. Please contact your administrator. + Die zurückgegebene Server-URL beginnt nicht mit HTTPS, obwohl die Anmelde-URL mit HTTPS beginnt. Die Anmeldung ist nicht möglich, da dies ein Sicherheitsproblem darstellen könnte. Bitte wenden Sie sich an Ihre Administration. - + + There was an error accessing the "token" endpoint: <br><em>%1</em> + Fehler beim Zugriff auf den "Token"-Endpunkt: <br><em>%1</em> + + OCC::Flow2AuthWidget - Unable to open the Browser, please copy the link to your Browser. - Der Browser kann nicht geöffnet werden. Bitte kopieren Sie den Link in Ihren Browser. + Copy Link + Link kopieren + + + Link copied to clipboard. + Link in die Zwischenablage kopiert. - Waiting for authorization - Warte auf Autorisierung + Open Browser + Browser öffnen Polling for authorization @@ -1631,38 +1652,36 @@ Dies kann ein Problem mit Ihren OpenSSL-Bibliotheken sein. Starte Autorisierung - Link copied to clipboard. - Link in die Zwischenablage kopiert. - - - Open Browser - Browser öffnen + Unable to open the Browser, please copy the link to your Browser. + Der Browser kann nicht geöffnet werden. Bitte kopieren Sie den Link in Ihren Browser. - Copy Link - Link kopieren + Waiting for authorization + Warte auf Autorisierung - + OCC::Folder - - %1 has been removed. - %1 names a file. - %1 wurde entfernt. - - - %1 has been updated. - %1 names a file. - %1 wurde aktualisiert. + + %1 and %n other file(s) are currently locked. + + %1 und %n andere Datei sind aktuell gesperrt. + %1 und %n andere Dateien sind aktuell gesperrt. + - - %1 has been renamed to %2. - %1 and %2 name files. - %1 wurde in %2 umbenannt. + + %1 and %n other file(s) could not be synced due to errors. See the log for details. + + %1 und %n weitere Datei konnten aufgrund von Fehlern nicht synchronisiert werden. Schauen Sie in das Protokoll für Details. + %1 und %n weitere Dateien konnten aufgrund von Fehlern nicht synchronisiert werden. Details finden Sie im Protokoll. + - - %1 has been moved to %2. - %1 wurde in %2 verschoben. + + %1 and %n other file(s) have been added. + + %1 und %n andere Datei wurden hinzugefügt. + %1 und %n andere Dateien wurden hinzugefügt. + %1 and %n other file(s) have been removed. @@ -1671,23 +1690,26 @@ Dies kann ein Problem mit Ihren OpenSSL-Bibliotheken sein. %1 und %n andere Dateien wurden entfernt. - - Please choose a different location. The folder %1 doesn't exist. - Bitte wählen Sie einen anderen Speicherort. Der Ordner %1 ist nicht vorhanden. + + %1 and %n other file(s) have been updated. + + %1 und %n andere Datei wurde aktualisiert. + %1 und %n andere Dateien wurden aktualisiert. + - Please choose a different location. %1 isn't a valid folder. - Bitte wählen Sie einen anderen Speicherort. %1 ist kein gültiger Ordner. + %1 could not be synced due to an error. See the log for details. + %1 konnte aufgrund eines Fehlers nicht synchronisiert werden. Details finden Sie im Protokoll. - Please choose a different location. %1 isn't a readable folder. - Bitte wählen Sie einen anderen Speicherort. %1 ist kein lesbarer Ordner. + %1 has a sync conflict. Please check the conflict file! + Es gab einen Konflikt bei der Synchronisierung von %1. Bitte prüfen Sie die Konfliktdatei! - %1 and %n other file(s) have been added. + %1 has and %n other file(s) have sync conflicts. - %1 und %n andere Datei wurden hinzugefügt. - %1 und %n andere Dateien wurden hinzugefügt. + %1 und %n andere Datei haben Konflikte beim Abgleichen. + %1 und %n andere Dateien haben Konflikte beim Abgleichen. @@ -1696,12 +1718,21 @@ Dies kann ein Problem mit Ihren OpenSSL-Bibliotheken sein. %1 wurde hinzugefügt. - %1 and %n other file(s) have been updated. + %1 has been moved to %2 and %n other file(s) have been moved. - %1 und %n andere Datei wurde aktualisiert. - %1 und %n andere Dateien wurden aktualisiert. + %1 wurde in %2 verschoben und %n andere Datei wurde verschoben. + %1 wurde in %2 verschoben und %n andere Dateien wurden verschoben. + + %1 has been moved to %2. + %1 wurde in %2 verschoben. + + + %1 has been removed. + %1 names a file. + %1 wurde entfernt. + %1 has been renamed to %2 and %n other file(s) have been renamed. @@ -1709,70 +1740,26 @@ Dies kann ein Problem mit Ihren OpenSSL-Bibliotheken sein. %1 wurde in %2 umbenannt und %n andere Dateien wurden umbenannt. - - %1 has been moved to %2 and %n other file(s) have been moved. - - %1 wurde in %2 verschoben und %n andere Datei wurde verschoben. - %1 wurde in %2 verschoben und %n andere Dateien wurden verschoben. - - - - %1 has and %n other file(s) have sync conflicts. - - %1 und %n andere Datei haben Konflikte beim Abgleichen. - %1 und %n andere Dateien haben Konflikte beim Abgleichen. - - - %1 has a sync conflict. Please check the conflict file! - Es gab einen Konflikt bei der Synchronisierung von %1. Bitte prüfen Sie die Konfliktdatei! - - - %1 and %n other file(s) could not be synced due to errors. See the log for details. - - %1 und %n weitere Datei konnten aufgrund von Fehlern nicht synchronisiert werden. Schauen Sie in das Protokoll für Details. - %1 und %n weitere Dateien konnten aufgrund von Fehlern nicht synchronisiert werden. Details finden Sie im Protokoll. - + %1 has been renamed to %2. + %1 and %2 name files. + %1 wurde in %2 umbenannt. - %1 could not be synced due to an error. See the log for details. - %1 konnte aufgrund eines Fehlers nicht synchronisiert werden. Details finden Sie im Protokoll. - - - %1 and %n other file(s) are currently locked. - - %1 und %n andere Datei sind aktuell gesperrt. - %1 und %n andere Dateien sind aktuell gesperrt. - + %1 has been updated. + %1 names a file. + %1 wurde aktualisiert. %1 is currently locked. %1 ist aktuell gesperrt. - - Sync Activity - Synchronisierungsaktivität - - - Could not read system exclude file - Systemeigene Ausschlussdatei kann nicht gelesen werden - - - A new folder larger than %1 MB has been added: %2. - - Ein neuer Ordner größer als %1 MB wurde hinzugefügt: %2. - - A folder from an external storage has been added. Ein Ordner von einem externen Speicher wurde hinzugefügt. - - Please go in the settings to select it if you wish to download it. - Bitte wechseln Sie zu den Einstellungen, falls Sie den Ordner herunterladen möchten. - A folder has surpassed the set folder size limit of %1MB: %2. %3 @@ -1780,28 +1767,26 @@ Dies kann ein Problem mit Ihren OpenSSL-Bibliotheken sein. %3 - Keep syncing - Weiterhin synchronisieren - - - Stop syncing - Synchronisation stoppen - - - The folder %1 has surpassed the set folder size limit of %2MB. - Der Ordner %1 hat die festgelegte Größenbeschränkung von %2 MB überschritten. - - - Would you like to stop syncing this folder? - Möchten Sie die Synchronisierung dieses Ordners stoppen? + A large number of files in the server have been deleted. +Please confirm if you'd like to proceed with these deletions. +Alternatively, you can restore all deleted files by uploading from '%1' folder to the server. + Eine große Anzahl von Dateien auf dem Server wurde gelöscht. +Bitte bestätigen Sie, dass Sie mit diesen Löschungen fortfahren möchten. +Alternativ können Sie alle gelöschten Dateien wiederherstellen, indem Sie von Ordner '%1' auf den Server hochladen. - The folder %1 was created but was excluded from synchronization previously. Data inside it will not be synchronized. - Der Ordner %1 wurde erstellt, wurde jedoch zuvor von der Synchronisierung ausgeschlossen. Die darin enthaltenen Daten werden nicht synchronisiert. + A large number of files in your local '%1' folder have been deleted. +Please confirm if you'd like to proceed with these deletions. +Alternatively, you can restore all deleted files by downloading them from the server. + Eine große Anzahl von Dateien wurde lokal im Ordner '%1' gelöscht. +Bitte bestätigen Sie, dass Sie mit diesen Löschungen fortfahren möchten. +Alternativ können Sie auch alle gelöschten Dateien wiederherstellen, indem Sie sie vom Server herunterladen. - The file %1 was created but was excluded from synchronization previously. It will not be synchronized. - Die Datei % 1 wurde erstellt, jedoch bereits zuvor von der Synchronisierung ausgeschlossen. Sie wird nicht synchronisiert werden. + A new folder larger than %1 MB has been added: %2. + + Ein neuer Ordner größer als %1 MB wurde hinzugefügt: %2. + Changes in synchronized folders could not be tracked reliably. @@ -1816,45 +1801,81 @@ Dies bedeutet, dass der Synchronisierungs-Client lokale Änderungen möglicherwe %1 - Virtual file download failed with code "%1", status "%2" and error message "%3" - Der Download der virtuellen Datei ist mit dem Code "%1", dem Status "%2" und der Fehlermeldung "%3" fehlgeschlagen. + Could not read system exclude file + Systemeigene Ausschlussdatei kann nicht gelesen werden - A large number of files in the server have been deleted. -Please confirm if you'd like to proceed with these deletions. -Alternatively, you can restore all deleted files by uploading from '%1' folder to the server. - Eine große Anzahl von Dateien auf dem Server wurde gelöscht. -Bitte bestätigen Sie, dass Sie mit diesen Löschungen fortfahren möchten. -Alternativ können Sie alle gelöschten Dateien wiederherstellen, indem Sie von Ordner '%1' auf den Server hochladen. + Keep syncing + Weiterhin synchronisieren - A large number of files in your local '%1' folder have been deleted. -Please confirm if you'd like to proceed with these deletions. -Alternatively, you can restore all deleted files by downloading them from the server. - Eine große Anzahl von Dateien wurde lokal im Ordner '%1' gelöscht. -Bitte bestätigen Sie, dass Sie mit diesen Löschungen fortfahren möchten. -Alternativ können Sie auch alle gelöschten Dateien wiederherstellen, indem Sie sie vom Server herunterladen. + Please choose a different location. %1 isn't a readable folder. + Bitte wählen Sie einen anderen Speicherort. %1 ist kein lesbarer Ordner. - Remove all files? - Alle Dateien entfernen? + Please choose a different location. %1 isn't a valid folder. + Bitte wählen Sie einen anderen Speicherort. %1 ist kein gültiger Ordner. + + + Please choose a different location. The folder %1 doesn't exist. + Bitte wählen Sie einen anderen Speicherort. Der Ordner %1 ist nicht vorhanden. + + + Please go in the settings to select it if you wish to download it. + Bitte wechseln Sie zu den Einstellungen, falls Sie den Ordner herunterladen möchten. Proceed with Deletion Mit der Löschung fortfahren - Restore Files to Server - Dateien auf dem Server wiederherstellen + Remove all files? + Alle Dateien entfernen? Restore Files from Server Dateien vom Server wiederherstellen - + + Restore Files to Server + Dateien auf dem Server wiederherstellen + + + Stop syncing + Synchronisation stoppen + + + Sync Activity + Synchronisierungsaktivität + + + The file %1 was created but was excluded from synchronization previously. It will not be synchronized. + Die Datei % 1 wurde erstellt, jedoch bereits zuvor von der Synchronisierung ausgeschlossen. Sie wird nicht synchronisiert werden. + + + The folder %1 has surpassed the set folder size limit of %2MB. + Der Ordner %1 hat die festgelegte Größenbeschränkung von %2 MB überschritten. + + + The folder %1 was created but was excluded from synchronization previously. Data inside it will not be synchronized. + Der Ordner %1 wurde erstellt, wurde jedoch zuvor von der Synchronisierung ausgeschlossen. Die darin enthaltenen Daten werden nicht synchronisiert. + + + Virtual file download failed with code "%1", status "%2" and error message "%3" + Der Download der virtuellen Datei ist mit dem Code "%1", dem Status "%2" und der Fehlermeldung "%3" fehlgeschlagen. + + + Would you like to stop syncing this folder? + Möchten Sie die Synchronisierung dieses Ordners stoppen? + + OCC::FolderCreationDialog + Could not create a folder! Check your write permissions. + Ordner konnte nicht erstellt werden! Prüfen Sie die Schreibberechtigungen. + + Create new folder Neuen Ordner erstellen @@ -1862,122 +1883,118 @@ Alternativ können Sie auch alle gelöschten Dateien wiederherstellen, indem Sie Enter folder name Ordnernamen eingeben - - Folder already exists - Ordner existiert bereits - Error Fehler - Could not create a folder! Check your write permissions. - Ordner konnte nicht erstellt werden! Prüfen Sie die Schreibberechtigungen. + Folder already exists + Ordner existiert bereits - + OCC::FolderMan - Could not reset folder state - Konnte Ordner-Zustand nicht zurücksetzen + %1 (Sync is paused) + %1 (Synchronisierung ist pausiert) + + + (backup %1) + (Sicherung %1) (backup) (Sicherung) - - (backup %1) - (Sicherung %1) - An old sync journal "%1" was found, but could not be removed. Please make sure that no application is currently using it. Ein altes Synchronisierungsprotokoll "%1" wurde gefunden, konnte jedoch nicht entfernt werden. Bitte stellen Sie sicher, dass keine Anwendung es verwendet. - Undefined state. - Undefinierter Zustand. + Could not reset folder state + Konnte Ordner-Zustand nicht zurücksetzen - Waiting to start syncing. - Wartet auf Beginn der Synchronisierung. + Last sync was successful. + Die letzte Synchronisierung war erfolgreich. - Preparing for sync. - Synchronisierung wird vorbereitet. + Please choose a different location. %1 is already being used as a sync folder for %2. + folder location, server url + Bitte wählen Sie einen anderen Speicherort. %1 wird bereits als Synchronisierungsordner für %2 verwendet. - Syncing %1 of %2 (A few seconds left) - Synchronisiere %1 von %2 (ein paar Sekunden übrig) + Please choose a different location. %1 is already being used as a sync folder. + Bitte wählen Sie einen anderen Speicherort. %1 wird bereits als Synchronisationsordner verwendet. - Syncing %1 of %2 (%3 left) - Synchronisiere %1 von %2 (%3 übrig) + Please choose a different location. %1 is already contained in a folder used as a sync folder. + Bitte wählen Sie einen anderen Speicherort. %1 ist bereits in einem Ordner enthalten, der als Synchronisierungsordner verwendet wird. - Syncing %1 of %2 - Synchronisiere %1 von %2 + Please choose a different location. The path %1 doesn't exist. + Bitte wählen Sie einen anderen Speicherort. Der Pfad %1 existiert nicht. - Syncing %1 (A few seconds left) - Synchronisiere %1 (ein paar Sekunden übrig) + Please choose a different location. The path %1 isn't a folder. + Bitte wählen Sie einen anderen Speicherort. Der Pfad %1 ist kein Ordner. - Syncing %1 (%2 left) - Synchronisiere %1 (%2 übrig) + Please choose a different location. The selected folder isn't valid. + Bitte wählen Sie einen anderen Speicherort. Der ausgewählte Ordner ist ungültig. - Syncing %1 - Synchronisiere %1 + Please choose a different location. You don't have enough permissions to write to %1. + folder location + Bitte wählen Sie einen anderen Speicherort. Sie haben nicht genügend Berechtigungen, um in %1 zu schreiben. - Sync is running. - Synchronisierung läuft. + Preparing for sync. + Synchronisierung wird vorbereitet. + + + Setup error. + Einrichtungsfehler. Sync finished with unresolved conflicts. Synchronisierung mit ungelösten Konflikten beendet. - Last sync was successful. - Die letzte Synchronisierung war erfolgreich. + Sync is paused. + Synchronisierung ist pausiert. - Setup error. - Einrichtungsfehler. + Sync is running. + Synchronisierung läuft. Sync request was cancelled. Synchronisierungsanfrage wurde abgebrochen. - Please choose a different location. The selected folder isn't valid. - Bitte wählen Sie einen anderen Speicherort. Der ausgewählte Ordner ist ungültig. + Syncing %1 + Synchronisiere %1 - Please choose a different location. %1 is already being used as a sync folder. - Bitte wählen Sie einen anderen Speicherort. %1 wird bereits als Synchronisationsordner verwendet. + Syncing %1 (%2 left) + Synchronisiere %1 (%2 übrig) - Please choose a different location. The path %1 doesn't exist. - Bitte wählen Sie einen anderen Speicherort. Der Pfad %1 existiert nicht. + Syncing %1 (A few seconds left) + Synchronisiere %1 (ein paar Sekunden übrig) - Please choose a different location. The path %1 isn't a folder. - Bitte wählen Sie einen anderen Speicherort. Der Pfad %1 ist kein Ordner. + Syncing %1 of %2 + Synchronisiere %1 von %2 - Please choose a different location. You don't have enough permissions to write to %1. - folder location - Bitte wählen Sie einen anderen Speicherort. Sie haben nicht genügend Berechtigungen, um in %1 zu schreiben. + Syncing %1 of %2 (%3 left) + Synchronisiere %1 von %2 (%3 übrig) - Please choose a different location. %1 is already contained in a folder used as a sync folder. - Bitte wählen Sie einen anderen Speicherort. %1 ist bereits in einem Ordner enthalten, der als Synchronisierungsordner verwendet wird. - - - Please choose a different location. %1 is already being used as a sync folder for %2. - folder location, server url - Bitte wählen Sie einen anderen Speicherort. %1 wird bereits als Synchronisierungsordner für %2 verwendet. + Syncing %1 of %2 (A few seconds left) + Synchronisiere %1 von %2 (ein paar Sekunden übrig) The folder %1 is linked to multiple accounts. @@ -1990,14 +2007,14 @@ So beheben Sie dieses Problem: Entfernen Sie %1 von einem der Konten und erstell Für fortgeschrittene Benutzer: Dieses Problem kann damit zusammenhängen, dass sich mehrere Synchronisierungsdatenbankdateien in einem Ordner befinden. Suchen Sie in %1 nach veralteten und nicht verwendeten .sync_*.db-Dateien und entfernen Sie diese. - Sync is paused. - Synchronisierung ist pausiert. + Undefined state. + Undefinierter Zustand. - %1 (Sync is paused) - %1 (Synchronisierung ist pausiert) + Waiting to start syncing. + Wartet auf Beginn der Synchronisierung. - + OCC::FolderStatusDelegate @@ -2012,57 +2029,61 @@ Für fortgeschrittene Benutzer: Dieses Problem kann damit zusammenhängen, dass OCC::FolderStatusModel - You need to be connected to add a folder - Sie müssen verbunden sein, um einen Ordner hinzuzufügen + %1 %2 + Example text: "Uploading foobar.png" + %1 %2 - Click this button to add a folder to synchronize. - Wählen Sie diese Schaltfläche, um einen zu synchronisierenden Ordner hinzuzufügen. + %1 %2 (%3 of %4) + Example text: "Uploading foobar.png (2MB of 2MB)" + %1 %2 (%3 von %4) - Could not decrypt! - Konnte nicht entschlüsseln! + %1 %2 … + Example text: "Uploading foobar.png (1MB of 2MB) time left 2 minutes at a rate of 24Kb/s" Example text: "Syncing 'foo.txt', 'bar.txt'" + %1 %2 … %1 (%2) %1 (%2) - Error while loading the list of folders from the server. - Fehler beim Empfang der Ordnerliste vom Server. - - - Virtual file support is enabled. - Unterstützung für virtuelle Dateien ist aktiviert. + %1 of %2, file %3 of %4 + Example text: "12 MB of 345 MB, file 6 of 7" + %1 of %2, Datei %3 von %4 - Signed out - Abgemeldet + %5 left, %1 of %2, file %3 of %4 + %5 übrig, %1 von %2, Datei %3 von %4 - Synchronizing virtual files in local folder - Virtuelle Dateien im lokalen Ordner synchronisieren + , + , - Synchronizing files in local folder - Dateien im lokalen Ordner synchronisieren + A few seconds left, %1 of %2, file %3 of %4 + Example text: "5 minutes left, 12 MB of 345 MB, file 6 of 7" + Noch ein paar Sekunden, %1 von %2, Datei %3 von %4 - Checking for changes in remote "%1" - Nach Änderungen in entfernten "%1" suchen + About to start syncing + Die Synchronisierung beginnt Checking for changes in local "%1" Nach Änderungen in lokalem "%1" suchen - Syncing local and remote changes - Synchronisieren von lokalen und Remote-Änderungen + Checking for changes in remote "%1" + Nach Änderungen in entfernten "%1" suchen - %1 %2 … - Example text: "Uploading foobar.png (1MB of 2MB) time left 2 minutes at a rate of 24Kb/s" Example text: "Syncing 'foo.txt', 'bar.txt'" - %1 %2 … + Click this button to add a folder to synchronize. + Wählen Sie diese Schaltfläche, um einen zu synchronisierenden Ordner hinzuzufügen. + + + Could not decrypt! + Konnte nicht entschlüsseln! Download %1/s @@ -2070,57 +2091,49 @@ Für fortgeschrittene Benutzer: Dieses Problem kann damit zusammenhängen, dass %1/s herunterladen - File %1 of %2 - Datei %1 von %2 - - - There are unresolved conflicts. Click for details. - Es existieren ungelöste Konflikte. Für Details klicken. - - - , - , + Error while loading the list of folders from the server. + Fehler beim Empfang der Ordnerliste vom Server. Fetching folder list from server … Rufe Ordnerliste vom Server ab … - ↓ %1/s - ↓ %1/s + File %1 of %2 + Datei %1 von %2 - Upload %1/s - Example text: "Upload 24Kb/s" (%1 is replaced by 24Kb (translated)) - %1/s hochladen + Preparing to sync … + Synchronisierung wird vorbereitet … + + + Signed out + Abgemeldet - ↑ %1/s - ↑ %1/s + Synchronizing files in local folder + Dateien im lokalen Ordner synchronisieren - %1 %2 (%3 of %4) - Example text: "Uploading foobar.png (2MB of 2MB)" - %1 %2 (%3 von %4) + Synchronizing virtual files in local folder + Virtuelle Dateien im lokalen Ordner synchronisieren - %1 %2 - Example text: "Uploading foobar.png" - %1 %2 + Syncing local and remote changes + Synchronisieren von lokalen und Remote-Änderungen - A few seconds left, %1 of %2, file %3 of %4 - Example text: "5 minutes left, 12 MB of 345 MB, file 6 of 7" - Noch ein paar Sekunden, %1 von %2, Datei %3 von %4 + There are unresolved conflicts. Click for details. + Es existieren ungelöste Konflikte. Für Details klicken. - %5 left, %1 of %2, file %3 of %4 - %5 übrig, %1 von %2, Datei %3 von %4 + Upload %1/s + Example text: "Upload 24Kb/s" (%1 is replaced by 24Kb (translated)) + %1/s hochladen - %1 of %2, file %3 of %4 - Example text: "12 MB of 345 MB, file 6 of 7" - %1 of %2, Datei %3 von %4 + Virtual file support is enabled. + Unterstützung für virtuelle Dateien ist aktiviert. Waiting for %n other folder(s) … @@ -2130,14 +2143,18 @@ Für fortgeschrittene Benutzer: Dieses Problem kann damit zusammenhängen, dass - About to start syncing - Die Synchronisierung beginnt + You need to be connected to add a folder + Sie müssen verbunden sein, um einen Ordner hinzuzufügen - Preparing to sync … - Synchronisierung wird vorbereitet … + ↑ %1/s + ↑ %1/s - + + ↓ %1/s + ↓ %1/s + + OCC::FolderWatcher @@ -2181,20 +2198,20 @@ Für fortgeschrittene Benutzer: Dieses Problem kann damit zusammenhängen, dass OCC::FolderWizardRemotePath - Create Remote Folder - Entfernten Ordner erstellen + Authentication failed accessing %1 + Beim Zugriff auf %1 ist die Authentifizierung fehlgeschlagen - Enter the name of the new folder to be created below "%1": - Geben Sie den Namen des neuen, unter "%1" zu erstellenden Ordners ein: + Choose this to sync the entire account + Wählen Sie dies, um das gesamte Konto zu synchronisieren - Folder was successfully created on %1. - Ordner auf %1 erstellt. + Create Remote Folder + Entfernten Ordner erstellen - Authentication failed accessing %1 - Beim Zugriff auf %1 ist die Authentifizierung fehlgeschlagen + Enter the name of the new folder to be created below "%1": + Geben Sie den Namen des neuen, unter "%1" zu erstellenden Ordners ein: Failed to create the folder on %1. Please check manually. @@ -2205,8 +2222,8 @@ Für fortgeschrittene Benutzer: Dieses Problem kann damit zusammenhängen, dass Ordner konnte nicht gelistet werden. Fehler: %1 - Choose this to sync the entire account - Wählen Sie dies, um das gesamte Konto zu synchronisieren + Folder was successfully created on %1. + Ordner auf %1 erstellt. Please choose a different location. %1 is already being synced to %2. @@ -2215,216 +2232,173 @@ Für fortgeschrittene Benutzer: Dieses Problem kann damit zusammenhängen, dass OCC::FolderWizardSelectiveSync - - Use virtual files instead of downloading content immediately %1 - Virtuelle Dateien verwenden, anstatt den Inhalt sofort herunterzuladen %1 - (experimental) (experimentell) - Virtual files are not supported for Windows partition roots as local folder. Please choose a valid subfolder under drive letter. - Virtuelle Dateien werden für die Wurzel von Windows-Partitionen als lokaler Ordner nicht unterstützt. Bitte wählen Sie einen gültigen Unterordner unter dem Laufwerksbuchstaben. + Use virtual files instead of downloading content immediately %1 + Virtuelle Dateien verwenden, anstatt den Inhalt sofort herunterzuladen %1 Virtual files are not supported at the selected location Virtuelle Dateien werden an dem ausgewählten Speicherort nicht unterstützt - - - OCC::GETFileJob - - No E-Tag received from server, check Proxy/Gateway - Kein E-Tag vom Server empfangen, bitte Proxy/Gateway überprüfen - - - We received a different E-Tag for resuming. Retrying next time. - Es wurde ein unterschiedliches E-Tag zum Fortfahren empfangen. Bitte beim nächsten mal nochmal versuchen. - - - We received an unexpected download Content-Length. - Wir haben eine unerwartete Download-Content-Länge erhalten. - - - Server returned wrong content-range - Server hat falschen Bereich für den Inhalt zurückgegeben - - - Connection Timeout - Zeitüberschreitung der Verbindung + + Virtual files are not supported for Windows partition roots as local folder. Please choose a valid subfolder under drive letter. + Virtuelle Dateien werden für die Wurzel von Windows-Partitionen als lokaler Ordner nicht unterstützt. Bitte wählen Sie einen gültigen Unterordner unter dem Laufwerksbuchstaben. - + OCC::GeneralSettings - General Settings - Allgemeine Einstellungen + &Automatically check for updates + &Automatisch auf Aktualisierungen prüfen - Show Call Notifications - Anrufbenachrichtigungen anzeigen + &Launch on System Startup + Beim &Systemstart starten - For System Tray - Für das Systembenachrichtungsfeld + &Restart && Update + &Neustarten && aktualisieren - Show Chat Notifications - Chat-Benachrichtigungen anzeigen + - beta: contains versions with new features that may not be tested thoroughly +- daily: contains versions created daily only for testing and development + +Downgrading versions is not possible immediately: changing from beta to stable means waiting for the new stable version. + list of available update channels to non enterprise users and downgrading warning + - Beta: enthält Versionen mit neuen Funktionen, die möglicherweise nicht gründlich getestet wurden +- Täglich: enthält täglich erstellte Versionen, die nur zu Test- und Entwicklungszwecken erstellt werden + +Ein Downgrade von Versionen ist nicht sofort möglich: Der Wechsel von Beta auf Stabil bedeutet, dass man auf die neue stabile Version warten muss. - Show Server &Notifications - Server&benachrichtigungen anzeigen + - enterprise: contains stable versions for customers. + +Downgrading versions is not possible immediately: changing from stable to enterprise means waiting for the new enterprise version. + list of available update channels to enterprise users and downgrading warning + - Enterprise: enthält stabile Versionen für Kunden. + +Ein Downgrade von Versionen ist nicht sofort möglich: Der Wechsel von Beta auf Stabil bedeutet, dass man auf die neue stabile Version warten muss. Advanced Erweitert - - MB - Trailing part of "Ask confirmation before syncing folder larger than" - MB - Ask for confirmation before synchronizing external storages Bestätigung erfragen, bevor externe Speicher synchronisiert werden - - &Launch on System Startup - Beim &Systemstart starten - - - Use &Monochrome Icons - &Monochrome Symbole verwenden - Ask for confirmation before synchronizing new folders larger than Bestätigung erfragen, bevor neue Ordner synchronisiert werden, die größer sind als - - Notify when synchronised folders grow larger than specified limit - Benachrichtigen, wenn synchronisierte Ordner größer werden als das angegebene Limit - Automatically disable synchronisation of folders that overcome limit Automatisch die Synchronisierung von Ordnern beenden, die das Limit überschreiten - Move removed files to trash - Entfernte Dateien in den Papierkorb verschieben + Cancel + Abbrechen - Show sync folders in &Explorer's navigation pane - Synchronisierungsordner im Navigationsbereich des &Explorers anzeigen + Change update channel + Update-Kanal ändern - S&how crash reporter - &Crash-Reporter anzeigen + Changing update channel? + Update-Kanal ändern? - Server poll interval - Serverabrufintervall + Check Now + Jetzt prüfen - seconds (if <a href="https://github.com/nextcloud/notify_push">Client Push</a> is unavailable) - Sekunden (Wenn <a href="https://github.com/nextcloud/notify_push">Client Push</a> nicht verfügbar ist) + Create Debug Archive + Debug-Archiv erstellen - Edit &Ignored Files - I&gnorierte Dateien bearbeiten - - - Create Debug Archive - Debug-Archiv erstellen + Debug Archive Created + Debug-Archiv erstellt - Info - Info + Debug archive is created at %1 + Debug-Archiv erstellt in %1 - + Desktop client x.x.x Desktop-Client x.x.x - Update channel - Update-Kanal + Edit &Ignored Files + I&gnorierte Dateien bearbeiten - &Automatically check for updates - &Automatisch auf Aktualisierungen prüfen + For System Tray + Für das Systembenachrichtungsfeld - Check Now - Jetzt prüfen + General Settings + Allgemeine Einstellungen - Usage Documentation - Nutzungsdokumentation + Info + Info Legal Notice Impressum - &Restart && Update - &Neustarten && aktualisieren + MB + Trailing part of "Ask confirmation before syncing folder larger than" + MB - Server notifications that require attention. - Server-Benachrichtigungen, die Aufmerksamkeit erfordern. + Move removed files to trash + Entfernte Dateien in den Papierkorb verschieben - Show chat notification dialogs. - Dialog zu Chat-Benachrichtigungen anzeigen + Notify when synchronised folders grow larger than specified limit + Benachrichtigen, wenn synchronisierte Ordner größer werden als das angegebene Limit - Show call notification dialogs. - Dialog zu Anrufbenachrichtigungen anzeigen + S&how crash reporter + &Crash-Reporter anzeigen - You cannot disable autostart because system-wide autostart is enabled. - Sie können den Autostart nicht deaktivieren, da der systemweite Autostart aktiviert ist. + Server notifications that require attention. + Server-Benachrichtigungen, die Aufmerksamkeit erfordern. - stable - Stabil + Server poll interval + Serverabrufintervall - beta - Beta + Show Call Notifications + Anrufbenachrichtigungen anzeigen - daily - Täglich + Show Chat Notifications + Chat-Benachrichtigungen anzeigen - enterprise - Unternehmensversion + Show Server &Notifications + Server&benachrichtigungen anzeigen - - beta: contains versions with new features that may not be tested thoroughly -- daily: contains versions created daily only for testing and development - -Downgrading versions is not possible immediately: changing from beta to stable means waiting for the new stable version. - list of available update channels to non enterprise users and downgrading warning - - Beta: enthält Versionen mit neuen Funktionen, die möglicherweise nicht gründlich getestet wurden -- Täglich: enthält täglich erstellte Versionen, die nur zu Test- und Entwicklungszwecken erstellt werden - -Ein Downgrade von Versionen ist nicht sofort möglich: Der Wechsel von Beta auf Stabil bedeutet, dass man auf die neue stabile Version warten muss. + Show call notification dialogs. + Dialog zu Anrufbenachrichtigungen anzeigen - - enterprise: contains stable versions for customers. - -Downgrading versions is not possible immediately: changing from stable to enterprise means waiting for the new enterprise version. - list of available update channels to enterprise users and downgrading warning - - Enterprise: enthält stabile Versionen für Kunden. - -Ein Downgrade von Versionen ist nicht sofort möglich: Der Wechsel von Beta auf Stabil bedeutet, dass man auf die neue stabile Version warten muss. + Show chat notification dialogs. + Dialog zu Chat-Benachrichtigungen anzeigen - Changing update channel? - Update-Kanal ändern? + Show sync folders in &Explorer's navigation pane + Synchronisierungsordner im Navigationsbereich des &Explorers anzeigen The channel determines which upgrades will be offered to install: @@ -2435,40 +2409,71 @@ Ein Downgrade von Versionen ist nicht sofort möglich: Der Wechsel von Beta auf - Stabil: enthält getestete Versionen, die als zuverlässig gelten - Change update channel - Update-Kanal ändern + Update channel + Update-Kanal - Cancel - Abbrechen + Usage Documentation + Nutzungsdokumentation + + + Use &Monochrome Icons + &Monochrome Symbole verwenden + + + You cannot disable autostart because system-wide autostart is enabled. + Sie können den Autostart nicht deaktivieren, da der systemweite Autostart aktiviert ist. Zip Archives Zip-Archive - Debug Archive Created - Debug-Archiv erstellt + beta + Beta - Debug archive is created at %1 - Debug-Archiv erstellt in %1 + daily + Täglich - + + enterprise + Unternehmensversion + + + seconds (if <a href="https://github.com/nextcloud/notify_push">Client Push</a> is unavailable) + Sekunden (Wenn <a href="https://github.com/nextcloud/notify_push">Client Push</a> nicht verfügbar ist) + + + stable + Stabil + + - OCC::GetOrCreatePublicLinkShare + OCC::GETFileJob - Password for share required - Passwort für die Freigabe erforderlich + Connection Timeout + Zeitüberschreitung der Verbindung + + + No E-Tag received from server, check Proxy/Gateway + Kein E-Tag vom Server empfangen, bitte Proxy/Gateway überprüfen - Please enter a password for your link share: - Bitte Passwort für die Link-Freigabe eingeben: + Server returned wrong content-range + Server hat falschen Bereich für den Inhalt zurückgegeben - Sharing error - Fehler beim Teilen + We received a different E-Tag for resuming. Retrying next time. + Es wurde ein unterschiedliches E-Tag zum Fortfahren empfangen. Bitte beim nächsten mal nochmal versuchen. + + + We received an unexpected download Content-Length. + Wir haben eine unerwartete Download-Content-Länge erhalten. + + + OCC::GetOrCreatePublicLinkShare Could not retrieve or create the public link share. Error: @@ -2477,43 +2482,55 @@ Ein Downgrade von Versionen ist nicht sofort möglich: Der Wechsel von Beta auf %1 - - - OCC::HttpCredentialsGui + + Password for share required + Passwort für die Freigabe erforderlich + - Please enter %1 password:<br><br>Username: %2<br>Account: %3<br> - Bitte %1 Passwort:<br><br>Benutzername: %2<br>Konto: %3<br>eingeben + Please enter a password for your link share: + Bitte Passwort für die Link-Freigabe eingeben: - Reading from keychain failed with error: "%1" - Lesen vom Schlüsselbund fehlgeschlagen mit Fehler: "%1" + Sharing error + Fehler beim Teilen + + + OCC::HttpCredentialsGui + <a href="%1">Click here</a> to request an app password from the web interface. + <a href="%1">Hier klicken</a>, um von der Web-Oberfläche ein App-Passwort zu erhalten. + + Enter Password Passwort eingeben - <a href="%1">Click here</a> to request an app password from the web interface. - <a href="%1">Hier klicken</a>, um von der Web-Oberfläche ein App-Passwort zu erhalten. + Please enter %1 password:<br><br>Username: %2<br>Account: %3<br> + Bitte %1 Passwort:<br><br>Benutzername: %2<br>Konto: %3<br>eingeben - + + Reading from keychain failed with error: "%1" + Lesen vom Schlüsselbund fehlgeschlagen mit Fehler: "%1" + + OCC::IgnoreListEditor - Ignored Files Editor - Editor für ignorierte Dateien + Files Ignored by Patterns + Nach Muster ignorierte Dateien Global Ignore Settings Globale Ignorier-Einstellungen - Sync hidden files - Synchronisiere versteckte Dateien + Ignored Files Editor + Editor für ignorierte Dateien - Files Ignored by Patterns - Nach Muster ignorierte Dateien + Sync hidden files + Synchronisiere versteckte Dateien This entry is provided by the system at "%1" and cannot be modified in this view. @@ -2523,24 +2540,28 @@ Ein Downgrade von Versionen ist nicht sofort möglich: Der Wechsel von Beta auf OCC::IgnoreListTableWidget - Pattern - Muster + Add + Hinzufügen - Allow Deletion - Löschen erlauben + Add Ignore Pattern + Ignoriermuster hinzufügen - Add - Hinzufügen + Add a new ignore pattern: + Neues Ignoriermuster hinzufügen + + + Allow Deletion + Löschen erlauben - Remove - Entfernen + Cannot write changes to "%1". + Konnte Änderungen nicht in "%1" schreiben. - Remove all - Alle entfernen + Could not open file + Datei konnte nicht geöffnet werden Files or folders matching a pattern will not be synchronized. @@ -2551,131 +2572,119 @@ Items where deletion is allowed will be deleted if they prevent a directory from Objekte, bei denen Löschen erlaubt ist, werden gelöscht, wenn diese das Entfernen eines Ordners verhindern würden. Dies ist für Metadaten nützlich. - Could not open file - Datei konnte nicht geöffnet werden - - - Cannot write changes to "%1". - Konnte Änderungen nicht in "%1" schreiben. + Pattern + Muster - Add Ignore Pattern - Ignoriermuster hinzufügen + Remove + Entfernen - Add a new ignore pattern: - Neues Ignoriermuster hinzufügen + Remove all + Alle entfernen - + OCC::InvalidFilenameDialog - Invalid filename - Ungültiger Dateiname + Cannot rename file because a file with the same name does already exist on the server. Please pick another name. + Die Datei kann nicht umbenannt werden, da eine Datei mit demselben Namen bereits auf dem Server existiert. Bitte wählen Sie einen anderen Namen. - The file could not be synced because it contains characters which are not allowed on this system. - Die Datei konnte nicht synchronisiert werden, da der Name Zeichen enthält, die auf diesem System nicht zulässig sind. + Checking rename permissions … + Prüfe Umbenennungs-Rechte … + + + Could not rename file. Please make sure you are connected to the server. + Datei konnte nicht umbenannt werden. Bitte stellen Sie sicher, dass Sie mit dem Server verbunden sind. + Could not rename local file. %1 + Lokale Datei konnte nicht umbenannt werden. %1 + + Error Fehler - Please enter a new name for the file: - Bitte geben Sie einen neuen Namen für die Datei ein: + Failed to fetch permissions with error %1 + Rechte konnten nicht abgerufen werden. Fehler: %1 - New filename - Neuer Dateiname + Filename contains illegal characters: %1 + Dateiname enthält unzulässige Zeichen: %1 - Rename file - Datei umbenennen + Filename contains leading and trailing spaces. + Dateiname enthält Leerzeichen am Anfang und am Ende. - The file "%1" could not be synced because the name contains characters which are not allowed on this system. - Die Datei "%1" konnte nicht synchronisiert werden, da der Name Zeichen enthält, die auf diesem System nicht zulässig sind. - - - The following characters are not allowed on the system: \ / : ? * " < > | leading/trailing spaces - Die folgenden Zeichen sind auf dem System nicht zulässig: \ / : ? * " < > | führende/nachgestellte Leerzeichen - - - The file "%1" could not be synced because the name contains characters which are not allowed on the server. - Die Datei "%1" konnte nicht synchronisiert werden, da der Name Zeichen enthält, die auf dem Server unzulässig sind. + Filename contains leading spaces. + Dateiname enthält Leerzeichen am Anfang. - The following characters are not allowed: %1 - Die folgenden Zeichen sind nicht erlaubt: %1 + Filename contains trailing spaces. + Dateiname enthält Leerzeichen am Ende. - The following basenames are not allowed: %1 - Die folgenden Basisnamen sind nicht erlaubt: %1 + Invalid filename + Ungültiger Dateiname - The following filenames are not allowed: %1 - Die folgenden Dateinamen sind nicht erlaubt: %1 + New filename + Neuer Dateiname - The following file extensions are not allowed: %1 - Die folgenden Dateierweiterungen sind nicht erlaubt: %1 + Please enter a new name for the file: + Bitte geben Sie einen neuen Namen für die Datei ein: - Checking rename permissions … - Prüfe Umbenennungs-Rechte … + Rename file + Datei umbenennen - You don't have the permission to rename this file. Please ask the author of the file to rename it. - Sie haben nicht die Berechtigung, diese Datei umzubenennen. Bitte wenden Sie sich an den Autor der Datei, um sie umzubenennen. + The file "%1" could not be synced because the name contains characters which are not allowed on the server. + Die Datei "%1" konnte nicht synchronisiert werden, da der Name Zeichen enthält, die auf dem Server unzulässig sind. - Failed to fetch permissions with error %1 - Rechte konnten nicht abgerufen werden. Fehler: %1 + The file "%1" could not be synced because the name contains characters which are not allowed on this system. + Die Datei "%1" konnte nicht synchronisiert werden, da der Name Zeichen enthält, die auf diesem System nicht zulässig sind. - Filename contains leading and trailing spaces. - Dateiname enthält Leerzeichen am Anfang und am Ende. + The file could not be synced because it contains characters which are not allowed on this system. + Die Datei konnte nicht synchronisiert werden, da der Name Zeichen enthält, die auf diesem System nicht zulässig sind. - Filename contains leading spaces. - Dateiname enthält Leerzeichen am Anfang. + The following basenames are not allowed: %1 + Die folgenden Basisnamen sind nicht erlaubt: %1 - Filename contains trailing spaces. - Dateiname enthält Leerzeichen am Ende. + The following characters are not allowed on the system: \ / : ? * " < > | leading/trailing spaces + Die folgenden Zeichen sind auf dem System nicht zulässig: \ / : ? * " < > | führende/nachgestellte Leerzeichen - Use invalid name - Ungültigen Namen verwenden + The following characters are not allowed: %1 + Die folgenden Zeichen sind nicht erlaubt: %1 - Filename contains illegal characters: %1 - Dateiname enthält unzulässige Zeichen: %1 + The following file extensions are not allowed: %1 + Die folgenden Dateierweiterungen sind nicht erlaubt: %1 - Could not rename file. Please make sure you are connected to the server. - Datei konnte nicht umbenannt werden. Bitte stellen Sie sicher, dass Sie mit dem Server verbunden sind. + The following filenames are not allowed: %1 + Die folgenden Dateinamen sind nicht erlaubt: %1 - Cannot rename file because a file with the same name does already exist on the server. Please pick another name. - Die Datei kann nicht umbenannt werden, da eine Datei mit demselben Namen bereits auf dem Server existiert. Bitte wählen Sie einen anderen Namen. + Use invalid name + Ungültigen Namen verwenden - Could not rename local file. %1 - Lokale Datei konnte nicht umbenannt werden. %1 + You don't have the permission to rename this file. Please ask the author of the file to rename it. + Sie haben nicht die Berechtigung, diese Datei umzubenennen. Bitte wenden Sie sich an den Autor der Datei, um sie umzubenennen. - + OCC::LegalNotice - - Legal notice - Impressum - - - Close - Schliessen - <p>Copyright 2017-2025 Nextcloud GmbH<br />Copyright 2012-2023 ownCloud GmbH</p> <p>Copyright 2017-2025 Nextcloud GmbH<br />Copyright 2012-2023 ownCloud GmbH</p> @@ -2684,14 +2693,30 @@ Objekte, bei denen Löschen erlaubt ist, werden gelöscht, wenn diese das Entfer <p>Licensed under the GNU General Public License (GPL) Version 2.0 or any later version.</p> <p>Lizensiert unter der GNU General Public License (GPL) Version 2.0 oder jeder neueren Version.</p> - + + Close + Schliessen + + + Legal notice + Impressum + + OCC::LogBrowser + + Enable logging to temporary folder + Protokollierung in temporären Ordner aktivieren + Log Output Protokoll-Ausgabe + Open folder + Ordner öffnen + + The client can write debug logs to a temporary folder. These logs are very helpful for diagnosing problems. Since log files can get large, the client will start a new one for each sync run and compress older ones. It will also delete log files after a couple of hours to avoid consuming too much disk space. If enabled, logs will be written to %1 @@ -2699,38 +2724,26 @@ If enabled, logs will be written to %1 Da die Protokolldateien sehr groß werden können, erstellt der Client für jeden Synchronisierungslauf eine neue Datei und komprimiert ältere. Außerdem werden die Protokolldateien nach ein paar Stunden gelöscht, um nicht zu viel Speicherplatz zu verbrauchen. Wenn aktiviert, werden die Protokolle nach %1 geschrieben. - - Enable logging to temporary folder - Protokollierung in temporären Ordner aktivieren - This setting persists across client restarts. Note that using any logging command line options will override this setting. Diese Einstellung bleibt über Client-Neustarts hinweg bestehen. Beachten Sie, dass die Verwendung von Befehlszeilenoptionen für die Protokollierung diese Einstellung außer Kraft setzt. - - Open folder - Ordner öffnen - - + OCC::Logger - - Error - Fehler - <nobr>File "%1"<br/>cannot be opened for writing.<br/><br/>The log output <b>cannot</b> be saved!</nobr> <nobr>Datei "%1"<br/>kann nicht zum Schreiben geöffnet werden.<br/><br/>Die Protokolldatei kann <b>nicht</b> gespeichert werden!</nobr> - + + Error + Fehler + + OCC::Mac::FileProviderEditLocallyJob - - Could not start editing locally. - Lokale Bearbeitung konnte nicht gestartet werden. - An error occurred during setup. Es ist ein Fehler während der Einrichtung aufgetreten. @@ -2747,178 +2760,178 @@ Beachten Sie, dass die Verwendung von Befehlszeilenoptionen für die Protokollie Could not get file identifier. Dateikennung konnte nicht abgerufen werden. + + Could not start editing locally. + Lokale Bearbeitung konnte nicht gestartet werden. + The file identifier is empty. Dateikennung ist leer - OCC::NSISUpdater + OCC::NetworkSettings - New Version Available - Eine neue Version ist verfügbar + Download Bandwidth + Download-Bandbreite - <p>A new version of the %1 Client is available.</p><p><b>%2</b> is available for download. The installed version is %3.</p> - <p>Eine neue Version des %1 - Clients ist verfügbar.</p><p><b>%2</b> steht zum Herunterladen bereit. Die installierte Version ist %3.</p> + HTTP(S) proxy + HTTP(S)-Proxy - Update Failed - Aktualisierung fehlgeschlagen + Host + Host - <p>A new version of the %1 Client is available but the updating process failed.</p><p><b>%2</b> has been downloaded. The installed version is %3. If you confirm restart and update, your computer may reboot to complete the installation.</p> - <p>Eine neue Version des %1 - Clients ist verfügbar, aber die Aktualisierung ist fehlgeschlagen.</p><p><b>%2</b> wurde heruntergeladen. Die installierte Version ist %3. Wenn Sie Neustart und Aktualisieren bestätigen, wird Ihr Computer möglicherweise neu gestartet, um die Installation abzuschließen.</p> + Hostname of proxy server + Hostname des Proxy-Servers - Ask again later - Versuchen Sie es später erneut + KBytes/s + KBytes/s - Restart and update - Neu starten und aktualisieren + Limit automatically + Automatisch begrenzen - Update manually - Manuell aktualisieren + Limit to + Begrenzen auf - Skip this time - Dieses Mal überspringen + Limit to 3/4 of estimated bandwidth + Auf 3/4 der geschätzten Bandbreite begrenzen - Get update - Aktualisierung durchführen + Manually specify proxy + Proxy manuell festlegen - - - OCC::NetworkSettings - Proxy Settings - Proxy-Einstellungen + No limit + Keine Begrenzung - Use system proxy - System-Proxy verwenden + No proxy + Kein Proxy - Host - Host + Note: proxy settings have no effects for accounts on localhost + Hinweis: Proxy-Einstellungen haben keine Auswirkungen für Konten auf localhost - Proxy server requires authentication - Proxy-Server erfordert eine Authentifizierung + Password for proxy server + Passwort für den Proxy-Server - Download Bandwidth - Download-Bandbreite + Proxy Settings + Proxy-Einstellungen - Limit to - Begrenzen auf + Proxy server requires authentication + Proxy-Server erfordert eine Authentifizierung - KBytes/s - KBytes/s + SOCKS5 proxy + SOCKS5-Proxy - - Note: proxy settings have no effects for accounts on localhost - Hinweis: Proxy-Einstellungen haben keine Auswirkungen für Konten auf localhost + + Upload Bandwidth + Upload-Bandbreite - Manually specify proxy - Proxy manuell festlegen + Use global settings + Globale Einstellungen verwenden - No proxy - Kein Proxy + Use system proxy + System-Proxy verwenden - Use global settings - Globale Einstellungen verwenden + Username for proxy server + Benutzername für den Proxy-Server + + + OCC::NSISUpdater - No limit - Keine Begrenzung + <p>A new version of the %1 Client is available but the updating process failed.</p><p><b>%2</b> has been downloaded. The installed version is %3. If you confirm restart and update, your computer may reboot to complete the installation.</p> + <p>Eine neue Version des %1 - Clients ist verfügbar, aber die Aktualisierung ist fehlgeschlagen.</p><p><b>%2</b> wurde heruntergeladen. Die installierte Version ist %3. Wenn Sie Neustart und Aktualisieren bestätigen, wird Ihr Computer möglicherweise neu gestartet, um die Installation abzuschließen.</p> - Limit to 3/4 of estimated bandwidth - Auf 3/4 der geschätzten Bandbreite begrenzen + <p>A new version of the %1 Client is available.</p><p><b>%2</b> is available for download. The installed version is %3.</p> + <p>Eine neue Version des %1 - Clients ist verfügbar.</p><p><b>%2</b> steht zum Herunterladen bereit. Die installierte Version ist %3.</p> - Upload Bandwidth - Upload-Bandbreite + Ask again later + Versuchen Sie es später erneut - Limit automatically - Automatisch begrenzen + Get update + Aktualisierung durchführen - - Hostname of proxy server - Hostname des Proxy-Servers + + New Version Available + Eine neue Version ist verfügbar - Username for proxy server - Benutzername für den Proxy-Server + Restart and update + Neu starten und aktualisieren - Password for proxy server - Passwort für den Proxy-Server + Skip this time + Dieses Mal überspringen - HTTP(S) proxy - HTTP(S)-Proxy + Update Failed + Aktualisierung fehlgeschlagen - SOCKS5 proxy - SOCKS5-Proxy + Update manually + Manuell aktualisieren - + OCC::OCUpdater - Could not check for new updates. - Auf neue Aktualisierungen kann nicht geprüft werden. + %1 available. Restart application to start the update. + %1-Version verfügbar. Anwendung zum Start der Aktualisierung neustarten. + + + A new update for %1 is about to be installed. The updater may ask for additional privileges during the process. Your computer may reboot to complete the installation. + Eine neue Aktualisierung für %1 wird installiert. Während des Aktualisierungsvorgangs werden Sie eventuell aufgefordert, zusätzliche Berechtigungen zu gewähren. Ihr Computer wird möglicherweise neu gestartet, um die Installation abzuschließen. Checking update server … Aktualisierungsserver wird überprüft … - New %1 update ready - Neue %1 Aktualisierung verfügbar - - - A new update for %1 is about to be installed. The updater may ask for additional privileges during the process. Your computer may reboot to complete the installation. - Eine neue Aktualisierung für %1 wird installiert. Während des Aktualisierungsvorgangs werden Sie eventuell aufgefordert, zusätzliche Berechtigungen zu gewähren. Ihr Computer wird möglicherweise neu gestartet, um die Installation abzuschließen. - - - Downloading %1 … - Lade %1 herunter … + Could not check for new updates. + Auf neue Aktualisierungen kann nicht geprüft werden. - %1 available. Restart application to start the update. - %1-Version verfügbar. Anwendung zum Start der Aktualisierung neustarten. + Could not download update. Please open %1 to download the update manually. + Aktualisierung kann nicht heruntergeladen werden. Bitte öffnen Sie %1, um die Aktualisierung manuell herunterzuladen. Could not download update. Please open <a href='%1'>%1</a> to download the update manually. Aktualisierung kann nicht heruntergeladen werden. Bitte öffnen Sie <a href='%1'>%1</a>, um die Aktualisierung manuell herunterzuladen. - Could not download update. Please open %1 to download the update manually. - Aktualisierung kann nicht heruntergeladen werden. Bitte öffnen Sie %1, um die Aktualisierung manuell herunterzuladen. - - - New %1 is available. Please open <a href='%2'>%2</a> to download the update. - Neue Version von %1 vorhanden. Bitte öffnen Sie <a href='%2'>%2</a>, um die Aktualisierung herunterzuladen. + Downloading %1 … + Lade %1 herunter … New %1 is available. Please open %2 to download the update. Neue Version von %1 vorhanden. Bitte öffnen Sie %2, um die Aktualisierung herunterzuladen. - Update status is unknown: Did not check for new updates. - Aktualisierungsstatus unbekannt: Auf neue Aktualisierungen wurde nicht geprüft. + New %1 is available. Please open <a href='%2'>%2</a> to download the update. + Neue Version von %1 vorhanden. Bitte öffnen Sie <a href='%2'>%2</a>, um die Aktualisierung herunterzuladen. + + + New %1 update ready + Neue %1 Aktualisierung verfügbar No updates available. Your installation is at the latest version. @@ -2928,90 +2941,166 @@ Beachten Sie, dass die Verwendung von Befehlszeilenoptionen für die Protokollie Update Check Aktualitätsprüfung - + + Update status is unknown: Did not check for new updates. + Aktualisierungsstatus unbekannt: Auf neue Aktualisierungen wurde nicht geprüft. + + OCC::OwncloudAdvancedSetupPage - Connect - Verbinden + %1 folder "%2" is synced to local folder "%3" + %1 Ordner "%2" wird mit dem lokalen Ordner "%3" synchronisiert + + + %1 free space + %1 gets replaced with the size and a matching unit. Example: 3 MB or 5 GB + %1 freier Platz + + + (%1) + (%1) (experimental) (experimentell) - Use &virtual files instead of downloading content immediately %1 - &Virtuelle Dateien verwenden, anstatt den Inhalt sofort herunterzuladen %1 + Connect + Verbinden - Virtual files are not supported for Windows partition roots as local folder. Please choose a valid subfolder under drive letter. - Virtuelle Dateien werden für die Wurzel von Windows-Partitionen als lokaler Ordner nicht unterstützt. Bitte wählen Sie einen gültigen Unterordner unter dem Laufwerksbuchstaben. + In Finder's "Locations" sidebar section + In der Finder-Seitenleiste unter "Orte" - - %1 folder "%2" is synced to local folder "%3" - %1 Ordner "%2" wird mit dem lokalen Ordner "%3" synchronisiert + + Local Sync Folder + Lokaler Ordner für die Synchronisierung Sync the folder "%1" Ordner "%1" synchronisieren - Warning: The local folder is not empty. Pick a resolution! - Achtung: Der lokale Ordner ist nicht leer. Bitte wählen Sie eine entsprechende Lösung! + There isn't enough free space in the local folder! + Nicht genug freier Platz im lokalen Ordner vorhanden! - %1 free space - %1 gets replaced with the size and a matching unit. Example: 3 MB or 5 GB - %1 freier Platz + Use &virtual files instead of downloading content immediately %1 + &Virtuelle Dateien verwenden, anstatt den Inhalt sofort herunterzuladen %1 Virtual files are not supported at the selected location Virtuelle Dateien werden an dem ausgewählten Speicherort nicht unterstützt - Local Sync Folder - Lokaler Ordner für die Synchronisierung + Virtual files are not supported for Windows partition roots as local folder. Please choose a valid subfolder under drive letter. + Virtuelle Dateien werden für die Wurzel von Windows-Partitionen als lokaler Ordner nicht unterstützt. Bitte wählen Sie einen gültigen Unterordner unter dem Laufwerksbuchstaben. - (%1) - (%1) + Warning: The local folder is not empty. Pick a resolution! + Achtung: Der lokale Ordner ist nicht leer. Bitte wählen Sie eine entsprechende Lösung! + + + OCC::OwncloudConnectionMethodDialog - There isn't enough free space in the local folder! - Nicht genug freier Platz im lokalen Ordner vorhanden! + <html><head/><body><p>Failed to connect to the secure server address <em>%1</em>. How do you wish to proceed?</p></body></html> + <html><head/><body><p>Sichere Verbindung zur Serveradresse <em>%1</em> fehlgeschlagen. Wie wollen Sie fortfahren?</p></body></html> + + + <html><head/><body><p>Failed to connect to the secure server address specified. How do you wish to proceed?</p></body></html> + <html><head/><body><p>Verbindung mit der angegebenen sicheren Serveradresse fehlgeschlagen. Wie möchten Sie fortfahren?</p></body></html> - In Finder's "Locations" sidebar section - In der Finder-Seitenleiste unter "Orte" + Configure client-side TLS certificate + Clientseitiges TLS-Zertifikat konfigurieren. - - - OCC::OwncloudConnectionMethodDialog Connection failed Verbindung fehlgeschlagen - <html><head/><body><p>Failed to connect to the secure server address specified. How do you wish to proceed?</p></body></html> - <html><head/><body><p>Verbindung mit der angegebenen sicheren Serveradresse fehlgeschlagen. Wie möchten Sie fortfahren?</p></body></html> + Retry unencrypted over HTTP (insecure) + Unverschlüsselt über HTTP versuchen (unsicher) Select a different URL Andere URL wählen + + + OCC::ownCloudGui - Retry unencrypted over HTTP (insecure) - Unverschlüsselt über HTTP versuchen (unsicher) + %1 (%2, %3) + %1 (%2, %3) + + + %1: %2 + Example text: "Nextcloud: Syncing 25MB (3 minutes left)" (%1 is the folder name to be synced, %2 a status message for that folder) + %1: %2 - Configure client-side TLS certificate - Clientseitiges TLS-Zertifikat konfigurieren. + Account %1: %2 + Konto %1: %2 - <html><head/><body><p>Failed to connect to the secure server address <em>%1</em>. How do you wish to proceed?</p></body></html> - <html><head/><body><p>Sichere Verbindung zur Serveradresse <em>%1</em> fehlgeschlagen. Wie wollen Sie fortfahren?</p></body></html> + Account synchronization is disabled + Konto-Synchronisierung ist deaktiviert - + + Checking for changes in local "%1" + Nach Änderungen in lokalem "%1" suchen + + + Checking for changes in remote "%1" + Nach Änderungen in entfernten "%1" suchen + + + Disconnected from %1 + Von %1 getrennt + + + Disconnected from accounts: + Verbindungen zu Konten getrennt: + + + Please sign in + Bitte melden Sie sich an + + + Terms of service + Nutzungsbedingungen + + + The server on account %1 runs an unsupported version %2. Using this client with unsupported server versions is untested and potentially dangerous. Proceed at your own risk. + Der Server auf Konto %1 verwendet die nicht unterstützte Version %2. Die Verwendung dieses Clients mit nicht unterstützten Serverversionen ist ungetestet und potenziell gefährlich. Die Verwendung erfolgt auf eigene Gefahr. + + + There are no sync folders configured. + Es wurden keine Synchronisierungsordner konfiguriert. + + + Unsupported Server Version + Nicht unterstütze Serverversion + + + Your account %1 requires you to accept the terms of service of your server. You will be redirected to %2 to acknowledge that you have read it and agrees with it. + Für Ihr Konto %1 müssen Sie die Nutzungsbedingungen Ihres Servers akzeptieren. Sie werden weitergeleitet an %2, um zu bestätigen, dass Sie die Nutzungsbedingungen gelesen haben und damit einverstanden sind. + + + macOS VFS for %1: A problem was encountered. + macOS VFS für %1: Es ist ein Problem aufgetreten. + + + macOS VFS for %1: Last sync was successful. + macOS VFS für %1: Letzte Synchronisierung war erfolgreich. + + + macOS VFS for %1: Sync is running. + macOS VFS für %1: Synchronisierung läuft. + + OCC::OwncloudHttpCredsPage @@ -3036,137 +3125,133 @@ Beachten Sie, dass die Verwendung von Befehlszeilenoptionen für die Protokollie OCC::OwncloudSetupPage - - The link to your %1 web interface when you open it in the browser. - %1 will be replaced with the application name - Der Link zu Ihrer %1 Webseite, wenn Sie diese im Browser öffnen. - &Next > &Weiter > + Could not load certificate. Maybe wrong password? + Das Zertifikat konnte nicht geladen werden. Vielleicht ein falsches Passwort? + + Server address does not seem to be valid Serveradresse scheint nicht gültig zu sein - Could not load certificate. Maybe wrong password? - Das Zertifikat konnte nicht geladen werden. Vielleicht ein falsches Passwort? + The link to your %1 web interface when you open it in the browser. + %1 will be replaced with the application name + Der Link zu Ihrer %1 Webseite, wenn Sie diese im Browser öffnen. - + OCC::OwncloudSetupWizard + <font color="green"><b>File Provider-based account %1 successfully created!</b></font> + <font color="green"><b>Dateianbieter-basiertes Konto %1 erstellt!</b></font> + + + <font color="green"><b>Local sync folder %1 successfully created!</b></font> + <font color="green"><b>Lokaler Sync-Ordner %1 erstellt!</b></font> + + <font color="green">Successfully connected to %1: %2 version %3 (%4)</font><br/><br/> <font color="green">Erfolgreich mit %1 verbunden: %2 Version %3 (%4)</font><br/><br/> - Failed to connect to %1 at %2:<br/>%3 - Die Verbindung zu %1 auf %2 konnte nicht hergestellt werden: <br/>%3 + <p><font color="red">Remote folder creation failed probably because the provided credentials are wrong.</font><br/>Please go back and check your credentials.</p> + <p><font color="red">Die Erstellung des entfernten Ordners ist fehlgeschlagen, vermutlich sind die angegebenen Zugangsdaten falsch.</font><br/>Bitte gehen Sie zurück und überprüfen Sie Ihre Zugangsdaten.</p> - Timeout while trying to connect to %1 at %2. - Zeitüberschreitung beim Verbindungsversuch mit %1 unter %2. + A sync connection from %1 to remote directory %2 was set up. + Eine Synchronisierungsverbindung für Ordner %1 zum entfernten Ordner %2 wurde eingerichtet. Access forbidden by server. To verify that you have proper access, <a href="%1">click here</a> to access the service with your browser. Zugang vom Server nicht erlaubt. <a href="%1">Klicken Sie hier</a> zum Zugriff auf den Dienst mithilfe Ihres Browsers, so dass Sie sicherstellen können, dass Ihr Zugang ordnungsgemäß funktioniert. - Invalid URL - Ungültige URL + Cannot remove and back up the folder because the folder or a file in it is open in another program. Please close the folder or file and hit retry or cancel the setup. + Der Ordner kann nicht entfernt und gesichert werden, da der Ordner oder einer seiner Dateien in einem anderen Programm geöffnet ist. Bitte schließen Sie den Ordner oder die Datei und versuchen Sie es erneut oder beenden Sie die Installation. - Trying to connect to %1 at %2 … - Verbindungsversuch mit %1 unter %2 … + Connection to %1 could not be established. Please check again. + Die Verbindung zu %1 konnte nicht hergestellt werden. Bitte prüfen Sie die Einstellungen erneut. - The authenticated request to the server was redirected to "%1". The URL is bad, the server is misconfigured. - Die Authentifizierungs-Anfrage an den Server wurde weitergeleitet an "%1". Diese Adresse ist ungültig, der Server ist falsch konfiguriert. + Could not create local folder %1 + Der lokale Ordner %1 konnte nicht erstellt werden - There was an invalid response to an authenticated WebDAV request - Ungültige Antwort auf eine WebDAV-Authentifizierungs-Anfrage + Creating local sync folder %1 … + Lokaler Ordner %1 für die Synchronisierung wird erstellt … - Local sync folder %1 already exists, setting it up for sync.<br/><br/> - Lokaler Sync-Ordner %1 existiert bereits, aktiviere Synchronistation.<br/><br/> + Error: %1 + Fehler: %1 - Creating local sync folder %1 … - Lokaler Ordner %1 für die Synchronisierung wird erstellt … + Failed to connect to %1 at %2:<br/>%3 + Die Verbindung zu %1 auf %2 konnte nicht hergestellt werden: <br/>%3 - OK - OK + Folder rename failed + Ordner umbenennen fehlgeschlagen. - failed. - fehlgeschlagen. + Invalid URL + Ungültige URL - Could not create local folder %1 - Der lokale Ordner %1 konnte nicht erstellt werden + Local sync folder %1 already exists, setting it up for sync.<br/><br/> + Lokaler Sync-Ordner %1 existiert bereits, aktiviere Synchronistation.<br/><br/> No remote folder specified! Kein entfernter Ordner angegeben! - Error: %1 - Fehler: %1 - - - creating folder on Nextcloud: %1 - Erstelle Ordner auf Nextcloud: %1 + OK + OK Remote folder %1 created successfully. Entfernter Ordner %1 erstellt. - The remote folder %1 already exists. Connecting it for syncing. - Der Ordner %1 ist auf dem Server bereits vorhanden. Verbinde zur Synchronisierung. + Remote folder %1 creation failed with error <tt>%2</tt>. + Entfernter Ordner %1 konnte mit folgendem Fehler nicht erstellt werden: <tt>%2</tt>. - The folder creation resulted in HTTP error code %1 - Das Erstellen des Ordners erzeugte den HTTP-Fehler-Code %1 + Successfully connected to %1! + Erfolgreich mit %1 verbunden! - The remote folder creation failed because the provided credentials are wrong!<br/>Please go back and check your credentials.</p> - Die Erstellung des entfernten Ordners ist fehlgeschlagen, weil die angegebenen Zugangsdaten falsch sind. <br/>Bitte gehen Sie zurück und überprüfen Sie die Zugangsdaten.</p> + The authenticated request to the server was redirected to "%1". The URL is bad, the server is misconfigured. + Die Authentifizierungs-Anfrage an den Server wurde weitergeleitet an "%1". Diese Adresse ist ungültig, der Server ist falsch konfiguriert. - <p><font color="red">Remote folder creation failed probably because the provided credentials are wrong.</font><br/>Please go back and check your credentials.</p> - <p><font color="red">Die Erstellung des entfernten Ordners ist fehlgeschlagen, vermutlich sind die angegebenen Zugangsdaten falsch.</font><br/>Bitte gehen Sie zurück und überprüfen Sie Ihre Zugangsdaten.</p> - - - Remote folder %1 creation failed with error <tt>%2</tt>. - Entfernter Ordner %1 konnte mit folgendem Fehler nicht erstellt werden: <tt>%2</tt>. - - - A sync connection from %1 to remote directory %2 was set up. - Eine Synchronisierungsverbindung für Ordner %1 zum entfernten Ordner %2 wurde eingerichtet. + The folder creation resulted in HTTP error code %1 + Das Erstellen des Ordners erzeugte den HTTP-Fehler-Code %1 - Successfully connected to %1! - Erfolgreich mit %1 verbunden! + The remote folder %1 already exists. Connecting it for syncing. + Der Ordner %1 ist auf dem Server bereits vorhanden. Verbinde zur Synchronisierung. - Connection to %1 could not be established. Please check again. - Die Verbindung zu %1 konnte nicht hergestellt werden. Bitte prüfen Sie die Einstellungen erneut. + The remote folder creation failed because the provided credentials are wrong!<br/>Please go back and check your credentials.</p> + Die Erstellung des entfernten Ordners ist fehlgeschlagen, weil die angegebenen Zugangsdaten falsch sind. <br/>Bitte gehen Sie zurück und überprüfen Sie die Zugangsdaten.</p> - Folder rename failed - Ordner umbenennen fehlgeschlagen. + There was an invalid response to an authenticated WebDAV request + Ungültige Antwort auf eine WebDAV-Authentifizierungs-Anfrage - Cannot remove and back up the folder because the folder or a file in it is open in another program. Please close the folder or file and hit retry or cancel the setup. - Der Ordner kann nicht entfernt und gesichert werden, da der Ordner oder einer seiner Dateien in einem anderen Programm geöffnet ist. Bitte schließen Sie den Ordner oder die Datei und versuchen Sie es erneut oder beenden Sie die Installation. + Timeout while trying to connect to %1 at %2. + Zeitüberschreitung beim Verbindungsversuch mit %1 unter %2. - <font color="green"><b>File Provider-based account %1 successfully created!</b></font> - <font color="green"><b>Dateianbieter-basiertes Konto %1 erstellt!</b></font> + Trying to connect to %1 at %2 … + Verbindungsversuch mit %1 unter %2 … Virtual files enabled @@ -3177,20 +3262,20 @@ Beachten Sie, dass die Verwendung von Befehlszeilenoptionen für die Protokollie Ihr Konto wird jetzt mithilfe virtueller Dateien synchronisiert. Das bedeutet, dass alle Ihre Dateien standardmäßig online gespeichert sind und erst dann heruntergeladen werden, wenn Sie sie öffnen. Sie finden Ihre Dateien unter dem Abschnitt <b>Speicherorte</b> in der Finder-Seitenleiste. - <font color="green"><b>Local sync folder %1 successfully created!</b></font> - <font color="green"><b>Lokaler Sync-Ordner %1 erstellt!</b></font> + creating folder on Nextcloud: %1 + Erstelle Ordner auf Nextcloud: %1 - + + failed. + fehlgeschlagen. + + OCC::OwncloudWizard Add %1 account %1 Konto hinzufügen - - Skip folders configuration - Ordner-Konfiguration überspringen - Cancel Abbrechen @@ -3200,6 +3285,18 @@ Beachten Sie, dass die Verwendung von Befehlszeilenoptionen für die Protokollie Experimentelle Funktion aktivieren? + Enable experimental placeholder mode + Experimentellen Platzhaltermodus aktivieren + + + Skip folders configuration + Ordner-Konfiguration überspringen + + + Stay safe + Bleiben Sie sicher + + When the "virtual files" mode is enabled no files will be downloaded initially. Instead, a tiny "%1" file will be created for each file that exists on the server. The contents can be downloaded by running these files or by using their context menu. The virtual files mode is mutually exclusive with selective sync. Currently unselected folders will be translated to online-only folders and your selective sync settings will be reset. @@ -3215,15 +3312,7 @@ Wenn Sie in diesen Modus wechseln, wird eine aktuell laufende Synchronisierung a Dies ist ein neuer, experimenteller Modus. Wenn Sie sich entscheiden, ihn zu verwenden, melden Sie bitte alle auftretenden Probleme. - - Enable experimental placeholder mode - Experimentellen Platzhaltermodus aktivieren - - - Stay safe - Bleiben Sie sicher - - + OCC::PasswordInputDialog @@ -3245,169 +3334,169 @@ Dies ist ein neuer, experimenteller Modus. Wenn Sie sich entscheiden, ihn zu ver OCC::ProcessDirectoryJob - Symbolic links are not supported in syncing. - Symbolische Verknüpfungen werden bei der Synchronisierung nicht unterstützt. - - - File is listed on the ignore list. - Die Datei ist in der Ignorierliste aufgeführt. + %1 name containing the character "%2" is not supported on this file system. + folder or file impossible to sync due to an invalid name, placeholders will be file or folder and the invalid character + %1 Namen, die das Zeichen "%2" enthalten, werden von diesem Dateisystem nicht unterstützt. - File names ending with a period are not supported on this file system. - Dateinamen, die mit einem Punkt enden, werden von diesem Dateisystem nicht unterstützt. + %1 name contains at least one invalid character + %1 Der Name enthält mindestens ein ungültiges Zeichen - Filename contains trailing spaces. - Dateiname enthält Leerzeichen am Ende. + %1 name is a reserved name on this file system. + %1 Der Name ist in diesem Dateisystem ein reservierter Name. Cannot be renamed or uploaded. Kann nicht umbenannt oder hochgeladen werden. - Folder - name of folder entity to use when warning about invalid name - Ordner + Cannot modify encrypted item because the selected certificate is not valid. + Das verschlüsselte Element kann nicht geändert werden, da das ausgewählte Zertifikat nicht gültig ist. - File - name of folder entity to use when warning about invalid name - Datei + Cannot sync due to invalid modification time + Synchronisierung wegen ungültiger Änderungszeit nicht möglich - %1 name containing the character "%2" is not supported on this file system. - folder or file impossible to sync due to an invalid name, placeholders will be file or folder and the invalid character - %1 Namen, die das Zeichen "%2" enthalten, werden von diesem Dateisystem nicht unterstützt. + Case Clash Conflict: Server file downloaded and renamed to avoid clash. + Problem der Groß- und Kleinschreibung: Serverdatei heruntergeladen und umbenannt, um Konflikte zu vermeiden. - Filename contains leading spaces. - Dateiname enthält Leerzeichen am Anfang. + Conflict: Server version downloaded, local copy renamed and not uploaded. + Konflikt: Serverversion heruntergeladen, lokale Kopie umbenannt und nicht hochgeladen. - %1 name contains at least one invalid character - %1 Der Name enthält mindestens ein ungültiges Zeichen + Could not upload file, because it is open in "%1". + Datei konnte nicht hochgeladen werden, da sie in "%1" geöffnet ist. - %1 name is a reserved name on this file system. - %1 Der Name ist in diesem Dateisystem ein reservierter Name. + Error while deleting file record %1 from the database + Fehler beim Löschen des Dateidatensatzes %1 aus der Datenbank - Filename contains leading and trailing spaces. - Dateiname enthält Leerzeichen am Anfang und am Ende. + Error while reading the database + Fehler beim Lesen der Datenbank - Filename is too long. - Der Dateiname ist zu lang. + File + name of folder entity to use when warning about invalid name + Datei - File/Folder is ignored because it's hidden. - Datei/Ordner wird ignoriert, weil sie unsichtbar ist. + File has extension reserved for virtual files. + Die Endung der Datei ist für virtuelle Dateien reserviert. - Stat failed. - Stat fehlgeschlagen. + File is listed on the ignore list. + Die Datei ist in der Ignorierliste aufgeführt. - Conflict: Server version downloaded, local copy renamed and not uploaded. - Konflikt: Serverversion heruntergeladen, lokale Kopie umbenannt und nicht hochgeladen. + File names ending with a period are not supported on this file system. + Dateinamen, die mit einem Punkt enden, werden von diesem Dateisystem nicht unterstützt. - Case Clash Conflict: Server file downloaded and renamed to avoid clash. - Problem der Groß- und Kleinschreibung: Serverdatei heruntergeladen und umbenannt, um Konflikte zu vermeiden. + File/Folder is ignored because it's hidden. + Datei/Ordner wird ignoriert, weil sie unsichtbar ist. - The filename cannot be encoded on your file system. - Der Dateiname kann auf Ihrem Dateisystem nicht entschlüsselt werden. + Filename contains leading and trailing spaces. + Dateiname enthält Leerzeichen am Anfang und am Ende. - The filename is blacklisted on the server. - Der Dateiname steht auf dem Server auf einer schwarzen Liste. + Filename contains leading spaces. + Dateiname enthält Leerzeichen am Anfang. - Reason: the entire filename is forbidden. - Grund: Der gesamte Dateiname ist unzulässig. + Filename contains trailing spaces. + Dateiname enthält Leerzeichen am Ende. - Reason: the filename has a forbidden base name (filename start). - Grund: Der Dateiname hat einen unzulässigen Basisnamen (Beginn des Dateinamens). + Filename is too long. + Der Dateiname ist zu lang. - Reason: the file has a forbidden extension (.%1). - Grund: Die Datei hat eine unzulässige Erweiterung (.%1). + Folder + name of folder entity to use when warning about invalid name + Ordner - Reason: the filename contains a forbidden character (%1). - Grund: Der Dateiname enthält ein unzulässiges Zeichen (%1). + Ignored because of the "choose what to sync" blacklist + Ignoriert wegen der "Choose what to sync"-Blacklist - File has extension reserved for virtual files. - Die Endung der Datei ist für virtuelle Dateien reserviert. + Moved to invalid target, restoring + Auf ungültiges Ziel verschoben, wiederherstellen. - size - Größe + Not allowed because you don't have permission to add files in that folder + Nicht erlaubt, da Sie keine Berechtigung zum Hinzufügen von Dateien in diesen Ordner haben. - permission - Berechtigung + Not allowed because you don't have permission to add subfolders to that folder + Nicht erlaubt, da Sie nicht die Berechtigung haben, Unterordner zu diesem Ordner hinzuzufügen. - file id - Datei-ID + Not allowed to remove, restoring + Entfernen nicht erlaubt, wiederherstellen. - Server reported no %1 - Server meldet keine %1 + Not allowed to upload this file because it is read-only on the server, restoring + Das Hochladen dieser Datei ist nicht erlaubt, da die Datei auf dem Server schreibgeschützt ist. Wiederherstellen. - Cannot sync due to invalid modification time - Synchronisierung wegen ungültiger Änderungszeit nicht möglich + Reason: the entire filename is forbidden. + Grund: Der gesamte Dateiname ist unzulässig. - Could not upload file, because it is open in "%1". - Datei konnte nicht hochgeladen werden, da sie in "%1" geöffnet ist. + Reason: the file has a forbidden extension (.%1). + Grund: Die Datei hat eine unzulässige Erweiterung (.%1). - Error while deleting file record %1 from the database - Fehler beim Löschen des Dateidatensatzes %1 aus der Datenbank + Reason: the filename contains a forbidden character (%1). + Grund: Der Dateiname enthält ein unzulässiges Zeichen (%1). - Moved to invalid target, restoring - Auf ungültiges Ziel verschoben, wiederherstellen. + Reason: the filename has a forbidden base name (filename start). + Grund: Der Dateiname hat einen unzulässigen Basisnamen (Beginn des Dateinamens). - Cannot modify encrypted item because the selected certificate is not valid. - Das verschlüsselte Element kann nicht geändert werden, da das ausgewählte Zertifikat nicht gültig ist. + Server replied with an error while reading directory "%1" : %2 + Der Server hat während des Lesens des Verzeichnisses "%1" mit einem Fehler geantwortet: %2 + + + Server reported no %1 + Server meldet keine %1 - Ignored because of the "choose what to sync" blacklist - Ignoriert wegen der "Choose what to sync"-Blacklist + Stat failed. + Stat fehlgeschlagen. - Not allowed because you don't have permission to add subfolders to that folder - Nicht erlaubt, da Sie nicht die Berechtigung haben, Unterordner zu diesem Ordner hinzuzufügen. + Symbolic links are not supported in syncing. + Symbolische Verknüpfungen werden bei der Synchronisierung nicht unterstützt. - Not allowed because you don't have permission to add files in that folder - Nicht erlaubt, da Sie keine Berechtigung zum Hinzufügen von Dateien in diesen Ordner haben. + The filename cannot be encoded on your file system. + Der Dateiname kann auf Ihrem Dateisystem nicht entschlüsselt werden. - Not allowed to upload this file because it is read-only on the server, restoring - Das Hochladen dieser Datei ist nicht erlaubt, da die Datei auf dem Server schreibgeschützt ist. Wiederherstellen. + The filename is blacklisted on the server. + Der Dateiname steht auf dem Server auf einer schwarzen Liste. - Not allowed to remove, restoring - Entfernen nicht erlaubt, wiederherstellen. + file id + Datei-ID - Error while reading the database - Fehler beim Lesen der Datenbank + permission + Berechtigung - Server replied with an error while reading directory "%1" : %2 - Der Server hat während des Lesens des Verzeichnisses "%1" mit einem Fehler geantwortet: %2 + size + Größe - + OCC::PropagateDirectory @@ -3418,14 +3507,6 @@ Dies ist ein neuer, experimenteller Modus. Wenn Sie sich entscheiden, ihn zu ver Error updating metadata due to invalid modification time Fehler beim Aktualisieren der Metadaten aufgrund einer ungültigen Änderungszeit - - The folder %1 cannot be made read-only: %2 - Der Ordner %1 kann nicht schreibgeschützt werden: %2 - - - unknown exception - Unbekannter Ausnahmefehler - Error updating metadata: %1 Fehler beim Aktualisieren der Metadaten: %1 @@ -3434,66 +3515,74 @@ Dies ist ein neuer, experimenteller Modus. Wenn Sie sich entscheiden, ihn zu ver File is currently in use Datei ist aktuell in Benutzung - + + The folder %1 cannot be made read-only: %2 + Der Ordner %1 kann nicht schreibgeschützt werden: %2 + + + unknown exception + Unbekannter Ausnahmefehler + + OCC::PropagateDownloadFile - Could not get file %1 from local DB - Datei %1 konnte nicht aus der lokalen Datenbank abgerufen werden + Could not delete file record %1 from local DB + Der Dateidatensatz %1 konnte nicht aus der lokalen Datenbank gelöscht werden - File %1 cannot be downloaded because encryption information is missing. - Die Datei %1 kann nicht heruntergeladen werden, da die Verschlüsselungsinformationen fehlen. + Could not get file %1 from local DB + Datei %1 konnte nicht aus der lokalen Datenbank abgerufen werden - Could not delete file record %1 from local DB - Der Dateidatensatz %1 konnte nicht aus der lokalen Datenbank gelöscht werden + Error updating metadata: %1 + Fehler beim Aktualisieren der Metadaten: %1 File %1 can not be downloaded because of a local file name clash! Die Datei %1 kann aufgrund eines Konfliktes mit dem lokalen Dateinamen nicht herunter geladen werden! - The download would reduce free local disk space below the limit - Das Herunterladen würde den lokalen freien Speicherplatz unter die Grenze reduzieren + File %1 cannot be downloaded because encryption information is missing. + Die Datei %1 kann nicht heruntergeladen werden, da die Verschlüsselungsinformationen fehlen. - Free space on disk is less than %1 - Der freie Speicher auf der Festplatte ist weniger als %1 + File %1 downloaded but it resulted in a local file name clash! + Datei %1 heruntergeladen, aber dies führte zu einem lokalen Dateinamenskonflikt! - File was deleted from server - Die Datei wurde vom Server gelöscht + File %1 has invalid modified time reported by server. Do not save it. + Datei %1 hat eine ungültige Änderungszeit, die vom Server gemeldet wurde. Speichern Sie sie nicht. - The file could not be downloaded completely. - Die Datei konnte nicht vollständig heruntergeladen werden. + File has changed since discovery + Datei ist seit der Entdeckung geändert worden - - The downloaded file is empty, but the server said it should have been %1. - Die heruntergeladene Datei ist leer, obwohl der Server %1 als Größe übermittelt hat. + + File was deleted from server + Die Datei wurde vom Server gelöscht - File %1 has invalid modified time reported by server. Do not save it. - Datei %1 hat eine ungültige Änderungszeit, die vom Server gemeldet wurde. Speichern Sie sie nicht. + Free space on disk is less than %1 + Der freie Speicher auf der Festplatte ist weniger als %1 - File %1 downloaded but it resulted in a local file name clash! - Datei %1 heruntergeladen, aber dies führte zu einem lokalen Dateinamenskonflikt! + The download would reduce free local disk space below the limit + Das Herunterladen würde den lokalen freien Speicherplatz unter die Grenze reduzieren - Error updating metadata: %1 - Fehler beim Aktualisieren der Metadaten: %1 + The downloaded file is empty, but the server said it should have been %1. + Die heruntergeladene Datei ist leer, obwohl der Server %1 als Größe übermittelt hat. The file %1 is currently in use Die Datei %1 ist aktuell in Benutzung - File has changed since discovery - Datei ist seit der Entdeckung geändert worden + The file could not be downloaded completely. + Die Datei konnte nicht vollständig heruntergeladen werden. - + OCC::PropagateItemJob @@ -3508,37 +3597,41 @@ Dies ist ein neuer, experimenteller Modus. Wenn Sie sich entscheiden, ihn zu ver OCC::PropagateLocalMkdir - could not delete file %1, error: %2 - Konnte Datei %1 nicht löschen. Fehler: %2 + Could not create folder %1 + Ordner %1 konnte nicht erstellt werden + + + Error updating metadata: %1 + Fehler beim Aktualisieren der Metadaten: %1 Folder %1 cannot be created because of a local file or folder name clash! Ordner %1 kann aufgrund einer lokalen Datei- oder Ordnernamenskollision nicht erstellt werden! - Could not create folder %1 - Ordner %1 konnte nicht erstellt werden + The file %1 is currently in use + Die Datei %1 ist aktuell in Benutzung - + The folder %1 cannot be made read-only: %2 Der Ordner %1 kann nicht schreibgeschützt werden: %2 - unknown exception - Unbekannter Ausnahmefehler - - - Error updating metadata: %1 - Fehler beim Aktualisieren der Metadaten: %1 + could not delete file %1, error: %2 + Konnte Datei %1 nicht löschen. Fehler: %2 - The file %1 is currently in use - Die Datei %1 ist aktuell in Benutzung + unknown exception + Unbekannter Ausnahmefehler - + OCC::PropagateLocalRemove + Could not delete file record %1 from local DB + Der Dateidatensatz %1 konnte nicht aus der lokalen Datenbank gelöscht werden + + Could not remove %1 because of a local file name clash %1 kann aufgrund eines Konfliktes mit dem lokalen Dateinamen nicht entfernt werden @@ -3546,22 +3639,14 @@ Dies ist ein neuer, experimenteller Modus. Wenn Sie sich entscheiden, ihn zu ver Temporary error when removing local item removed from server. Vorübergehender Fehler beim Entfernen eines vom Server entfernten lokalen Objekts. - - Could not delete file record %1 from local DB - Der Dateidatensatz %1 konnte nicht aus der lokalen Datenbank gelöscht werden - - + OCC::PropagateLocalRename - Folder %1 cannot be renamed because of a local file or folder name clash! - Ordner %1 kann aufgrund einer lokalen Datei- oder Ordnernamenskollision nicht umbenannt werden! - - - File %1 downloaded but it resulted in a local file name clash! - Datei %1 heruntergeladen, aber dies führte zu einem lokalen Dateinamenskonflikt! + Could not delete file record %1 from local DB + Der Dateidatensatz %1 konnte nicht aus der lokalen Datenbank gelöscht werden - + Could not get file %1 from local DB Datei %1 konnte nicht aus der lokalen Datenbank abgerufen werden @@ -3573,10 +3658,6 @@ Dies ist ein neuer, experimenteller Modus. Wenn Sie sich entscheiden, ihn zu ver Error updating metadata: %1 Fehler beim Aktualisieren der Metadaten: %1 - - The file %1 is currently in use - Die Datei %1 ist aktuell in Benutzung - Failed to propagate directory rename in hierarchy Die Umbenennung des Verzeichnisses in der Hierarchie konnte nicht weitergegeben werden @@ -3586,21 +3667,29 @@ Dies ist ein neuer, experimenteller Modus. Wenn Sie sich entscheiden, ihn zu ver Datei konnte nicht umbenannt werden - Could not delete file record %1 from local DB - Der Dateidatensatz %1 konnte nicht aus der lokalen Datenbank gelöscht werden + File %1 downloaded but it resulted in a local file name clash! + Datei %1 heruntergeladen, aber dies führte zu einem lokalen Dateinamenskonflikt! - - - OCC::PropagateRemoteDelete - Wrong HTTP code returned by server. Expected 204, but received "%1 %2". - Es wurde ein falscher HTTP-Status-Code vom Server gesendet. Erwartet wurde 204, aber gesendet wurde "%1 %2". + Folder %1 cannot be renamed because of a local file or folder name clash! + Ordner %1 kann aufgrund einer lokalen Datei- oder Ordnernamenskollision nicht umbenannt werden! + + The file %1 is currently in use + Die Datei %1 ist aktuell in Benutzung + + + + OCC::PropagateRemoteDelete Could not delete file record %1 from local DB Der Dateidatensatz %1 konnte nicht aus der lokalen Datenbank gelöscht werden - + + Wrong HTTP code returned by server. Expected 204, but received "%1 %2". + Es wurde ein falscher HTTP-Status-Code vom Server gesendet. Erwartet wurde 204, aber gesendet wurde "%1 %2". + + OCC::PropagateRemoteDeleteEncryptedRootFolder @@ -3611,33 +3700,49 @@ Dies ist ein neuer, experimenteller Modus. Wenn Sie sich entscheiden, ihn zu ver OCC::PropagateRemoteMkdir - Wrong HTTP code returned by server. Expected 201, but received "%1 %2". - Es wurde ein falscher HTTP-Status-Code vom Server gesendet. Erwartet wurde 201, aber gesendet wurde "%1 %2". + Error writing metadata to the database: %1 + Fehler beim Schreiben der Metadaten in die Datenbank: %1 Failed to encrypt a folder %1 Ordner konnte nicht verschlüsselt werden %1 - - Error writing metadata to the database: %1 - Fehler beim Schreiben der Metadaten in die Datenbank: %1 - The file %1 is currently in use Die Datei %1 ist aktuell in Benutzung - + + Wrong HTTP code returned by server. Expected 201, but received "%1 %2". + Es wurde ein falscher HTTP-Status-Code vom Server gesendet. Erwartet wurde 201, aber gesendet wurde "%1 %2". + + OCC::PropagateRemoteMove + + Could not delete file record %1 from local DB + Der Dateidatensatz %1 konnte nicht aus der lokalen Datenbank gelöscht werden + + + Could not get file %1 from local DB + Datei %1 konnte nicht aus der lokalen Datenbank abgerufen werden + Could not rename %1 to %2, error: %3 Konnte %1 nicht nach %2 umbenennen. Fehler: %3 + + Error setting pin state + Fehler beim Setzen des PIN-Status + Error updating metadata: %1 Fehler beim Aktualisieren der Metadaten: %1 + Error writing metadata to the database + Fehler beim Schreiben der Metadaten in die Datenbank + + The file %1 is currently in use Die Datei %1 ist aktuell in Benutzung @@ -3645,25 +3750,21 @@ Dies ist ein neuer, experimenteller Modus. Wenn Sie sich entscheiden, ihn zu ver Wrong HTTP code returned by server. Expected 201, but received "%1 %2". Es wurde ein falscher HTTP-Status-Code vom Server gesendet. Erwartet wurde 201, aber gesendet wurde "%1 %2". + + + OCC::PropagateUploadFileCommon - Could not get file %1 from local DB - Datei %1 konnte nicht aus der lokalen Datenbank abgerufen werden - - - Could not delete file record %1 from local DB - Der Dateidatensatz %1 konnte nicht aus der lokalen Datenbank gelöscht werden + Error updating metadata: %1 + Fehler beim Aktualisieren der Metadaten: %1 - Error setting pin state - Fehler beim Setzen des PIN-Status + Failed to unlock encrypted folder. + Verschlüsselter Ordner konnte nicht entsperrt werden. - Error writing metadata to the database - Fehler beim Schreiben der Metadaten in die Datenbank + Failed to upload encrypted file. + Verschlüsselte Datei konnte nicht hochgeladen werden. - - - OCC::PropagateUploadFileCommon File %1 cannot be uploaded because another file with the same name, differing only in case, exists Die Datei %1 kann nicht hochgeladen werden, da eine andere Datei mit dem selben Namen, nur unterschiedlicher Groß-/Kleinschreibung, existiert @@ -3673,71 +3774,63 @@ Dies ist ein neuer, experimenteller Modus. Wenn Sie sich entscheiden, ihn zu ver Die Datei %1 hat eine ungültige Änderungszeit. Nicht auf den Server hochladen. - Local file changed during syncing. It will be resumed. - Lokale Datei hat sich während der Synchronisierung geändert. Die Synchronisierung wird wiederaufgenommen. + File Removed (start upload) %1 + Datei entfernt (starte Hochladen) %1 - + Local file changed during sync. Eine lokale Datei wurde während der Synchronisierung geändert. - Failed to unlock encrypted folder. - Verschlüsselter Ordner konnte nicht entsperrt werden. - - - Unable to upload an item with invalid characters - Ein Element mit ungültigen Zeichen kann nicht hochgeladen werden - - - Error updating metadata: %1 - Fehler beim Aktualisieren der Metadaten: %1 + Local file changed during syncing. It will be resumed. + Lokale Datei hat sich während der Synchronisierung geändert. Die Synchronisierung wird wiederaufgenommen. The file %1 is currently in use Die Datei %1 ist aktuell in Benutzung - Upload of %1 exceeds the quota for the folder - Das Hochladen von %1 überschreitet das Speicherkontingent des Ordners - - - Failed to upload encrypted file. - Verschlüsselte Datei konnte nicht hochgeladen werden. + Unable to upload an item with invalid characters + Ein Element mit ungültigen Zeichen kann nicht hochgeladen werden - File Removed (start upload) %1 - Datei entfernt (starte Hochladen) %1 + Upload of %1 exceeds the quota for the folder + Das Hochladen von %1 überschreitet das Speicherkontingent des Ordners - + OCC::PropagateUploadFileNG - - The local file was removed during sync. - Die lokale Datei wurde während der Synchronisierung entfernt. - Local file changed during sync. Eine lokale Datei wurde während der Synchronisierung geändert. - Poll URL missing - Poll-URL fehlt + Missing ETag from server + Fehlender ETag vom Server + + + Missing File ID from server + Fehlende Datei-ID vom Server - Unexpected return code from server (%1) - Unerwarteter Rückgabe-Code Antwort vom Server (%1) + Poll URL missing + Poll-URL fehlt - Missing File ID from server - Fehlende Datei-ID vom Server + The local file was removed during sync. + Die lokale Datei wurde während der Synchronisierung entfernt. - Missing ETag from server - Fehlender ETag vom Server + Unexpected return code from server (%1) + Unerwarteter Rückgabe-Code Antwort vom Server (%1) - + OCC::PropagateUploadFileV1 + + Local file changed during sync. + Eine lokale Datei wurde während der Synchronisierung geändert. + Poll URL missing Poll-URL fehlt @@ -3746,10 +3839,6 @@ Dies ist ein neuer, experimenteller Modus. Wenn Sie sich entscheiden, ihn zu ver The local file was removed during sync. Die lokale Datei wurde während der Synchronisierung entfernt. - - Local file changed during sync. - Eine lokale Datei wurde während der Synchronisierung geändert. - The server did not acknowledge the last chunk. (No e-tag was present) Der Server hat den letzten Block nicht bestätigt. (Kein E-Tag vorhanden) @@ -3758,13 +3847,13 @@ Dies ist ein neuer, experimenteller Modus. Wenn Sie sich entscheiden, ihn zu ver OCC::ProxyAuthDialog + Password: + Passwort: + + Proxy authentication required Proxy-Authentifzierung erforderlich - - Username: - Benutzername: - Proxy: Proxy: @@ -3774,10 +3863,10 @@ Dies ist ein neuer, experimenteller Modus. Wenn Sie sich entscheiden, ihn zu ver Der Proxy-Server benötigt Benutzername und Passwort - Password: - Passwort: + Username: + Benutzername: - + OCC::SelectiveSyncDialog @@ -3788,30 +3877,30 @@ Dies ist ein neuer, experimenteller Modus. Wenn Sie sich entscheiden, ihn zu ver OCC::SelectiveSyncWidget - Loading … - Lade … + An error occurred while loading the list of sub folders. + Es ist ein Fehler während des Ladens der Liste der Unterordner aufgetreten. - + Deselect remote folders you do not wish to synchronize. Entfernte Ordner abwählen, die nicht synchronisiert werden sollen. - Name - Name + Loading … + Lade … - Size - Größe + Name + Name No subfolders currently on the server. Aktuell befinden sich keine Unterordner auf dem Server. - An error occurred while loading the list of sub folders. - Es ist ein Fehler während des Ladens der Liste der Unterordner aufgetreten. + Size + Größe - + OCC::ServerNotificationHandler @@ -3821,16 +3910,16 @@ Dies ist ein neuer, experimenteller Modus. Wenn Sie sich entscheiden, ihn zu ver OCC::SettingsDialog - - Settings - Einstellungen - %1 Settings This name refers to the application name e.g Nextcloud %1-Einstellungen + Account + Konto + + General Allgemein @@ -3839,10 +3928,30 @@ Dies ist ein neuer, experimenteller Modus. Wenn Sie sich entscheiden, ihn zu ver Netzwerk - Account - Konto - - + Settings + Einstellungen + + + + OCC::ShareeModel + + %1 (%2) + sharee (shareWithAdditionalInfo) + %1 (%2) + + + Global search results + Globale Suchergebnisse + + + No results found + Keine Ergebnisse gefunden + + + Search globally + Global suchen + + OCC::ShareManager @@ -3861,272 +3970,246 @@ Dies ist ein neuer, experimenteller Modus. Wenn Sie sich entscheiden, ihn zu ver 1 Tag - Today - Heute - - - Secure file drop link - Sicherer Link zur Dateiablage + Could not find local folder for %1 + Lokaler Ordner für %1 nicht gefunden - - Share link - Freigabe-Link + + Internal link + Interner Link Link share Link teilen - - Internal link - Interner Link - Secure file drop Sichere Dateiablage - Could not find local folder for %1 - Lokaler Ordner für %1 nicht gefunden - - - - OCC::ShareeModel - - Search globally - Global suchen - - - No results found - Keine Ergebnisse gefunden + Secure file drop link + Sicherer Link zur Dateiablage - Global search results - Globale Suchergebnisse + Share link + Freigabe-Link - %1 (%2) - sharee (shareWithAdditionalInfo) - %1 (%2) + Today + Heute - + OCC::SocketApi + + Activity + Aktivität + Context menu share Kontextmenü Freigabe - I shared something with you - Ich habe etwas mit Ihnen geteilt + Copy internal link + Internen Link kopieren - Share options - Freigabeoptionen + Copy private link to clipboard + Privater Link in die Zwischenablage kopiert - Send private link by email … - Privaten Link als E-Mail verschicken … + Could not encrypt the following folder: "%1". + +Server replied with error: %2 + Der folgende Ordner konnte nicht verschlüsselt werden: "%1". + +Server antwortete mit Fehler: %2 - Copy private link to clipboard - Privater Link in die Zwischenablage kopiert + Delete + Löschen - Failed to encrypt folder at "%1" - Ordner unter "%1" konnte nicht verschlüsselt werden + Delete local changes + Lokale Änderungen löschen - The account %1 does not have end-to-end encryption configured. Please configure this in your account settings to enable folder encryption. - Für das Konto %1 ist keine Ende-zu-Ende-Verschlüsselung konfiguriert. Bitte konfigurieren Sie diese in Ihren Kontoeinstellungen, um die Ordnerverschlüsselung zu aktivieren. + Encrypt + Verschlüsseln + + + Expires in %1 minutes + remaining time before lock expires + + Läuft ab in %1 Minute + Läuft ab in %1 Minuten + Failed to encrypt folder Ordner konnte nicht verschlüsselt werden - Could not encrypt the following folder: "%1". - -Server replied with error: %2 - Der folgende Ordner konnte nicht verschlüsselt werden: "%1". - -Server antwortete mit Fehler: %2 + Failed to encrypt folder at "%1" + Ordner unter "%1" konnte nicht verschlüsselt werden Folder encrypted successfully Ordner verschlüsselt - The following folder was encrypted successfully: "%1" - Der folgende Ordner wurde verschlüsselt: "%1" - - - Select new location … - Neuen Ort auswählen … - - - Activity - Aktivität + I shared something with you + Ich habe etwas mit Ihnen geteilt Leave this share Freigabe verlassen - Resharing this file is not allowed - Weiterteilen dieser Datei ist nicht erlaubt + Lock file + Datei sperren - Resharing this folder is not allowed - Weiterteilen dieses Ordners ist nicht erlaubt + Locked by %1 + Gesperrt von %1 - Encrypt - Verschlüsseln + Move and rename … + Verschieben und umbenennen … - Lock file - Datei sperren + Move and upload … + Verschieben und hochladen … - Unlock file - Datei entsperren + Move, rename and upload … + Verschieben, umbenennen und hochladen … - Locked by %1 - Gesperrt von %1 + Open in browser + Im Browser öffnen - - Expires in %1 minutes - remaining time before lock expires - - Läuft ab in %1 Minute - Läuft ab in %1 Minuten - + + Resharing this file is not allowed + Weiterteilen dieser Datei ist nicht erlaubt - Resolve conflict … - Konflikt lösen… + Resharing this folder is not allowed + Weiterteilen dieses Ordners ist nicht erlaubt - Move and rename … - Verschieben und umbenennen … + Resolve conflict … + Konflikt lösen… - Move, rename and upload … - Verschieben, umbenennen und hochladen … + Select new location … + Neuen Ort auswählen … - Delete local changes - Lokale Änderungen löschen + Send private link by email … + Privaten Link als E-Mail verschicken … - Move and upload … - Verschieben und hochladen … + Share options + Freigabeoptionen - Delete - Löschen + The account %1 does not have end-to-end encryption configured. Please configure this in your account settings to enable folder encryption. + Für das Konto %1 ist keine Ende-zu-Ende-Verschlüsselung konfiguriert. Bitte konfigurieren Sie diese in Ihren Kontoeinstellungen, um die Ordnerverschlüsselung zu aktivieren. - Copy internal link - Internen Link kopieren + The following folder was encrypted successfully: "%1" + Der folgende Ordner wurde verschlüsselt: "%1" - Open in browser - Im Browser öffnen + Unlock file + Datei entsperren - + OCC::SslButton + + %1 + %1 + + + %1 (self-signed) + %1 (selbst signiert) + <h3>Certificate Details</h3> <h3>Zertifikatdetails</h3> - Common Name (CN): - Gemeinsamer Name (CN): + <h3>Fingerprints</h3> + <h3>Fingerabdrücke</h3> - Subject Alternative Names: - Subject Alternative Names: + <h3>Issuer</h3> + <h3>Aussteller</h3> - Organization (O): - Organisation (O): + <p><b>Note:</b> This certificate was manually approved</p> + <p><b>Hinweis:</b> Dieses Zertifikat wurde manuell bestätigt</p> - Organizational Unit (OU): - Organisationseinheit (OU): + Certificate information: + Zertifikatsinformation: - State/Province: - Staat/Provinz: + Common Name (CN): + Gemeinsamer Name (CN): Country: Land: - Serial: - Seriennummer: + Expires on: + Ablaufdatum: - <h3>Issuer</h3> - <h3>Aussteller</h3> + Issued on: + Ausgestellt am: Issuer: Aussteller: - Issued on: - Ausgestellt am: - - - Expires on: - Ablaufdatum: + No support for SSL session tickets/identifiers + Keine Unterstützung für SSL session tickets - <h3>Fingerprints</h3> - <h3>Fingerabdrücke</h3> + Organization (O): + Organisation (O): - SHA-256: - SHA-256: + Organizational Unit (OU): + Organisationseinheit (OU): SHA-1: SHA-1: - <p><b>Note:</b> This certificate was manually approved</p> - <p><b>Hinweis:</b> Dieses Zertifikat wurde manuell bestätigt</p> + SHA-256: + SHA-256: - %1 (self-signed) - %1 (selbst signiert) + Serial: + Seriennummer: - %1 - %1 + Server version: %1 + Serverversion: %1 - This connection is encrypted using %1 bit %2. - - Diese Verbindung ist verschlüsselt mit %1 Bit %2. - - - - Server version: %1 - Serverversion: %1 - - - No support for SSL session tickets/identifiers - Keine Unterstützung für SSL session tickets + State/Province: + Staat/Provinz: - Certificate information: - Zertifikatsinformation: + Subject Alternative Names: + Subject Alternative Names: The connection is not secure @@ -4138,70 +4221,76 @@ Server antwortete mit Fehler: %2 Diese Verbindung ist NICHT sicher, da diese nicht verschlüsselt ist. - + + This connection is encrypted using %1 bit %2. + + Diese Verbindung ist verschlüsselt mit %1 Bit %2. + + + OCC::SslErrorDialog - Trust this certificate anyway - Diesem Zertifikat trotzdem vertrauen + &lt;not specified&gt; + &lt;nicht angegeben&gt; - Untrusted Certificate - Nicht vertrauenswürdiges Zertifikat + Additional errors: + Zusätzliche Fehler: Cannot connect securely to <i>%1</i>: Kann keine sichere Verbindung zu <i>%1</i> herstellen: - Additional errors: - Zusätzliche Fehler: - - - with Certificate %1 - mit Zertifikat %1 + Country: %1 + Land: %1 - &lt;not specified&gt; - &lt;nicht angegeben&gt; + Effective Date: %1 + Datum des Inkrafttretens: %1 - Organization: %1 - Organisation: %1 + Expiration Date: %1 + Ablaufdatum: %1 - Unit: %1 - Einheit: %1 + Fingerprint (SHA-256): <tt>%1</tt> + Fingerabdruck (SHA-256): <tt>%1</tt> - Country: %1 - Land: %1 + Fingerprint (SHA-512): <tt>%1</tt> + Fingerabdruck (SHA-512): <tt>%1</tt> Fingerprint (SHA1): <tt>%1</tt> Fingerabdruck (SHA1): <tt>%1</tt> - Fingerprint (SHA-256): <tt>%1</tt> - Fingerabdruck (SHA-256): <tt>%1</tt> + Issuer: %1 + Aussteller: %1 + + + Organization: %1 + Organisation: %1 - Fingerprint (SHA-512): <tt>%1</tt> - Fingerabdruck (SHA-512): <tt>%1</tt> + Trust this certificate anyway + Diesem Zertifikat trotzdem vertrauen - Effective Date: %1 - Datum des Inkrafttretens: %1 + Unit: %1 + Einheit: %1 - Expiration Date: %1 - Ablaufdatum: %1 + Untrusted Certificate + Nicht vertrauenswürdiges Zertifikat - Issuer: %1 - Aussteller: %1 + with Certificate %1 + mit Zertifikat %1 - + OCC::SyncEngine @@ -4209,25 +4298,16 @@ Server antwortete mit Fehler: %2 %1 (übersprungen aufgrund des früheren Fehlers, erneuter Versuch in %2) - Only %1 are available, need at least %2 to start - Placeholders are postfixed with file sizes using Utility::octetsToString() - Nur %1 sind verfügbar. Zum Beginnen werden mindestens %2 benötigt. - - - Unable to open or create the local sync database. Make sure you have write access in the sync folder. - Öffnen oder erstellen der Sync-Datenbank nicht möglich. Bitte sicherstellen, dass Schreibrechte für den zu synchronisierenden Ordner existieren. - - - Disk space is low: Downloads that would reduce free space below %1 were skipped. - Der freie Speicherplatz wird knapp: Downloads, die den freien Speicher unter %1 reduzieren, wurden ausgelassen. + Cannot open the sync journal + Synchronisierungsprotokoll kann nicht geöffnet werden - - There is insufficient space available on the server for some uploads. - Auf dem Server ist für einige Dateien zum Hochladen nicht genug Platz. + + Could not set file record to local DB: %1 + Der Dateidatensatz konnte nicht in die lokale Datenbank eingestellt werden: %1 - Unresolved conflict. - Ungelöster Konflikt. + Could not update file metadata: %1 + Die Metadaten der Datei konnten nicht aktualisiert werden: %1 Could not update file: %1 @@ -4238,79 +4318,88 @@ Server antwortete mit Fehler: %2 Metadaten der virtuellen Datei konnten nicht aktualisiert werden: %1 - Could not update file metadata: %1 - Die Metadaten der Datei konnten nicht aktualisiert werden: %1 + Disk space is low: Downloads that would reduce free space below %1 were skipped. + Der freie Speicherplatz wird knapp: Downloads, die den freien Speicher unter %1 reduzieren, wurden ausgelassen. - Could not set file record to local DB: %1 - Der Dateidatensatz konnte nicht in die lokale Datenbank eingestellt werden: %1 + Only %1 are available, need at least %2 to start + Placeholders are postfixed with file sizes using Utility::octetsToString() + Nur %1 sind verfügbar. Zum Beginnen werden mindestens %2 benötigt. - Using virtual files with suffix, but suffix is not set - Virtuelle Dateien mit Endung verwenden, aber Endung ist nicht gesetzt. + There is insufficient space available on the server for some uploads. + Auf dem Server ist für einige Dateien zum Hochladen nicht genug Platz. - Unable to read the blacklist from the local database - Fehler beim Einlesen der Blacklist aus der lokalen Datenbank + Unable to open or create the local sync database. Make sure you have write access in the sync folder. + Öffnen oder erstellen der Sync-Datenbank nicht möglich. Bitte sicherstellen, dass Schreibrechte für den zu synchronisierenden Ordner existieren. Unable to read from the sync journal. Fehler beim Einlesen des Synchronisierungsprotokolls. - Cannot open the sync journal - Synchronisierungsprotokoll kann nicht geöffnet werden + Unable to read the blacklist from the local database + Fehler beim Einlesen der Blacklist aus der lokalen Datenbank - + + Unresolved conflict. + Ungelöster Konflikt. + + + Using virtual files with suffix, but suffix is not set + Virtuelle Dateien mit Endung verwenden, aber Endung ist nicht gesetzt. + + OCC::SyncStatusSummary - Offline - Offline + %1 of %2 + %1 von %2 + + + %1 of %2 · %3 left + %1 von %2 · %3 verbleiben All synced! Alles synchronisiert! - Some files couldn't be synced! - Einige Dateien konnten nicht synchronisiert werden! + Checking folder changes + Prüfe Ordneränderungen - See below for errors - Warnungen siehe unten + Offline + Offline - Checking folder changes - Prüfe Ordneränderungen + See below for errors + Warnungen siehe unten - Syncing changes - Synchronisiere Änderungen + See below for warnings + Warnungen siehe unten - Sync paused - Synchronisierung pausiert + Some files could not be synced! + Einige Dateien konnten nicht synchronisiert werden! - Some files could not be synced! + Some files couldn't be synced! Einige Dateien konnten nicht synchronisiert werden! - See below for warnings - Warnungen siehe unten + Sync paused + Synchronisierung pausiert Syncing Synchronisiere - %1 of %2 · %3 left - %1 von %2 · %3 verbleiben - - - %1 of %2 - %1 von %2 + Syncing changes + Synchronisiere Änderungen Syncing file %1 of %2 @@ -4319,58 +4408,54 @@ Server antwortete mit Fehler: %2 OCC::Systray - - Download - Herunterladen - Add account Konto hinzufügen - Open main dialog - Hauptfenster öffnen - - - Pause sync - Synchronisierung pausieren - - - Resume sync - Synchronisierung fortsetzen + Download + Herunterladen - Settings - Einstellungen + Exit %1 + %1 beenden Help Hilfe - Exit %1 - %1 beenden + Open main dialog + Hauptfenster öffnen + + + Pause sync + Synchronisierung pausieren Pause sync for all Synchronisierung für alle pausieren + + Resume sync + Synchronisierung fortsetzen + Resume sync for all Synchronisierung für alle fortsetzen - + + Settings + Einstellungen + + OCC::TermsOfServiceCheckWidget - Waiting for terms to be accepted - Es wird auf die Bestätigung der Nutzungsbedingungen gewartet - - - Polling - Abfrage + Copy Link + Link kopieren - + Link copied to clipboard. Link in die Zwischenablage kopiert. @@ -4379,10 +4464,14 @@ Server antwortete mit Fehler: %2 Browser öffnen - Copy Link - Link kopieren + Polling + Abfrage - + + Waiting for terms to be accepted + Es wird auf die Bestätigung der Nutzungsbedingungen gewartet + + OCC::Theme @@ -4409,35 +4498,35 @@ Server antwortete mit Fehler: %2 Failed to fetch search providers for '%1'. Error: %2 Suchanbieter für '%1' konnte nicht abgerufen werden. Fehler: %2 - - Search has failed for '%2'. - Suche nach '%2' fehlgeschlagen. - Search has failed for '%1'. Error: %2 Suche nach '%1' fehlgeschlagen. Fehler: %2 - + + Search has failed for '%2'. + Suche nach '%2' fehlgeschlagen. + + OCC::UpdateE2eeFolderMetadataJob - Failed to update folder metadata. - Ordner-Metadaten konnten nicht aktualisiert werden + Failed to finalize item. + Element konnte nicht fertiggestellt werden - + Failed to unlock encrypted folder. Verschlüsselter Ordner konnte nicht entsperrt werden. - Failed to finalize item. - Element konnte nicht fertiggestellt werden + Failed to update folder metadata. + Ordner-Metadaten konnten nicht aktualisiert werden - + OCC::UpdateE2eeFolderUsersMetadataJob - Error updating metadata for a folder %1 - Fehler beim Aktualisieren der Metadaten für einen Ordner %1 + Could not add or remove user %1 to access folder %2 + Benutzer %1 konnte für den Zugriff auf Ordner %2 nicht hinzugefügt oder entfernt werden Could not fetch public key for user %1 @@ -4448,8 +4537,8 @@ Server antwortete mit Fehler: %2 Verschlüsselter Stammordner für den Ordner %1 nicht gefunden - Could not add or remove user %1 to access folder %2 - Benutzer %1 konnte für den Zugriff auf Ordner %2 nicht hinzugefügt oder entfernt werden + Error updating metadata for a folder %1 + Fehler beim Aktualisieren der Metadaten für einen Ordner %1 Failed to unlock a folder. @@ -4458,14 +4547,6 @@ Server antwortete mit Fehler: %2 OCC::User - - End-to-end certificate needs to be migrated to a new one - Das Ende-zu-Ende-Zertifikat muss auf ein neues migriert werden - - - Trigger the migration - Starten der Migration - %n notification(s) @@ -4474,146 +4555,162 @@ Server antwortete mit Fehler: %2 - Retry all uploads - Alle Uploads neu starten + End-to-end certificate needs to be migrated to a new one + Das Ende-zu-Ende-Zertifikat muss auf ein neues migriert werden - Resolve conflict - Konflikt lösen + Open Nextcloud Assistant in browser + Nextcloud Assistant im Browser öffnen + Open Nextcloud Talk in browser + Nextcloud-Talk im Browser öffnen + + Rename file Datei umbenennen - Open Nextcloud Assistant in browser - Nextcloud Assistant im Browser öffnen + Resolve conflict + Konflikt lösen - Open Nextcloud Talk in browser - Nextcloud-Talk im Browser öffnen + Retry all uploads + Alle Uploads neu starten - - - OCC::UserModel - Confirm Account Removal - Kontenentfernung bestätigen + Trigger the migration + Starten der Migration + + + OCC::UserModel <p>Do you really want to remove the connection to the account <i>%1</i>?</p><p><b>Note:</b> This will <b>not</b> delete any files.</p> <p>Möchten Sie wirklich die Verbindung zum Konto <i>%1</i> entfernen?</p><p><b>Hinweis:</b> Es werden <b>keine</b> Dateien gelöscht.</p> - - Remove connection - Verbindung entfernen - Cancel Abbrechen - + + Confirm Account Removal + Kontenentfernung bestätigen + + + Remove connection + Verbindung entfernen + + OCC::UserStatusSelectorModel + + %1 days + + %1 Tag + %1 Tage + + + + %1 hours + + %1 Stunde + %1 Stunden + + + + %1 minutes + + %1 Minute + %1 Minuten + + - Could not fetch predefined statuses. Make sure you are connected to the server. - Vordefinierte Status konnten nicht abgerufen werden. Stellen Sie bitte sicher, dass Sie mit dem Server verbunden sind. + 1 day + 1 Tag - Could not fetch status. Make sure you are connected to the server. - Benutzerstatus konnte nicht abgerufen werden. Bitte sicherstellen, dass Sie mit dem Server verbunden sind. + 1 hour + 1 Stunde - Status feature is not supported. You will not be able to set your status. - Benutzerstatus-Funktion wird nicht unterstützt. Benutzerstatus kann nicht gesetzt werden. + 1 minute + 1 Minute - Emojis are not supported. Some status functionality may not work. - Emoji-Funktion wird nicht unterstützt. Einige Benutzerstatus-Funktionen funktionieren unter Umständen nicht. + 30 minutes + 30 Minuten - Could not set status. Make sure you are connected to the server. - Benutzerstatus konnte nicht gesetzt werden. Bitte sicherstellen, dass eine Verbindung mit dem Server besteht. + 4 hours + 4 Stunden Could not clear status message. Make sure you are connected to the server. Statusnachricht konnte nicht gelöscht werden. Bitte sicherstellen, dass eine Verbindung mit dem Server besteht. - Don't clear - Nicht löschen - - - 30 minutes - 30 Minuten + Could not fetch predefined statuses. Make sure you are connected to the server. + Vordefinierte Status konnten nicht abgerufen werden. Stellen Sie bitte sicher, dass Sie mit dem Server verbunden sind. - 1 hour - 1 Stunde + Could not fetch status. Make sure you are connected to the server. + Benutzerstatus konnte nicht abgerufen werden. Bitte sicherstellen, dass Sie mit dem Server verbunden sind. - 4 hours - 4 Stunden + Could not set status. Make sure you are connected to the server. + Benutzerstatus konnte nicht gesetzt werden. Bitte sicherstellen, dass eine Verbindung mit dem Server besteht. - Today - Heute + Don't clear + Nicht löschen - This week - Diese Woche + Emojis are not supported. Some status functionality may not work. + Emoji-Funktion wird nicht unterstützt. Einige Benutzerstatus-Funktionen funktionieren unter Umständen nicht. Less than a minute Weniger als eine Minute - 1 minute - 1 Minute - - - %1 minutes - - %1 Minute - %1 Minuten - - - - %1 hours - - %1 Stunde - %1 Stunden - + Status feature is not supported. You will not be able to set your status. + Benutzerstatus-Funktion wird nicht unterstützt. Benutzerstatus kann nicht gesetzt werden. - 1 day - 1 Tag + This week + Diese Woche - - %1 days - - %1 Tag - %1 Tage - + + Today + Heute - + OCC::Vfs Please choose a different location. %1 is a drive. It doesn't support virtual files. Bitte wählen Sie einen anderen Speicherort. %1 ist ein Laufwerk. Es unterstützt keine virtuellen Dateien. - - Please choose a different location. %1 isn't a NTFS file system. It doesn't support virtual files. - Bitte wählen Sie einen anderen Speicherort. %1 ist kein NTFS-Dateisystem. Es unterstützt keine virtuellen Dateien. - Please choose a different location. %1 is a network drive. It doesn't support virtual files. Bitte wählen Sie einen anderen Speicherort. %1 ist ein Netzlaufwerk. Es unterstützt keine virtuellen Dateien. - + + Please choose a different location. %1 isn't a NTFS file system. It doesn't support virtual files. + Bitte wählen Sie einen anderen Speicherort. %1 ist kein NTFS-Dateisystem. Es unterstützt keine virtuellen Dateien. + + OCC::VfsDownloadErrorDialog + + %1 could not be downloaded. + %1 konnte nicht heruntergeladen werden. + + + > More details + > Weitere Details + Download error Fehler beim Herunterladen @@ -4623,26 +4720,18 @@ Server antwortete mit Fehler: %2 Fehler beim Herunterladen - could not be downloaded - Konnte nicht heruntergeladen werden - - - > More details - > Weitere Details + Error downloading %1 + Fehler beim Herunterladen von %1 More details Weitere Details - Error downloading %1 - Fehler beim Herunterladen von %1 - - - %1 could not be downloaded. - %1 konnte nicht heruntergeladen werden. + could not be downloaded + Konnte nicht heruntergeladen werden - + OCC::VfsSuffix @@ -4678,202 +4767,230 @@ Server antwortete mit Fehler: %2 OCC::WelcomePage - Form - Formular + Easy-to-use web mail, calendaring & contacts + Einfach zu bedienende Webmail, Kalender & Kontakte - Log in - Anmelden + Form + Formular - Sign up with provider - Mit Provider anmelden + Host your own server + Eigenen Server betreiben - + Keep your data secure and under your control Halten Sie Ihre Daten sicher und unter Ihrer Kontrolle - Secure collaboration & file exchange - Sichere Zusammenarbeit & Dateiaustausch - - - Easy-to-use web mail, calendaring & contacts - Einfach zu bedienende Webmail, Kalender & Kontakte + Log in + Anmelden Screensharing, online meetings & web conferences Bildschirmfreigabe, Online-Meetings & Webkonferenzen - Host your own server - Eigenen Server betreiben + Secure collaboration & file exchange + Sichere Zusammenarbeit & Dateiaustausch - - - OCC::ownCloudGui - Please sign in - Bitte melden Sie sich an + Sign up with provider + Mit Provider anmelden + + + OwncloudAdvancedSetupPage - There are no sync folders configured. - Es wurden keine Synchronisierungsordner konfiguriert. + &Local Folder + &Lokaler Ordner + + + <html><head/><body><p>If this box is checked, existing content in the local folder will be erased to start a clean sync from the server.</p><p>Do not check this if the local content should be uploaded to the servers folder.</p></body></html> + <html><head/><body><p>Wenn diese Option gesetzt ist, werden bestehende Inhalte im lokalen Ordner gelöscht, um eine saubere Synchronisierung nur der Serverdaten zu ermöglichen.</p><p>Wählen Sie diese Option nicht, wenn die lokalen Inhalte auf den Server übertragen werden sollen.</p></body></html> - Disconnected from %1 - Von %1 getrennt + Ask before syncing external storages + Fragen, bevor externe Speicher synchronisiert werden - Unsupported Server Version - Nicht unterstütze Serverversion + Ask before syncing folders larger than + Fragen, bevor Ordner synchronisiert werden. Grenze: - The server on account %1 runs an unsupported version %2. Using this client with unsupported server versions is untested and potentially dangerous. Proceed at your own risk. - Der Server auf Konto %1 verwendet die nicht unterstützte Version %2. Die Verwendung dieses Clients mit nicht unterstützten Serverversionen ist ungetestet und potenziell gefährlich. Die Verwendung erfolgt auf eigene Gefahr. + Choose different folder + Anderen Ordner wählen - Terms of service - Nutzungsbedingungen + Choose what to sync + Zu synchronisierende Elemente auswählen - Your account %1 requires you to accept the terms of service of your server. You will be redirected to %2 to acknowledge that you have read it and agrees with it. - Für Ihr Konto %1 müssen Sie die Nutzungsbedingungen Ihres Servers akzeptieren. Sie werden weitergeleitet an %2, um zu bestätigen, dass Sie die Nutzungsbedingungen gelesen haben und damit einverstanden sind. + Erase local folder and start a clean sync + Lokalen Ordner löschen und eine saubere Synchronisierung starten - %1: %2 - Example text: "Nextcloud: Syncing 25MB (3 minutes left)" (%1 is the folder name to be synced, %2 a status message for that folder) - %1: %2 + Keep local data + Lokale Daten behalten - macOS VFS for %1: Sync is running. - macOS VFS für %1: Synchronisierung läuft. + Local Folder + Lokaler Ordner - macOS VFS for %1: Last sync was successful. - macOS VFS für %1: Letzte Synchronisierung war erfolgreich. + MB + Trailing part of "Ask confirmation before syncing folder larger than" + MB - macOS VFS for %1: A problem was encountered. - macOS VFS für %1: Es ist ein Problem aufgetreten. + Server address + Serveradresse - Checking for changes in remote "%1" - Nach Änderungen in entfernten "%1" suchen + Sync Logo + Sync-Logo - Checking for changes in local "%1" - Nach Änderungen in lokalem "%1" suchen + Synchronize everything from server + Alle Daten vom Server synchronisieren - Disconnected from accounts: - Verbindungen zu Konten getrennt: + Username + Benutzername + + + OwncloudHttpCredsPage - Account %1: %2 - Konto %1: %2 + &Password + &Passwort + + + &Username + &Benutzername + + + OwncloudSetupPage - Account synchronization is disabled - Konto-Synchronisierung ist deaktiviert + Logo + Logo - %1 (%2, %3) - %1 (%2, %3) + Server address + Serveradresse + + + TextLabel + TextLabel + + + This is the link to your %1 web interface when you open it in the browser. + Dies ist der Link zu Ihrer %1 Webseite, wenn Sie diese im Browser öffnen. - OwncloudAdvancedSetupPage + progress - Username - Benutzername + Deleted + Gelöscht - Local Folder - Lokaler Ordner + Deleting + Lösche - Choose different folder - Anderen Ordner wählen + Downloaded + Heruntergeladen - Server address - Serveradresse + Downloading + Lade herunter - Sync Logo - Sync-Logo + Error + Fehler - Synchronize everything from server - Alle Daten vom Server synchronisieren + Filesystem access error + Zugriffsfehler im Dateisystem - Ask before syncing folders larger than - Fragen, bevor Ordner synchronisiert werden. Grenze: + Ignored + Ignoriert - Ask before syncing external storages - Fragen, bevor externe Speicher synchronisiert werden + Ignoring + ignoriere - Keep local data - Lokale Daten behalten + Moved to %1 + Verschoben nach %1 - <html><head/><body><p>If this box is checked, existing content in the local folder will be erased to start a clean sync from the server.</p><p>Do not check this if the local content should be uploaded to the servers folder.</p></body></html> - <html><head/><body><p>Wenn diese Option gesetzt ist, werden bestehende Inhalte im lokalen Ordner gelöscht, um eine saubere Synchronisierung nur der Serverdaten zu ermöglichen.</p><p>Wählen Sie diese Option nicht, wenn die lokalen Inhalte auf den Server übertragen werden sollen.</p></body></html> + Moving + Verschiebe - Erase local folder and start a clean sync - Lokalen Ordner löschen und eine saubere Synchronisierung starten + Replaced by virtual file + Ersetzt durch virtuelle Datei - MB - Trailing part of "Ask confirmation before syncing folder larger than" - MB + Server version downloaded, copied changed local file into case conflict conflict file + Serverversion heruntergeladen, geänderte lokale Datei in Fallkonflikt-Konfliktdatei kopiert - Choose what to sync - Zu synchronisierende Elemente auswählen + Server version downloaded, copied changed local file into conflict file + Serverversion heruntergeladen. Die bearbeitete lokale Datei wurde in eine Konfliktdatei kopiert. - &Local Folder - &Lokaler Ordner + Unknown + Unbekannt - - - OwncloudHttpCredsPage - &Username - &Benutzername + Updated end-to-end encryption metadata + Metadaten für die Ende-zu-Ende-Verschlüsselung aktualisiert - &Password - &Passwort + Updated local metadata + Lokale Metadaten aktualisiert - - - OwncloudSetupPage - TextLabel - TextLabel + Updated local virtual files metadata + Metadaten für lokale virtuelle Dateien aktualisiert - Logo - Logo + Updating end-to-end encryption metadata + Aktualisieren der Metadaten für die Ende-zu-Ende-Verschlüsselung + + + Updating local metadata + Aktualisiere lokale Metadaten - Server address - Serveradresse + Updating local virtual files metadata + Aktualisiere Metadaten für lokale virtuelle Dateien - This is the link to your %1 web interface when you open it in the browser. - Dies ist der Link zu Ihrer %1 Webseite, wenn Sie diese im Browser öffnen. + Uploaded + Hochgeladen - + + Uploading + Lade hoch + + + Virtual file created + Virtuelle Datei erstellt + + QObject + + %1: %2 + this displays an error string (%2) for a file %1 + %1: %2 + %nd delay in days after an activity @@ -4882,10 +4999,6 @@ Server antwortete mit Fehler: %2 %nd - - in the future - in der Zukunft - %nh delay in hours after an activity @@ -4894,11 +5007,6 @@ Server antwortete mit Fehler: %2 %nh - - 1m - one minute after activity date and time - 1m - %nm delay in minutes after an activity @@ -4908,65 +5016,65 @@ Server antwortete mit Fehler: %2 - now - jetzt + 1m + one minute after activity date and time + 1m - Some time ago - Vor einiger Zeit + Could not create debug archive in selected location! + Es konnte kein Debug-Archiv am ausgewählten Ort erstellt werden! - %1: %2 - this displays an error string (%2) for a file %1 - %1: %2 + Error deleting the file + Fehler beim Löschen der Datei + + + Failed to create debug archive + Debug-Archiv konnte nicht erstellt werden New folder Neuer Ordner - Failed to create debug archive - Debug-Archiv konnte nicht erstellt werden + Paths beginning with '#' character are not supported in VFS mode. + Pfade, die mit dem Zeichen '#' beginnen, werden im VFS-Modus nicht unterstützt. - - Could not create debug archive in selected location! - Es konnte kein Debug-Archiv am ausgewählten Ort erstellt werden! + + Some time ago + Vor einiger Zeit - You renamed %1 - Sie haben %1 umbenannt + Synced %1 + %1 synchronisiert - You deleted %1 - Sie haben %1 gelöscht + You changed %1 + Sie haben %1 geändert You created %1 Sie haben %1 erstellt - You changed %1 - Sie haben %1 geändert + You deleted %1 + Sie haben %1 gelöscht - Synced %1 - %1 synchronisiert + You renamed %1 + Sie haben %1 umbenannt - Error deleting the file - Fehler beim Löschen der Datei + in the future + in der Zukunft - Paths beginning with '#' character are not supported in VFS mode. - Pfade, die mit dem Zeichen '#' beginnen, werden im VFS-Modus nicht unterstützt. + now + jetzt - + ResolveConflictsDialog - - Solve sync conflicts - Synchronisationskonflikte lösen - %1 files in conflict indicate the number of conflicts to resolve @@ -4975,10 +5083,6 @@ Server antwortete mit Fehler: %2 %1 Dateikonflikte - - Choose if you want to keep the local version, server version, or both. If you choose both, the local file will have a number added to its name. - Wählen Sie, ob Sie die lokale Version, die Serverversion oder beide behalten möchten. Wenn Sie beide auswählen, wird dem Namen der lokalen Datei eine Nummer hinzugefügt. - All local versions Alle lokalen Versionen @@ -4987,15 +5091,23 @@ Server antwortete mit Fehler: %2 All server versions Alle Serverversionen + + Cancel + Abbrechen + + + Choose if you want to keep the local version, server version, or both. If you choose both, the local file will have a number added to its name. + Wählen Sie, ob Sie die lokale Version, die Serverversion oder beide behalten möchten. Wenn Sie beide auswählen, wird dem Namen der lokalen Datei eine Nummer hinzugefügt. + Resolve conflicts Konflikte lösen - Cancel - Abbrechen + Solve sync conflicts + Synchronisationskonflikte lösen - + ShareDelegate @@ -5006,37 +5118,45 @@ Server antwortete mit Fehler: %2 ShareDetailsPage - An error occurred setting the share password. - Es ist ein Fehler beim Festlegen des Freigabekennworts aufgetreten. - - - Edit share - Freigabe bearbeiten + Add another link + Weiteren Link hinzufügen - Share label - Freigabe-Label + Allow resharing + Weiterteilen erlauben Allow upload and editing Hochladen und Bearbeiten erlauben - View only - Nur anzeigen + An error occurred setting the share password. + Es ist ein Fehler beim Festlegen des Freigabekennworts aufgetreten. - File drop (upload only) - Dateien ablegen (nur Hochladen) + Copy share link + Freigabe-Link kopieren + + + Edit share + Freigabe bearbeiten - Allow resharing - Weiterteilen erlauben + Enter a note for the recipient + Eine Notiz für den Empfänger eingeben + + + File drop (upload only) + Dateien ablegen (nur Hochladen) Hide download Download verbergen + + Note to recipient + Notiz an Empfänger + Password protection Passwortschutz @@ -5046,32 +5166,39 @@ Server antwortete mit Fehler: %2 Ablaufdatum setzen - Note to recipient - Notiz an Empfänger + Share label + Freigabe-Label - Enter a note for the recipient - Eine Notiz für den Empfänger eingeben + Share link copied! + Freigabelink kopiert! Unshare Freigabe aufheben - Add another link - Weiteren Link hinzufügen + View only + Nur anzeigen + + + ShareeSearchField - Share link copied! - Freigabelink kopiert! + Search for users or groups… + Suche nach Benutzern oder Gruppen… - Copy share link - Freigabe-Link kopieren + Sharing is not available for this folder + Teilen ist für diesen Ordner nicht verfügbar ShareView + + Expires in %1 + Läuft ab in %1 + Password required for new share Passwort für neue Freigabe erforderlich @@ -5084,34 +5211,19 @@ Server antwortete mit Fehler: %2 Shared with you by %1 Geteilt mit Ihnen von %1 - - Expires in %1 - Läuft ab in %1 - Sharing is disabled Teilen ist deaktiviert - - This item cannot be shared. - Dieses Element kann nicht geteilt werden - Sharing is disabled. Teilen ist deaktiviert. - - - ShareeSearchField - - Search for users or groups… - Suche nach Benutzern oder Gruppen… - - - Sharing is not available for this folder - Teilen ist für diesen Ordner nicht verfügbar + + This item cannot be shared. + Dieses Element kann nicht geteilt werden - + SyncJournalDb @@ -5122,18 +5234,18 @@ Server antwortete mit Fehler: %2 SyncStatus - Sync now - Jetzt synchronisieren + Open browser + Browser öffnen - + Resolve conflicts Konflikte lösen - Open browser - Browser öffnen + Sync now + Jetzt synchronisieren - + TalkReplyTextField @@ -5147,10 +5259,6 @@ Server antwortete mit Fehler: %2 TermsOfServiceCheckWidget - - Terms of Service - Nutzungsbedingungen - Logo Logo @@ -5159,13 +5267,56 @@ Server antwortete mit Fehler: %2 Switch to your browser to accept the terms of service Zum Browser wechseln, um die Nutzungsbedingungen zu bestätigen - + + Terms of Service + Nutzungsbedingungen + + - TrayWindowHeader + theme - Open local or group folders - Lokalen oder Gruppenordner öffnen + Error occurred during setup + Fehler bei der Einrichtung aufgetreten + + + Error occurred during sync + Fehler beim Synchronisieren aufgetreten + + + Preparing to sync + Synchronisierung wird vorbereitet + + Stopping sync + Beende Synchronisierung + + + Sync is paused + Synchronisierung ist angehalten. + + + Sync is running + Synchronisierung läuft + + + Sync status is unknown + Synchronisierungsstatus ist unbekannt + + + Sync was successful + Synchronisierung war erfolgreich + + + Sync was successful but some files were ignored + Synchronisierung war erfolgreich, aber einige Dateien wurden ignoriert + + + Waiting to start syncing + Warte auf Beginn der Synchronisierung. + + + + TrayWindowHeader More apps Weitere Apps @@ -5174,7 +5325,11 @@ Server antwortete mit Fehler: %2 Open %1 in browser %1 im Browser öffnen - + + Open local or group folders + Lokalen oder Gruppenordner öffnen + + UnifiedSearchInputContainer @@ -5227,67 +5382,83 @@ Server antwortete mit Fehler: %2 UserLine - Switch to account - Zu Konto wechseln - - - Current account status is online - Aktueller Kontostatus ist "Online" + Account actions + Konto-Aktionen Current account status is do not disturb Aktueller Kontostatus ist "Nicht stören" - Account actions - Konto-Aktionen + Current account status is online + Aktueller Kontostatus ist "Online" - Set status - Status setzen + Log in + Anmelden Log out Abmelden - - Log in - Anmelden - Remove account Konto entfernen - + + Set status + Status setzen + + + Switch to account + Zu Konto wechseln + + UserStatusSelector - Online status - Online-Status + Appear offline + Offline erscheinen - Online - Online + Apply + Anwenden - + Away Abwesend + + Cancel + Abbrechen + + + Clear + Leeren + + + Clear status message after + Statusnachricht löschen nach + Do not disturb Nicht stören + + Invisible + Unsichtbar + Mute all notifications Alle Benachrichtigungen stummschalten - Invisible - Unsichtbar + Online + Online - Appear offline - Offline erscheinen + Online status + Online-Status Status message @@ -5297,59 +5468,33 @@ Server antwortete mit Fehler: %2 What is your status? Wie ist Ihr Status? + + + Utility - Clear status message after - Statusnachricht löschen nach - - - Cancel - Abbrechen + %1 %2 + %1 %2 - - Clear - Leeren + + %L1 B + %L1 B - - Apply - Anwenden - - - - Utility %L1 GB %L1 GB - - %L1 MB - %L1 MB - %L1 KB %L1 KB - %L1 B - %L1 B + %L1 MB + %L1 MB %L1 TB %L1 TB - - %n year(s) - - %n Jahr - %n Jahre - - - - %n month(s) - - %n Monat - %n Monate - - %n day(s) @@ -5371,6 +5516,13 @@ Server antwortete mit Fehler: %2 %n Minuten + + %n month(s) + + %n Monat + %n Monate + + %n second(s) @@ -5378,223 +5530,70 @@ Server antwortete mit Fehler: %2 %n Sekunden - - %1 %2 - %1 %2 - - - - ValidateChecksumHeader - - The checksum header is malformed. - Der Prüfsummen-Header hat ein fehlerhaftes Format. - - - The checksum header contained an unknown checksum type "%1" - Der Prüfsummen-Header enthielt einen unbekannten Prüfsummentyp "%1" - - - The downloaded file does not match the checksum, it will be resumed. "%1" != "%2" - Die heruntergeladene Datei stimmt nicht mit der Prüfsumme überein, sie wird fortgesetzt. "%1" != "%2" - - - - main.cpp - - System Tray not available - Benachrichtigungsfeld (Taskleiste) ist nicht verfügbar. - - - %1 requires on a working system tray. If you are running XFCE, please follow <a href="http://docs.xfce.org/xfce/xfce4-panel/systray">these instructions</a>. Otherwise, please install a system tray application such as "trayer" and try again. - %1 benötigt ein funktionierendes Benachrichtigungsfeld. Falls Sie XFCE einsetzen, dann folgen Sie bitte <a href="http://docs.xfce.org/xfce/xfce4-panel/systray">diesen Anweisungen</a>. Andernfalls installieren Sie bitte ein Benachrichtigungsfeld wie zum Beispiel "Trayer" und versuchen es nochmal. - - - - nextcloudTheme::aboutInfo() - - <p><small>Built from Git revision <a href="%1">%2</a> on %3, %4 using Qt %5, %6</small></p> - <p><small>Erstellt aus der Git-Revision <a href="%1">%2</a> auf %3, %4 unter Verwendung von Qt %5, %6</small></p> - - - - progress - - Virtual file created - Virtuelle Datei erstellt - - - Replaced by virtual file - Ersetzt durch virtuelle Datei - - - Downloaded - Heruntergeladen - - - Uploaded - Hochgeladen - - - Server version downloaded, copied changed local file into conflict file - Serverversion heruntergeladen. Die bearbeitete lokale Datei wurde in eine Konfliktdatei kopiert. - - - Server version downloaded, copied changed local file into case conflict conflict file - Serverversion heruntergeladen, geänderte lokale Datei in Fallkonflikt-Konfliktdatei kopiert - - - Deleted - Gelöscht - - - Moved to %1 - Verschoben nach %1 - - - Ignored - Ignoriert - - - Filesystem access error - Zugriffsfehler im Dateisystem - - - Error - Fehler - - - Updated local metadata - Lokale Metadaten aktualisiert - - - Updated local virtual files metadata - Metadaten für lokale virtuelle Dateien aktualisiert - - - Updated end-to-end encryption metadata - Metadaten für die Ende-zu-Ende-Verschlüsselung aktualisiert - - - Unknown - Unbekannt - - - Downloading - Lade herunter - - - Uploading - Lade hoch - - - Deleting - Lösche - - - Moving - Verschiebe - - - Ignoring - ignoriere - - - Updating local metadata - Aktualisiere lokale Metadaten - - - Updating local virtual files metadata - Aktualisiere Metadaten für lokale virtuelle Dateien - - - Updating end-to-end encryption metadata - Aktualisieren der Metadaten für die Ende-zu-Ende-Verschlüsselung + + %n year(s) + + %n Jahr + %n Jahre + - + - theme - - Sync status is unknown - Synchronisierungsstatus ist unbekannt - - - Waiting to start syncing - Warte auf Beginn der Synchronisierung. - - - Sync is running - Synchronisierung läuft - + utility - Sync was successful - Synchronisierung war erfolgreich + Always available locally + Immer lokal verfügbar - Sync was successful but some files were ignored - Synchronisierung war erfolgreich, aber einige Dateien wurden ignoriert + Available online only + Nur online verfügbar - Error occurred during sync - Fehler beim Synchronisieren aufgetreten + Could not open browser + Konnte Browser nicht öffnen - Error occurred during setup - Fehler bei der Einrichtung aufgetreten + Could not open email client + Die E-Mail-Anwendung konnte nicht geöffnet werden - Stopping sync - Beende Synchronisierung + Currently available locally + Derzeit lokal verfügbar - Preparing to sync - Synchronisierung wird vorbereitet + Free up local space + Lokalen Speicherplatz freigeben - - Sync is paused - Synchronisierung ist angehalten. + + Make always available locally + Immer lokal verfügbar machen - - - utility - Could not open browser - Konnte Browser nicht öffnen + Some available online only + Einige sind nur online abrufbar There was an error when launching the browser to go to URL %1. Maybe no default browser is configured? Die URL %1 konnte aufgrund eines Fehlers beim Start des Browsers nicht aufgerufen werden. Ist vielleicht kein Standardbrowser konfiguriert? - - Could not open email client - Die E-Mail-Anwendung konnte nicht geöffnet werden - There was an error when launching the email client to create a new message. Maybe no default email client is configured? Fehler beim Öffnen der E-Mail-Anwendung zum Erstellen einer neuen Nachricht. Vielleicht ist keine Standard-E-Mail Anwendung eingerichtet? + + + ValidateChecksumHeader - Always available locally - Immer lokal verfügbar - - - Currently available locally - Derzeit lokal verfügbar - - - Some available online only - Einige sind nur online abrufbar - - - Available online only - Nur online verfügbar + The checksum header contained an unknown checksum type "%1" + Der Prüfsummen-Header enthielt einen unbekannten Prüfsummentyp "%1" - Make always available locally - Immer lokal verfügbar machen + The checksum header is malformed. + Der Prüfsummen-Header hat ein fehlerhaftes Format. - Free up local space - Lokalen Speicherplatz freigeben + The downloaded file does not match the checksum, it will be resumed. "%1" != "%2" + Die heruntergeladene Datei stimmt nicht mit der Prüfsumme überein, sie wird fortgesetzt. "%1" != "%2" - + \ No newline at end of file diff --git a/translations/client_en.ts b/translations/client_en.ts index fa6e4edad1645..3e476ffb40248 100644 --- a/translations/client_en.ts +++ b/translations/client_en.ts @@ -1,438 +1,455 @@ - - + ActivityItem - - Open %1 locally - - In %1 - + - + + Open %1 locally + + + ActivityItemContent - - Open file details - - Dismiss - + - + + Open file details + + + ActivityList Activity list - - - - Scroll to top - + No activities yet - + - + + Scroll to top + + + CallNotificationDialog - - Talk notification caller avatar - - Answer Talk call notification - + Decline - + Decline Talk call notification - + - + + Talk notification caller avatar + + + CloudProviderWrapper %1 (%2, %3) - + Checking for changes in "%1" - + - Syncing %1 of %2 (%3 left) - + Help + - Syncing %1 of %2 - + Log out + - Syncing %1 (%2 left) - + No recently changed files + - Syncing %1 - + Open website + - No recently changed files - + Pause synchronization + - Sync paused - + Quit sync client + - - Syncing - + + Recently changed + - Open website - + Settings + - Recently changed - + Sync paused + - Pause synchronization - + Syncing + - Help - + Syncing %1 + - Settings - + Syncing %1 (%2 left) + - Log out - + Syncing %1 of %2 + - Quit sync client - + Syncing %1 of %2 (%3 left) + - + ConflictDelegate Local version - + Server version - + CurrentAccountHeaderButton - Current account - + Account switcher and settings menu + - - Resume sync for all - + + Add account + - Pause sync for all - + Add new account + - Add account - + Current account + - Add new account - + Current account avatar + - Settings - + Current account status is do not disturb + - Exit - + Current account status is online + - Current account avatar - + Exit + - Current account status is online - + Pause sync for all + - Current account status is do not disturb - + Resume sync for all + - Account switcher and settings menu - + Settings + - + EditFileLocallyLoadingDialog Opening file for local editing - + EmojiPicker No recent emojis - + EncryptionTokenDiscoveryDialog Discovering the certificates stored on your USB token - + EncryptionTokenSelectionWindow - - Token Encryption Key Chooser - - Available Keys for end-to-end Encryption: - + + Cancel + + + Choose - + - Cancel - + Token Encryption Key Chooser + - + ErrorBox Error - + FileDetailsPage Activity - + Sharing - + FileDetailsWindow File details of %1 · %2 - + FileProviderEvictionDialog Evict materialised files - + Materialised items - + Reload - + FileProviderFastEnumerationSettings Enable fast sync - + Fast sync will only sync changes in files and folders within folders that have been explored. This can significantly increase responsiveness on initial configuration of virtual files. However, it will cause redundant downloads of files moved to an unexplored folder. - + FileProviderFileDelegate Delete - + FileProviderSettings - Virtual files settings - + Enable virtual files + - + General settings - + - Enable virtual files - + Virtual files settings + - + FileProviderStorageInfo - - Local storage use - - %1 GB of %2 GB remote files synced - + Evict local copies … - + - + + Local storage use + + + FileProviderSyncStatus - - Syncing - - All synced! - + + Request a sync of changes for the VFS environment. +macOS may ignore or delay this request. + + + Request sync - + - Request a sync of changes for the VFS environment. -macOS may ignore or delay this request. - + Syncing + - + FileSystem - - Error removing "%1": %2 - - Could not remove folder "%1" - + - + + Error removing "%1": %2 + + + Flow2AuthWidget + An error occurred while connecting. Please try again. + + + Browser Authentication - + Logo - + Switch to your browser to connect your account - + - - An error occurred while connecting. Please try again. - - - + FolderWizardSourcePage - - Pick a local folder on your computer to sync - - &Choose … - + - + + Pick a local folder on your computer to sync + + + FolderWizardTargetPage - - Select a remote destination folder - - Create folder - + + Folders + + + Refresh - + - Folders - + Select a remote destination folder + - + + + main.cpp + + %1 requires on a working system tray. If you are running XFCE, please follow <a href="http://docs.xfce.org/xfce/xfce4-panel/systray">these instructions</a>. Otherwise, please install a system tray application such as "trayer" and try again. + + + + System Tray not available + + + MainWindow + New activities + + + Nextcloud desktop main dialog - + Unified search results list - + + + + nextcloudTheme::aboutInfo() - New activities - + <p><small>Built from Git revision <a href="%1">%2</a> on %3, %4 using Qt %5, %6</small></p> + OCC::AbstractNetworkJob Connection timed out - - - - Unknown error: network reply was deleted - + Server replied "%1 %2" to "%3 %4" - + - + + Unknown error: network reply was deleted + + + OCC::Account File %1 is already locked by %2. - + Lock operation on %1 failed with error %2 - + Unlock operation on %1 failed with error %2 - + @@ -440,1352 +457,1316 @@ macOS may ignore or delay this request. %1 accounts were detected from a legacy desktop client. Should the accounts be imported? - + 1 account was detected from a legacy desktop client. Should the account be imported? - + - Legacy import - + Could not import accounts from legacy client configuration. + - + Import - + - Skip - + Legacy import + - Could not import accounts from legacy client configuration. - + Skip + - + OCC::AccountSettings - Unchecked folders will be <b>removed</b> from your local file system and will not be synchronized to this computer anymore - + %1 (%3%) of %2 in use. Some folders, including network mounted or shared folders, might have different limits. + - Synchronize all - + %1 as %2 + - Synchronize none - + %1 in use + - Apply manual changes - + %1 of %2 in use + - Standard file sync - + (experimental) + - Virtual file sync - + <p>Could not create local folder <i>%1</i>.</p> + - Connection settings - + <p>Do you really want to stop syncing the folder <i>%1</i>?</p><p><b>Note:</b> This will <b>not</b> delete any files.</p> + Apply - + - Storage space: … - + Apply manual changes + + + + Availability + Cancel - + - Connected with <server> as <user> - + Choose what to sync + - No account configured. - + Confirm Folder Sync Connection Removal + - Migrate certificate to a new one - + Connected to %1. + - There are folders that have grown in size beyond %1MB: %2 - + Connected with <server> as <user> + - End-to-end encryption has been enabled on this account with another device.<br>It can be enabled on this device by entering your mnemonic.<br>This will enable synchronisation of existing encrypted folders. - + Connecting to %1 … + - This account supports end-to-end encryption - + Connection settings + - End-to-end Encryption with Virtual Files - + Could not encrypt folder because the folder does not exist anymore + - You seem to have the Virtual Files feature enabled on this folder. At the moment, it is not possible to implicitly download virtual files that are end-to-end encrypted. To get the best experience with virtual files and end-to-end encryption, make sure the encrypted folder is marked with "Make always available locally". - + Create new folder + - Do not encrypt folder - + Currently there is no storage usage information available. + - Encrypt folder - + Disable encryption + - End-to-end Encryption - + Disable end-to-end encryption + - This will encrypt your folder and all files within it. These files will no longer be accessible without your encryption mnemonic key. -<b>This process is not reversible. Are you sure you want to proceed?</b> - + Disable end-to-end encryption for %1? + - Disable encryption - + Disable support + - Display mnemonic - + Disable virtual file support … + - End-to-end encryption has been enabled for this account - + Disable virtual file support? + - Warning - + Display mnemonic + - Please wait for the folder to sync before trying to encrypt it. - + Do not encrypt folder + - The folder has a minor sync problem. Encryption of this folder will be possible once it has synced successfully - + Edit Ignored Files + - The folder has a sync error. Encryption of this folder will be possible once it has synced successfully - + Enable virtual file support %1 … + - End-to-end encryption is not configured on this device. Once it is configured, you will be able to encrypt this folder. -Would you like to set up end-to-end encryption? - + Encrypt + - You cannot encrypt a folder with contents, please remove the files. -Wait for the new sync, then encrypt it. - + Encrypt folder + Encryption failed - + - Could not encrypt folder because the folder does not exist anymore - + End-to-end Encryption + - Encrypt - + End-to-end Encryption with Virtual Files + - Edit Ignored Files - + End-to-end encryption has been enabled for this account + - Create new folder - + End-to-end encryption has been enabled on this account with another device.<br>It can be enabled on this device by entering your mnemonic.<br>This will enable synchronisation of existing encrypted folders. + - Availability - + End-to-end encryption is not configured on this device. Once it is configured, you will be able to encrypt this folder. +Would you like to set up end-to-end encryption? + - Choose what to sync - + End-to-end encryption mnemonic + - Force sync now - + Folder creation failed + - Restart sync - + Force sync now + - Remove folder sync connection - + Migrate certificate to a new one + - Disable virtual file support … - + No %1 connection configured. + - - Enable virtual file support %1 … - + + No account configured. + - (experimental) - + Open folder + - Folder creation failed - + Pause sync + - Confirm Folder Sync Connection Removal - + Please wait for the folder to sync before trying to encrypt it. + Remove Folder Sync Connection - + - Disable virtual file support? - - - - This action will disable virtual file support. As a consequence contents of folders that are currently marked as "available online only" will be downloaded. - -The only advantage of disabling virtual file support is that the selective sync feature will become available again. - -This action will abort any currently running synchronization. - + Remove folder sync connection + - Disable support - + Removing end-to-end encryption will remove locally-synced files that are encrypted.<br>Encrypted files will remain on the server. + - End-to-end encryption mnemonic - + Restart sync + - To protect your Cryptographic Identity, we encrypt it with a mnemonic of 12 dictionary words. Please note these down and keep them safe. They will be needed to add other devices to your account (like your mobile phone or laptop). - + Resume sync + - Disable end-to-end encryption - + Server %1 is currently being redirected, or your connection is behind a captive portal. + - Disable end-to-end encryption for %1? - + Server %1 is currently in maintenance mode. + - Removing end-to-end encryption will remove locally-synced files that are encrypted.<br>Encrypted files will remain on the server. - + Server %1 is temporarily unavailable. + - Sync Running - + Server configuration error: %1 at %2. + - The syncing operation is running.<br/>Do you want to terminate it? - + Set up encryption + - %1 in use - + Signed out from %1. + - Set up encryption - + Standard file sync + - Connected to %1. - + Storage space: … + - Server %1 is temporarily unavailable. - + Sync Running + - Server %1 is currently in maintenance mode. - + Synchronize all + - Signed out from %1. - + Synchronize none + - There are folders that were not synchronized because they are too big: - + The folder has a minor sync problem. Encryption of this folder will be possible once it has synced successfully + - There are folders that were not synchronized because they are external storages: - + The folder has a sync error. Encryption of this folder will be possible once it has synced successfully + - There are folders that were not synchronized because they are too big or external storages: - + The server version %1 is unsupported! Proceed at your own risk. + - Open folder - + The syncing operation is running.<br/>Do you want to terminate it? + - Resume sync - + There are folders that have grown in size beyond %1MB: %2 + - Pause sync - + There are folders that were not synchronized because they are external storages: + - <p>Could not create local folder <i>%1</i>.</p> - + There are folders that were not synchronized because they are too big or external storages: + - <p>Do you really want to stop syncing the folder <i>%1</i>?</p><p><b>Note:</b> This will <b>not</b> delete any files.</p> - + There are folders that were not synchronized because they are too big: + - %1 (%3%) of %2 in use. Some folders, including network mounted or shared folders, might have different limits. - + This account supports end-to-end encryption + - %1 of %2 in use - + This action will disable virtual file support. As a consequence contents of folders that are currently marked as "available online only" will be downloaded. + +The only advantage of disabling virtual file support is that the selective sync feature will become available again. + +This action will abort any currently running synchronization. + - Currently there is no storage usage information available. - + This will encrypt your folder and all files within it. These files will no longer be accessible without your encryption mnemonic key. +<b>This process is not reversible. Are you sure you want to proceed?</b> + - %1 as %2 - + To protect your Cryptographic Identity, we encrypt it with a mnemonic of 12 dictionary words. Please note these down and keep them safe. They will be needed to add other devices to your account (like your mobile phone or laptop). + - The server version %1 is unsupported! Proceed at your own risk. - + Unable to connect to %1. + - Server %1 is currently being redirected, or your connection is behind a captive portal. - + Unchecked folders will be <b>removed</b> from your local file system and will not be synchronized to this computer anymore + - Connecting to %1 … - + Virtual file sync + - Unable to connect to %1. - + Warning + - Server configuration error: %1 at %2. - + You cannot encrypt a folder with contents, please remove the files. +Wait for the new sync, then encrypt it. + You need to accept the terms of service at %1. - + - No %1 connection configured. - + You seem to have the Virtual Files feature enabled on this folder. At the moment, it is not possible to implicitly download virtual files that are end-to-end encrypted. To get the best experience with virtual files and end-to-end encryption, make sure the encrypted folder is marked with "Make always available locally". + - + OCC::AccountSetupFromCommandLineJob - The authenticated request to the server was redirected to "%1". The URL is bad, the server is misconfigured. - + Access forbidden by server. To verify that you have proper access, <a href="%1">click here</a> to access the service with your browser. + - Access forbidden by server. To verify that you have proper access, <a href="%1">click here</a> to access the service with your browser. - + The authenticated request to the server was redirected to "%1". The URL is bad, the server is misconfigured. + There was an invalid response to an authenticated WebDAV request - + OCC::AccountState - Signed out - + Asking Credentials + - Disconnected - + Configuration error + Connected - + - Service unavailable - + Disconnected + Maintenance mode - + - Redirect detected - + Need the user to accept the terms of service + Network error - + - Configuration error - + Redirect detected + - Asking Credentials - + Service unavailable + - Need the user to accept the terms of service - + Signed out + Unknown account state - + OCC::ActivityListModel - For more activities please open the Activity app. - + Fetching activities … + - Fetching activities … - + For more activities please open the Activity app. + Network error occurred: client will retry syncing. - + OCC::AddCertificateDialog - SSL client certificate authentication - + An encrypted pkcs12 bundle is strongly recommended as a copy will be stored in the configuration file. + - This server probably requires a SSL client certificate. - + Browse … + Certificate & Key (pkcs12): - + - Certificate password: - + Certificate files (*.p12 *.pfx) + - - An encrypted pkcs12 bundle is strongly recommended as a copy will be stored in the configuration file. - + + Certificate password: + - Browse … - + SSL client certificate authentication + Select a certificate - + - Certificate files (*.p12 *.pfx) - + This server probably requires a SSL client certificate. + - + OCC::Application - Some settings were configured in %1 versions of this client and use features that are not available in this version.<br><br>Continuing will mean <b>%2 these settings</b>.<br><br>The current configuration file was already backed up to <i>%3</i>. - + %1 accounts + number of accounts imported + - newer - newer software version - + %1 folders + number of folders imported + - older - older software version - + 1 account + - ignoring - + 1 folder + - deleting - + Continue + - Quit - + Error accessing the configuration file + - Continue - + Imported %1 and %2 from a legacy desktop client. +%3 + number of accounts and folders imported. list of users. + - %1 accounts - number of accounts imported - + Legacy import + - 1 account - + Quit + - %1 folders - number of folders imported - + Some settings were configured in %1 versions of this client and use features that are not available in this version.<br><br>Continuing will mean <b>%2 these settings</b>.<br><br>The current configuration file was already backed up to <i>%3</i>. + - 1 folder - + There was an error while accessing the configuration file at %1. Please make sure the file can be accessed by your system account. + - - Legacy import - + + deleting + - Imported %1 and %2 from a legacy desktop client. -%3 - number of accounts and folders imported. list of users. - + ignoring + - Error accessing the configuration file - + newer + newer software version + - There was an error while accessing the configuration file at %1. Please make sure the file can be accessed by your system account. - + older + older software version + - + OCC::AuthenticationDialog - Authentication Required - + &Password: + - - Enter username and password for "%1" at %2. - + + &Username: + - &Username: - + Authentication Required + - &Password: - + Enter username and password for "%1" at %2. + - + OCC::BasePropagateRemoteDeleteEncrypted "%1 Failed to unlock encrypted folder %2". - + Wrong HTTP code returned by server. Expected 204, but received "%1 %2". - + OCC::BulkPropagatorJob + + Error updating metadata: %1 + + File %1 cannot be uploaded because another file with the same name, differing only in case, exists - + + + + File %1 has invalid modification time. Do not upload to the server. + File %1 has invalid modified time. Do not upload to the server. - + File Removed (start upload) %1 - + - File %1 has invalid modification time. Do not upload to the server. - + Local file changed during sync. + Local file changed during syncing. It will be resumed. - - - - Local file changed during sync. - + Network error: %1 - + - Error updating metadata: %1 - + Restoration failed: %1 + - + The file %1 is currently in use - + The local file was removed during sync. - - - - Restoration failed: %1 - + - + OCC::CaseClashConflictSolver Cannot rename file because a file with the same name already exists on the server. Please pick another name. - + Could not rename file. Please make sure you are connected to the server. - - - - You don't have the permission to rename this file. Please ask the author of the file to rename it. - + Failed to fetch permissions with error %1 - + Filename contains leading and trailing spaces. - + Filename contains leading spaces. - + Filename contains trailing spaces. - + - + + You don't have the permission to rename this file. Please ask the author of the file to rename it. + + + OCC::CaseClashFilenameDialog - Case Clash Conflict - + %1 does not support equal file names with only letter casing differences. + - The file could not be synced because it generates a case clash conflict with an existing file on this system. - + 0 byte + - Error - + Case Clash Conflict + - Existing file - + Case clashing file + - file A - + Error + - today - + Existing file + - 0 byte - + Filename contains illegal characters: %1 + + + + Filename contains leading and trailing spaces. + - Open existing file - + Filename contains leading spaces. + - Case clashing file - + Filename contains trailing spaces. + - file B - + New filename + Open clashing file - + - Please enter a new name for the clashing file: - + Open existing file + - New filename - + Please enter a new name for the clashing file: + Rename file - + The file "%1" could not be synced because of a case clash conflict with an existing file on this system. - - - - %1 does not support equal file names with only letter casing differences. - + - Filename contains leading and trailing spaces. - + The file could not be synced because it generates a case clash conflict with an existing file on this system. + - Filename contains leading spaces. - + Use invalid name + - Filename contains trailing spaces. - + file A + - Use invalid name - + file B + - Filename contains illegal characters: %1 - + today + - + OCC::CleanupPollsJob Error writing metadata to the database - + OCC::ClientSideEncryption - Input PIN code - Please keep it short and shorter than "Enter Certificate USB Token PIN:" - + Enter Certificate USB Token PIN: + - Enter Certificate USB Token PIN: - + Enter E2E passphrase + + + + Input PIN code + Please keep it short and shorter than "Enter Certificate USB Token PIN:" + Invalid PIN. Login failed - + Login to the token failed after providing the user PIN. It may be invalid or wrong. Please try again! - + Please enter your end-to-end encryption passphrase:<br><br>Username: %2<br>Account: %3<br> - - - - Enter E2E passphrase - + - + OCC::ConflictDialog - Sync Conflict - - - - Conflicting versions of %1. - + 0 byte + - Which version of the file do you want to keep?<br/>If you select both versions, the local file will have a number added to its name. - + <a href="%1">Open local version</a> + - Local version - + <a href="%1">Open server version</a> + Click to open the file - + - today - + Conflicting versions of %1. + - 0 byte - + Keep both versions + - <a href="%1">Open local version</a> - + Keep local version + - Server version - + Keep selected version + - <a href="%1">Open server version</a> - + Keep server version + - - Keep selected version - + + Local version + Open local version - + Open server version - + - Keep both versions - + Server version + - Keep local version - + Sync Conflict + - Keep server version - + Which version of the file do you want to keep?<br/>If you select both versions, the local file will have a number added to its name. + - + + today + + + OCC::ConflictSolver - Do you want to delete the directory <i>%1</i> and all its contents permanently? - + Confirm deletion + - Do you want to delete the file <i>%1</i> permanently? - + Do you want to delete the directory <i>%1</i> and all its contents permanently? + - Confirm deletion - + Do you want to delete the file <i>%1</i> permanently? + Error - + Moving file failed: %1 - + OCC::ConnectionValidator - Timeout - + Authentication error: Either username or password are wrong. + - The configured server for this client is too old - + No Nextcloud account configured + Please update to the latest server and restart the client. - - - - Authentication error: Either username or password are wrong. - + - No Nextcloud account configured - + The configured server for this client is too old + The provided credentials are not correct - + - + + Timeout + + + OCC::DiscoveryPhase - - Error while canceling deletion of a file - - Error while canceling deletion of %1 - + - + + Error while canceling deletion of a file + + + OCC::DiscoverySingleDirectoryJob - - Server error: PROPFIND reply is not XML formatted! - - Encrypted metadata setup error! - + Encrypted metadata setup error: initial signature from server is empty. - + - + + Server error: PROPFIND reply is not XML formatted! + + + OCC::DiscoverySingleLocalDirectoryJob - - Error while opening directory %1 - - Directory not accessible on client, permission denied - + Directory not found: %1 - + - Filename encoding is not valid - + Error while opening directory %1 + Error while reading directory %1 - + - + + Filename encoding is not valid + + + OCC::EditLocallyJob - Could not start editing locally. - + An error occurred during data retrieval. + An error occurred during setup. - + - Could not find a file for local editing. Make sure its path is valid and it is synced locally. - + An error occurred trying to synchronise the file to edit locally. + Could not find a file for local editing. Make sure it is not excluded via selective sync. - + - An error occurred during data retrieval. - + Could not find a file for local editing. Make sure its path is valid and it is synced locally. + - An error occurred trying to synchronise the file to edit locally. - + Could not find a remote file info for local editing. Make sure its path is valid. + - Server error: PROPFIND reply is not XML formatted! - + Could not open %1 + - Could not find a remote file info for local editing. Make sure its path is valid. - + Could not start editing locally. + - Invalid local file path. - + File %1 already locked. + - Could not open %1 - + File %1 could not be locked. + - - Please try again. - + + File %1 now locked. + - File %1 already locked. - + Invalid local file path. + Lock will last for %1 minutes. You can also unlock this file manually once you are finished editing. - + - File %1 now locked. - + Please try again. + - File %1 could not be locked. - + Server error: PROPFIND reply is not XML formatted! + - + OCC::EditLocallyManager Could not validate the request to open a file from server. - + Please try again. - + OCC::EditLocallyVerificationJob - Invalid token received. - + An error occurred trying to verify the request to edit locally. + - - Please try again. - + + Could not find an account for local editing. + - Invalid file path was provided. - + Could not start editing locally. + - Could not find an account for local editing. - + Invalid file path was provided. + - Could not start editing locally. - + Invalid token received. + - An error occurred trying to verify the request to edit locally. - + Please try again. + - + - OCC::EncryptFolderJob + OCC::EncryptedFolderMetadataHandler - Could not generate the metadata for encryption, Unlocking the folder. -This can be an issue with your OpenSSL libraries. - + Error fetching encrypted folder ID. + - - - OCC::EncryptedFolderMetadataHandler Error fetching metadata. - + Error locking folder. - - - - Error fetching encrypted folder ID. - + Error parsing or decrypting metadata. - + Failed to upload metadata - + - OCC::FileDetails - - %1 second(s) ago - seconds elapsed since file last modified - - - - + OCC::EncryptFolderJob + + Could not generate the metadata for encryption, Unlocking the folder. +This can be an issue with your OpenSSL libraries. + + + + OCC::FileDetails - %1 minute(s) ago - minutes elapsed since file last modified + %1 day(s) ago + days elapsed since file last modified - - + + %1 hour(s) ago hours elapsed since file last modified - - + + - %1 day(s) ago - days elapsed since file last modified + %1 minute(s) ago + minutes elapsed since file last modified - - + + %1 month(s) ago months elapsed since file last modified - - + + + + + + %1 second(s) ago + seconds elapsed since file last modified + + + %1 year(s) ago years elapsed since file last modified - - + + Locked by %1 - Expires in %2 minute(s) remaining time before lock expires - - + + OCC::Flow2Auth - Error returned from the server: <em>%1</em> - - - - The polling URL does not start with HTTPS despite the login URL started with HTTPS. Login will not be possible because this might be a security issue. Please contact your administrator. - + Could not parse the JSON returned from the server: <br><em>%1</em> + - There was an error accessing the "token" endpoint: <br><em>%1</em> - + Error returned from the server: <em>%1</em> + - Could not parse the JSON returned from the server: <br><em>%1</em> - + The polling URL does not start with HTTPS despite the login URL started with HTTPS. Login will not be possible because this might be a security issue. Please contact your administrator. + The reply from the server did not contain all expected fields - + The returned server URL does not start with HTTPS despite the login URL started with HTTPS. Login will not be possible because this might be a security issue. Please contact your administrator. - + - + + There was an error accessing the "token" endpoint: <br><em>%1</em> + + + OCC::Flow2AuthWidget - Unable to open the Browser, please copy the link to your Browser. - + Copy Link + + + + Link copied to clipboard. + - Waiting for authorization - + Open Browser + Polling for authorization - + Starting authorization - - - - Link copied to clipboard. - + - Open Browser - + Unable to open the Browser, please copy the link to your Browser. + - Copy Link - + Waiting for authorization + - + OCC::Folder - - %1 has been removed. - %1 names a file. - - - - %1 has been updated. - %1 names a file. - - - - %1 has been renamed to %2. - %1 and %2 name files. - - - - %1 has been moved to %2. - - - %1 and %n other file(s) have been removed. + %1 and %n other file(s) are currently locked. - - + + - - Please choose a different location. The folder %1 doesn't exist. - - - - Please choose a different location. %1 isn't a valid folder. - - - - Please choose a different location. %1 isn't a readable folder. - - - %1 and %n other file(s) have been added. + %1 and %n other file(s) could not be synced due to errors. See the log for details. - - + + - - %1 has been added. - %1 names a file. - - - %1 and %n other file(s) have been updated. + %1 and %n other file(s) have been added. - - + + - %1 has been renamed to %2 and %n other file(s) have been renamed. + %1 and %n other file(s) have been removed. - - + + - %1 has been moved to %2 and %n other file(s) have been moved. + %1 and %n other file(s) have been updated. - - + + + + %1 could not be synced due to an error. See the log for details. + + + + %1 has a sync conflict. Please check the conflict file! + + %1 has and %n other file(s) have sync conflicts. - - + + - %1 has a sync conflict. Please check the conflict file! - + %1 has been added. + %1 names a file. + - %1 and %n other file(s) could not be synced due to errors. See the log for details. + %1 has been moved to %2 and %n other file(s) have been moved. - - + + - %1 could not be synced due to an error. See the log for details. - + %1 has been moved to %2. + + + + %1 has been removed. + %1 names a file. + - %1 and %n other file(s) are currently locked. + %1 has been renamed to %2 and %n other file(s) have been renamed. - - + + - %1 is currently locked. - - - - Sync Activity - + %1 has been renamed to %2. + %1 and %2 name files. + - Could not read system exclude file - + %1 has been updated. + %1 names a file. + - A new folder larger than %1 MB has been added: %2. - - + %1 is currently locked. + A folder from an external storage has been added. - - - - Please go in the settings to select it if you wish to download it. - + A folder has surpassed the set folder size limit of %1MB: %2. %3 - - - - Keep syncing - - - - Stop syncing - - - - The folder %1 has surpassed the set folder size limit of %2MB. - + - Would you like to stop syncing this folder? - + A large number of files in the server have been deleted. +Please confirm if you'd like to proceed with these deletions. +Alternatively, you can restore all deleted files by uploading from '%1' folder to the server. + - The folder %1 was created but was excluded from synchronization previously. Data inside it will not be synchronized. - + A large number of files in your local '%1' folder have been deleted. +Please confirm if you'd like to proceed with these deletions. +Alternatively, you can restore all deleted files by downloading them from the server. + - The file %1 was created but was excluded from synchronization previously. It will not be synchronized. - + A new folder larger than %1 MB has been added: %2. + + Changes in synchronized folders could not be tracked reliably. @@ -1793,1373 +1774,1489 @@ This can be an issue with your OpenSSL libraries. This means that the synchronization client might not upload local changes immediately and will instead only scan for local changes and upload them occasionally (every two hours by default). %1 - + - Virtual file download failed with code "%1", status "%2" and error message "%3" - + Could not read system exclude file + - A large number of files in the server have been deleted. -Please confirm if you'd like to proceed with these deletions. -Alternatively, you can restore all deleted files by uploading from '%1' folder to the server. - + Keep syncing + - A large number of files in your local '%1' folder have been deleted. -Please confirm if you'd like to proceed with these deletions. -Alternatively, you can restore all deleted files by downloading them from the server. - + Please choose a different location. %1 isn't a readable folder. + - Remove all files? - + Please choose a different location. %1 isn't a valid folder. + + + + Please choose a different location. The folder %1 doesn't exist. + + + + Please go in the settings to select it if you wish to download it. + Proceed with Deletion - + - Restore Files to Server - + Remove all files? + Restore Files from Server - + - + + Restore Files to Server + + + + Stop syncing + + + + Sync Activity + + + + The file %1 was created but was excluded from synchronization previously. It will not be synchronized. + + + + The folder %1 has surpassed the set folder size limit of %2MB. + + + + The folder %1 was created but was excluded from synchronization previously. Data inside it will not be synchronized. + + + + Virtual file download failed with code "%1", status "%2" and error message "%3" + + + + Would you like to stop syncing this folder? + + + OCC::FolderCreationDialog + Could not create a folder! Check your write permissions. + + + Create new folder - + Enter folder name - - - - Folder already exists - + Error - + - Could not create a folder! Check your write permissions. - + Folder already exists + - + OCC::FolderMan - Could not reset folder state - + %1 (Sync is paused) + + + + (backup %1) + (backup) - + - (backup %1) - + An old sync journal "%1" was found, but could not be removed. Please make sure that no application is currently using it. + - An old sync journal "%1" was found, but could not be removed. Please make sure that no application is currently using it. - + Could not reset folder state + - Undefined state. - + Last sync was successful. + - Waiting to start syncing. - + Please choose a different location. %1 is already being used as a sync folder for %2. + folder location, server url + - Preparing for sync. - + Please choose a different location. %1 is already being used as a sync folder. + - Syncing %1 of %2 (A few seconds left) - + Please choose a different location. %1 is already contained in a folder used as a sync folder. + - Syncing %1 of %2 (%3 left) - + Please choose a different location. The path %1 doesn't exist. + - Syncing %1 of %2 - + Please choose a different location. The path %1 isn't a folder. + - Syncing %1 (A few seconds left) - + Please choose a different location. The selected folder isn't valid. + - Syncing %1 (%2 left) - + Please choose a different location. You don't have enough permissions to write to %1. + folder location + - Syncing %1 - + Preparing for sync. + - Sync is running. - + Setup error. + Sync finished with unresolved conflicts. - + - Last sync was successful. - + Sync is paused. + - Setup error. - + Sync is running. + Sync request was cancelled. - - - - Please choose a different location. The selected folder isn't valid. - + - Please choose a different location. %1 is already being used as a sync folder. - + Syncing %1 + - Please choose a different location. The path %1 doesn't exist. - + Syncing %1 (%2 left) + - Please choose a different location. The path %1 isn't a folder. - + Syncing %1 (A few seconds left) + - Please choose a different location. You don't have enough permissions to write to %1. - folder location - + Syncing %1 of %2 + - Please choose a different location. %1 is already contained in a folder used as a sync folder. - + Syncing %1 of %2 (%3 left) + - Please choose a different location. %1 is already being used as a sync folder for %2. - folder location, server url - + Syncing %1 of %2 (A few seconds left) + The folder %1 is linked to multiple accounts. This setup can cause data loss and it is no longer supported. To resolve this issue: please remove %1 from one of the accounts and create a new sync folder. For advanced users: this issue might be related to multiple sync database files found in one folder. Please check %1 for outdated and unused .sync_*.db files and remove them. - + - Sync is paused. - + Undefined state. + - %1 (Sync is paused) - + Waiting to start syncing. + - + OCC::FolderStatusDelegate Add Folder Sync Connection - + File - + OCC::FolderStatusModel - You need to be connected to add a folder - + %1 %2 + Example text: "Uploading foobar.png" + - Click this button to add a folder to synchronize. - + %1 %2 (%3 of %4) + Example text: "Uploading foobar.png (2MB of 2MB)" + - Could not decrypt! - + %1 %2 … + Example text: "Uploading foobar.png (1MB of 2MB) time left 2 minutes at a rate of 24Kb/s" Example text: "Syncing 'foo.txt', 'bar.txt'" + %1 (%2) - + - Error while loading the list of folders from the server. - + %1 of %2, file %3 of %4 + Example text: "12 MB of 345 MB, file 6 of 7" + - Virtual file support is enabled. - + %5 left, %1 of %2, file %3 of %4 + - Signed out - + , + - Synchronizing virtual files in local folder - + A few seconds left, %1 of %2, file %3 of %4 + Example text: "5 minutes left, 12 MB of 345 MB, file 6 of 7" + - Synchronizing files in local folder - + About to start syncing + - Checking for changes in remote "%1" - + Checking for changes in local "%1" + - Checking for changes in local "%1" - + Checking for changes in remote "%1" + - Syncing local and remote changes - + Click this button to add a folder to synchronize. + - %1 %2 … - Example text: "Uploading foobar.png (1MB of 2MB) time left 2 minutes at a rate of 24Kb/s" Example text: "Syncing 'foo.txt', 'bar.txt'" - + Could not decrypt! + Download %1/s Example text: "Download 24Kb/s" (%1 is replaced by 24Kb (translated)) - - - - File %1 of %2 - - - - There are unresolved conflicts. Click for details. - + - , - + Error while loading the list of folders from the server. + Fetching folder list from server … - + - ↓ %1/s - + File %1 of %2 + - Upload %1/s - Example text: "Upload 24Kb/s" (%1 is replaced by 24Kb (translated)) - + Preparing to sync … + + + + Signed out + - ↑ %1/s - + Synchronizing files in local folder + - %1 %2 (%3 of %4) - Example text: "Uploading foobar.png (2MB of 2MB)" - + Synchronizing virtual files in local folder + - %1 %2 - Example text: "Uploading foobar.png" - + Syncing local and remote changes + - A few seconds left, %1 of %2, file %3 of %4 - Example text: "5 minutes left, 12 MB of 345 MB, file 6 of 7" - + There are unresolved conflicts. Click for details. + - %5 left, %1 of %2, file %3 of %4 - + Upload %1/s + Example text: "Upload 24Kb/s" (%1 is replaced by 24Kb (translated)) + - %1 of %2, file %3 of %4 - Example text: "12 MB of 345 MB, file 6 of 7" - + Virtual file support is enabled. + Waiting for %n other folder(s) … - - + + - About to start syncing - + You need to be connected to add a folder + - Preparing to sync … - + ↑ %1/s + - + + ↓ %1/s + + + OCC::FolderWatcher The watcher did not receive a test notification. - + OCC::FolderWatcherPrivate This problem usually happens when the inotify watches are exhausted. Check the FAQ for details. - + OCC::FolderWizard Add Folder Sync Connection - + Add Sync Connection - + OCC::FolderWizardLocalPath Click to select a local folder to sync. - + Enter the path to the local folder. - + Select the source folder - + OCC::FolderWizardRemotePath - Create Remote Folder - + Authentication failed accessing %1 + - Enter the name of the new folder to be created below "%1": - + Choose this to sync the entire account + - Folder was successfully created on %1. - + Create Remote Folder + - Authentication failed accessing %1 - + Enter the name of the new folder to be created below "%1": + Failed to create the folder on %1. Please check manually. - + Failed to list a folder. Error: %1 - + - Choose this to sync the entire account - + Folder was successfully created on %1. + Please choose a different location. %1 is already being synced to %2. - + OCC::FolderWizardSelectiveSync - - Use virtual files instead of downloading content immediately %1 - - (experimental) - + - Virtual files are not supported for Windows partition roots as local folder. Please choose a valid subfolder under drive letter. - + Use virtual files instead of downloading content immediately %1 + Virtual files are not supported at the selected location - + - + + Virtual files are not supported for Windows partition roots as local folder. Please choose a valid subfolder under drive letter. + + + - OCC::GETFileJob + OCC::GeneralSettings - No E-Tag received from server, check Proxy/Gateway - + &Automatically check for updates + - We received a different E-Tag for resuming. Retrying next time. - + &Launch on System Startup + - We received an unexpected download Content-Length. - + &Restart && Update + - Server returned wrong content-range - + - beta: contains versions with new features that may not be tested thoroughly +- daily: contains versions created daily only for testing and development + +Downgrading versions is not possible immediately: changing from beta to stable means waiting for the new stable version. + list of available update channels to non enterprise users and downgrading warning + - Connection Timeout - + - enterprise: contains stable versions for customers. + +Downgrading versions is not possible immediately: changing from stable to enterprise means waiting for the new enterprise version. + list of available update channels to enterprise users and downgrading warning + - - - OCC::GeneralSettings - General Settings - + Advanced + - Show Call Notifications - + Ask for confirmation before synchronizing external storages + - For System Tray - + Ask for confirmation before synchronizing new folders larger than + - Show Chat Notifications - + Automatically disable synchronisation of folders that overcome limit + - Show Server &Notifications - + Cancel + - Advanced - + Change update channel + - MB - Trailing part of "Ask confirmation before syncing folder larger than" - + Changing update channel? + - Ask for confirmation before synchronizing external storages - + Check Now + - &Launch on System Startup - + Create Debug Archive + - Use &Monochrome Icons - + Debug Archive Created + - Ask for confirmation before synchronizing new folders larger than - + Debug archive is created at %1 + - - Notify when synchronised folders grow larger than specified limit - + + Desktop client x.x.x + - Automatically disable synchronisation of folders that overcome limit - + Edit &Ignored Files + - Move removed files to trash - + For System Tray + - Show sync folders in &Explorer's navigation pane - + General Settings + - Server poll interval - + Info + - seconds (if <a href="https://github.com/nextcloud/notify_push">Client Push</a> is unavailable) - + Legal Notice + - Edit &Ignored Files - + MB + Trailing part of "Ask confirmation before syncing folder larger than" + - Create Debug Archive - + Move removed files to trash + - Info - + Notify when synchronised folders grow larger than specified limit + - Desktop client x.x.x - + S&how crash reporter + - Update channel - + Server notifications that require attention. + - &Automatically check for updates - + Server poll interval + - Check Now - + Show Call Notifications + - Usage Documentation - + Show Chat Notifications + - Legal Notice - + Show Server &Notifications + - S&how crash reporter - + Show call notification dialogs. + - &Restart && Update - + Show chat notification dialogs. + - Server notifications that require attention. - + Show sync folders in &Explorer's navigation pane + - Show chat notification dialogs. - + The channel determines which upgrades will be offered to install: +- stable: contains tested versions considered reliable + + starts list of available update channels, stable is always available + - Show call notification dialogs. - + Update channel + - You cannot disable autostart because system-wide autostart is enabled. - + Usage Documentation + - stable - + Use &Monochrome Icons + - beta - + You cannot disable autostart because system-wide autostart is enabled. + - daily - + Zip Archives + - enterprise - + beta + - - beta: contains versions with new features that may not be tested thoroughly -- daily: contains versions created daily only for testing and development - -Downgrading versions is not possible immediately: changing from beta to stable means waiting for the new stable version. - list of available update channels to non enterprise users and downgrading warning - + daily + - - enterprise: contains stable versions for customers. - -Downgrading versions is not possible immediately: changing from stable to enterprise means waiting for the new enterprise version. - list of available update channels to enterprise users and downgrading warning - + enterprise + - Changing update channel? - + seconds (if <a href="https://github.com/nextcloud/notify_push">Client Push</a> is unavailable) + - The channel determines which upgrades will be offered to install: -- stable: contains tested versions considered reliable - - starts list of available update channels, stable is always available - + stable + + + + OCC::GETFileJob - Change update channel - + Connection Timeout + - - Cancel - + + No E-Tag received from server, check Proxy/Gateway + - Zip Archives - + Server returned wrong content-range + - Debug Archive Created - + We received a different E-Tag for resuming. Retrying next time. + - Debug archive is created at %1 - + We received an unexpected download Content-Length. + - + OCC::GetOrCreatePublicLinkShare + Could not retrieve or create the public link share. Error: + +%1 + + + Password for share required - + Please enter a password for your link share: - + Sharing error - - - - Could not retrieve or create the public link share. Error: - -%1 - + - + OCC::HttpCredentialsGui - Please enter %1 password:<br><br>Username: %2<br>Account: %3<br> - + <a href="%1">Click here</a> to request an app password from the web interface. + - - Reading from keychain failed with error: "%1" - + + Enter Password + - Enter Password - + Please enter %1 password:<br><br>Username: %2<br>Account: %3<br> + - <a href="%1">Click here</a> to request an app password from the web interface. - + Reading from keychain failed with error: "%1" + - + OCC::IgnoreListEditor - Ignored Files Editor - + Files Ignored by Patterns + Global Ignore Settings - + - Sync hidden files - + Ignored Files Editor + - Files Ignored by Patterns - + Sync hidden files + This entry is provided by the system at "%1" and cannot be modified in this view. - + OCC::IgnoreListTableWidget - Pattern - + Add + - Allow Deletion - + Add Ignore Pattern + - Add - + Add a new ignore pattern: + + + + Allow Deletion + - Remove - + Cannot write changes to "%1". + - Remove all - + Could not open file + Files or folders matching a pattern will not be synchronized. Items where deletion is allowed will be deleted if they prevent a directory from being removed. This is useful for meta data. - - - - Could not open file - + - Cannot write changes to "%1". - + Pattern + - Add Ignore Pattern - + Remove + - Add a new ignore pattern: - + Remove all + - + OCC::InvalidFilenameDialog - Invalid filename - + Cannot rename file because a file with the same name does already exist on the server. Please pick another name. + - The file could not be synced because it contains characters which are not allowed on this system. - + Checking rename permissions … + - Error - + Could not rename file. Please make sure you are connected to the server. + - Please enter a new name for the file: - + Could not rename local file. %1 + - - New filename - + + Error + - Rename file - + Failed to fetch permissions with error %1 + - The file "%1" could not be synced because the name contains characters which are not allowed on this system. - + Filename contains illegal characters: %1 + - The following characters are not allowed on the system: \ / : ? * " < > | leading/trailing spaces - + Filename contains leading and trailing spaces. + - The file "%1" could not be synced because the name contains characters which are not allowed on the server. - + Filename contains leading spaces. + - The following characters are not allowed: %1 - + Filename contains trailing spaces. + - The following basenames are not allowed: %1 - + Invalid filename + - The following filenames are not allowed: %1 - + New filename + - The following file extensions are not allowed: %1 - + Please enter a new name for the file: + - Checking rename permissions … - + Rename file + - You don't have the permission to rename this file. Please ask the author of the file to rename it. - + The file "%1" could not be synced because the name contains characters which are not allowed on the server. + - Failed to fetch permissions with error %1 - + The file "%1" could not be synced because the name contains characters which are not allowed on this system. + - Filename contains leading and trailing spaces. - + The file could not be synced because it contains characters which are not allowed on this system. + - Filename contains leading spaces. - + The following basenames are not allowed: %1 + - Filename contains trailing spaces. - + The following characters are not allowed on the system: \ / : ? * " < > | leading/trailing spaces + - Use invalid name - + The following characters are not allowed: %1 + - Filename contains illegal characters: %1 - + The following file extensions are not allowed: %1 + - Could not rename file. Please make sure you are connected to the server. - + The following filenames are not allowed: %1 + - Cannot rename file because a file with the same name does already exist on the server. Please pick another name. - + Use invalid name + - Could not rename local file. %1 - + You don't have the permission to rename this file. Please ask the author of the file to rename it. + - + OCC::LegalNotice - Legal notice - + <p>Copyright 2017-2025 Nextcloud GmbH<br />Copyright 2012-2023 ownCloud GmbH</p> + - Close - + <p>Licensed under the GNU General Public License (GPL) Version 2.0 or any later version.</p> + - - <p>Copyright 2017-2025 Nextcloud GmbH<br />Copyright 2012-2023 ownCloud GmbH</p> - + + Close + - <p>Licensed under the GNU General Public License (GPL) Version 2.0 or any later version.</p> - + Legal notice + - + OCC::LogBrowser + + Enable logging to temporary folder + + Log Output - + + Open folder + + + The client can write debug logs to a temporary folder. These logs are very helpful for diagnosing problems. Since log files can get large, the client will start a new one for each sync run and compress older ones. It will also delete log files after a couple of hours to avoid consuming too much disk space. If enabled, logs will be written to %1 - - - - Enable logging to temporary folder - + This setting persists across client restarts. Note that using any logging command line options will override this setting. - - - - Open folder - + - + OCC::Logger - - Error - - <nobr>File "%1"<br/>cannot be opened for writing.<br/><br/>The log output <b>cannot</b> be saved!</nobr> - + - + + Error + + + OCC::Mac::FileProviderEditLocallyJob - - Could not start editing locally. - - An error occurred during setup. - + Could not find a file for local editing. Make sure its path is valid and it is synced locally. - + Could not get file ID. - + Could not get file identifier. - + + + + Could not start editing locally. + The file identifier is empty. - + - OCC::NSISUpdater + OCC::NetworkSettings - New Version Available - + Download Bandwidth + - <p>A new version of the %1 Client is available.</p><p><b>%2</b> is available for download. The installed version is %3.</p> - + HTTP(S) proxy + - Update Failed - + Host + - <p>A new version of the %1 Client is available but the updating process failed.</p><p><b>%2</b> has been downloaded. The installed version is %3. If you confirm restart and update, your computer may reboot to complete the installation.</p> - + Hostname of proxy server + - Ask again later - + KBytes/s + - Restart and update - + Limit automatically + - Update manually - + Limit to + - Skip this time - + Limit to 3/4 of estimated bandwidth + - Get update - + Manually specify proxy + - - - OCC::NetworkSettings - Proxy Settings - + No limit + - Use system proxy - + No proxy + - Host - + Note: proxy settings have no effects for accounts on localhost + - Proxy server requires authentication - + Password for proxy server + - Download Bandwidth - + Proxy Settings + - Limit to - + Proxy server requires authentication + - KBytes/s - + SOCKS5 proxy + - - Note: proxy settings have no effects for accounts on localhost - + + Upload Bandwidth + - Manually specify proxy - + Use global settings + - No proxy - + Use system proxy + - Use global settings - + Username for proxy server + + + + OCC::NSISUpdater - No limit - + <p>A new version of the %1 Client is available but the updating process failed.</p><p><b>%2</b> has been downloaded. The installed version is %3. If you confirm restart and update, your computer may reboot to complete the installation.</p> + - Limit to 3/4 of estimated bandwidth - + <p>A new version of the %1 Client is available.</p><p><b>%2</b> is available for download. The installed version is %3.</p> + - Upload Bandwidth - + Ask again later + - Limit automatically - + Get update + - - Hostname of proxy server - + + New Version Available + - Username for proxy server - + Restart and update + - Password for proxy server - + Skip this time + - HTTP(S) proxy - + Update Failed + - SOCKS5 proxy - + Update manually + - + OCC::OCUpdater - Could not check for new updates. - - - - Checking update server … - + %1 available. Restart application to start the update. + - New %1 update ready - + A new update for %1 is about to be installed. The updater may ask for additional privileges during the process. Your computer may reboot to complete the installation. + - A new update for %1 is about to be installed. The updater may ask for additional privileges during the process. Your computer may reboot to complete the installation. - + Checking update server … + - Downloading %1 … - + Could not check for new updates. + - %1 available. Restart application to start the update. - + Could not download update. Please open %1 to download the update manually. + Could not download update. Please open <a href='%1'>%1</a> to download the update manually. - + - Could not download update. Please open %1 to download the update manually. - + Downloading %1 … + - New %1 is available. Please open <a href='%2'>%2</a> to download the update. - + New %1 is available. Please open %2 to download the update. + - New %1 is available. Please open %2 to download the update. - + New %1 is available. Please open <a href='%2'>%2</a> to download the update. + - Update status is unknown: Did not check for new updates. - + New %1 update ready + No updates available. Your installation is at the latest version. - + Update Check - + - + + Update status is unknown: Did not check for new updates. + + + OCC::OwncloudAdvancedSetupPage - Connect - + %1 folder "%2" is synced to local folder "%3" + - (experimental) - + %1 free space + %1 gets replaced with the size and a matching unit. Example: 3 MB or 5 GB + - Use &virtual files instead of downloading content immediately %1 - + (%1) + - Virtual files are not supported for Windows partition roots as local folder. Please choose a valid subfolder under drive letter. - + (experimental) + - %1 folder "%2" is synced to local folder "%3" - + Connect + + + + In Finder's "Locations" sidebar section + + + + Local Sync Folder + Sync the folder "%1" - + - Warning: The local folder is not empty. Pick a resolution! - + There isn't enough free space in the local folder! + - %1 free space - %1 gets replaced with the size and a matching unit. Example: 3 MB or 5 GB - + Use &virtual files instead of downloading content immediately %1 + Virtual files are not supported at the selected location - + - Local Sync Folder - + Virtual files are not supported for Windows partition roots as local folder. Please choose a valid subfolder under drive letter. + - (%1) - + Warning: The local folder is not empty. Pick a resolution! + + + + OCC::OwncloudConnectionMethodDialog - There isn't enough free space in the local folder! - + <html><head/><body><p>Failed to connect to the secure server address <em>%1</em>. How do you wish to proceed?</p></body></html> + + + + <html><head/><body><p>Failed to connect to the secure server address specified. How do you wish to proceed?</p></body></html> + - In Finder's "Locations" sidebar section - + Configure client-side TLS certificate + - - - OCC::OwncloudConnectionMethodDialog Connection failed - + - <html><head/><body><p>Failed to connect to the secure server address specified. How do you wish to proceed?</p></body></html> - + Retry unencrypted over HTTP (insecure) + Select a different URL - + + + + OCC::ownCloudGui - Retry unencrypted over HTTP (insecure) - + %1 (%2, %3) + + + + %1: %2 + Example text: "Nextcloud: Syncing 25MB (3 minutes left)" (%1 is the folder name to be synced, %2 a status message for that folder) + - Configure client-side TLS certificate - + Account %1: %2 + - <html><head/><body><p>Failed to connect to the secure server address <em>%1</em>. How do you wish to proceed?</p></body></html> - + Account synchronization is disabled + - + + Checking for changes in local "%1" + + + + Checking for changes in remote "%1" + + + + Disconnected from %1 + + + + Disconnected from accounts: + + + + Please sign in + + + + Terms of service + + + + The server on account %1 runs an unsupported version %2. Using this client with unsupported server versions is untested and potentially dangerous. Proceed at your own risk. + + + + There are no sync folders configured. + + + + Unsupported Server Version + + + + Your account %1 requires you to accept the terms of service of your server. You will be redirected to %2 to acknowledge that you have read it and agrees with it. + + + + macOS VFS for %1: A problem was encountered. + + + + macOS VFS for %1: Last sync was successful. + + + + macOS VFS for %1: Sync is running. + + + OCC::OwncloudHttpCredsPage &Email - + Connect to %1 - + Enter user credentials - + OCC::OwncloudPropagator Impossible to get modification time for file in conflict %1 - + OCC::OwncloudSetupPage - - The link to your %1 web interface when you open it in the browser. - %1 will be replaced with the application name - - &Next > - + + Could not load certificate. Maybe wrong password? + + + Server address does not seem to be valid - + - Could not load certificate. Maybe wrong password? - + The link to your %1 web interface when you open it in the browser. + %1 will be replaced with the application name + - + OCC::OwncloudSetupWizard - <font color="green">Successfully connected to %1: %2 version %3 (%4)</font><br/><br/> - + <font color="green"><b>File Provider-based account %1 successfully created!</b></font> + - Failed to connect to %1 at %2:<br/>%3 - + <font color="green"><b>Local sync folder %1 successfully created!</b></font> + - - Timeout while trying to connect to %1 at %2. - + + <font color="green">Successfully connected to %1: %2 version %3 (%4)</font><br/><br/> + - Access forbidden by server. To verify that you have proper access, <a href="%1">click here</a> to access the service with your browser. - + <p><font color="red">Remote folder creation failed probably because the provided credentials are wrong.</font><br/>Please go back and check your credentials.</p> + - Invalid URL - + A sync connection from %1 to remote directory %2 was set up. + - Trying to connect to %1 at %2 … - + Access forbidden by server. To verify that you have proper access, <a href="%1">click here</a> to access the service with your browser. + - The authenticated request to the server was redirected to "%1". The URL is bad, the server is misconfigured. - + Cannot remove and back up the folder because the folder or a file in it is open in another program. Please close the folder or file and hit retry or cancel the setup. + - There was an invalid response to an authenticated WebDAV request - + Connection to %1 could not be established. Please check again. + - Local sync folder %1 already exists, setting it up for sync.<br/><br/> - + Could not create local folder %1 + Creating local sync folder %1 … - - - - OK - + - failed. - + Error: %1 + - Could not create local folder %1 - + Failed to connect to %1 at %2:<br/>%3 + - No remote folder specified! - + Folder rename failed + - Error: %1 - + Invalid URL + - creating folder on Nextcloud: %1 - + Local sync folder %1 already exists, setting it up for sync.<br/><br/> + - Remote folder %1 created successfully. - + No remote folder specified! + - The remote folder %1 already exists. Connecting it for syncing. - + OK + - The folder creation resulted in HTTP error code %1 - + Remote folder %1 created successfully. + - The remote folder creation failed because the provided credentials are wrong!<br/>Please go back and check your credentials.</p> - + Remote folder %1 creation failed with error <tt>%2</tt>. + - <p><font color="red">Remote folder creation failed probably because the provided credentials are wrong.</font><br/>Please go back and check your credentials.</p> - + Successfully connected to %1! + - Remote folder %1 creation failed with error <tt>%2</tt>. - + The authenticated request to the server was redirected to "%1". The URL is bad, the server is misconfigured. + - A sync connection from %1 to remote directory %2 was set up. - + The folder creation resulted in HTTP error code %1 + - Successfully connected to %1! - + The remote folder %1 already exists. Connecting it for syncing. + - Connection to %1 could not be established. Please check again. - + The remote folder creation failed because the provided credentials are wrong!<br/>Please go back and check your credentials.</p> + - Folder rename failed - + There was an invalid response to an authenticated WebDAV request + - Cannot remove and back up the folder because the folder or a file in it is open in another program. Please close the folder or file and hit retry or cancel the setup. - + Timeout while trying to connect to %1 at %2. + - <font color="green"><b>File Provider-based account %1 successfully created!</b></font> - + Trying to connect to %1 at %2 … + Virtual files enabled - + Your account is now syncing with virtual files support. This means that all your files are online-only by default, and will be downloaded on-demand when you open them. You may find your files under the <b>Locations</b> section of the Finder sidebar. - + - <font color="green"><b>Local sync folder %1 successfully created!</b></font> - + creating folder on Nextcloud: %1 + - + + failed. + + + OCC::OwncloudWizard Add %1 account - - - - Skip folders configuration - + Cancel - + Enable experimental feature? - + + + + Enable experimental placeholder mode + + Skip folders configuration + + + + Stay safe + + + When the "virtual files" mode is enabled no files will be downloaded initially. Instead, a tiny "%1" file will be created for each file that exists on the server. The contents can be downloaded by running these files or by using their context menu. The virtual files mode is mutually exclusive with selective sync. Currently unselected folders will be translated to online-only folders and your selective sync settings will be reset. @@ -3167,2384 +3264,2286 @@ The virtual files mode is mutually exclusive with selective sync. Currently unse Switching to this mode will abort any currently running synchronization. This is a new, experimental mode. If you decide to use it, please report any issues that come up. - - - - Enable experimental placeholder mode - + - - Stay safe - - - + OCC::PasswordInputDialog Password for share required - + Please enter a password for your share: - + OCC::PollJob Invalid JSON reply from the poll URL - + OCC::ProcessDirectoryJob - Symbolic links are not supported in syncing. - + %1 name containing the character "%2" is not supported on this file system. + folder or file impossible to sync due to an invalid name, placeholders will be file or folder and the invalid character + - File is listed on the ignore list. - + %1 name contains at least one invalid character + - File names ending with a period are not supported on this file system. - + %1 name is a reserved name on this file system. + - Folder - name of folder entity to use when warning about invalid name - + Cannot be renamed or uploaded. + - File - name of folder entity to use when warning about invalid name - + Cannot modify encrypted item because the selected certificate is not valid. + - %1 name containing the character "%2" is not supported on this file system. - folder or file impossible to sync due to an invalid name, placeholders will be file or folder and the invalid character - + Cannot sync due to invalid modification time + - %1 name contains at least one invalid character - + Case Clash Conflict: Server file downloaded and renamed to avoid clash. + - %1 name is a reserved name on this file system. - + Conflict: Server version downloaded, local copy renamed and not uploaded. + - Filename contains trailing spaces. - + Could not upload file, because it is open in "%1". + - Cannot be renamed or uploaded. - + Error while deleting file record %1 from the database + - Filename contains leading spaces. - + Error while reading the database + - Filename contains leading and trailing spaces. - + File + name of folder entity to use when warning about invalid name + - Filename is too long. - + File has extension reserved for virtual files. + - File/Folder is ignored because it's hidden. - + File is listed on the ignore list. + - Stat failed. - + File names ending with a period are not supported on this file system. + - Conflict: Server version downloaded, local copy renamed and not uploaded. - + File/Folder is ignored because it's hidden. + - Case Clash Conflict: Server file downloaded and renamed to avoid clash. - + Filename contains leading and trailing spaces. + - The filename cannot be encoded on your file system. - + Filename contains leading spaces. + - The filename is blacklisted on the server. - + Filename contains trailing spaces. + - Reason: the entire filename is forbidden. - + Filename is too long. + - Reason: the filename has a forbidden base name (filename start). - + Folder + name of folder entity to use when warning about invalid name + - Reason: the file has a forbidden extension (.%1). - + Ignored because of the "choose what to sync" blacklist + - Reason: the filename contains a forbidden character (%1). - + Moved to invalid target, restoring + - File has extension reserved for virtual files. - + Not allowed because you don't have permission to add files in that folder + - size - + Not allowed because you don't have permission to add subfolders to that folder + - permission - + Not allowed to remove, restoring + - file id - + Not allowed to upload this file because it is read-only on the server, restoring + - Server reported no %1 - + Reason: the entire filename is forbidden. + - Cannot sync due to invalid modification time - + Reason: the file has a forbidden extension (.%1). + - Could not upload file, because it is open in "%1". - + Reason: the filename contains a forbidden character (%1). + - Error while deleting file record %1 from the database - + Reason: the filename has a forbidden base name (filename start). + - Moved to invalid target, restoring - + Server replied with an error while reading directory "%1" : %2 + - - Cannot modify encrypted item because the selected certificate is not valid. - + + Server reported no %1 + - Ignored because of the "choose what to sync" blacklist - + Stat failed. + - Not allowed because you don't have permission to add subfolders to that folder - + Symbolic links are not supported in syncing. + - Not allowed because you don't have permission to add files in that folder - + The filename cannot be encoded on your file system. + - Not allowed to upload this file because it is read-only on the server, restoring - + The filename is blacklisted on the server. + - Not allowed to remove, restoring - + file id + - Error while reading the database - + permission + - Server replied with an error while reading directory "%1" : %2 - + size + - + OCC::PropagateDirectory Could not delete file %1 from local DB - + Error updating metadata due to invalid modification time - + - The folder %1 cannot be made read-only: %2 - + Error updating metadata: %1 + - unknown exception - + File is currently in use + - - Error updating metadata: %1 - + + The folder %1 cannot be made read-only: %2 + - File is currently in use - + unknown exception + - + OCC::PropagateDownloadFile - Could not get file %1 from local DB - + Could not delete file record %1 from local DB + - File %1 cannot be downloaded because encryption information is missing. - + Could not get file %1 from local DB + - Could not delete file record %1 from local DB - + Error updating metadata: %1 + File %1 can not be downloaded because of a local file name clash! - + - The download would reduce free local disk space below the limit - + File %1 cannot be downloaded because encryption information is missing. + - Free space on disk is less than %1 - + File %1 downloaded but it resulted in a local file name clash! + - File was deleted from server - + File %1 has invalid modified time reported by server. Do not save it. + - The file could not be downloaded completely. - + File has changed since discovery + - - The downloaded file is empty, but the server said it should have been %1. - + + File was deleted from server + - File %1 has invalid modified time reported by server. Do not save it. - + Free space on disk is less than %1 + - File %1 downloaded but it resulted in a local file name clash! - + The download would reduce free local disk space below the limit + - Error updating metadata: %1 - + The downloaded file is empty, but the server said it should have been %1. + The file %1 is currently in use - + - File has changed since discovery - + The file could not be downloaded completely. + - + OCC::PropagateItemJob ; Restoration Failed: %1 - + A file or folder was removed from a read only share, but restoring failed: %1 - + OCC::PropagateLocalMkdir - could not delete file %1, error: %2 - + Could not create folder %1 + - Folder %1 cannot be created because of a local file or folder name clash! - + Error updating metadata: %1 + - Could not create folder %1 - + Folder %1 cannot be created because of a local file or folder name clash! + - The folder %1 cannot be made read-only: %2 - + The file %1 is currently in use + - - unknown exception - + + The folder %1 cannot be made read-only: %2 + - Error updating metadata: %1 - + could not delete file %1, error: %2 + - The file %1 is currently in use - + unknown exception + - + OCC::PropagateLocalRemove + Could not delete file record %1 from local DB + + + Could not remove %1 because of a local file name clash - + Temporary error when removing local item removed from server. - - - - Could not delete file record %1 from local DB - + - + OCC::PropagateLocalRename - Folder %1 cannot be renamed because of a local file or folder name clash! - - - - File %1 downloaded but it resulted in a local file name clash! - + Could not delete file record %1 from local DB + - + Could not get file %1 from local DB - + Error setting pin state - + Error updating metadata: %1 - - - - The file %1 is currently in use - + Failed to propagate directory rename in hierarchy - + Failed to rename file - + - Could not delete file record %1 from local DB - + File %1 downloaded but it resulted in a local file name clash! + - - - OCC::PropagateRemoteDelete - Wrong HTTP code returned by server. Expected 204, but received "%1 %2". - + Folder %1 cannot be renamed because of a local file or folder name clash! + + + + The file %1 is currently in use + + + + OCC::PropagateRemoteDelete Could not delete file record %1 from local DB - + - + + Wrong HTTP code returned by server. Expected 204, but received "%1 %2". + + + OCC::PropagateRemoteDeleteEncryptedRootFolder Wrong HTTP code returned by server. Expected 204, but received "%1 %2". - + OCC::PropagateRemoteMkdir - Wrong HTTP code returned by server. Expected 201, but received "%1 %2". - + Error writing metadata to the database: %1 + Failed to encrypt a folder %1 - - - - Error writing metadata to the database: %1 - + The file %1 is currently in use - + - + + Wrong HTTP code returned by server. Expected 201, but received "%1 %2". + + + OCC::PropagateRemoteMove - Could not rename %1 to %2, error: %3 - + Could not delete file record %1 from local DB + - Error updating metadata: %1 - + Could not get file %1 from local DB + - The file %1 is currently in use - + Could not rename %1 to %2, error: %3 + - Wrong HTTP code returned by server. Expected 201, but received "%1 %2". - + Error setting pin state + - Could not get file %1 from local DB - + Error updating metadata: %1 + - Could not delete file record %1 from local DB - + Error writing metadata to the database + - - Error setting pin state - + + The file %1 is currently in use + - Error writing metadata to the database - + Wrong HTTP code returned by server. Expected 201, but received "%1 %2". + - + OCC::PropagateUploadFileCommon - File %1 cannot be uploaded because another file with the same name, differing only in case, exists - + Error updating metadata: %1 + - File %1 has invalid modification time. Do not upload to the server. - + Failed to unlock encrypted folder. + - Local file changed during syncing. It will be resumed. - + Failed to upload encrypted file. + - Local file changed during sync. - + File %1 cannot be uploaded because another file with the same name, differing only in case, exists + - Failed to unlock encrypted folder. - + File %1 has invalid modification time. Do not upload to the server. + - Unable to upload an item with invalid characters - + File Removed (start upload) %1 + - - Error updating metadata: %1 - + + Local file changed during sync. + - The file %1 is currently in use - + Local file changed during syncing. It will be resumed. + - Upload of %1 exceeds the quota for the folder - + The file %1 is currently in use + - Failed to upload encrypted file. - + Unable to upload an item with invalid characters + - File Removed (start upload) %1 - + Upload of %1 exceeds the quota for the folder + - + OCC::PropagateUploadFileNG - - The local file was removed during sync. - - Local file changed during sync. - + - Poll URL missing - + Missing ETag from server + + + + Missing File ID from server + - Unexpected return code from server (%1) - + Poll URL missing + - Missing File ID from server - + The local file was removed during sync. + - Missing ETag from server - + Unexpected return code from server (%1) + - + OCC::PropagateUploadFileV1 - Poll URL missing - + Local file changed during sync. + - The local file was removed during sync. - + Poll URL missing + - Local file changed during sync. - + The local file was removed during sync. + The server did not acknowledge the last chunk. (No e-tag was present) - + OCC::ProxyAuthDialog - Proxy authentication required - + Password: + - - Username: - + + Proxy authentication required + Proxy: - + The proxy server needs a username and password. - + - Password: - + Username: + - + OCC::SelectiveSyncDialog Choose What to Sync - + OCC::SelectiveSyncWidget - Loading … - + An error occurred while loading the list of sub folders. + - + Deselect remote folders you do not wish to synchronize. - + - Name - + Loading … + - Size - + Name + No subfolders currently on the server. - + - An error occurred while loading the list of sub folders. - + Size + - + OCC::ServerNotificationHandler Reply - + OCC::SettingsDialog - - Settings - - %1 Settings This name refers to the application name e.g Nextcloud - + + Account + + + General - + Network - + - Account - + Settings + - + + + OCC::ShareeModel + + %1 (%2) + sharee (shareWithAdditionalInfo) + + + + Global search results + + + + No results found + + + + Search globally + + + OCC::ShareManager Error - + OCC::ShareModel %1 days - + 1 day - + - Today - + Could not find local folder for %1 + - - Secure file drop link - + + Internal link + - Share link - + Link share + - Link share - + Secure file drop + - Internal link - + Secure file drop link + - Secure file drop - + Share link + - Could not find local folder for %1 - + Today + - + - OCC::ShareeModel - - Search globally - - - - No results found - - - - Global search results - - + OCC::SocketApi - %1 (%2) - sharee (shareWithAdditionalInfo) - + Activity + - - - OCC::SocketApi Context menu share - + - I shared something with you - + Copy internal link + - Share options - + Copy private link to clipboard + - Send private link by email … - + Could not encrypt the following folder: "%1". + +Server replied with error: %2 + - Copy private link to clipboard - + Delete + - Failed to encrypt folder at "%1" - + Delete local changes + - The account %1 does not have end-to-end encryption configured. Please configure this in your account settings to enable folder encryption. - + Encrypt + + + + Expires in %1 minutes + remaining time before lock expires + + + + Failed to encrypt folder - + - Could not encrypt the following folder: "%1". - -Server replied with error: %2 - + Failed to encrypt folder at "%1" + Folder encrypted successfully - - - - The following folder was encrypted successfully: "%1" - + - Select new location … - - - - Activity - + I shared something with you + Leave this share - + - Resharing this file is not allowed - + Lock file + - Resharing this folder is not allowed - + Locked by %1 + - Encrypt - + Move and rename … + - Lock file - + Move and upload … + - Unlock file - + Move, rename and upload … + - Locked by %1 - + Open in browser + - - Expires in %1 minutes - remaining time before lock expires - - - - + + Resharing this file is not allowed + - Resolve conflict … - + Resharing this folder is not allowed + - Move and rename … - + Resolve conflict … + - Move, rename and upload … - + Select new location … + - Delete local changes - + Send private link by email … + - Move and upload … - + Share options + - Delete - + The account %1 does not have end-to-end encryption configured. Please configure this in your account settings to enable folder encryption. + - Copy internal link - + The following folder was encrypted successfully: "%1" + - Open in browser - + Unlock file + - + OCC::SslButton - <h3>Certificate Details</h3> - + %1 + - Common Name (CN): - + %1 (self-signed) + - Subject Alternative Names: - + <h3>Certificate Details</h3> + - Organization (O): - + <h3>Fingerprints</h3> + - Organizational Unit (OU): - + <h3>Issuer</h3> + - State/Province: - + <p><b>Note:</b> This certificate was manually approved</p> + - Country: - + Certificate information: + - Serial: - + Common Name (CN): + - <h3>Issuer</h3> - + Country: + - Issuer: - + Expires on: + Issued on: - + - Expires on: - - - - <h3>Fingerprints</h3> - + Issuer: + - SHA-256: - + No support for SSL session tickets/identifiers + - SHA-1: - + Organization (O): + - <p><b>Note:</b> This certificate was manually approved</p> - + Organizational Unit (OU): + - %1 (self-signed) - + SHA-1: + - %1 - + SHA-256: + - This connection is encrypted using %1 bit %2. - - + Serial: + Server version: %1 - + - No support for SSL session tickets/identifiers - + State/Province: + - Certificate information: - + Subject Alternative Names: + The connection is not secure - + This connection is NOT secure as it is not encrypted. - + - + + This connection is encrypted using %1 bit %2. + + + + OCC::SslErrorDialog - Trust this certificate anyway - + &lt;not specified&gt; + - Untrusted Certificate - + Additional errors: + Cannot connect securely to <i>%1</i>: - - - - Additional errors: - + - with Certificate %1 - + Country: %1 + - &lt;not specified&gt; - + Effective Date: %1 + - Organization: %1 - + Expiration Date: %1 + - Unit: %1 - + Fingerprint (SHA-256): <tt>%1</tt> + - Country: %1 - + Fingerprint (SHA-512): <tt>%1</tt> + Fingerprint (SHA1): <tt>%1</tt> - + - Fingerprint (SHA-256): <tt>%1</tt> - + Issuer: %1 + + + + Organization: %1 + - Fingerprint (SHA-512): <tt>%1</tt> - + Trust this certificate anyway + - Effective Date: %1 - + Unit: %1 + - Expiration Date: %1 - + Untrusted Certificate + - Issuer: %1 - + with Certificate %1 + - + OCC::SyncEngine %1 (skipped due to earlier error, trying again in %2) - + - Only %1 are available, need at least %2 to start - Placeholders are postfixed with file sizes using Utility::octetsToString() - + Cannot open the sync journal + - - Unable to open or create the local sync database. Make sure you have write access in the sync folder. - + + Could not set file record to local DB: %1 + - Disk space is low: Downloads that would reduce free space below %1 were skipped. - + Could not update file metadata: %1 + - There is insufficient space available on the server for some uploads. - + Could not update file: %1 + - Unresolved conflict. - + Could not update virtual file metadata: %1 + - Could not update file: %1 - + Disk space is low: Downloads that would reduce free space below %1 were skipped. + - Could not update virtual file metadata: %1 - + Only %1 are available, need at least %2 to start + Placeholders are postfixed with file sizes using Utility::octetsToString() + - Could not update file metadata: %1 - + There is insufficient space available on the server for some uploads. + - Could not set file record to local DB: %1 - + Unable to open or create the local sync database. Make sure you have write access in the sync folder. + - Using virtual files with suffix, but suffix is not set - + Unable to read from the sync journal. + Unable to read the blacklist from the local database - + - Unable to read from the sync journal. - + Unresolved conflict. + - Cannot open the sync journal - + Using virtual files with suffix, but suffix is not set + - + OCC::SyncStatusSummary - Offline - + %1 of %2 + - All synced! - + %1 of %2 · %3 left + - Some files couldn't be synced! - + All synced! + - See below for errors - + Checking folder changes + - Checking folder changes - + Offline + - Syncing changes - + See below for errors + - Sync paused - + See below for warnings + Some files could not be synced! - + - See below for warnings - + Some files couldn't be synced! + - Syncing - + Sync paused + - %1 of %2 · %3 left - + Syncing + - %1 of %2 - + Syncing changes + Syncing file %1 of %2 - + OCC::Systray - - Download - - Add account - + - Open main dialog - + Download + - Pause sync - + Exit %1 + - Resume sync - + Help + - Settings - + Open main dialog + - Help - + Pause sync + - Exit %1 - + Pause sync for all + - Pause sync for all - + Resume sync + Resume sync for all - + - + + Settings + + + OCC::TermsOfServiceCheckWidget - Waiting for terms to be accepted - - - - Polling - + Copy Link + - + Link copied to clipboard. - + Open Browser - + - Copy Link - + Polling + - + + Waiting for terms to be accepted + + + OCC::Theme %1 Desktop Client Version %2 (%3) %1 is application name. %2 is the human version string. %3 is the operating system name. - + <p><small>Using virtual files plugin: %1</small></p> - + <p>This release was supplied by %1.</p> - + OCC::UnifiedSearchResultsListModel Failed to fetch providers. - + Failed to fetch search providers for '%1'. Error: %2 - - - - Search has failed for '%2'. - + Search has failed for '%1'. Error: %2 - + - + + Search has failed for '%2'. + + + OCC::UpdateE2eeFolderMetadataJob - Failed to update folder metadata. - + Failed to finalize item. + - + Failed to unlock encrypted folder. - + - Failed to finalize item. - + Failed to update folder metadata. + - + OCC::UpdateE2eeFolderUsersMetadataJob - Error updating metadata for a folder %1 - + Could not add or remove user %1 to access folder %2 + Could not fetch public key for user %1 - + Could not find root encrypted folder for folder %1 - + - Could not add or remove user %1 to access folder %2 - + Error updating metadata for a folder %1 + Failed to unlock a folder. - + OCC::User - - End-to-end certificate needs to be migrated to a new one - - - - Trigger the migration - - %n notification(s) - - + + - Retry all uploads - + End-to-end certificate needs to be migrated to a new one + - Resolve conflict - + Open Nextcloud Assistant in browser + + Open Nextcloud Talk in browser + + + Rename file - + - Open Nextcloud Assistant in browser - + Resolve conflict + - Open Nextcloud Talk in browser - + Retry all uploads + - - - OCC::UserModel - Confirm Account Removal - + Trigger the migration + + + + OCC::UserModel <p>Do you really want to remove the connection to the account <i>%1</i>?</p><p><b>Note:</b> This will <b>not</b> delete any files.</p> - + - Remove connection - + Cancel + + + + Confirm Account Removal + - Cancel - + Remove connection + - + OCC::UserStatusSelectorModel - - Could not fetch predefined statuses. Make sure you are connected to the server. - + + %1 days + + + + + + + %1 hours + + + + + + + %1 minutes + + + + - Could not fetch status. Make sure you are connected to the server. - + 1 day + - Status feature is not supported. You will not be able to set your status. - + 1 hour + - Emojis are not supported. Some status functionality may not work. - + 1 minute + - Could not set status. Make sure you are connected to the server. - + 30 minutes + - Could not clear status message. Make sure you are connected to the server. - + 4 hours + - Don't clear - + Could not clear status message. Make sure you are connected to the server. + - 30 minutes - + Could not fetch predefined statuses. Make sure you are connected to the server. + - 1 hour - + Could not fetch status. Make sure you are connected to the server. + - 4 hours - + Could not set status. Make sure you are connected to the server. + - Today - + Don't clear + - This week - + Emojis are not supported. Some status functionality may not work. + Less than a minute - + - 1 minute - - - - %1 minutes - - - - - - - %1 hours - - - - + Status feature is not supported. You will not be able to set your status. + - 1 day - + This week + - - %1 days - - - - + + Today + - + OCC::Vfs Please choose a different location. %1 is a drive. It doesn't support virtual files. - - - - Please choose a different location. %1 isn't a NTFS file system. It doesn't support virtual files. - + Please choose a different location. %1 is a network drive. It doesn't support virtual files. - + - + + Please choose a different location. %1 isn't a NTFS file system. It doesn't support virtual files. + + + OCC::VfsDownloadErrorDialog - Download error - + %1 could not be downloaded. + - - Error downloading - + + > More details + - could not be downloaded - + Download error + - > More details - + Error downloading + - More details - + Error downloading %1 + - Error downloading %1 - + More details + - %1 could not be downloaded. - + could not be downloaded + - + OCC::VfsSuffix Error updating metadata due to invalid modification time - + OCC::VfsXAttr Error updating metadata due to invalid modification time - + OCC::WebEnginePage Invalid certificate detected - + The host "%1" provided an invalid certificate. Continue? - + OCC::WebFlowCredentials You have been logged out of your account %1 at %2. Please login again. - + OCC::WelcomePage - Form - + Easy-to-use web mail, calendaring & contacts + - Log in - + Form + - Sign up with provider - + Host your own server + - + Keep your data secure and under your control - + - Secure collaboration & file exchange - + Log in + - Easy-to-use web mail, calendaring & contacts - + Screensharing, online meetings & web conferences + - Screensharing, online meetings & web conferences - + Secure collaboration & file exchange + - Host your own server - + Sign up with provider + - + - OCC::ownCloudGui + OwncloudAdvancedSetupPage - Please sign in - + &Local Folder + + + + <html><head/><body><p>If this box is checked, existing content in the local folder will be erased to start a clean sync from the server.</p><p>Do not check this if the local content should be uploaded to the servers folder.</p></body></html> + - There are no sync folders configured. - + Ask before syncing external storages + - Disconnected from %1 - + Ask before syncing folders larger than + - Unsupported Server Version - + Choose different folder + - The server on account %1 runs an unsupported version %2. Using this client with unsupported server versions is untested and potentially dangerous. Proceed at your own risk. - + Choose what to sync + - Terms of service - + Erase local folder and start a clean sync + - Your account %1 requires you to accept the terms of service of your server. You will be redirected to %2 to acknowledge that you have read it and agrees with it. - + Keep local data + - %1: %2 - Example text: "Nextcloud: Syncing 25MB (3 minutes left)" (%1 is the folder name to be synced, %2 a status message for that folder) - + Local Folder + - macOS VFS for %1: Sync is running. - + MB + Trailing part of "Ask confirmation before syncing folder larger than" + - macOS VFS for %1: Last sync was successful. - + Server address + - macOS VFS for %1: A problem was encountered. - + Sync Logo + - Checking for changes in remote "%1" - + Synchronize everything from server + - Checking for changes in local "%1" - + Username + + + + OwncloudHttpCredsPage - Disconnected from accounts: - + &Password + + + + &Username + + + + + OwncloudSetupPage + + Logo + - Account %1: %2 - + Server address + - Account synchronization is disabled - + TextLabel + - %1 (%2, %3) - + This is the link to your %1 web interface when you open it in the browser. + - OwncloudAdvancedSetupPage + progress - Username - + Deleted + - Local Folder - + Deleting + - Choose different folder - + Downloaded + - Server address - + Downloading + - Sync Logo - + Error + - Synchronize everything from server - + Filesystem access error + - Ask before syncing folders larger than - + Ignored + - Ask before syncing external storages - + Ignoring + - Keep local data - + Moved to %1 + - <html><head/><body><p>If this box is checked, existing content in the local folder will be erased to start a clean sync from the server.</p><p>Do not check this if the local content should be uploaded to the servers folder.</p></body></html> - + Moving + - Erase local folder and start a clean sync - + Replaced by virtual file + - MB - Trailing part of "Ask confirmation before syncing folder larger than" - + Server version downloaded, copied changed local file into case conflict conflict file + - Choose what to sync - + Server version downloaded, copied changed local file into conflict file + - &Local Folder - + Unknown + - - - OwncloudHttpCredsPage - &Username - + Updated end-to-end encryption metadata + - &Password - + Updated local metadata + - - - OwncloudSetupPage - TextLabel - + Updated local virtual files metadata + - Logo - + Updating end-to-end encryption metadata + + + + Updating local metadata + - Server address - + Updating local virtual files metadata + - This is the link to your %1 web interface when you open it in the browser. - + Uploaded + - + + Uploading + + + + Virtual file created + + + QObject + + %1: %2 + this displays an error string (%2) for a file %1 + + %nd delay in days after an activity - - + + - - in the future - - %nh delay in hours after an activity - - + + - - 1m - one minute after activity date and time - - %nm delay in minutes after an activity - - + + - now - + 1m + one minute after activity date and time + - Some time ago - + Could not create debug archive in selected location! + - %1: %2 - this displays an error string (%2) for a file %1 - + Error deleting the file + - New folder - + Failed to create debug archive + - Failed to create debug archive - + New folder + - Could not create debug archive in selected location! - + Paths beginning with '#' character are not supported in VFS mode. + + + + Some time ago + - You renamed %1 - + Synced %1 + - You deleted %1 - + You changed %1 + You created %1 - + - You changed %1 - + You deleted %1 + - Synced %1 - + You renamed %1 + - Error deleting the file - + in the future + - Paths beginning with '#' character are not supported in VFS mode. - + now + - + ResolveConflictsDialog - - Solve sync conflicts - - %1 files in conflict indicate the number of conflicts to resolve - - + + - - Choose if you want to keep the local version, server version, or both. If you choose both, the local file will have a number added to its name. - - All local versions - + All server versions - + + + + Cancel + + + + Choose if you want to keep the local version, server version, or both. If you choose both, the local file will have a number added to its name. + Resolve conflicts - + - Cancel - + Solve sync conflicts + - + ShareDelegate Copied! - + ShareDetailsPage - An error occurred setting the share password. - + Add another link + - Edit share - + Allow resharing + - Share label - + Allow upload and editing + - Allow upload and editing - + An error occurred setting the share password. + - View only - + Copy share link + + + + Edit share + - File drop (upload only) - + Enter a note for the recipient + - Allow resharing - + File drop (upload only) + Hide download - + + + + Note to recipient + Password protection - + Set expiration date - + - Note to recipient - + Share label + - Enter a note for the recipient - + Share link copied! + Unshare - + - Add another link - + View only + + + + ShareeSearchField - Share link copied! - + Search for users or groups… + - Copy share link - + Sharing is not available for this folder + ShareView + + Expires in %1 + + Password required for new share - + Share password - + Shared with you by %1 - - - - Expires in %1 - + Sharing is disabled - - - - This item cannot be shared. - + Sharing is disabled. - + - - - ShareeSearchField - - Search for users or groups… - - - - Sharing is not available for this folder - + + This item cannot be shared. + - + SyncJournalDb Failed to connect database. - + SyncStatus - Sync now - + Open browser + - + Resolve conflicts - + - Open browser - + Sync now + - + TalkReplyTextField Reply to … - + Send reply to chat message - + TermsOfServiceCheckWidget - - Terms of Service - - Logo - + Switch to your browser to accept the terms of service - + - + + Terms of Service + + + - TrayWindowHeader + theme - Open local or group folders - + Error occurred during setup + + + + Error occurred during sync + + + Preparing to sync + + + + Stopping sync + + + + Sync is paused + + + + Sync is running + + + + Sync status is unknown + + + + Sync was successful + + + + Sync was successful but some files were ignored + + + + Waiting to start syncing + + + + + TrayWindowHeader More apps - + Open %1 in browser - + - + + Open local or group folders + + + UnifiedSearchInputContainer Search files, messages, events … - + UnifiedSearchPlaceholderView Start typing to search - + UnifiedSearchResultFetchMoreTrigger Load more results - + UnifiedSearchResultItemSkeleton Search result skeleton. - + UnifiedSearchResultListItem Load more results - + UnifiedSearchResultNothingFound No results for - + UnifiedSearchResultSectionItem Search results section %1 - + UserLine - Switch to account - - - - Current account status is online - + Account actions + Current account status is do not disturb - + - Account actions - + Current account status is online + - Set status - + Log in + Log out - + - Log in - + Remove account + + + + Set status + - Remove account - + Switch to account + - + UserStatusSelector - Online status - + Appear offline + - Online - + Apply + - + Away - + - Do not disturb - + Cancel + - Mute all notifications - + Clear + - Invisible - + Clear status message after + - Appear offline - + Do not disturb + - Status message - + Invisible + - What is your status? - + Mute all notifications + - Clear status message after - + Online + - Cancel - + Online status + - Clear - + Status message + - Apply - + What is your status? + - + Utility - %L1 GB - + %1 %2 + + + + %L1 B + - %L1 MB - + %L1 GB + %L1 KB - + - %L1 B - + %L1 MB + %L1 TB - + - %n year(s) + %n day(s) - - + + - %n month(s) + %n hour(s) - - + + - %n day(s) + %n minute(s) - - + + - %n hour(s) + %n month(s) - - + + - %n minute(s) + %n second(s) - - + + - %n second(s) + %n year(s) - - + + - - %1 %2 - - - - - ValidateChecksumHeader - - The checksum header is malformed. - - - - The checksum header contained an unknown checksum type "%1" - - - - The downloaded file does not match the checksum, it will be resumed. "%1" != "%2" - - - - - main.cpp - - System Tray not available - - - - %1 requires on a working system tray. If you are running XFCE, please follow <a href="http://docs.xfce.org/xfce/xfce4-panel/systray">these instructions</a>. Otherwise, please install a system tray application such as "trayer" and try again. - - - + - nextcloudTheme::aboutInfo() - - <p><small>Built from Git revision <a href="%1">%2</a> on %3, %4 using Qt %5, %6</small></p> - - - - - progress - - Virtual file created - - - - Replaced by virtual file - - - - Downloaded - - - - Uploaded - - - - Server version downloaded, copied changed local file into conflict file - - - - Server version downloaded, copied changed local file into case conflict conflict file - - - - Deleted - - - - Moved to %1 - - - - Ignored - - - - Filesystem access error - - - - Error - - - - Updated local metadata - - - - Updated local virtual files metadata - - - - Updated end-to-end encryption metadata - - - - Unknown - - - - Downloading - - - - Uploading - - - - Deleting - - - - Moving - - - - Ignoring - - - - Updating local metadata - - - - Updating local virtual files metadata - - - - Updating end-to-end encryption metadata - - - - - theme - - Sync status is unknown - - - - Waiting to start syncing - - - - Sync is running - - + utility - Sync was successful - + Always available locally + - Sync was successful but some files were ignored - + Available online only + - Error occurred during sync - + Could not open browser + - Error occurred during setup - + Could not open email client + - Stopping sync - + Currently available locally + - Preparing to sync - + Free up local space + - - Sync is paused - + + Make always available locally + - - - utility - Could not open browser - + Some available online only + There was an error when launching the browser to go to URL %1. Maybe no default browser is configured? - - - - Could not open email client - + There was an error when launching the email client to create a new message. Maybe no default email client is configured? - - - - Always available locally - - - - Currently available locally - - - - Some available online only - + + + + ValidateChecksumHeader - Available online only - + The checksum header contained an unknown checksum type "%1" + - Make always available locally - + The checksum header is malformed. + - Free up local space - + The downloaded file does not match the checksum, it will be resumed. "%1" != "%2" + - + \ No newline at end of file diff --git a/translations/client_en_GB.ts b/translations/client_en_GB.ts index 84a48fec44f54..8294605af22c0 100644 --- a/translations/client_en_GB.ts +++ b/translations/client_en_GB.ts @@ -1,49 +1,44 @@ - - + ActivityItem - - Open %1 locally - Open %1 locally - In %1 In %1 - + + Open %1 locally + Open %1 locally + + ActivityItemContent - - Open file details - Open file details - Dismiss Dismiss - + + Open file details + Open file details + + ActivityList Activity list Activity list - - Scroll to top - Scroll to top - No activities yet No activities yet - + + Scroll to top + Scroll to top + + CallNotificationDialog - - Talk notification caller avatar - Talk notification caller avatar - Answer Talk call notification Answer Talk call notification @@ -56,7 +51,11 @@ Decline Talk call notification Decline Talk call notification - + + Talk notification caller avatar + Talk notification caller avatar + + CloudProviderWrapper @@ -68,62 +67,62 @@ Checking for changes in "%1" - Syncing %1 of %2 (%3 left) - Syncing %1 of %2 (%3 left) - - - Syncing %1 of %2 - Syncing %1 of %2 - - - Syncing %1 (%2 left) - Syncing %1 (%2 left) + Help + Help - Syncing %1 - Syncing %1 + Log out + Log out No recently changed files No recently changed files - Sync paused - Sync paused + Open website + Open website - Syncing - Syncing + Pause synchronization + Pause synchronization - Open website - Open website + Quit sync client + Quit sync client - + Recently changed Recently changed - Pause synchronization - Pause synchronization + Settings + Settings - Help - Help + Sync paused + Sync paused - Settings - Settings + Syncing + Syncing - Log out - Log out + Syncing %1 + Syncing %1 - Quit sync client - Quit sync client + Syncing %1 (%2 left) + Syncing %1 (%2 left) - + + Syncing %1 of %2 + Syncing %1 of %2 + + + Syncing %1 of %2 (%3 left) + Syncing %1 of %2 (%3 left) + + ConflictDelegate @@ -138,18 +137,10 @@ CurrentAccountHeaderButton - Current account - Current account - - - Resume sync for all - Resume sync for all - - - Pause sync for all - Pause sync for all + Account switcher and settings menu + Account switcher and settings menu - + Add account Add account @@ -158,30 +149,38 @@ Add new account - Settings - Settings - - - Exit - Exit + Current account + Current account Current account avatar Current account avatar + + Current account status is do not disturb + Current account status is do not disturb + Current account status is online Current account status is online - Current account status is do not disturb - Current account status is do not disturb + Exit + Exit - Account switcher and settings menu - Account switcher and settings menu + Pause sync for all + Pause sync for all - + + Resume sync for all + Resume sync for all + + + Settings + Settings + + EditFileLocallyLoadingDialog @@ -205,23 +204,23 @@ EncryptionTokenSelectionWindow - - Token Encryption Key Chooser - Token Encryption Key Chooser - Available Keys for end-to-end Encryption: Available Keys for end-to-end Encryption: + Cancel + Cancel + + Choose Choose - Cancel - Cancel + Token Encryption Key Chooser + Token Encryption Key Chooser - + ErrorBox @@ -253,15 +252,15 @@ Evict materialised files Evict materialised files - - Reload - Reload - Materialised items Materialised items - + + Reload + Reload + + FileProviderFastEnumerationSettings @@ -283,24 +282,20 @@ FileProviderSettings - Virtual files settings - Virtual files settings + Enable virtual files + Enable virtual files - + General settings General settings - Enable virtual files - Enable virtual files + Virtual files settings + Virtual files settings - + FileProviderStorageInfo - - Local storage use - Local storage use - %1 GB of %2 GB remote files synced %1 GB of %2 GB remote files synced @@ -309,42 +304,50 @@ Evict local copies … Evict local copies … - + + Local storage use + Local storage use + + FileProviderSyncStatus - - Syncing - Syncing - All synced! All synced! - - Request sync - Request sync - Request a sync of changes for the VFS environment. macOS may ignore or delay this request. Request a sync of changes for the VFS environment. macOS may ignore or delay this request. - - - FileSystem + + Request sync + Request sync + - Error removing "%1": %2 - Error removing "%1": %2 + Syncing + Syncing + + + FileSystem Could not remove folder "%1" Could not remove folder "%1" - + + Error removing "%1": %2 + Error removing "%1": %2 + + Flow2AuthWidget + An error occurred while connecting. Please try again. + An error occurred while connecting. Please try again. + + Browser Authentication Browser Authentication @@ -356,44 +359,55 @@ macOS may ignore or delay this request. Switch to your browser to connect your account Switch to your browser to connect your account - - An error occurred while connecting. Please try again. - An error occurred while connecting. Please try again. - - + FolderWizardSourcePage - - Pick a local folder on your computer to sync - Pick a local folder on your computer to sync - &Choose … &Choose … - + + Pick a local folder on your computer to sync + Pick a local folder on your computer to sync + + FolderWizardTargetPage - - Select a remote destination folder - Select a remote destination folder - Create folder Create folder + Folders + Folders + + Refresh Refresh - Folders - Folders + Select a remote destination folder + Select a remote destination folder - + + + main.cpp + + %1 requires on a working system tray. If you are running XFCE, please follow <a href="http://docs.xfce.org/xfce/xfce4-panel/systray">these instructions</a>. Otherwise, please install a system tray application such as "trayer" and try again. + %1 requires on a working system tray. If you are running XFCE, please follow <a href="http://docs.xfce.org/xfce/xfce4-panel/systray">these instructions</a>. Otherwise, please install a system tray application such as "trayer" and try again. + + + System Tray not available + System Tray not available + + MainWindow + New activities + New activities + + Nextcloud desktop main dialog Nextcloud desktop main dialogue @@ -401,9 +415,12 @@ macOS may ignore or delay this request. Unified search results list Unified search results list + + + nextcloudTheme::aboutInfo() - New activities - New activities + <p><small>Built from Git revision <a href="%1">%2</a> on %3, %4 using Qt %5, %6</small></p> + <p><small>Built from Git revision <a href="%1">%2</a> on %3, %4 using Qt %5, %6</small></p> @@ -412,15 +429,15 @@ macOS may ignore or delay this request. Connection timed out Connection timed out - - Unknown error: network reply was deleted - Unknown error: network reply was deleted - Server replied "%1 %2" to "%3 %4" Server replied "%1 %2" to "%3 %4" - + + Unknown error: network reply was deleted + Unknown error: network reply was deleted + + OCC::Account @@ -444,384 +461,384 @@ Should the accounts be imported? %1 accounts were detected from a legacy desktop client. Should the accounts be imported? - - Legacy import - Legacy import - - - Import - Import - 1 account was detected from a legacy desktop client. Should the account be imported? 1 account was detected from a legacy desktop client. Should the account be imported? - - Skip - Skip - Could not import accounts from legacy client configuration. Could not import accounts from legacy client configuration. - + + Import + Import + + + Legacy import + Legacy import + + + Skip + Skip + + OCC::AccountSettings - Unchecked folders will be <b>removed</b> from your local file system and will not be synchronized to this computer anymore - Unchecked folders will be <b>removed</b> from your local file system and will not be synchronised to this computer any more + %1 (%3%) of %2 in use. Some folders, including network mounted or shared folders, might have different limits. + %1 (%3%) of %2 in use. Some folders, including network mounted or shared folders, might have different limits. - Synchronize all - Synchronise all + %1 as %2 + %1 as %2 - Synchronize none - Synchronize none + %1 in use + %1 in use - Apply manual changes - Apply manual changes + %1 of %2 in use + %1 of %2 in use - Standard file sync - Standard file sync + (experimental) + (experimental) - Virtual file sync - Virtual file sync + <p>Could not create local folder <i>%1</i>.</p> + <p>Could not create local folder <i>%1</i>.</p> - Connection settings - Connection settings + <p>Do you really want to stop syncing the folder <i>%1</i>?</p><p><b>Note:</b> This will <b>not</b> delete any files.</p> + <p>Do you really want to stop syncing the folder <i>%1</i>?</p><p><b>Note:</b> This will <b>not</b> delete any files.</p> Apply Apply - Storage space: … - Storage space: … + Apply manual changes + Apply manual changes + + + Availability + Availability Cancel Cancel - Connected with <server> as <user> - Connected with <server> as <user> + Choose what to sync + Choose what to sync - No account configured. - No account configured. + Confirm Folder Sync Connection Removal + Confirm Folder Sync Connection Removal - End-to-end Encryption with Virtual Files - End-to-end Encryption with Virtual Files + Connected to %1. + Connected to %1. - You seem to have the Virtual Files feature enabled on this folder. At the moment, it is not possible to implicitly download virtual files that are end-to-end encrypted. To get the best experience with virtual files and end-to-end encryption, make sure the encrypted folder is marked with "Make always available locally". - You seem to have the Virtual Files feature enabled on this folder. At the moment, it is not possible to implicitly download virtual files that are end-to-end encrypted. To get the best experience with virtual files and end-to-end encryption, make sure the encrypted folder is marked with "Make always available locally". + Connected with <server> as <user> + Connected with <server> as <user> - Do not encrypt folder - Do not encrypt folder + Connecting to %1 … + Connecting to %1 … - Encrypt folder - Encrypt folder + Connection settings + Connection settings - End-to-end Encryption - End-to-end Encryption + Could not encrypt folder because the folder does not exist anymore + Could not encrypt folder because the folder does not exist anymore - This will encrypt your folder and all files within it. These files will no longer be accessible without your encryption mnemonic key. -<b>This process is not reversible. Are you sure you want to proceed?</b> - This will encrypt your folder and all files within it. These files will no longer be accessible without your encryption mnemonic key. -<b>This process is not reversible. Are you sure you want to proceed?</b> + Create new folder + Create new folder - Disable encryption - Disable encryption + Currently there is no storage usage information available. + Currently there is no storage usage information available. - Display mnemonic - Display mnemonic + Disable encryption + Disable encryption - End-to-end encryption has been enabled for this account - End-to-end encryption has been enabled for this account + Disable end-to-end encryption + Disable end-to-end encryption - Warning - Warning + Disable end-to-end encryption for %1? + Disable end-to-end encryption for %1? - Please wait for the folder to sync before trying to encrypt it. - Please wait for the folder to sync before trying to encrypt it. + Disable support + Disable support - The folder has a minor sync problem. Encryption of this folder will be possible once it has synced successfully - The folder has a minor sync problem. Encryption of this folder will be possible once it has synced successfully + Disable virtual file support … + Disable virtual file support … - The folder has a sync error. Encryption of this folder will be possible once it has synced successfully - The folder has a sync error. Encryption of this folder will be possible once it has synced successfully + Disable virtual file support? + Disable virtual file support? - End-to-end encryption is not configured on this device. Once it is configured, you will be able to encrypt this folder. -Would you like to set up end-to-end encryption? - End-to-end encryption is not configured on this device. Once it is configured, you will be able to encrypt this folder. -Would you like to set up end-to-end encryption? + Display mnemonic + Display mnemonic - You cannot encrypt a folder with contents, please remove the files. -Wait for the new sync, then encrypt it. - You cannot encrypt a folder with contents, please remove the files. -Wait for the new sync, then encrypt it. + Do not encrypt folder + Do not encrypt folder - Encryption failed - Encryption failed + Edit Ignored Files + Edit Ignored Files - Could not encrypt folder because the folder does not exist anymore - Could not encrypt folder because the folder does not exist anymore + Enable virtual file support %1 … + Enable virtual file support %1 … Encrypt Encrypt - Edit Ignored Files - Edit Ignored Files - - - Create new folder - Create new folder - - - Availability - Availability + Encrypt folder + Encrypt folder - Choose what to sync - Choose what to sync + Encryption failed + Encryption failed - Force sync now - Force sync now + End-to-end Encryption + End-to-end Encryption - Restart sync - Restart sync + End-to-end Encryption with Virtual Files + End-to-end Encryption with Virtual Files - Remove folder sync connection - Remove folder sync connection + End-to-end encryption has been enabled for this account + End-to-end encryption has been enabled for this account - Disable virtual file support … - Disable virtual file support … + End-to-end encryption has been enabled on this account with another device.<br>It can be enabled on this device by entering your mnemonic.<br>This will enable synchronisation of existing encrypted folders. + End-to-end encryption has been enabled on this account with another device.<br>It can be enabled on this device by entering your mnemonic.<br>This will enable synchronisation of existing encrypted folders. - Enable virtual file support %1 … - Enable virtual file support %1 … + End-to-end encryption is not configured on this device. Once it is configured, you will be able to encrypt this folder. +Would you like to set up end-to-end encryption? + End-to-end encryption is not configured on this device. Once it is configured, you will be able to encrypt this folder. +Would you like to set up end-to-end encryption? - (experimental) - (experimental) + End-to-end encryption mnemonic + End-to-end encryption mnemonic Folder creation failed Folder creation failed - Confirm Folder Sync Connection Removal - Confirm Folder Sync Connection Removal - - - Remove Folder Sync Connection - Remove Folder Sync Connection + Force sync now + Force sync now - Disable virtual file support? - Disable virtual file support? + Migrate certificate to a new one + Migrate certificate to a new one - This action will disable virtual file support. As a consequence contents of folders that are currently marked as "available online only" will be downloaded. - -The only advantage of disabling virtual file support is that the selective sync feature will become available again. - -This action will abort any currently running synchronization. - This action will disable virtual file support. As a consequence contents of folders that are currently marked as "available online only" will be downloaded. - -The only advantage of disabling virtual file support is that the selective sync feature will become available again. - -This action will abort any currently running synchronization. + No %1 connection configured. + No %1 connection configured. - - Disable support - Disable support + + No account configured. + No account configured. - End-to-end encryption mnemonic - End-to-end encryption mnemonic + Open folder + Open folder - Sync Running - Sync Running + Pause sync + Pause sync - The syncing operation is running.<br/>Do you want to terminate it? - The syncing operation is running.<br/>Do you want to terminate it? + Please wait for the folder to sync before trying to encrypt it. + Please wait for the folder to sync before trying to encrypt it. - %1 in use - %1 in use + Remove Folder Sync Connection + Remove Folder Sync Connection - Migrate certificate to a new one - Migrate certificate to a new one + Remove folder sync connection + Remove folder sync connection - There are folders that have grown in size beyond %1MB: %2 - There are folders that have grown in size beyond %1MB: %2 + Removing end-to-end encryption will remove locally-synced files that are encrypted.<br>Encrypted files will remain on the server. + Removing end-to-end encryption will remove locally-synced files that are encrypted.<br>Encrypted files will remain on the server. - End-to-end encryption has been enabled on this account with another device.<br>It can be enabled on this device by entering your mnemonic.<br>This will enable synchronisation of existing encrypted folders. - End-to-end encryption has been enabled on this account with another device.<br>It can be enabled on this device by entering your mnemonic.<br>This will enable synchronisation of existing encrypted folders. + Restart sync + Restart sync - Set up encryption - Set up encryption + Resume sync + Resume sync - This account supports end-to-end encryption - This account supports end-to-end encryption + Server %1 is currently being redirected, or your connection is behind a captive portal. + Server %1 is currently being redirected, or your connection is behind a captive portal. - Connected to %1. - Connected to %1. + Server %1 is currently in maintenance mode. + Server %1 is currently in maintenance mode. Server %1 is temporarily unavailable. Server %1 is temporarily unavailable. - Server %1 is currently in maintenance mode. - Server %1 is currently in maintenance mode. + Server configuration error: %1 at %2. + Server configuration error: %1 at %2. + + + Set up encryption + Set up encryption Signed out from %1. Signed out from %1. - There are folders that were not synchronized because they are too big: - There are folders that were not synchronised because they are too big: - + Standard file sync + Standard file sync + - There are folders that were not synchronized because they are external storages: - There are folders that were not synchronised because they are external storages: + Storage space: … + Storage space: … - There are folders that were not synchronized because they are too big or external storages: - There are folders that were not synchronised because they are too big or external storages: + Sync Running + Sync Running - Open folder - Open folder + Synchronize all + Synchronise all - Resume sync - Resume sync + Synchronize none + Synchronize none - Pause sync - Pause sync + The folder has a minor sync problem. Encryption of this folder will be possible once it has synced successfully + The folder has a minor sync problem. Encryption of this folder will be possible once it has synced successfully - <p>Could not create local folder <i>%1</i>.</p> - <p>Could not create local folder <i>%1</i>.</p> + The folder has a sync error. Encryption of this folder will be possible once it has synced successfully + The folder has a sync error. Encryption of this folder will be possible once it has synced successfully - <p>Do you really want to stop syncing the folder <i>%1</i>?</p><p><b>Note:</b> This will <b>not</b> delete any files.</p> - <p>Do you really want to stop syncing the folder <i>%1</i>?</p><p><b>Note:</b> This will <b>not</b> delete any files.</p> + The server version %1 is unsupported! Proceed at your own risk. + The server version %1 is unsupported! Proceed at your own risk. - To protect your Cryptographic Identity, we encrypt it with a mnemonic of 12 dictionary words. Please note these down and keep them safe. They will be needed to add other devices to your account (like your mobile phone or laptop). - To protect your Cryptographic Identity, we encrypt it with a mnemonic of 12 dictionary words. Please note these down and keep them safe. They will be needed to add other devices to your account (like your mobile phone or laptop). + The syncing operation is running.<br/>Do you want to terminate it? + The syncing operation is running.<br/>Do you want to terminate it? - Disable end-to-end encryption - Disable end-to-end encryption + There are folders that have grown in size beyond %1MB: %2 + There are folders that have grown in size beyond %1MB: %2 - Disable end-to-end encryption for %1? - Disable end-to-end encryption for %1? + There are folders that were not synchronized because they are external storages: + There are folders that were not synchronised because they are external storages: - Removing end-to-end encryption will remove locally-synced files that are encrypted.<br>Encrypted files will remain on the server. - Removing end-to-end encryption will remove locally-synced files that are encrypted.<br>Encrypted files will remain on the server. + There are folders that were not synchronized because they are too big or external storages: + There are folders that were not synchronised because they are too big or external storages: - %1 (%3%) of %2 in use. Some folders, including network mounted or shared folders, might have different limits. - %1 (%3%) of %2 in use. Some folders, including network mounted or shared folders, might have different limits. + There are folders that were not synchronized because they are too big: + There are folders that were not synchronised because they are too big: - %1 of %2 in use - %1 of %2 in use + This account supports end-to-end encryption + This account supports end-to-end encryption - Currently there is no storage usage information available. - Currently there is no storage usage information available. + This action will disable virtual file support. As a consequence contents of folders that are currently marked as "available online only" will be downloaded. + +The only advantage of disabling virtual file support is that the selective sync feature will become available again. + +This action will abort any currently running synchronization. + This action will disable virtual file support. As a consequence contents of folders that are currently marked as "available online only" will be downloaded. + +The only advantage of disabling virtual file support is that the selective sync feature will become available again. + +This action will abort any currently running synchronization. - %1 as %2 - %1 as %2 + This will encrypt your folder and all files within it. These files will no longer be accessible without your encryption mnemonic key. +<b>This process is not reversible. Are you sure you want to proceed?</b> + This will encrypt your folder and all files within it. These files will no longer be accessible without your encryption mnemonic key. +<b>This process is not reversible. Are you sure you want to proceed?</b> - The server version %1 is unsupported! Proceed at your own risk. - The server version %1 is unsupported! Proceed at your own risk. + To protect your Cryptographic Identity, we encrypt it with a mnemonic of 12 dictionary words. Please note these down and keep them safe. They will be needed to add other devices to your account (like your mobile phone or laptop). + To protect your Cryptographic Identity, we encrypt it with a mnemonic of 12 dictionary words. Please note these down and keep them safe. They will be needed to add other devices to your account (like your mobile phone or laptop). - Server %1 is currently being redirected, or your connection is behind a captive portal. - Server %1 is currently being redirected, or your connection is behind a captive portal. + Unable to connect to %1. + Unable to connect to %1. - Connecting to %1 … - Connecting to %1 … + Unchecked folders will be <b>removed</b> from your local file system and will not be synchronized to this computer anymore + Unchecked folders will be <b>removed</b> from your local file system and will not be synchronised to this computer any more - Unable to connect to %1. - Unable to connect to %1. + Virtual file sync + Virtual file sync - Server configuration error: %1 at %2. - Server configuration error: %1 at %2. + Warning + Warning + + + You cannot encrypt a folder with contents, please remove the files. +Wait for the new sync, then encrypt it. + You cannot encrypt a folder with contents, please remove the files. +Wait for the new sync, then encrypt it. You need to accept the terms of service at %1. You need to accept the terms of service at %1. - No %1 connection configured. - No %1 connection configured. + You seem to have the Virtual Files feature enabled on this folder. At the moment, it is not possible to implicitly download virtual files that are end-to-end encrypted. To get the best experience with virtual files and end-to-end encryption, make sure the encrypted folder is marked with "Make always available locally". + You seem to have the Virtual Files feature enabled on this folder. At the moment, it is not possible to implicitly download virtual files that are end-to-end encrypted. To get the best experience with virtual files and end-to-end encryption, make sure the encrypted folder is marked with "Make always available locally". - + OCC::AccountSetupFromCommandLineJob - - The authenticated request to the server was redirected to "%1". The URL is bad, the server is misconfigured. - The authenticated request to the server was redirected to "%1". The URL is bad, the server is misconfigured. - Access forbidden by server. To verify that you have proper access, <a href="%1">click here</a> to access the service with your browser. Access forbidden by server. To verify that you have proper access, <a href="%1">click here</a> to access the service with your browser. + + The authenticated request to the server was redirected to "%1". The URL is bad, the server is misconfigured. + The authenticated request to the server was redirected to "%1". The URL is bad, the server is misconfigured. + There was an invalid response to an authenticated WebDAV request There was an invalid response to an authenticated WebDAV request @@ -830,44 +847,44 @@ This action will abort any currently running synchronization. OCC::AccountState - Signed out - Signed out + Asking Credentials + Asking Credentials - Disconnected - Disconnected + Configuration error + Configuration error Connected Connected - Service unavailable - Service unavailable + Disconnected + Disconnected Maintenance mode Maintenance mode - Redirect detected - Redirect detected + Need the user to accept the terms of service + Need the user to accept the terms of service Network error Network error - Configuration error - Configuration error + Redirect detected + Redirect detected - Asking Credentials - Asking Credentials + Service unavailable + Service unavailable - Need the user to accept the terms of service - Need the user to accept the terms of service + Signed out + Signed out Unknown account state @@ -876,14 +893,14 @@ This action will abort any currently running synchronization. OCC::ActivityListModel - - For more activities please open the Activity app. - For more activities please open the Activity app. - Fetching activities … Fetching activities … + + For more activities please open the Activity app. + For more activities please open the Activity app. + Network error occurred: client will retry syncing. Network error occurred: client will retry syncing. @@ -892,91 +909,65 @@ This action will abort any currently running synchronization. OCC::AddCertificateDialog - SSL client certificate authentication - SSL client certificate authentication + An encrypted pkcs12 bundle is strongly recommended as a copy will be stored in the configuration file. + An encrypted pkcs12 bundle is strongly recommended as a copy will be stored in the configuration file. - This server probably requires a SSL client certificate. - This server probably requires a SSL client certificate. + Browse … + Browse … Certificate & Key (pkcs12): Certificate & Key (pkcs12): + Certificate files (*.p12 *.pfx) + Certificate files (*.p12 *.pfx) + + Certificate password: Certificate password: - An encrypted pkcs12 bundle is strongly recommended as a copy will be stored in the configuration file. - An encrypted pkcs12 bundle is strongly recommended as a copy will be stored in the configuration file. - - - Browse … - Browse … + SSL client certificate authentication + SSL client certificate authentication Select a certificate Select a certificate - Certificate files (*.p12 *.pfx) - Certificate files (*.p12 *.pfx) + This server probably requires a SSL client certificate. + This server probably requires a SSL client certificate. - + OCC::Application - - Some settings were configured in %1 versions of this client and use features that are not available in this version.<br><br>Continuing will mean <b>%2 these settings</b>.<br><br>The current configuration file was already backed up to <i>%3</i>. - Some settings were configured in %1 versions of this client and use features that are not available in this version.<br><br>Continuing will mean <b>%2 these settings</b>.<br><br>The current configuration file was already backed up to <i>%3</i>. - - - newer - newer software version - newer - - - older - older software version - older - - - ignoring - ignoring - - - deleting - deleting - - - Quit - Quit - - - Continue - Continue - %1 accounts number of accounts imported %1 accounts - - 1 account - 1 account - %1 folders number of folders imported %1 folders + + 1 account + 1 account + 1 folder 1 folder - Legacy import - Legacy import + Continue + Continue + + + Error accessing the configuration file + Error accessing the configuration file Imported %1 and %2 from a legacy desktop client. @@ -986,36 +977,62 @@ This action will abort any currently running synchronization. %3 - Error accessing the configuration file - Error accessing the configuration file + Legacy import + Legacy import + + + Quit + Quit + + + Some settings were configured in %1 versions of this client and use features that are not available in this version.<br><br>Continuing will mean <b>%2 these settings</b>.<br><br>The current configuration file was already backed up to <i>%3</i>. + Some settings were configured in %1 versions of this client and use features that are not available in this version.<br><br>Continuing will mean <b>%2 these settings</b>.<br><br>The current configuration file was already backed up to <i>%3</i>. There was an error while accessing the configuration file at %1. Please make sure the file can be accessed by your system account. There was an error while accessing the configuration file at %1. Please make sure the file can be accessed by your system account. - - - OCC::AuthenticationDialog + + deleting + deleting + - Authentication Required - Authentication Required + ignoring + ignoring - Enter username and password for "%1" at %2. - Enter username and password for "%1" at %2. + newer + newer software version + newer - &Username: - &Username: + older + older software version + older + + + OCC::AuthenticationDialog &Password: &Password: - - - OCC::BasePropagateRemoteDeleteEncrypted - + + &Username: + &Username: + + + Authentication Required + Authentication Required + + + Enter username and password for "%1" at %2. + Enter username and password for "%1" at %2. + + + + OCC::BasePropagateRemoteDeleteEncrypted + "%1 Failed to unlock encrypted folder %2". "%1 Failed to unlock encrypted folder %2". @@ -1026,10 +1043,18 @@ This action will abort any currently running synchronization. OCC::BulkPropagatorJob + + Error updating metadata: %1 + Error updating metadata: %1 + File %1 cannot be uploaded because another file with the same name, differing only in case, exists File %1 cannot be uploaded because another file with the same name, differing only in case, exists + + File %1 has invalid modification time. Do not upload to the server. + File %1 has invalid modification time. Do not upload to the server. + File %1 has invalid modified time. Do not upload to the server. File %1 has invalid modified time. Do not upload to the server. @@ -1039,26 +1064,22 @@ This action will abort any currently running synchronization. File Removed (start upload) %1 - File %1 has invalid modification time. Do not upload to the server. - File %1 has invalid modification time. Do not upload to the server. + Local file changed during sync. + Local file changed during sync. Local file changed during syncing. It will be resumed. Local file changed during syncing. It will be resumed. - - Local file changed during sync. - Local file changed during sync. - Network error: %1 Network error: %1 - Error updating metadata: %1 - Error updating metadata: %1 + Restoration failed: %1 + Restoration failed: %1 - + The file %1 is currently in use The file %1 is currently in use @@ -1066,11 +1087,7 @@ This action will abort any currently running synchronization. The local file was removed during sync. The local file was removed during sync. - - Restoration failed: %1 - Restoration failed: %1 - - + OCC::CaseClashConflictSolver @@ -1081,10 +1098,6 @@ This action will abort any currently running synchronization. Could not rename file. Please make sure you are connected to the server. Could not rename file. Please make sure you are connected to the server. - - You don't have the permission to rename this file. Please ask the author of the file to rename it. - You don't have the permission to rename this file. Please ask the author of the file to rename it. - Failed to fetch permissions with error %1 Failed to fetch permissions with error %1 @@ -1101,16 +1114,28 @@ This action will abort any currently running synchronization. Filename contains trailing spaces. Filename contains trailing spaces. - + + You don't have the permission to rename this file. Please ask the author of the file to rename it. + You don't have the permission to rename this file. Please ask the author of the file to rename it. + + OCC::CaseClashFilenameDialog + + %1 does not support equal file names with only letter casing differences. + %1 does not support equal file names with only letter casing differences. + + + 0 byte + 0 byte + Case Clash Conflict Case Clash Conflict - The file could not be synced because it generates a case clash conflict with an existing file on this system. - The file could not be synced because it generates a case clash conflict with an existing file on this system. + Case clashing file + Case clashing file Error @@ -1121,40 +1146,36 @@ This action will abort any currently running synchronization. Existing file - file A - file A - - - today - today + Filename contains illegal characters: %1 + Filename contains illegal characters: %1 - - 0 byte - 0 byte + + Filename contains leading and trailing spaces. + Filename contains leading and trailing spaces. - Open existing file - Open existing file + Filename contains leading spaces. + Filename contains leading spaces. - Case clashing file - Case clashing file + Filename contains trailing spaces. + Filename contains trailing spaces. - file B - file B + New filename + New filename Open clashing file Open clashing file - Please enter a new name for the clashing file: - Please enter a new name for the clashing file: + Open existing file + Open existing file - New filename - New filename + Please enter a new name for the clashing file: + Please enter a new name for the clashing file: Rename file @@ -1165,30 +1186,26 @@ This action will abort any currently running synchronization. The file "%1" could not be synced because of a case clash conflict with an existing file on this system. - %1 does not support equal file names with only letter casing differences. - %1 does not support equal file names with only letter casing differences. - - - Filename contains leading and trailing spaces. - Filename contains leading and trailing spaces. + The file could not be synced because it generates a case clash conflict with an existing file on this system. + The file could not be synced because it generates a case clash conflict with an existing file on this system. - Filename contains leading spaces. - Filename contains leading spaces. + Use invalid name + Use invalid name - Filename contains trailing spaces. - Filename contains trailing spaces. + file A + file A - Use invalid name - Use invalid name + file B + file B - Filename contains illegal characters: %1 - Filename contains illegal characters: %1 + today + today - + OCC::CleanupPollsJob @@ -1198,15 +1215,19 @@ This action will abort any currently running synchronization. OCC::ClientSideEncryption - - Input PIN code - Please keep it short and shorter than "Enter Certificate USB Token PIN:" - Input PIN code - Enter Certificate USB Token PIN: Enter Certificate USB Token PIN: + + Enter E2E passphrase + Enter E2E passphrase + + + Input PIN code + Please keep it short and shorter than "Enter Certificate USB Token PIN:" + Input PIN code + Invalid PIN. Login failed Invalid PIN. Login failed @@ -1219,56 +1240,48 @@ This action will abort any currently running synchronization. Please enter your end-to-end encryption passphrase:<br><br>Username: %2<br>Account: %3<br> Please enter your end-to-end encryption passphrase:<br><br>Username: %2<br>Account: %3<br> - - Enter E2E passphrase - Enter E2E passphrase - - + OCC::ConflictDialog - Sync Conflict - Sync Conflict - - - Conflicting versions of %1. - Conflicting versions of %1. + 0 byte + 0 byte - Which version of the file do you want to keep?<br/>If you select both versions, the local file will have a number added to its name. - Which version of the file do you want to keep?<br/>If you select both versions, the local file will have a number added to its name. + <a href="%1">Open local version</a> + <a href="%1">Open local version</a> - Local version - Local version + <a href="%1">Open server version</a> + <a href="%1">Open server version</a> Click to open the file Click to open the file - today - today + Conflicting versions of %1. + Conflicting versions of %1. - 0 byte - 0 byte + Keep both versions + Keep both versions - <a href="%1">Open local version</a> - <a href="%1">Open local version</a> + Keep local version + Keep local version - Server version - Server version + Keep selected version + Keep selected version - <a href="%1">Open server version</a> - <a href="%1">Open server version</a> + Keep server version + Keep server version - - Keep selected version - Keep selected version + + Local version + Local version Open local version @@ -1279,20 +1292,36 @@ This action will abort any currently running synchronization. Open server version - Keep both versions - Keep both versions + Server version + Server version - Keep local version - Keep local version + Sync Conflict + Sync Conflict - Keep server version - Keep server version + Which version of the file do you want to keep?<br/>If you select both versions, the local file will have a number added to its name. + Which version of the file do you want to keep?<br/>If you select both versions, the local file will have a number added to its name. - + + today + today + + OCC::ConflictSolver + + Confirm deletion + Confirm deletion + + + Do you want to delete the directory <i>%1</i> and all its contents permanently? + Do you want to delete the directory <i>%1</i> and all its contents permanently? + + + Do you want to delete the file <i>%1</i> permanently? + Do you want to delete the file <i>%1</i> permanently? + Error Error @@ -1305,63 +1334,47 @@ This action will abort any currently running synchronization. %1 - - Do you want to delete the directory <i>%1</i> and all its contents permanently? - Do you want to delete the directory <i>%1</i> and all its contents permanently? - - - Do you want to delete the file <i>%1</i> permanently? - Do you want to delete the file <i>%1</i> permanently? - - - Confirm deletion - Confirm deletion - - + OCC::ConnectionValidator - Timeout - Timeout + Authentication error: Either username or password are wrong. + Authentication error: Either username or password are wrong. - The configured server for this client is too old - The configured server for this client is too old + No Nextcloud account configured + No Nextcloud account configured Please update to the latest server and restart the client. Please update to the latest server and restart the client. - Authentication error: Either username or password are wrong. - Authentication error: Either username or password are wrong. - - - No Nextcloud account configured - No Nextcloud account configured + The configured server for this client is too old + The configured server for this client is too old The provided credentials are not correct The provided credentials are not correct - + + Timeout + Timeout + + OCC::DiscoveryPhase - - Error while canceling deletion of a file - Error while canceling deletion of a file - Error while canceling deletion of %1 Error while canceling deletion of %1 - + + Error while canceling deletion of a file + Error while canceling deletion of a file + + OCC::DiscoverySingleDirectoryJob - - Server error: PROPFIND reply is not XML formatted! - Server error: PROPFIND reply is not XML formatted! - Encrypted metadata setup error! Encrypted metadata setup error! @@ -1370,13 +1383,13 @@ This action will abort any currently running synchronization. Encrypted metadata setup error: initial signature from server is empty. Encrypted metadata setup error: initial signature from server is empty. - + + Server error: PROPFIND reply is not XML formatted! + Server error: PROPFIND reply is not XML formatted! + + OCC::DiscoverySingleLocalDirectoryJob - - Error while opening directory %1 - Error while opening directory %1 - Directory not accessible on client, permission denied Directory not accessible on client, permission denied @@ -1386,77 +1399,81 @@ This action will abort any currently running synchronization. Directory not found: %1 - Filename encoding is not valid - Filename encoding is not valid + Error while opening directory %1 + Error while opening directory %1 Error while reading directory %1 Error while reading directory %1 - + + Filename encoding is not valid + Filename encoding is not valid + + OCC::EditLocallyJob - Could not start editing locally. - Could not start editing locally. + An error occurred during data retrieval. + An error occurred during data retrieval. An error occurred during setup. An error occurred during setup. - Could not find a file for local editing. Make sure its path is valid and it is synced locally. - Could not find a file for local editing. Make sure its path is valid and it is synced locally. + An error occurred trying to synchronise the file to edit locally. + An error occurred trying to synchronise the file to edit locally. Could not find a file for local editing. Make sure it is not excluded via selective sync. Could not find a file for local editing. Make sure it is not excluded via selective sync. - An error occurred during data retrieval. - An error occurred during data retrieval. - - - An error occurred trying to synchronise the file to edit locally. - An error occurred trying to synchronise the file to edit locally. - - - Server error: PROPFIND reply is not XML formatted! - Server error: PROPFIND reply is not XML formatted! + Could not find a file for local editing. Make sure its path is valid and it is synced locally. + Could not find a file for local editing. Make sure its path is valid and it is synced locally. Could not find a remote file info for local editing. Make sure its path is valid. Could not find a remote file info for local editing. Make sure its path is valid. - - Invalid local file path. - Invalid local file path. - Could not open %1 Could not open %1 - Please try again. - Please try again. + Could not start editing locally. + Could not start editing locally. File %1 already locked. File %1 already locked. + + File %1 could not be locked. + File %1 could not be locked. + + + File %1 now locked. + File %1 now locked. + + + Invalid local file path. + Invalid local file path. + Lock will last for %1 minutes. You can also unlock this file manually once you are finished editing. Lock will last for %1 minutes. You can also unlock this file manually once you are finished editing. - File %1 now locked. - File %1 now locked. + Please try again. + Please try again. - File %1 could not be locked. - File %1 could not be locked. + Server error: PROPFIND reply is not XML formatted! + Server error: PROPFIND reply is not XML formatted! - + OCC::EditLocallyManager @@ -1471,18 +1488,10 @@ This action will abort any currently running synchronization. OCC::EditLocallyVerificationJob - Invalid token received. - Invalid token received. - - - Please try again. - Please try again. - - - Invalid file path was provided. - Invalid file path was provided. + An error occurred trying to verify the request to edit locally. + An error occurred trying to verify the request to edit locally. - + Could not find an account for local editing. Could not find an account for local editing. @@ -1491,21 +1500,24 @@ This action will abort any currently running synchronization. Could not start editing locally. - An error occurred trying to verify the request to edit locally. - An error occurred trying to verify the request to edit locally. + Invalid file path was provided. + Invalid file path was provided. - - - OCC::EncryptFolderJob - Could not generate the metadata for encryption, Unlocking the folder. -This can be an issue with your OpenSSL libraries. - Could not generate the metadata for encryption, Unlocking the folder. -This can be an issue with your OpenSSL libraries. + Invalid token received. + Invalid token received. - + + Please try again. + Please try again. + + OCC::EncryptedFolderMetadataHandler + + Error fetching encrypted folder ID. + Error fetching encrypted folder ID. + Error fetching metadata. Error fetching metadata. @@ -1514,10 +1526,6 @@ This can be an issue with your OpenSSL libraries. Error locking folder. Error locking folder. - - Error fetching encrypted folder ID. - Error fetching encrypted folder ID. - Error parsing or decrypting metadata. Error parsing or decrypting metadata. @@ -1528,21 +1536,22 @@ This can be an issue with your OpenSSL libraries. - OCC::FileDetails - - %1 second(s) ago - seconds elapsed since file last modified - - %1 second(s) ago - %1 second(s) ago - + OCC::EncryptFolderJob + + Could not generate the metadata for encryption, Unlocking the folder. +This can be an issue with your OpenSSL libraries. + Could not generate the metadata for encryption, Unlocking the folder. +This can be an issue with your OpenSSL libraries. + + + OCC::FileDetails - %1 minute(s) ago - minutes elapsed since file last modified + %1 day(s) ago + days elapsed since file last modified - %1 minute(s) ago - %1 minute(s) ago + %1 day(s) ago + %1 day(s) ago @@ -1554,11 +1563,11 @@ This can be an issue with your OpenSSL libraries. - %1 day(s) ago - days elapsed since file last modified + %1 minute(s) ago + minutes elapsed since file last modified - %1 day(s) ago - %1 day(s) ago + %1 minute(s) ago + %1 minute(s) ago @@ -1569,6 +1578,14 @@ This can be an issue with your OpenSSL libraries. %1 month(s) ago + + %1 second(s) ago + seconds elapsed since file last modified + + %1 second(s) ago + %1 second(s) ago + + %1 year(s) ago years elapsed since file last modified @@ -1589,10 +1606,10 @@ This can be an issue with your OpenSSL libraries. OCC::Flow2Auth - The returned server URL does not start with HTTPS despite the login URL started with HTTPS. Login will not be possible because this might be a security issue. Please contact your administrator. - The returned server URL does not start with HTTPS despite the login URL started with HTTPS. Login will not be possible because this might be a security issue. Please contact your administrator. + Could not parse the JSON returned from the server: <br><em>%1</em> + Could not parse the JSON returned from the server: <br><em>%1</em> - + Error returned from the server: <em>%1</em> Error returned from the server: <em>%1</em> @@ -1600,28 +1617,32 @@ This can be an issue with your OpenSSL libraries. The polling URL does not start with HTTPS despite the login URL started with HTTPS. Login will not be possible because this might be a security issue. Please contact your administrator. The polling URL does not start with HTTPS despite the login URL started with HTTPS. Login will not be possible because this might be a security issue. Please contact your administrator. - - There was an error accessing the "token" endpoint: <br><em>%1</em> - There was an error accessing the "token" endpoint: <br><em>%1</em> - The reply from the server did not contain all expected fields The reply from the server did not contain all expected fields - Could not parse the JSON returned from the server: <br><em>%1</em> - Could not parse the JSON returned from the server: <br><em>%1</em> + The returned server URL does not start with HTTPS despite the login URL started with HTTPS. Login will not be possible because this might be a security issue. Please contact your administrator. + The returned server URL does not start with HTTPS despite the login URL started with HTTPS. Login will not be possible because this might be a security issue. Please contact your administrator. - + + There was an error accessing the "token" endpoint: <br><em>%1</em> + There was an error accessing the "token" endpoint: <br><em>%1</em> + + OCC::Flow2AuthWidget - Unable to open the Browser, please copy the link to your Browser. - Unable to open the Browser, please copy the link to your Browser. + Copy Link + Copy Link + + + Link copied to clipboard. + Link copied to clipboard. - Waiting for authorization - Waiting for authorization + Open Browser + Open Browser Polling for authorization @@ -1632,38 +1653,36 @@ This can be an issue with your OpenSSL libraries. Starting authorization - Link copied to clipboard. - Link copied to clipboard. - - - Open Browser - Open Browser + Unable to open the Browser, please copy the link to your Browser. + Unable to open the Browser, please copy the link to your Browser. - Copy Link - Copy Link + Waiting for authorization + Waiting for authorization - + OCC::Folder - - %1 has been removed. - %1 names a file. - %1 has been removed. - - - %1 has been updated. - %1 names a file. - %1 has been updated. + + %1 and %n other file(s) are currently locked. + + %1 and %n other file(s) are currently locked. + %1 and %n other file(s) are currently locked. + - - %1 has been renamed to %2. - %1 and %2 name files. - %1 has been renamed to %2. + + %1 and %n other file(s) could not be synced due to errors. See the log for details. + + %1 and %n other file could not be synced due to errors. See the log for details. + %1 and %n other files could not be synced due to errors. See the log for details. + - - %1 has been moved to %2. - %1 has been moved to %2. + + %1 and %n other file(s) have been added. + + %1 and %n other file(s) have been added. + %1 and %n other file(s) have been added. + %1 and %n other file(s) have been removed. @@ -1672,23 +1691,26 @@ This can be an issue with your OpenSSL libraries. %1 and %n other files have been removed. - - Please choose a different location. The folder %1 doesn't exist. - Please choose a different location. The folder %1 doesn't exist. + + %1 and %n other file(s) have been updated. + + %1 and %n other file have been updated. + %1 and %n other files have been updated. + - Please choose a different location. %1 isn't a valid folder. - Please choose a different location. %1 isn't a valid folder. + %1 could not be synced due to an error. See the log for details. + %1 could not be synced due to an error. See the log for details. - Please choose a different location. %1 isn't a readable folder. - Please choose a different location. %1 isn't a readable folder. + %1 has a sync conflict. Please check the conflict file! + %1 has a sync conflict. Please check the conflict file! - %1 and %n other file(s) have been added. + %1 has and %n other file(s) have sync conflicts. - %1 and %n other file(s) have been added. - %1 and %n other file(s) have been added. + %1 has and %n other file have sync conflicts. + %1 has and %n other files have sync conflicts. @@ -1697,12 +1719,21 @@ This can be an issue with your OpenSSL libraries. %1 has been added. - %1 and %n other file(s) have been updated. + %1 has been moved to %2 and %n other file(s) have been moved. - %1 and %n other file have been updated. - %1 and %n other files have been updated. + %1 has been moved to %2 and %n other file have been moved. + %1 has been moved to %2 and %n other files have been moved. + + %1 has been moved to %2. + %1 has been moved to %2. + + + %1 has been removed. + %1 names a file. + %1 has been removed. + %1 has been renamed to %2 and %n other file(s) have been renamed. @@ -1710,70 +1741,26 @@ This can be an issue with your OpenSSL libraries. %1 has been renamed to %2 and %n other files have been renamed. - - %1 has been moved to %2 and %n other file(s) have been moved. - - %1 has been moved to %2 and %n other file have been moved. - %1 has been moved to %2 and %n other files have been moved. - - - - %1 has and %n other file(s) have sync conflicts. - - %1 has and %n other file have sync conflicts. - %1 has and %n other files have sync conflicts. - - - %1 has a sync conflict. Please check the conflict file! - %1 has a sync conflict. Please check the conflict file! - - - %1 and %n other file(s) could not be synced due to errors. See the log for details. - - %1 and %n other file could not be synced due to errors. See the log for details. - %1 and %n other files could not be synced due to errors. See the log for details. - + %1 has been renamed to %2. + %1 and %2 name files. + %1 has been renamed to %2. - %1 could not be synced due to an error. See the log for details. - %1 could not be synced due to an error. See the log for details. - - - %1 and %n other file(s) are currently locked. - - %1 and %n other file(s) are currently locked. - %1 and %n other file(s) are currently locked. - + %1 has been updated. + %1 names a file. + %1 has been updated. %1 is currently locked. %1 is currently locked. - - Sync Activity - Sync Activity - - - Could not read system exclude file - Could not read system exclude file - - - A new folder larger than %1 MB has been added: %2. - - A new folder larger than %1 MB has been added: %2. - - A folder from an external storage has been added. A folder from an external storage has been added. - - Please go in the settings to select it if you wish to download it. - Please go in the settings to select it if you wish to download it. - A folder has surpassed the set folder size limit of %1MB: %2. %3 @@ -1781,28 +1768,26 @@ This can be an issue with your OpenSSL libraries. %3 - Keep syncing - Keep syncing - - - Stop syncing - Stop syncing - - - The folder %1 has surpassed the set folder size limit of %2MB. - The folder %1 has surpassed the set folder size limit of %2MB. - - - Would you like to stop syncing this folder? - Would you like to stop syncing this folder? + A large number of files in the server have been deleted. +Please confirm if you'd like to proceed with these deletions. +Alternatively, you can restore all deleted files by uploading from '%1' folder to the server. + A large number of files in the server have been deleted. +Please confirm if you'd like to proceed with these deletions. +Alternatively, you can restore all deleted files by uploading from '%1' folder to the server. - The folder %1 was created but was excluded from synchronization previously. Data inside it will not be synchronized. - The folder %1 was created but was excluded from synchronization previously. Data inside it will not be synchronized. + A large number of files in your local '%1' folder have been deleted. +Please confirm if you'd like to proceed with these deletions. +Alternatively, you can restore all deleted files by downloading them from the server. + A large number of files in your local '%1' folder have been deleted. +Please confirm if you'd like to proceed with these deletions. +Alternatively, you can restore all deleted files by downloading them from the server. - The file %1 was created but was excluded from synchronization previously. It will not be synchronized. - The file %1 was created but was excluded from synchronization previously. It will not be synchronized. + A new folder larger than %1 MB has been added: %2. + + A new folder larger than %1 MB has been added: %2. + Changes in synchronized folders could not be tracked reliably. @@ -1817,45 +1802,81 @@ This means that the synchronization client might not upload local changes immedi %1 - Virtual file download failed with code "%1", status "%2" and error message "%3" - Virtual file download failed with code "%1", status "%2" and error message "%3" + Could not read system exclude file + Could not read system exclude file - A large number of files in the server have been deleted. -Please confirm if you'd like to proceed with these deletions. -Alternatively, you can restore all deleted files by uploading from '%1' folder to the server. - A large number of files in the server have been deleted. -Please confirm if you'd like to proceed with these deletions. -Alternatively, you can restore all deleted files by uploading from '%1' folder to the server. + Keep syncing + Keep syncing - A large number of files in your local '%1' folder have been deleted. -Please confirm if you'd like to proceed with these deletions. -Alternatively, you can restore all deleted files by downloading them from the server. - A large number of files in your local '%1' folder have been deleted. -Please confirm if you'd like to proceed with these deletions. -Alternatively, you can restore all deleted files by downloading them from the server. + Please choose a different location. %1 isn't a readable folder. + Please choose a different location. %1 isn't a readable folder. - Remove all files? - Remove all files? + Please choose a different location. %1 isn't a valid folder. + Please choose a different location. %1 isn't a valid folder. + + + Please choose a different location. The folder %1 doesn't exist. + Please choose a different location. The folder %1 doesn't exist. + + + Please go in the settings to select it if you wish to download it. + Please go in the settings to select it if you wish to download it. Proceed with Deletion Proceed with Deletion - Restore Files to Server - Restore Files to Server + Remove all files? + Remove all files? Restore Files from Server Restore Files from Server - + + Restore Files to Server + Restore Files to Server + + + Stop syncing + Stop syncing + + + Sync Activity + Sync Activity + + + The file %1 was created but was excluded from synchronization previously. It will not be synchronized. + The file %1 was created but was excluded from synchronization previously. It will not be synchronized. + + + The folder %1 has surpassed the set folder size limit of %2MB. + The folder %1 has surpassed the set folder size limit of %2MB. + + + The folder %1 was created but was excluded from synchronization previously. Data inside it will not be synchronized. + The folder %1 was created but was excluded from synchronization previously. Data inside it will not be synchronized. + + + Virtual file download failed with code "%1", status "%2" and error message "%3" + Virtual file download failed with code "%1", status "%2" and error message "%3" + + + Would you like to stop syncing this folder? + Would you like to stop syncing this folder? + + OCC::FolderCreationDialog + Could not create a folder! Check your write permissions. + Could not create a folder! Check your write permissions. + + Create new folder Create new folder @@ -1863,122 +1884,118 @@ Alternatively, you can restore all deleted files by downloading them from the se Enter folder name Enter folder name - - Folder already exists - Folder already exists - Error Error - Could not create a folder! Check your write permissions. - Could not create a folder! Check your write permissions. + Folder already exists + Folder already exists - + OCC::FolderMan - Could not reset folder state - Could not reset folder state + %1 (Sync is paused) + %1 (Sync is paused) + + + (backup %1) + (backup %1) (backup) (backup) - - (backup %1) - (backup %1) - An old sync journal "%1" was found, but could not be removed. Please make sure that no application is currently using it. An old sync journal "%1" was found, but could not be removed. Please make sure that no application is currently using it. - Undefined state. - Undefined state. + Could not reset folder state + Could not reset folder state - Waiting to start syncing. - Waiting to start syncing. + Last sync was successful. + Last sync was successful. - Preparing for sync. - Preparing for sync. + Please choose a different location. %1 is already being used as a sync folder for %2. + folder location, server url + Please choose a different location. %1 is already being used as a sync folder for %2. - Syncing %1 of %2 (A few seconds left) - Syncing %1 of %2 (A few seconds left) + Please choose a different location. %1 is already being used as a sync folder. + Please choose a different location. %1 is already being used as a sync folder. - Syncing %1 of %2 (%3 left) - Syncing %1 of %2 (%3 left) + Please choose a different location. %1 is already contained in a folder used as a sync folder. + Please choose a different location. %1 is already contained in a folder used as a sync folder. - Syncing %1 of %2 - Syncing %1 of %2 + Please choose a different location. The path %1 doesn't exist. + Please choose a different location. The path %1 doesn't exist. - Syncing %1 (A few seconds left) - Syncing %1 (A few seconds left) + Please choose a different location. The path %1 isn't a folder. + Please choose a different location. The path %1 isn't a folder. - Syncing %1 (%2 left) - Syncing %1 (%2 left) + Please choose a different location. The selected folder isn't valid. + Please choose a different location. The selected folder isn't valid. - Syncing %1 - Syncing %1 + Please choose a different location. You don't have enough permissions to write to %1. + folder location + Please choose a different location. You don't have enough permissions to write to %1. - Sync is running. - Sync is running. + Preparing for sync. + Preparing for sync. + + + Setup error. + Setup error. Sync finished with unresolved conflicts. Sync finished with unresolved conflicts. - Last sync was successful. - Last sync was successful. + Sync is paused. + Sync is paused. - Setup error. - Setup error. + Sync is running. + Sync is running. Sync request was cancelled. Sync request was cancelled. - Please choose a different location. The selected folder isn't valid. - Please choose a different location. The selected folder isn't valid. + Syncing %1 + Syncing %1 - Please choose a different location. %1 is already being used as a sync folder. - Please choose a different location. %1 is already being used as a sync folder. + Syncing %1 (%2 left) + Syncing %1 (%2 left) - Please choose a different location. The path %1 doesn't exist. - Please choose a different location. The path %1 doesn't exist. + Syncing %1 (A few seconds left) + Syncing %1 (A few seconds left) - Please choose a different location. The path %1 isn't a folder. - Please choose a different location. The path %1 isn't a folder. + Syncing %1 of %2 + Syncing %1 of %2 - Please choose a different location. You don't have enough permissions to write to %1. - folder location - Please choose a different location. You don't have enough permissions to write to %1. + Syncing %1 of %2 (%3 left) + Syncing %1 of %2 (%3 left) - Please choose a different location. %1 is already contained in a folder used as a sync folder. - Please choose a different location. %1 is already contained in a folder used as a sync folder. - - - Please choose a different location. %1 is already being used as a sync folder for %2. - folder location, server url - Please choose a different location. %1 is already being used as a sync folder for %2. + Syncing %1 of %2 (A few seconds left) + Syncing %1 of %2 (A few seconds left) The folder %1 is linked to multiple accounts. @@ -1991,14 +2008,14 @@ To resolve this issue: please remove %1 from one of the accounts and create a ne For advanced users: this issue might be related to multiple sync database files found in one folder. Please check %1 for outdated and unused .sync_*.db files and remove them. - Sync is paused. - Sync is paused. + Undefined state. + Undefined state. - %1 (Sync is paused) - %1 (Sync is paused) + Waiting to start syncing. + Waiting to start syncing. - + OCC::FolderStatusDelegate @@ -2013,57 +2030,61 @@ For advanced users: this issue might be related to multiple sync database files OCC::FolderStatusModel - You need to be connected to add a folder - You need to be connected to add a folder + %1 %2 + Example text: "Uploading foobar.png" + %1 %2 - Click this button to add a folder to synchronize. - Click this button to add a folder to synchronise. + %1 %2 (%3 of %4) + Example text: "Uploading foobar.png (2MB of 2MB)" + %1 %2 (%3 of %4) - Could not decrypt! - Could not decrypt! + %1 %2 … + Example text: "Uploading foobar.png (1MB of 2MB) time left 2 minutes at a rate of 24Kb/s" Example text: "Syncing 'foo.txt', 'bar.txt'" + %1 %2 … %1 (%2) %1 (%2) - Error while loading the list of folders from the server. - Error while loading the list of folders from the server. - - - Virtual file support is enabled. - Virtual file support is enabled. + %1 of %2, file %3 of %4 + Example text: "12 MB of 345 MB, file 6 of 7" + %1 of %2, file %3 of %4 - Signed out - Signed out + %5 left, %1 of %2, file %3 of %4 + %5 left, %1 of %2, file %3 of %4 - Synchronizing virtual files in local folder - Synchronizing virtual files in local folder + , + , - Synchronizing files in local folder - Synchronizing files in local folder + A few seconds left, %1 of %2, file %3 of %4 + Example text: "5 minutes left, 12 MB of 345 MB, file 6 of 7" + A few seconds left, %1 of %2, file %3 of %4 - Checking for changes in remote "%1" - Checking for changes in remote "%1" + About to start syncing + About to start syncing Checking for changes in local "%1" Checking for changes in local "%1" - Syncing local and remote changes - Syncing local and remote changes + Checking for changes in remote "%1" + Checking for changes in remote "%1" - %1 %2 … - Example text: "Uploading foobar.png (1MB of 2MB) time left 2 minutes at a rate of 24Kb/s" Example text: "Syncing 'foo.txt', 'bar.txt'" - %1 %2 … + Click this button to add a folder to synchronize. + Click this button to add a folder to synchronise. + + + Could not decrypt! + Could not decrypt! Download %1/s @@ -2071,57 +2092,49 @@ For advanced users: this issue might be related to multiple sync database files Download %1/s - File %1 of %2 - File %1 of %2 - - - There are unresolved conflicts. Click for details. - There are unresolved conflicts. Click for details. - - - , - , + Error while loading the list of folders from the server. + Error while loading the list of folders from the server. Fetching folder list from server … Fetching folder list from server … - ↓ %1/s - ↓ %1/s + File %1 of %2 + File %1 of %2 - Upload %1/s - Example text: "Upload 24Kb/s" (%1 is replaced by 24Kb (translated)) - Upload %1/s + Preparing to sync … + Preparing to sync … + + + Signed out + Signed out - ↑ %1/s - ↑ %1/s + Synchronizing files in local folder + Synchronizing files in local folder - %1 %2 (%3 of %4) - Example text: "Uploading foobar.png (2MB of 2MB)" - %1 %2 (%3 of %4) + Synchronizing virtual files in local folder + Synchronizing virtual files in local folder - %1 %2 - Example text: "Uploading foobar.png" - %1 %2 + Syncing local and remote changes + Syncing local and remote changes - A few seconds left, %1 of %2, file %3 of %4 - Example text: "5 minutes left, 12 MB of 345 MB, file 6 of 7" - A few seconds left, %1 of %2, file %3 of %4 + There are unresolved conflicts. Click for details. + There are unresolved conflicts. Click for details. - %5 left, %1 of %2, file %3 of %4 - %5 left, %1 of %2, file %3 of %4 + Upload %1/s + Example text: "Upload 24Kb/s" (%1 is replaced by 24Kb (translated)) + Upload %1/s - %1 of %2, file %3 of %4 - Example text: "12 MB of 345 MB, file 6 of 7" - %1 of %2, file %3 of %4 + Virtual file support is enabled. + Virtual file support is enabled. Waiting for %n other folder(s) … @@ -2131,14 +2144,18 @@ For advanced users: this issue might be related to multiple sync database files - About to start syncing - About to start syncing + You need to be connected to add a folder + You need to be connected to add a folder - Preparing to sync … - Preparing to sync … + ↑ %1/s + ↑ %1/s - + + ↓ %1/s + ↓ %1/s + + OCC::FolderWatcher @@ -2182,20 +2199,20 @@ For advanced users: this issue might be related to multiple sync database files OCC::FolderWizardRemotePath - Create Remote Folder - Create Remote Folder + Authentication failed accessing %1 + Authentication failed accessing %1 - Enter the name of the new folder to be created below "%1": - Enter the name of the new folder to be created below "%1": + Choose this to sync the entire account + Choose this to sync the entire account - Folder was successfully created on %1. - Folder was successfully created on %1. + Create Remote Folder + Create Remote Folder - Authentication failed accessing %1 - Authentication failed accessing %1 + Enter the name of the new folder to be created below "%1": + Enter the name of the new folder to be created below "%1": Failed to create the folder on %1. Please check manually. @@ -2206,8 +2223,8 @@ For advanced users: this issue might be related to multiple sync database files Failed to list a folder. Error: %1 - Choose this to sync the entire account - Choose this to sync the entire account + Folder was successfully created on %1. + Folder was successfully created on %1. Please choose a different location. %1 is already being synced to %2. @@ -2216,216 +2233,173 @@ For advanced users: this issue might be related to multiple sync database files OCC::FolderWizardSelectiveSync - - Use virtual files instead of downloading content immediately %1 - Use virtual files instead of downloading content immediately %1 - (experimental) (experimental) - Virtual files are not supported for Windows partition roots as local folder. Please choose a valid subfolder under drive letter. - Virtual files are not supported for Windows partition roots as local folder. Please choose a valid subfolder under drive letter. + Use virtual files instead of downloading content immediately %1 + Use virtual files instead of downloading content immediately %1 Virtual files are not supported at the selected location Virtual files are not supported at the selected location - - - OCC::GETFileJob - - No E-Tag received from server, check Proxy/Gateway - No E-Tag received from server, check Proxy/Gateway - - - We received a different E-Tag for resuming. Retrying next time. - We received a different E-Tag for resuming. Retrying next time. - - - We received an unexpected download Content-Length. - We received an unexpected download Content-Length. - - - Server returned wrong content-range - Server returned wrong content-range - - - Connection Timeout - Connection Timeout + + Virtual files are not supported for Windows partition roots as local folder. Please choose a valid subfolder under drive letter. + Virtual files are not supported for Windows partition roots as local folder. Please choose a valid subfolder under drive letter. - + OCC::GeneralSettings - General Settings - General Settings + &Automatically check for updates + &Automatically check for updates - Show Call Notifications - Show Call Notifications + &Launch on System Startup + &Launch on System Startup - For System Tray - For System Tray + &Restart && Update + &Restart && Update - Show Chat Notifications - Show Chat Notifications + - beta: contains versions with new features that may not be tested thoroughly +- daily: contains versions created daily only for testing and development + +Downgrading versions is not possible immediately: changing from beta to stable means waiting for the new stable version. + list of available update channels to non enterprise users and downgrading warning + - beta: contains versions with new features that may not be tested thoroughly +- daily: contains versions created daily only for testing and development + +Downgrading versions is not possible immediately: changing from beta to stable means waiting for the new stable version. - Show Server &Notifications - Show Server &Notifications + - enterprise: contains stable versions for customers. + +Downgrading versions is not possible immediately: changing from stable to enterprise means waiting for the new enterprise version. + list of available update channels to enterprise users and downgrading warning + - enterprise: contains stable versions for customers. + +Downgrading versions is not possible immediately: changing from stable to enterprise means waiting for the new enterprise version. Advanced Advanced - - MB - Trailing part of "Ask confirmation before syncing folder larger than" - MB - Ask for confirmation before synchronizing external storages Ask for confirmation before synchronising external storages - - &Launch on System Startup - &Launch on System Startup - - - Use &Monochrome Icons - Use &Monochrome Icons - Ask for confirmation before synchronizing new folders larger than Ask for confirmation before synchronizing new folders larger than - - Notify when synchronised folders grow larger than specified limit - Notify when synchronised folders grow larger than specified limit - Automatically disable synchronisation of folders that overcome limit Automatically disable synchronisation of folders that overcome limit - Move removed files to trash - Move removed files to trash + Cancel + Cancel - Show sync folders in &Explorer's navigation pane - Show sync folders in &Explorer's navigation pane + Change update channel + Change update channel - S&how crash reporter - S&how crash reporter + Changing update channel? + Changing update channel? - Server poll interval - Server poll interval + Check Now + Check Now - seconds (if <a href="https://github.com/nextcloud/notify_push">Client Push</a> is unavailable) - seconds (if <a href="https://github.com/nextcloud/notify_push">Client Push</a> is unavailable) + Create Debug Archive + Create Debug Archive - Edit &Ignored Files - Edit &Ignored Files - - - Create Debug Archive - Create Debug Archive + Debug Archive Created + Debug Archive Created - Info - Info + Debug archive is created at %1 + Debug archive is created at %1 - + Desktop client x.x.x Desktop client x.x.x - Update channel - Update channel + Edit &Ignored Files + Edit &Ignored Files - &Automatically check for updates - &Automatically check for updates + For System Tray + For System Tray - Check Now - Check Now + General Settings + General Settings - Usage Documentation - Usage Documentation + Info + Info Legal Notice Legal Notice - &Restart && Update - &Restart && Update + MB + Trailing part of "Ask confirmation before syncing folder larger than" + MB - Server notifications that require attention. - Server notifications that require attention. + Move removed files to trash + Move removed files to trash - Show chat notification dialogs. - Show chat notification dialogs. + Notify when synchronised folders grow larger than specified limit + Notify when synchronised folders grow larger than specified limit - Show call notification dialogs. - Show call notification dialogues. + S&how crash reporter + S&how crash reporter - You cannot disable autostart because system-wide autostart is enabled. - You cannot disable autostart because system-wide autostart is enabled. + Server notifications that require attention. + Server notifications that require attention. - stable - stable + Server poll interval + Server poll interval - beta - beta + Show Call Notifications + Show Call Notifications - daily - daily + Show Chat Notifications + Show Chat Notifications - enterprise - enterprise + Show Server &Notifications + Show Server &Notifications - - beta: contains versions with new features that may not be tested thoroughly -- daily: contains versions created daily only for testing and development - -Downgrading versions is not possible immediately: changing from beta to stable means waiting for the new stable version. - list of available update channels to non enterprise users and downgrading warning - - beta: contains versions with new features that may not be tested thoroughly -- daily: contains versions created daily only for testing and development - -Downgrading versions is not possible immediately: changing from beta to stable means waiting for the new stable version. + Show call notification dialogs. + Show call notification dialogues. - - enterprise: contains stable versions for customers. - -Downgrading versions is not possible immediately: changing from stable to enterprise means waiting for the new enterprise version. - list of available update channels to enterprise users and downgrading warning - - enterprise: contains stable versions for customers. - -Downgrading versions is not possible immediately: changing from stable to enterprise means waiting for the new enterprise version. + Show chat notification dialogs. + Show chat notification dialogs. - Changing update channel? - Changing update channel? + Show sync folders in &Explorer's navigation pane + Show sync folders in &Explorer's navigation pane The channel determines which upgrades will be offered to install: @@ -2437,40 +2411,71 @@ Downgrading versions is not possible immediately: changing from stable to enterp - Change update channel - Change update channel + Update channel + Update channel - Cancel - Cancel + Usage Documentation + Usage Documentation + + + Use &Monochrome Icons + Use &Monochrome Icons + + + You cannot disable autostart because system-wide autostart is enabled. + You cannot disable autostart because system-wide autostart is enabled. Zip Archives Zip Archives - Debug Archive Created - Debug Archive Created + beta + beta - Debug archive is created at %1 - Debug archive is created at %1 + daily + daily - + + enterprise + enterprise + + + seconds (if <a href="https://github.com/nextcloud/notify_push">Client Push</a> is unavailable) + seconds (if <a href="https://github.com/nextcloud/notify_push">Client Push</a> is unavailable) + + + stable + stable + + - OCC::GetOrCreatePublicLinkShare + OCC::GETFileJob - Password for share required - Password for share required + Connection Timeout + Connection Timeout + + + No E-Tag received from server, check Proxy/Gateway + No E-Tag received from server, check Proxy/Gateway - Please enter a password for your link share: - Please enter a password for your link share: + Server returned wrong content-range + Server returned wrong content-range - Sharing error - Sharing error + We received a different E-Tag for resuming. Retrying next time. + We received a different E-Tag for resuming. Retrying next time. + + + We received an unexpected download Content-Length. + We received an unexpected download Content-Length. + + + OCC::GetOrCreatePublicLinkShare Could not retrieve or create the public link share. Error: @@ -2479,43 +2484,55 @@ Downgrading versions is not possible immediately: changing from stable to enterp %1 - - - OCC::HttpCredentialsGui + + Password for share required + Password for share required + - Please enter %1 password:<br><br>Username: %2<br>Account: %3<br> - Please enter %1 password:<br><br>Username: %2<br>Account: %3<br> + Please enter a password for your link share: + Please enter a password for your link share: - Reading from keychain failed with error: "%1" - Reading from keychain failed with error: "%1" + Sharing error + Sharing error + + + OCC::HttpCredentialsGui + <a href="%1">Click here</a> to request an app password from the web interface. + <a href="%1">Click here</a> to request an app password from the web interface. + + Enter Password Enter Password - <a href="%1">Click here</a> to request an app password from the web interface. - <a href="%1">Click here</a> to request an app password from the web interface. + Please enter %1 password:<br><br>Username: %2<br>Account: %3<br> + Please enter %1 password:<br><br>Username: %2<br>Account: %3<br> - + + Reading from keychain failed with error: "%1" + Reading from keychain failed with error: "%1" + + OCC::IgnoreListEditor - Ignored Files Editor - Ignored Files Editor + Files Ignored by Patterns + Files Ignored by Patterns Global Ignore Settings Global Ignore Settings - Sync hidden files - Sync hidden files + Ignored Files Editor + Ignored Files Editor - Files Ignored by Patterns - Files Ignored by Patterns + Sync hidden files + Sync hidden files This entry is provided by the system at "%1" and cannot be modified in this view. @@ -2525,24 +2542,28 @@ Downgrading versions is not possible immediately: changing from stable to enterp OCC::IgnoreListTableWidget - Pattern - Pattern + Add + Add - Allow Deletion - Allow Deletion + Add Ignore Pattern + Add Ignore Pattern - Add - Add + Add a new ignore pattern: + Add a new ignore pattern: + + + Allow Deletion + Allow Deletion - Remove - Remove + Cannot write changes to "%1". + Cannot write changes to "%1". - Remove all - Remove all + Could not open file + Could not open file Files or folders matching a pattern will not be synchronized. @@ -2553,131 +2574,119 @@ Items where deletion is allowed will be deleted if they prevent a directory from Items where deletion is allowed will be deleted if they prevent a directory from being removed. This is useful for meta data. - Could not open file - Could not open file - - - Cannot write changes to "%1". - Cannot write changes to "%1". + Pattern + Pattern - Add Ignore Pattern - Add Ignore Pattern + Remove + Remove - Add a new ignore pattern: - Add a new ignore pattern: + Remove all + Remove all - + OCC::InvalidFilenameDialog - Invalid filename - Invalid filename + Cannot rename file because a file with the same name does already exist on the server. Please pick another name. + Cannot rename file because a file with the same name does already exist on the server. Please pick another name. - The file could not be synced because it contains characters which are not allowed on this system. - The file could not be synced because its name contains characters which are not allowed on this system. + Checking rename permissions … + Checking rename permissions … + + + Could not rename file. Please make sure you are connected to the server. + Could not rename file. Please make sure you are connected to the server. + Could not rename local file. %1 + Could not rename local file. %1 + + Error Error - Please enter a new name for the file: - Please enter a new name for the file: + Failed to fetch permissions with error %1 + Failed to fetch permissions with error %1 - New filename - New filename + Filename contains illegal characters: %1 + Filename contains illegal characters: %1 - Rename file - Rename file + Filename contains leading and trailing spaces. + Filename contains leading and trailing spaces. - The file "%1" could not be synced because the name contains characters which are not allowed on this system. - The file "%1" could not be synced because the name contains characters which are not allowed on this system. - - - The following characters are not allowed on the system: \ / : ? * " < > | leading/trailing spaces - The following characters are not allowed on the system: \ / : ? * " < > | leading/trailing spaces - - - The file "%1" could not be synced because the name contains characters which are not allowed on the server. - The file "%1" could not be synced because the name contains characters which are not allowed on the server. + Filename contains leading spaces. + Filename contains leading spaces. - The following characters are not allowed: %1 - The following characters are not allowed: %1 + Filename contains trailing spaces. + Filename contains trailing spaces. - The following basenames are not allowed: %1 - The following basenames are not allowed: %1 + Invalid filename + Invalid filename - The following filenames are not allowed: %1 - The following filenames are not allowed: %1 + New filename + New filename - The following file extensions are not allowed: %1 - The following file extensions are not allowed: %1 + Please enter a new name for the file: + Please enter a new name for the file: - Checking rename permissions … - Checking rename permissions … + Rename file + Rename file - You don't have the permission to rename this file. Please ask the author of the file to rename it. - You don't have the permission to rename this file. Please ask the author of the file to rename it. + The file "%1" could not be synced because the name contains characters which are not allowed on the server. + The file "%1" could not be synced because the name contains characters which are not allowed on the server. - Failed to fetch permissions with error %1 - Failed to fetch permissions with error %1 + The file "%1" could not be synced because the name contains characters which are not allowed on this system. + The file "%1" could not be synced because the name contains characters which are not allowed on this system. - Filename contains leading and trailing spaces. - Filename contains leading and trailing spaces. + The file could not be synced because it contains characters which are not allowed on this system. + The file could not be synced because its name contains characters which are not allowed on this system. - Filename contains leading spaces. - Filename contains leading spaces. + The following basenames are not allowed: %1 + The following basenames are not allowed: %1 - Filename contains trailing spaces. - Filename contains trailing spaces. + The following characters are not allowed on the system: \ / : ? * " < > | leading/trailing spaces + The following characters are not allowed on the system: \ / : ? * " < > | leading/trailing spaces - Use invalid name - Use invalid name + The following characters are not allowed: %1 + The following characters are not allowed: %1 - Filename contains illegal characters: %1 - Filename contains illegal characters: %1 + The following file extensions are not allowed: %1 + The following file extensions are not allowed: %1 - Could not rename file. Please make sure you are connected to the server. - Could not rename file. Please make sure you are connected to the server. + The following filenames are not allowed: %1 + The following filenames are not allowed: %1 - Cannot rename file because a file with the same name does already exist on the server. Please pick another name. - Cannot rename file because a file with the same name does already exist on the server. Please pick another name. + Use invalid name + Use invalid name - Could not rename local file. %1 - Could not rename local file. %1 + You don't have the permission to rename this file. Please ask the author of the file to rename it. + You don't have the permission to rename this file. Please ask the author of the file to rename it. - + OCC::LegalNotice - - Legal notice - Legal notice - - - Close - Close - <p>Copyright 2017-2025 Nextcloud GmbH<br />Copyright 2012-2023 ownCloud GmbH</p> <p>Copyright 2017-2025 Nextcloud GmbH<br />Copyright 2012-2023 ownCloud GmbH</p> @@ -2686,14 +2695,30 @@ Items where deletion is allowed will be deleted if they prevent a directory from <p>Licensed under the GNU General Public License (GPL) Version 2.0 or any later version.</p> <p>Licensed under the GNU General Public License (GPL) Version 2.0 or any later version.</p> - + + Close + Close + + + Legal notice + Legal notice + + OCC::LogBrowser + + Enable logging to temporary folder + Enable logging to temporary folder + Log Output Log Output + Open folder + Open folder + + The client can write debug logs to a temporary folder. These logs are very helpful for diagnosing problems. Since log files can get large, the client will start a new one for each sync run and compress older ones. It will also delete log files after a couple of hours to avoid consuming too much disk space. If enabled, logs will be written to %1 @@ -2701,38 +2726,26 @@ If enabled, logs will be written to %1 Since log files can get large, the client will start a new one for each sync run and compress older ones. It will also delete log files after a couple of hours to avoid consuming too much disk space. If enabled, logs will be written to %1 - - Enable logging to temporary folder - Enable logging to temporary folder - This setting persists across client restarts. Note that using any logging command line options will override this setting. This setting persists across client restarts. Note that using any logging command line options will override this setting. - - Open folder - Open folder - - + OCC::Logger - - Error - Error - <nobr>File "%1"<br/>cannot be opened for writing.<br/><br/>The log output <b>cannot</b> be saved!</nobr> <nobr>File "%1"<br/>cannot be opened for writing.<br/><br/>The log output <b>cannot</b> be saved!</nobr> - + + Error + Error + + OCC::Mac::FileProviderEditLocallyJob - - Could not start editing locally. - Could not start editing locally. - An error occurred during setup. An error occurred during setup. @@ -2749,178 +2762,178 @@ Note that using any logging command line options will override this setting.Could not get file identifier. Could not get file identifier. + + Could not start editing locally. + Could not start editing locally. + The file identifier is empty. The file identifier is empty. - OCC::NSISUpdater + OCC::NetworkSettings - New Version Available - New Version Available + Download Bandwidth + Download Bandwidth - <p>A new version of the %1 Client is available.</p><p><b>%2</b> is available for download. The installed version is %3.</p> - <p>A new version of the %1 Client is available.</p><p><b>%2</b> is available for download. The installed version is %3.</p> + HTTP(S) proxy + HTTP(S) proxy - Update Failed - Update Failed + Host + Host - <p>A new version of the %1 Client is available but the updating process failed.</p><p><b>%2</b> has been downloaded. The installed version is %3. If you confirm restart and update, your computer may reboot to complete the installation.</p> - <p>A new version of the %1 Client is available but the updating process failed.</p><p><b>%2</b> has been downloaded. The installed version is %3. If you confirm restart and update, your computer may reboot to complete the installation.</p> + Hostname of proxy server + Hostname of proxy server - Ask again later - Ask again later + KBytes/s + KBytes/s - Restart and update - Restart and update + Limit automatically + Limit automatically - Update manually - Update manually + Limit to + Limit to - Skip this time - Skip this time + Limit to 3/4 of estimated bandwidth + Limit to 3/4 of estimated bandwidth - Get update - Get update + Manually specify proxy + Manually specify proxy - - - OCC::NetworkSettings - Proxy Settings - Proxy Settings + No limit + No limit - Use system proxy - Use system proxy + No proxy + No proxy - Host - Host + Note: proxy settings have no effects for accounts on localhost + Note: proxy settings have no effects for accounts on localhost - Proxy server requires authentication - Proxy server requires authentication + Password for proxy server + Password for proxy server - Download Bandwidth - Download Bandwidth + Proxy Settings + Proxy Settings - Limit to - Limit to + Proxy server requires authentication + Proxy server requires authentication - KBytes/s - KBytes/s + SOCKS5 proxy + SOCKS5 proxy - - Note: proxy settings have no effects for accounts on localhost - Note: proxy settings have no effects for accounts on localhost + + Upload Bandwidth + Upload Bandwidth - Manually specify proxy - Manually specify proxy + Use global settings + Use global settings - No proxy - No proxy + Use system proxy + Use system proxy - Use global settings - Use global settings + Username for proxy server + Username for proxy server + + + OCC::NSISUpdater - No limit - No limit + <p>A new version of the %1 Client is available but the updating process failed.</p><p><b>%2</b> has been downloaded. The installed version is %3. If you confirm restart and update, your computer may reboot to complete the installation.</p> + <p>A new version of the %1 Client is available but the updating process failed.</p><p><b>%2</b> has been downloaded. The installed version is %3. If you confirm restart and update, your computer may reboot to complete the installation.</p> - Limit to 3/4 of estimated bandwidth - Limit to 3/4 of estimated bandwidth + <p>A new version of the %1 Client is available.</p><p><b>%2</b> is available for download. The installed version is %3.</p> + <p>A new version of the %1 Client is available.</p><p><b>%2</b> is available for download. The installed version is %3.</p> - Upload Bandwidth - Upload Bandwidth + Ask again later + Ask again later - Limit automatically - Limit automatically + Get update + Get update - - Hostname of proxy server - Hostname of proxy server + + New Version Available + New Version Available - Username for proxy server - Username for proxy server + Restart and update + Restart and update - Password for proxy server - Password for proxy server + Skip this time + Skip this time - HTTP(S) proxy - HTTP(S) proxy + Update Failed + Update Failed - SOCKS5 proxy - SOCKS5 proxy + Update manually + Update manually - + OCC::OCUpdater - Could not check for new updates. - Could not check for new updates. + %1 available. Restart application to start the update. + %1 available. Restart application to start the update. + + + A new update for %1 is about to be installed. The updater may ask for additional privileges during the process. Your computer may reboot to complete the installation. + A new update for %1 is about to be installed. The updater may ask for additional privileges during the process. Your computer may reboot to complete the installation. Checking update server … Checking update server … - New %1 update ready - New %1 update ready - - - A new update for %1 is about to be installed. The updater may ask for additional privileges during the process. Your computer may reboot to complete the installation. - A new update for %1 is about to be installed. The updater may ask for additional privileges during the process. Your computer may reboot to complete the installation. - - - Downloading %1 … - Downloading %1 … + Could not check for new updates. + Could not check for new updates. - %1 available. Restart application to start the update. - %1 available. Restart application to start the update. + Could not download update. Please open %1 to download the update manually. + Could not download update. Please open %1 to download the update manually. Could not download update. Please open <a href='%1'>%1</a> to download the update manually. Could not download update. Please open <a href='%1'>%1</a> to download the update manually. - Could not download update. Please open %1 to download the update manually. - Could not download update. Please open %1 to download the update manually. - - - New %1 is available. Please open <a href='%2'>%2</a> to download the update. - New %1 is available. Please open <a href='%2'>%2</a> to download the update. + Downloading %1 … + Downloading %1 … New %1 is available. Please open %2 to download the update. New %1 is available. Please open %2 to download the update. - Update status is unknown: Did not check for new updates. - Update status is unknown: Did not check for new updates. + New %1 is available. Please open <a href='%2'>%2</a> to download the update. + New %1 is available. Please open <a href='%2'>%2</a> to download the update. + + + New %1 update ready + New %1 update ready No updates available. Your installation is at the latest version. @@ -2930,90 +2943,166 @@ Note that using any logging command line options will override this setting.Update Check Update Check - + + Update status is unknown: Did not check for new updates. + Update status is unknown: Did not check for new updates. + + OCC::OwncloudAdvancedSetupPage - Connect - Connect + %1 folder "%2" is synced to local folder "%3" + %1 folder "%2" is synced to local folder "%3" + + + %1 free space + %1 gets replaced with the size and a matching unit. Example: 3 MB or 5 GB + %1 free space + + + (%1) + (%1) (experimental) (experimental) - Use &virtual files instead of downloading content immediately %1 - Use &virtual files instead of downloading content immediately %1 + Connect + Connect - Virtual files are not supported for Windows partition roots as local folder. Please choose a valid subfolder under drive letter. - Virtual files are not supported for Windows partition roots as local folder. Please choose a valid subfolder under drive letter. + In Finder's "Locations" sidebar section + In Finder's "Locations" sidebar section - - %1 folder "%2" is synced to local folder "%3" - %1 folder "%2" is synced to local folder "%3" + + Local Sync Folder + Local Sync Folder Sync the folder "%1" Sync the folder "%1" - Warning: The local folder is not empty. Pick a resolution! - Warning: The local folder is not empty. Pick a resolution! + There isn't enough free space in the local folder! + There isn't enough free space in the local folder! - %1 free space - %1 gets replaced with the size and a matching unit. Example: 3 MB or 5 GB - %1 free space + Use &virtual files instead of downloading content immediately %1 + Use &virtual files instead of downloading content immediately %1 Virtual files are not supported at the selected location Virtual files are not supported at the selected location - Local Sync Folder - Local Sync Folder + Virtual files are not supported for Windows partition roots as local folder. Please choose a valid subfolder under drive letter. + Virtual files are not supported for Windows partition roots as local folder. Please choose a valid subfolder under drive letter. - (%1) - (%1) + Warning: The local folder is not empty. Pick a resolution! + Warning: The local folder is not empty. Pick a resolution! + + + OCC::OwncloudConnectionMethodDialog - There isn't enough free space in the local folder! - There isn't enough free space in the local folder! + <html><head/><body><p>Failed to connect to the secure server address <em>%1</em>. How do you wish to proceed?</p></body></html> + <html><head/><body><p>Failed to connect to the secure server address <em>%1</em>. How do you wish to proceed?</p></body></html> + + + <html><head/><body><p>Failed to connect to the secure server address specified. How do you wish to proceed?</p></body></html> + <html><head/><body><p>Failed to connect to the secure server address specified. How do you wish to proceed?</p></body></html> - In Finder's "Locations" sidebar section - In Finder's "Locations" sidebar section + Configure client-side TLS certificate + Configure client-side TLS certificate - - - OCC::OwncloudConnectionMethodDialog Connection failed Connection failed - <html><head/><body><p>Failed to connect to the secure server address specified. How do you wish to proceed?</p></body></html> - <html><head/><body><p>Failed to connect to the secure server address specified. How do you wish to proceed?</p></body></html> + Retry unencrypted over HTTP (insecure) + Retry unencrypted over HTTP (insecure) Select a different URL Select a different URL + + + OCC::ownCloudGui - Retry unencrypted over HTTP (insecure) - Retry unencrypted over HTTP (insecure) + %1 (%2, %3) + %1 (%2, %3) + + + %1: %2 + Example text: "Nextcloud: Syncing 25MB (3 minutes left)" (%1 is the folder name to be synced, %2 a status message for that folder) + %1: %2 - Configure client-side TLS certificate - Configure client-side TLS certificate + Account %1: %2 + Account %1: %2 - <html><head/><body><p>Failed to connect to the secure server address <em>%1</em>. How do you wish to proceed?</p></body></html> - <html><head/><body><p>Failed to connect to the secure server address <em>%1</em>. How do you wish to proceed?</p></body></html> + Account synchronization is disabled + Account synchronisation is disabled - + + Checking for changes in local "%1" + Checking for changes in local "%1" + + + Checking for changes in remote "%1" + Checking for changes in remote "%1" + + + Disconnected from %1 + Disconnected from %1 + + + Disconnected from accounts: + Disconnected from accounts: + + + Please sign in + Please sign in + + + Terms of service + Terms of service + + + The server on account %1 runs an unsupported version %2. Using this client with unsupported server versions is untested and potentially dangerous. Proceed at your own risk. + The server on account %1 runs an unsupported version %2. Using this client with unsupported server versions is untested and potentially dangerous. Proceed at your own risk. + + + There are no sync folders configured. + There are no sync folders configured. + + + Unsupported Server Version + Unsupported Server Version + + + Your account %1 requires you to accept the terms of service of your server. You will be redirected to %2 to acknowledge that you have read it and agrees with it. + Your account %1 requires you to accept the terms of service of your server. You will be redirected to %2 to acknowledge that you have read it and agrees with it. + + + macOS VFS for %1: A problem was encountered. + macOS VFS for %1: A problem was encountered. + + + macOS VFS for %1: Last sync was successful. + macOS VFS for %1: Last sync was successful. + + + macOS VFS for %1: Sync is running. + macOS VFS for %1: Sync is running. + + OCC::OwncloudHttpCredsPage @@ -3038,137 +3127,133 @@ Note that using any logging command line options will override this setting. OCC::OwncloudSetupPage - - The link to your %1 web interface when you open it in the browser. - %1 will be replaced with the application name - The link to your %1 web interface when you open it in the browser. - &Next > &Next > + Could not load certificate. Maybe wrong password? + Could not load certificate. Maybe wrong password? + + Server address does not seem to be valid Server address does not seem to be valid - Could not load certificate. Maybe wrong password? - Could not load certificate. Maybe wrong password? + The link to your %1 web interface when you open it in the browser. + %1 will be replaced with the application name + The link to your %1 web interface when you open it in the browser. - + OCC::OwncloudSetupWizard + <font color="green"><b>File Provider-based account %1 successfully created!</b></font> + <font color="green"><b>File Provider-based account %1 successfully created!</b></font> + + + <font color="green"><b>Local sync folder %1 successfully created!</b></font> + <font colour="green"><b>Local sync folder %1 successfully created!</b></font> + + <font color="green">Successfully connected to %1: %2 version %3 (%4)</font><br/><br/> <font colour="green">Successfully connected to %1: %2 version %3 (%4)</font><br/><br/> - Failed to connect to %1 at %2:<br/>%3 - Failed to connect to %1 at %2:<br/>%3 + <p><font color="red">Remote folder creation failed probably because the provided credentials are wrong.</font><br/>Please go back and check your credentials.</p> + <p><font colour="red">Remote folder creation failed probably because the provided credentials are wrong.</font><br/>Please go back and check your credentials.</p> - Timeout while trying to connect to %1 at %2. - Timeout while trying to connect to %1 at %2. + A sync connection from %1 to remote directory %2 was set up. + A sync connection from %1 to remote directory %2 was set up. Access forbidden by server. To verify that you have proper access, <a href="%1">click here</a> to access the service with your browser. Access forbidden by server. To verify that you have proper access, <a href="%1">click here</a> to access the service with your browser. - Invalid URL - Invalid URL + Cannot remove and back up the folder because the folder or a file in it is open in another program. Please close the folder or file and hit retry or cancel the setup. + Cannot remove and back up the folder because the folder or a file in it is open in another program. Please close the folder or file and hit retry or cancel the setup. - Trying to connect to %1 at %2 … - Trying to connect to %1 at %2 … + Connection to %1 could not be established. Please check again. + Connection to %1 could not be established. Please check again. - The authenticated request to the server was redirected to "%1". The URL is bad, the server is misconfigured. - The authenticated request to the server was redirected to "%1". The URL is bad, the server is misconfigured. + Could not create local folder %1 + Could not create local folder %1 - There was an invalid response to an authenticated WebDAV request - There was an invalid response to an authenticated WebDAV request + Creating local sync folder %1 … + Creating local sync folder %1 … - Local sync folder %1 already exists, setting it up for sync.<br/><br/> - Local sync folder %1 already exists, setting it up for sync.<br/><br/> + Error: %1 + Error: %1 - Creating local sync folder %1 … - Creating local sync folder %1 … + Failed to connect to %1 at %2:<br/>%3 + Failed to connect to %1 at %2:<br/>%3 - OK - OK + Folder rename failed + Folder rename failed - failed. - failed. + Invalid URL + Invalid URL - Could not create local folder %1 - Could not create local folder %1 + Local sync folder %1 already exists, setting it up for sync.<br/><br/> + Local sync folder %1 already exists, setting it up for sync.<br/><br/> No remote folder specified! No remote folder specified! - Error: %1 - Error: %1 - - - creating folder on Nextcloud: %1 - creating folder on Nextcloud: %1 + OK + OK Remote folder %1 created successfully. Remote folder %1 created successfully. - The remote folder %1 already exists. Connecting it for syncing. - The remote folder %1 already exists. Connecting it for syncing. + Remote folder %1 creation failed with error <tt>%2</tt>. + Remote folder %1 creation failed with error <tt>%2</tt>. - The folder creation resulted in HTTP error code %1 - The folder creation resulted in HTTP error code %1 + Successfully connected to %1! + Successfully connected to %1! - The remote folder creation failed because the provided credentials are wrong!<br/>Please go back and check your credentials.</p> - The remote folder creation failed because the provided credentials are wrong!<br/>Please go back and check your credentials.</p> + The authenticated request to the server was redirected to "%1". The URL is bad, the server is misconfigured. + The authenticated request to the server was redirected to "%1". The URL is bad, the server is misconfigured. - <p><font color="red">Remote folder creation failed probably because the provided credentials are wrong.</font><br/>Please go back and check your credentials.</p> - <p><font colour="red">Remote folder creation failed probably because the provided credentials are wrong.</font><br/>Please go back and check your credentials.</p> - - - Remote folder %1 creation failed with error <tt>%2</tt>. - Remote folder %1 creation failed with error <tt>%2</tt>. - - - A sync connection from %1 to remote directory %2 was set up. - A sync connection from %1 to remote directory %2 was set up. + The folder creation resulted in HTTP error code %1 + The folder creation resulted in HTTP error code %1 - Successfully connected to %1! - Successfully connected to %1! + The remote folder %1 already exists. Connecting it for syncing. + The remote folder %1 already exists. Connecting it for syncing. - Connection to %1 could not be established. Please check again. - Connection to %1 could not be established. Please check again. + The remote folder creation failed because the provided credentials are wrong!<br/>Please go back and check your credentials.</p> + The remote folder creation failed because the provided credentials are wrong!<br/>Please go back and check your credentials.</p> - Folder rename failed - Folder rename failed + There was an invalid response to an authenticated WebDAV request + There was an invalid response to an authenticated WebDAV request - Cannot remove and back up the folder because the folder or a file in it is open in another program. Please close the folder or file and hit retry or cancel the setup. - Cannot remove and back up the folder because the folder or a file in it is open in another program. Please close the folder or file and hit retry or cancel the setup. + Timeout while trying to connect to %1 at %2. + Timeout while trying to connect to %1 at %2. - <font color="green"><b>File Provider-based account %1 successfully created!</b></font> - <font color="green"><b>File Provider-based account %1 successfully created!</b></font> + Trying to connect to %1 at %2 … + Trying to connect to %1 at %2 … Virtual files enabled @@ -3179,20 +3264,20 @@ Note that using any logging command line options will override this setting.Your account is now syncing with virtual files support. This means that all your files are online-only by default, and will be downloaded on-demand when you open them. You may find your files under the <b>Locations</b> section of the Finder sidebar. - <font color="green"><b>Local sync folder %1 successfully created!</b></font> - <font colour="green"><b>Local sync folder %1 successfully created!</b></font> + creating folder on Nextcloud: %1 + creating folder on Nextcloud: %1 - + + failed. + failed. + + OCC::OwncloudWizard Add %1 account Add %1 account - - Skip folders configuration - Skip folders configuration - Cancel Cancel @@ -3202,6 +3287,18 @@ Note that using any logging command line options will override this setting.Enable experimental feature? + Enable experimental placeholder mode + Enable experimental placeholder mode + + + Skip folders configuration + Skip folders configuration + + + Stay safe + Stay safe + + When the "virtual files" mode is enabled no files will be downloaded initially. Instead, a tiny "%1" file will be created for each file that exists on the server. The contents can be downloaded by running these files or by using their context menu. The virtual files mode is mutually exclusive with selective sync. Currently unselected folders will be translated to online-only folders and your selective sync settings will be reset. @@ -3217,15 +3314,7 @@ Switching to this mode will abort any currently running synchronization. This is a new, experimental mode. If you decide to use it, please report any issues that come up. - - Enable experimental placeholder mode - Enable experimental placeholder mode - - - Stay safe - Stay safe - - + OCC::PasswordInputDialog @@ -3247,169 +3336,169 @@ This is a new, experimental mode. If you decide to use it, please report any iss OCC::ProcessDirectoryJob - Symbolic links are not supported in syncing. - Symbolic links are not supported in syncing. - - - File is listed on the ignore list. - File is listed on the ignore list. + %1 name containing the character "%2" is not supported on this file system. + folder or file impossible to sync due to an invalid name, placeholders will be file or folder and the invalid character + %1 name containing the character "%2" is not supported on this file system. - File names ending with a period are not supported on this file system. - File names ending with a period are not supported on this file system. + %1 name contains at least one invalid character + %1 name contains at least one invalid character - Filename contains trailing spaces. - Filename contains trailing spaces. + %1 name is a reserved name on this file system. + %1 name is a reserved name on this file system. Cannot be renamed or uploaded. Cannot be renamed or uploaded. - Folder - name of folder entity to use when warning about invalid name - Folder + Cannot modify encrypted item because the selected certificate is not valid. + Cannot modify encrypted item because the selected certificate is not valid. - File - name of folder entity to use when warning about invalid name - File + Cannot sync due to invalid modification time + Cannot sync due to invalid modification time - %1 name containing the character "%2" is not supported on this file system. - folder or file impossible to sync due to an invalid name, placeholders will be file or folder and the invalid character - %1 name containing the character "%2" is not supported on this file system. + Case Clash Conflict: Server file downloaded and renamed to avoid clash. + Case Clash Conflict: Server file downloaded and renamed to avoid clash. - Filename contains leading spaces. - Filename contains leading spaces. + Conflict: Server version downloaded, local copy renamed and not uploaded. + Conflict: Server version downloaded, local copy renamed and not uploaded. - %1 name contains at least one invalid character - %1 name contains at least one invalid character + Could not upload file, because it is open in "%1". + Could not upload file, because it is open in "%1". - %1 name is a reserved name on this file system. - %1 name is a reserved name on this file system. + Error while deleting file record %1 from the database + Error while deleting file record %1 from the database - Filename contains leading and trailing spaces. - Filename contains leading and trailing spaces. + Error while reading the database + Error while reading the database - Filename is too long. - Filename is too long. + File + name of folder entity to use when warning about invalid name + File - File/Folder is ignored because it's hidden. - File/Folder is ignored because it's hidden. + File has extension reserved for virtual files. + File has extension reserved for virtual files. - Stat failed. - Stat failed. + File is listed on the ignore list. + File is listed on the ignore list. - Conflict: Server version downloaded, local copy renamed and not uploaded. - Conflict: Server version downloaded, local copy renamed and not uploaded. + File names ending with a period are not supported on this file system. + File names ending with a period are not supported on this file system. - Case Clash Conflict: Server file downloaded and renamed to avoid clash. - Case Clash Conflict: Server file downloaded and renamed to avoid clash. + File/Folder is ignored because it's hidden. + File/Folder is ignored because it's hidden. - The filename cannot be encoded on your file system. - The filename cannot be encoded on your file system. + Filename contains leading and trailing spaces. + Filename contains leading and trailing spaces. - The filename is blacklisted on the server. - The filename is blacklisted on the server. + Filename contains leading spaces. + Filename contains leading spaces. - Reason: the entire filename is forbidden. - Reason: the entire filename is forbidden. + Filename contains trailing spaces. + Filename contains trailing spaces. - Reason: the filename has a forbidden base name (filename start). - Reason: the filename has a forbidden base name (filename start). + Filename is too long. + Filename is too long. - Reason: the file has a forbidden extension (.%1). - Reason: the file has a forbidden extension (.%1). + Folder + name of folder entity to use when warning about invalid name + Folder - Reason: the filename contains a forbidden character (%1). - Reason: the filename contains a forbidden character (%1). + Ignored because of the "choose what to sync" blacklist + Ignored because of the "choose what to sync" blacklist - File has extension reserved for virtual files. - File has extension reserved for virtual files. + Moved to invalid target, restoring + Moved to invalid target, restoring - size - size + Not allowed because you don't have permission to add files in that folder + Not allowed because you don't have permission to add files in that folder - permission - permission + Not allowed because you don't have permission to add subfolders to that folder + Not allowed because you don't have permission to add subfolders to that folder - file id - file id + Not allowed to remove, restoring + Not allowed to remove, restoring - Server reported no %1 - Server reported no %1 + Not allowed to upload this file because it is read-only on the server, restoring + Not allowed to upload this file because it is read-only on the server, restoring - Cannot sync due to invalid modification time - Cannot sync due to invalid modification time + Reason: the entire filename is forbidden. + Reason: the entire filename is forbidden. - Could not upload file, because it is open in "%1". - Could not upload file, because it is open in "%1". + Reason: the file has a forbidden extension (.%1). + Reason: the file has a forbidden extension (.%1). - Error while deleting file record %1 from the database - Error while deleting file record %1 from the database + Reason: the filename contains a forbidden character (%1). + Reason: the filename contains a forbidden character (%1). - Moved to invalid target, restoring - Moved to invalid target, restoring + Reason: the filename has a forbidden base name (filename start). + Reason: the filename has a forbidden base name (filename start). - Cannot modify encrypted item because the selected certificate is not valid. - Cannot modify encrypted item because the selected certificate is not valid. + Server replied with an error while reading directory "%1" : %2 + Server replied with an error while reading directory "%1" : %2 + + + Server reported no %1 + Server reported no %1 - Ignored because of the "choose what to sync" blacklist - Ignored because of the "choose what to sync" blacklist + Stat failed. + Stat failed. - Not allowed because you don't have permission to add subfolders to that folder - Not allowed because you don't have permission to add subfolders to that folder + Symbolic links are not supported in syncing. + Symbolic links are not supported in syncing. - Not allowed because you don't have permission to add files in that folder - Not allowed because you don't have permission to add files in that folder + The filename cannot be encoded on your file system. + The filename cannot be encoded on your file system. - Not allowed to upload this file because it is read-only on the server, restoring - Not allowed to upload this file because it is read-only on the server, restoring + The filename is blacklisted on the server. + The filename is blacklisted on the server. - Not allowed to remove, restoring - Not allowed to remove, restoring + file id + file id - Error while reading the database - Error while reading the database + permission + permission - Server replied with an error while reading directory "%1" : %2 - Server replied with an error while reading directory "%1" : %2 + size + size - + OCC::PropagateDirectory @@ -3420,14 +3509,6 @@ This is a new, experimental mode. If you decide to use it, please report any iss Error updating metadata due to invalid modification time Error updating metadata due to invalid modification time - - The folder %1 cannot be made read-only: %2 - The folder %1 cannot be made read-only: %2 - - - unknown exception - unknown exception - Error updating metadata: %1 Error updating metadata: %1 @@ -3436,66 +3517,74 @@ This is a new, experimental mode. If you decide to use it, please report any iss File is currently in use File is currently in use - + + The folder %1 cannot be made read-only: %2 + The folder %1 cannot be made read-only: %2 + + + unknown exception + unknown exception + + OCC::PropagateDownloadFile - Could not get file %1 from local DB - Could not get file %1 from local DB + Could not delete file record %1 from local DB + Could not delete file record %1 from local DB - File %1 cannot be downloaded because encryption information is missing. - File %1 cannot be downloaded because encryption information is missing. + Could not get file %1 from local DB + Could not get file %1 from local DB - Could not delete file record %1 from local DB - Could not delete file record %1 from local DB + Error updating metadata: %1 + Error updating metadata: %1 File %1 can not be downloaded because of a local file name clash! File %1 can not be downloaded because of a local file name clash! - The download would reduce free local disk space below the limit - The download would reduce free local disk space below the limit + File %1 cannot be downloaded because encryption information is missing. + File %1 cannot be downloaded because encryption information is missing. - Free space on disk is less than %1 - Free space on disk is less than %1 + File %1 downloaded but it resulted in a local file name clash! + File %1 downloaded but it resulted in a local file name clash! - File was deleted from server - File was deleted from server + File %1 has invalid modified time reported by server. Do not save it. + File %1 has invalid modified time reported by server. Do not save it. - The file could not be downloaded completely. - The file could not be downloaded completely. + File has changed since discovery + File has changed since discovery - - The downloaded file is empty, but the server said it should have been %1. - The downloaded file is empty, but the server said it should have been %1. + + File was deleted from server + File was deleted from server - File %1 has invalid modified time reported by server. Do not save it. - File %1 has invalid modified time reported by server. Do not save it. + Free space on disk is less than %1 + Free space on disk is less than %1 - File %1 downloaded but it resulted in a local file name clash! - File %1 downloaded but it resulted in a local file name clash! + The download would reduce free local disk space below the limit + The download would reduce free local disk space below the limit - Error updating metadata: %1 - Error updating metadata: %1 + The downloaded file is empty, but the server said it should have been %1. + The downloaded file is empty, but the server said it should have been %1. The file %1 is currently in use The file %1 is currently in use - File has changed since discovery - File has changed since discovery + The file could not be downloaded completely. + The file could not be downloaded completely. - + OCC::PropagateItemJob @@ -3510,37 +3599,41 @@ This is a new, experimental mode. If you decide to use it, please report any iss OCC::PropagateLocalMkdir - could not delete file %1, error: %2 - could not delete file %1, error: %2 + Could not create folder %1 + Could not create folder %1 + + + Error updating metadata: %1 + Error updating metadata: %1 Folder %1 cannot be created because of a local file or folder name clash! Folder %1 cannot be created because of a local file or folder name clash! - Could not create folder %1 - Could not create folder %1 + The file %1 is currently in use + The file %1 is currently in use - + The folder %1 cannot be made read-only: %2 The folder %1 cannot be made read-only: %2 - unknown exception - unknown exception - - - Error updating metadata: %1 - Error updating metadata: %1 + could not delete file %1, error: %2 + could not delete file %1, error: %2 - The file %1 is currently in use - The file %1 is currently in use + unknown exception + unknown exception - + OCC::PropagateLocalRemove + Could not delete file record %1 from local DB + Could not delete file record %1 from local DB + + Could not remove %1 because of a local file name clash Could not remove %1 because of a local file name clash @@ -3548,22 +3641,14 @@ This is a new, experimental mode. If you decide to use it, please report any iss Temporary error when removing local item removed from server. Temporary error when removing local item removed from server. - - Could not delete file record %1 from local DB - Could not delete file record %1 from local DB - - + OCC::PropagateLocalRename - Folder %1 cannot be renamed because of a local file or folder name clash! - Folder %1 cannot be renamed because of a local file or folder name clash! - - - File %1 downloaded but it resulted in a local file name clash! - File %1 downloaded but it resulted in a local file name clash! + Could not delete file record %1 from local DB + Could not delete file record %1 from local DB - + Could not get file %1 from local DB Could not get file %1 from local DB @@ -3575,10 +3660,6 @@ This is a new, experimental mode. If you decide to use it, please report any iss Error updating metadata: %1 Error updating metadata: %1 - - The file %1 is currently in use - The file %1 is currently in use - Failed to propagate directory rename in hierarchy Failed to propagate directory rename in hierarchy @@ -3588,21 +3669,29 @@ This is a new, experimental mode. If you decide to use it, please report any iss Failed to rename file - Could not delete file record %1 from local DB - Could not delete file record %1 from local DB + File %1 downloaded but it resulted in a local file name clash! + File %1 downloaded but it resulted in a local file name clash! - - - OCC::PropagateRemoteDelete - Wrong HTTP code returned by server. Expected 204, but received "%1 %2". - Wrong HTTP code returned by server. Expected 204, but received "%1 %2". + Folder %1 cannot be renamed because of a local file or folder name clash! + Folder %1 cannot be renamed because of a local file or folder name clash! + + The file %1 is currently in use + The file %1 is currently in use + + + + OCC::PropagateRemoteDelete Could not delete file record %1 from local DB Could not delete file record %1 from local DB - + + Wrong HTTP code returned by server. Expected 204, but received "%1 %2". + Wrong HTTP code returned by server. Expected 204, but received "%1 %2". + + OCC::PropagateRemoteDeleteEncryptedRootFolder @@ -3613,33 +3702,49 @@ This is a new, experimental mode. If you decide to use it, please report any iss OCC::PropagateRemoteMkdir - Wrong HTTP code returned by server. Expected 201, but received "%1 %2". - Wrong HTTP code returned by server. Expected 201, but received "%1 %2". + Error writing metadata to the database: %1 + Error writing metadata to the database: %1 Failed to encrypt a folder %1 Failed to encrypt a folder %1 - - Error writing metadata to the database: %1 - Error writing metadata to the database: %1 - The file %1 is currently in use The file %1 is currently in use - + + Wrong HTTP code returned by server. Expected 201, but received "%1 %2". + Wrong HTTP code returned by server. Expected 201, but received "%1 %2". + + OCC::PropagateRemoteMove + + Could not delete file record %1 from local DB + Could not delete file record %1 from local DB + + + Could not get file %1 from local DB + Could not get file %1 from local DB + Could not rename %1 to %2, error: %3 Could not rename %1 to %2, error: %3 + + Error setting pin state + Error setting pin state + Error updating metadata: %1 Error updating metadata: %1 + Error writing metadata to the database + Error writing metadata to the database + + The file %1 is currently in use The file %1 is currently in use @@ -3647,25 +3752,21 @@ This is a new, experimental mode. If you decide to use it, please report any iss Wrong HTTP code returned by server. Expected 201, but received "%1 %2". Wrong HTTP code returned by server. Expected 201, but received "%1 %2". + + + OCC::PropagateUploadFileCommon - Could not get file %1 from local DB - Could not get file %1 from local DB - - - Could not delete file record %1 from local DB - Could not delete file record %1 from local DB + Error updating metadata: %1 + Error updating metadata: %1 - Error setting pin state - Error setting pin state + Failed to unlock encrypted folder. + Failed to unlock encrypted folder. - Error writing metadata to the database - Error writing metadata to the database + Failed to upload encrypted file. + Failed to upload encrypted file. - - - OCC::PropagateUploadFileCommon File %1 cannot be uploaded because another file with the same name, differing only in case, exists File %1 cannot be uploaded because another file with the same name, differing only in case, exists @@ -3675,71 +3776,63 @@ This is a new, experimental mode. If you decide to use it, please report any iss File %1 has invalid modification time. Do not upload to the server. - Local file changed during syncing. It will be resumed. - Local file changed during syncing. It will be resumed. + File Removed (start upload) %1 + File Removed (start upload) %1 - + Local file changed during sync. Local file changed during sync. - Failed to unlock encrypted folder. - Failed to unlock encrypted folder. - - - Unable to upload an item with invalid characters - Unable to upload an item with invalid characters - - - Error updating metadata: %1 - Error updating metadata: %1 + Local file changed during syncing. It will be resumed. + Local file changed during syncing. It will be resumed. The file %1 is currently in use The file %1 is currently in use - Upload of %1 exceeds the quota for the folder - Upload of %1 exceeds the quota for the folder - - - Failed to upload encrypted file. - Failed to upload encrypted file. + Unable to upload an item with invalid characters + Unable to upload an item with invalid characters - File Removed (start upload) %1 - File Removed (start upload) %1 + Upload of %1 exceeds the quota for the folder + Upload of %1 exceeds the quota for the folder - + OCC::PropagateUploadFileNG - - The local file was removed during sync. - The local file was removed during sync. - Local file changed during sync. Local file changed during sync. - Poll URL missing - Poll URL missing + Missing ETag from server + Missing ETag from server + + + Missing File ID from server + Missing File ID from server - Unexpected return code from server (%1) - Unexpected return code from server (%1) + Poll URL missing + Poll URL missing - Missing File ID from server - Missing File ID from server + The local file was removed during sync. + The local file was removed during sync. - Missing ETag from server - Missing ETag from server + Unexpected return code from server (%1) + Unexpected return code from server (%1) - + OCC::PropagateUploadFileV1 + + Local file changed during sync. + Local file changed during sync. + Poll URL missing Poll URL missing @@ -3748,10 +3841,6 @@ This is a new, experimental mode. If you decide to use it, please report any iss The local file was removed during sync. The local file was removed during sync. - - Local file changed during sync. - Local file changed during sync. - The server did not acknowledge the last chunk. (No e-tag was present) The server did not acknowledge the last chunk. (No e-tag was present) @@ -3760,13 +3849,13 @@ This is a new, experimental mode. If you decide to use it, please report any iss OCC::ProxyAuthDialog + Password: + Password: + + Proxy authentication required Proxy authentication required - - Username: - Username: - Proxy: Proxy: @@ -3776,10 +3865,10 @@ This is a new, experimental mode. If you decide to use it, please report any iss The proxy server needs a username and password. - Password: - Password: + Username: + Username: - + OCC::SelectiveSyncDialog @@ -3790,30 +3879,30 @@ This is a new, experimental mode. If you decide to use it, please report any iss OCC::SelectiveSyncWidget - Loading … - Loading … + An error occurred while loading the list of sub folders. + An error occurred while loading the list of sub folders. - + Deselect remote folders you do not wish to synchronize. Deselect remote folders you do not wish to synchronise. - Name - Name + Loading … + Loading … - Size - Size + Name + Name No subfolders currently on the server. No subfolders currently on the server. - An error occurred while loading the list of sub folders. - An error occurred while loading the list of sub folders. + Size + Size - + OCC::ServerNotificationHandler @@ -3823,16 +3912,16 @@ This is a new, experimental mode. If you decide to use it, please report any iss OCC::SettingsDialog - - Settings - Settings - %1 Settings This name refers to the application name e.g Nextcloud %1 Settings + Account + Account + + General General @@ -3841,10 +3930,30 @@ This is a new, experimental mode. If you decide to use it, please report any iss Network - Account - Account - - + Settings + Settings + + + + OCC::ShareeModel + + %1 (%2) + sharee (shareWithAdditionalInfo) + %1 (%2) + + + Global search results + Global search results + + + No results found + No results found + + + Search globally + Search globally + + OCC::ShareManager @@ -3863,272 +3972,246 @@ This is a new, experimental mode. If you decide to use it, please report any iss 1 day - Today - Today - - - Secure file drop link - Secure file drop link + Could not find local folder for %1 + Could not find local folder for %1 - - Share link - Share link + + Internal link + Internal link Link share Link share - - Internal link - Internal link - Secure file drop Secure file drop - Could not find local folder for %1 - Could not find local folder for %1 - - - - OCC::ShareeModel - - Search globally - Search globally - - - No results found - No results found + Secure file drop link + Secure file drop link - Global search results - Global search results + Share link + Share link - %1 (%2) - sharee (shareWithAdditionalInfo) - %1 (%2) + Today + Today - + OCC::SocketApi + + Activity + Activity + Context menu share Context menu share - I shared something with you - I shared something with you + Copy internal link + Copy internal link - Share options - Share options + Copy private link to clipboard + Copy private link to clipboard - Send private link by email … - Send private link by email … + Could not encrypt the following folder: "%1". + +Server replied with error: %2 + Could not encrypt the following folder: "%1". + +Server replied with error: %2 - Copy private link to clipboard - Copy private link to clipboard + Delete + Delete - Failed to encrypt folder at "%1" - Failed to encrypt folder at "%1" + Delete local changes + Delete local changes - The account %1 does not have end-to-end encryption configured. Please configure this in your account settings to enable folder encryption. - The account %1 does not have end-to-end encryption configured. Please configure this in your account settings to enable folder encryption. + Encrypt + Encrypt + + + Expires in %1 minutes + remaining time before lock expires + + Expires in %1 minutes + Expires in %1 minutes + Failed to encrypt folder Failed to encrypt folder - Could not encrypt the following folder: "%1". - -Server replied with error: %2 - Could not encrypt the following folder: "%1". - -Server replied with error: %2 + Failed to encrypt folder at "%1" + Failed to encrypt folder at "%1" Folder encrypted successfully Folder encrypted successfully - The following folder was encrypted successfully: "%1" - The following folder was encrypted successfully: "%1" - - - Select new location … - Select new location … - - - Activity - Activity + I shared something with you + I shared something with you Leave this share Leave this share - Resharing this file is not allowed - Resharing this file is not allowed + Lock file + Lock file - Resharing this folder is not allowed - Resharing this folder is not allowed + Locked by %1 + Locked by %1 - Encrypt - Encrypt + Move and rename … + Move and rename … - Lock file - Lock file + Move and upload … + Move and upload … - Unlock file - Unlock file + Move, rename and upload … + Move, rename and upload … - Locked by %1 - Locked by %1 + Open in browser + Open in browser - - Expires in %1 minutes - remaining time before lock expires - - Expires in %1 minutes - Expires in %1 minutes - + + Resharing this file is not allowed + Resharing this file is not allowed - Resolve conflict … - Resolve conflict … + Resharing this folder is not allowed + Resharing this folder is not allowed - Move and rename … - Move and rename … + Resolve conflict … + Resolve conflict … - Move, rename and upload … - Move, rename and upload … + Select new location … + Select new location … - Delete local changes - Delete local changes + Send private link by email … + Send private link by email … - Move and upload … - Move and upload … + Share options + Share options - Delete - Delete + The account %1 does not have end-to-end encryption configured. Please configure this in your account settings to enable folder encryption. + The account %1 does not have end-to-end encryption configured. Please configure this in your account settings to enable folder encryption. - Copy internal link - Copy internal link + The following folder was encrypted successfully: "%1" + The following folder was encrypted successfully: "%1" - Open in browser - Open in browser + Unlock file + Unlock file - + OCC::SslButton + + %1 + %1 + + + %1 (self-signed) + %1 (self-signed) + <h3>Certificate Details</h3> <h3>Certificate Details</h3> - Common Name (CN): - Common Name (CN): + <h3>Fingerprints</h3> + <h3>Fingerprints</h3> - Subject Alternative Names: - Subject Alternative Names: + <h3>Issuer</h3> + <h3>Issuer</h3> - Organization (O): - Organization (O): + <p><b>Note:</b> This certificate was manually approved</p> + <p><b>Note:</b> This certificate was manually approved</p> - Organizational Unit (OU): - Organizational Unit (OU): + Certificate information: + Certificate information: - State/Province: - State/Province: + Common Name (CN): + Common Name (CN): Country: Country: - Serial: - Serial: + Expires on: + Expires on: - <h3>Issuer</h3> - <h3>Issuer</h3> + Issued on: + Issued on: Issuer: Issuer: - Issued on: - Issued on: - - - Expires on: - Expires on: + No support for SSL session tickets/identifiers + No support for SSL session tickets/identifiers - <h3>Fingerprints</h3> - <h3>Fingerprints</h3> + Organization (O): + Organization (O): - SHA-256: - SHA-256: + Organizational Unit (OU): + Organizational Unit (OU): SHA-1: SHA-1: - <p><b>Note:</b> This certificate was manually approved</p> - <p><b>Note:</b> This certificate was manually approved</p> + SHA-256: + SHA-256: - %1 (self-signed) - %1 (self-signed) + Serial: + Serial: - %1 - %1 + Server version: %1 + Server version: %1 - This connection is encrypted using %1 bit %2. - - This connection is encrypted using %1 bit %2. - - - - Server version: %1 - Server version: %1 - - - No support for SSL session tickets/identifiers - No support for SSL session tickets/identifiers + State/Province: + State/Province: - Certificate information: - Certificate information: + Subject Alternative Names: + Subject Alternative Names: The connection is not secure @@ -4140,70 +4223,76 @@ Server replied with error: %2 This connection is NOT secure as it is not encrypted. - + + This connection is encrypted using %1 bit %2. + + This connection is encrypted using %1 bit %2. + + + OCC::SslErrorDialog - Trust this certificate anyway - Trust this certificate anyway + &lt;not specified&gt; + &lt;not specified&gt; - Untrusted Certificate - Untrusted Certificate + Additional errors: + Additional errors: Cannot connect securely to <i>%1</i>: Cannot connect securely to <i>%1</i>: - Additional errors: - Additional errors: - - - with Certificate %1 - with Certificate %1 + Country: %1 + Country: %1 - &lt;not specified&gt; - &lt;not specified&gt; + Effective Date: %1 + Effective Date: %1 - Organization: %1 - Organisation: %1 + Expiration Date: %1 + Expiration Date: %1 - Unit: %1 - Unit: %1 + Fingerprint (SHA-256): <tt>%1</tt> + Fingerprint (SHA-256): <tt>%1</tt> - Country: %1 - Country: %1 + Fingerprint (SHA-512): <tt>%1</tt> + Fingerprint (SHA-512): <tt>%1</tt> Fingerprint (SHA1): <tt>%1</tt> Fingerprint (SHA1): <tt>%1</tt> - Fingerprint (SHA-256): <tt>%1</tt> - Fingerprint (SHA-256): <tt>%1</tt> + Issuer: %1 + Issuer: %1 + + + Organization: %1 + Organisation: %1 - Fingerprint (SHA-512): <tt>%1</tt> - Fingerprint (SHA-512): <tt>%1</tt> + Trust this certificate anyway + Trust this certificate anyway - Effective Date: %1 - Effective Date: %1 + Unit: %1 + Unit: %1 - Expiration Date: %1 - Expiration Date: %1 + Untrusted Certificate + Untrusted Certificate - Issuer: %1 - Issuer: %1 + with Certificate %1 + with Certificate %1 - + OCC::SyncEngine @@ -4211,25 +4300,16 @@ Server replied with error: %2 %1 (skipped due to earlier error, trying again in %2) - Only %1 are available, need at least %2 to start - Placeholders are postfixed with file sizes using Utility::octetsToString() - Only %1 are available, need at least %2 to start - - - Unable to open or create the local sync database. Make sure you have write access in the sync folder. - Unable to open or create the local sync database. Make sure you have write access in the sync folder. - - - Disk space is low: Downloads that would reduce free space below %1 were skipped. - Disk space is low: Downloads that would reduce free space below %1 were skipped. + Cannot open the sync journal + Cannot open the sync journal - - There is insufficient space available on the server for some uploads. - There is insufficient space available on the server for some uploads. + + Could not set file record to local DB: %1 + Could not set file record to local DB: %1 - Unresolved conflict. - Unresolved conflict. + Could not update file metadata: %1 + Could not update file metadata: %1 Could not update file: %1 @@ -4240,79 +4320,88 @@ Server replied with error: %2 Could not update virtual file metadata: %1 - Could not update file metadata: %1 - Could not update file metadata: %1 + Disk space is low: Downloads that would reduce free space below %1 were skipped. + Disk space is low: Downloads that would reduce free space below %1 were skipped. - Could not set file record to local DB: %1 - Could not set file record to local DB: %1 + Only %1 are available, need at least %2 to start + Placeholders are postfixed with file sizes using Utility::octetsToString() + Only %1 are available, need at least %2 to start - Using virtual files with suffix, but suffix is not set - Using virtual files with suffix, but suffix is not set + There is insufficient space available on the server for some uploads. + There is insufficient space available on the server for some uploads. - Unable to read the blacklist from the local database - Unable to read the blacklist from the local database + Unable to open or create the local sync database. Make sure you have write access in the sync folder. + Unable to open or create the local sync database. Make sure you have write access in the sync folder. Unable to read from the sync journal. Unable to read from the sync journal. - Cannot open the sync journal - Cannot open the sync journal + Unable to read the blacklist from the local database + Unable to read the blacklist from the local database - - - OCC::SyncStatusSummary - Offline - Offline + Unresolved conflict. + Unresolved conflict. - All synced! - All synced! + Using virtual files with suffix, but suffix is not set + Using virtual files with suffix, but suffix is not set + + + OCC::SyncStatusSummary - Some files couldn't be synced! - Some files couldn't be synced! + %1 of %2 + %1 of %2 - See below for errors - See below for errors + %1 of %2 · %3 left + %1 of %2 · %3 left + + + All synced! + All synced! Checking folder changes Checking folder changes - Syncing changes - Syncing changes + Offline + Offline - Sync paused - Sync paused + See below for errors + See below for errors + + + See below for warnings + See below for warnings Some files could not be synced! Some files could not be synced! - See below for warnings - See below for warnings + Some files couldn't be synced! + Some files couldn't be synced! - Syncing - Syncing + Sync paused + Sync paused - %1 of %2 · %3 left - %1 of %2 · %3 left + Syncing + Syncing - %1 of %2 - %1 of %2 + Syncing changes + Syncing changes Syncing file %1 of %2 @@ -4321,58 +4410,54 @@ Server replied with error: %2 OCC::Systray - - Download - Download - Add account Add account - Open main dialog - Open main dialogue - - - Pause sync - Pause sync - - - Resume sync - Resume sync + Download + Download - Settings - Settings + Exit %1 + Exit %1 Help Help - Exit %1 - Exit %1 + Open main dialog + Open main dialogue + + + Pause sync + Pause sync Pause sync for all Pause sync for all + + Resume sync + Resume sync + Resume sync for all Resume sync for all - + + Settings + Settings + + OCC::TermsOfServiceCheckWidget - Waiting for terms to be accepted - Waiting for terms to be accepted - - - Polling - Polling + Copy Link + Copy Link - + Link copied to clipboard. Link copied to clipboard. @@ -4381,10 +4466,14 @@ Server replied with error: %2 Open Browser - Copy Link - Copy Link + Polling + Polling - + + Waiting for terms to be accepted + Waiting for terms to be accepted + + OCC::Theme @@ -4411,35 +4500,35 @@ Server replied with error: %2 Failed to fetch search providers for '%1'. Error: %2 Failed to fetch search providers for '%1'. Error: %2 - - Search has failed for '%2'. - Search has failed for '%2'. - Search has failed for '%1'. Error: %2 Search has failed for '%1'. Error: %2 - + + Search has failed for '%2'. + Search has failed for '%2'. + + OCC::UpdateE2eeFolderMetadataJob - Failed to update folder metadata. - Failed to update folder metadata. + Failed to finalize item. + Failed to finalize item. - + Failed to unlock encrypted folder. Failed to unlock encrypted folder. - Failed to finalize item. - Failed to finalize item. + Failed to update folder metadata. + Failed to update folder metadata. - + OCC::UpdateE2eeFolderUsersMetadataJob - Error updating metadata for a folder %1 - Error updating metadata for a folder %1 + Could not add or remove user %1 to access folder %2 + Unable to add or remove user %1 from accessing folder %2. Could not fetch public key for user %1 @@ -4450,8 +4539,8 @@ Server replied with error: %2 Could not find root encrypted folder for folder %1 - Could not add or remove user %1 to access folder %2 - Unable to add or remove user %1 from accessing folder %2. + Error updating metadata for a folder %1 + Error updating metadata for a folder %1 Failed to unlock a folder. @@ -4460,14 +4549,6 @@ Server replied with error: %2 OCC::User - - End-to-end certificate needs to be migrated to a new one - End-to-end certificate needs to be migrated to a new one - - - Trigger the migration - Trigger the migration - %n notification(s) @@ -4476,146 +4557,162 @@ Server replied with error: %2 - Retry all uploads - Retry all uploads + End-to-end certificate needs to be migrated to a new one + End-to-end certificate needs to be migrated to a new one - Resolve conflict - Resolve conflict + Open Nextcloud Assistant in browser + Open Nextcloud Assistant in browser + Open Nextcloud Talk in browser + Open Nextcloud Talk in browser + + Rename file Rename file - Open Nextcloud Assistant in browser - Open Nextcloud Assistant in browser + Resolve conflict + Resolve conflict - Open Nextcloud Talk in browser - Open Nextcloud Talk in browser + Retry all uploads + Retry all uploads - - - OCC::UserModel - Confirm Account Removal - Confirm Account Removal + Trigger the migration + Trigger the migration + + + OCC::UserModel <p>Do you really want to remove the connection to the account <i>%1</i>?</p><p><b>Note:</b> This will <b>not</b> delete any files.</p> <p>Do you really want to remove the connection to the account <i>%1</i>?</p><p><b>Note:</b> This will <b>not</b> delete any files.</p> - - Remove connection - Remove connection - Cancel Cancel - + + Confirm Account Removal + Confirm Account Removal + + + Remove connection + Remove connection + + OCC::UserStatusSelectorModel + + %1 days + + %1 days + %1 days + + + + %1 hours + + %1 hours + %1 hours + + + + %1 minutes + + %1 minutes + %1 minutes + + - Could not fetch predefined statuses. Make sure you are connected to the server. - Could not fetch predefined statuses. Make sure you are connected to the server. + 1 day + 1 day - Could not fetch status. Make sure you are connected to the server. - Could not fetch status. Make sure you are connected to the server. + 1 hour + 1 hour - Status feature is not supported. You will not be able to set your status. - Status feature is not supported. You will not be able to set your status. + 1 minute + 1 minute - Emojis are not supported. Some status functionality may not work. - Emojis are not supported. Some status functionality may not work. + 30 minutes + 30 minutes - Could not set status. Make sure you are connected to the server. - Could not set status. Make sure you are connected to the server. + 4 hours + 4 hours Could not clear status message. Make sure you are connected to the server. Could not clear status message. Make sure you are connected to the server. - Don't clear - Don't clear - - - 30 minutes - 30 minutes + Could not fetch predefined statuses. Make sure you are connected to the server. + Could not fetch predefined statuses. Make sure you are connected to the server. - 1 hour - 1 hour + Could not fetch status. Make sure you are connected to the server. + Could not fetch status. Make sure you are connected to the server. - 4 hours - 4 hours + Could not set status. Make sure you are connected to the server. + Could not set status. Make sure you are connected to the server. - Today - Today + Don't clear + Don't clear - This week - This week + Emojis are not supported. Some status functionality may not work. + Emojis are not supported. Some status functionality may not work. Less than a minute Less than a minute - 1 minute - 1 minute - - - %1 minutes - - %1 minutes - %1 minutes - - - - %1 hours - - %1 hours - %1 hours - + Status feature is not supported. You will not be able to set your status. + Status feature is not supported. You will not be able to set your status. - 1 day - 1 day + This week + This week - - %1 days - - %1 days - %1 days - + + Today + Today - + OCC::Vfs Please choose a different location. %1 is a drive. It doesn't support virtual files. Please choose a different location. %1 is a drive. It doesn't support virtual files. - - Please choose a different location. %1 isn't a NTFS file system. It doesn't support virtual files. - Please choose a different location. %1 isn't a NTFS file system. It doesn't support virtual files. - Please choose a different location. %1 is a network drive. It doesn't support virtual files. Please choose a different location. %1 is a network drive. It doesn't support virtual files. - + + Please choose a different location. %1 isn't a NTFS file system. It doesn't support virtual files. + Please choose a different location. %1 isn't a NTFS file system. It doesn't support virtual files. + + OCC::VfsDownloadErrorDialog + + %1 could not be downloaded. + %1 could not be downloaded. + + + > More details + > More details + Download error Download error @@ -4625,26 +4722,18 @@ Server replied with error: %2 Error downloading - could not be downloaded - could not be downloaded - - - > More details - > More details + Error downloading %1 + Error downloading %1 More details More details - Error downloading %1 - Error downloading %1 - - - %1 could not be downloaded. - %1 could not be downloaded. + could not be downloaded + could not be downloaded - + OCC::VfsSuffix @@ -4680,202 +4769,230 @@ Server replied with error: %2 OCC::WelcomePage - Form - Form + Easy-to-use web mail, calendaring & contacts + Easy-to-use web mail, calendaring & contacts - Log in - Log in + Form + Form - Sign up with provider - Sign up with provider + Host your own server + Host your own server - + Keep your data secure and under your control Keep your data secure and under your control - Secure collaboration & file exchange - Secure collaboration & file exchange - - - Easy-to-use web mail, calendaring & contacts - Easy-to-use web mail, calendaring & contacts + Log in + Log in Screensharing, online meetings & web conferences Screensharing, online meetings & web conferences - Host your own server - Host your own server + Secure collaboration & file exchange + Secure collaboration & file exchange - - - OCC::ownCloudGui - Please sign in - Please sign in + Sign up with provider + Sign up with provider + + + OwncloudAdvancedSetupPage - There are no sync folders configured. - There are no sync folders configured. + &Local Folder + &Local Folder - - Disconnected from %1 - Disconnected from %1 + + <html><head/><body><p>If this box is checked, existing content in the local folder will be erased to start a clean sync from the server.</p><p>Do not check this if the local content should be uploaded to the servers folder.</p></body></html> + <html><head/><body><p>If this box is checked, existing content in the local folder will be erased to start a clean sync from the server.</p><p>Do not check this if the local content should be uploaded to the servers folder.</p></body></html> - Unsupported Server Version - Unsupported Server Version + Ask before syncing external storages + Ask before syncing external storages - The server on account %1 runs an unsupported version %2. Using this client with unsupported server versions is untested and potentially dangerous. Proceed at your own risk. - The server on account %1 runs an unsupported version %2. Using this client with unsupported server versions is untested and potentially dangerous. Proceed at your own risk. + Ask before syncing folders larger than + Ask before syncing folders larger than - Terms of service - Terms of service + Choose different folder + Choose different folder - Your account %1 requires you to accept the terms of service of your server. You will be redirected to %2 to acknowledge that you have read it and agrees with it. - Your account %1 requires you to accept the terms of service of your server. You will be redirected to %2 to acknowledge that you have read it and agrees with it. + Choose what to sync + Choose what to sync - %1: %2 - Example text: "Nextcloud: Syncing 25MB (3 minutes left)" (%1 is the folder name to be synced, %2 a status message for that folder) - %1: %2 + Erase local folder and start a clean sync + Erase local folder and start a clean sync - macOS VFS for %1: Sync is running. - macOS VFS for %1: Sync is running. + Keep local data + Keep local data - macOS VFS for %1: Last sync was successful. - macOS VFS for %1: Last sync was successful. + Local Folder + Local Folder - macOS VFS for %1: A problem was encountered. - macOS VFS for %1: A problem was encountered. + MB + Trailing part of "Ask confirmation before syncing folder larger than" + MB - Checking for changes in remote "%1" - Checking for changes in remote "%1" + Server address + Server address - Checking for changes in local "%1" - Checking for changes in local "%1" + Sync Logo + Sync Logo - Disconnected from accounts: - Disconnected from accounts: + Synchronize everything from server + Synchronize everything from server - Account %1: %2 - Account %1: %2 + Username + Username + + + OwncloudHttpCredsPage - Account synchronization is disabled - Account synchronisation is disabled + &Password + &Password + + + &Username + &Username + + + OwncloudSetupPage - %1 (%2, %3) - %1 (%2, %3) + Logo + Logo + + + Server address + Server address + + + TextLabel + TextLabel + + + This is the link to your %1 web interface when you open it in the browser. + This is the link to your %1 web interface when you open it in the browser. - OwncloudAdvancedSetupPage + progress - Username - Username + Deleted + Deleted - Local Folder - Local Folder + Deleting + Deleting - Choose different folder - Choose different folder + Downloaded + Downloaded - Server address - Server address + Downloading + Downloading - Sync Logo - Sync Logo + Error + Error - Synchronize everything from server - Synchronize everything from server + Filesystem access error + Filesystem access error - Ask before syncing folders larger than - Ask before syncing folders larger than + Ignored + Ignored - Ask before syncing external storages - Ask before syncing external storages + Ignoring + Ignoring - Keep local data - Keep local data + Moved to %1 + Moved to %1 - <html><head/><body><p>If this box is checked, existing content in the local folder will be erased to start a clean sync from the server.</p><p>Do not check this if the local content should be uploaded to the servers folder.</p></body></html> - <html><head/><body><p>If this box is checked, existing content in the local folder will be erased to start a clean sync from the server.</p><p>Do not check this if the local content should be uploaded to the servers folder.</p></body></html> + Moving + Moving - Erase local folder and start a clean sync - Erase local folder and start a clean sync + Replaced by virtual file + Replaced by virtual file - MB - Trailing part of "Ask confirmation before syncing folder larger than" - MB + Server version downloaded, copied changed local file into case conflict conflict file + Server version downloaded, copied changed local file into case conflict conflict file - Choose what to sync - Choose what to sync + Server version downloaded, copied changed local file into conflict file + Server version downloaded, copied changed local file into conflict file - &Local Folder - &Local Folder + Unknown + Unknown - - - OwncloudHttpCredsPage - &Username - &Username + Updated end-to-end encryption metadata + Updated end-to-end encryption metadata - &Password - &Password + Updated local metadata + Updated local metadata - - - OwncloudSetupPage - TextLabel - TextLabel + Updated local virtual files metadata + Updated local virtual files metadata - Logo - Logo + Updating end-to-end encryption metadata + Updating end-to-end encryption metadata + + + Updating local metadata + Updating local metadata - Server address - Server address + Updating local virtual files metadata + Updating local virtual files metadata - This is the link to your %1 web interface when you open it in the browser. - This is the link to your %1 web interface when you open it in the browser. + Uploaded + Uploaded - + + Uploading + Uploading + + + Virtual file created + Virtual file created + + QObject + + %1: %2 + this displays an error string (%2) for a file %1 + %1: %2 + %nd delay in days after an activity @@ -4884,10 +5001,6 @@ Server replied with error: %2 %nd - - in the future - in the future - %nh delay in hours after an activity @@ -4896,11 +5009,6 @@ Server replied with error: %2 %nh - - 1m - one minute after activity date and time - 1m - %nm delay in minutes after an activity @@ -4910,65 +5018,65 @@ Server replied with error: %2 - now - now + 1m + one minute after activity date and time + 1m - Some time ago - Some time ago + Could not create debug archive in selected location! + Could not create debug archive in selected location! - %1: %2 - this displays an error string (%2) for a file %1 - %1: %2 + Error deleting the file + Error deleting the file + + + Failed to create debug archive + Failed to create debug archive New folder New folder - Failed to create debug archive - Failed to create debug archive + Paths beginning with '#' character are not supported in VFS mode. + Paths beginning with '#' character are not supported in VFS mode. - - Could not create debug archive in selected location! - Could not create debug archive in selected location! + + Some time ago + Some time ago - You renamed %1 - You renamed %1 + Synced %1 + Synced %1 - You deleted %1 - You deleted %1 + You changed %1 + You changed %1 You created %1 You created %1 - You changed %1 - You changed %1 + You deleted %1 + You deleted %1 - Synced %1 - Synced %1 + You renamed %1 + You renamed %1 - Error deleting the file - Error deleting the file + in the future + in the future - Paths beginning with '#' character are not supported in VFS mode. - Paths beginning with '#' character are not supported in VFS mode. + now + now - + ResolveConflictsDialog - - Solve sync conflicts - Solve sync conflicts - %1 files in conflict indicate the number of conflicts to resolve @@ -4977,10 +5085,6 @@ Server replied with error: %2 %1 files in conflict - - Choose if you want to keep the local version, server version, or both. If you choose both, the local file will have a number added to its name. - Choose if you want to keep the local version, server version, or both. If you choose both, the local file will have a number added to its name. - All local versions All local versions @@ -4989,15 +5093,23 @@ Server replied with error: %2 All server versions All server versions + + Cancel + Cancel + + + Choose if you want to keep the local version, server version, or both. If you choose both, the local file will have a number added to its name. + Choose if you want to keep the local version, server version, or both. If you choose both, the local file will have a number added to its name. + Resolve conflicts Resolve conflicts - Cancel - Cancel + Solve sync conflicts + Solve sync conflicts - + ShareDelegate @@ -5008,37 +5120,45 @@ Server replied with error: %2 ShareDetailsPage - An error occurred setting the share password. - An error occurred setting the share password. - - - Edit share - Edit share + Add another link + Add another link - Share label - Share label + Allow resharing + Allow resharing Allow upload and editing Allow upload and editing - View only - View only + An error occurred setting the share password. + An error occurred setting the share password. - File drop (upload only) - File drop (upload only) + Copy share link + Copy share link + + + Edit share + Edit share - Allow resharing - Allow resharing + Enter a note for the recipient + Enter a note for the recipient + + + File drop (upload only) + File drop (upload only) Hide download Hide download + + Note to recipient + Note to recipient + Password protection Password protection @@ -5048,32 +5168,39 @@ Server replied with error: %2 Set expiration date - Note to recipient - Note to recipient + Share label + Share label - Enter a note for the recipient - Enter a note for the recipient + Share link copied! + Share link copied! Unshare Unshare - Add another link - Add another link + View only + View only + + + ShareeSearchField - Share link copied! - Share link copied! + Search for users or groups… + Search for users or groups… - Copy share link - Copy share link + Sharing is not available for this folder + Sharing is not available for this folder ShareView + + Expires in %1 + Expires in %1 + Password required for new share Password required for new share @@ -5086,34 +5213,19 @@ Server replied with error: %2 Shared with you by %1 Shared with you by %1 - - Expires in %1 - Expires in %1 - Sharing is disabled Sharing is disabled - - This item cannot be shared. - This item cannot be shared. - Sharing is disabled. Sharing is disabled. - - - ShareeSearchField - - Search for users or groups… - Search for users or groups… - - - Sharing is not available for this folder - Sharing is not available for this folder + + This item cannot be shared. + This item cannot be shared. - + SyncJournalDb @@ -5124,18 +5236,18 @@ Server replied with error: %2 SyncStatus - Sync now - Sync now + Open browser + Open browser - + Resolve conflicts Resolve conflicts - Open browser - Open browser + Sync now + Sync now - + TalkReplyTextField @@ -5149,10 +5261,6 @@ Server replied with error: %2 TermsOfServiceCheckWidget - - Terms of Service - Terms of Service - Logo Logo @@ -5161,13 +5269,56 @@ Server replied with error: %2 Switch to your browser to accept the terms of service Switch to your browser to accept the terms of service - + + Terms of Service + Terms of Service + + - TrayWindowHeader + theme - Open local or group folders - Open local or group folders + Error occurred during setup + Error occurred during setup + + + Error occurred during sync + Error occurred during sync + + + Preparing to sync + Preparing to sync + + + Stopping sync + Stopping sync + + + Sync is paused + Sync is paused + + + Sync is running + Sync is running + + + Sync status is unknown + Sync status is unknown + + Sync was successful + Sync was successful + + + Sync was successful but some files were ignored + Sync was successful but some files were ignored + + + Waiting to start syncing + Waiting to start syncing + + + + TrayWindowHeader More apps More apps @@ -5176,7 +5327,11 @@ Server replied with error: %2 Open %1 in browser Open %1 in browser - + + Open local or group folders + Open local or group folders + + UnifiedSearchInputContainer @@ -5229,67 +5384,83 @@ Server replied with error: %2 UserLine - Switch to account - Switch to account - - - Current account status is online - Current account status is online + Account actions + Account actions Current account status is do not disturb Current account status is do not disturb - Account actions - Account actions + Current account status is online + Current account status is online - Set status - Set status + Log in + Log in Log out Log out - - Log in - Log in - Remove account Remove account - + + Set status + Set status + + + Switch to account + Switch to account + + UserStatusSelector - Online status - Online status + Appear offline + Appear offline - Online - Online + Apply + Apply - + Away Away + + Cancel + Cancel + + + Clear + Clear + + + Clear status message after + Clear status message after + Do not disturb Do not disturb + + Invisible + Invisible + Mute all notifications Mute all notifications - Invisible - Invisible + Online + Online - Appear offline - Appear offline + Online status + Online status Status message @@ -5299,59 +5470,33 @@ Server replied with error: %2 What is your status? What is your status? + + + Utility - Clear status message after - Clear status message after - - - Cancel - Cancel + %1 %2 + %1 %2 - - Clear - Clear + + %L1 B + %L1 B - - Apply - Apply - - - - Utility %L1 GB %L1 GB - - %L1 MB - %L1 MB - %L1 KB %L1 KB - %L1 B - %L1 B + %L1 MB + %L1 MB %L1 TB %L1 TB - - %n year(s) - - %n year - %n years - - - - %n month(s) - - %n month - %n months - - %n day(s) @@ -5373,6 +5518,13 @@ Server replied with error: %2 %n minutes + + %n month(s) + + %n month + %n months + + %n second(s) @@ -5380,223 +5532,70 @@ Server replied with error: %2 %n seconds - - %1 %2 - %1 %2 - - - - ValidateChecksumHeader - - The checksum header is malformed. - The checksum header is malformed. - - - The checksum header contained an unknown checksum type "%1" - The checksum header contained an unknown checksum type "%1" - - - The downloaded file does not match the checksum, it will be resumed. "%1" != "%2" - The downloaded file does not match the checksum, it will be resumed. "%1" != "%2" - - - - main.cpp - - System Tray not available - System Tray not available - - - %1 requires on a working system tray. If you are running XFCE, please follow <a href="http://docs.xfce.org/xfce/xfce4-panel/systray">these instructions</a>. Otherwise, please install a system tray application such as "trayer" and try again. - %1 requires on a working system tray. If you are running XFCE, please follow <a href="http://docs.xfce.org/xfce/xfce4-panel/systray">these instructions</a>. Otherwise, please install a system tray application such as "trayer" and try again. - - - - nextcloudTheme::aboutInfo() - - <p><small>Built from Git revision <a href="%1">%2</a> on %3, %4 using Qt %5, %6</small></p> - <p><small>Built from Git revision <a href="%1">%2</a> on %3, %4 using Qt %5, %6</small></p> - - - - progress - - Virtual file created - Virtual file created - - - Replaced by virtual file - Replaced by virtual file - - - Downloaded - Downloaded - - - Uploaded - Uploaded - - - Server version downloaded, copied changed local file into conflict file - Server version downloaded, copied changed local file into conflict file - - - Server version downloaded, copied changed local file into case conflict conflict file - Server version downloaded, copied changed local file into case conflict conflict file - - - Deleted - Deleted - - - Moved to %1 - Moved to %1 - - - Ignored - Ignored - - - Filesystem access error - Filesystem access error - - - Error - Error - - - Updated local metadata - Updated local metadata - - - Updated local virtual files metadata - Updated local virtual files metadata - - - Updated end-to-end encryption metadata - Updated end-to-end encryption metadata - - - Unknown - Unknown - - - Downloading - Downloading - - - Uploading - Uploading - - - Deleting - Deleting - - - Moving - Moving - - - Ignoring - Ignoring - - - Updating local metadata - Updating local metadata - - - Updating local virtual files metadata - Updating local virtual files metadata - - - Updating end-to-end encryption metadata - Updating end-to-end encryption metadata + + %n year(s) + + %n year + %n years + - + - theme - - Sync status is unknown - Sync status is unknown - - - Waiting to start syncing - Waiting to start syncing - - - Sync is running - Sync is running - + utility - Sync was successful - Sync was successful + Always available locally + Always available locally - Sync was successful but some files were ignored - Sync was successful but some files were ignored + Available online only + Available online only - Error occurred during sync - Error occurred during sync + Could not open browser + Could not open browser - Error occurred during setup - Error occurred during setup + Could not open email client + Could not open email client - Stopping sync - Stopping sync + Currently available locally + Currently available locally - Preparing to sync - Preparing to sync + Free up local space + Free up local space - - Sync is paused - Sync is paused + + Make always available locally + Make always available locally - - - utility - Could not open browser - Could not open browser + Some available online only + Some available online only There was an error when launching the browser to go to URL %1. Maybe no default browser is configured? There was an error when launching the browser to go to URL %1. Maybe no default browser is configured? - - Could not open email client - Could not open email client - There was an error when launching the email client to create a new message. Maybe no default email client is configured? There was an error when launching the email client to create a new message. Maybe no default email client is configured? + + + ValidateChecksumHeader - Always available locally - Always available locally - - - Currently available locally - Currently available locally - - - Some available online only - Some available online only - - - Available online only - Available online only + The checksum header contained an unknown checksum type "%1" + The checksum header contained an unknown checksum type "%1" - Make always available locally - Make always available locally + The checksum header is malformed. + The checksum header is malformed. - Free up local space - Free up local space + The downloaded file does not match the checksum, it will be resumed. "%1" != "%2" + The downloaded file does not match the checksum, it will be resumed. "%1" != "%2" - + \ No newline at end of file diff --git a/translations/client_es.ts b/translations/client_es.ts index e03b31be29abb..5335190a7a138 100644 --- a/translations/client_es.ts +++ b/translations/client_es.ts @@ -1,49 +1,44 @@ - - + ActivityItem - - Open %1 locally - Abrir %1 localmente - In %1 En %1 - + + Open %1 locally + Abrir %1 localmente + + ActivityItemContent - - Open file details - Abrir detalles del archivo - Dismiss Descartar - + + Open file details + Abrir detalles del archivo + + ActivityList Activity list Lista de actividad - - Scroll to top - Desplazarse hasta la parte superior - No activities yet Aún no hay actividades - + + Scroll to top + Desplazarse hasta la parte superior + + CallNotificationDialog - - Talk notification caller avatar - Avatar de la notificación de llamada - Answer Talk call notification Aviso de llamada de Answer Talk @@ -56,7 +51,11 @@ Decline Talk call notification Rechazar la notificación de llamadas de Talk - + + Talk notification caller avatar + Avatar de la notificación de llamada + + CloudProviderWrapper @@ -68,62 +67,62 @@ Buscando cambios en "%1" - Syncing %1 of %2 (%3 left) - Sincronizando %1 de %2 (%3 restantes) - - - Syncing %1 of %2 - Sincronizando %1 de %2 - - - Syncing %1 (%2 left) - Sincronizando %1 (quedan %2) + Help + Ayuda - Syncing %1 - Sincronizando %1 + Log out + Cerrar sesión No recently changed files No hay archivos modificados recientemente - Sync paused - Sincronización pausada + Open website + Abrir página web - Syncing - Sincronizando + Pause synchronization + Pausar sincronización - Open website - Abrir página web + Quit sync client + Cerrar cliente de sincronización - + Recently changed Cambiado recientemente - Pause synchronization - Pausar sincronización + Settings + Configuración - Help - Ayuda + Sync paused + Sincronización pausada - Settings - Configuración + Syncing + Sincronizando - Log out - Cerrar sesión + Syncing %1 + Sincronizando %1 - Quit sync client - Cerrar cliente de sincronización + Syncing %1 (%2 left) + Sincronizando %1 (quedan %2) - + + Syncing %1 of %2 + Sincronizando %1 de %2 + + + Syncing %1 of %2 (%3 left) + Sincronizando %1 de %2 (%3 restantes) + + ConflictDelegate @@ -138,18 +137,10 @@ CurrentAccountHeaderButton - Current account - Cuenta actual - - - Resume sync for all - Reanudar sincronización para todos - - - Pause sync for all - Pausar sincronización para todos + Account switcher and settings menu + Menú para cambio de cuentas y ajustes - + Add account Añadir cuenta @@ -158,30 +149,38 @@ Añadir cuenta nueva - Settings - Ajustes - - - Exit - Salir + Current account + Cuenta actual Current account avatar Avatar de la cuenta actual + + Current account status is do not disturb + El estado actual de la cuenta es no molestar + Current account status is online El estado actual de la cuenta es en línea - Current account status is do not disturb - El estado actual de la cuenta es no molestar + Exit + Salir - Account switcher and settings menu - Menú para cambio de cuentas y ajustes + Pause sync for all + Pausar sincronización para todos - + + Resume sync for all + Reanudar sincronización para todos + + + Settings + Ajustes + + EditFileLocallyLoadingDialog @@ -205,23 +204,23 @@ EncryptionTokenSelectionWindow - - Token Encryption Key Chooser - Seleccionador de Token para llave de cifrado - Available Keys for end-to-end Encryption: Llaves disponibles para cifrado de extremo a extremo: + Cancel + Cancelar + + Choose Seleccione - Cancel - Cancelar + Token Encryption Key Chooser + Seleccionador de Token para llave de cifrado - + ErrorBox @@ -253,15 +252,15 @@ Evict materialised files Quitar los archivos materializados - - Reload - Recargar - Materialised items Elementos materializados - + + Reload + Recargar + + FileProviderFastEnumerationSettings @@ -283,24 +282,20 @@ FileProviderSettings - Virtual files settings - Configuración de archivos virtuales + Enable virtual files + Activar archivos virtuales - + General settings Configuración general - Enable virtual files - Activar archivos virtuales + Virtual files settings + Configuración de archivos virtuales - + FileProviderStorageInfo - - Local storage use - Uso de almacenamiento local - %1 GB of %2 GB remote files synced %1 GB de %2 GB de archivos remotos sincronizados @@ -309,42 +304,50 @@ Evict local copies … Quitar copias locales … - + + Local storage use + Uso de almacenamiento local + + FileProviderSyncStatus - - Syncing - Sincronizando - All synced! ¡Todo está sincronizado! - - Request sync - Solicitar sincronización - Request a sync of changes for the VFS environment. macOS may ignore or delay this request. Solicitar una sincronización de cambios para el ambiente VFS. macOS podría ignorar o demorar esta solicitud. - - - FileSystem + + Request sync + Solicitar sincronización + - Error removing "%1": %2 - Error al eliminar "%1": %2 + Syncing + Sincronizando + + + FileSystem Could not remove folder "%1" No se ha podido eliminar la carpeta "%1" - + + Error removing "%1": %2 + Error al eliminar "%1": %2 + + Flow2AuthWidget + An error occurred while connecting. Please try again. + Se ha producido un error al conectarse. Por favor, inténtelo de nuevo. + + Browser Authentication Autentificación del navegador @@ -356,44 +359,55 @@ macOS podría ignorar o demorar esta solicitud. Switch to your browser to connect your account Cambiar al navegador para conectar con tu cuenta - - An error occurred while connecting. Please try again. - Se ha producido un error al conectarse. Por favor, inténtelo de nuevo. - - + FolderWizardSourcePage - - Pick a local folder on your computer to sync - Seleccione una carpeta local en su equipo para sincronizar - &Choose … &Seleccionar … - + + Pick a local folder on your computer to sync + Seleccione una carpeta local en su equipo para sincronizar + + FolderWizardTargetPage - - Select a remote destination folder - Seleccionar una carpeta remota de destino - Create folder Crear carpeta + Folders + Carpetas + + Refresh Actualizar - Folders - Carpetas + Select a remote destination folder + Seleccionar una carpeta remota de destino - + + + main.cpp + + %1 requires on a working system tray. If you are running XFCE, please follow <a href="http://docs.xfce.org/xfce/xfce4-panel/systray">these instructions</a>. Otherwise, please install a system tray application such as "trayer" and try again. + %1 requiere una bandeja del sistema de trabajo. Si estás ejecutando XFCE, por favor, siga <a href="http://docs.xfce.org/xfce/xfce4-panel/systray">estas instrucciones</a>. Por otro lado, instale una bandeja del sistema de aplicaciones como "trayer" e inténtelo de nuevo. + + + System Tray not available + La bandeja del sistema no está disponible + + MainWindow + New activities + Nuevas actividades + + Nextcloud desktop main dialog Diálogo principal de Nextcloud para escritorio @@ -401,9 +415,12 @@ macOS podría ignorar o demorar esta solicitud. Unified search results list Lista de resultados de la búsqueda unificada + + + nextcloudTheme::aboutInfo() - New activities - Nuevas actividades + <p><small>Built from Git revision <a href="%1">%2</a> on %3, %4 using Qt %5, %6</small></p> + <p><small>Creado desde la revisión Git <a href="%1">%2</a> en %3, %4 utilizando Qt %5, %6</small></p> @@ -412,15 +429,15 @@ macOS podría ignorar o demorar esta solicitud. Connection timed out Tiempo de conexión agotado - - Unknown error: network reply was deleted - Error desconocido: la respuesta de red fue eliminada - Server replied "%1 %2" to "%3 %4" El servidor respondió "%1 %2" a "%3 %4" - + + Unknown error: network reply was deleted + Error desconocido: la respuesta de red fue eliminada + + OCC::Account @@ -444,384 +461,384 @@ Should the accounts be imported? %1 cuentas se detectaron desde un cliente de escritorio antiguo. ¿Deben estas cuentas ser importadas? - - Legacy import - Importación legada - - - Import - Importar - 1 account was detected from a legacy desktop client. Should the account be imported? 1 cuenta se detectó desde un cliente de escritorio antiguo. ¿Debe importarse esta cuenta? - - Skip - Saltar - Could not import accounts from legacy client configuration. No se pudieron importar las cuentas desde la configuración del cliente antiguo. - + + Import + Importar + + + Legacy import + Importación legada + + + Skip + Saltar + + OCC::AccountSettings - Unchecked folders will be <b>removed</b> from your local file system and will not be synchronized to this computer anymore - Las carpetas no seleccionadas serán <b>eliminadas</b> de su carpeta local y ya no serán sincronizadas en este ordenador + %1 (%3%) of %2 in use. Some folders, including network mounted or shared folders, might have different limits. + %1 (%3%) de %2 en uso. Algunas carpetas, como carpetas de red o compartidas, podrían tener límites diferentes. - Synchronize all - Sincronizar todo + %1 as %2 + %1 como %2 - Synchronize none - No sincronizar nada + %1 in use + %1 en uso - Apply manual changes - Aplicar cambios manuales + %1 of %2 in use + %1 de %2 en uso - Standard file sync - Sincronización de archivos estándar + (experimental) + (experimental) - Virtual file sync - Sincronización de archivos virtual + <p>Could not create local folder <i>%1</i>.</p> + <p>No pudo crear la carpeta local <i>%1</i>.</p> - Connection settings - Configuración de conexión + <p>Do you really want to stop syncing the folder <i>%1</i>?</p><p><b>Note:</b> This will <b>not</b> delete any files.</p> + <p>¿De verdad quiere dejar de sincronizar la carpeta <i>%1</i>?</p><p><b>Nota:</b> Esto <b>no</b> elminará los archivo.</p> Apply Aplicar - Storage space: … - Espacio de almacenamiento: ... + Apply manual changes + Aplicar cambios manuales + + + Availability + Disponibilidad Cancel Cancelar - Connected with <server> as <user> - Conectado a <server> como <user> + Choose what to sync + Elija qué sincronizar - No account configured. - No se ha configurado ninguna cuenta. + Confirm Folder Sync Connection Removal + Confirme la sincronización para la eliminación de la carpeta conectada - End-to-end Encryption with Virtual Files - Cifrado de extremo a extremo con Archivos Virtuales + Connected to %1. + Conectado a %1. - You seem to have the Virtual Files feature enabled on this folder. At the moment, it is not possible to implicitly download virtual files that are end-to-end encrypted. To get the best experience with virtual files and end-to-end encryption, make sure the encrypted folder is marked with "Make always available locally". - Parece que tiene la función de Archivos Virtuales activada en esta carpeta. Por el momento, no es posible descargar implícitamente los archivos virtuales que están cifrados de extremo a extremo. Para obtener la mejor experiencia con los archivos virtuales y el cifrado de extremo a extremo, asegúrese de que la carpeta cifrada está marcada con "Hacer que esté siempre disponible localmente". + Connected with <server> as <user> + Conectado a <server> como <user> - Do not encrypt folder - No cifrar carpeta + Connecting to %1 … + Conectando a %1 ... - Encrypt folder - Cifrar carpeta + Connection settings + Configuración de conexión - End-to-end Encryption - Cifrado de extremo a extremo + Could not encrypt folder because the folder does not exist anymore + No es posible cifrar la carpeta porque ya no existe - This will encrypt your folder and all files within it. These files will no longer be accessible without your encryption mnemonic key. -<b>This process is not reversible. Are you sure you want to proceed?</b> - Esto cifrará su carpeta y todos los archivos contenidos en ella. Ya no se podrá acceder a estos archivos sin su clave de cifrado mnemónica. -<b>Este proceso no es puede deshacer. ¿Seguro que desea continuar?</b> + Create new folder + Crear nueva carpeta - Disable encryption - Deshabilitar cifrado + Currently there is no storage usage information available. + Actualmente no hay información disponible sobre el uso de almacenamiento. - Display mnemonic - Mostrar regla mnemotécnica + Disable encryption + Deshabilitar cifrado - End-to-end encryption has been enabled for this account - El cifrado de extremo a extremo a sido habilitado para esta cuenta + Disable end-to-end encryption + Deshabilitar cifrado de extremo a extremo - Warning - Aviso + Disable end-to-end encryption for %1? + ¿Deshabilitar cifrado de extremo a extremo para %1? - Please wait for the folder to sync before trying to encrypt it. - Por favor, espere a que la carpeta se sincronice antes de intentar cifrarla. + Disable support + Desactivar soporte - The folder has a minor sync problem. Encryption of this folder will be possible once it has synced successfully - La carpeta tiene un pequeño problema de sincronización. El cifrado de esta carpeta será posible cuando se haya sincronizado correctamente. + Disable virtual file support … + Desactivar soporte para archivos virtuales … - The folder has a sync error. Encryption of this folder will be possible once it has synced successfully - La carpeta tiene un problema de sincronización. El cifrado de esta carpeta será posible cuando se haya sincronizado correctamente. + Disable virtual file support? + ¿Desactivar soporte para archivos virtuales? - End-to-end encryption is not configured on this device. Once it is configured, you will be able to encrypt this folder. -Would you like to set up end-to-end encryption? - El cifrado de extremo a extremo no está configurado en este dispositivo. Una vez que esté configurado, podrá cifrar esta carpeta. -¿Desea configurar el cifrado de extremo a extremo? + Display mnemonic + Mostrar regla mnemotécnica - You cannot encrypt a folder with contents, please remove the files. -Wait for the new sync, then encrypt it. - No puede cifrar una carpeta con contenidos, por favor, elimine los archivos. -Espere a una nueva sincronización, luego cifrala. + Do not encrypt folder + No cifrar carpeta - Encryption failed - Ha fallado el cifrado + Edit Ignored Files + Editar archivos ignorados - Could not encrypt folder because the folder does not exist anymore - No es posible cifrar la carpeta porque ya no existe + Enable virtual file support %1 … + Activar soporte para archivos virtuales %1 ... Encrypt Cifrar - Edit Ignored Files - Editar archivos ignorados - - - Create new folder - Crear nueva carpeta - - - Availability - Disponibilidad + Encrypt folder + Cifrar carpeta - Choose what to sync - Elija qué sincronizar + Encryption failed + Ha fallado el cifrado - Force sync now - Forzar la sincronización ahora + End-to-end Encryption + Cifrado de extremo a extremo - Restart sync - Reiniciar sync + End-to-end Encryption with Virtual Files + Cifrado de extremo a extremo con Archivos Virtuales - Remove folder sync connection - Eliminar la sincronización de carpetas conectadas + End-to-end encryption has been enabled for this account + El cifrado de extremo a extremo a sido habilitado para esta cuenta - Disable virtual file support … - Desactivar soporte para archivos virtuales … + End-to-end encryption has been enabled on this account with another device.<br>It can be enabled on this device by entering your mnemonic.<br>This will enable synchronisation of existing encrypted folders. + El cifrado de extremo a extremo ha sido habilitado en esta cuenta con otro dispositivo.<br> puede ser habilitado en este dispositivo ingresando su mnemónico.<br> Esto habilitará la sincronización de las carpetas cifradas existentes - Enable virtual file support %1 … - Activar soporte para archivos virtuales %1 ... + End-to-end encryption is not configured on this device. Once it is configured, you will be able to encrypt this folder. +Would you like to set up end-to-end encryption? + El cifrado de extremo a extremo no está configurado en este dispositivo. Una vez que esté configurado, podrá cifrar esta carpeta. +¿Desea configurar el cifrado de extremo a extremo? - (experimental) - (experimental) + End-to-end encryption mnemonic + Mnemónico para cifrado de extremo a extremo Folder creation failed Ha fallado la creación de la carpeta - Confirm Folder Sync Connection Removal - Confirme la sincronización para la eliminación de la carpeta conectada - - - Remove Folder Sync Connection - Eliminar carpeta de sincronización conectada + Force sync now + Forzar la sincronización ahora - Disable virtual file support? - ¿Desactivar soporte para archivos virtuales? + Migrate certificate to a new one + Migrar certificado a uno nuevo - This action will disable virtual file support. As a consequence contents of folders that are currently marked as "available online only" will be downloaded. - -The only advantage of disabling virtual file support is that the selective sync feature will become available again. - -This action will abort any currently running synchronization. - Esta acción deshabilitará el soporte de archivos virtuales. Como consecuencia, se descargará el contenido de las carpetas que estén marcadas como "disponible solo en línea". - -La única ventaja de deshabilitar el soporte de archivos virtuales es para la característica de sincronización selectiva que estará disponible de nuevo. - -Además, esta acción interrumpirá cualquier sincronización en curso. + No %1 connection configured. + No hay ninguna conexión de %1 configurada. - - Disable support - Desactivar soporte + + No account configured. + No se ha configurado ninguna cuenta. - End-to-end encryption mnemonic - Mnemónico para cifrado de extremo a extremo + Open folder + Abrir carpeta - Sync Running - Sincronización en curso + Pause sync + Pausar sincronización - The syncing operation is running.<br/>Do you want to terminate it? - La sincronización está en curso.<br/>¿Desea interrumpirla? + Please wait for the folder to sync before trying to encrypt it. + Por favor, espere a que la carpeta se sincronice antes de intentar cifrarla. - %1 in use - %1 en uso + Remove Folder Sync Connection + Eliminar carpeta de sincronización conectada - Migrate certificate to a new one - Migrar certificado a uno nuevo + Remove folder sync connection + Eliminar la sincronización de carpetas conectadas - There are folders that have grown in size beyond %1MB: %2 - Existen carpetas que han aumentado de tamaño más allá de %1MB: %2 + Removing end-to-end encryption will remove locally-synced files that are encrypted.<br>Encrypted files will remain on the server. + Quitar el cifrado de extremo a extremo borrará los archivos sincronizados localmente que se encuentran cifrados.<br>Los archivos cifrados se mantendrán en el servidor. - End-to-end encryption has been enabled on this account with another device.<br>It can be enabled on this device by entering your mnemonic.<br>This will enable synchronisation of existing encrypted folders. - El cifrado de extremo a extremo ha sido habilitado en esta cuenta con otro dispositivo.<br> puede ser habilitado en este dispositivo ingresando su mnemónico.<br> Esto habilitará la sincronización de las carpetas cifradas existentes + Restart sync + Reiniciar sync - Set up encryption - Configurar cifrado + Resume sync + Continuar sincronización - This account supports end-to-end encryption - Esta cuenta soporta cifrado punto a punto + Server %1 is currently being redirected, or your connection is behind a captive portal. + El servidor %1 está siendo redirigido actualmente, ó, su conexión está detrás de un portal cautivo. - Connected to %1. - Conectado a %1. + Server %1 is currently in maintenance mode. + El servidor %1 se encuentra en modo mantenimiento. Server %1 is temporarily unavailable. Servidor %1 no está disponible temporalmente. - Server %1 is currently in maintenance mode. - El servidor %1 se encuentra en modo mantenimiento. + Server configuration error: %1 at %2. + Error de configuración del servidor: %1 en %2, + + + Set up encryption + Configurar cifrado Signed out from %1. Cerró sesión desde %1. - There are folders that were not synchronized because they are too big: - Hay carpetas que no se han sincronizado porque son demasiado grandes: - + Standard file sync + Sincronización de archivos estándar + - There are folders that were not synchronized because they are external storages: - Hay carpetas que no se han sincronizado porque están en el almacenamiento externo: + Storage space: … + Espacio de almacenamiento: ... - There are folders that were not synchronized because they are too big or external storages: - Hay carpetas que no se han sincronizado porque son demasiado grandes o están en el almacenamiento externo: + Sync Running + Sincronización en curso - Open folder - Abrir carpeta + Synchronize all + Sincronizar todo - Resume sync - Continuar sincronización + Synchronize none + No sincronizar nada - Pause sync - Pausar sincronización + The folder has a minor sync problem. Encryption of this folder will be possible once it has synced successfully + La carpeta tiene un pequeño problema de sincronización. El cifrado de esta carpeta será posible cuando se haya sincronizado correctamente. - <p>Could not create local folder <i>%1</i>.</p> - <p>No pudo crear la carpeta local <i>%1</i>.</p> + The folder has a sync error. Encryption of this folder will be possible once it has synced successfully + La carpeta tiene un problema de sincronización. El cifrado de esta carpeta será posible cuando se haya sincronizado correctamente. - <p>Do you really want to stop syncing the folder <i>%1</i>?</p><p><b>Note:</b> This will <b>not</b> delete any files.</p> - <p>¿De verdad quiere dejar de sincronizar la carpeta <i>%1</i>?</p><p><b>Nota:</b> Esto <b>no</b> elminará los archivo.</p> + The server version %1 is unsupported! Proceed at your own risk. + ¡La versión %1 del servidor no está soportada! Si continúas, lo haces bajo tu propio riesgo. - To protect your Cryptographic Identity, we encrypt it with a mnemonic of 12 dictionary words. Please note these down and keep them safe. They will be needed to add other devices to your account (like your mobile phone or laptop). - Para proteger su identidad criptográfica, ciframos la misma con una regla mnemotécnica de 12 palabras de diccionario. Por favor, anótelas y consérvelas a salvo. Estas palabras serán necesarias para añadir otros dispositivos a su cuenta (como su teléfono móvil o un portátil). + The syncing operation is running.<br/>Do you want to terminate it? + La sincronización está en curso.<br/>¿Desea interrumpirla? - Disable end-to-end encryption - Deshabilitar cifrado de extremo a extremo + There are folders that have grown in size beyond %1MB: %2 + Existen carpetas que han aumentado de tamaño más allá de %1MB: %2 - Disable end-to-end encryption for %1? - ¿Deshabilitar cifrado de extremo a extremo para %1? + There are folders that were not synchronized because they are external storages: + Hay carpetas que no se han sincronizado porque están en el almacenamiento externo: - Removing end-to-end encryption will remove locally-synced files that are encrypted.<br>Encrypted files will remain on the server. - Quitar el cifrado de extremo a extremo borrará los archivos sincronizados localmente que se encuentran cifrados.<br>Los archivos cifrados se mantendrán en el servidor. + There are folders that were not synchronized because they are too big or external storages: + Hay carpetas que no se han sincronizado porque son demasiado grandes o están en el almacenamiento externo: - %1 (%3%) of %2 in use. Some folders, including network mounted or shared folders, might have different limits. - %1 (%3%) de %2 en uso. Algunas carpetas, como carpetas de red o compartidas, podrían tener límites diferentes. + There are folders that were not synchronized because they are too big: + Hay carpetas que no se han sincronizado porque son demasiado grandes: - %1 of %2 in use - %1 de %2 en uso + This account supports end-to-end encryption + Esta cuenta soporta cifrado punto a punto - Currently there is no storage usage information available. - Actualmente no hay información disponible sobre el uso de almacenamiento. + This action will disable virtual file support. As a consequence contents of folders that are currently marked as "available online only" will be downloaded. + +The only advantage of disabling virtual file support is that the selective sync feature will become available again. + +This action will abort any currently running synchronization. + Esta acción deshabilitará el soporte de archivos virtuales. Como consecuencia, se descargará el contenido de las carpetas que estén marcadas como "disponible solo en línea". + +La única ventaja de deshabilitar el soporte de archivos virtuales es para la característica de sincronización selectiva que estará disponible de nuevo. + +Además, esta acción interrumpirá cualquier sincronización en curso. - %1 as %2 - %1 como %2 + This will encrypt your folder and all files within it. These files will no longer be accessible without your encryption mnemonic key. +<b>This process is not reversible. Are you sure you want to proceed?</b> + Esto cifrará su carpeta y todos los archivos contenidos en ella. Ya no se podrá acceder a estos archivos sin su clave de cifrado mnemónica. +<b>Este proceso no es puede deshacer. ¿Seguro que desea continuar?</b> - The server version %1 is unsupported! Proceed at your own risk. - ¡La versión %1 del servidor no está soportada! Si continúas, lo haces bajo tu propio riesgo. + To protect your Cryptographic Identity, we encrypt it with a mnemonic of 12 dictionary words. Please note these down and keep them safe. They will be needed to add other devices to your account (like your mobile phone or laptop). + Para proteger su identidad criptográfica, ciframos la misma con una regla mnemotécnica de 12 palabras de diccionario. Por favor, anótelas y consérvelas a salvo. Estas palabras serán necesarias para añadir otros dispositivos a su cuenta (como su teléfono móvil o un portátil). - Server %1 is currently being redirected, or your connection is behind a captive portal. - El servidor %1 está siendo redirigido actualmente, ó, su conexión está detrás de un portal cautivo. + Unable to connect to %1. + No es posible conectarse con %1. - Connecting to %1 … - Conectando a %1 ... + Unchecked folders will be <b>removed</b> from your local file system and will not be synchronized to this computer anymore + Las carpetas no seleccionadas serán <b>eliminadas</b> de su carpeta local y ya no serán sincronizadas en este ordenador - Unable to connect to %1. - No es posible conectarse con %1. + Virtual file sync + Sincronización de archivos virtual - Server configuration error: %1 at %2. - Error de configuración del servidor: %1 en %2, + Warning + Aviso + + + You cannot encrypt a folder with contents, please remove the files. +Wait for the new sync, then encrypt it. + No puede cifrar una carpeta con contenidos, por favor, elimine los archivos. +Espere a una nueva sincronización, luego cifrala. You need to accept the terms of service at %1. Debe aceptar los términos de servicio en %1. - No %1 connection configured. - No hay ninguna conexión de %1 configurada. + You seem to have the Virtual Files feature enabled on this folder. At the moment, it is not possible to implicitly download virtual files that are end-to-end encrypted. To get the best experience with virtual files and end-to-end encryption, make sure the encrypted folder is marked with "Make always available locally". + Parece que tiene la función de Archivos Virtuales activada en esta carpeta. Por el momento, no es posible descargar implícitamente los archivos virtuales que están cifrados de extremo a extremo. Para obtener la mejor experiencia con los archivos virtuales y el cifrado de extremo a extremo, asegúrese de que la carpeta cifrada está marcada con "Hacer que esté siempre disponible localmente". - + OCC::AccountSetupFromCommandLineJob - - The authenticated request to the server was redirected to "%1". The URL is bad, the server is misconfigured. - La petición autenticada al servidor ha sido redirigida a "%1". La URL es errónea, el servidor está mal configurado. - Access forbidden by server. To verify that you have proper access, <a href="%1">click here</a> to access the service with your browser. Acceso denegado por el servidor. Para verificar que tiene acceso, <a href="%1">haga clic aquí</a> para acceder al servicio desde su navegador. + + The authenticated request to the server was redirected to "%1". The URL is bad, the server is misconfigured. + La petición autenticada al servidor ha sido redirigida a "%1". La URL es errónea, el servidor está mal configurado. + There was an invalid response to an authenticated WebDAV request Ha habido una respuesta no válida a una solicitud autenticada de WebDAV @@ -830,44 +847,44 @@ Además, esta acción interrumpirá cualquier sincronización en curso. OCC::AccountState - Signed out - Cerrar sesión + Asking Credentials + Solicitando credenciales - Disconnected - Desconectado + Configuration error + Error en la configuración Connected Conectado - Service unavailable - Servicio no disponible + Disconnected + Desconectado Maintenance mode Modo mantenimiento - Redirect detected - Redirección detectada + Need the user to accept the terms of service + Necesita el usuario aceptar los términos de servicio Network error Error en la red - Configuration error - Error en la configuración + Redirect detected + Redirección detectada - Asking Credentials - Solicitando credenciales + Service unavailable + Servicio no disponible - Need the user to accept the terms of service - Necesita el usuario aceptar los términos de servicio + Signed out + Cerrar sesión Unknown account state @@ -876,14 +893,14 @@ Además, esta acción interrumpirá cualquier sincronización en curso. OCC::ActivityListModel - - For more activities please open the Activity app. - Para más detalles, por favor, abre la app Actividades. - Fetching activities … Actividades de búsqueda … + + For more activities please open the Activity app. + Para más detalles, por favor, abre la app Actividades. + Network error occurred: client will retry syncing. Ha ocurrido un error de red: el cliente reintentará la sincronización. @@ -892,91 +909,65 @@ Además, esta acción interrumpirá cualquier sincronización en curso. OCC::AddCertificateDialog - SSL client certificate authentication - Certificado de autentificación SSL del cliente + An encrypted pkcs12 bundle is strongly recommended as a copy will be stored in the configuration file. + Usar encriptación pkcs12 es muy recomendable, puesto que una copia se guardará en el archivo de configuración. - This server probably requires a SSL client certificate. - Probablemente este servidor requiera un certificado SSL del cliente. + Browse … + Explorar ... Certificate & Key (pkcs12): Certificado & Key (pkcs12): + Certificate files (*.p12 *.pfx) + Archivos de certificado (*.p12 *.pfx) + + Certificate password: Contraseña del certificado: - An encrypted pkcs12 bundle is strongly recommended as a copy will be stored in the configuration file. - Usar encriptación pkcs12 es muy recomendable, puesto que una copia se guardará en el archivo de configuración. - - - Browse … - Explorar ... + SSL client certificate authentication + Certificado de autentificación SSL del cliente Select a certificate Seleccione un certificado - Certificate files (*.p12 *.pfx) - Archivos de certificado (*.p12 *.pfx) + This server probably requires a SSL client certificate. + Probablemente este servidor requiera un certificado SSL del cliente. - + OCC::Application - - Some settings were configured in %1 versions of this client and use features that are not available in this version.<br><br>Continuing will mean <b>%2 these settings</b>.<br><br>The current configuration file was already backed up to <i>%3</i>. - Algunos ajustes fueron configurados en %1 versiones de este cliente y utilizan características que no están disponibles en esta versión.<br><br>Continuar implica <b>%2 estos ajustes</b>.<br><br>El archivo de configuración actual ya se respaldó en <i>%3</i>. - - - newer - newer software version - recientes - - - older - older software version - antiguos - - - ignoring - ignorando - - - deleting - eliminando - - - Quit - Salir - - - Continue - Continuar - %1 accounts number of accounts imported %1 cuentas - - 1 account - 1 cuenta - %1 folders number of folders imported %1 carpetas + + 1 account + 1 cuenta + 1 folder 1 carpeta - Legacy import - Importación legada + Continue + Continuar + + + Error accessing the configuration file + Error al acceder al archivo de configuración Imported %1 and %2 from a legacy desktop client. @@ -986,36 +977,62 @@ Además, esta acción interrumpirá cualquier sincronización en curso. - Error accessing the configuration file - Error al acceder al archivo de configuración + Legacy import + Importación legada + + + Quit + Salir + + + Some settings were configured in %1 versions of this client and use features that are not available in this version.<br><br>Continuing will mean <b>%2 these settings</b>.<br><br>The current configuration file was already backed up to <i>%3</i>. + Algunos ajustes fueron configurados en %1 versiones de este cliente y utilizan características que no están disponibles en esta versión.<br><br>Continuar implica <b>%2 estos ajustes</b>.<br><br>El archivo de configuración actual ya se respaldó en <i>%3</i>. There was an error while accessing the configuration file at %1. Please make sure the file can be accessed by your system account. Se ha producido un error al acceder al archivo de configuración en %1. Por favor, asegúrese de que su cuenta del sistema puede acceder al archivo. - - - OCC::AuthenticationDialog + + deleting + eliminando + - Authentication Required - Se requiere autenticación + ignoring + ignorando - Enter username and password for "%1" at %2. - Introduce usuario y contraseña para "%1" en %2. + newer + newer software version + recientes - &Username: - &Usuario: + older + older software version + antiguos + + + OCC::AuthenticationDialog &Password: &Contraseña: - - - OCC::BasePropagateRemoteDeleteEncrypted - + + &Username: + &Usuario: + + + Authentication Required + Se requiere autenticación + + + Enter username and password for "%1" at %2. + Introduce usuario y contraseña para "%1" en %2. + + + + OCC::BasePropagateRemoteDeleteEncrypted + "%1 Failed to unlock encrypted folder %2". "%1 Fallo al desbloquear la carpeta cifrada %2". @@ -1026,10 +1043,18 @@ Además, esta acción interrumpirá cualquier sincronización en curso. OCC::BulkPropagatorJob + + Error updating metadata: %1 + Error al actualizar los metadatos: %1 + File %1 cannot be uploaded because another file with the same name, differing only in case, exists El archivo %1 no se puede subir porque ya existe otro con el mismo nombre, solo difiere en las mayúsculas/minúsculas + + File %1 has invalid modification time. Do not upload to the server. + El archivo %1 tiene una hora de modificación no válida. No subir al servidor. + File %1 has invalid modified time. Do not upload to the server. El archivo %1 tiene una hora de modificación no válida. No subir al servidor. @@ -1039,26 +1064,22 @@ Además, esta acción interrumpirá cualquier sincronización en curso.Archivo eliminado (comenzar subida) %1 - File %1 has invalid modification time. Do not upload to the server. - El archivo %1 tiene una hora de modificación no válida. No subir al servidor. + Local file changed during sync. + Un archivo local ha cambiado durante la sincronización. Local file changed during syncing. It will be resumed. Un archivo local ha cambiado durante la sincronización. Será subido. - - Local file changed during sync. - Un archivo local ha cambiado durante la sincronización. - Network error: %1 Error de red: %1 - Error updating metadata: %1 - Error al actualizar los metadatos: %1 + Restoration failed: %1 + Fallo al restaurar: %1 - + The file %1 is currently in use El archivo %1 se encuentra en uso @@ -1066,11 +1087,7 @@ Además, esta acción interrumpirá cualquier sincronización en curso.The local file was removed during sync. El archivo local ha sido eliminado durante la sincronización. - - Restoration failed: %1 - Fallo al restaurar: %1 - - + OCC::CaseClashConflictSolver @@ -1081,10 +1098,6 @@ Además, esta acción interrumpirá cualquier sincronización en curso.Could not rename file. Please make sure you are connected to the server. No se ha podido renombrar el archivo. Por favor, asegúrese de que está conectado al servidor. - - You don't have the permission to rename this file. Please ask the author of the file to rename it. - No tiene permisos para renombrar este archivo. Por favor, solicite al autor del archivo que lo renombre. - Failed to fetch permissions with error %1 Fallo al obtener permisos con error %1 @@ -1101,16 +1114,28 @@ Además, esta acción interrumpirá cualquier sincronización en curso.Filename contains trailing spaces. El nombre del archivo contiene espacios al final. - + + You don't have the permission to rename this file. Please ask the author of the file to rename it. + No tiene permisos para renombrar este archivo. Por favor, solicite al autor del archivo que lo renombre. + + OCC::CaseClashFilenameDialog + + %1 does not support equal file names with only letter casing differences. + %1 no soporta nombres de archivo idénticos con diferencias de capitalización de letras. + + + 0 byte + 0 bytes + Case Clash Conflict Conflicto de capitalización - The file could not be synced because it generates a case clash conflict with an existing file on this system. - El archivo no puede ser sincronizado porque genera un conflicto de capitalización con un archivo que ya existe en este sistema. + Case clashing file + Archivo con conflicto de capitalización Error @@ -1121,40 +1146,36 @@ Además, esta acción interrumpirá cualquier sincronización en curso.Archivo existente - file A - archivo A - - - today - hoy + Filename contains illegal characters: %1 + El nombre del archivo contiene caracteres ilegales: %1 - - 0 byte - 0 bytes + + Filename contains leading and trailing spaces. + El nombre del archivo contiene espacios iniciales y finales. - Open existing file - Abrir archivo existente + Filename contains leading spaces. + El nombre del archivo contiene espacios al inicio. - Case clashing file - Archivo con conflicto de capitalización + Filename contains trailing spaces. + El nombre del archivo contiene espacios al final. - file B - archivo B + New filename + Nuevo nombre de archivo Open clashing file Abrir archivo con problema de capitalización - Please enter a new name for the clashing file: - Por favor ingrese un nombre nuevo para el archivo con el problema de capitalización: + Open existing file + Abrir archivo existente - New filename - Nuevo nombre de archivo + Please enter a new name for the clashing file: + Por favor ingrese un nombre nuevo para el archivo con el problema de capitalización: Rename file @@ -1165,30 +1186,26 @@ Además, esta acción interrumpirá cualquier sincronización en curso.El archivo "%1" no pudo ser sincronizado porque genera un conflicto de capitalización con un archivo que ya existe en este sistema. - %1 does not support equal file names with only letter casing differences. - %1 no soporta nombres de archivo idénticos con diferencias de capitalización de letras. - - - Filename contains leading and trailing spaces. - El nombre del archivo contiene espacios iniciales y finales. + The file could not be synced because it generates a case clash conflict with an existing file on this system. + El archivo no puede ser sincronizado porque genera un conflicto de capitalización con un archivo que ya existe en este sistema. - Filename contains leading spaces. - El nombre del archivo contiene espacios al inicio. + Use invalid name + Usar nombre inválido - Filename contains trailing spaces. - El nombre del archivo contiene espacios al final. + file A + archivo A - Use invalid name - Usar nombre inválido + file B + archivo B - Filename contains illegal characters: %1 - El nombre del archivo contiene caracteres ilegales: %1 + today + hoy - + OCC::CleanupPollsJob @@ -1198,15 +1215,19 @@ Además, esta acción interrumpirá cualquier sincronización en curso. OCC::ClientSideEncryption - - Input PIN code - Please keep it short and shorter than "Enter Certificate USB Token PIN:" - Ingrese código PIN - Enter Certificate USB Token PIN: Ingrese el PIN del Token USB para certificados: + + Enter E2E passphrase + Introduce la frase de acceso E2E + + + Input PIN code + Please keep it short and shorter than "Enter Certificate USB Token PIN:" + Ingrese código PIN + Invalid PIN. Login failed PIN inválido, falló el inicio de sesión @@ -1219,56 +1240,48 @@ Además, esta acción interrumpirá cualquier sincronización en curso.Please enter your end-to-end encryption passphrase:<br><br>Username: %2<br>Account: %3<br> Por favor, introduzca su frase de cifrado de extremo a extremo:<br><br>Nombre de usuario: %2<br> Cuenta: %3<br> - - Enter E2E passphrase - Introduce la frase de acceso E2E - - + OCC::ConflictDialog - Sync Conflict - Conflicto de sincronización - - - Conflicting versions of %1. - Versión conflictiva de %1. + 0 byte + 0 byte - Which version of the file do you want to keep?<br/>If you select both versions, the local file will have a number added to its name. - ¿Qué versión del archivo quiere mantener?<br/>Si selecciona ambas versiones, al archivo local se le añadirá un número a su nombre + <a href="%1">Open local version</a> + <a href="%1">Abrir versión local</a> - Local version - Versión local + <a href="%1">Open server version</a> + <a href="%1">Abrir versión en servidor</a> Click to open the file Clic para abrir el archivo - today - hoy + Conflicting versions of %1. + Versión conflictiva de %1. - 0 byte - 0 byte + Keep both versions + Mantener ambas versiones - <a href="%1">Open local version</a> - <a href="%1">Abrir versión local</a> + Keep local version + Mantener versión local - Server version - Versión del servidor + Keep selected version + Mantener la versión seleccionada - <a href="%1">Open server version</a> - <a href="%1">Abrir versión en servidor</a> + Keep server version + Mantener la versión del servidor - - Keep selected version - Mantener la versión seleccionada + + Local version + Versión local Open local version @@ -1279,20 +1292,36 @@ Además, esta acción interrumpirá cualquier sincronización en curso.Abrir la versión en servidor - Keep both versions - Mantener ambas versiones + Server version + Versión del servidor - Keep local version - Mantener versión local + Sync Conflict + Conflicto de sincronización - Keep server version - Mantener la versión del servidor + Which version of the file do you want to keep?<br/>If you select both versions, the local file will have a number added to its name. + ¿Qué versión del archivo quiere mantener?<br/>Si selecciona ambas versiones, al archivo local se le añadirá un número a su nombre - + + today + hoy + + OCC::ConflictSolver + + Confirm deletion + Confirmar borrado + + + Do you want to delete the directory <i>%1</i> and all its contents permanently? + ¿Quieres eliminar la carpeta <i>%1</i> y todo su contenido permanentemente? + + + Do you want to delete the file <i>%1</i> permanently? + ¿Quieres eliminar el archivo <i>%1</i> permanentemente? + Error Error @@ -1305,63 +1334,47 @@ Además, esta acción interrumpirá cualquier sincronización en curso. - - Do you want to delete the directory <i>%1</i> and all its contents permanently? - ¿Quieres eliminar la carpeta <i>%1</i> y todo su contenido permanentemente? - - - Do you want to delete the file <i>%1</i> permanently? - ¿Quieres eliminar el archivo <i>%1</i> permanentemente? - - - Confirm deletion - Confirmar borrado - - + OCC::ConnectionValidator - Timeout - Tiempo de espera superado + Authentication error: Either username or password are wrong. + Error de autenticación: El usuario o la contraseña son incorrectos - The configured server for this client is too old - La configuración del servidor para este cliente es demasiado antigua + No Nextcloud account configured + La cuenta Nextcloud no está configurada Please update to the latest server and restart the client. Por favor, actualice a la última versión del servidor y reinicie el cliente. - Authentication error: Either username or password are wrong. - Error de autenticación: El usuario o la contraseña son incorrectos - - - No Nextcloud account configured - La cuenta Nextcloud no está configurada + The configured server for this client is too old + La configuración del servidor para este cliente es demasiado antigua The provided credentials are not correct Las credenciales proporcionadas no son correctas - + + Timeout + Tiempo de espera superado + + OCC::DiscoveryPhase - - Error while canceling deletion of a file - Error al cancelar la eliminación de un archivo - Error while canceling deletion of %1 Error al cancelar la eliminación de %1 - + + Error while canceling deletion of a file + Error al cancelar la eliminación de un archivo + + OCC::DiscoverySingleDirectoryJob - - Server error: PROPFIND reply is not XML formatted! - Error del servidor: ¡la respuesta de PROPFIND no tiene formato XML! - Encrypted metadata setup error! ¡Hubo un error al configurar los metadatos cifrados! @@ -1370,13 +1383,13 @@ Además, esta acción interrumpirá cualquier sincronización en curso.Encrypted metadata setup error: initial signature from server is empty. Error de configuración de los metadatos cifrados: la firma inicial del servidor está vacía. - + + Server error: PROPFIND reply is not XML formatted! + Error del servidor: ¡la respuesta de PROPFIND no tiene formato XML! + + OCC::DiscoverySingleLocalDirectoryJob - - Error while opening directory %1 - Error al abrir el directorio %1 - Directory not accessible on client, permission denied Directorio no accesible en el cliente, permiso denegado @@ -1386,77 +1399,81 @@ Además, esta acción interrumpirá cualquier sincronización en curso.Directorio no encontrado: %1 - Filename encoding is not valid - La codificación del nombre del archivo no es válida + Error while opening directory %1 + Error al abrir el directorio %1 Error while reading directory %1 Error al leer el directorio %1 - + + Filename encoding is not valid + La codificación del nombre del archivo no es válida + + OCC::EditLocallyJob - Could not start editing locally. - No se pudo iniciar la edición local. + An error occurred during data retrieval. + Ocurrió un error mientras se recuperaban los datos. An error occurred during setup. Ocurrió un error mientras se hacía la configuración. - Could not find a file for local editing. Make sure its path is valid and it is synced locally. - No fue posible encontrar un archivo para edición local. Asegúrese de que la ruta es válida y que esta se encuentra sincronizada localmente. + An error occurred trying to synchronise the file to edit locally. + Ocurrió un error mientras se intentaba sincronizar el archivo para edición local. Could not find a file for local editing. Make sure it is not excluded via selective sync. No fue posible encontrar un archivo para edición local. Asegúrese de que no está excluida a través de la sincronización selectiva. - An error occurred during data retrieval. - Ocurrió un error mientras se recuperaban los datos. - - - An error occurred trying to synchronise the file to edit locally. - Ocurrió un error mientras se intentaba sincronizar el archivo para edición local. - - - Server error: PROPFIND reply is not XML formatted! - Error del servidor: ¡la respuesta de PROPFIND no tiene formato XML! + Could not find a file for local editing. Make sure its path is valid and it is synced locally. + No fue posible encontrar un archivo para edición local. Asegúrese de que la ruta es válida y que esta se encuentra sincronizada localmente. Could not find a remote file info for local editing. Make sure its path is valid. No fue posible encontrar la información del archivo remoto para edición local. Asegúrese de que la ruta es válida. - - Invalid local file path. - Ruta al archivo local inválida. - Could not open %1 No fue posible abrir %1 - Please try again. - Por favor intente de nuevo. + Could not start editing locally. + No se pudo iniciar la edición local. File %1 already locked. El archivo %1 ya está bloqueado. + + File %1 could not be locked. + El archivo %1 no pudo ser bloqueado. + + + File %1 now locked. + El archivo %1 ahora está bloqueado. + + + Invalid local file path. + Ruta al archivo local inválida. + Lock will last for %1 minutes. You can also unlock this file manually once you are finished editing. El bloqueo se mantendrá por %1 minutos. Puede también desbloquear este archivo manualmente una vez que termine de editarlo. - File %1 now locked. - El archivo %1 ahora está bloqueado. + Please try again. + Por favor intente de nuevo. - File %1 could not be locked. - El archivo %1 no pudo ser bloqueado. + Server error: PROPFIND reply is not XML formatted! + Error del servidor: ¡la respuesta de PROPFIND no tiene formato XML! - + OCC::EditLocallyManager @@ -1471,18 +1488,10 @@ Además, esta acción interrumpirá cualquier sincronización en curso. OCC::EditLocallyVerificationJob - Invalid token received. - Se recibió un token inválido. - - - Please try again. - Por favor, vuelve a intentarlo. - - - Invalid file path was provided. - Se ha proporcionado una ruta de archivo inválida. + An error occurred trying to verify the request to edit locally. + Ha ocurrido un error intentando verificar la petición para editar localmente. - + Could not find an account for local editing. No se ha podido encontrar una cuenta para edición local. @@ -1491,21 +1500,24 @@ Además, esta acción interrumpirá cualquier sincronización en curso.No se ha podido comenzar la edición local. - An error occurred trying to verify the request to edit locally. - Ha ocurrido un error intentando verificar la petición para editar localmente. + Invalid file path was provided. + Se ha proporcionado una ruta de archivo inválida. - - - OCC::EncryptFolderJob - Could not generate the metadata for encryption, Unlocking the folder. -This can be an issue with your OpenSSL libraries. - No se pueden generar los metadatos para el cifrado, desbloquea la carpeta. -Esto podría ser un problema con tu librería OpenSSL + Invalid token received. + Se recibió un token inválido. - + + Please try again. + Por favor, vuelve a intentarlo. + + OCC::EncryptedFolderMetadataHandler + + Error fetching encrypted folder ID. + Error al obtener el ID de la carpeta cifrada. + Error fetching metadata. Error al obtener los metadatos. @@ -1514,10 +1526,6 @@ Esto podría ser un problema con tu librería OpenSSL Error locking folder. Error al bloquear la carpeta. - - Error fetching encrypted folder ID. - Error al obtener el ID de la carpeta cifrada. - Error parsing or decrypting metadata. Error al analizar o descifrar los metadatos. @@ -1528,21 +1536,22 @@ Esto podría ser un problema con tu librería OpenSSL - OCC::FileDetails - - %1 second(s) ago - seconds elapsed since file last modified - - Hace %1 segundo - Hace %1 segundo(s) - + OCC::EncryptFolderJob + + Could not generate the metadata for encryption, Unlocking the folder. +This can be an issue with your OpenSSL libraries. + No se pueden generar los metadatos para el cifrado, desbloquea la carpeta. +Esto podría ser un problema con tu librería OpenSSL + + + OCC::FileDetails - %1 minute(s) ago - minutes elapsed since file last modified + %1 day(s) ago + days elapsed since file last modified - Hace %1 minuto - Hace %1 minuto(s) + Hace %1 día + Hace %1 día(s) @@ -1554,11 +1563,11 @@ Esto podría ser un problema con tu librería OpenSSL - %1 day(s) ago - days elapsed since file last modified + %1 minute(s) ago + minutes elapsed since file last modified - Hace %1 día - Hace %1 día(s) + Hace %1 minuto + Hace %1 minuto(s) @@ -1569,6 +1578,14 @@ Esto podría ser un problema con tu librería OpenSSL Hace %1 mes(es) + + %1 second(s) ago + seconds elapsed since file last modified + + Hace %1 segundo + Hace %1 segundo(s) + + %1 year(s) ago years elapsed since file last modified @@ -1589,10 +1606,10 @@ Esto podría ser un problema con tu librería OpenSSL OCC::Flow2Auth - The returned server URL does not start with HTTPS despite the login URL started with HTTPS. Login will not be possible because this might be a security issue. Please contact your administrator. - La URL de consulta no comienza con HTTPS a pesar de que la URL de inicio de sesión comenzó con HTTPS. El inicio de sesión no será posible porque esto podría ser un problema de seguridad. Por favor, póngase en contacto con su administrador. + Could not parse the JSON returned from the server: <br><em>%1</em> + No se pudo procesar el código JSON recibido del servidor: <br><em>%1</em> - + Error returned from the server: <em>%1</em> Error devuelto por el servidor: <em>%1</em> @@ -1600,28 +1617,32 @@ Esto podría ser un problema con tu librería OpenSSL The polling URL does not start with HTTPS despite the login URL started with HTTPS. Login will not be possible because this might be a security issue. Please contact your administrator. La URL de la consulta no comienza con HTTPS a pesar de que la URL de inicio de sesión comenzó con HTTPS. El inicio de sesión no será posible porque esto podría ser un problema de seguridad. Por favor, póngase en contacto con su administrador. - - There was an error accessing the "token" endpoint: <br><em>%1</em> - Hubo un error accediendo al "token" endpoint: <br><em>%1</em> - The reply from the server did not contain all expected fields La respuesta del servidor no contiene todos los campos esperados - Could not parse the JSON returned from the server: <br><em>%1</em> - No se pudo procesar el código JSON recibido del servidor: <br><em>%1</em> + The returned server URL does not start with HTTPS despite the login URL started with HTTPS. Login will not be possible because this might be a security issue. Please contact your administrator. + La URL de consulta no comienza con HTTPS a pesar de que la URL de inicio de sesión comenzó con HTTPS. El inicio de sesión no será posible porque esto podría ser un problema de seguridad. Por favor, póngase en contacto con su administrador. - + + There was an error accessing the "token" endpoint: <br><em>%1</em> + Hubo un error accediendo al "token" endpoint: <br><em>%1</em> + + OCC::Flow2AuthWidget - Unable to open the Browser, please copy the link to your Browser. - No se ha podido abrir el navegador, por favor copie el enlace en su navegador. + Copy Link + Copiar Link + + + Link copied to clipboard. + Enlace copiado al portapapeles. - Waiting for authorization - Esperando autorización + Open Browser + Abrir Navegador Polling for authorization @@ -1632,38 +1653,36 @@ Esto podría ser un problema con tu librería OpenSSL Iniciando autorización - Link copied to clipboard. - Enlace copiado al portapapeles. - - - Open Browser - Abrir Navegador + Unable to open the Browser, please copy the link to your Browser. + No se ha podido abrir el navegador, por favor copie el enlace en su navegador. - Copy Link - Copiar Link + Waiting for authorization + Esperando autorización - + OCC::Folder - - %1 has been removed. - %1 names a file. - %1 ha sido eliminado. - - - %1 has been updated. - %1 names a file. - %1 ha sido actualizado. + + %1 and %n other file(s) are currently locked. + + %1 y otro %n archivo está actualmente bloqueado. + %1 y otro(s) %n archivo(s) están bloqueados actualmente. + - - %1 has been renamed to %2. - %1 and %2 name files. - %1 ha sido renombrado a %2. + + %1 and %n other file(s) could not be synced due to errors. See the log for details. + + %1 y otro archivo no pudieron ser sincronizados debido a errores. Para más detalles vea el registro. + %1 y otros %n archivos no se han podido sincronizar debido a errores. Para más detalles vea el registro. + - - %1 has been moved to %2. - %1 ha sido movido a %2. + + %1 and %n other file(s) have been added. + + %1 y %n otro(s) archivo(s) ha(n) sido añadido(s). + %1 y %n otro(s) archivo(s) ha(n) sido añadido(s). + %1 and %n other file(s) have been removed. @@ -1672,23 +1691,26 @@ Esto podría ser un problema con tu librería OpenSSL %1 y %n otros archivos han sido eliminados. - - Please choose a different location. The folder %1 doesn't exist. - Por favor, escoja una ubicación diferente. La carpeta %1 no existe. + + %1 and %n other file(s) have been updated. + + %1 y otro archivo han sido actualizados. + %1 y otros %n archivos han sido actualizados. + - Please choose a different location. %1 isn't a valid folder. - Por favor, escoja una ubicación diferente. La carpeta %1 no es válida. + %1 could not be synced due to an error. See the log for details. + %1 no se ha podido sincronizar debido a un error. Para más detalles, vea el registro. - Please choose a different location. %1 isn't a readable folder. - Por favor, escoja una ubicación diferente. La carpeta %1 no se puede leer. + %1 has a sync conflict. Please check the conflict file! + Conflicto al sincronizar %1. ¡Por favor compruebe el archivo! - %1 and %n other file(s) have been added. + %1 has and %n other file(s) have sync conflicts. - %1 y %n otro(s) archivo(s) ha(n) sido añadido(s). - %1 y %n otro(s) archivo(s) ha(n) sido añadido(s). + %1 y otro archivo han tenido conflictos al sincronizar. + %1 y otros %n archivos han tenido conflictos al sincronizar. @@ -1697,12 +1719,21 @@ Esto podría ser un problema con tu librería OpenSSL %1 ha sido añadido. - %1 and %n other file(s) have been updated. + %1 has been moved to %2 and %n other file(s) have been moved. - %1 y otro archivo han sido actualizados. - %1 y otros %n archivos han sido actualizados. + %1 ha sido movido a %2 y otro archivo ha sido movido. + %1 ha sido movido a %2 y otros %n archivos han sido movidos. + + %1 has been moved to %2. + %1 ha sido movido a %2. + + + %1 has been removed. + %1 names a file. + %1 ha sido eliminado. + %1 has been renamed to %2 and %n other file(s) have been renamed. @@ -1710,70 +1741,26 @@ Esto podría ser un problema con tu librería OpenSSL %1 ha sido renombrado a %2 y otros %n archivos han sido renombrado. - - %1 has been moved to %2 and %n other file(s) have been moved. - - %1 ha sido movido a %2 y otro archivo ha sido movido. - %1 ha sido movido a %2 y otros %n archivos han sido movidos. - - - - %1 has and %n other file(s) have sync conflicts. - - %1 y otro archivo han tenido conflictos al sincronizar. - %1 y otros %n archivos han tenido conflictos al sincronizar. - - - %1 has a sync conflict. Please check the conflict file! - Conflicto al sincronizar %1. ¡Por favor compruebe el archivo! - - - %1 and %n other file(s) could not be synced due to errors. See the log for details. - - %1 y otro archivo no pudieron ser sincronizados debido a errores. Para más detalles vea el registro. - %1 y otros %n archivos no se han podido sincronizar debido a errores. Para más detalles vea el registro. - + %1 has been renamed to %2. + %1 and %2 name files. + %1 ha sido renombrado a %2. - %1 could not be synced due to an error. See the log for details. - %1 no se ha podido sincronizar debido a un error. Para más detalles, vea el registro. - - - %1 and %n other file(s) are currently locked. - - %1 y otro %n archivo está actualmente bloqueado. - %1 y otro(s) %n archivo(s) están bloqueados actualmente. - + %1 has been updated. + %1 names a file. + %1 ha sido actualizado. %1 is currently locked. %1 está actualmente bloqueado. - - Sync Activity - Actividad de la sincronización - - - Could not read system exclude file - No se ha podido leer el archivo de exclusión del sistema - - - A new folder larger than %1 MB has been added: %2. - - Una carpeta mayor de %1 MB ha sido añadida: %2. - - A folder from an external storage has been added. Una carpeta de almacenamiento externo ha sido añadida. - - Please go in the settings to select it if you wish to download it. - Por favor vaya a opciones a seleccionarlo si desea descargar esto. - A folder has surpassed the set folder size limit of %1MB: %2. %3 @@ -1781,28 +1768,26 @@ Esto podría ser un problema con tu librería OpenSSL %3 - Keep syncing - Continuar sincronización - - - Stop syncing - Detener sincronización - - - The folder %1 has surpassed the set folder size limit of %2MB. - La carpeta %1 ha sobrepasado el límite establecido de tamaño de %2MB. - - - Would you like to stop syncing this folder? - ¿Desea detener la sincronización de esta carpeta? + A large number of files in the server have been deleted. +Please confirm if you'd like to proceed with these deletions. +Alternatively, you can restore all deleted files by uploading from '%1' folder to the server. + Han sido eliminados un gran número de archivos en el servidor. +Por favor, confirme si quiere proceder con estas eliminaciones. +Alternativamente, puede restaurar todos los archivos borrados subiéndolos desde la carpeta '%1' al servidor. - The folder %1 was created but was excluded from synchronization previously. Data inside it will not be synchronized. - Se ha creado la carpeta %1 pero se excluyó de la sincronización con anterioridad. Los datos en su interior no se sincronizarán. + A large number of files in your local '%1' folder have been deleted. +Please confirm if you'd like to proceed with these deletions. +Alternatively, you can restore all deleted files by downloading them from the server. + Han sido eliminados un gran número de archivos en su carpeta local '%1'. +Por favor, confirma si quiere continuar con estas eliminaciones. +Alternativamente, puede restaurar todos los archivos borrados descargándolos del servidor. - The file %1 was created but was excluded from synchronization previously. It will not be synchronized. - Se ha creado el archivo %1 pero se excluyó de la sincronización con anterioridad. No se sincronizará. + A new folder larger than %1 MB has been added: %2. + + Una carpeta mayor de %1 MB ha sido añadida: %2. + Changes in synchronized folders could not be tracked reliably. @@ -1817,45 +1802,81 @@ Esto significa que el cliente de sincronización podría no subir inmediatamente %1 - Virtual file download failed with code "%1", status "%2" and error message "%3" - La descarga del archivo virtual ha fallado con código "%1" , estado "%2" y mensaje de error "%3" + Could not read system exclude file + No se ha podido leer el archivo de exclusión del sistema - A large number of files in the server have been deleted. -Please confirm if you'd like to proceed with these deletions. -Alternatively, you can restore all deleted files by uploading from '%1' folder to the server. - Han sido eliminados un gran número de archivos en el servidor. -Por favor, confirme si quiere proceder con estas eliminaciones. -Alternativamente, puede restaurar todos los archivos borrados subiéndolos desde la carpeta '%1' al servidor. + Keep syncing + Continuar sincronización - A large number of files in your local '%1' folder have been deleted. -Please confirm if you'd like to proceed with these deletions. -Alternatively, you can restore all deleted files by downloading them from the server. - Han sido eliminados un gran número de archivos en su carpeta local '%1'. -Por favor, confirma si quiere continuar con estas eliminaciones. -Alternativamente, puede restaurar todos los archivos borrados descargándolos del servidor. + Please choose a different location. %1 isn't a readable folder. + Por favor, escoja una ubicación diferente. La carpeta %1 no se puede leer. - Remove all files? - ¿Eliminar todos los archivos? + Please choose a different location. %1 isn't a valid folder. + Por favor, escoja una ubicación diferente. La carpeta %1 no es válida. + + + Please choose a different location. The folder %1 doesn't exist. + Por favor, escoja una ubicación diferente. La carpeta %1 no existe. + + + Please go in the settings to select it if you wish to download it. + Por favor vaya a opciones a seleccionarlo si desea descargar esto. Proceed with Deletion Continuar con la eliminación - Restore Files to Server - Restaurar los archivos al servidor + Remove all files? + ¿Eliminar todos los archivos? Restore Files from Server Restaurar los archivos desde el servidor - + + Restore Files to Server + Restaurar los archivos al servidor + + + Stop syncing + Detener sincronización + + + Sync Activity + Actividad de la sincronización + + + The file %1 was created but was excluded from synchronization previously. It will not be synchronized. + Se ha creado el archivo %1 pero se excluyó de la sincronización con anterioridad. No se sincronizará. + + + The folder %1 has surpassed the set folder size limit of %2MB. + La carpeta %1 ha sobrepasado el límite establecido de tamaño de %2MB. + + + The folder %1 was created but was excluded from synchronization previously. Data inside it will not be synchronized. + Se ha creado la carpeta %1 pero se excluyó de la sincronización con anterioridad. Los datos en su interior no se sincronizarán. + + + Virtual file download failed with code "%1", status "%2" and error message "%3" + La descarga del archivo virtual ha fallado con código "%1" , estado "%2" y mensaje de error "%3" + + + Would you like to stop syncing this folder? + ¿Desea detener la sincronización de esta carpeta? + + OCC::FolderCreationDialog + Could not create a folder! Check your write permissions. + ¡No se pudo crear la carpeta! Comprueba los permisos de escritura. + + Create new folder Crear nueva carpeta @@ -1863,122 +1884,118 @@ Alternativamente, puede restaurar todos los archivos borrados descargándolos de Enter folder name Escriba el nombre de la carpeta - - Folder already exists - Ya existe la carpeta - Error Error - Could not create a folder! Check your write permissions. - ¡No se pudo crear la carpeta! Comprueba los permisos de escritura. + Folder already exists + Ya existe la carpeta - + OCC::FolderMan - Could not reset folder state - No se ha podido restablecer el estado de la carpeta + %1 (Sync is paused) + %1 (Sincronización en pausa) + + + (backup %1) + (copia de seguridad %1) (backup) (copia de seguridad) - - (backup %1) - (copia de seguridad %1) - An old sync journal "%1" was found, but could not be removed. Please make sure that no application is currently using it. Se ha encontrado un registro de sincronización antiguo "%1", que no se ha podido eliminar. Por favor, asegúrese de que ninguna aplicación lo está utilizando en este momento. - Undefined state. - Estado no definido. + Could not reset folder state + No se ha podido restablecer el estado de la carpeta - Waiting to start syncing. - Esperando para comenzar la sincronización. + Last sync was successful. + La última sincronización se ha realizado con éxito. - Preparing for sync. - Preparándose para sincronizar. + Please choose a different location. %1 is already being used as a sync folder for %2. + folder location, server url + Por favor, escoja una ubicación diferente. %1 ya se está utilizando como una carpeta de sincronización para %2. - Syncing %1 of %2 (A few seconds left) - Sincronizando %1 de %2 (quedan unos segundos) + Please choose a different location. %1 is already being used as a sync folder. + Por favor, escoja una ubicación diferente. %1 ya se está utilizando como una carpeta de sincronización. - Syncing %1 of %2 (%3 left) - Sicronizando %1 de %2 (quedan %3) + Please choose a different location. %1 is already contained in a folder used as a sync folder. + Por favor, escoja una ubicación diferente. %1 ya se está dentro de una carpeta que se está utilizando como carpeta de sincronización. - Syncing %1 of %2 - Sincronizando %1 de %2 + Please choose a different location. The path %1 doesn't exist. + Por favor, escoja una ubicación diferente. La ruta %1 no existe. - Syncing %1 (A few seconds left) - Sincronizando %1 (Quedan pocos segundos) + Please choose a different location. The path %1 isn't a folder. + Por favor, escoja una ubicación diferente. La ruta %1 no es una carpeta. - Syncing %1 (%2 left) - Sincronizando %1 (Quedan %2) + Please choose a different location. The selected folder isn't valid. + Por favor, escoja una ubicación diferente. La carpeta seleccionada no es válida. - Syncing %1 - Sincronizando %1 + Please choose a different location. You don't have enough permissions to write to %1. + folder location + Por favor, escoja una ubicación diferente. No tiene suficientes permisos para escribir a%1. - Sync is running. - Sincronización en funcionamiento. + Preparing for sync. + Preparándose para sincronizar. + + + Setup error. + Error de configuración. Sync finished with unresolved conflicts. La sincronización finalizó pero con conflictos sin resolver. - Last sync was successful. - La última sincronización se ha realizado con éxito. + Sync is paused. + La sincronización está en pausa. - Setup error. - Error de configuración. + Sync is running. + Sincronización en funcionamiento. Sync request was cancelled. La solicitud de sincronización fue cancelada. - Please choose a different location. The selected folder isn't valid. - Por favor, escoja una ubicación diferente. La carpeta seleccionada no es válida. + Syncing %1 + Sincronizando %1 - Please choose a different location. %1 is already being used as a sync folder. - Por favor, escoja una ubicación diferente. %1 ya se está utilizando como una carpeta de sincronización. + Syncing %1 (%2 left) + Sincronizando %1 (Quedan %2) - Please choose a different location. The path %1 doesn't exist. - Por favor, escoja una ubicación diferente. La ruta %1 no existe. + Syncing %1 (A few seconds left) + Sincronizando %1 (Quedan pocos segundos) - Please choose a different location. The path %1 isn't a folder. - Por favor, escoja una ubicación diferente. La ruta %1 no es una carpeta. + Syncing %1 of %2 + Sincronizando %1 de %2 - Please choose a different location. You don't have enough permissions to write to %1. - folder location - Por favor, escoja una ubicación diferente. No tiene suficientes permisos para escribir a%1. + Syncing %1 of %2 (%3 left) + Sicronizando %1 de %2 (quedan %3) - Please choose a different location. %1 is already contained in a folder used as a sync folder. - Por favor, escoja una ubicación diferente. %1 ya se está dentro de una carpeta que se está utilizando como carpeta de sincronización. - - - Please choose a different location. %1 is already being used as a sync folder for %2. - folder location, server url - Por favor, escoja una ubicación diferente. %1 ya se está utilizando como una carpeta de sincronización para %2. + Syncing %1 of %2 (A few seconds left) + Sincronizando %1 de %2 (quedan unos segundos) The folder %1 is linked to multiple accounts. @@ -1991,14 +2008,14 @@ Para resolver este problema: Por favor, quite %1 de alguna de las cuentas y cree Para usuarios avanzados: Este problema puede estar relacionado a múltiples archivos de base de datos de sincronización ubicados en una carpeta. Por favor, chequee en %1 la existencia de archivos .sync_*.db desactualizados o sin usar y elimínelos. - Sync is paused. - La sincronización está en pausa. + Undefined state. + Estado no definido. - %1 (Sync is paused) - %1 (Sincronización en pausa) + Waiting to start syncing. + Esperando para comenzar la sincronización. - + OCC::FolderStatusDelegate @@ -2013,57 +2030,61 @@ Para usuarios avanzados: Este problema puede estar relacionado a múltiples arch OCC::FolderStatusModel - You need to be connected to add a folder - Necesita estar conectado para añadir una carpeta + %1 %2 + Example text: "Uploading foobar.png" + %1 %2 - Click this button to add a folder to synchronize. - Haga clic en este botón para añadir una carpeta a sincronizar + %1 %2 (%3 of %4) + Example text: "Uploading foobar.png (2MB of 2MB)" + %1 %2 (%3 de %4) - Could not decrypt! - ¡No fue posible descifrar! + %1 %2 … + Example text: "Uploading foobar.png (1MB of 2MB) time left 2 minutes at a rate of 24Kb/s" Example text: "Syncing 'foo.txt', 'bar.txt'" + %1 %2 … %1 (%2) %1 (%2) - Error while loading the list of folders from the server. - Error mientras se cargaba la lista de carpetas desde el servidor. - - - Virtual file support is enabled. - El soporte para archivos virtuales está activado. + %1 of %2, file %3 of %4 + Example text: "12 MB of 345 MB, file 6 of 7" + %1 de %2, archivo %3 de %4 - Signed out - Cerrar sesión + %5 left, %1 of %2, file %3 of %4 + %5 restantes, %1 de %2, archivo %3 de %4 - Synchronizing virtual files in local folder - Sincronizando archivos virtuales en carpeta local + , + , - Synchronizing files in local folder - Sincronizando archivos en carpeta local + A few seconds left, %1 of %2, file %3 of %4 + Example text: "5 minutes left, 12 MB of 345 MB, file 6 of 7" + Quedan pocos segundos, %1 de %2, archivo %3 de %4 - Checking for changes in remote "%1" - Buscando cambios en carpeta remota "%1" + About to start syncing + A punto de comenzar a sincronizar Checking for changes in local "%1" Buscando cambios en carpeta local "%1" - Syncing local and remote changes - Sincronizando cambios locales y remotos + Checking for changes in remote "%1" + Buscando cambios en carpeta remota "%1" - %1 %2 … - Example text: "Uploading foobar.png (1MB of 2MB) time left 2 minutes at a rate of 24Kb/s" Example text: "Syncing 'foo.txt', 'bar.txt'" - %1 %2 … + Click this button to add a folder to synchronize. + Haga clic en este botón para añadir una carpeta a sincronizar + + + Could not decrypt! + ¡No fue posible descifrar! Download %1/s @@ -2071,57 +2092,49 @@ Para usuarios avanzados: Este problema puede estar relacionado a múltiples arch Descargando %1/s - File %1 of %2 - Archivo %1 de %2 - - - There are unresolved conflicts. Click for details. - Hay conflictos sin resolver. Haz clic para más detalles. - - - , - , + Error while loading the list of folders from the server. + Error mientras se cargaba la lista de carpetas desde el servidor. Fetching folder list from server … Obteniendo la lista de carpetas del servidor ... - ↓ %1/s - ↓ %1/s + File %1 of %2 + Archivo %1 de %2 - Upload %1/s - Example text: "Upload 24Kb/s" (%1 is replaced by 24Kb (translated)) - Subiendo %1/s + Preparing to sync … + Preparando la sincronización ... + + + Signed out + Cerrar sesión - ↑ %1/s - ↑ %1/s + Synchronizing files in local folder + Sincronizando archivos en carpeta local - %1 %2 (%3 of %4) - Example text: "Uploading foobar.png (2MB of 2MB)" - %1 %2 (%3 de %4) + Synchronizing virtual files in local folder + Sincronizando archivos virtuales en carpeta local - %1 %2 - Example text: "Uploading foobar.png" - %1 %2 + Syncing local and remote changes + Sincronizando cambios locales y remotos - A few seconds left, %1 of %2, file %3 of %4 - Example text: "5 minutes left, 12 MB of 345 MB, file 6 of 7" - Quedan pocos segundos, %1 de %2, archivo %3 de %4 + There are unresolved conflicts. Click for details. + Hay conflictos sin resolver. Haz clic para más detalles. - %5 left, %1 of %2, file %3 of %4 - %5 restantes, %1 de %2, archivo %3 de %4 + Upload %1/s + Example text: "Upload 24Kb/s" (%1 is replaced by 24Kb (translated)) + Subiendo %1/s - %1 of %2, file %3 of %4 - Example text: "12 MB of 345 MB, file 6 of 7" - %1 de %2, archivo %3 de %4 + Virtual file support is enabled. + El soporte para archivos virtuales está activado. Waiting for %n other folder(s) … @@ -2131,14 +2144,18 @@ Para usuarios avanzados: Este problema puede estar relacionado a múltiples arch - About to start syncing - A punto de comenzar a sincronizar + You need to be connected to add a folder + Necesita estar conectado para añadir una carpeta - Preparing to sync … - Preparando la sincronización ... + ↑ %1/s + ↑ %1/s - + + ↓ %1/s + ↓ %1/s + + OCC::FolderWatcher @@ -2182,20 +2199,20 @@ Para usuarios avanzados: Este problema puede estar relacionado a múltiples arch OCC::FolderWizardRemotePath - Create Remote Folder - Crear carpeta remota + Authentication failed accessing %1 + Fallo de autenticación al acceder a %1 - Enter the name of the new folder to be created below "%1": - Introduce el nombre de la nueva carpeta que se creará debajo de "%1": + Choose this to sync the entire account + Elija esto para sincronizar la cuenta entera - Folder was successfully created on %1. - La carpeta ha sido creada con éxito en %1. + Create Remote Folder + Crear carpeta remota - Authentication failed accessing %1 - Fallo de autenticación al acceder a %1 + Enter the name of the new folder to be created below "%1": + Introduce el nombre de la nueva carpeta que se creará debajo de "%1": Failed to create the folder on %1. Please check manually. @@ -2206,8 +2223,8 @@ Para usuarios avanzados: Este problema puede estar relacionado a múltiples arch Fallo al listar una carpeta. Error: %1 - Choose this to sync the entire account - Elija esto para sincronizar la cuenta entera + Folder was successfully created on %1. + La carpeta ha sido creada con éxito en %1. Please choose a different location. %1 is already being synced to %2. @@ -2216,216 +2233,173 @@ Para usuarios avanzados: Este problema puede estar relacionado a múltiples arch OCC::FolderWizardSelectiveSync - - Use virtual files instead of downloading content immediately %1 - Usa archivos virtuales en vez de descargar el contenido inmediatamente %1 - (experimental) (experimental) - Virtual files are not supported for Windows partition roots as local folder. Please choose a valid subfolder under drive letter. - Los archivos virtuales no son compatibles con la carpeta raíz de la partición de Windows como carpeta local. Por favor, elija una subcarpeta válida bajo la letra de la unidad. + Use virtual files instead of downloading content immediately %1 + Usa archivos virtuales en vez de descargar el contenido inmediatamente %1 Virtual files are not supported at the selected location Los archivos virtuales no están soportados en la ubicación seleccionada - - - OCC::GETFileJob - - No E-Tag received from server, check Proxy/Gateway - No se ha recibido ninguna E-Tag del servidor, revise el proxy/puerta de enlace - - - We received a different E-Tag for resuming. Retrying next time. - Se ha recibido una E-Tag distinta para reanudar. Se volverá a intentar. - - - We received an unexpected download Content-Length. - Hemos recibido una longitud inesperada de contenido de la descarga. - - - Server returned wrong content-range - El servidor ha devuelto un content-range erróneo - - - Connection Timeout - Tiempo de espera de conexión agotado + + Virtual files are not supported for Windows partition roots as local folder. Please choose a valid subfolder under drive letter. + Los archivos virtuales no son compatibles con la carpeta raíz de la partición de Windows como carpeta local. Por favor, elija una subcarpeta válida bajo la letra de la unidad. - + OCC::GeneralSettings - General Settings - Ajustes generales + &Automatically check for updates + Comprobar &actualizaciones automáticamente - Show Call Notifications - Mostrar notificaciones de llamadas + &Launch on System Startup + &Ejecutar al iniciar el sistema - For System Tray - A la bandeja del sistema + &Restart && Update + &Reiniciar && Actualizar - Show Chat Notifications - Mostrar las notificaciones de Chat + - beta: contains versions with new features that may not be tested thoroughly +- daily: contains versions created daily only for testing and development + +Downgrading versions is not possible immediately: changing from beta to stable means waiting for the new stable version. + list of available update channels to non enterprise users and downgrading warning + - beta: contiene versiones con nuevas características que pueden no haberse probado exhaustivamente. +- diaria: contiene versiones creadas diariamente solo para pruebas y desarrollo. + +Cambiar a una versión anterior no es inmediatamente posible: cambiar de beta a estable significa esperar a la siguiente version estable. - Show Server &Notifications - Mostrar &Notificaciones del Servidor + - enterprise: contains stable versions for customers. + +Downgrading versions is not possible immediately: changing from stable to enterprise means waiting for the new enterprise version. + list of available update channels to enterprise users and downgrading warning + - empresarial: contiene versiones estables para clientes. + +Cambiar a una versión anterior no es inmediatamente posible: cambiar de estable a empresarial significa esperar a la nueva versión empresarial. Advanced Avanzado - - MB - Trailing part of "Ask confirmation before syncing folder larger than" - MB - Ask for confirmation before synchronizing external storages Preguntar si se desea sincronizar carpetas de almacenamiento externo - - &Launch on System Startup - &Ejecutar al iniciar el sistema - - - Use &Monochrome Icons - Usar iconos &monocromáticos - Ask for confirmation before synchronizing new folders larger than Pedir confirmación antes de sincronizar carpetas nuevas mayores a - - Notify when synchronised folders grow larger than specified limit - Notificar cuando las carpetas sincronizadas aumenten su tamaño más allá del límite especificado - Automatically disable synchronisation of folders that overcome limit Deshabilitar sincronización de manera automática para las carpetas que sobrepasen el límite - Move removed files to trash - Mover archivos eliminados a la papelera + Cancel + Cancelar - Show sync folders in &Explorer's navigation pane - Mostrar carpetas sincronizadas en el panel de navegación del &Explorador + Change update channel + Cambiar canal de actualización - S&how crash reporter - M&ostrar el informe de fallos + Changing update channel? + ¿Cambiar canal de actualización? - Server poll interval - Intervalo de sondeo del servidor + Check Now + Comprobar ahora - seconds (if <a href="https://github.com/nextcloud/notify_push">Client Push</a> is unavailable) - segundos (si <a href="https://github.com/nextcloud/notify_push">Client Push</a>no está disponible) + Create Debug Archive + Crear archivo de depuración - Edit &Ignored Files - Editar archivos &ignorados - - - Create Debug Archive - Crear archivo de depuración + Debug Archive Created + Archivo de depuración creado - Info - Información + Debug archive is created at %1 + El archivo de depuración se ha creado en %1 - + Desktop client x.x.x Cliente de escritorio x.x.x - Update channel - Canal de actualización + Edit &Ignored Files + Editar archivos &ignorados - &Automatically check for updates - Comprobar &actualizaciones automáticamente + For System Tray + A la bandeja del sistema - Check Now - Comprobar ahora + General Settings + Ajustes generales - Usage Documentation - Documentación de uso + Info + Información Legal Notice Aviso Legal - &Restart && Update - &Reiniciar && Actualizar + MB + Trailing part of "Ask confirmation before syncing folder larger than" + MB - Server notifications that require attention. - Notificaciones del servidor que requieren atención. + Move removed files to trash + Mover archivos eliminados a la papelera - Show chat notification dialogs. - Mostrar diálogos de notificación de chats. + Notify when synchronised folders grow larger than specified limit + Notificar cuando las carpetas sincronizadas aumenten su tamaño más allá del límite especificado - Show call notification dialogs. - Mostrar diálogos de notificación de llamadas. + S&how crash reporter + M&ostrar el informe de fallos - You cannot disable autostart because system-wide autostart is enabled. - No puedes desactivar el inicio automático porque el inicio automático de todo el sistema está activado. + Server notifications that require attention. + Notificaciones del servidor que requieren atención. - stable - stable + Server poll interval + Intervalo de sondeo del servidor - beta - beta + Show Call Notifications + Mostrar notificaciones de llamadas - daily - diariamente + Show Chat Notifications + Mostrar las notificaciones de Chat - enterprise - empresarial + Show Server &Notifications + Mostrar &Notificaciones del Servidor - - beta: contains versions with new features that may not be tested thoroughly -- daily: contains versions created daily only for testing and development - -Downgrading versions is not possible immediately: changing from beta to stable means waiting for the new stable version. - list of available update channels to non enterprise users and downgrading warning - - beta: contiene versiones con nuevas características que pueden no haberse probado exhaustivamente. -- diaria: contiene versiones creadas diariamente solo para pruebas y desarrollo. - -Cambiar a una versión anterior no es inmediatamente posible: cambiar de beta a estable significa esperar a la siguiente version estable. + Show call notification dialogs. + Mostrar diálogos de notificación de llamadas. - - enterprise: contains stable versions for customers. - -Downgrading versions is not possible immediately: changing from stable to enterprise means waiting for the new enterprise version. - list of available update channels to enterprise users and downgrading warning - - empresarial: contiene versiones estables para clientes. - -Cambiar a una versión anterior no es inmediatamente posible: cambiar de estable a empresarial significa esperar a la nueva versión empresarial. + Show chat notification dialogs. + Mostrar diálogos de notificación de chats. - Changing update channel? - ¿Cambiar canal de actualización? + Show sync folders in &Explorer's navigation pane + Mostrar carpetas sincronizadas en el panel de navegación del &Explorador The channel determines which upgrades will be offered to install: @@ -2437,40 +2411,71 @@ Cambiar a una versión anterior no es inmediatamente posible: cambiar de estable - Change update channel - Cambiar canal de actualización + Update channel + Canal de actualización - Cancel - Cancelar + Usage Documentation + Documentación de uso + + + Use &Monochrome Icons + Usar iconos &monocromáticos + + + You cannot disable autostart because system-wide autostart is enabled. + No puedes desactivar el inicio automático porque el inicio automático de todo el sistema está activado. Zip Archives Archivos Zip - Debug Archive Created - Archivo de depuración creado + beta + beta - Debug archive is created at %1 - El archivo de depuración se ha creado en %1 + daily + diariamente - + + enterprise + empresarial + + + seconds (if <a href="https://github.com/nextcloud/notify_push">Client Push</a> is unavailable) + segundos (si <a href="https://github.com/nextcloud/notify_push">Client Push</a>no está disponible) + + + stable + stable + + - OCC::GetOrCreatePublicLinkShare + OCC::GETFileJob - Password for share required - Se requiere contraseña para compartir + Connection Timeout + Tiempo de espera de conexión agotado + + + No E-Tag received from server, check Proxy/Gateway + No se ha recibido ninguna E-Tag del servidor, revise el proxy/puerta de enlace - Please enter a password for your link share: - Por favor, introduce una contraseña para tu enlace compartido: + Server returned wrong content-range + El servidor ha devuelto un content-range erróneo - Sharing error - Error al compartir + We received a different E-Tag for resuming. Retrying next time. + Se ha recibido una E-Tag distinta para reanudar. Se volverá a intentar. + + + We received an unexpected download Content-Length. + Hemos recibido una longitud inesperada de contenido de la descarga. + + + OCC::GetOrCreatePublicLinkShare Could not retrieve or create the public link share. Error: @@ -2479,43 +2484,55 @@ Cambiar a una versión anterior no es inmediatamente posible: cambiar de estable %1 - - - OCC::HttpCredentialsGui + + Password for share required + Se requiere contraseña para compartir + - Please enter %1 password:<br><br>Username: %2<br>Account: %3<br> - Por favor, introduzca la contraseña de %1:<br><br>Usuario: %2<br>Cuenta: %3<br> + Please enter a password for your link share: + Por favor, introduce una contraseña para tu enlace compartido: - Reading from keychain failed with error: "%1" - La lectura del keychain falló con el error "%1" + Sharing error + Error al compartir + + + OCC::HttpCredentialsGui + <a href="%1">Click here</a> to request an app password from the web interface. + <a href="%1">Haga clic aquí</a> para solicitar una contraseña de aplicación desde la interfaz web. + + Enter Password Introduzca la contraseña - <a href="%1">Click here</a> to request an app password from the web interface. - <a href="%1">Haga clic aquí</a> para solicitar una contraseña de aplicación desde la interfaz web. + Please enter %1 password:<br><br>Username: %2<br>Account: %3<br> + Por favor, introduzca la contraseña de %1:<br><br>Usuario: %2<br>Cuenta: %3<br> - + + Reading from keychain failed with error: "%1" + La lectura del keychain falló con el error "%1" + + OCC::IgnoreListEditor - Ignored Files Editor - Editor de archivos ignorados + Files Ignored by Patterns + Archivos ignorados por patrones Global Ignore Settings Ajustes de Ignorar de modo global - Sync hidden files - Sincronizar archivos ocultos + Ignored Files Editor + Editor de archivos ignorados - Files Ignored by Patterns - Archivos ignorados por patrones + Sync hidden files + Sincronizar archivos ocultos This entry is provided by the system at "%1" and cannot be modified in this view. @@ -2525,24 +2542,28 @@ Cambiar a una versión anterior no es inmediatamente posible: cambiar de estable OCC::IgnoreListTableWidget - Pattern - Patrón + Add + Añadir - Allow Deletion - Permitir borrado + Add Ignore Pattern + Añadir patrón de ignorados - Add - Añadir + Add a new ignore pattern: + Añadir un nuevo patrón de archivos ignorados: + + + Allow Deletion + Permitir borrado - Remove - Eliminar + Cannot write changes to "%1". + No se pudo escribir los cambios a "%1". - Remove all - Eliminar todos + Could not open file + No se ha podido abrir el archivo Files or folders matching a pattern will not be synchronized. @@ -2553,131 +2574,119 @@ Items where deletion is allowed will be deleted if they prevent a directory from Los elementos que se permite su borrado se eliminarán si impiden que un directorio se elimine. Esto es útil para los metadatos. - Could not open file - No se ha podido abrir el archivo - - - Cannot write changes to "%1". - No se pudo escribir los cambios a "%1". + Pattern + Patrón - Add Ignore Pattern - Añadir patrón de ignorados + Remove + Eliminar - Add a new ignore pattern: - Añadir un nuevo patrón de archivos ignorados: + Remove all + Eliminar todos - + OCC::InvalidFilenameDialog - Invalid filename - Nombre de archivo no válido + Cannot rename file because a file with the same name does already exist on the server. Please pick another name. + No se puede renombrar el archivo porque hay un archivo con el mismo nombre en el servidor. Por favor, elija otro nombre. - The file could not be synced because it contains characters which are not allowed on this system. - El archivo no puede ser sincronizado porque contiene caracteres que no se permiten en el sistema. + Checking rename permissions … + Comprobando los permisos de para renombrado … + + + Could not rename file. Please make sure you are connected to the server. + No se ha podido renombrar el archivo. Por favor, asegúrese de que está conectado al servidor. + Could not rename local file. %1 + No se ha podido renombrar el archivo local. %1 + + Error Error - Please enter a new name for the file: - Por favor, escribe un nuevo nombre para el archivo: + Failed to fetch permissions with error %1 + Fallo en la obtención de permisos con error %1 - New filename - Nuevo nombre de archivo + Filename contains illegal characters: %1 + El nombre del archivo contiene caracteres ilegales: %1 - Rename file - Renombrar archivo + Filename contains leading and trailing spaces. + El nombre del archivo contiene espacios iniciales y finales. - The file "%1" could not be synced because the name contains characters which are not allowed on this system. - El archivo "%1" no pudo ser sincronizado porque el nombre contiene caracteres no permitidos en este sistema. - - - The following characters are not allowed on the system: \ / : ? * " < > | leading/trailing spaces - Los siguientes caracteres no se permiten en el sistema: \ / : ? * " < > | espacios al inicio/final - - - The file "%1" could not be synced because the name contains characters which are not allowed on the server. - No se ha podido sincronizar el archivo "%1" porque su nombre contiene caracteres que no están permitidos en el servidor. + Filename contains leading spaces. + El nombre del archivo contiene espacios iniciales. - The following characters are not allowed: %1 - Los siguientes caracteres no están permitidos: %1 + Filename contains trailing spaces. + El nombre del archivo contiene espacios finales. - The following basenames are not allowed: %1 - Los siguientes nombres base no están permitidos: %1 + Invalid filename + Nombre de archivo no válido - The following filenames are not allowed: %1 - Los siguientes nombres de archivo no están permitidos: %1 + New filename + Nuevo nombre de archivo - The following file extensions are not allowed: %1 - Las siguients extensiones de archivo no están permitidas: %1 + Please enter a new name for the file: + Por favor, escribe un nuevo nombre para el archivo: - Checking rename permissions … - Comprobando los permisos de para renombrado … + Rename file + Renombrar archivo - You don't have the permission to rename this file. Please ask the author of the file to rename it. - No tienes permisos para renombrar este archivo. Por favor, dile al autor del archivo que lo renombre. + The file "%1" could not be synced because the name contains characters which are not allowed on the server. + No se ha podido sincronizar el archivo "%1" porque su nombre contiene caracteres que no están permitidos en el servidor. - Failed to fetch permissions with error %1 - Fallo en la obtención de permisos con error %1 + The file "%1" could not be synced because the name contains characters which are not allowed on this system. + El archivo "%1" no pudo ser sincronizado porque el nombre contiene caracteres no permitidos en este sistema. - Filename contains leading and trailing spaces. - El nombre del archivo contiene espacios iniciales y finales. + The file could not be synced because it contains characters which are not allowed on this system. + El archivo no puede ser sincronizado porque contiene caracteres que no se permiten en el sistema. - Filename contains leading spaces. - El nombre del archivo contiene espacios iniciales. + The following basenames are not allowed: %1 + Los siguientes nombres base no están permitidos: %1 - Filename contains trailing spaces. - El nombre del archivo contiene espacios finales. + The following characters are not allowed on the system: \ / : ? * " < > | leading/trailing spaces + Los siguientes caracteres no se permiten en el sistema: \ / : ? * " < > | espacios al inicio/final - Use invalid name - Utilizar nombre inválido + The following characters are not allowed: %1 + Los siguientes caracteres no están permitidos: %1 - Filename contains illegal characters: %1 - El nombre del archivo contiene caracteres ilegales: %1 + The following file extensions are not allowed: %1 + Las siguients extensiones de archivo no están permitidas: %1 - Could not rename file. Please make sure you are connected to the server. - No se ha podido renombrar el archivo. Por favor, asegúrese de que está conectado al servidor. + The following filenames are not allowed: %1 + Los siguientes nombres de archivo no están permitidos: %1 - Cannot rename file because a file with the same name does already exist on the server. Please pick another name. - No se puede renombrar el archivo porque hay un archivo con el mismo nombre en el servidor. Por favor, elija otro nombre. + Use invalid name + Utilizar nombre inválido - Could not rename local file. %1 - No se ha podido renombrar el archivo local. %1 + You don't have the permission to rename this file. Please ask the author of the file to rename it. + No tienes permisos para renombrar este archivo. Por favor, dile al autor del archivo que lo renombre. - + OCC::LegalNotice - - Legal notice - Aviso legal - - - Close - Cerrar - <p>Copyright 2017-2025 Nextcloud GmbH<br />Copyright 2012-2023 ownCloud GmbH</p> <p>Copyright 2017-2025 Nextcloud GmbH<br />Copyright 2012-2023 ownCloud GmbH</p> @@ -2686,14 +2695,30 @@ Los elementos que se permite su borrado se eliminarán si impiden que un directo <p>Licensed under the GNU General Public License (GPL) Version 2.0 or any later version.</p> <p>Bajo la Licencia Pública General de GNU (GPL) versión 2.0 o posterior.</p> - + + Close + Cerrar + + + Legal notice + Aviso legal + + OCC::LogBrowser + + Enable logging to temporary folder + Activar la escritura de registros a una carpeta temporal + Log Output Salida del registro + Open folder + Abrir carpeta + + The client can write debug logs to a temporary folder. These logs are very helpful for diagnosing problems. Since log files can get large, the client will start a new one for each sync run and compress older ones. It will also delete log files after a couple of hours to avoid consuming too much disk space. If enabled, logs will be written to %1 @@ -2701,38 +2726,26 @@ If enabled, logs will be written to %1 Ya que los archivos de registro pueden acabar siendo grandes, el cliente creará uno nuevo para cada sincronización y comprimirá los anteriores. También eliminará los archivos de registro tras un par de horas para evitar consumir demasiado espacio de disco. Si está activado, los registros serán escritos en %1 - - Enable logging to temporary folder - Activar la escritura de registros a una carpeta temporal - This setting persists across client restarts. Note that using any logging command line options will override this setting. Este ajuste persiste tras el reinicio del cliente. Nótese que usar cualquier opción de toma de registros a través de línea de comandos anulará este ajuste. - - Open folder - Abrir carpeta - - + OCC::Logger - - Error - Error - <nobr>File "%1"<br/>cannot be opened for writing.<br/><br/>The log output <b>cannot</b> be saved!</nobr> <nobr>El archivo "%1"<br/>no se puede abrir para escritura.<br/><br/>¡El archivo de registro <b>no se puede</b> guardar!</nobr> - + + Error + Error + + OCC::Mac::FileProviderEditLocallyJob - - Could not start editing locally. - No se ha podido empezar a editar localmente. - An error occurred during setup. Ha ocurrido un error durante la configuración. @@ -2749,178 +2762,178 @@ Nótese que usar cualquier opción de toma de registros a través de línea de c Could not get file identifier. No se pudo obtener el identificador del archivo. + + Could not start editing locally. + No se ha podido empezar a editar localmente. + The file identifier is empty. El identificador del archivo está vacío. - OCC::NSISUpdater + OCC::NetworkSettings - New Version Available - Nueva versión disponible + Download Bandwidth + Velocidad de descarga - <p>A new version of the %1 Client is available.</p><p><b>%2</b> is available for download. The installed version is %3.</p> - <p>Una nueva versión del programa cliente de %1 está disponible.</p><p><b>%2</b> está disponible para descargar. La versión instalada es la %3.</p> + HTTP(S) proxy + Proxy HTTP(S) - Update Failed - La actualización falló + Host + Servidor - <p>A new version of the %1 Client is available but the updating process failed.</p><p><b>%2</b> has been downloaded. The installed version is %3. If you confirm restart and update, your computer may reboot to complete the installation.</p> - <p>Una nueva versión del Cliente %1 está disponible pero el proceso de actualización ha fallado.</p><p><b>%2</b> se ha descargado. La versión instalada es %3. Si confirmas el reinicio y la actualización, es posible que su ordenador se reinicie para completar la instalación. + Hostname of proxy server + Nombre del host para servidor proxy - Ask again later - Preguntar de nuevo más tarde + KBytes/s + KBytes/s - Restart and update - Reiniciar y actualizar + Limit automatically + Limitar automáticamente - Update manually - Actualizar manualmente + Limit to + Limitar a - Skip this time - Omitir esta vez + Limit to 3/4 of estimated bandwidth + Limitar a 3/4 de la velocidad estimada - Get update - Actualizar + Manually specify proxy + Especificar proxy manualmente - - - OCC::NetworkSettings - Proxy Settings - Configuración del proxy + No limit + Ilimitado - Use system proxy - Usar proxy del sistema + No proxy + Sin proxy - Host - Servidor + Note: proxy settings have no effects for accounts on localhost + Nota: los ajustes de proxy no tienen efecto para cuentas en el sistema local. - Proxy server requires authentication - El servidor proxy requiere autenticación + Password for proxy server + Contraseña para el servidor proxy - Download Bandwidth - Velocidad de descarga + Proxy Settings + Configuración del proxy - Limit to - Limitar a + Proxy server requires authentication + El servidor proxy requiere autenticación - KBytes/s - KBytes/s + SOCKS5 proxy + Proxy SOCKS5 - - Note: proxy settings have no effects for accounts on localhost - Nota: los ajustes de proxy no tienen efecto para cuentas en el sistema local. + + Upload Bandwidth + Velocidad de subida - Manually specify proxy - Especificar proxy manualmente + Use global settings + Usar la configuración global - No proxy - Sin proxy + Use system proxy + Usar proxy del sistema - Use global settings - Usar la configuración global + Username for proxy server + Nombre de usuario para el servidor proxy + + + OCC::NSISUpdater - No limit - Ilimitado + <p>A new version of the %1 Client is available but the updating process failed.</p><p><b>%2</b> has been downloaded. The installed version is %3. If you confirm restart and update, your computer may reboot to complete the installation.</p> + <p>Una nueva versión del Cliente %1 está disponible pero el proceso de actualización ha fallado.</p><p><b>%2</b> se ha descargado. La versión instalada es %3. Si confirmas el reinicio y la actualización, es posible que su ordenador se reinicie para completar la instalación. - Limit to 3/4 of estimated bandwidth - Limitar a 3/4 de la velocidad estimada + <p>A new version of the %1 Client is available.</p><p><b>%2</b> is available for download. The installed version is %3.</p> + <p>Una nueva versión del programa cliente de %1 está disponible.</p><p><b>%2</b> está disponible para descargar. La versión instalada es la %3.</p> - Upload Bandwidth - Velocidad de subida + Ask again later + Preguntar de nuevo más tarde - Limit automatically - Limitar automáticamente + Get update + Actualizar - - Hostname of proxy server - Nombre del host para servidor proxy + + New Version Available + Nueva versión disponible - Username for proxy server - Nombre de usuario para el servidor proxy + Restart and update + Reiniciar y actualizar - Password for proxy server - Contraseña para el servidor proxy + Skip this time + Omitir esta vez - HTTP(S) proxy - Proxy HTTP(S) + Update Failed + La actualización falló - SOCKS5 proxy - Proxy SOCKS5 + Update manually + Actualizar manualmente - + OCC::OCUpdater - Could not check for new updates. - No se puede comprobar si hay actualizaciones. + %1 available. Restart application to start the update. + %1 disponible. Reinicia la aplicación para empezar la actualización. + + + A new update for %1 is about to be installed. The updater may ask for additional privileges during the process. Your computer may reboot to complete the installation. + Está a punto de ser instalada una nueva actualización para %1 . Es posible que el actualizador solicite privilegios adicionales durante el proceso. Es posible que su ordenador se deba reiniciar para completar la instalación. Checking update server … Consultando al servidor de actualizaciones ... - New %1 update ready - La nueva %1 actualización está lista - - - A new update for %1 is about to be installed. The updater may ask for additional privileges during the process. Your computer may reboot to complete the installation. - Está a punto de ser instalada una nueva actualización para %1 . Es posible que el actualizador solicite privilegios adicionales durante el proceso. Es posible que su ordenador se deba reiniciar para completar la instalación. - - - Downloading %1 … - Descargando %1 … + Could not check for new updates. + No se puede comprobar si hay actualizaciones. - %1 available. Restart application to start the update. - %1 disponible. Reinicia la aplicación para empezar la actualización. + Could not download update. Please open %1 to download the update manually. + No se pudo descargar la actualización. Por favor, abra %1 para descargarla manualmente. Could not download update. Please open <a href='%1'>%1</a> to download the update manually. No se puede descargar la actualización. Por favor, abra <a href='%1'>%1</a> para descargar la actualización manualmente. - Could not download update. Please open %1 to download the update manually. - No se pudo descargar la actualización. Por favor, abra %1 para descargarla manualmente. - - - New %1 is available. Please open <a href='%2'>%2</a> to download the update. - La nueva %1 está disponible. Por favor, abra<a href='%2'>%2</a> para descargar la actualización. + Downloading %1 … + Descargando %1 … New %1 is available. Please open %2 to download the update. La nueva %1 está disponible. Por favor, abra %2 para descargar la actualización. - Update status is unknown: Did not check for new updates. - Estado de actualización desconocido: no se buscaron nuevas actualizaciones. + New %1 is available. Please open <a href='%2'>%2</a> to download the update. + La nueva %1 está disponible. Por favor, abra<a href='%2'>%2</a> para descargar la actualización. + + + New %1 update ready + La nueva %1 actualización está lista No updates available. Your installation is at the latest version. @@ -2930,90 +2943,166 @@ Nótese que usar cualquier opción de toma de registros a través de línea de c Update Check Comprobar si hay actualizaciones - + + Update status is unknown: Did not check for new updates. + Estado de actualización desconocido: no se buscaron nuevas actualizaciones. + + OCC::OwncloudAdvancedSetupPage - Connect - Conectar + %1 folder "%2" is synced to local folder "%3" + %1 carpeta "%2" está sincronizada con la carpeta local "%3" + + + %1 free space + %1 gets replaced with the size and a matching unit. Example: 3 MB or 5 GB + %1 espacio libre + + + (%1) + (%1) (experimental) (experimental) - Use &virtual files instead of downloading content immediately %1 - Usa &archivos virtuales en vez de descargar el contenido inmediatamente %1 + Connect + Conectar - Virtual files are not supported for Windows partition roots as local folder. Please choose a valid subfolder under drive letter. - Los archivos virtuales no son compatibles con la carpeta raíz de la partición de Windows como carpeta local. Por favor, elija una subcarpeta válida bajo la letra de la unidad. + In Finder's "Locations" sidebar section + En la sección "Ubicaciones" de la barra lateral del Finder - - %1 folder "%2" is synced to local folder "%3" - %1 carpeta "%2" está sincronizada con la carpeta local "%3" + + Local Sync Folder + Carpeta local de sincronización Sync the folder "%1" Sincronizar la carpeta "%1" - Warning: The local folder is not empty. Pick a resolution! - Advertencia: La carpeta local no está vacía. ¡Elija una solución! + There isn't enough free space in the local folder! + ¡No hay suficiente espacio libre en la carpeta local! - %1 free space - %1 gets replaced with the size and a matching unit. Example: 3 MB or 5 GB - %1 espacio libre + Use &virtual files instead of downloading content immediately %1 + Usa &archivos virtuales en vez de descargar el contenido inmediatamente %1 Virtual files are not supported at the selected location Los archivos virtuales no están soportados en la ubicación seleccionada - Local Sync Folder - Carpeta local de sincronización + Virtual files are not supported for Windows partition roots as local folder. Please choose a valid subfolder under drive letter. + Los archivos virtuales no son compatibles con la carpeta raíz de la partición de Windows como carpeta local. Por favor, elija una subcarpeta válida bajo la letra de la unidad. - (%1) - (%1) + Warning: The local folder is not empty. Pick a resolution! + Advertencia: La carpeta local no está vacía. ¡Elija una solución! + + + OCC::OwncloudConnectionMethodDialog - There isn't enough free space in the local folder! - ¡No hay suficiente espacio libre en la carpeta local! + <html><head/><body><p>Failed to connect to the secure server address <em>%1</em>. How do you wish to proceed?</p></body></html> + <html><head/><body><p>Fallo al conectar con la dirección del servidor seguro <em>%1</em>. ¿Cómo desea proceder?</p></body></html> + + + <html><head/><body><p>Failed to connect to the secure server address specified. How do you wish to proceed?</p></body></html> + <html><head/><body><p>Fallo al conectar con la dirección del servidor seguro especificado. ¿Cómo desea proceder?</p></body></html> - In Finder's "Locations" sidebar section - En la sección "Ubicaciones" de la barra lateral del Finder + Configure client-side TLS certificate + Configurar certificado TLS del cliente - - - OCC::OwncloudConnectionMethodDialog Connection failed La conexión ha fallado - <html><head/><body><p>Failed to connect to the secure server address specified. How do you wish to proceed?</p></body></html> - <html><head/><body><p>Fallo al conectar con la dirección del servidor seguro especificado. ¿Cómo desea proceder?</p></body></html> + Retry unencrypted over HTTP (insecure) + Reintentar sin cifrado sobre HTTP (inseguro) Select a different URL Seleccionar una URL diferente + + + OCC::ownCloudGui - Retry unencrypted over HTTP (insecure) - Reintentar sin cifrado sobre HTTP (inseguro) + %1 (%2, %3) + %1 (%2, %3) + + + %1: %2 + Example text: "Nextcloud: Syncing 25MB (3 minutes left)" (%1 is the folder name to be synced, %2 a status message for that folder) + %1:%2 - Configure client-side TLS certificate - Configurar certificado TLS del cliente + Account %1: %2 + Cuenta %1: %2 - <html><head/><body><p>Failed to connect to the secure server address <em>%1</em>. How do you wish to proceed?</p></body></html> - <html><head/><body><p>Fallo al conectar con la dirección del servidor seguro <em>%1</em>. ¿Cómo desea proceder?</p></body></html> + Account synchronization is disabled + La sincronización está deshabilitada - + + Checking for changes in local "%1" + Buscando cambios en carpeta local "%1" + + + Checking for changes in remote "%1" + Buscando cambios en carpeta remota "%1" + + + Disconnected from %1 + Desconectado de %1 + + + Disconnected from accounts: + Desconectado desde cuentas: + + + Please sign in + Por favor, inicie sesión + + + Terms of service + Términos de servicio + + + The server on account %1 runs an unsupported version %2. Using this client with unsupported server versions is untested and potentially dangerous. Proceed at your own risk. + El servidor en la cuenta %1 usa una versión no soportada %2. El uso de este cliente con versiones de servidor no soportadas no ha sido probado y es potencialmente peligroso. Continúa bajo tu propio riesgo. + + + There are no sync folders configured. + No hay carpetas configuradas para sincronizar. + + + Unsupported Server Version + Versión del servidor no soportada + + + Your account %1 requires you to accept the terms of service of your server. You will be redirected to %2 to acknowledge that you have read it and agrees with it. + Su cuenta %1 requiere que acepte los términos de servicio de su servidor. Será redirigido a %2 para indicar que los ha leído y está de acuerdo. + + + macOS VFS for %1: A problem was encountered. + macOS VFS para %1: Se ha encontrado un problema. + + + macOS VFS for %1: Last sync was successful. + macOS VFS para %1: la última sincronización fue exitosa. + + + macOS VFS for %1: Sync is running. + macOS VFS para %1: Sincronización en progreso. + + OCC::OwncloudHttpCredsPage @@ -3038,137 +3127,133 @@ Nótese que usar cualquier opción de toma de registros a través de línea de c OCC::OwncloudSetupPage - - The link to your %1 web interface when you open it in the browser. - %1 will be replaced with the application name - El link a su interfaz web %1 cuando la abra en el navegador. - &Next > &Siguiente > + Could not load certificate. Maybe wrong password? + No se ha podido guardar el certificado. ¿Quizás la contraseña sea incorrecta? + + Server address does not seem to be valid La dirección del servidor no es válida - Could not load certificate. Maybe wrong password? - No se ha podido guardar el certificado. ¿Quizás la contraseña sea incorrecta? + The link to your %1 web interface when you open it in the browser. + %1 will be replaced with the application name + El link a su interfaz web %1 cuando la abra en el navegador. - + OCC::OwncloudSetupWizard + <font color="green"><b>File Provider-based account %1 successfully created!</b></font> + <font color="green"><b>¡La cuenta basada en proveedor de archivos %1 fue creada exitosamente! </b></font> + + + <font color="green"><b>Local sync folder %1 successfully created!</b></font> + <font color="green"><b>Carpeta de sincronización local %1 creada con éxito</b></font> + + <font color="green">Successfully connected to %1: %2 version %3 (%4)</font><br/><br/> <font color="green">Conectado con éxito a %1: versión %2 %3 (%4)</font><br/><br/> - Failed to connect to %1 at %2:<br/>%3 - Fallo al conectar %1 a %2:<br/>%3 + <p><font color="red">Remote folder creation failed probably because the provided credentials are wrong.</font><br/>Please go back and check your credentials.</p> + <p><font color="red">La creación de la carpeta remota ha fallado, probablemente porque las credenciales proporcionadas son incorrectas.</font><br/>Por favor, vuelva atrás y compruebe sus credenciales.</p> - Timeout while trying to connect to %1 at %2. - Tiempo de espera agotado mientras se intentaba conectar a %1 en %2 + A sync connection from %1 to remote directory %2 was set up. + Se ha configarado una conexión de sincronización desde %1 al directorio remoto %2 Access forbidden by server. To verify that you have proper access, <a href="%1">click here</a> to access the service with your browser. Acceso denegado por el servidor. Para verificar que tiene acceso, <a href="%1">haga clic aquí</a> para acceder al servicio desde el navegador. - Invalid URL - URL no válida. + Cannot remove and back up the folder because the folder or a file in it is open in another program. Please close the folder or file and hit retry or cancel the setup. + No se pudo eliminar y restaurar la carpeta porque ella o un archivo dentro de ella está abierto por otro programa. Por favor, cierre la carpeta o el archivo y pulsa en reintentar o cancelar la instalación. - Trying to connect to %1 at %2 … - Intentando conectar a %1 desde %2 ... + Connection to %1 could not be established. Please check again. + No se ha podido establecer la conexión con %1. Por favor, compruébelo de nuevo. - The authenticated request to the server was redirected to "%1". The URL is bad, the server is misconfigured. - La petición autenticada al servidor ha sido redirigida a "%1". La URL es errónea, el servidor está mal configurado. + Could not create local folder %1 + No se ha podido crear la carpeta local %1 - There was an invalid response to an authenticated WebDAV request - Ha habido una respuesta no válida a una solicitud autenticada de WebDAV + Creating local sync folder %1 … + Creando carpeta de sincronización local %1 ... - Local sync folder %1 already exists, setting it up for sync.<br/><br/> - La carpeta de sincronización local %1 ya existe, configurándola para la sincronización.<br/><br/> + Error: %1 + Error: %1 - Creating local sync folder %1 … - Creando carpeta de sincronización local %1 ... + Failed to connect to %1 at %2:<br/>%3 + Fallo al conectar %1 a %2:<br/>%3 - OK - OK + Folder rename failed + Error al renombrar la carpeta - failed. - ha fallado. + Invalid URL + URL no válida. - Could not create local folder %1 - No se ha podido crear la carpeta local %1 + Local sync folder %1 already exists, setting it up for sync.<br/><br/> + La carpeta de sincronización local %1 ya existe, configurándola para la sincronización.<br/><br/> No remote folder specified! ¡No se ha especificado ninguna carpeta remota! - Error: %1 - Error: %1 - - - creating folder on Nextcloud: %1 - Creando carpeta en Nextcloud: %1 + OK + OK Remote folder %1 created successfully. Carpeta remota %1 creado correctamente. - The remote folder %1 already exists. Connecting it for syncing. - La carpeta remota %1 ya existe. Conectándola para sincronizacion. + Remote folder %1 creation failed with error <tt>%2</tt>. + Creación %1 de carpeta remota ha fallado con el error <tt>%2</tt>. - The folder creation resulted in HTTP error code %1 - La creación de la carpeta ha producido el código de error HTTP %1 + Successfully connected to %1! + ¡Conectado con éxito a %1! - The remote folder creation failed because the provided credentials are wrong!<br/>Please go back and check your credentials.</p> - ¡La creación de la carpeta remota ha fallado debido a que las credenciales proporcionadas son incorrectas!<br/>Por favor, vuelva atrás y compruebe sus credenciales</p> + The authenticated request to the server was redirected to "%1". The URL is bad, the server is misconfigured. + La petición autenticada al servidor ha sido redirigida a "%1". La URL es errónea, el servidor está mal configurado. - <p><font color="red">Remote folder creation failed probably because the provided credentials are wrong.</font><br/>Please go back and check your credentials.</p> - <p><font color="red">La creación de la carpeta remota ha fallado, probablemente porque las credenciales proporcionadas son incorrectas.</font><br/>Por favor, vuelva atrás y compruebe sus credenciales.</p> - - - Remote folder %1 creation failed with error <tt>%2</tt>. - Creación %1 de carpeta remota ha fallado con el error <tt>%2</tt>. - - - A sync connection from %1 to remote directory %2 was set up. - Se ha configarado una conexión de sincronización desde %1 al directorio remoto %2 + The folder creation resulted in HTTP error code %1 + La creación de la carpeta ha producido el código de error HTTP %1 - Successfully connected to %1! - ¡Conectado con éxito a %1! + The remote folder %1 already exists. Connecting it for syncing. + La carpeta remota %1 ya existe. Conectándola para sincronizacion. - Connection to %1 could not be established. Please check again. - No se ha podido establecer la conexión con %1. Por favor, compruébelo de nuevo. + The remote folder creation failed because the provided credentials are wrong!<br/>Please go back and check your credentials.</p> + ¡La creación de la carpeta remota ha fallado debido a que las credenciales proporcionadas son incorrectas!<br/>Por favor, vuelva atrás y compruebe sus credenciales</p> - Folder rename failed - Error al renombrar la carpeta + There was an invalid response to an authenticated WebDAV request + Ha habido una respuesta no válida a una solicitud autenticada de WebDAV - Cannot remove and back up the folder because the folder or a file in it is open in another program. Please close the folder or file and hit retry or cancel the setup. - No se pudo eliminar y restaurar la carpeta porque ella o un archivo dentro de ella está abierto por otro programa. Por favor, cierre la carpeta o el archivo y pulsa en reintentar o cancelar la instalación. + Timeout while trying to connect to %1 at %2. + Tiempo de espera agotado mientras se intentaba conectar a %1 en %2 - <font color="green"><b>File Provider-based account %1 successfully created!</b></font> - <font color="green"><b>¡La cuenta basada en proveedor de archivos %1 fue creada exitosamente! </b></font> + Trying to connect to %1 at %2 … + Intentando conectar a %1 desde %2 ... Virtual files enabled @@ -3179,20 +3264,20 @@ Nótese que usar cualquier opción de toma de registros a través de línea de c Su cuenta se encuentra ahora sincronizando con soporte a archivos virtuales. Esto significa que, por defecto, todos sus archivos están en modo solo en línea, y se descargarán bajo demanda cuando los abra. Puede conseguir sus archivos bajo la sección <b>Ubicaciones</b> de la barra lateral del Finder. - <font color="green"><b>Local sync folder %1 successfully created!</b></font> - <font color="green"><b>Carpeta de sincronización local %1 creada con éxito</b></font> + creating folder on Nextcloud: %1 + Creando carpeta en Nextcloud: %1 - + + failed. + ha fallado. + + OCC::OwncloudWizard Add %1 account Añadir %1 cuenta - - Skip folders configuration - Omitir la configuración de carpetas - Cancel Cancelar @@ -3202,6 +3287,18 @@ Nótese que usar cualquier opción de toma de registros a través de línea de c ¿Activar característica experimental? + Enable experimental placeholder mode + Activar modo experimental de marcador de posición + + + Skip folders configuration + Omitir la configuración de carpetas + + + Stay safe + Mantente a salvo + + When the "virtual files" mode is enabled no files will be downloaded initially. Instead, a tiny "%1" file will be created for each file that exists on the server. The contents can be downloaded by running these files or by using their context menu. The virtual files mode is mutually exclusive with selective sync. Currently unselected folders will be translated to online-only folders and your selective sync settings will be reset. @@ -3217,15 +3314,7 @@ Cambiar a este modo interrumpirá cualquier sincronización en proceso. Esta es un modo nuevo y experimental. Si decides usarlo, por favor, informa de cualquier tipo de problema que pueda surgir. - - Enable experimental placeholder mode - Activar modo experimental de marcador de posición - - - Stay safe - Mantente a salvo - - + OCC::PasswordInputDialog @@ -3247,169 +3336,169 @@ Esta es un modo nuevo y experimental. Si decides usarlo, por favor, informa de c OCC::ProcessDirectoryJob - Symbolic links are not supported in syncing. - Los enlaces simbólicos no están soportados en la sincronización. - - - File is listed on the ignore list. - El archivo está en la lista de ignorados. + %1 name containing the character "%2" is not supported on this file system. + folder or file impossible to sync due to an invalid name, placeholders will be file or folder and the invalid character + El nombre %1 que contiene el carácter "%2" no está soportado en este sistema de archivos. - File names ending with a period are not supported on this file system. - Los nombres de archivo que terminan con un punto no son compatibles con este sistema de archivos. + %1 name contains at least one invalid character + El nombre %1 contiene al menos un carácter inválido - Filename contains trailing spaces. - El nombre del archivo contiene espacios finales. + %1 name is a reserved name on this file system. + El nombre %1 es un nombre reservado en este sistema de archivos. Cannot be renamed or uploaded. No puede ser renombrado o subido. - Folder - name of folder entity to use when warning about invalid name - Carpeta + Cannot modify encrypted item because the selected certificate is not valid. + No se puede modificar el item cifrado ya que el certificado seleccionado no es válido. - File - name of folder entity to use when warning about invalid name - Archivo + Cannot sync due to invalid modification time + No se puede sincronizar debido a una hora de modificación no válida - %1 name containing the character "%2" is not supported on this file system. - folder or file impossible to sync due to an invalid name, placeholders will be file or folder and the invalid character - El nombre %1 que contiene el carácter "%2" no está soportado en este sistema de archivos. + Case Clash Conflict: Server file downloaded and renamed to avoid clash. + Conflicto de capitalización: Se descargó el archivo del servidor y se renombró para evitar el conflicto. - Filename contains leading spaces. - El nombre del archivo contiene espacios iniciales. + Conflict: Server version downloaded, local copy renamed and not uploaded. + Conflicto: Versión del servidor descargada, la copia local ha sido renombrada pero no se ha podido subir. - %1 name contains at least one invalid character - El nombre %1 contiene al menos un carácter inválido + Could not upload file, because it is open in "%1". + No es posible subir el archivo, porque está abierto en "%1". - %1 name is a reserved name on this file system. - El nombre %1 es un nombre reservado en este sistema de archivos. + Error while deleting file record %1 from the database + Error mientras se borraba el registro de archivo %1 de la base de datos - Filename contains leading and trailing spaces. - El nombre del archivo contiene espacios iniciales y finales. + Error while reading the database + Error mientras se leía la base de datos - Filename is too long. - El nombre del archivo es demasiado largo. + File + name of folder entity to use when warning about invalid name + Archivo - File/Folder is ignored because it's hidden. - El archivo o carpeta es ignorado porque está oculto. + File has extension reserved for virtual files. + El archivo tiene una extensión reservada para archivos virtuales. - Stat failed. - Stat ha fallado. + File is listed on the ignore list. + El archivo está en la lista de ignorados. - Conflict: Server version downloaded, local copy renamed and not uploaded. - Conflicto: Versión del servidor descargada, la copia local ha sido renombrada pero no se ha podido subir. + File names ending with a period are not supported on this file system. + Los nombres de archivo que terminan con un punto no son compatibles con este sistema de archivos. - Case Clash Conflict: Server file downloaded and renamed to avoid clash. - Conflicto de capitalización: Se descargó el archivo del servidor y se renombró para evitar el conflicto. + File/Folder is ignored because it's hidden. + El archivo o carpeta es ignorado porque está oculto. - The filename cannot be encoded on your file system. - El nombre de archivo no se puede codificar en tu sistema de archivos. + Filename contains leading and trailing spaces. + El nombre del archivo contiene espacios iniciales y finales. - The filename is blacklisted on the server. - El nombre del archivo está prohibido en el servidor. + Filename contains leading spaces. + El nombre del archivo contiene espacios iniciales. - Reason: the entire filename is forbidden. - Motivo: el nombre de archivo completo no está permitido. + Filename contains trailing spaces. + El nombre del archivo contiene espacios finales. - Reason: the filename has a forbidden base name (filename start). - Motivo: el nombre de archivo tiene un nombre base (inicio del nombre del archivo) no permitido. + Filename is too long. + El nombre del archivo es demasiado largo. - Reason: the file has a forbidden extension (.%1). - Motivo: el archivo tiene una extensión no permitida (.%1). + Folder + name of folder entity to use when warning about invalid name + Carpeta - Reason: the filename contains a forbidden character (%1). - Motivo: el nombre del archivo contiene un carácter no permitido (%1). + Ignored because of the "choose what to sync" blacklist + Ignorado porque se encuentra en la lista negra de «elija qué va a sincronizar» - File has extension reserved for virtual files. - El archivo tiene una extensión reservada para archivos virtuales. + Moved to invalid target, restoring + Movido a un lugar no válido, restaurando - size - tamaño + Not allowed because you don't have permission to add files in that folder + No permitido porque no tienes permiso para añadir archivos a esa carpeta. - permission - permisos + Not allowed because you don't have permission to add subfolders to that folder + No permitido porque no tienes permiso para añadir subcarpetas a esa carpeta. - file id - identificador de archivo + Not allowed to remove, restoring + No está permitido borrar, restaurando - Server reported no %1 - El servidor informó de no %1 + Not allowed to upload this file because it is read-only on the server, restoring + No está permitido subir este archivo porque es de solo lectura en el servidor, restaurando. - Cannot sync due to invalid modification time - No se puede sincronizar debido a una hora de modificación no válida + Reason: the entire filename is forbidden. + Motivo: el nombre de archivo completo no está permitido. - Could not upload file, because it is open in "%1". - No es posible subir el archivo, porque está abierto en "%1". + Reason: the file has a forbidden extension (.%1). + Motivo: el archivo tiene una extensión no permitida (.%1). - Error while deleting file record %1 from the database - Error mientras se borraba el registro de archivo %1 de la base de datos + Reason: the filename contains a forbidden character (%1). + Motivo: el nombre del archivo contiene un carácter no permitido (%1). - Moved to invalid target, restoring - Movido a un lugar no válido, restaurando + Reason: the filename has a forbidden base name (filename start). + Motivo: el nombre de archivo tiene un nombre base (inicio del nombre del archivo) no permitido. - Cannot modify encrypted item because the selected certificate is not valid. - No se puede modificar el item cifrado ya que el certificado seleccionado no es válido. + Server replied with an error while reading directory "%1" : %2 + El servidor contestó con un error al leer el directorio "%1" : %2 + + + Server reported no %1 + El servidor informó de no %1 - Ignored because of the "choose what to sync" blacklist - Ignorado porque se encuentra en la lista negra de «elija qué va a sincronizar» + Stat failed. + Stat ha fallado. - Not allowed because you don't have permission to add subfolders to that folder - No permitido porque no tienes permiso para añadir subcarpetas a esa carpeta. + Symbolic links are not supported in syncing. + Los enlaces simbólicos no están soportados en la sincronización. - Not allowed because you don't have permission to add files in that folder - No permitido porque no tienes permiso para añadir archivos a esa carpeta. + The filename cannot be encoded on your file system. + El nombre de archivo no se puede codificar en tu sistema de archivos. - Not allowed to upload this file because it is read-only on the server, restoring - No está permitido subir este archivo porque es de solo lectura en el servidor, restaurando. + The filename is blacklisted on the server. + El nombre del archivo está prohibido en el servidor. - Not allowed to remove, restoring - No está permitido borrar, restaurando + file id + identificador de archivo - Error while reading the database - Error mientras se leía la base de datos + permission + permisos - Server replied with an error while reading directory "%1" : %2 - El servidor contestó con un error al leer el directorio "%1" : %2 + size + tamaño - + OCC::PropagateDirectory @@ -3420,14 +3509,6 @@ Esta es un modo nuevo y experimental. Si decides usarlo, por favor, informa de c Error updating metadata due to invalid modification time Error al actualizar los metadatos debido a una hora de modificación no válida - - The folder %1 cannot be made read-only: %2 - La carpeta %1 no se puede hacer de sólo lectura: %2 - - - unknown exception - excepción inválida - Error updating metadata: %1 Error al actualizar los metadatos: %1 @@ -3436,66 +3517,74 @@ Esta es un modo nuevo y experimental. Si decides usarlo, por favor, informa de c File is currently in use El archivo se encuentra en uso - + + The folder %1 cannot be made read-only: %2 + La carpeta %1 no se puede hacer de sólo lectura: %2 + + + unknown exception + excepción inválida + + OCC::PropagateDownloadFile - Could not get file %1 from local DB - No se pudo obtener el archivo %1 de la DB local + Could not delete file record %1 from local DB + No fue posible borrar el registro del archivo %1 de la base de datos local - File %1 cannot be downloaded because encryption information is missing. - El archivo %1 no puede ser descargado porque falta la información de cifrado, + Could not get file %1 from local DB + No se pudo obtener el archivo %1 de la DB local - Could not delete file record %1 from local DB - No fue posible borrar el registro del archivo %1 de la base de datos local + Error updating metadata: %1 + Error al actualizar los metadatos: %1 File %1 can not be downloaded because of a local file name clash! ¡El archivo %1 no se puede descargar a causa de un conflicto con el nombre de un archivo local! - The download would reduce free local disk space below the limit - La descarga reducirá el espacio libre local por debajo del límite. + File %1 cannot be downloaded because encryption information is missing. + El archivo %1 no puede ser descargado porque falta la información de cifrado, - Free space on disk is less than %1 - El espacio libre en el disco es inferior a %1 + File %1 downloaded but it resulted in a local file name clash! + ¡El archivo %1 se descargó pero resultó en un conflicto con el nombre de un archivo local! - File was deleted from server - Se ha eliminado el archivo del servidor + File %1 has invalid modified time reported by server. Do not save it. + El servidor informa que el archivo %1 tiene una hora de modificación no válida. No lo guardes. - The file could not be downloaded completely. - No se ha podido descargar el archivo completamente. + File has changed since discovery + El archivo ha cambiado desde que fue descubierto - - The downloaded file is empty, but the server said it should have been %1. - El archivo descargado está vacío, aunque el servidor dijo que debía ocupar %1. + + File was deleted from server + Se ha eliminado el archivo del servidor - File %1 has invalid modified time reported by server. Do not save it. - El servidor informa que el archivo %1 tiene una hora de modificación no válida. No lo guardes. + Free space on disk is less than %1 + El espacio libre en el disco es inferior a %1 - File %1 downloaded but it resulted in a local file name clash! - ¡El archivo %1 se descargó pero resultó en un conflicto con el nombre de un archivo local! + The download would reduce free local disk space below the limit + La descarga reducirá el espacio libre local por debajo del límite. - Error updating metadata: %1 - Error al actualizar los metadatos: %1 + The downloaded file is empty, but the server said it should have been %1. + El archivo descargado está vacío, aunque el servidor dijo que debía ocupar %1. The file %1 is currently in use El archivo %1 se encuentra en uso - File has changed since discovery - El archivo ha cambiado desde que fue descubierto + The file could not be downloaded completely. + No se ha podido descargar el archivo completamente. - + OCC::PropagateItemJob @@ -3510,37 +3599,41 @@ Esta es un modo nuevo y experimental. Si decides usarlo, por favor, informa de c OCC::PropagateLocalMkdir - could not delete file %1, error: %2 - no se ha podido borrar el archivo %1, error: %2 + Could not create folder %1 + No se pudo crear la carpeta %1 + + + Error updating metadata: %1 + Error al actualizar los metadatos: %1 Folder %1 cannot be created because of a local file or folder name clash! ¡La carpeta %1 no se pudo crear a causa de un conflicto con el nombre de un archivo o carpeta local! - Could not create folder %1 - No se pudo crear la carpeta %1 + The file %1 is currently in use + El archivo %1 se encuentra en uso - + The folder %1 cannot be made read-only: %2 La carpeta %1 no se puede hacer de sólo lectura: %2 - unknown exception - excepción inválida - - - Error updating metadata: %1 - Error al actualizar los metadatos: %1 + could not delete file %1, error: %2 + no se ha podido borrar el archivo %1, error: %2 - The file %1 is currently in use - El archivo %1 se encuentra en uso + unknown exception + excepción inválida - + OCC::PropagateLocalRemove + Could not delete file record %1 from local DB + No fue posible borrar el registro del archivo %1 de la base de datos local + + Could not remove %1 because of a local file name clash No se ha podido eliminar %1 por causa de un conflicto con el nombre de un archivo local @@ -3548,22 +3641,14 @@ Esta es un modo nuevo y experimental. Si decides usarlo, por favor, informa de c Temporary error when removing local item removed from server. Error temporal al quitar ítem local que fue eliminado del servidor. - - Could not delete file record %1 from local DB - No fue posible borrar el registro del archivo %1 de la base de datos local - - + OCC::PropagateLocalRename - Folder %1 cannot be renamed because of a local file or folder name clash! - ¡La carpeta %1 no puede ser renombrada ya que un archivo o carpeta local causa un conflicto de nombre! - - - File %1 downloaded but it resulted in a local file name clash! - ¡El archivo %1 se descargó pero resultó en un conflicto con el nombre de un archivo local! + Could not delete file record %1 from local DB + No fue posible borrar el registro del archivo %1 de la base de datos local - + Could not get file %1 from local DB No se pudo obtener el archivo %1 de la DB local @@ -3575,10 +3660,6 @@ Esta es un modo nuevo y experimental. Si decides usarlo, por favor, informa de c Error updating metadata: %1 Error al actualizar los metadatos: %1 - - The file %1 is currently in use - El archivo %1 se encuentra en uso - Failed to propagate directory rename in hierarchy Fallo al propagar el renombrado de carpeta en la jerarquía @@ -3588,21 +3669,29 @@ Esta es un modo nuevo y experimental. Si decides usarlo, por favor, informa de c Fallo al renombrar el archivo - Could not delete file record %1 from local DB - No fue posible borrar el registro del archivo %1 de la base de datos local + File %1 downloaded but it resulted in a local file name clash! + ¡El archivo %1 se descargó pero resultó en un conflicto con el nombre de un archivo local! - - - OCC::PropagateRemoteDelete - Wrong HTTP code returned by server. Expected 204, but received "%1 %2". - El código HTTP devuelto por el servidor es erróneo. Se esperaba 204, pero se recibió "%1 %2". + Folder %1 cannot be renamed because of a local file or folder name clash! + ¡La carpeta %1 no puede ser renombrada ya que un archivo o carpeta local causa un conflicto de nombre! + + The file %1 is currently in use + El archivo %1 se encuentra en uso + + + + OCC::PropagateRemoteDelete Could not delete file record %1 from local DB No fue posible borrar el registro del archivo %1 de la base de datos local - + + Wrong HTTP code returned by server. Expected 204, but received "%1 %2". + El código HTTP devuelto por el servidor es erróneo. Se esperaba 204, pero se recibió "%1 %2". + + OCC::PropagateRemoteDeleteEncryptedRootFolder @@ -3613,33 +3702,49 @@ Esta es un modo nuevo y experimental. Si decides usarlo, por favor, informa de c OCC::PropagateRemoteMkdir - Wrong HTTP code returned by server. Expected 201, but received "%1 %2". - El código HTTP devuelto por el servidor es erróneo. Se esperaba 201, pero se recibió "%1 %2". + Error writing metadata to the database: %1 + Error al escribir los metadatos en la base de datos: %1 Failed to encrypt a folder %1 Fallo al cifrar una carpeta %1 - - Error writing metadata to the database: %1 - Error al escribir los metadatos en la base de datos: %1 - The file %1 is currently in use El archivo %1 se encuentra en uso - + + Wrong HTTP code returned by server. Expected 201, but received "%1 %2". + El código HTTP devuelto por el servidor es erróneo. Se esperaba 201, pero se recibió "%1 %2". + + OCC::PropagateRemoteMove + + Could not delete file record %1 from local DB + No fue posible borrar el registro del archivo %1 de la base de datos local + + + Could not get file %1 from local DB + No se pudo obtener el archivo %1 de la DB local + Could not rename %1 to %2, error: %3 No se puede renombrar %1 a %2, error: %3 + + Error setting pin state + Error al configurar el estado fijado + Error updating metadata: %1 Error al actualizar los metadatos: %1 + Error writing metadata to the database + Error al escribir los metadatos en la base de datos + + The file %1 is currently in use El archivo %1 se encuentra en uso @@ -3647,25 +3752,21 @@ Esta es un modo nuevo y experimental. Si decides usarlo, por favor, informa de c Wrong HTTP code returned by server. Expected 201, but received "%1 %2". El código HTTP devuelto por el servidor es erróneo. Esperado 201, pero recibido "%1 %2". + + + OCC::PropagateUploadFileCommon - Could not get file %1 from local DB - No se pudo obtener el archivo %1 de la DB local - - - Could not delete file record %1 from local DB - No fue posible borrar el registro del archivo %1 de la base de datos local + Error updating metadata: %1 + Error al actualizar los metadatos: %1 - Error setting pin state - Error al configurar el estado fijado + Failed to unlock encrypted folder. + Fallo al desbloquear la carpeta cifrada. - Error writing metadata to the database - Error al escribir los metadatos en la base de datos + Failed to upload encrypted file. + Fallo al subir el archivo cifrado. - - - OCC::PropagateUploadFileCommon File %1 cannot be uploaded because another file with the same name, differing only in case, exists El archivo %1 no se puede subir porque ya existe otro con el mismo nombre. Puede que sólo haya diferencias de mayúsculas/minúsculas @@ -3675,71 +3776,63 @@ Esta es un modo nuevo y experimental. Si decides usarlo, por favor, informa de c El archivo %1 tiene una hora de modificación no válida. No subir al servidor. - Local file changed during syncing. It will be resumed. - Un archivo local ha cambiado durante la sincronización. Se reanudará. + File Removed (start upload) %1 + Archivo eliminado (comenzar subida) %1 - + Local file changed during sync. Un archivo local ha sido modificado durante la sincronización. - Failed to unlock encrypted folder. - Fallo al desbloquear la carpeta cifrada. - - - Unable to upload an item with invalid characters - No se puede subir un elemento con caracteres no válidos - - - Error updating metadata: %1 - Error al actualizar los metadatos: %1 + Local file changed during syncing. It will be resumed. + Un archivo local ha cambiado durante la sincronización. Se reanudará. The file %1 is currently in use El archivo %1 se encuentra en uso - Upload of %1 exceeds the quota for the folder - La subida %1 excede el límite de tamaño de la carpeta - - - Failed to upload encrypted file. - Fallo al subir el archivo cifrado. + Unable to upload an item with invalid characters + No se puede subir un elemento con caracteres no válidos - File Removed (start upload) %1 - Archivo eliminado (comenzar subida) %1 + Upload of %1 exceeds the quota for the folder + La subida %1 excede el límite de tamaño de la carpeta - + OCC::PropagateUploadFileNG - - The local file was removed during sync. - El archivo local ha sido eliminado durante la sincronización. - Local file changed during sync. Un archivo local fue modificado durante la sincronización. - Poll URL missing - Falta la URL de la encuesta + Missing ETag from server + Perdido ETag del servidor + + + Missing File ID from server + ID perdido del archivo del servidor - Unexpected return code from server (%1) - Respuesta inesperada del servidor (%1) + Poll URL missing + Falta la URL de la encuesta - Missing File ID from server - ID perdido del archivo del servidor + The local file was removed during sync. + El archivo local ha sido eliminado durante la sincronización. - Missing ETag from server - Perdido ETag del servidor + Unexpected return code from server (%1) + Respuesta inesperada del servidor (%1) - + OCC::PropagateUploadFileV1 + + Local file changed during sync. + Un archivo local ha sido modificado durante la sincronización. + Poll URL missing Falta la URL de la encuesta @@ -3748,10 +3841,6 @@ Esta es un modo nuevo y experimental. Si decides usarlo, por favor, informa de c The local file was removed during sync. El archivo local ha sido eliminado durante la sincronización. - - Local file changed during sync. - Un archivo local ha sido modificado durante la sincronización. - The server did not acknowledge the last chunk. (No e-tag was present) El servidor no ha reconocido la última parte. (No había una e-tag presente) @@ -3760,13 +3849,13 @@ Esta es un modo nuevo y experimental. Si decides usarlo, por favor, informa de c OCC::ProxyAuthDialog + Password: + Contraseña: + + Proxy authentication required Autenticación de proxy necesaria - - Username: - Nombre de usuario: - Proxy: Proxy: @@ -3776,10 +3865,10 @@ Esta es un modo nuevo y experimental. Si decides usarlo, por favor, informa de c El servidor de proxy necesita de un usuario y contraseña. - Password: - Contraseña: + Username: + Nombre de usuario: - + OCC::SelectiveSyncDialog @@ -3790,30 +3879,30 @@ Esta es un modo nuevo y experimental. Si decides usarlo, por favor, informa de c OCC::SelectiveSyncWidget - Loading … - Cargando ... + An error occurred while loading the list of sub folders. + Se ha producido un error al cargar la lista de carpetas. - + Deselect remote folders you do not wish to synchronize. Deseleccione las carpetas remotas que no desea sincronizar. - Name - Nombre + Loading … + Cargando ... - Size - Tamaño + Name + Nombre No subfolders currently on the server. No hay subcarpetas actualmente en el servidor. - An error occurred while loading the list of sub folders. - Se ha producido un error al cargar la lista de carpetas. + Size + Tamaño - + OCC::ServerNotificationHandler @@ -3823,16 +3912,16 @@ Esta es un modo nuevo y experimental. Si decides usarlo, por favor, informa de c OCC::SettingsDialog - - Settings - Ajustes - %1 Settings This name refers to the application name e.g Nextcloud %1 Configuración + Account + Cuenta + + General General @@ -3841,10 +3930,30 @@ Esta es un modo nuevo y experimental. Si decides usarlo, por favor, informa de c Red - Account - Cuenta - - + Settings + Ajustes + + + + OCC::ShareeModel + + %1 (%2) + sharee (shareWithAdditionalInfo) + %1 (%2) + + + Global search results + Resultados de búsqueda global + + + No results found + No se encontraron resultados + + + Search globally + Buscar globalmente + + OCC::ShareManager @@ -3863,272 +3972,246 @@ Esta es un modo nuevo y experimental. Si decides usarlo, por favor, informa de c 1 día - Today - Hoy - - - Secure file drop link - Enlace para entrega de archivos segura + Could not find local folder for %1 + No se ha podido encontrar una carpeta local para %1 - - Share link - Compartir enlace + + Internal link + Enlace interno Link share Compartición de enlace - - Internal link - Enlace interno - Secure file drop Entrega segura de archivos - Could not find local folder for %1 - No se ha podido encontrar una carpeta local para %1 - - - - OCC::ShareeModel - - Search globally - Buscar globalmente - - - No results found - No se encontraron resultados + Secure file drop link + Enlace para entrega de archivos segura - Global search results - Resultados de búsqueda global + Share link + Compartir enlace - %1 (%2) - sharee (shareWithAdditionalInfo) - %1 (%2) + Today + Hoy - + OCC::SocketApi + + Activity + Actividad + Context menu share Compartir en menú contextual - I shared something with you - He compartido algo contigo + Copy internal link + Copiar enlace interno - Share options - Opciones de compartir + Copy private link to clipboard + Copiar enlace privado al portapapeles - Send private link by email … - Enviar enlace privado por correo electrónico ... + Could not encrypt the following folder: "%1". + +Server replied with error: %2 + No se pudo cifrar la siguiente carpeta: "%1" + +El servidor respondió con el error: %2 - Copy private link to clipboard - Copiar enlace privado al portapapeles + Delete + Eliminar - Failed to encrypt folder at "%1" - No se pudo cifrar carpeta en "%1" + Delete local changes + Borra cambios en local - The account %1 does not have end-to-end encryption configured. Please configure this in your account settings to enable folder encryption. - La cuenta %1 no tiene el cifrado de extremo a extremo configurado. Por favor configure esto en sus opciones de cuenta para habilitar el cifrado de carpetas. + Encrypt + Cifrar + + + Expires in %1 minutes + remaining time before lock expires + + Caduca en %1 minuto + Caduca en %1 minutos + Failed to encrypt folder Fallo al cifrar la carpeta - Could not encrypt the following folder: "%1". - -Server replied with error: %2 - No se pudo cifrar la siguiente carpeta: "%1" - -El servidor respondió con el error: %2 + Failed to encrypt folder at "%1" + No se pudo cifrar carpeta en "%1" Folder encrypted successfully Se cifró la carpeta exitosamente - The following folder was encrypted successfully: "%1" - La siguiente carpeta se cifró con éxito: "%1" - - - Select new location … - Seleccione nueva ubicación … - - - Activity - Actividad + I shared something with you + He compartido algo contigo Leave this share Abandonar este recurso compartido - Resharing this file is not allowed - No está permitido compartir de nuevo + Lock file + Bloquear archivo - Resharing this folder is not allowed - No está permitido compartir de nuevo esta carpeta + Locked by %1 + Bloqueado por %1 - Encrypt - Cifrar + Move and rename … + Mover y renombrar … - Lock file - Bloquear archivo + Move and upload … + Mover y subir … - Unlock file - Desbloquear archivo + Move, rename and upload … + Mover, renombrar y subir … - Locked by %1 - Bloqueado por %1 + Open in browser + Abrir en navegador - - Expires in %1 minutes - remaining time before lock expires - - Caduca en %1 minuto - Caduca en %1 minutos - + + Resharing this file is not allowed + No está permitido compartir de nuevo - Resolve conflict … - Resolver conflicto … + Resharing this folder is not allowed + No está permitido compartir de nuevo esta carpeta - Move and rename … - Mover y renombrar … + Resolve conflict … + Resolver conflicto … - Move, rename and upload … - Mover, renombrar y subir … + Select new location … + Seleccione nueva ubicación … - Delete local changes - Borra cambios en local + Send private link by email … + Enviar enlace privado por correo electrónico ... - Move and upload … - Mover y subir … + Share options + Opciones de compartir - Delete - Eliminar + The account %1 does not have end-to-end encryption configured. Please configure this in your account settings to enable folder encryption. + La cuenta %1 no tiene el cifrado de extremo a extremo configurado. Por favor configure esto en sus opciones de cuenta para habilitar el cifrado de carpetas. - Copy internal link - Copiar enlace interno + The following folder was encrypted successfully: "%1" + La siguiente carpeta se cifró con éxito: "%1" - Open in browser - Abrir en navegador + Unlock file + Desbloquear archivo - + OCC::SslButton + + %1 + %1 + + + %1 (self-signed) + %1 (autofirmado) + <h3>Certificate Details</h3> <h3>Detalles del certificado</h3> - Common Name (CN): - Nombre común (NC): + <h3>Fingerprints</h3> + <h3>Firma</h3> - Subject Alternative Names: - Nombres alternativos del sujeto: + <h3>Issuer</h3> + <h3>Emisor</h3> - Organization (O): - Organización (O): + <p><b>Note:</b> This certificate was manually approved</p> + <p><b>Notificación:</b> Este certificado fue aprobado manualmente</p> - Organizational Unit (OU): - Unidad organizativa (UO): + Certificate information: + Información del certificado: - State/Province: - Estado/Provincia: + Common Name (CN): + Nombre común (NC): Country: País: - Serial: - Nº de serie: + Expires on: + Caduca el: - <h3>Issuer</h3> - <h3>Emisor</h3> + Issued on: + Emitido en: Issuer: Emisor: - Issued on: - Emitido en: - - - Expires on: - Caduca el: + No support for SSL session tickets/identifiers + No admite tickets de sesión/identificadores SSL - <h3>Fingerprints</h3> - <h3>Firma</h3> + Organization (O): + Organización (O): - SHA-256: - SHA-256: + Organizational Unit (OU): + Unidad organizativa (UO): SHA-1: SHA-1: - <p><b>Note:</b> This certificate was manually approved</p> - <p><b>Notificación:</b> Este certificado fue aprobado manualmente</p> + SHA-256: + SHA-256: - %1 (self-signed) - %1 (autofirmado) + Serial: + Nº de serie: - %1 - %1 + Server version: %1 + Versión del servidor: %1 - This connection is encrypted using %1 bit %2. - - Esta conexión está cifrada con %1 bit %2. - - - - Server version: %1 - Versión del servidor: %1 - - - No support for SSL session tickets/identifiers - No admite tickets de sesión/identificadores SSL + State/Province: + Estado/Provincia: - Certificate information: - Información del certificado: + Subject Alternative Names: + Nombres alternativos del sujeto: The connection is not secure @@ -4140,70 +4223,76 @@ El servidor respondió con el error: %2 Esta conexión NO ES SEGURA, pues no está cifrada. - + + This connection is encrypted using %1 bit %2. + + Esta conexión está cifrada con %1 bit %2. + + + OCC::SslErrorDialog - Trust this certificate anyway - Confiar en este certificado de todas maneras + &lt;not specified&gt; + &lt;no especificado&gt; - Untrusted Certificate - Certificado sin verificar + Additional errors: + Errores adicionales: Cannot connect securely to <i>%1</i>: No puedo conectar de forma segura a <i>%1</i>: - Additional errors: - Errores adicionales: - - - with Certificate %1 - con certificado %1 + Country: %1 + País: %1 - &lt;not specified&gt; - &lt;no especificado&gt; + Effective Date: %1 + Fecha de vigencia: %1 - Organization: %1 - Organización: %1 + Expiration Date: %1 + Fecha de caducidad: %1 - Unit: %1 - Unidad: %1 + Fingerprint (SHA-256): <tt>%1</tt> + Huella digital (SHA-256):<tt>%1</tt> - Country: %1 - País: %1 + Fingerprint (SHA-512): <tt>%1</tt> + Huella digital (SHA-512): <tt>%1</tt> Fingerprint (SHA1): <tt>%1</tt> Huella dactilar (SHA1): <tt>%1</tt> - Fingerprint (SHA-256): <tt>%1</tt> - Huella digital (SHA-256):<tt>%1</tt> + Issuer: %1 + Emisor: %1 + + + Organization: %1 + Organización: %1 - Fingerprint (SHA-512): <tt>%1</tt> - Huella digital (SHA-512): <tt>%1</tt> + Trust this certificate anyway + Confiar en este certificado de todas maneras - Effective Date: %1 - Fecha de vigencia: %1 + Unit: %1 + Unidad: %1 - Expiration Date: %1 - Fecha de caducidad: %1 + Untrusted Certificate + Certificado sin verificar - Issuer: %1 - Emisor: %1 + with Certificate %1 + con certificado %1 - + OCC::SyncEngine @@ -4211,25 +4300,16 @@ El servidor respondió con el error: %2 %1 (no realizado por el error anterior, intente de nuevo %2) - Only %1 are available, need at least %2 to start - Placeholders are postfixed with file sizes using Utility::octetsToString() - Solo %1 disponible, se necesita por lo menos %2 para comenzar - - - Unable to open or create the local sync database. Make sure you have write access in the sync folder. - Imposible abrir o crear la BBDD local de sync. Asegurese de que tiene permisos de escritura en la carpeta de sync. - - - Disk space is low: Downloads that would reduce free space below %1 were skipped. - Poco espacio libre en disco: La descarga lo reducirá por debajo del %1, deberia abortar. + Cannot open the sync journal + No es posible abrir el diario de sincronización - - There is insufficient space available on the server for some uploads. - No hay suficiente espacio libre en el servidor para algunas subidas. + + Could not set file record to local DB: %1 + No fue posible establecer el registro del archivo a la base de datos local: %1 - Unresolved conflict. - Conflicto sin resolver. + Could not update file metadata: %1 + No se pudo actualizar los metadatos del archivo: %1 Could not update file: %1 @@ -4240,79 +4320,88 @@ El servidor respondió con el error: %2 No se ha podido actualizar los metadatos del archivo virtual: %1 - Could not update file metadata: %1 - No se pudo actualizar los metadatos del archivo: %1 + Disk space is low: Downloads that would reduce free space below %1 were skipped. + Poco espacio libre en disco: La descarga lo reducirá por debajo del %1, deberia abortar. - Could not set file record to local DB: %1 - No fue posible establecer el registro del archivo a la base de datos local: %1 + Only %1 are available, need at least %2 to start + Placeholders are postfixed with file sizes using Utility::octetsToString() + Solo %1 disponible, se necesita por lo menos %2 para comenzar - Using virtual files with suffix, but suffix is not set - Usando archivos virtuales con sufijo, pero el sufijo no está establecido + There is insufficient space available on the server for some uploads. + No hay suficiente espacio libre en el servidor para algunas subidas. - Unable to read the blacklist from the local database - No se pudo leer la lista de bloqueo de la base de datos local + Unable to open or create the local sync database. Make sure you have write access in the sync folder. + Imposible abrir o crear la BBDD local de sync. Asegurese de que tiene permisos de escritura en la carpeta de sync. Unable to read from the sync journal. No se ha podido leer desde el registro de sincronización - Cannot open the sync journal - No es posible abrir el diario de sincronización + Unable to read the blacklist from the local database + No se pudo leer la lista de bloqueo de la base de datos local - - - OCC::SyncStatusSummary - Offline - No conectado + Unresolved conflict. + Conflicto sin resolver. - All synced! - ¡Todo está sincronizado! + Using virtual files with suffix, but suffix is not set + Usando archivos virtuales con sufijo, pero el sufijo no está establecido + + + OCC::SyncStatusSummary - Some files couldn't be synced! - ¡Algunos archivos no han podido ser sincronizados! + %1 of %2 + %1 de %2 - See below for errors - Comprueba abajo los errores + %1 of %2 · %3 left + %1 de %2 · quedan %3 + + + All synced! + ¡Todo está sincronizado! Checking folder changes Comprobando cambios en la carpeta - Syncing changes - Sincronizando cambios + Offline + No conectado - Sync paused - Sincronización pausada + See below for errors + Comprueba abajo los errores + + + See below for warnings + Comprueba abajo los avisos Some files could not be synced! ¡Algunos archivos no pueden ser sincronizados! - See below for warnings - Comprueba abajo los avisos + Some files couldn't be synced! + ¡Algunos archivos no han podido ser sincronizados! - Syncing - Sincronizando + Sync paused + Sincronización pausada - %1 of %2 · %3 left - %1 de %2 · quedan %3 + Syncing + Sincronizando - %1 of %2 - %1 de %2 + Syncing changes + Sincronizando cambios Syncing file %1 of %2 @@ -4321,58 +4410,54 @@ El servidor respondió con el error: %2 OCC::Systray - - Download - Descargar - Add account Agregar cuenta - Open main dialog - Abrir diálogo principal - - - Pause sync - Pausar sincronización - - - Resume sync - Continuar sincronización + Download + Descargar - Settings - Ajustes + Exit %1 + Salir %1 Help Ayuda - Exit %1 - Salir %1 + Open main dialog + Abrir diálogo principal + + + Pause sync + Pausar sincronización Pause sync for all Pausar sincronización para todo + + Resume sync + Continuar sincronización + Resume sync for all Continuar sincronización a todos - + + Settings + Ajustes + + OCC::TermsOfServiceCheckWidget - Waiting for terms to be accepted - Esperando a que los términos de servicio sean aceptados - - - Polling - Sondeando + Copy Link + Copiar enlace - + Link copied to clipboard. Enlace copiado al portapapeles @@ -4381,10 +4466,14 @@ El servidor respondió con el error: %2 Abrir Navegador - Copy Link - Copiar enlace + Polling + Sondeando - + + Waiting for terms to be accepted + Esperando a que los términos de servicio sean aceptados + + OCC::Theme @@ -4411,35 +4500,35 @@ El servidor respondió con el error: %2 Failed to fetch search providers for '%1'. Error: %2 Fallo al recuperar los proveedores de búsqueda para '%1'. Error: %2 - - Search has failed for '%2'. - La búsqueda ha fallado para '%2'. - Search has failed for '%1'. Error: %2 La búsqueda ha fallado para '%1'. Error: %2 - + + Search has failed for '%2'. + La búsqueda ha fallado para '%2'. + + OCC::UpdateE2eeFolderMetadataJob - Failed to update folder metadata. - Fallo al actualizar los metadatos de la carpeta. + Failed to finalize item. + Fallo al finalizar ítem. - + Failed to unlock encrypted folder. Fallo al desbloquear carpeta cifrada. - Failed to finalize item. - Fallo al finalizar ítem. + Failed to update folder metadata. + Fallo al actualizar los metadatos de la carpeta. - + OCC::UpdateE2eeFolderUsersMetadataJob - Error updating metadata for a folder %1 - Error al actualizar los metadatos de una carpeta %1 + Could not add or remove user %1 to access folder %2 + No se ha podido añadir o eliminar al usuario %1 para acceder a la carpeta %2 Could not fetch public key for user %1 @@ -4450,8 +4539,8 @@ El servidor respondió con el error: %2 No se ha podido encontrar la carpeta cifrada para la carpeta %1 - Could not add or remove user %1 to access folder %2 - No se ha podido añadir o eliminar al usuario %1 para acceder a la carpeta %2 + Error updating metadata for a folder %1 + Error al actualizar los metadatos de una carpeta %1 Failed to unlock a folder. @@ -4460,14 +4549,6 @@ El servidor respondió con el error: %2 OCC::User - - End-to-end certificate needs to be migrated to a new one - El certificado de extremo a extremo debe ser migrado a uno nuevo - - - Trigger the migration - Iniciar la migración - %n notification(s) @@ -4476,146 +4557,162 @@ El servidor respondió con el error: %2 - Retry all uploads - Reintentar todas las subidas + End-to-end certificate needs to be migrated to a new one + El certificado de extremo a extremo debe ser migrado a uno nuevo - Resolve conflict - Resolver conflicto + Open Nextcloud Assistant in browser + Abrir Nextcloud Assistant en el navegador + Open Nextcloud Talk in browser + Abrir Nextcloud Talk en el navegador + + Rename file Renombrar archivo - Open Nextcloud Assistant in browser - Abrir Nextcloud Assistant en el navegador + Resolve conflict + Resolver conflicto - Open Nextcloud Talk in browser - Abrir Nextcloud Talk en el navegador + Retry all uploads + Reintentar todas las subidas - - - OCC::UserModel - Confirm Account Removal - Confirma la eliminación de cuenta + Trigger the migration + Iniciar la migración + + + OCC::UserModel <p>Do you really want to remove the connection to the account <i>%1</i>?</p><p><b>Note:</b> This will <b>not</b> delete any files.</p> <p>¿De verdad quieres eliminar la conexión con la cuenta <i>%1</i>?</p><p><b>Aviso:</b> Esto <b>no eliminará</b> ningún archivo.</p> - - Remove connection - Eliminar vinculación - Cancel Cancelar - + + Confirm Account Removal + Confirma la eliminación de cuenta + + + Remove connection + Eliminar vinculación + + OCC::UserStatusSelectorModel + + %1 days + + %1 día + %1 días + + + + %1 hours + + %1 hora + %1 horas + + + + %1 minutes + + %1 minuto + %1 minutos + + - Could not fetch predefined statuses. Make sure you are connected to the server. - No se han podido recuperar los estados predefinidos. Asegúrese de que está conectado al servidor. + 1 day + 1 día - Could not fetch status. Make sure you are connected to the server. - No se ha podido obtener el estado. Asegúrese de que está conectado al servidor. + 1 hour + 1 hora - Status feature is not supported. You will not be able to set your status. - La característica de estado no está soportada. No podrá establecer su estado. + 1 minute + 1 minuto - Emojis are not supported. Some status functionality may not work. - La característica de emojis no está soportada. Es posible que algunas características de estado del usuario no funcionen. + 30 minutes + 30 minutos - Could not set status. Make sure you are connected to the server. - No se ha podido establecer el estado. Asegúrese de que está conectado al servidor. + 4 hours + 4 horas Could not clear status message. Make sure you are connected to the server. No se ha podido borrar el mensaje de estado. Asegúrese de que está conectado al servidor. - Don't clear - No borrar - - - 30 minutes - 30 minutos + Could not fetch predefined statuses. Make sure you are connected to the server. + No se han podido recuperar los estados predefinidos. Asegúrese de que está conectado al servidor. - 1 hour - 1 hora + Could not fetch status. Make sure you are connected to the server. + No se ha podido obtener el estado. Asegúrese de que está conectado al servidor. - 4 hours - 4 horas + Could not set status. Make sure you are connected to the server. + No se ha podido establecer el estado. Asegúrese de que está conectado al servidor. - Today - Hoy + Don't clear + No borrar - This week - Esta semana + Emojis are not supported. Some status functionality may not work. + La característica de emojis no está soportada. Es posible que algunas características de estado del usuario no funcionen. Less than a minute Hace menos de un minuto - 1 minute - 1 minuto - - - %1 minutes - - %1 minuto - %1 minutos - - - - %1 hours - - %1 hora - %1 horas - + Status feature is not supported. You will not be able to set your status. + La característica de estado no está soportada. No podrá establecer su estado. - 1 day - 1 día + This week + Esta semana - - %1 days - - %1 día - %1 días - + + Today + Hoy - + OCC::Vfs Please choose a different location. %1 is a drive. It doesn't support virtual files. Por favor seleccione un ubicación diferente. %1 es una unidad. No soporta archivos virtuales. - - Please choose a different location. %1 isn't a NTFS file system. It doesn't support virtual files. - Por favor seleccione un ubicación diferente. %1no es un sistema de archivos NTFS. No soporta archivos virtuales. - Please choose a different location. %1 is a network drive. It doesn't support virtual files. Por favor seleccione un ubicación diferente. %1 es una unidad de red. No soporta archivos virtuales. - + + Please choose a different location. %1 isn't a NTFS file system. It doesn't support virtual files. + Por favor seleccione un ubicación diferente. %1no es un sistema de archivos NTFS. No soporta archivos virtuales. + + OCC::VfsDownloadErrorDialog + + %1 could not be downloaded. + %1 no pudo ser descargado. + + + > More details + > Más detalles + Download error Error de descarga @@ -4625,26 +4722,18 @@ El servidor respondió con el error: %2 Error al descargar - could not be downloaded - no pudo ser descargado - - - > More details - > Más detalles + Error downloading %1 + Error descargando %1 More details Más detalles - Error downloading %1 - Error descargando %1 - - - %1 could not be downloaded. - %1 no pudo ser descargado. + could not be downloaded + no pudo ser descargado - + OCC::VfsSuffix @@ -4680,202 +4769,230 @@ El servidor respondió con el error: %2 OCC::WelcomePage - Form - Formulario + Easy-to-use web mail, calendaring & contacts + Correo web, calendario y contactos fáciles de usar - Log in - Iniciar sesión + Form + Formulario - Sign up with provider - Iniciar sesión a través de un proveedor + Host your own server + Aloja tu propio servidor - + Keep your data secure and under your control Mantén tus datos seguros y bajo tu control - Secure collaboration & file exchange - Colaboración segura e intercambio de archivos - - - Easy-to-use web mail, calendaring & contacts - Correo web, calendario y contactos fáciles de usar + Log in + Iniciar sesión Screensharing, online meetings & web conferences Compartir pantalla, reuniones online y conferencias web - Host your own server - Aloja tu propio servidor + Secure collaboration & file exchange + Colaboración segura e intercambio de archivos - - - OCC::ownCloudGui - Please sign in - Por favor, inicie sesión + Sign up with provider + Iniciar sesión a través de un proveedor + + + OwncloudAdvancedSetupPage - There are no sync folders configured. - No hay carpetas configuradas para sincronizar. + &Local Folder + Carpeta &local - - Disconnected from %1 - Desconectado de %1 + + <html><head/><body><p>If this box is checked, existing content in the local folder will be erased to start a clean sync from the server.</p><p>Do not check this if the local content should be uploaded to the servers folder.</p></body></html> + <html><head/><body><p>Si esta casilla está marcada, el contenido existente en el directorio local será eliminado para comenzar una sincronización limpia desde el servidor.</p><p>No marque esta casilla si el contenido local debería subirse al directorio del servidor.</p></body></html> - Unsupported Server Version - Versión del servidor no soportada + Ask before syncing external storages + Preguntar antes sincronizar almacenamientos externos - The server on account %1 runs an unsupported version %2. Using this client with unsupported server versions is untested and potentially dangerous. Proceed at your own risk. - El servidor en la cuenta %1 usa una versión no soportada %2. El uso de este cliente con versiones de servidor no soportadas no ha sido probado y es potencialmente peligroso. Continúa bajo tu propio riesgo. + Ask before syncing folders larger than + Preguntar antes sincronizar carpetas mayores de - Terms of service - Términos de servicio + Choose different folder + Elegir una carpeta diferente - Your account %1 requires you to accept the terms of service of your server. You will be redirected to %2 to acknowledge that you have read it and agrees with it. - Su cuenta %1 requiere que acepte los términos de servicio de su servidor. Será redirigido a %2 para indicar que los ha leído y está de acuerdo. + Choose what to sync + Elija qué sincronizar - %1: %2 - Example text: "Nextcloud: Syncing 25MB (3 minutes left)" (%1 is the folder name to be synced, %2 a status message for that folder) - %1:%2 + Erase local folder and start a clean sync + Borrar carpeta local e iniciar una sincronización limpia - macOS VFS for %1: Sync is running. - macOS VFS para %1: Sincronización en progreso. + Keep local data + Mantener datos locales - macOS VFS for %1: Last sync was successful. - macOS VFS para %1: la última sincronización fue exitosa. + Local Folder + Carpeta Local - macOS VFS for %1: A problem was encountered. - macOS VFS para %1: Se ha encontrado un problema. + MB + Trailing part of "Ask confirmation before syncing folder larger than" + MB - Checking for changes in remote "%1" - Buscando cambios en carpeta remota "%1" + Server address + Nombre del servidor - Checking for changes in local "%1" - Buscando cambios en carpeta local "%1" + Sync Logo + Sync Logo - Disconnected from accounts: - Desconectado desde cuentas: + Synchronize everything from server + Sincronizar todo desde el servidor - Account %1: %2 - Cuenta %1: %2 + Username + Nombre de usuario + + + OwncloudHttpCredsPage - Account synchronization is disabled - La sincronización está deshabilitada + &Password + &Contraseña + + + &Username + &Nombre de usuario + + + OwncloudSetupPage - %1 (%2, %3) - %1 (%2, %3) + Logo + Logo + + + Server address + Nombre del servidor + + + TextLabel + TextLabel + + + This is the link to your %1 web interface when you open it in the browser. + Este es el link a su interfaz web %1 cuando la abra en el navegador. - OwncloudAdvancedSetupPage + progress - Username - Nombre de usuario + Deleted + Eliminado - Local Folder - Carpeta Local + Deleting + Eliminando - Choose different folder - Elegir una carpeta diferente + Downloaded + Descargado - Server address - Nombre del servidor + Downloading + Descargando - Sync Logo - Sync Logo + Error + Error - Synchronize everything from server - Sincronizar todo desde el servidor + Filesystem access error + Error de acceso al sistema de archivos - Ask before syncing folders larger than - Preguntar antes sincronizar carpetas mayores de + Ignored + Ignorado - Ask before syncing external storages - Preguntar antes sincronizar almacenamientos externos + Ignoring + Ignorando - Keep local data - Mantener datos locales + Moved to %1 + Movido a %1 - <html><head/><body><p>If this box is checked, existing content in the local folder will be erased to start a clean sync from the server.</p><p>Do not check this if the local content should be uploaded to the servers folder.</p></body></html> - <html><head/><body><p>Si esta casilla está marcada, el contenido existente en el directorio local será eliminado para comenzar una sincronización limpia desde el servidor.</p><p>No marque esta casilla si el contenido local debería subirse al directorio del servidor.</p></body></html> + Moving + Moviendo - Erase local folder and start a clean sync - Borrar carpeta local e iniciar una sincronización limpia + Replaced by virtual file + Reemplazado por un archivo virtual - MB - Trailing part of "Ask confirmation before syncing folder larger than" - MB + Server version downloaded, copied changed local file into case conflict conflict file + Se descargó la versión del servidor, se copió el archivo local cambiado hacia archivo con conflictos de capitalización - Choose what to sync - Elija qué sincronizar + Server version downloaded, copied changed local file into conflict file + Versión del servidor descargada, se ha copiado el fichero local cambiado al fichero en conflicto - &Local Folder - Carpeta &local + Unknown + Desconocido - - - OwncloudHttpCredsPage - &Username - &Nombre de usuario + Updated end-to-end encryption metadata + Metadatos de cifrado de extremo a extremo actualizados - &Password - &Contraseña + Updated local metadata + Actualizados metadatos locales - - - OwncloudSetupPage - TextLabel - TextLabel + Updated local virtual files metadata + Se han actualizado los metadatos para los archivos virtuales - Logo - Logo + Updating end-to-end encryption metadata + Actualizando metadatos de cifrado extremo a extremo + + + Updating local metadata + Actualizando los metadatos locales - Server address - Nombre del servidor + Updating local virtual files metadata + Actualizando los metadatos de los archivos virtuales locales - This is the link to your %1 web interface when you open it in the browser. - Este es el link a su interfaz web %1 cuando la abra en el navegador. + Uploaded + Subido - + + Uploading + Subiendo + + + Virtual file created + Archivo virtual creado + + QObject + + %1: %2 + this displays an error string (%2) for a file %1 + %1: %2 + %nd delay in days after an activity @@ -4884,10 +5001,6 @@ El servidor respondió con el error: %2 %nd - - in the future - en el futuro - %nh delay in hours after an activity @@ -4896,11 +5009,6 @@ El servidor respondió con el error: %2 %nh - - 1m - one minute after activity date and time - 1min - %nm delay in minutes after an activity @@ -4910,65 +5018,65 @@ El servidor respondió con el error: %2 - now - ahora + 1m + one minute after activity date and time + 1min - Some time ago - Hace tiempo + Could not create debug archive in selected location! + ¡No se pudo crear el archivo de depuración en la ubicación seleccionada! - %1: %2 - this displays an error string (%2) for a file %1 - %1: %2 + Error deleting the file + Error al eliminar el archivo + + + Failed to create debug archive + Fallo al crear archivo de depuración New folder Nueva carpeta - Failed to create debug archive - Fallo al crear archivo de depuración + Paths beginning with '#' character are not supported in VFS mode. + Las rutas que comienzan con el carácter '#' no están soportadas en el modo VFS. - - Could not create debug archive in selected location! - ¡No se pudo crear el archivo de depuración en la ubicación seleccionada! + + Some time ago + Hace tiempo - You renamed %1 - Ha renombrado %1 + Synced %1 + Sincronizado %1 - You deleted %1 - Ha eliminado %1 + You changed %1 + Ha cambiado %1 You created %1 Ha creado %1 - You changed %1 - Ha cambiado %1 + You deleted %1 + Ha eliminado %1 - Synced %1 - Sincronizado %1 + You renamed %1 + Ha renombrado %1 - Error deleting the file - Error al eliminar el archivo + in the future + en el futuro - Paths beginning with '#' character are not supported in VFS mode. - Las rutas que comienzan con el carácter '#' no están soportadas en el modo VFS. + now + ahora - + ResolveConflictsDialog - - Solve sync conflicts - Resolver conflictos de sincronización - %1 files in conflict indicate the number of conflicts to resolve @@ -4977,10 +5085,6 @@ El servidor respondió con el error: %2 %1 archivos en conflicto - - Choose if you want to keep the local version, server version, or both. If you choose both, the local file will have a number added to its name. - Decida si quiere mantener la versión local, la versión del servidor, o ambas. Si escoge ambas, se le añadirá un número al nombre del archivo local. - All local versions Todas las versiones locales @@ -4989,15 +5093,23 @@ El servidor respondió con el error: %2 All server versions Todas las versiones del servidor + + Cancel + Cancelar + + + Choose if you want to keep the local version, server version, or both. If you choose both, the local file will have a number added to its name. + Decida si quiere mantener la versión local, la versión del servidor, o ambas. Si escoge ambas, se le añadirá un número al nombre del archivo local. + Resolve conflicts Resolver conflictos - Cancel - Cancelar + Solve sync conflicts + Resolver conflictos de sincronización - + ShareDelegate @@ -5008,37 +5120,45 @@ El servidor respondió con el error: %2 ShareDetailsPage - An error occurred setting the share password. - Ocurrió un error al establecer la contraseña del recurso compartido - - - Edit share - Editar recurso compartido + Add another link + Añadir otro enlace - Share label - Etiqueta del recurso compartido + Allow resharing + Permitir que otros compartan Allow upload and editing Permitir la subida y edición - View only - Solo lectura + An error occurred setting the share password. + Ocurrió un error al establecer la contraseña del recurso compartido - File drop (upload only) - Entrega de archivos (solo carga) + Copy share link + Copiar enlace de recurso compartido + + + Edit share + Editar recurso compartido - Allow resharing - Permitir que otros compartan + Enter a note for the recipient + Ingrese una nota para el destinatario + + + File drop (upload only) + Entrega de archivos (solo carga) Hide download Ocultar descarga + + Note to recipient + Nota para el destinatario + Password protection Protección por contraseña @@ -5048,32 +5168,39 @@ El servidor respondió con el error: %2 Fijar fecha de caducidad - Note to recipient - Nota para el destinatario + Share label + Etiqueta del recurso compartido - Enter a note for the recipient - Ingrese una nota para el destinatario + Share link copied! + ¡Enlace al recurso compartido copiado! Unshare Dejar de compartir - Add another link - Añadir otro enlace + View only + Solo lectura + + + ShareeSearchField - Share link copied! - ¡Enlace al recurso compartido copiado! + Search for users or groups… + Buscar usuarios o grupos… - Copy share link - Copiar enlace de recurso compartido + Sharing is not available for this folder + Compartir no está disponible para esta carpeta ShareView + + Expires in %1 + Caduca en %1 + Password required for new share Se requiere una contraseña para el nuevo recurso compartido @@ -5086,34 +5213,19 @@ El servidor respondió con el error: %2 Shared with you by %1 Compartido con Ud. por %1 - - Expires in %1 - Caduca en %1 - Sharing is disabled Compartir está deshabilitado - - This item cannot be shared. - Este ítem no puede ser compartido. - Sharing is disabled. Compartir está deshabilitado. - - - ShareeSearchField - - Search for users or groups… - Buscar usuarios o grupos… - - - Sharing is not available for this folder - Compartir no está disponible para esta carpeta + + This item cannot be shared. + Este ítem no puede ser compartido. - + SyncJournalDb @@ -5124,18 +5236,18 @@ El servidor respondió con el error: %2 SyncStatus - Sync now - Sincronizar ahora + Open browser + Abrir navegador - + Resolve conflicts Resolver conflictos - Open browser - Abrir navegador + Sync now + Sincronizar ahora - + TalkReplyTextField @@ -5149,10 +5261,6 @@ El servidor respondió con el error: %2 TermsOfServiceCheckWidget - - Terms of Service - Términos de Servicio - Logo Logotipo @@ -5161,13 +5269,56 @@ El servidor respondió con el error: %2 Switch to your browser to accept the terms of service Cambie al navegador para aceptar los términos de servicio - + + Terms of Service + Términos de Servicio + + - TrayWindowHeader + theme - Open local or group folders - Abrir carpetas locales o de grupo + Error occurred during setup + Ha ocurrido un error durante la configuración + + + Error occurred during sync + Ha ocurrido un error durante la sincronización + + + Preparing to sync + Preparando para sincronizar + + + Stopping sync + Deteniendo la sincronización + + + Sync is paused + La sincronización está en pausa. + + + Sync is running + Sincronizado en proceso + + + Sync status is unknown + Estado de sincronización desconocido + + Sync was successful + La sincronización fue exitosa + + + Sync was successful but some files were ignored + La sincronización fue exitosa, pero se han ignorado algunos archivos + + + Waiting to start syncing + Esperando para empezar la sincronización + + + + TrayWindowHeader More apps Más apps @@ -5176,7 +5327,11 @@ El servidor respondió con el error: %2 Open %1 in browser Abrir %1 en el navegador - + + Open local or group folders + Abrir carpetas locales o de grupo + + UnifiedSearchInputContainer @@ -5229,67 +5384,83 @@ El servidor respondió con el error: %2 UserLine - Switch to account - Cambiar a la cuenta - - - Current account status is online - El estado actual de la cuenta es en línea + Account actions + Acciones de la cuenta Current account status is do not disturb El estado actual de la cuenta es no molestar - Account actions - Acciones de la cuenta + Current account status is online + El estado actual de la cuenta es en línea - Set status - Establecer estado + Log in + Iniciar sesión Log out Cerrar sesión - - Log in - Iniciar sesión - Remove account Eliminar cuenta - + + Set status + Establecer estado + + + Switch to account + Cambiar a la cuenta + + UserStatusSelector - Online status - Estado en línea + Appear offline + Mostrar como fuera de línea - Online - En línea + Apply + Aplicar - + Away Ausente + + Cancel + Cancelar + + + Clear + Limpiar + + + Clear status message after + Borrar el mensaje de estado después de + Do not disturb No molestar + + Invisible + Invisible + Mute all notifications Silenciar todas las notificaciones - Invisible - Invisible + Online + En línea - Appear offline - Mostrar como fuera de línea + Online status + Estado en línea Status message @@ -5299,59 +5470,33 @@ El servidor respondió con el error: %2 What is your status? ¿Cuál es su estado? + + + Utility - Clear status message after - Borrar el mensaje de estado después de - - - Cancel - Cancelar + %1 %2 + %1 %2 - - Clear - Limpiar + + %L1 B + %L1 B - - Apply - Aplicar - - - - Utility %L1 GB %L1 GB - - %L1 MB - %L1 MB - %L1 KB %L1 KB - %L1 B - %L1 B + %L1 MB + %L1 MB %L1 TB %L1 TB - - %n year(s) - - %n año - %n año(s) - - - - %n month(s) - - %n Mes - %n Mese(s) - - %n day(s) @@ -5373,6 +5518,13 @@ El servidor respondió con el error: %2 %n minuto(s) + + %n month(s) + + %n Mes + %n Mese(s) + + %n second(s) @@ -5380,223 +5532,70 @@ El servidor respondió con el error: %2 %n segundo(s) - - %1 %2 - %1 %2 - - - - ValidateChecksumHeader - - The checksum header is malformed. - El encabezado de checksum está malformado. - - - The checksum header contained an unknown checksum type "%1" - El encabezado del checksum contenía un tipo de comprobación desconocido: "%1" - - - The downloaded file does not match the checksum, it will be resumed. "%1" != "%2" - El archivo descargado no coincide con la suma de comprobación (checksum), se reanudará. "%1" != "%2" - - - - main.cpp - - System Tray not available - La bandeja del sistema no está disponible - - - %1 requires on a working system tray. If you are running XFCE, please follow <a href="http://docs.xfce.org/xfce/xfce4-panel/systray">these instructions</a>. Otherwise, please install a system tray application such as "trayer" and try again. - %1 requiere una bandeja del sistema de trabajo. Si estás ejecutando XFCE, por favor, siga <a href="http://docs.xfce.org/xfce/xfce4-panel/systray">estas instrucciones</a>. Por otro lado, instale una bandeja del sistema de aplicaciones como "trayer" e inténtelo de nuevo. - - - - nextcloudTheme::aboutInfo() - - <p><small>Built from Git revision <a href="%1">%2</a> on %3, %4 using Qt %5, %6</small></p> - <p><small>Creado desde la revisión Git <a href="%1">%2</a> en %3, %4 utilizando Qt %5, %6</small></p> - - - - progress - - Virtual file created - Archivo virtual creado - - - Replaced by virtual file - Reemplazado por un archivo virtual - - - Downloaded - Descargado - - - Uploaded - Subido - - - Server version downloaded, copied changed local file into conflict file - Versión del servidor descargada, se ha copiado el fichero local cambiado al fichero en conflicto - - - Server version downloaded, copied changed local file into case conflict conflict file - Se descargó la versión del servidor, se copió el archivo local cambiado hacia archivo con conflictos de capitalización - - - Deleted - Eliminado - - - Moved to %1 - Movido a %1 - - - Ignored - Ignorado - - - Filesystem access error - Error de acceso al sistema de archivos - - - Error - Error - - - Updated local metadata - Actualizados metadatos locales - - - Updated local virtual files metadata - Se han actualizado los metadatos para los archivos virtuales - - - Updated end-to-end encryption metadata - Metadatos de cifrado de extremo a extremo actualizados - - - Unknown - Desconocido - - - Downloading - Descargando - - - Uploading - Subiendo - - - Deleting - Eliminando - - - Moving - Moviendo - - - Ignoring - Ignorando - - - Updating local metadata - Actualizando los metadatos locales - - - Updating local virtual files metadata - Actualizando los metadatos de los archivos virtuales locales - - - Updating end-to-end encryption metadata - Actualizando metadatos de cifrado extremo a extremo + + %n year(s) + + %n año + %n año(s) + - + - theme - - Sync status is unknown - Estado de sincronización desconocido - - - Waiting to start syncing - Esperando para empezar la sincronización - - - Sync is running - Sincronizado en proceso - + utility - Sync was successful - La sincronización fue exitosa + Always available locally + Siempre disponible localmente - Sync was successful but some files were ignored - La sincronización fue exitosa, pero se han ignorado algunos archivos + Available online only + Disponible solo en línea - Error occurred during sync - Ha ocurrido un error durante la sincronización + Could not open browser + No se ha podido abrir el navegador - Error occurred during setup - Ha ocurrido un error durante la configuración + Could not open email client + No se ha podido abrir el cliente de correo electrónico - Stopping sync - Deteniendo la sincronización + Currently available locally + Disponible localmente ahora - Preparing to sync - Preparando para sincronizar + Free up local space + Liberar espacio local - - Sync is paused - La sincronización está en pausa. + + Make always available locally + Hacer que esté siempre localmente disponible - - - utility - Could not open browser - No se ha podido abrir el navegador + Some available online only + Algunos solo disponibles en línea There was an error when launching the browser to go to URL %1. Maybe no default browser is configured? Se ha producido un error al lanzar el navegador para ir a la URL: %1 , ¿puede ser que no tenga ningún navegador por defecto? - - Could not open email client - No se ha podido abrir el cliente de correo electrónico - There was an error when launching the email client to create a new message. Maybe no default email client is configured? Se ha producido un error al lanzar el cliente de correo electrónico para crear un nuevo mensaje. ¿Puede ser que no haya ningún cliente de correo electrónico configurado? + + + ValidateChecksumHeader - Always available locally - Siempre disponible localmente - - - Currently available locally - Disponible localmente ahora - - - Some available online only - Algunos solo disponibles en línea - - - Available online only - Disponible solo en línea + The checksum header contained an unknown checksum type "%1" + El encabezado del checksum contenía un tipo de comprobación desconocido: "%1" - Make always available locally - Hacer que esté siempre localmente disponible + The checksum header is malformed. + El encabezado de checksum está malformado. - Free up local space - Liberar espacio local + The downloaded file does not match the checksum, it will be resumed. "%1" != "%2" + El archivo descargado no coincide con la suma de comprobación (checksum), se reanudará. "%1" != "%2" - + \ No newline at end of file diff --git a/translations/client_fr.ts b/translations/client_fr.ts index 986ab993936f3..87b0abf41b7d8 100644 --- a/translations/client_fr.ts +++ b/translations/client_fr.ts @@ -1,49 +1,44 @@ - - + ActivityItem - - Open %1 locally - Ouvrir %1 localement - In %1 Dans %1 - + + Open %1 locally + Ouvrir %1 localement + + ActivityItemContent - - Open file details - Ouvrir les détails du fichier - Dismiss Rejeter - + + Open file details + Ouvrir les détails du fichier + + ActivityList Activity list Liste des activités - - Scroll to top - Défiler vers le haut - No activities yet Pas encore d'activité - + + Scroll to top + Défiler vers le haut + + CallNotificationDialog - - Talk notification caller avatar - Avatar de l'appelant de la notification Talk - Answer Talk call notification Répondre à la notification d'appel de Talk @@ -56,7 +51,11 @@ Decline Talk call notification Décliner la notification d'appel de Talk - + + Talk notification caller avatar + Avatar de l'appelant de la notification Talk + + CloudProviderWrapper @@ -68,62 +67,62 @@ Vérification des modifications dans "%1" - Syncing %1 of %2 (%3 left) - Synchronisation de %1 sur %2 (%3 restant) - - - Syncing %1 of %2 - Synchronisation de %1 sur %2 - - - Syncing %1 (%2 left) - Synchronisation de %1 (%2 restant) + Help + Aide - Syncing %1 - Synchronisation de %1 + Log out + Se déconnecter No recently changed files Aucun fichier modifié récemment - Sync paused - Synchronisation en pause + Open website + Consulter le site web - Syncing - Synchronisation en cours + Pause synchronization + Suspendre la synchronisation - Open website - Consulter le site web + Quit sync client + Quitter le client de synchro - + Recently changed Modifié récemment - Pause synchronization - Suspendre la synchronisation + Settings + Paramètres - Help - Aide + Sync paused + Synchronisation en pause - Settings - Paramètres + Syncing + Synchronisation en cours - Log out - Se déconnecter + Syncing %1 + Synchronisation de %1 - Quit sync client - Quitter le client de synchro + Syncing %1 (%2 left) + Synchronisation de %1 (%2 restant) - + + Syncing %1 of %2 + Synchronisation de %1 sur %2 + + + Syncing %1 of %2 (%3 left) + Synchronisation de %1 sur %2 (%3 restant) + + ConflictDelegate @@ -138,18 +137,10 @@ CurrentAccountHeaderButton - Current account - Compte actuel - - - Resume sync for all - Reprendre la synchronisation pour tous - - - Pause sync for all - Mettre en pause la synchronisation pour tous + Account switcher and settings menu + Sélecteur de compte et menu de paramètres - + Add account Ajouter un compte @@ -158,30 +149,38 @@ Ajouter un nouveau compte - Settings - Paramètres - - - Exit - Quitter + Current account + Compte actuel Current account avatar Avatar du compte actuel + + Current account status is do not disturb + Le statuts de compte actuel est ne pas déranger + Current account status is online Le statuts de compte actuel est en ligne - Current account status is do not disturb - Le statuts de compte actuel est ne pas déranger + Exit + Quitter - Account switcher and settings menu - Sélecteur de compte et menu de paramètres + Pause sync for all + Mettre en pause la synchronisation pour tous - + + Resume sync for all + Reprendre la synchronisation pour tous + + + Settings + Paramètres + + EditFileLocallyLoadingDialog @@ -205,23 +204,23 @@ EncryptionTokenSelectionWindow - - Token Encryption Key Chooser - Choisir la clé de chiffrement du jeton - Available Keys for end-to-end Encryption: Clés disponibles pour le chiffrement de bout en bout: + Cancel + Annuler + + Choose Choisir - Cancel - Annuler + Token Encryption Key Chooser + Choisir la clé de chiffrement du jeton - + ErrorBox @@ -253,15 +252,15 @@ Evict materialised files Supprimer les fichiers matérialisés - - Reload - Recharger - Materialised items Éléments matérialisés - + + Reload + Recharger + + FileProviderFastEnumerationSettings @@ -283,24 +282,20 @@ FileProviderSettings - Virtual files settings - Paramètres des fichiers virtuels + Enable virtual files + Activer les fichiers virtuels - + General settings Paramètres généraux - Enable virtual files - Activer les fichiers virtuels + Virtual files settings + Paramètres des fichiers virtuels - + FileProviderStorageInfo - - Local storage use - Utilisation du stockage local - %1 GB of %2 GB remote files synced %1 Go sur %2 Go de fichiers distants synchronisés @@ -309,42 +304,50 @@ Evict local copies … Évincer les copies locales… - + + Local storage use + Utilisation du stockage local + + FileProviderSyncStatus - - Syncing - Synchronisation - All synced! Tout est synchronisé ! - - Request sync - Synchroniser - Request a sync of changes for the VFS environment. macOS may ignore or delay this request. Synchroniser les modifications pour l'environnement VFS. macOS peut ignorer ou retarder cette demande. - - - FileSystem + + Request sync + Synchroniser + - Error removing "%1": %2 - Erreur lors de la suppression de "%1" : %2 + Syncing + Synchronisation + + + FileSystem Could not remove folder "%1" Impossible de supprimer le dossier "%1" - + + Error removing "%1": %2 + Erreur lors de la suppression de "%1" : %2 + + Flow2AuthWidget + An error occurred while connecting. Please try again. + Une erreur s'est produite pendant la connexion. Veuillez ré-essayer. + + Browser Authentication Authentification avec le navigateur Internet @@ -356,44 +359,55 @@ macOS may ignore or delay this request. Switch to your browser to connect your account Basculez sur votre navigateur pour connecter votre compte - - An error occurred while connecting. Please try again. - Une erreur s'est produite pendant la connexion. Veuillez ré-essayer. - - + FolderWizardSourcePage - - Pick a local folder on your computer to sync - Sélectionnez un dossier local de votre ordinateur à synchroniser - &Choose … &Sélectionner … - + + Pick a local folder on your computer to sync + Sélectionnez un dossier local de votre ordinateur à synchroniser + + FolderWizardTargetPage - - Select a remote destination folder - Veuillez sélectionner un dossier distant - Create folder Créer un dossier + Folders + Dossiers + + Refresh Rafraîchir - Folders - Dossiers + Select a remote destination folder + Veuillez sélectionner un dossier distant - + + + main.cpp + + %1 requires on a working system tray. If you are running XFCE, please follow <a href="http://docs.xfce.org/xfce/xfce4-panel/systray">these instructions</a>. Otherwise, please install a system tray application such as "trayer" and try again. + %1 nécessite une zone de notification système fonctionnelle. Si vous utiliser XFCE, veuillez suivre <a href="http://docs.xfce.org/xfce/xfce4-panel/systray">ces instructions</a>. Sinon, installez une application de la barre d'état système telle que "trayer" et réessayez. + + + System Tray not available + Zone de notification système non disponible + + MainWindow + New activities + Nouvelles activités + + Nextcloud desktop main dialog Boîte de dialogue principale du bureau Nextcloud @@ -401,9 +415,12 @@ macOS may ignore or delay this request. Unified search results list Liste des résultats de la recherche unifiée + + + nextcloudTheme::aboutInfo() - New activities - Nouvelles activités + <p><small>Built from Git revision <a href="%1">%2</a> on %3, %4 using Qt %5, %6</small></p> + <p><small>Généré à partir de la révision Git <a href="%1">%2</a> du %3, %4 en utilisant Qt %5, %6</small></p> @@ -412,15 +429,15 @@ macOS may ignore or delay this request. Connection timed out Délai de connexion dépassé - - Unknown error: network reply was deleted - Erreur inconnue : La réponse du réseau a été supprimée - Server replied "%1 %2" to "%3 %4" Le serveur a répondu "%1 %2" à "%3 %4" - + + Unknown error: network reply was deleted + Erreur inconnue : La réponse du réseau a été supprimée + + OCC::Account @@ -444,382 +461,382 @@ Should the accounts be imported? %1 comptes ont été détectés à partir d'un ancien client de bureau. Doivent-ils être importés ? - - Legacy import - Importation de l'héritage - - - Import - Importer - 1 account was detected from a legacy desktop client. Should the account be imported? 1 compte a été détecté à partir d'un ancien client de bureau. Le compte doit-il être importé ? - - Skip - Ignorer - Could not import accounts from legacy client configuration. Impossible d'importer des comptes à partir de l'ancienne configuration client. - + + Import + Importer + + + Legacy import + Importation de l'héritage + + + Skip + Ignorer + + OCC::AccountSettings - Unchecked folders will be <b>removed</b> from your local file system and will not be synchronized to this computer anymore - Les dossiers décochés seront <b>supprimés</b> de votre disque local et ne seront plus synchronisés avec cet ordinateur. + %1 (%3%) of %2 in use. Some folders, including network mounted or shared folders, might have different limits. + %1 (%3%) utilisés sur %2. Certains dossiers, montés depuis le réseau ou partagés, peuvent avoir des limites différentes. - Synchronize all - Tout synchroniser + %1 as %2 + %1 avec le compte %2 - Synchronize none - Ne rien synchroniser + %1 in use + %1 utilisé(s) - Apply manual changes - Appliquer les changements manuels + %1 of %2 in use + %1 utilisés sur %2 - Standard file sync - Synchronisation standard des fichiers + (experimental) + (expérimental) - Virtual file sync - Synchronisation de fichiers virtuels + <p>Could not create local folder <i>%1</i>.</p> + <p>Impossible de créer le dossier local <i>%1</i>.</p> - Connection settings - Paramètres de connexion + <p>Do you really want to stop syncing the folder <i>%1</i>?</p><p><b>Note:</b> This will <b>not</b> delete any files.</p> + <p>Voulez-vous vraiment arrêter de synchroniser le dossier <i>%1</i> ?</p><p><b>Note :</b> Aucun fichier ne sera supprimé.</p> Apply Appliquer - Storage space: … - Espace de stockage : ... + Apply manual changes + Appliquer les changements manuels + + + Availability + Disponibilités Cancel Annuler - Connected with <server> as <user> - Connecté au serveur <server> avec le compte <user> + Choose what to sync + Sélectionner le contenu à synchroniser - No account configured. - Aucun compte configuré. + Confirm Folder Sync Connection Removal + Confirmer le retrait de la synchronisation de dossier - End-to-end Encryption with Virtual Files - Chiffrement de bout en bout avec fichiers virtuels + Connected to %1. + Connecté au serveur %1. - You seem to have the Virtual Files feature enabled on this folder. At the moment, it is not possible to implicitly download virtual files that are end-to-end encrypted. To get the best experience with virtual files and end-to-end encryption, make sure the encrypted folder is marked with "Make always available locally". - Il semble que la fonctionnalité des Fichiers Virtuels soit activée sur ce dossier. Pour l'instant, il n'est pas possible de télécharger implicitement des fichiers virtuels qui sont chiffrés de bout en bout. Pour bénéficier d'une expérience optimale avec les fichiers virtuels et le chiffrement de bout en bout, assurez-vous que le dossier chiffré soit marqué par l'option "Toujours rendre disponible localement". + Connected with <server> as <user> + Connecté au serveur <server> avec le compte <user> - Do not encrypt folder - Ne pas chiffrer le dossier + Connecting to %1 … + Connexion à %1 ... - Encrypt folder - Chiffrer le dossier + Connection settings + Paramètres de connexion - End-to-end Encryption - Chiffrement de bout en bout + Could not encrypt folder because the folder does not exist anymore + Impossible de chiffrer le dossier car il n'existe plus - This will encrypt your folder and all files within it. These files will no longer be accessible without your encryption mnemonic key. -<b>This process is not reversible. Are you sure you want to proceed?</b> - Cela va chiffrer votre dossier et tous les fichiers qu'il contient. Ces fichiers ne seront plus accessibles sans votre clé de chiffrement mnémonique. -<b>Ce processus n'est pas réversible. Êtes-vous sûr de vouloir le faire ?</b> + Create new folder + Créer un nouveau dossier - Disable encryption - Désactiver le chiffrement + Currently there is no storage usage information available. + Actuellement aucune information d'utilisation de stockage n'est disponible. - Display mnemonic - Afficher la phrase secrète + Disable encryption + Désactiver le chiffrement - End-to-end encryption has been enabled for this account - Le chiffrement de bout en bout a été activé sur ce compte + Disable end-to-end encryption + Désactiver le chiffrement de bout en bout - Warning - Attention + Disable end-to-end encryption for %1? + Désactiver le chiffrement de bout en bout pour %1 ? - Please wait for the folder to sync before trying to encrypt it. - Merci d'attendre que le dossier soit synchronisé avant d'essayer de le chiffrer. + Disable support + Désactiver le support - The folder has a minor sync problem. Encryption of this folder will be possible once it has synced successfully - Le dossier a un défaut de synchronisation mineur. Le chiffrement de ce dossier sera possible quand la synchronisation aura réussi. + Disable virtual file support … + Désactiver la prise en charge du fichier virtuel… - The folder has a sync error. Encryption of this folder will be possible once it has synced successfully - Le dossier a une erreur de synchronisation. Le chiffrement de ce dossier sera possible quand la synchronisation aura réussi. + Disable virtual file support? + Désactiver le support des fichiers virtuels ? - End-to-end encryption is not configured on this device. Once it is configured, you will be able to encrypt this folder. -Would you like to set up end-to-end encryption? - Le chiffrement de bout en bout n'est pas configuré sur cet appareil. Une fois qu'il sera configuré, vous serez en mesure de chiffrer ce dossier. -Souhaitez-vous configurer le chiffrement de bout en bout ? + Display mnemonic + Afficher la phrase secrète - You cannot encrypt a folder with contents, please remove the files. -Wait for the new sync, then encrypt it. - Vous ne pouvez pas chiffrer un dossier avec son contenu, veuillez enlever les fichiers. Attendez une nouvelle synchronisation puis chiffrez le dossier. + Do not encrypt folder + Ne pas chiffrer le dossier - Encryption failed - Le chiffrement a échoué + Edit Ignored Files + Modifier les fichiers exclus - Could not encrypt folder because the folder does not exist anymore - Impossible de chiffrer le dossier car il n'existe plus + Enable virtual file support %1 … + Activer la prise en charge du fichier virtuel %1 … Encrypt Chiffrer - Edit Ignored Files - Modifier les fichiers exclus - - - Create new folder - Créer un nouveau dossier - - - Availability - Disponibilités + Encrypt folder + Chiffrer le dossier - Choose what to sync - Sélectionner le contenu à synchroniser + Encryption failed + Le chiffrement a échoué - Force sync now - Forcer la synchronisation maintenant + End-to-end Encryption + Chiffrement de bout en bout - Restart sync - Redémarrer la synchronisation + End-to-end Encryption with Virtual Files + Chiffrement de bout en bout avec fichiers virtuels - Remove folder sync connection - Retirer la connexion de synchronisation de dossier + End-to-end encryption has been enabled for this account + Le chiffrement de bout en bout a été activé sur ce compte - Disable virtual file support … - Désactiver la prise en charge du fichier virtuel… + End-to-end encryption has been enabled on this account with another device.<br>It can be enabled on this device by entering your mnemonic.<br>This will enable synchronisation of existing encrypted folders. + Le chiffrement de bout en bout a été activé sur ce compte avec un autre appareil.<br>Il peut être activé sur cet appareil en entrant votre phrase secrète.<br>Cela permettra la synchronisation des dossiers chiffrés existants. - Enable virtual file support %1 … - Activer la prise en charge du fichier virtuel %1 … + End-to-end encryption is not configured on this device. Once it is configured, you will be able to encrypt this folder. +Would you like to set up end-to-end encryption? + Le chiffrement de bout en bout n'est pas configuré sur cet appareil. Une fois qu'il sera configuré, vous serez en mesure de chiffrer ce dossier. +Souhaitez-vous configurer le chiffrement de bout en bout ? - (experimental) - (expérimental) + End-to-end encryption mnemonic + Phrase secrète du chiffrement de bout en bout Folder creation failed Échec de la création du dossier - Confirm Folder Sync Connection Removal - Confirmer le retrait de la synchronisation de dossier - - - Remove Folder Sync Connection - Retirer la synchronisation de ce dossier + Force sync now + Forcer la synchronisation maintenant - Disable virtual file support? - Désactiver le support des fichiers virtuels ? + Migrate certificate to a new one + Migrer le certificat vers une nouvelle clé - This action will disable virtual file support. As a consequence contents of folders that are currently marked as "available online only" will be downloaded. - -The only advantage of disabling virtual file support is that the selective sync feature will become available again. - -This action will abort any currently running synchronization. - Cette action désactivera la prise en charge du fichier virtuel. Par conséquent, les contenus des dossiers habituellement marqués comme "disponibles en ligne seulement" seront téléchargés. -Le seul avantage de désactiver la prise en charge du fichier virtuel est que les fonctionnalités de synchronisation sélective seront de nouveau disponibles. -Cette action entraînera l'interruption de toute synchronisation en cours. + No %1 connection configured. + Aucune connexion à %1 configurée - - Disable support - Désactiver le support + + No account configured. + Aucun compte configuré. - End-to-end encryption mnemonic - Phrase secrète du chiffrement de bout en bout + Open folder + Ouvrir le dossier - Sync Running - Synchronisation en cours + Pause sync + Mettre en pause la synchronisation - The syncing operation is running.<br/>Do you want to terminate it? - La synchronisation est en cours.<br/>Voulez-vous l'arrêter ? + Please wait for the folder to sync before trying to encrypt it. + Merci d'attendre que le dossier soit synchronisé avant d'essayer de le chiffrer. - %1 in use - %1 utilisé(s) + Remove Folder Sync Connection + Retirer la synchronisation de ce dossier - Migrate certificate to a new one - Migrer le certificat vers une nouvelle clé + Remove folder sync connection + Retirer la connexion de synchronisation de dossier - There are folders that have grown in size beyond %1MB: %2 - Il y a des dossiers qui ont augmenté de taille au-delà de %1 Mo : %2 + Removing end-to-end encryption will remove locally-synced files that are encrypted.<br>Encrypted files will remain on the server. + Le retrait du chiffrage de bout en bout supprimera localement les fichiers chiffrés synchronisés.<br>Les fichiers chiffrés demeureront sur le serveur. - End-to-end encryption has been enabled on this account with another device.<br>It can be enabled on this device by entering your mnemonic.<br>This will enable synchronisation of existing encrypted folders. - Le chiffrement de bout en bout a été activé sur ce compte avec un autre appareil.<br>Il peut être activé sur cet appareil en entrant votre phrase secrète.<br>Cela permettra la synchronisation des dossiers chiffrés existants. + Restart sync + Redémarrer la synchronisation - Set up encryption - Configurer le chiffrement + Resume sync + Reprendre la synchronisation - This account supports end-to-end encryption - Ce compte prend en charge le chiffrement de bout en bout. + Server %1 is currently being redirected, or your connection is behind a captive portal. + Le serveur %1 est actuellement redirigé ou votre connexion est derrière un portail captif. - Connected to %1. - Connecté au serveur %1. + Server %1 is currently in maintenance mode. + Le serveur %1 est en cours de maintenance. Server %1 is temporarily unavailable. Le serveur %1 est temporairement indisponible. - Server %1 is currently in maintenance mode. - Le serveur %1 est en cours de maintenance. + Server configuration error: %1 at %2. + Erreur de configuration serveur : %1 à %2. + + + Set up encryption + Configurer le chiffrement Signed out from %1. Session sur %1 fermée. - There are folders that were not synchronized because they are too big: - Certains dossiers n'ont pas été synchronisés parce qu'ils sont de taille trop importante : + Standard file sync + Synchronisation standard des fichiers - There are folders that were not synchronized because they are external storages: - Certains dossiers n'ont pas été synchronisés parce qu'ils sont localisés sur un stockage externe : + Storage space: … + Espace de stockage : ... - There are folders that were not synchronized because they are too big or external storages: - Certains dossiers n'ont pas été synchronisés parce qu'ils sont localisés sur un stockage externe ou qu'ils sont de taille trop importante : + Sync Running + Synchronisation en cours - Open folder - Ouvrir le dossier + Synchronize all + Tout synchroniser - Resume sync - Reprendre la synchronisation + Synchronize none + Ne rien synchroniser - Pause sync - Mettre en pause la synchronisation + The folder has a minor sync problem. Encryption of this folder will be possible once it has synced successfully + Le dossier a un défaut de synchronisation mineur. Le chiffrement de ce dossier sera possible quand la synchronisation aura réussi. - <p>Could not create local folder <i>%1</i>.</p> - <p>Impossible de créer le dossier local <i>%1</i>.</p> + The folder has a sync error. Encryption of this folder will be possible once it has synced successfully + Le dossier a une erreur de synchronisation. Le chiffrement de ce dossier sera possible quand la synchronisation aura réussi. - <p>Do you really want to stop syncing the folder <i>%1</i>?</p><p><b>Note:</b> This will <b>not</b> delete any files.</p> - <p>Voulez-vous vraiment arrêter de synchroniser le dossier <i>%1</i> ?</p><p><b>Note :</b> Aucun fichier ne sera supprimé.</p> + The server version %1 is unsupported! Proceed at your own risk. + La version %1 du serveur n'est pas maintenue ! +Vous prenez vos propres risques. - To protect your Cryptographic Identity, we encrypt it with a mnemonic of 12 dictionary words. Please note these down and keep them safe. They will be needed to add other devices to your account (like your mobile phone or laptop). - Pour protéger votre identité cryptographique, nous la chiffrons avec une phrase secrète de 12 mots du dictionnaire. Veuillez la noter et la garder en sécurité. Elle sera nécessaire pour ajouter d’autres appareils à votre compte (comme votre smartphone ou votre ordinateur portable). + The syncing operation is running.<br/>Do you want to terminate it? + La synchronisation est en cours.<br/>Voulez-vous l'arrêter ? - Disable end-to-end encryption - Désactiver le chiffrement de bout en bout + There are folders that have grown in size beyond %1MB: %2 + Il y a des dossiers qui ont augmenté de taille au-delà de %1 Mo : %2 - Disable end-to-end encryption for %1? - Désactiver le chiffrement de bout en bout pour %1 ? + There are folders that were not synchronized because they are external storages: + Certains dossiers n'ont pas été synchronisés parce qu'ils sont localisés sur un stockage externe : - Removing end-to-end encryption will remove locally-synced files that are encrypted.<br>Encrypted files will remain on the server. - Le retrait du chiffrage de bout en bout supprimera localement les fichiers chiffrés synchronisés.<br>Les fichiers chiffrés demeureront sur le serveur. + There are folders that were not synchronized because they are too big or external storages: + Certains dossiers n'ont pas été synchronisés parce qu'ils sont localisés sur un stockage externe ou qu'ils sont de taille trop importante : - %1 (%3%) of %2 in use. Some folders, including network mounted or shared folders, might have different limits. - %1 (%3%) utilisés sur %2. Certains dossiers, montés depuis le réseau ou partagés, peuvent avoir des limites différentes. + There are folders that were not synchronized because they are too big: + Certains dossiers n'ont pas été synchronisés parce qu'ils sont de taille trop importante : - %1 of %2 in use - %1 utilisés sur %2 + This account supports end-to-end encryption + Ce compte prend en charge le chiffrement de bout en bout. - Currently there is no storage usage information available. - Actuellement aucune information d'utilisation de stockage n'est disponible. + This action will disable virtual file support. As a consequence contents of folders that are currently marked as "available online only" will be downloaded. + +The only advantage of disabling virtual file support is that the selective sync feature will become available again. + +This action will abort any currently running synchronization. + Cette action désactivera la prise en charge du fichier virtuel. Par conséquent, les contenus des dossiers habituellement marqués comme "disponibles en ligne seulement" seront téléchargés. +Le seul avantage de désactiver la prise en charge du fichier virtuel est que les fonctionnalités de synchronisation sélective seront de nouveau disponibles. +Cette action entraînera l'interruption de toute synchronisation en cours. - %1 as %2 - %1 avec le compte %2 + This will encrypt your folder and all files within it. These files will no longer be accessible without your encryption mnemonic key. +<b>This process is not reversible. Are you sure you want to proceed?</b> + Cela va chiffrer votre dossier et tous les fichiers qu'il contient. Ces fichiers ne seront plus accessibles sans votre clé de chiffrement mnémonique. +<b>Ce processus n'est pas réversible. Êtes-vous sûr de vouloir le faire ?</b> - The server version %1 is unsupported! Proceed at your own risk. - La version %1 du serveur n'est pas maintenue ! -Vous prenez vos propres risques. + To protect your Cryptographic Identity, we encrypt it with a mnemonic of 12 dictionary words. Please note these down and keep them safe. They will be needed to add other devices to your account (like your mobile phone or laptop). + Pour protéger votre identité cryptographique, nous la chiffrons avec une phrase secrète de 12 mots du dictionnaire. Veuillez la noter et la garder en sécurité. Elle sera nécessaire pour ajouter d’autres appareils à votre compte (comme votre smartphone ou votre ordinateur portable). - Server %1 is currently being redirected, or your connection is behind a captive portal. - Le serveur %1 est actuellement redirigé ou votre connexion est derrière un portail captif. + Unable to connect to %1. + Impossible de se connecter à %1. - Connecting to %1 … - Connexion à %1 ... + Unchecked folders will be <b>removed</b> from your local file system and will not be synchronized to this computer anymore + Les dossiers décochés seront <b>supprimés</b> de votre disque local et ne seront plus synchronisés avec cet ordinateur. - Unable to connect to %1. - Impossible de se connecter à %1. + Virtual file sync + Synchronisation de fichiers virtuels - Server configuration error: %1 at %2. - Erreur de configuration serveur : %1 à %2. + Warning + Attention + + + You cannot encrypt a folder with contents, please remove the files. +Wait for the new sync, then encrypt it. + Vous ne pouvez pas chiffrer un dossier avec son contenu, veuillez enlever les fichiers. Attendez une nouvelle synchronisation puis chiffrez le dossier. You need to accept the terms of service at %1. Vous devez accepter les conditions d'utilisation ici %1. - No %1 connection configured. - Aucune connexion à %1 configurée + You seem to have the Virtual Files feature enabled on this folder. At the moment, it is not possible to implicitly download virtual files that are end-to-end encrypted. To get the best experience with virtual files and end-to-end encryption, make sure the encrypted folder is marked with "Make always available locally". + Il semble que la fonctionnalité des Fichiers Virtuels soit activée sur ce dossier. Pour l'instant, il n'est pas possible de télécharger implicitement des fichiers virtuels qui sont chiffrés de bout en bout. Pour bénéficier d'une expérience optimale avec les fichiers virtuels et le chiffrement de bout en bout, assurez-vous que le dossier chiffré soit marqué par l'option "Toujours rendre disponible localement". - + OCC::AccountSetupFromCommandLineJob - - The authenticated request to the server was redirected to "%1". The URL is bad, the server is misconfigured. - La requête authentifiée au serveur a été redirigée vers « %1 ». L'URL est mauvaise, le serveur est mal configuré. - Access forbidden by server. To verify that you have proper access, <a href="%1">click here</a> to access the service with your browser. Accès refusé par le serveur. Pour vérifier que vous disposez d'un accès approprié, <a href="%1">cliquez ici</a> pour accéder au service avec votre navigateur Web. + + The authenticated request to the server was redirected to "%1". The URL is bad, the server is misconfigured. + La requête authentifiée au serveur a été redirigée vers « %1 ». L'URL est mauvaise, le serveur est mal configuré. + There was an invalid response to an authenticated WebDAV request Réponse invalide reçue suite à une requête WebDav authentifiée. @@ -828,44 +845,44 @@ Vous prenez vos propres risques. OCC::AccountState - Signed out - Session fermée + Asking Credentials + informations d'identification demandées - Disconnected - Déconnecté + Configuration error + Erreur de configuration Connected Connecté - Service unavailable - Service indisponible + Disconnected + Déconnecté Maintenance mode mode maintenance - Redirect detected - Redirection détectée + Need the user to accept the terms of service + Besoin que l'utilisateur accepte les conditions générales d'utilisation Network error Erreur réseau - Configuration error - Erreur de configuration + Redirect detected + Redirection détectée - Asking Credentials - informations d'identification demandées + Service unavailable + Service indisponible - Need the user to accept the terms of service - Besoin que l'utilisateur accepte les conditions générales d'utilisation + Signed out + Session fermée Unknown account state @@ -874,14 +891,14 @@ Vous prenez vos propres risques. OCC::ActivityListModel - - For more activities please open the Activity app. - Pour plus d'activités veuillez lancer l'application Activité. - Fetching activities … Récupération des activités... + + For more activities please open the Activity app. + Pour plus d'activités veuillez lancer l'application Activité. + Network error occurred: client will retry syncing. Une erreur de réseau est survenue : le client va réessayer la synchronisation. @@ -890,91 +907,65 @@ Vous prenez vos propres risques. OCC::AddCertificateDialog - SSL client certificate authentication - Authentification par certificat SSL client + An encrypted pkcs12 bundle is strongly recommended as a copy will be stored in the configuration file. + Un paquet pkcs12 chiffré est vivement recommandé vu qu'une copie sera stockée dans le fichier de configuration. - This server probably requires a SSL client certificate. - Ce serveur requiert probablement un certificat SSL client. + Browse … + Parcourir … Certificate & Key (pkcs12): Certificat & clé (pkcs12) : + Certificate files (*.p12 *.pfx) + Fichiers de certificats (*.p12 *.pfx) + + Certificate password: Mot de passe du certificat : - An encrypted pkcs12 bundle is strongly recommended as a copy will be stored in the configuration file. - Un paquet pkcs12 chiffré est vivement recommandé vu qu'une copie sera stockée dans le fichier de configuration. - - - Browse … - Parcourir … + SSL client certificate authentication + Authentification par certificat SSL client Select a certificate Sélectionner un certificat - Certificate files (*.p12 *.pfx) - Fichiers de certificats (*.p12 *.pfx) + This server probably requires a SSL client certificate. + Ce serveur requiert probablement un certificat SSL client. - + OCC::Application - - Some settings were configured in %1 versions of this client and use features that are not available in this version.<br><br>Continuing will mean <b>%2 these settings</b>.<br><br>The current configuration file was already backed up to <i>%3</i>. - Des paramètres ont été configurés dans des versions %1 de ce client et utilisent des fonctionnalités non disponibles dans la version actuelle. <br><br>Continuer impliquera que <b>ces paramètres seront %2</b>.<br><br> Le fichier de configuration actuel a été sauvegardé dans <i>%3</i>. - - - newer - newer software version - ultérieures - - - older - older software version - antérieures - - - ignoring - ignorés - - - deleting - supprimés - - - Quit - Quitter - - - Continue - Continuer - %1 accounts number of accounts imported %1 comptes - - 1 account - 1 compte - %1 folders number of folders imported %1 dossiers + + 1 account + 1 compte + 1 folder 1 dossier - Legacy import - Importation héritée + Continue + Continuer + + + Error accessing the configuration file + Erreur lors de l'accès au fichier de configuration Imported %1 and %2 from a legacy desktop client. @@ -984,33 +975,59 @@ Vous prenez vos propres risques. %3 - Error accessing the configuration file - Erreur lors de l'accès au fichier de configuration + Legacy import + Importation héritée + + + Quit + Quitter + + + Some settings were configured in %1 versions of this client and use features that are not available in this version.<br><br>Continuing will mean <b>%2 these settings</b>.<br><br>The current configuration file was already backed up to <i>%3</i>. + Des paramètres ont été configurés dans des versions %1 de ce client et utilisent des fonctionnalités non disponibles dans la version actuelle. <br><br>Continuer impliquera que <b>ces paramètres seront %2</b>.<br><br> Le fichier de configuration actuel a été sauvegardé dans <i>%3</i>. There was an error while accessing the configuration file at %1. Please make sure the file can be accessed by your system account. Une erreur est survenue lors de l'accès au fichier de configuration à %1. Merci de vérifier que le fichier est accessible du compte système. - - - OCC::AuthenticationDialog + + deleting + supprimés + - Authentication Required - Authentification requise + ignoring + ignorés - Enter username and password for "%1" at %2. - Saisir le nom d’utilisateur et le mot de passe pour « %1 » sur %2. + newer + newer software version + ultérieures - &Username: - &Username: + older + older software version + antérieures + + + OCC::AuthenticationDialog &Password: &Password: - + + &Username: + &Username: + + + Authentication Required + Authentification requise + + + Enter username and password for "%1" at %2. + Saisir le nom d’utilisateur et le mot de passe pour « %1 » sur %2. + + OCC::BasePropagateRemoteDeleteEncrypted @@ -1025,8 +1042,16 @@ Vous prenez vos propres risques. OCC::BulkPropagatorJob - File %1 cannot be uploaded because another file with the same name, differing only in case, exists - Le fichier %1 ne peut être téléversé parce qu'un autre fichier avec le même nom hormis la casse existe + Error updating metadata: %1 + Erreur à la mise à jour des méta-données : %1 + + + File %1 cannot be uploaded because another file with the same name, differing only in case, exists + Le fichier %1 ne peut être téléversé parce qu'un autre fichier avec le même nom hormis la casse existe + + + File %1 has invalid modification time. Do not upload to the server. + Le fichier %1 présente une heure de modification invalide. Téléversement vers le serveur impossible. File %1 has invalid modified time. Do not upload to the server. @@ -1037,26 +1062,22 @@ Vous prenez vos propres risques. Fichier retiré (début du téléversement) %1 - File %1 has invalid modification time. Do not upload to the server. - Le fichier %1 présente une heure de modification invalide. Téléversement vers le serveur impossible. + Local file changed during sync. + Fichier local modifié pendant la synchronisation. Local file changed during syncing. It will be resumed. Fichier local modifié pendant la synchronisation. La synchronisation sera reprise. - - Local file changed during sync. - Fichier local modifié pendant la synchronisation. - Network error: %1 Erreur réseau : %1 - Error updating metadata: %1 - Erreur à la mise à jour des méta-données : %1 + Restoration failed: %1 + Échec de la restauration : %1 - + The file %1 is currently in use Le fichier %1 est en cours d'utilisation @@ -1064,11 +1085,7 @@ Vous prenez vos propres risques. The local file was removed during sync. Le fichier local a été supprimé pendant la synchronisation. - - Restoration failed: %1 - Échec de la restauration : %1 - - + OCC::CaseClashConflictSolver @@ -1079,10 +1096,6 @@ Vous prenez vos propres risques. Could not rename file. Please make sure you are connected to the server. Impossible de renommer le fichier. Assurez-vous de bien être connecté au serveur. - - You don't have the permission to rename this file. Please ask the author of the file to rename it. - Vous n'avez pas les permissions de renommer ce fichier. Veuillez demander à son auteur de le renommer. - Failed to fetch permissions with error %1 Échec de récupération de permissions avec l'erreur %1 @@ -1099,16 +1112,28 @@ Vous prenez vos propres risques. Filename contains trailing spaces. Le nom de fichier contient des espaces de fin. - + + You don't have the permission to rename this file. Please ask the author of the file to rename it. + Vous n'avez pas les permissions de renommer ce fichier. Veuillez demander à son auteur de le renommer. + + OCC::CaseClashFilenameDialog + + %1 does not support equal file names with only letter casing differences. + %1 ne supporte pas les noms de fichiers identiques avec seulement des différences de casse de caractère. + + + 0 byte + 0 octets + Case Clash Conflict Conflit de casse - The file could not be synced because it generates a case clash conflict with an existing file on this system. - Le fichier n'a pas pu être synchronisé parce qu'il génère un conflit de casse avec un fichier existant dans ce système. + Case clashing file + Fichier avec conflit de casse Error @@ -1119,40 +1144,36 @@ Vous prenez vos propres risques. Fichier existant - file A - fichier A - - - today - aujourd'hui + Filename contains illegal characters: %1 + Le nom du fichier contient des caractères illégaux : %1 - - 0 byte - 0 octets + + Filename contains leading and trailing spaces. + Le nom de fichier contient des espaces de début et de fin. - Open existing file - Ouvrir un fichier existant + Filename contains leading spaces. + Le nom de fichier contient des espaces de début. - Case clashing file - Fichier avec conflit de casse + Filename contains trailing spaces. + Le nom de fichier contient des espaces de fin. - file B - fichier B + New filename + Nouveau nom de fichier Open clashing file Ouvrir le fichier conflictuel - Please enter a new name for the clashing file: - Veuillez saisir un nouveau nom pour le fichier conflictuel : + Open existing file + Ouvrir un fichier existant - New filename - Nouveau nom de fichier + Please enter a new name for the clashing file: + Veuillez saisir un nouveau nom pour le fichier conflictuel : Rename file @@ -1163,30 +1184,26 @@ Vous prenez vos propres risques. Le fichier "%1" n'a pas pu être synchronisé à cause d'un conflit de casse avec un fichier existant dans ce système. - %1 does not support equal file names with only letter casing differences. - %1 ne supporte pas les noms de fichiers identiques avec seulement des différences de casse de caractère. - - - Filename contains leading and trailing spaces. - Le nom de fichier contient des espaces de début et de fin. + The file could not be synced because it generates a case clash conflict with an existing file on this system. + Le fichier n'a pas pu être synchronisé parce qu'il génère un conflit de casse avec un fichier existant dans ce système. - Filename contains leading spaces. - Le nom de fichier contient des espaces de début. + Use invalid name + Nom invalide - Filename contains trailing spaces. - Le nom de fichier contient des espaces de fin. + file A + fichier A - Use invalid name - Nom invalide + file B + fichier B - Filename contains illegal characters: %1 - Le nom du fichier contient des caractères illégaux : %1 + today + aujourd'hui - + OCC::CleanupPollsJob @@ -1196,77 +1213,73 @@ Vous prenez vos propres risques. OCC::ClientSideEncryption - - Input PIN code - Please keep it short and shorter than "Enter Certificate USB Token PIN:" - Saisir le code PIN - Enter Certificate USB Token PIN: Entrez le PIN du jeton USB de certificat: + + Enter E2E passphrase + Entrez la phrase secrète E2E + + + Input PIN code + Please keep it short and shorter than "Enter Certificate USB Token PIN:" + Saisir le code PIN + Invalid PIN. Login failed PIN invalide. Connexion échouée Login to the token failed after providing the user PIN. It may be invalid or wrong. Please try again! - La connexion au token a échoué après la saisie du code PIN. Il est peut-être invalide ou erroné. Veuillez réessayer ! + La connexion au token a échoué après la saisie du code PIN. Il est peut-être invalide ou erroné. Veuillez réessayer ! Please enter your end-to-end encryption passphrase:<br><br>Username: %2<br>Account: %3<br> Veuillez entrer votre phrase de passe de chiffrement de bout en bout :<br><br>Nom d'utilisateur : %2<br>Compte : %3<br> - - Enter E2E passphrase - Entrez la phrase secrète E2E - - + OCC::ConflictDialog - Sync Conflict - Conflit de synchronisation - - - Conflicting versions of %1. - Versions en conflit de %1. + 0 byte + 0 octet - Which version of the file do you want to keep?<br/>If you select both versions, the local file will have a number added to its name. - Quelle version du fichier souhaitez-vous garder ?<br/>Si vous sélectionnez les deux versions, le fichier local aura un numéro ajouté à son nom. + <a href="%1">Open local version</a> + <a href="%1">Ouvrir la version locale</a> - Local version - Version locale + <a href="%1">Open server version</a> + <a href="%1">Ouvrir la version serveur</a> Click to open the file Cliquez pour ouvrir le fichier - today - aujourd'hui + Conflicting versions of %1. + Versions en conflit de %1. - 0 byte - 0 octet + Keep both versions + Conserver les deux versions - <a href="%1">Open local version</a> - <a href="%1">Ouvrir la version locale</a> + Keep local version + Conserver la version locale - Server version - Version du serveur + Keep selected version + Conserver la version sélectionnée - <a href="%1">Open server version</a> - <a href="%1">Ouvrir la version serveur</a> + Keep server version + Conserver la version serveur - - Keep selected version - Conserver la version sélectionnée + + Local version + Version locale Open local version @@ -1277,20 +1290,36 @@ Vous prenez vos propres risques. Ouvrir la version serveur - Keep both versions - Conserver les deux versions + Server version + Version du serveur - Keep local version - Conserver la version locale + Sync Conflict + Conflit de synchronisation - Keep server version - Conserver la version serveur + Which version of the file do you want to keep?<br/>If you select both versions, the local file will have a number added to its name. + Quelle version du fichier souhaitez-vous garder ?<br/>Si vous sélectionnez les deux versions, le fichier local aura un numéro ajouté à son nom. - + + today + aujourd'hui + + OCC::ConflictSolver + + Confirm deletion + Confirmer la suppression + + + Do you want to delete the directory <i>%1</i> and all its contents permanently? + Voulez-vous supprimer le dossier <i>%1</i> et tout son contenu définitivement ? + + + Do you want to delete the file <i>%1</i> permanently? + Voulez-vous supprimer le fichier <i>%1</i> définitivement ? + Error Erreur @@ -1303,63 +1332,47 @@ Vous prenez vos propres risques. %1 - - Do you want to delete the directory <i>%1</i> and all its contents permanently? - Voulez-vous supprimer le dossier <i>%1</i> et tout son contenu définitivement ? - - - Do you want to delete the file <i>%1</i> permanently? - Voulez-vous supprimer le fichier <i>%1</i> définitivement ? - - - Confirm deletion - Confirmer la suppression - - + OCC::ConnectionValidator - Timeout - Délai d'attente + Authentication error: Either username or password are wrong. + Erreur d'authentification : nom d’utilisateur et/ou mot de passe incorrect(s). - The configured server for this client is too old - Le serveur configuré pour ce client est trop vieux + No Nextcloud account configured + Aucun compte Nextcloud n'est paramétré Please update to the latest server and restart the client. Veuillez mettre à jour le serveur vers la dernière version et redémarrer le client. - Authentication error: Either username or password are wrong. - Erreur d'authentification : nom d’utilisateur et/ou mot de passe incorrect(s). - - - No Nextcloud account configured - Aucun compte Nextcloud n'est paramétré + The configured server for this client is too old + Le serveur configuré pour ce client est trop vieux The provided credentials are not correct Les informations d'identification fournies ne sont pas correctes - + + Timeout + Délai d'attente + + OCC::DiscoveryPhase - - Error while canceling deletion of a file - Erreur lors de l'annulation de la suppression d'un fichier - Error while canceling deletion of %1 Erreur lors de l'annulation de la suppression de %1 - + + Error while canceling deletion of a file + Erreur lors de l'annulation de la suppression d'un fichier + + OCC::DiscoverySingleDirectoryJob - - Server error: PROPFIND reply is not XML formatted! - Erreur du serveur : La réponse PROPFIND n'est pas au format XML ! - Encrypted metadata setup error! Erreur lors de la configuration des métadonnées chiffrées ! @@ -1368,13 +1381,13 @@ Vous prenez vos propres risques. Encrypted metadata setup error: initial signature from server is empty. Erreur de configuration des métadonnées chiffrées: la signature initiale du serveur est vide. - + + Server error: PROPFIND reply is not XML formatted! + Erreur du serveur : La réponse PROPFIND n'est pas au format XML ! + + OCC::DiscoverySingleLocalDirectoryJob - - Error while opening directory %1 - Erreur à l’ouverture du dossier %1 - Directory not accessible on client, permission denied Dossier non accessible au client, permission refusée @@ -1384,77 +1397,81 @@ Vous prenez vos propres risques. Dossier non trouvé : %1 - Filename encoding is not valid - L’encodage du nom de fichier n’est pas valide + Error while opening directory %1 + Erreur à l’ouverture du dossier %1 Error while reading directory %1 Erreur de lecture du dossier %1 - + + Filename encoding is not valid + L’encodage du nom de fichier n’est pas valide + + OCC::EditLocallyJob - Could not start editing locally. - Impossible de démarrer l'édition localement. + An error occurred during data retrieval. + Une erreur est survenue pendant le rapatriement des données. An error occurred during setup. Une erreur est survenue pendant l'installation - Could not find a file for local editing. Make sure its path is valid and it is synced locally. - Impossible de trouver le fichier pour l'édition locale. Assurez-vous que le chemin est valide et qu'il est synchronisé localement. + An error occurred trying to synchronise the file to edit locally. + Une erreur s'est produite lors de la synchronisation du fichier à éditer localement. Could not find a file for local editing. Make sure it is not excluded via selective sync. Impossible de trouver le fichier pour l'édition locale. Assurez-vous qu'il n'est pas exclus par un filtre de synchronisation. - An error occurred during data retrieval. - Une erreur est survenue pendant le rapatriement des données. - - - An error occurred trying to synchronise the file to edit locally. - Une erreur s'est produite lors de la synchronisation du fichier à éditer localement. - - - Server error: PROPFIND reply is not XML formatted! - Erreur de serveur : La réponse de PROPFIND n'est pas formatée en XML ! + Could not find a file for local editing. Make sure its path is valid and it is synced locally. + Impossible de trouver le fichier pour l'édition locale. Assurez-vous que le chemin est valide et qu'il est synchronisé localement. Could not find a remote file info for local editing. Make sure its path is valid. Impossible de trouver une info fichier distante pour l'édition locale. Assurez-vous que son chemin est valide. - - Invalid local file path. - Chemin d'accès au fichier local non valide. - Could not open %1 Impossible d'ouvrir %1 - Please try again. - Merci de réessayer. + Could not start editing locally. + Impossible de démarrer l'édition localement. File %1 already locked. Fichier %1 déjà verrouillé. + + File %1 could not be locked. + Impossible de verrouiller le fichier %1. + + + File %1 now locked. + Fichier %1 désormais verrouillé. + + + Invalid local file path. + Chemin d'accès au fichier local non valide. + Lock will last for %1 minutes. You can also unlock this file manually once you are finished editing. Le verrouillage durera %1 minutes. Vous pouvez également déverrouiller ce fichier manuellement une fois que vous avez terminé l'édition. - File %1 now locked. - Fichier %1 désormais verrouillé. + Please try again. + Merci de réessayer. - File %1 could not be locked. - Impossible de verrouiller le fichier %1. + Server error: PROPFIND reply is not XML formatted! + Erreur de serveur : La réponse de PROPFIND n'est pas formatée en XML ! - + OCC::EditLocallyManager @@ -1469,18 +1486,10 @@ Vous prenez vos propres risques. OCC::EditLocallyVerificationJob - Invalid token received. - Le jeton reçu est invalide. - - - Please try again. - Merci de réessayer. - - - Invalid file path was provided. - Un chemin d'accès au fichier invalide a été fourni. + An error occurred trying to verify the request to edit locally. + Une erreur est survenue, tentative de vérification de la requête pour éditer localement. - + Could not find an account for local editing. Impossible de trouver un compte pour l'édition locale. @@ -1489,21 +1498,24 @@ Vous prenez vos propres risques. Impossible de démarrer l'édition locale. - An error occurred trying to verify the request to edit locally. - Une erreur est survenue, tentative de vérification de la requête pour éditer localement. + Invalid file path was provided. + Un chemin d'accès au fichier invalide a été fourni. - - - OCC::EncryptFolderJob - Could not generate the metadata for encryption, Unlocking the folder. -This can be an issue with your OpenSSL libraries. - Impossible de générer les métadonnées pour le chiffrement, déverrouillage du dossier. -Cela peut être un problème avec vos bibliothèques OpenSSL. + Invalid token received. + Le jeton reçu est invalide. - + + Please try again. + Merci de réessayer. + + OCC::EncryptedFolderMetadataHandler + + Error fetching encrypted folder ID. + Erreur dans la récupération de l’ID du dossier chiffré. + Error fetching metadata. Erreur à la récupération des méta-données. @@ -1512,10 +1524,6 @@ Cela peut être un problème avec vos bibliothèques OpenSSL. Error locking folder. Erreur de verrouillage du dossier. - - Error fetching encrypted folder ID. - Erreur dans la récupération de l’ID du dossier chiffré. - Error parsing or decrypting metadata. Erreur lors du parsing ou du déchiffrement des métadonnées. @@ -1526,21 +1534,22 @@ Cela peut être un problème avec vos bibliothèques OpenSSL. - OCC::FileDetails - - %1 second(s) ago - seconds elapsed since file last modified - - Il y a %1 seconde - Il y a %1 seconde(s) - + OCC::EncryptFolderJob + + Could not generate the metadata for encryption, Unlocking the folder. +This can be an issue with your OpenSSL libraries. + Impossible de générer les métadonnées pour le chiffrement, déverrouillage du dossier. +Cela peut être un problème avec vos bibliothèques OpenSSL. + + + OCC::FileDetails - %1 minute(s) ago - minutes elapsed since file last modified + %1 day(s) ago + days elapsed since file last modified - Il y a %1 minute - Il y a %1 minute(s) + Il y a %1 jour + Il y a %1 jour(s) @@ -1552,11 +1561,11 @@ Cela peut être un problème avec vos bibliothèques OpenSSL. - %1 day(s) ago - days elapsed since file last modified + %1 minute(s) ago + minutes elapsed since file last modified - Il y a %1 jour - Il y a %1 jour(s) + Il y a %1 minute + Il y a %1 minute(s) @@ -1567,6 +1576,14 @@ Cela peut être un problème avec vos bibliothèques OpenSSL. Il y a %1 mois + + %1 second(s) ago + seconds elapsed since file last modified + + Il y a %1 seconde + Il y a %1 seconde(s) + + %1 year(s) ago years elapsed since file last modified @@ -1587,10 +1604,10 @@ Cela peut être un problème avec vos bibliothèques OpenSSL. OCC::Flow2Auth - The returned server URL does not start with HTTPS despite the login URL started with HTTPS. Login will not be possible because this might be a security issue. Please contact your administrator. - L'URL renvoyée par le serveur ne commence pas par HTTPS alors que l'URL de connexion commence par HTTPS. La connexion ne sera pas possible car cela pourrait être un problème de sécurité. Veuillez contacter votre administrateur. + Could not parse the JSON returned from the server: <br><em>%1</em> + Impossible d'analyser le JSON renvoyé par le serveur : <br><em>%1</em> - + Error returned from the server: <em>%1</em> Erreur renvoyée par le serveur : <em>%1</em> @@ -1598,28 +1615,32 @@ Cela peut être un problème avec vos bibliothèques OpenSSL. The polling URL does not start with HTTPS despite the login URL started with HTTPS. Login will not be possible because this might be a security issue. Please contact your administrator. L'URL du sondage ne commence pas par HTTPS alors que l'URL de connexion commence par HTTPS. La connexion ne sera pas possible car cela pourrait être un problème de sécurité. Veuillez contacter votre administrateur. - - There was an error accessing the "token" endpoint: <br><em>%1</em> - Une erreur est survenue en accédant au "jeton" : <br><em>%1</em> - The reply from the server did not contain all expected fields La réponse du serveur ne contient pas tous les champs attendus - Could not parse the JSON returned from the server: <br><em>%1</em> - Impossible d'analyser le JSON renvoyé par le serveur : <br><em>%1</em> + The returned server URL does not start with HTTPS despite the login URL started with HTTPS. Login will not be possible because this might be a security issue. Please contact your administrator. + L'URL renvoyée par le serveur ne commence pas par HTTPS alors que l'URL de connexion commence par HTTPS. La connexion ne sera pas possible car cela pourrait être un problème de sécurité. Veuillez contacter votre administrateur. - + + There was an error accessing the "token" endpoint: <br><em>%1</em> + Une erreur est survenue en accédant au "jeton" : <br><em>%1</em> + + OCC::Flow2AuthWidget - Unable to open the Browser, please copy the link to your Browser. - Impossible d'ouvrir le navigateur, veuillez copier le lien dans votre navigateur Web. + Copy Link + Copier le lien + + + Link copied to clipboard. + Lien copié dans le presse-papier - Waiting for authorization - En attente de l'autorisation + Open Browser + Ouvrir le navigateur Polling for authorization @@ -1630,57 +1651,29 @@ Cela peut être un problème avec vos bibliothèques OpenSSL. Démarrage de l'autorisation - Link copied to clipboard. - Lien copié dans le presse-papier - - - Open Browser - Ouvrir le navigateur + Unable to open the Browser, please copy the link to your Browser. + Impossible d'ouvrir le navigateur, veuillez copier le lien dans votre navigateur Web. - Copy Link - Copier le lien + Waiting for authorization + En attente de l'autorisation - + OCC::Folder - - %1 has been removed. - %1 names a file. - %1 a été supprimé. - - - %1 has been updated. - %1 names a file. - %1 a été mis à jour. - - - %1 has been renamed to %2. - %1 and %2 name files. - %1 a été renommé en %2. - - - %1 has been moved to %2. - %1 a été déplacé vers %2. - - %1 and %n other file(s) have been removed. + %1 and %n other file(s) are currently locked. - %1 a été supprimé. - %1 et %n autres fichiers ont été supprimés. + %1 et %n autre fichier sont verrouillés. + %1 et %n autres fichiers sont verrouillés. - - Please choose a different location. The folder %1 doesn't exist. - Veuillez choisir un emplacement différent. Le dossier %1 n'existe pas. - - - Please choose a different location. %1 isn't a valid folder. - Veuillez choisir un emplacement différent. %1 n'est pas un dossier valide. - - - Please choose a different location. %1 isn't a readable folder. - Veuillez choisir un emplacement différent. %1 n'est pas un dossier lisible. + + %1 and %n other file(s) could not be synced due to errors. See the log for details. + + %1 ne peut pas être synchronisé en raison d'erreurs. Consultez les logs pour les détails. + %1 et %n autres fichiers n'ont pas pu être synchronisés en raison d'erreurs. Consultez les logs pour les détails. + %1 and %n other file(s) have been added. @@ -1689,10 +1682,12 @@ Cela peut être un problème avec vos bibliothèques OpenSSL. %1 et %n autres fichiers ont été ajoutés. - - %1 has been added. - %1 names a file. - %1 a été ajouté. + + %1 and %n other file(s) have been removed. + + %1 a été supprimé. + %1 et %n autres fichiers ont été supprimés. + %1 and %n other file(s) have been updated. @@ -1701,19 +1696,13 @@ Cela peut être un problème avec vos bibliothèques OpenSSL. %1 et %n autres fichiers ont été mis à jour. - - %1 has been renamed to %2 and %n other file(s) have been renamed. - - %1 a été renommé en %2. - %1 a été renommé en %2 et %n autres fichiers ont été renommés. - + + %1 could not be synced due to an error. See the log for details. + %1 n'a pu être synchronisé pour cause d'erreur. Consultez les logs pour les détails. - - %1 has been moved to %2 and %n other file(s) have been moved. - - %1 a été déplacé vers %2. - %1 a été déplacé vers %2 et %n autres fichiers ont été déplacés. - + + %1 has a sync conflict. Please check the conflict file! + %1 a un problème de synchronisation. Merci de vérifier le fichier conflit ! %1 has and %n other file(s) have sync conflicts. @@ -1723,44 +1712,46 @@ Cela peut être un problème avec vos bibliothèques OpenSSL. - %1 has a sync conflict. Please check the conflict file! - %1 a un problème de synchronisation. Merci de vérifier le fichier conflit ! + %1 has been added. + %1 names a file. + %1 a été ajouté. - %1 and %n other file(s) could not be synced due to errors. See the log for details. + %1 has been moved to %2 and %n other file(s) have been moved. - %1 ne peut pas être synchronisé en raison d'erreurs. Consultez les logs pour les détails. - %1 et %n autres fichiers n'ont pas pu être synchronisés en raison d'erreurs. Consultez les logs pour les détails. + %1 a été déplacé vers %2. + %1 a été déplacé vers %2 et %n autres fichiers ont été déplacés. - %1 could not be synced due to an error. See the log for details. - %1 n'a pu être synchronisé pour cause d'erreur. Consultez les logs pour les détails. + %1 has been moved to %2. + %1 a été déplacé vers %2. + + + %1 has been removed. + %1 names a file. + %1 a été supprimé. - %1 and %n other file(s) are currently locked. + %1 has been renamed to %2 and %n other file(s) have been renamed. - %1 et %n autre fichier sont verrouillés. - %1 et %n autres fichiers sont verrouillés. + %1 a été renommé en %2. + %1 a été renommé en %2 et %n autres fichiers ont été renommés. - %1 is currently locked. - %1 est actuellement verrouillé. - - - Sync Activity - Activité de synchronisation + %1 has been renamed to %2. + %1 and %2 name files. + %1 a été renommé en %2. - Could not read system exclude file - Impossible de lire le fichier d'exclusion du système + %1 has been updated. + %1 names a file. + %1 a été mis à jour. - A new folder larger than %1 MB has been added: %2. - - Un nouveau dossier de taille supérieure à %1 Mo a été ajouté : %2. - + %1 is currently locked. + %1 est actuellement verrouillé. A folder from an external storage has been added. @@ -1769,10 +1760,6 @@ Cela peut être un problème avec vos bibliothèques OpenSSL. - - Please go in the settings to select it if you wish to download it. - Merci d'aller dans les Paramètres pour indiquer si vous souhaitez le télécharger. - A folder has surpassed the set folder size limit of %1MB: %2. %3 @@ -1780,28 +1767,26 @@ Cela peut être un problème avec vos bibliothèques OpenSSL. %3 - Keep syncing - Continuer la synchronisation - - - Stop syncing - Arrêter la synchronisation - - - The folder %1 has surpassed the set folder size limit of %2MB. - Le dossier %1 a dépassé la taille limite fixée de %2 Mo. - - - Would you like to stop syncing this folder? - Voulez vous arrêter la synchronisation de ce dossier ? + A large number of files in the server have been deleted. +Please confirm if you'd like to proceed with these deletions. +Alternatively, you can restore all deleted files by uploading from '%1' folder to the server. + Un grand nombre de fichiers du serveur ont été supprimés. +Veuillez confirmer si vous souhaitez procéder à ces suppressions. +Vous pouvez également restaurer tous les fichiers supprimés en les téléversant depuis le dossier '%1' vers le serveur. - The folder %1 was created but was excluded from synchronization previously. Data inside it will not be synchronized. - Le dossier %1 a été créé mais il était exclu de la synchronisation auparavant. Les données qu'il contient ne seront pas synchronisées. + A large number of files in your local '%1' folder have been deleted. +Please confirm if you'd like to proceed with these deletions. +Alternatively, you can restore all deleted files by downloading them from the server. + Un grand nombre de fichiers de votre dossier local '%1' ont été supprimés. +Veuillez confirmer si vous souhaitez procéder à ces suppressions. +Vous pouvez également restaurer tous les fichiers supprimés en les téléchargeant depuis le serveur. - The file %1 was created but was excluded from synchronization previously. It will not be synchronized. - Le fichier %1 a été créé mais il était exclu de la synchronisation auparavant. Il ne sera pas synchronisé. + A new folder larger than %1 MB has been added: %2. + + Un nouveau dossier de taille supérieure à %1 Mo a été ajouté : %2. + Changes in synchronized folders could not be tracked reliably. @@ -1816,45 +1801,81 @@ Cela signifie que le client de bureau ne va pas téléverser immédiatement les %1 - Virtual file download failed with code "%1", status "%2" and error message "%3" - Le téléchargement du fichier virtuel a échoué avec le code « %1 », état « %2 » et le message d'erreur « %3 » + Could not read system exclude file + Impossible de lire le fichier d'exclusion du système - A large number of files in the server have been deleted. -Please confirm if you'd like to proceed with these deletions. -Alternatively, you can restore all deleted files by uploading from '%1' folder to the server. - Un grand nombre de fichiers du serveur ont été supprimés. -Veuillez confirmer si vous souhaitez procéder à ces suppressions. -Vous pouvez également restaurer tous les fichiers supprimés en les téléversant depuis le dossier '%1' vers le serveur. + Keep syncing + Continuer la synchronisation - A large number of files in your local '%1' folder have been deleted. -Please confirm if you'd like to proceed with these deletions. -Alternatively, you can restore all deleted files by downloading them from the server. - Un grand nombre de fichiers de votre dossier local '%1' ont été supprimés. -Veuillez confirmer si vous souhaitez procéder à ces suppressions. -Vous pouvez également restaurer tous les fichiers supprimés en les téléchargeant depuis le serveur. + Please choose a different location. %1 isn't a readable folder. + Veuillez choisir un emplacement différent. %1 n'est pas un dossier lisible. - Remove all files? - Supprimer tous les fichiers ? + Please choose a different location. %1 isn't a valid folder. + Veuillez choisir un emplacement différent. %1 n'est pas un dossier valide. + + + Please choose a different location. The folder %1 doesn't exist. + Veuillez choisir un emplacement différent. Le dossier %1 n'existe pas. + + + Please go in the settings to select it if you wish to download it. + Merci d'aller dans les Paramètres pour indiquer si vous souhaitez le télécharger. Proceed with Deletion Procéder à la suppression - Restore Files to Server - Restaurer les fichiers sur le serveur + Remove all files? + Supprimer tous les fichiers ? Restore Files from Server Restaurer des fichiers à partir du serveur - + + Restore Files to Server + Restaurer les fichiers sur le serveur + + + Stop syncing + Arrêter la synchronisation + + + Sync Activity + Activité de synchronisation + + + The file %1 was created but was excluded from synchronization previously. It will not be synchronized. + Le fichier %1 a été créé mais il était exclu de la synchronisation auparavant. Il ne sera pas synchronisé. + + + The folder %1 has surpassed the set folder size limit of %2MB. + Le dossier %1 a dépassé la taille limite fixée de %2 Mo. + + + The folder %1 was created but was excluded from synchronization previously. Data inside it will not be synchronized. + Le dossier %1 a été créé mais il était exclu de la synchronisation auparavant. Les données qu'il contient ne seront pas synchronisées. + + + Virtual file download failed with code "%1", status "%2" and error message "%3" + Le téléchargement du fichier virtuel a échoué avec le code « %1 », état « %2 » et le message d'erreur « %3 » + + + Would you like to stop syncing this folder? + Voulez vous arrêter la synchronisation de ce dossier ? + + OCC::FolderCreationDialog + Could not create a folder! Check your write permissions. + Impossible de créer le dossier ! Veuillez vérifier vos permissions d’écriture. + + Create new folder Créer un nouveau dossier @@ -1862,122 +1883,118 @@ Vous pouvez également restaurer tous les fichiers supprimés en les télécharg Enter folder name Saisissez le nom du dossier - - Folder already exists - Le dossier existe déjà - Error Erreur - Could not create a folder! Check your write permissions. - Impossible de créer le dossier ! Veuillez vérifier vos permissions d’écriture. + Folder already exists + Le dossier existe déjà - + OCC::FolderMan - Could not reset folder state - Impossible de réinitialiser l'état du dossier + %1 (Sync is paused) + %1 (Synchronisation en pause) + + + (backup %1) + (sauvegarde %1) (backup) (sauvegarde) - - (backup %1) - (sauvegarde %1) - An old sync journal "%1" was found, but could not be removed. Please make sure that no application is currently using it. Un ancien fichier journal "%1" a été trouvé, mais ne peut être supprimé. Veuillez vous assurer qu’aucune application ne l'utilise en ce moment. - Undefined state. - Statut indéfini. + Could not reset folder state + Impossible de réinitialiser l'état du dossier - Waiting to start syncing. - En attente de synchronisation. + Last sync was successful. + Synchronisation terminée avec succès - Preparing for sync. - Préparation de la synchronisation. + Please choose a different location. %1 is already being used as a sync folder for %2. + folder location, server url + Veuillez choisir un emplacement différent. %1 est déjà utilisé comme dossier de synchronisation pour %2. - Syncing %1 of %2 (A few seconds left) - Synchronisation de %1 sur %2 (il reste quelques secondes) + Please choose a different location. %1 is already being used as a sync folder. + Veuillez choisir un emplacement différent. %1 est déjà utilisé comme dossier de synchronisation. - Syncing %1 of %2 (%3 left) - Synchronisation de %1 sur %2 (%3 restant⸱s) + Please choose a different location. %1 is already contained in a folder used as a sync folder. + Veuillez choisir un emplacement différent. %1 est déjà contenu dans un dossier utilisé comme dossier de synchronisation. - Syncing %1 of %2 - Synchronisation de %1 sur %2 + Please choose a different location. The path %1 doesn't exist. + Veuillez choisir un emplacement différent. Le chemin %1 n'existe pas. - Syncing %1 (A few seconds left) - Synchronisation de %1 (il reste quelques secondes) + Please choose a different location. The path %1 isn't a folder. + Veuillez choisir un emplacement différent. Le chemin %1 n'est pas un dossier. - Syncing %1 (%2 left) - Synchronisation de %1 (%2 restant⸱s) + Please choose a different location. The selected folder isn't valid. + Veuillez choisir un emplacement différent. Le dossier sélectionné n'est pas valide. - Syncing %1 - Synchronisation de %1 + Please choose a different location. You don't have enough permissions to write to %1. + folder location + Veuillez choisir un emplacement différent. Vous ne disposez pas d'autorisations suffisantes pour écrire dans %1. - Sync is running. - Synchronisation en cours + Preparing for sync. + Préparation de la synchronisation. + + + Setup error. + Erreur de paramétrage. Sync finished with unresolved conflicts. Synchronisation terminée avec des conflits non résolus. - Last sync was successful. - Synchronisation terminée avec succès + Sync is paused. + La synchronisation est en pause. - Setup error. - Erreur de paramétrage. + Sync is running. + Synchronisation en cours Sync request was cancelled. La requête de synchronisation a été annulée. - Please choose a different location. The selected folder isn't valid. - Veuillez choisir un emplacement différent. Le dossier sélectionné n'est pas valide. - - - Please choose a different location. %1 is already being used as a sync folder. - Veuillez choisir un emplacement différent. %1 est déjà utilisé comme dossier de synchronisation. + Syncing %1 + Synchronisation de %1 - Please choose a different location. The path %1 doesn't exist. - Veuillez choisir un emplacement différent. Le chemin %1 n'existe pas. + Syncing %1 (%2 left) + Synchronisation de %1 (%2 restant⸱s) - Please choose a different location. The path %1 isn't a folder. - Veuillez choisir un emplacement différent. Le chemin %1 n'est pas un dossier. + Syncing %1 (A few seconds left) + Synchronisation de %1 (il reste quelques secondes) - Please choose a different location. You don't have enough permissions to write to %1. - folder location - Veuillez choisir un emplacement différent. Vous ne disposez pas d'autorisations suffisantes pour écrire dans %1. + Syncing %1 of %2 + Synchronisation de %1 sur %2 - Please choose a different location. %1 is already contained in a folder used as a sync folder. - Veuillez choisir un emplacement différent. %1 est déjà contenu dans un dossier utilisé comme dossier de synchronisation. + Syncing %1 of %2 (%3 left) + Synchronisation de %1 sur %2 (%3 restant⸱s) - Please choose a different location. %1 is already being used as a sync folder for %2. - folder location, server url - Veuillez choisir un emplacement différent. %1 est déjà utilisé comme dossier de synchronisation pour %2. + Syncing %1 of %2 (A few seconds left) + Synchronisation de %1 sur %2 (il reste quelques secondes) The folder %1 is linked to multiple accounts. @@ -1990,14 +2007,14 @@ Pour résoudre ce problème: veuillez enlever %1 d'un des comptes et créer Pour les utilisateurs avancés: ce problème peut aussi venir de plusieurs fichiers de bases de données de synchronisation dans un seul dossier. Veuillez vérifier si %1 contient des fichiers .sync_*.db périmés ou inutilisés et supprimez-les. - Sync is paused. - La synchronisation est en pause. + Undefined state. + Statut indéfini. - %1 (Sync is paused) - %1 (Synchronisation en pause) + Waiting to start syncing. + En attente de synchronisation. - + OCC::FolderStatusDelegate @@ -2012,57 +2029,61 @@ Pour les utilisateurs avancés: ce problème peut aussi venir de plusieurs fichi OCC::FolderStatusModel - You need to be connected to add a folder - Vous devez être connecté pour ajouter un dossier - - - Click this button to add a folder to synchronize. - Cliquez sur ce bouton pour ajouter un dossier à synchroniser. + %1 %2 + Example text: "Uploading foobar.png" + %1 %2 - Could not decrypt! - Déchiffrage impossible ! + %1 %2 (%3 of %4) + Example text: "Uploading foobar.png (2MB of 2MB)" + %1 %2 (%3 sur %4) - %1 (%2) - %1 (%2) + %1 %2 … + Example text: "Uploading foobar.png (1MB of 2MB) time left 2 minutes at a rate of 24Kb/s" Example text: "Syncing 'foo.txt', 'bar.txt'" + %1 %2 … - Error while loading the list of folders from the server. - Une erreur est survenue lors du chargement de la liste des dossiers depuis le serveur. + %1 (%2) + %1 (%2) - Virtual file support is enabled. - Support des fichiers virtuels activé. + %1 of %2, file %3 of %4 + Example text: "12 MB of 345 MB, file 6 of 7" + %1 sur %2, fichier %3 sur %4 - Signed out - Session fermée + %5 left, %1 of %2, file %3 of %4 + %5 restantes, %1 sur %2, fichier %3 sur %4 - Synchronizing virtual files in local folder - Synchronisation des fichiers virtuels dans le dossier local + , + , - Synchronizing files in local folder - Synchronisation des fichiers dans le dossier local + A few seconds left, %1 of %2, file %3 of %4 + Example text: "5 minutes left, 12 MB of 345 MB, file 6 of 7" + Quelques secondes restantes, %1 de %2, fichier %3 parmi %4 - Checking for changes in remote "%1" - Vérification des modifications dans "%1" distant + About to start syncing + Sur le point de démarrer la synchronisation Checking for changes in local "%1" Vérification des modifications dans "%1" local - Syncing local and remote changes - Synchronisation des changements locaux et distants + Checking for changes in remote "%1" + Vérification des modifications dans "%1" distant - %1 %2 … - Example text: "Uploading foobar.png (1MB of 2MB) time left 2 minutes at a rate of 24Kb/s" Example text: "Syncing 'foo.txt', 'bar.txt'" - %1 %2 … + Click this button to add a folder to synchronize. + Cliquez sur ce bouton pour ajouter un dossier à synchroniser. + + + Could not decrypt! + Déchiffrage impossible ! Download %1/s @@ -2070,57 +2091,49 @@ Pour les utilisateurs avancés: ce problème peut aussi venir de plusieurs fichi Télécharger %1/s - File %1 of %2 - Fichier %1 sur %2 - - - There are unresolved conflicts. Click for details. - Il y a des conflits non résolus. Cliquez pour plus de détails. - - - , - , + Error while loading the list of folders from the server. + Une erreur est survenue lors du chargement de la liste des dossiers depuis le serveur. Fetching folder list from server … Récupération de la liste des dossiers depuis le serveur... - ↓ %1/s - ↓ %1/s + File %1 of %2 + Fichier %1 sur %2 - Upload %1/s - Example text: "Upload 24Kb/s" (%1 is replaced by 24Kb (translated)) - Téléverser %1/s + Preparing to sync … + Préparation de la synchronisation ... + + + Signed out + Session fermée - ↑ %1/s - ↑ %1/s + Synchronizing files in local folder + Synchronisation des fichiers dans le dossier local - %1 %2 (%3 of %4) - Example text: "Uploading foobar.png (2MB of 2MB)" - %1 %2 (%3 sur %4) + Synchronizing virtual files in local folder + Synchronisation des fichiers virtuels dans le dossier local - %1 %2 - Example text: "Uploading foobar.png" - %1 %2 + Syncing local and remote changes + Synchronisation des changements locaux et distants - A few seconds left, %1 of %2, file %3 of %4 - Example text: "5 minutes left, 12 MB of 345 MB, file 6 of 7" - Quelques secondes restantes, %1 de %2, fichier %3 parmi %4 + There are unresolved conflicts. Click for details. + Il y a des conflits non résolus. Cliquez pour plus de détails. - %5 left, %1 of %2, file %3 of %4 - %5 restantes, %1 sur %2, fichier %3 sur %4 + Upload %1/s + Example text: "Upload 24Kb/s" (%1 is replaced by 24Kb (translated)) + Téléverser %1/s - %1 of %2, file %3 of %4 - Example text: "12 MB of 345 MB, file 6 of 7" - %1 sur %2, fichier %3 sur %4 + Virtual file support is enabled. + Support des fichiers virtuels activé. Waiting for %n other folder(s) … @@ -2130,14 +2143,18 @@ Pour les utilisateurs avancés: ce problème peut aussi venir de plusieurs fichi - About to start syncing - Sur le point de démarrer la synchronisation + You need to be connected to add a folder + Vous devez être connecté pour ajouter un dossier - Preparing to sync … - Préparation de la synchronisation ... + ↑ %1/s + ↑ %1/s - + + ↓ %1/s + ↓ %1/s + + OCC::FolderWatcher @@ -2181,20 +2198,20 @@ Pour les utilisateurs avancés: ce problème peut aussi venir de plusieurs fichi OCC::FolderWizardRemotePath - Create Remote Folder - Créer un dossier distant + Authentication failed accessing %1 + Erreur d'authentification lors de l'accès à %1 - Enter the name of the new folder to be created below "%1": - Entrez le nom du nouveau dossier à créer dans "%1" : + Choose this to sync the entire account + Sélectionnez ceci pour synchroniser l'ensemble du compte - Folder was successfully created on %1. - Le dossier a été créé sur %1 + Create Remote Folder + Créer un dossier distant - Authentication failed accessing %1 - Erreur d'authentification lors de l'accès à %1 + Enter the name of the new folder to be created below "%1": + Entrez le nom du nouveau dossier à créer dans "%1" : Failed to create the folder on %1. Please check manually. @@ -2205,8 +2222,8 @@ Pour les utilisateurs avancés: ce problème peut aussi venir de plusieurs fichi Impossible de lister un dossier. Erreur : %1 - Choose this to sync the entire account - Sélectionnez ceci pour synchroniser l'ensemble du compte + Folder was successfully created on %1. + Le dossier a été créé sur %1 Please choose a different location. %1 is already being synced to %2. @@ -2215,216 +2232,173 @@ Pour les utilisateurs avancés: ce problème peut aussi venir de plusieurs fichi OCC::FolderWizardSelectiveSync - - Use virtual files instead of downloading content immediately %1 - Utiliser les fichiers virtuels au lieu de télécharger le contenu immédiatement %1 - (experimental) (expérimental) - Virtual files are not supported for Windows partition roots as local folder. Please choose a valid subfolder under drive letter. - Vous ne pouvez pas définir la racine d'une partition Windows pour votre dossier local. Veuillez choisir un (sous)dossier de la partition. + Use virtual files instead of downloading content immediately %1 + Utiliser les fichiers virtuels au lieu de télécharger le contenu immédiatement %1 Virtual files are not supported at the selected location Les fichiers virtuels ne sont pas pris en charge à l'emplacement sélectionné - - - OCC::GETFileJob - - No E-Tag received from server, check Proxy/Gateway - Aucun E-Tag reçu du serveur, vérifiez le proxy / la passerelle - - - We received a different E-Tag for resuming. Retrying next time. - Nous avons reçu un E-Tag différent pour reprendre le téléchargement. Nouvel essai la prochaine fois. - - - We received an unexpected download Content-Length. - Nous avons reçu un téléchargement de Contenu-Longeur inattendu - - - Server returned wrong content-range - Le serveur a retourné une gamme de contenu erronée - - - Connection Timeout - Délai d'attente de connexion dépassé + + Virtual files are not supported for Windows partition roots as local folder. Please choose a valid subfolder under drive letter. + Vous ne pouvez pas définir la racine d'une partition Windows pour votre dossier local. Veuillez choisir un (sous)dossier de la partition. - + OCC::GeneralSettings - General Settings - Paramètres généraux + &Automatically check for updates + &Vérifier automatiquement les mises à jour - Show Call Notifications - Afficher les notifications d'appel + &Launch on System Startup + &Lancer au démarrage du système - For System Tray - Pour la zone de notification système + &Restart && Update + Redémarrer et Mettre à jour - Show Chat Notifications - Afficher les notifications de discussion + - beta: contains versions with new features that may not be tested thoroughly +- daily: contains versions created daily only for testing and development + +Downgrading versions is not possible immediately: changing from beta to stable means waiting for the new stable version. + list of available update channels to non enterprise users and downgrading warning + - bêta: contient des versions avec de nouvelles fonctionnalités qui ne peuvent pas être testées en profondeur +- quotidien: contient des versions créées quotidiennement uniquement à des fins de test et de développement + +La rétrogradation des versions n'est pas possible immédiatement: passer de la version bêta à la version stable signifie attendre la nouvelle version stable. - Show Server &Notifications - Afficher les &notifications serveur + - enterprise: contains stable versions for customers. + +Downgrading versions is not possible immediately: changing from stable to enterprise means waiting for the new enterprise version. + list of available update channels to enterprise users and downgrading warning + - entreprise: contient des versions stables pour les clients. + +La rétrogradation des versions n'est pas possible immédiatement: passer de stable à entreprise signifie attendre la nouvelle version d'entreprise. Advanced Avancés - - MB - Trailing part of "Ask confirmation before syncing folder larger than" - Mo - Ask for confirmation before synchronizing external storages Demander confirmation avant de synchroniser des stockages externes - - &Launch on System Startup - &Lancer au démarrage du système - - - Use &Monochrome Icons - Utiliser les icônes &monochromes - Ask for confirmation before synchronizing new folders larger than Demander confirmation avant de synchroniser les dossiers plus grands que - - Notify when synchronised folders grow larger than specified limit - Notifier lorsque les dossiers synchronisés dépassent la limite spécifiée - Automatically disable synchronisation of folders that overcome limit Désactiver automatiquement la synchronisation des dossiers qui dépassent la limite fixée - Move removed files to trash - Déplacer les fichiers supprimés vers la corbeille - - - Show sync folders in &Explorer's navigation pane - Afficher les dossiers synchronisés dans le panneau de navigation de l'&Explorateur de fichiers - - - S&how crash reporter - Affic&her le rapport d'incident + Cancel + Annuler - Server poll interval - Intervalle de vérification du serveur + Change update channel + Changer de canal de mise à jour - seconds (if <a href="https://github.com/nextcloud/notify_push">Client Push</a> is unavailable) - secondes (si le Client Push n'est pas disponible) + Changing update channel? + Changement du canal de mise à jour ? - Edit &Ignored Files - Modifier les fichiers exclus + Check Now + Vérifier maintenant Create Debug Archive Créer une archive de débogage - Info - Informations + Debug Archive Created + Archive de débogage créée + Debug archive is created at %1 + Archive de débogage créée à %1 + + Desktop client x.x.x Client de bureau x.x.x - Update channel - Canal de mise à jour + Edit &Ignored Files + Modifier les fichiers exclus - &Automatically check for updates - &Vérifier automatiquement les mises à jour + For System Tray + Pour la zone de notification système - Check Now - Vérifier maintenant + General Settings + Paramètres généraux - Usage Documentation - Documentation d'utilisation + Info + Informations Legal Notice Mentions légales - &Restart && Update - Redémarrer et Mettre à jour + MB + Trailing part of "Ask confirmation before syncing folder larger than" + Mo - Server notifications that require attention. - Notifications du serveur requérant votre attention. + Move removed files to trash + Déplacer les fichiers supprimés vers la corbeille - Show chat notification dialogs. - Afficher les boîtes de dialogue de notification de chat. + Notify when synchronised folders grow larger than specified limit + Notifier lorsque les dossiers synchronisés dépassent la limite spécifiée - Show call notification dialogs. - Montre les fenêtres de notification d'appel. + S&how crash reporter + Affic&her le rapport d'incident - You cannot disable autostart because system-wide autostart is enabled. - Vous ne pouvez pas désactiver le démarrage automatique parce que le démarrage automatique à l'échelle du système est activé. + Server notifications that require attention. + Notifications du serveur requérant votre attention. - stable - stable + Server poll interval + Intervalle de vérification du serveur - beta - bêta + Show Call Notifications + Afficher les notifications d'appel - daily - quotidien + Show Chat Notifications + Afficher les notifications de discussion - enterprise - enterprise + Show Server &Notifications + Afficher les &notifications serveur - - beta: contains versions with new features that may not be tested thoroughly -- daily: contains versions created daily only for testing and development - -Downgrading versions is not possible immediately: changing from beta to stable means waiting for the new stable version. - list of available update channels to non enterprise users and downgrading warning - - bêta: contient des versions avec de nouvelles fonctionnalités qui ne peuvent pas être testées en profondeur -- quotidien: contient des versions créées quotidiennement uniquement à des fins de test et de développement - -La rétrogradation des versions n'est pas possible immédiatement: passer de la version bêta à la version stable signifie attendre la nouvelle version stable. + Show call notification dialogs. + Montre les fenêtres de notification d'appel. - - enterprise: contains stable versions for customers. - -Downgrading versions is not possible immediately: changing from stable to enterprise means waiting for the new enterprise version. - list of available update channels to enterprise users and downgrading warning - - entreprise: contient des versions stables pour les clients. - -La rétrogradation des versions n'est pas possible immédiatement: passer de stable à entreprise signifie attendre la nouvelle version d'entreprise. + Show chat notification dialogs. + Afficher les boîtes de dialogue de notification de chat. - Changing update channel? - Changement du canal de mise à jour ? + Show sync folders in &Explorer's navigation pane + Afficher les dossiers synchronisés dans le panneau de navigation de l'&Explorateur de fichiers The channel determines which upgrades will be offered to install: @@ -2436,40 +2410,71 @@ La rétrogradation des versions n'est pas possible immédiatement: passer d - Change update channel - Changer de canal de mise à jour + Update channel + Canal de mise à jour - Cancel - Annuler + Usage Documentation + Documentation d'utilisation + + + Use &Monochrome Icons + Utiliser les icônes &monochromes + + + You cannot disable autostart because system-wide autostart is enabled. + Vous ne pouvez pas désactiver le démarrage automatique parce que le démarrage automatique à l'échelle du système est activé. Zip Archives Archives Zip - Debug Archive Created - Archive de débogage créée + beta + bêta - Debug archive is created at %1 - Archive de débogage créée à %1 + daily + quotidien - + + enterprise + enterprise + + + seconds (if <a href="https://github.com/nextcloud/notify_push">Client Push</a> is unavailable) + secondes (si le Client Push n'est pas disponible) + + + stable + stable + + - OCC::GetOrCreatePublicLinkShare + OCC::GETFileJob - Password for share required - Mot de passe requis + Connection Timeout + Délai d'attente de connexion dépassé + + + No E-Tag received from server, check Proxy/Gateway + Aucun E-Tag reçu du serveur, vérifiez le proxy / la passerelle - Please enter a password for your link share: - Veuillez saisir un mot de passe pour votre lien partagé : + Server returned wrong content-range + Le serveur a retourné une gamme de contenu erronée - Sharing error - Erreur de partage + We received a different E-Tag for resuming. Retrying next time. + Nous avons reçu un E-Tag différent pour reprendre le téléchargement. Nouvel essai la prochaine fois. + + + We received an unexpected download Content-Length. + Nous avons reçu un téléchargement de Contenu-Longeur inattendu + + + OCC::GetOrCreatePublicLinkShare Could not retrieve or create the public link share. Error: @@ -2478,43 +2483,55 @@ La rétrogradation des versions n'est pas possible immédiatement: passer d %1 - - - OCC::HttpCredentialsGui + + Password for share required + Mot de passe requis + - Please enter %1 password:<br><br>Username: %2<br>Account: %3<br> - Merci de saisir %1 mot de passe :<br><br>Identifiant : %2<br>Compte : %3<br> + Please enter a password for your link share: + Veuillez saisir un mot de passe pour votre lien partagé : - Reading from keychain failed with error: "%1" - La lecture à partir du trousseau a échoué avec l'erreur : "%1" + Sharing error + Erreur de partage + + + OCC::HttpCredentialsGui + <a href="%1">Click here</a> to request an app password from the web interface. + <a href="%1">Cliquez ici</a> pour demander un mot de passe d'application depuis l'interface web. + + Enter Password Saisissez le mot de passe - <a href="%1">Click here</a> to request an app password from the web interface. - <a href="%1">Cliquez ici</a> pour demander un mot de passe d'application depuis l'interface web. + Please enter %1 password:<br><br>Username: %2<br>Account: %3<br> + Merci de saisir %1 mot de passe :<br><br>Identifiant : %2<br>Compte : %3<br> - + + Reading from keychain failed with error: "%1" + La lecture à partir du trousseau a échoué avec l'erreur : "%1" + + OCC::IgnoreListEditor - Ignored Files Editor - Éditeur d'exclusion de fichiers + Files Ignored by Patterns + Fichiers ignorés par modèles Global Ignore Settings Paramètres globaux d'exclusion - Sync hidden files - Synchroniser les fichiers cachés + Ignored Files Editor + Éditeur d'exclusion de fichiers - Files Ignored by Patterns - Fichiers ignorés par modèles + Sync hidden files + Synchroniser les fichiers cachés This entry is provided by the system at "%1" and cannot be modified in this view. @@ -2524,24 +2541,28 @@ La rétrogradation des versions n'est pas possible immédiatement: passer d OCC::IgnoreListTableWidget - Pattern - Modèle + Add + Ajouter - Allow Deletion - Autoriser la suppression + Add Ignore Pattern + Ajouter un modèle d'exclusion - Add - Ajouter + Add a new ignore pattern: + Ajouter un nouveau modèle d'exclusion : + + + Allow Deletion + Autoriser la suppression - Remove - Retirer + Cannot write changes to "%1". + Impossible d'écrire les modifications sur "%1". - Remove all - Tout retirer + Could not open file + Impossible d'ouvrir le fichier Files or folders matching a pattern will not be synchronized. @@ -2551,131 +2572,119 @@ Items where deletion is allowed will be deleted if they prevent a directory from Les éléments dont la suppression est autorisée seront supprimés s'ils empêchent la suppression d'un répertoire. Cette fonction est utile pour les métadonnées. - Could not open file - Impossible d'ouvrir le fichier - - - Cannot write changes to "%1". - Impossible d'écrire les modifications sur "%1". + Pattern + Modèle - Add Ignore Pattern - Ajouter un modèle d'exclusion + Remove + Retirer - Add a new ignore pattern: - Ajouter un nouveau modèle d'exclusion : + Remove all + Tout retirer - + OCC::InvalidFilenameDialog - Invalid filename - Nom de fichier invalide + Cannot rename file because a file with the same name does already exist on the server. Please pick another name. + Impossible de renommer le fichier parce qu'un fichier avec le même nom existe déjà sur le serveur. Merci de choisir un autre nom. - The file could not be synced because it contains characters which are not allowed on this system. - Le fichier n'a pas pu être synchronisé parce qu'il contiens des caractères invalides ou non-supportés par votre système. + Checking rename permissions … + Vérification des permissions de renommage... + + + Could not rename file. Please make sure you are connected to the server. + Impossible de renommer le fichier. Veuillez vous certifier que vous êtes bien connecté au serveur. + Could not rename local file. %1 + Impossible de renommer le dossier local %1 + + Error Erreur - Please enter a new name for the file: - Veuillez saisir le nouveau nom du fichier : + Failed to fetch permissions with error %1 + Erreur à la récupération des permissions : %1 - New filename - Nouveau nom de fichier + Filename contains illegal characters: %1 + Le nom du fichier contiens des caractères illégaux: %1 - Rename file - Renommer le fichier + Filename contains leading and trailing spaces. + Le nom de fichier contient des espaces en début ou en fin de chaîne. - The file "%1" could not be synced because the name contains characters which are not allowed on this system. - Le fichier "%1" n'a pas pu être synchronisé car son nom contient des caractères qui ne sont pas autorisés sur ce système. + Filename contains leading spaces. + Le nom du fichier contient des espaces au début. - The following characters are not allowed on the system: \ / : ? * " < > | leading/trailing spaces - Les caractères suivants ne sont pas autorisés sur ce système : \ / : ? * " < > | espaces en début et fin de chaîne + Filename contains trailing spaces. + Le nom de fichier contient des espaces à la fin. - The file "%1" could not be synced because the name contains characters which are not allowed on the server. - Le fichier "%1" n'a pas pu être synchronisé, car le nom contient des caractères qui ne sont pas autorisés sur le serveur. + Invalid filename + Nom de fichier invalide - The following characters are not allowed: %1 - Les caractères suivants ne sont pas autorisés : %1 + New filename + Nouveau nom de fichier - The following basenames are not allowed: %1 - Les noms de base suivants de fichiers ne sont pas autorisés : %1 + Please enter a new name for the file: + Veuillez saisir le nouveau nom du fichier : - The following filenames are not allowed: %1 - Les noms de fichiers suivants ne sont pas autorisés : %1 + Rename file + Renommer le fichier - The following file extensions are not allowed: %1 - Les extensions de fichiers suivantes ne sont pas autorisées : %1 - - - Checking rename permissions … - Vérification des permissions de renommage... - - - You don't have the permission to rename this file. Please ask the author of the file to rename it. - Vous n'avez pas la permission de renommer ce fichier. Veuillez demander à son auteur de le renommer. + The file "%1" could not be synced because the name contains characters which are not allowed on the server. + Le fichier "%1" n'a pas pu être synchronisé, car le nom contient des caractères qui ne sont pas autorisés sur le serveur. - Failed to fetch permissions with error %1 - Erreur à la récupération des permissions : %1 + The file "%1" could not be synced because the name contains characters which are not allowed on this system. + Le fichier "%1" n'a pas pu être synchronisé car son nom contient des caractères qui ne sont pas autorisés sur ce système. - Filename contains leading and trailing spaces. - Le nom de fichier contient des espaces en début ou en fin de chaîne. + The file could not be synced because it contains characters which are not allowed on this system. + Le fichier n'a pas pu être synchronisé parce qu'il contiens des caractères invalides ou non-supportés par votre système. - Filename contains leading spaces. - Le nom du fichier contient des espaces au début. + The following basenames are not allowed: %1 + Les noms de base suivants de fichiers ne sont pas autorisés : %1 - Filename contains trailing spaces. - Le nom de fichier contient des espaces à la fin. + The following characters are not allowed on the system: \ / : ? * " < > | leading/trailing spaces + Les caractères suivants ne sont pas autorisés sur ce système : \ / : ? * " < > | espaces en début et fin de chaîne - Use invalid name - Nom invalide + The following characters are not allowed: %1 + Les caractères suivants ne sont pas autorisés : %1 - Filename contains illegal characters: %1 - Le nom du fichier contiens des caractères illégaux: %1 + The following file extensions are not allowed: %1 + Les extensions de fichiers suivantes ne sont pas autorisées : %1 - Could not rename file. Please make sure you are connected to the server. - Impossible de renommer le fichier. Veuillez vous certifier que vous êtes bien connecté au serveur. + The following filenames are not allowed: %1 + Les noms de fichiers suivants ne sont pas autorisés : %1 - Cannot rename file because a file with the same name does already exist on the server. Please pick another name. - Impossible de renommer le fichier parce qu'un fichier avec le même nom existe déjà sur le serveur. Merci de choisir un autre nom. + Use invalid name + Nom invalide - Could not rename local file. %1 - Impossible de renommer le dossier local %1 + You don't have the permission to rename this file. Please ask the author of the file to rename it. + Vous n'avez pas la permission de renommer ce fichier. Veuillez demander à son auteur de le renommer. - + OCC::LegalNotice - - Legal notice - Notice légale - - - Close - Fermer - <p>Copyright 2017-2025 Nextcloud GmbH<br />Copyright 2012-2023 ownCloud GmbH</p> <p>Copyright 2017-2025 Nextcloud GmbH<br />Copyright 2012-2023 ownCloud GmbH</p> @@ -2684,14 +2693,30 @@ Les éléments dont la suppression est autorisée seront supprimés s'ils e <p>Licensed under the GNU General Public License (GPL) Version 2.0 or any later version.</p> <p>Sous licence GNU General Public License (GPL) Version 2.0 ou supérieure.</p> - + + Close + Fermer + + + Legal notice + Notice légale + + OCC::LogBrowser + + Enable logging to temporary folder + Activer la journalisation dans le dossier temporaire + Log Output Consigner la sortie dans des fichiers de log + Open folder + Ouvrir le dossier + + The client can write debug logs to a temporary folder. These logs are very helpful for diagnosing problems. Since log files can get large, the client will start a new one for each sync run and compress older ones. It will also delete log files after a couple of hours to avoid consuming too much disk space. If enabled, logs will be written to %1 @@ -2699,38 +2724,26 @@ If enabled, logs will be written to %1 Comme ces fichiers de log peuvent devenir lourds, le client en commence un nouveau à chaque synchronisation et compresse les anciens. Il supprime aussi les logs après quelques heures pour économiser l'espace disque. Si activés, les logs seront écrits dans %1 - - Enable logging to temporary folder - Activer la journalisation dans le dossier temporaire - This setting persists across client restarts. Note that using any logging command line options will override this setting. Ce paramètre persiste lors des redémarrages du client. Notez que l'utilisation de toute option de ligne de commande de journalisation remplacera ce paramètre. - - Open folder - Ouvrir le dossier - - + OCC::Logger - - Error - Erreur - <nobr>File "%1"<br/>cannot be opened for writing.<br/><br/>The log output <b>cannot</b> be saved!</nobr> <nobr>Le fichier "%1"<br/>ne peut pas être ouvert en écriture.<br/><br/>Le fichier journal <b>ne peut pas</b> être sauvegardé !</nobr> - + + Error + Erreur + + OCC::Mac::FileProviderEditLocallyJob - - Could not start editing locally. - Impossible de démarrer l'édition locale. - An error occurred during setup. Une erreur est survenue pendant l'installation @@ -2747,178 +2760,178 @@ Notez que l'utilisation de toute option de ligne de commande de journalisat Could not get file identifier. Impossible d'obtenir l'identifiant du fichier. + + Could not start editing locally. + Impossible de démarrer l'édition locale. + The file identifier is empty. L'identifiant du fichier est vide. - OCC::NSISUpdater - - New Version Available - Nouvelle version disponible - - - <p>A new version of the %1 Client is available.</p><p><b>%2</b> is available for download. The installed version is %3.</p> - <p>Une nouvelle version du client %1 est disponible.</p><p><b>%2</b> est disponible en téléchargement. La version actuellement installée est %3.<p> - + OCC::NetworkSettings - Update Failed - Échec de mise à jour + Download Bandwidth + Bande passante de réception - <p>A new version of the %1 Client is available but the updating process failed.</p><p><b>%2</b> has been downloaded. The installed version is %3. If you confirm restart and update, your computer may reboot to complete the installation.</p> - <p>Une nouvelle version du Client %1 est disponible mais la mise à jour a échoué.</p><p><b>%2</b> a été téléchargé. La version installée est %3. Si vous confirmez le redémarrage et la mise à jour, votre ordinateur peut redémarrer pour terminer l'installation.</p> + HTTP(S) proxy + Proxy HTTP(S) - Ask again later - Demander plus tard + Host + Hôte - Restart and update - Redémarrer et mettre à jour + Hostname of proxy server + Nom d'hôte du serveur proxy - Update manually - Mettre à jour manuellement + KBytes/s + Ko/s - Skip this time - Ignorer pour cette fois + Limit automatically + Limiter automatiquement - Get update - Télécharger la version + Limit to + Limiter à - - - OCC::NetworkSettings - Proxy Settings - Paramètres de serveur proxy + Limit to 3/4 of estimated bandwidth + Limiter aux 3/4 de la bande passante estimée - Use system proxy - Utiliser les paramètres du système + Manually specify proxy + Spécifier manuellement le serveur proxy - Host - Hôte + No limit + Aucune limite - Proxy server requires authentication - Le serveur proxy requiert une authentification + No proxy + Aucun serveur proxy - Download Bandwidth - Bande passante de réception + Note: proxy settings have no effects for accounts on localhost + Remarque: les paramètres de proxy n'ont aucun effet sur les comptes sur localhost - Limit to - Limiter à + Password for proxy server + Mot de passe pour le serveur proxy - KBytes/s - Ko/s + Proxy Settings + Paramètres de serveur proxy - Note: proxy settings have no effects for accounts on localhost - Remarque: les paramètres de proxy n'ont aucun effet sur les comptes sur localhost + Proxy server requires authentication + Le serveur proxy requiert une authentification - Manually specify proxy - Spécifier manuellement le serveur proxy + SOCKS5 proxy + Proxy SOCKS5 - - No proxy - Aucun serveur proxy + + Upload Bandwidth + Bande passante d'émission Use global settings Utiliser les paramètres globaux - No limit - Aucune limite + Use system proxy + Utiliser les paramètres du système - Limit to 3/4 of estimated bandwidth - Limiter aux 3/4 de la bande passante estimée + Username for proxy server + Nom d’utilisateur pour le serveur proxy + + + OCC::NSISUpdater - Upload Bandwidth - Bande passante d'émission + <p>A new version of the %1 Client is available but the updating process failed.</p><p><b>%2</b> has been downloaded. The installed version is %3. If you confirm restart and update, your computer may reboot to complete the installation.</p> + <p>Une nouvelle version du Client %1 est disponible mais la mise à jour a échoué.</p><p><b>%2</b> a été téléchargé. La version installée est %3. Si vous confirmez le redémarrage et la mise à jour, votre ordinateur peut redémarrer pour terminer l'installation.</p> - Limit automatically - Limiter automatiquement + <p>A new version of the %1 Client is available.</p><p><b>%2</b> is available for download. The installed version is %3.</p> + <p>Une nouvelle version du client %1 est disponible.</p><p><b>%2</b> est disponible en téléchargement. La version actuellement installée est %3.<p> - Hostname of proxy server - Nom d'hôte du serveur proxy + Ask again later + Demander plus tard - Username for proxy server - Nom d’utilisateur pour le serveur proxy + Get update + Télécharger la version - - Password for proxy server - Mot de passe pour le serveur proxy + + New Version Available + Nouvelle version disponible - HTTP(S) proxy - Proxy HTTP(S) + Restart and update + Redémarrer et mettre à jour - SOCKS5 proxy - Proxy SOCKS5 + Skip this time + Ignorer pour cette fois - - - OCC::OCUpdater - Could not check for new updates. - Impossible de vérifier la présence de nouvelles mises à jour. + Update Failed + Échec de mise à jour - Checking update server … - Vérification du serveur de mises à jour ... + Update manually + Mettre à jour manuellement + + + OCC::OCUpdater - New %1 update ready - Une nouvelle mise à jour de %1 est disponible + %1 available. Restart application to start the update. + %1 disponible. Redémarrez l'application pour effectuer la mise à jour. A new update for %1 is about to be installed. The updater may ask for additional privileges during the process. Your computer may reboot to complete the installation. Une nouvelle mise à jour pour %1 est sur le point d'être installée. Le dispositif de mise à jour peut demander des autorisations supplémentaires au cours du processus. Votre ordinateur peut nécessiter un redémarrage pour terminer l'installation. - Downloading %1 … - Téléchargement de %1 … - - - %1 available. Restart application to start the update. - %1 disponible. Redémarrez l'application pour effectuer la mise à jour. + Checking update server … + Vérification du serveur de mises à jour ... - Could not download update. Please open <a href='%1'>%1</a> to download the update manually. - Impossible de télécharger la mise à jour. Merci d'ouvrir <a href='%1'>%1</a> pour télécharger la mise à jour manuellement. + Could not check for new updates. + Impossible de vérifier la présence de nouvelles mises à jour. Could not download update. Please open %1 to download the update manually. Impossible de télécharger la mise à jour. Ouvrez %1 pour télécharger manuellement la mise à jour. - New %1 is available. Please open <a href='%2'>%2</a> to download the update. - Un nouveau %1 est disponible. Merci d'ouvrir <a href='%2'>%2</a> pour télécharger la mise à jour. + Could not download update. Please open <a href='%1'>%1</a> to download the update manually. + Impossible de télécharger la mise à jour. Merci d'ouvrir <a href='%1'>%1</a> pour télécharger la mise à jour manuellement. + + + Downloading %1 … + Téléchargement de %1 … New %1 is available. Please open %2 to download the update. Un nouveau %1 est disponible. Merci d'ouvrir %2 pour télécharger la mise à jour. - Update status is unknown: Did not check for new updates. - L'état du processus de mise à jour est inconnu. Impossible de vérifier la présence de mises à jour. + New %1 is available. Please open <a href='%2'>%2</a> to download the update. + Un nouveau %1 est disponible. Merci d'ouvrir <a href='%2'>%2</a> pour télécharger la mise à jour. + + + New %1 update ready + Une nouvelle mise à jour de %1 est disponible No updates available. Your installation is at the latest version. @@ -2928,90 +2941,166 @@ Notez que l'utilisation de toute option de ligne de commande de journalisat Update Check Recherche de mise à jour - + + Update status is unknown: Did not check for new updates. + L'état du processus de mise à jour est inconnu. Impossible de vérifier la présence de mises à jour. + + OCC::OwncloudAdvancedSetupPage - Connect - Connexion + %1 folder "%2" is synced to local folder "%3" + Le dossier %1 "%2" est synchronisé avec le dossier local "%3". + + + %1 free space + %1 gets replaced with the size and a matching unit. Example: 3 MB or 5 GB + espace libre %1 + + + (%1) + (%1) (experimental) (expérimental) - Use &virtual files instead of downloading content immediately %1 - Utiliser les fichiers virtuels plutôt que de télécharger le contenu immédiatement %1 + Connect + Connexion - Virtual files are not supported for Windows partition roots as local folder. Please choose a valid subfolder under drive letter. - Les fichiers virtuels ne sont pas pris en charge pour les racines de partition Windows en tant que dossier local. Veuillez choisir un sous-dossier valide sous la lettre du lecteur. + In Finder's "Locations" sidebar section + Dans la section « Emplacements » de la barre latérale du Finder - - %1 folder "%2" is synced to local folder "%3" - Le dossier %1 "%2" est synchronisé avec le dossier local "%3". + + Local Sync Folder + Dossier de synchronisation local Sync the folder "%1" Synchroniser le dossier "%1" - Warning: The local folder is not empty. Pick a resolution! - Avertissement : Le dossier local n'est pas vide. Choisissez une option. + There isn't enough free space in the local folder! + L'espace libre dans le dossier local est insuffisant ! - %1 free space - %1 gets replaced with the size and a matching unit. Example: 3 MB or 5 GB - espace libre %1 + Use &virtual files instead of downloading content immediately %1 + Utiliser les fichiers virtuels plutôt que de télécharger le contenu immédiatement %1 Virtual files are not supported at the selected location Les fichiers virtuels ne sont pas pris en charge à l'emplacement sélectionné - Local Sync Folder - Dossier de synchronisation local + Virtual files are not supported for Windows partition roots as local folder. Please choose a valid subfolder under drive letter. + Les fichiers virtuels ne sont pas pris en charge pour les racines de partition Windows en tant que dossier local. Veuillez choisir un sous-dossier valide sous la lettre du lecteur. - (%1) - (%1) + Warning: The local folder is not empty. Pick a resolution! + Avertissement : Le dossier local n'est pas vide. Choisissez une option. + + + OCC::OwncloudConnectionMethodDialog - There isn't enough free space in the local folder! - L'espace libre dans le dossier local est insuffisant ! + <html><head/><body><p>Failed to connect to the secure server address <em>%1</em>. How do you wish to proceed?</p></body></html> + <html><head/><body><p>Impossible de se connecter à l'adresse sécurisée <em>%1</em>. Que souhaitez-vous faire ?</p></body></html> + + + <html><head/><body><p>Failed to connect to the secure server address specified. How do you wish to proceed?</p></body></html> + <html><head/><body><p>Impossible de se connecter au serveur via l'adresse sécurisée indiquée. Que souhaitez-vous faire ?</p></body></html> - In Finder's "Locations" sidebar section - Dans la section « Emplacements » de la barre latérale du Finder + Configure client-side TLS certificate + Configurer le certificat TLS client - - - OCC::OwncloudConnectionMethodDialog Connection failed Échec de la connexion - <html><head/><body><p>Failed to connect to the secure server address specified. How do you wish to proceed?</p></body></html> - <html><head/><body><p>Impossible de se connecter au serveur via l'adresse sécurisée indiquée. Que souhaitez-vous faire ?</p></body></html> + Retry unencrypted over HTTP (insecure) + Essayer en clair sur HTTP (non sécurisé) Select a different URL Choisir une URL différente + + + OCC::ownCloudGui - Retry unencrypted over HTTP (insecure) - Essayer en clair sur HTTP (non sécurisé) + %1 (%2, %3) + %1 (%2, %3) + + + %1: %2 + Example text: "Nextcloud: Syncing 25MB (3 minutes left)" (%1 is the folder name to be synced, %2 a status message for that folder) + %1: %2 - Configure client-side TLS certificate - Configurer le certificat TLS client + Account %1: %2 + Compte %1 : %2 - <html><head/><body><p>Failed to connect to the secure server address <em>%1</em>. How do you wish to proceed?</p></body></html> - <html><head/><body><p>Impossible de se connecter à l'adresse sécurisée <em>%1</em>. Que souhaitez-vous faire ?</p></body></html> + Account synchronization is disabled + La synchronisation est en pause - + + Checking for changes in local "%1" + Vérification des modifications dans "%1" local + + + Checking for changes in remote "%1" + Vérification des modifications dans "%1" distant + + + Disconnected from %1 + Déconnecté de %1 + + + Disconnected from accounts: + Déconnecté des comptes : + + + Please sign in + Veuillez vous connecter + + + Terms of service + Conditions d'utilisation + + + The server on account %1 runs an unsupported version %2. Using this client with unsupported server versions is untested and potentially dangerous. Proceed at your own risk. + Le serveur sur le compte %1 fonctionne avec une version non-supportée %2. Utiliser ce client avec des versions non-supportées du serveur n'est pas testé et est potentiellement dangereux. Procédez à vos risques et périls. + + + There are no sync folders configured. + Aucun dossier à synchroniser n'est configuré + + + Unsupported Server Version + Version du Serveur non prise en charge + + + Your account %1 requires you to accept the terms of service of your server. You will be redirected to %2 to acknowledge that you have read it and agrees with it. + Votre compte %1 vous demande d'accepter les conditions générales d'utilisation de votre serveur. Vous serez redirigé vers %2 pour confirmer que vous l'avez lu et que vous l'acceptez. + + + macOS VFS for %1: A problem was encountered. + macOS VFS pour %1: Une erreur est survenue. + + + macOS VFS for %1: Last sync was successful. + macOS VFS pour %1: La dernière synchronisation a réussi. + + + macOS VFS for %1: Sync is running. + macOS VFS pour %1: Synchronisation en cours. + + OCC::OwncloudHttpCredsPage @@ -3036,161 +3125,157 @@ Notez que l'utilisation de toute option de ligne de commande de journalisat OCC::OwncloudSetupPage - - The link to your %1 web interface when you open it in the browser. - %1 will be replaced with the application name - Adresse URL visible dans la barre d'adresse de votre navigateur Web lorsque vous êtes connecté à %1. - &Next > &Suivant > + Could not load certificate. Maybe wrong password? + Impossible de charger le certificat. Vérifiez le mot de passe saisi. + + Server address does not seem to be valid L'adresse du serveur ne semble pas être valide - Could not load certificate. Maybe wrong password? - Impossible de charger le certificat. Vérifiez le mot de passe saisi. + The link to your %1 web interface when you open it in the browser. + %1 will be replaced with the application name + Adresse URL visible dans la barre d'adresse de votre navigateur Web lorsque vous êtes connecté à %1. - + OCC::OwncloudSetupWizard + <font color="green"><b>File Provider-based account %1 successfully created!</b></font> + <font color="green"><b> Compte basé sur un fournisseur de fichiers %1 créé avec succès ! </b></font> + + + <font color="green"><b>Local sync folder %1 successfully created!</b></font> + <font color="green"><b>Dossier de synchronisation local %1 créé avec succès !</b></font> + + <font color="green">Successfully connected to %1: %2 version %3 (%4)</font><br/><br/> <font color="green">Connecté avec succès à %1 : %2 version %3 (%4)</font><br/><br/> - Failed to connect to %1 at %2:<br/>%3 - Échec de la connexion à %1 sur %2 :<br/>%3 + <p><font color="red">Remote folder creation failed probably because the provided credentials are wrong.</font><br/>Please go back and check your credentials.</p> + <p><font color="red">La création du dossier distant a échoué, probablement parce que les informations d'identification fournies sont fausses.</font><br/>Veuillez revenir en arrière et les vérifier.</p> - Timeout while trying to connect to %1 at %2. - Délai d'attente dépassé lors de la connexion à %1 sur %2. + A sync connection from %1 to remote directory %2 was set up. + Une synchronisation entre le dossier local %1 et le dossier distant %2 a été configurée. Access forbidden by server. To verify that you have proper access, <a href="%1">click here</a> to access the service with your browser. Accès impossible. Afin de vérifier l'accès au serveur, <a href="%1">cliquez ici</a> et connectez-vous au service avec votre navigateur web. - Invalid URL - URL invalide + Cannot remove and back up the folder because the folder or a file in it is open in another program. Please close the folder or file and hit retry or cancel the setup. + Impossible de supprimer et sauvegarder le dossier parce que le dossier ou un fichier qu'il contient est ouvert dans un autre programme. Merci de fermer le dossier ou le fichier et recommencer ou annuler la configuration. - Trying to connect to %1 at %2 … - Tentative de connexion à %1 sur %2 ... + Connection to %1 could not be established. Please check again. + La connexion à %1 n'a pu être établie. Veuillez réessayer. - The authenticated request to the server was redirected to "%1". The URL is bad, the server is misconfigured. - La demande authentifiée au serveur a été redirigée vers "%1". L'URL est mauvaise, le serveur est mal configuré. + Could not create local folder %1 + Impossible de créer le dossier local %1 - There was an invalid response to an authenticated WebDAV request - Il y a eu une réponse invalide à une demande WebDAV authentifiée + Creating local sync folder %1 … + Création du dossier local de synchronisation %1 ... - Local sync folder %1 already exists, setting it up for sync.<br/><br/> - Le dossier de synchronisation local %1 existe déjà, configuration de la synchronisation.<br/><br/> + Error: %1 + Erreur : %1 - Creating local sync folder %1 … - Création du dossier local de synchronisation %1 ... + Failed to connect to %1 at %2:<br/>%3 + Échec de la connexion à %1 sur %2 :<br/>%3 - OK - OK + Folder rename failed + Echec du renommage du dossier - failed. - échoué. + Invalid URL + URL invalide - Could not create local folder %1 - Impossible de créer le dossier local %1 + Local sync folder %1 already exists, setting it up for sync.<br/><br/> + Le dossier de synchronisation local %1 existe déjà, configuration de la synchronisation.<br/><br/> No remote folder specified! Aucun dossier distant spécifié ! - Error: %1 - Erreur : %1 - - - creating folder on Nextcloud: %1 - Création du dossier sur Nextcloud : %1 + OK + OK Remote folder %1 created successfully. Le dossier distant %1 a été créé avec succès. - The remote folder %1 already exists. Connecting it for syncing. - Le dossier distant %1 existe déjà. Connexion. + Remote folder %1 creation failed with error <tt>%2</tt>. + La création du dossier distant "%1" a échouée avec l'erreur <tt>%2</tt>. + + + Successfully connected to %1! + Connecté avec succès à %1 ! + + + The authenticated request to the server was redirected to "%1". The URL is bad, the server is misconfigured. + La demande authentifiée au serveur a été redirigée vers "%1". L'URL est mauvaise, le serveur est mal configuré. The folder creation resulted in HTTP error code %1 La création du dossier a généré le code d'erreur HTTP %1 + + The remote folder %1 already exists. Connecting it for syncing. + Le dossier distant %1 existe déjà. Connexion. + The remote folder creation failed because the provided credentials are wrong!<br/>Please go back and check your credentials.</p> La création du dossier distant a échoué car les identifiants de connexion sont erronés !<br/>Veuillez revenir en arrière et vérifier ces derniers.</p> - <p><font color="red">Remote folder creation failed probably because the provided credentials are wrong.</font><br/>Please go back and check your credentials.</p> - <p><font color="red">La création du dossier distant a échoué, probablement parce que les informations d'identification fournies sont fausses.</font><br/>Veuillez revenir en arrière et les vérifier.</p> + There was an invalid response to an authenticated WebDAV request + Il y a eu une réponse invalide à une demande WebDAV authentifiée - Remote folder %1 creation failed with error <tt>%2</tt>. - La création du dossier distant "%1" a échouée avec l'erreur <tt>%2</tt>. + Timeout while trying to connect to %1 at %2. + Délai d'attente dépassé lors de la connexion à %1 sur %2. - A sync connection from %1 to remote directory %2 was set up. - Une synchronisation entre le dossier local %1 et le dossier distant %2 a été configurée. + Trying to connect to %1 at %2 … + Tentative de connexion à %1 sur %2 ... - Successfully connected to %1! - Connecté avec succès à %1 ! + Virtual files enabled + Fichiers virtuels activés - Connection to %1 could not be established. Please check again. - La connexion à %1 n'a pu être établie. Veuillez réessayer. + Your account is now syncing with virtual files support. This means that all your files are online-only by default, and will be downloaded on-demand when you open them. You may find your files under the <b>Locations</b> section of the Finder sidebar. + Votre compte est désormais synchronisé avec la prise en charge des fichiers virtuels. Cela signifie que tous vos fichiers sont par défaut accessibles en ligne uniquement et seront téléchargés à la demande à votre ouverture. Vous trouverez vos fichiers dans la section <b> Emplacement </b> de la barre latérale du Finder. - Folder rename failed - Echec du renommage du dossier - - - Cannot remove and back up the folder because the folder or a file in it is open in another program. Please close the folder or file and hit retry or cancel the setup. - Impossible de supprimer et sauvegarder le dossier parce que le dossier ou un fichier qu'il contient est ouvert dans un autre programme. Merci de fermer le dossier ou le fichier et recommencer ou annuler la configuration. - - - <font color="green"><b>File Provider-based account %1 successfully created!</b></font> - <font color="green"><b> Compte basé sur un fournisseur de fichiers %1 créé avec succès ! </b></font> - - - Virtual files enabled - Fichiers virtuels activés - - - Your account is now syncing with virtual files support. This means that all your files are online-only by default, and will be downloaded on-demand when you open them. You may find your files under the <b>Locations</b> section of the Finder sidebar. - Votre compte est désormais synchronisé avec la prise en charge des fichiers virtuels. Cela signifie que tous vos fichiers sont par défaut accessibles en ligne uniquement et seront téléchargés à la demande à votre ouverture. Vous trouverez vos fichiers dans la section <b> Emplacement </b> de la barre latérale du Finder. + creating folder on Nextcloud: %1 + Création du dossier sur Nextcloud : %1 - <font color="green"><b>Local sync folder %1 successfully created!</b></font> - <font color="green"><b>Dossier de synchronisation local %1 créé avec succès !</b></font> + failed. + échoué. - + OCC::OwncloudWizard Add %1 account Ajout du compte %1 - - Skip folders configuration - Ignorer la configuration des dossiers - Cancel Annuler @@ -3200,6 +3285,18 @@ Notez que l'utilisation de toute option de ligne de commande de journalisat Activer la fonction expérimentale ? + Enable experimental placeholder mode + Activer la fonction expérimentale de fichiers virtuels ? + + + Skip folders configuration + Ignorer la configuration des dossiers + + + Stay safe + Restez en sécurité + + When the "virtual files" mode is enabled no files will be downloaded initially. Instead, a tiny "%1" file will be created for each file that exists on the server. The contents can be downloaded by running these files or by using their context menu. The virtual files mode is mutually exclusive with selective sync. Currently unselected folders will be translated to online-only folders and your selective sync settings will be reset. @@ -3215,15 +3312,7 @@ Le passage à ce mode annulera toute synchronisation en cours. Il s'agit d'un nouveau mode expérimental. Si vous décidez de l'utiliser, veuillez signaler tout problème qui surviendrait. - - Enable experimental placeholder mode - Activer la fonction expérimentale de fichiers virtuels ? - - - Stay safe - Restez en sécurité - - + OCC::PasswordInputDialog @@ -3245,169 +3334,169 @@ Il s'agit d'un nouveau mode expérimental. Si vous décidez de l' OCC::ProcessDirectoryJob - Symbolic links are not supported in syncing. - Les liens symboliques ne sont pas pris en charge par la synchronisation. - - - File is listed on the ignore list. - Le fichier est présent dans la liste des fichiers exclus. + %1 name containing the character "%2" is not supported on this file system. + folder or file impossible to sync due to an invalid name, placeholders will be file or folder and the invalid character + Le nom %1 contenant le caractère « %2 » n’est pas supporté sur ce système de fichiers. - File names ending with a period are not supported on this file system. - Les noms de fichier se terminant par un point ne sont pas pris en charge sur votre système. + %1 name contains at least one invalid character + Le nom %1 contient au moins un caractère invalide - Filename contains trailing spaces. - Le nom du fichier finit par des espaces. + %1 name is a reserved name on this file system. + Le nom %1 est un nom réservé sur ce système de fichiers. Cannot be renamed or uploaded. Ne peut être renommé ou téléversé. - Folder - name of folder entity to use when warning about invalid name - Dossier + Cannot modify encrypted item because the selected certificate is not valid. + Impossible de modifier l'élément chiffré car le certificat sélectionné n'est pas valide. - File - name of folder entity to use when warning about invalid name - Fichier + Cannot sync due to invalid modification time + Impossible de synchroniser à cause d'une date de modification invalide - %1 name containing the character "%2" is not supported on this file system. - folder or file impossible to sync due to an invalid name, placeholders will be file or folder and the invalid character - Le nom %1 contenant le caractère « %2 » n’est pas supporté sur ce système de fichiers. + Case Clash Conflict: Server file downloaded and renamed to avoid clash. + Conflit de casse : fichier serveur téléchargé et renommé pour éviter le conflit. - Filename contains leading spaces. - Nom de fichier contenant des espaces au début. + Conflict: Server version downloaded, local copy renamed and not uploaded. + Conflit : la version du serveur a été téléchargée, la version locale a été renommée, mais pas téléversée. - %1 name contains at least one invalid character - Le nom %1 contient au moins un caractère invalide + Could not upload file, because it is open in "%1". + Impossible de téléverser le fichier, car il est ouvert dans « %1 ». - %1 name is a reserved name on this file system. - Le nom %1 est un nom réservé sur ce système de fichiers. + Error while deleting file record %1 from the database + Erreur à la suppression de l'enregistrement du fichier %1 de la base de données - Filename contains leading and trailing spaces. - Nom de fichier contenant des espaces au début et à la fin. + Error while reading the database + Erreur de lecture de la base de données - Filename is too long. - Le nom du fichier est trop long. + File + name of folder entity to use when warning about invalid name + Fichier - File/Folder is ignored because it's hidden. - Le fichier/dossier est exclu, car il est caché. + File has extension reserved for virtual files. + Le fichier a une extension réservée pour les fichiers virtuels. - Stat failed. - Stat échoué. + File is listed on the ignore list. + Le fichier est présent dans la liste des fichiers exclus. - Conflict: Server version downloaded, local copy renamed and not uploaded. - Conflit : la version du serveur a été téléchargée, la version locale a été renommée, mais pas téléversée. + File names ending with a period are not supported on this file system. + Les noms de fichier se terminant par un point ne sont pas pris en charge sur votre système. - Case Clash Conflict: Server file downloaded and renamed to avoid clash. - Conflit de casse : fichier serveur téléchargé et renommé pour éviter le conflit. + File/Folder is ignored because it's hidden. + Le fichier/dossier est exclu, car il est caché. - The filename cannot be encoded on your file system. - Le nom de fichier ne peut pas être encodé sur votre système de fichiers. + Filename contains leading and trailing spaces. + Nom de fichier contenant des espaces au début et à la fin. - The filename is blacklisted on the server. - Le nom du fichier est sur la liste noire du serveur. + Filename contains leading spaces. + Nom de fichier contenant des espaces au début. - Reason: the entire filename is forbidden. - Motif : le nom de fichier entier est interdit. + Filename contains trailing spaces. + Le nom du fichier finit par des espaces. - Reason: the filename has a forbidden base name (filename start). - Motif : le nom de fichier a un nom de base interdit (début du nom de fichier). + Filename is too long. + Le nom du fichier est trop long. - Reason: the file has a forbidden extension (.%1). - Motif : le fichier a une extension interdite (.%1). + Folder + name of folder entity to use when warning about invalid name + Dossier - Reason: the filename contains a forbidden character (%1). - Motif : le nom du fichier contient un caractère interdit (%1). + Ignored because of the "choose what to sync" blacklist + Exclus en raison de la liste noire "Sélectionner le contenu à synchroniser". - File has extension reserved for virtual files. - Le fichier a une extension réservée pour les fichiers virtuels. + Moved to invalid target, restoring + Déplacé vers une cible invalide, restauration - size - taille + Not allowed because you don't have permission to add files in that folder + Non autorisé car vous n'avez pas la permission d'ajouter des fichiers dans ce dossier - permission - permission + Not allowed because you don't have permission to add subfolders to that folder + Non autorisé car vous n'avez pas la permission d'ajouter des sous-dossiers dans ce dossier - file id - ID du fichier + Not allowed to remove, restoring + Suppression non autorisée, restauration en cours - Server reported no %1 - Le serveur n'a signalé aucun %1 + Not allowed to upload this file because it is read-only on the server, restoring + Non autorisé à téléverser ce fichier, car il est en lecture seule sur le serveur, restauration en cours - Cannot sync due to invalid modification time - Impossible de synchroniser à cause d'une date de modification invalide + Reason: the entire filename is forbidden. + Motif : le nom de fichier entier est interdit. - Could not upload file, because it is open in "%1". - Impossible de téléverser le fichier, car il est ouvert dans « %1 ». + Reason: the file has a forbidden extension (.%1). + Motif : le fichier a une extension interdite (.%1). - Error while deleting file record %1 from the database - Erreur à la suppression de l'enregistrement du fichier %1 de la base de données + Reason: the filename contains a forbidden character (%1). + Motif : le nom du fichier contient un caractère interdit (%1). - Moved to invalid target, restoring - Déplacé vers une cible invalide, restauration + Reason: the filename has a forbidden base name (filename start). + Motif : le nom de fichier a un nom de base interdit (début du nom de fichier). - Cannot modify encrypted item because the selected certificate is not valid. - Impossible de modifier l'élément chiffré car le certificat sélectionné n'est pas valide. + Server replied with an error while reading directory "%1" : %2 + Le serveur a répondu avec une erreur lors de la lecture du dossier "%1" : %2 + + + Server reported no %1 + Le serveur n'a signalé aucun %1 - Ignored because of the "choose what to sync" blacklist - Exclus en raison de la liste noire "Sélectionner le contenu à synchroniser". + Stat failed. + Stat échoué. - Not allowed because you don't have permission to add subfolders to that folder - Non autorisé car vous n'avez pas la permission d'ajouter des sous-dossiers dans ce dossier + Symbolic links are not supported in syncing. + Les liens symboliques ne sont pas pris en charge par la synchronisation. - Not allowed because you don't have permission to add files in that folder - Non autorisé car vous n'avez pas la permission d'ajouter des fichiers dans ce dossier + The filename cannot be encoded on your file system. + Le nom de fichier ne peut pas être encodé sur votre système de fichiers. - Not allowed to upload this file because it is read-only on the server, restoring - Non autorisé à téléverser ce fichier, car il est en lecture seule sur le serveur, restauration en cours + The filename is blacklisted on the server. + Le nom du fichier est sur la liste noire du serveur. - Not allowed to remove, restoring - Suppression non autorisée, restauration en cours + file id + ID du fichier - Error while reading the database - Erreur de lecture de la base de données + permission + permission - Server replied with an error while reading directory "%1" : %2 - Le serveur a répondu avec une erreur lors de la lecture du dossier "%1" : %2 + size + taille - + OCC::PropagateDirectory @@ -3418,14 +3507,6 @@ Il s'agit d'un nouveau mode expérimental. Si vous décidez de l' Error updating metadata due to invalid modification time Erreur de mise à jour des métadonnées à cause d'une date de modification invalide - - The folder %1 cannot be made read-only: %2 - Le dossier %1 ne peut pas être mis en lecture seule : %2 - - - unknown exception - Exception inconnue - Error updating metadata: %1 Erreur lors de la mise à jour des métadonnées : %1 @@ -3434,66 +3515,74 @@ Il s'agit d'un nouveau mode expérimental. Si vous décidez de l' File is currently in use Le fichier est actuellement en cours d'utilisation - + + The folder %1 cannot be made read-only: %2 + Le dossier %1 ne peut pas être mis en lecture seule : %2 + + + unknown exception + Exception inconnue + + OCC::PropagateDownloadFile - Could not get file %1 from local DB - Impossible de récupérer le fichier %1 depuis la base de données locale + Could not delete file record %1 from local DB + Impossible de supprimer l'enregistrement du fichier %1 depuis la base de données locale - File %1 cannot be downloaded because encryption information is missing. - Le fichier %1 ne peut pas être téléchargé car les informations de chiffrement sont manquantes. + Could not get file %1 from local DB + Impossible de récupérer le fichier %1 depuis la base de données locale - Could not delete file record %1 from local DB - Impossible de supprimer l'enregistrement du fichier %1 depuis la base de données locale + Error updating metadata: %1 + Erreur lors de la mise à jour des métadonnées : %1 File %1 can not be downloaded because of a local file name clash! Le fichier %1 ne peut pas être téléchargé en raison d'un conflit sur le nom de fichier local. - The download would reduce free local disk space below the limit - Le téléchargement réduira l'espace disque libre en dessous de la limite + File %1 cannot be downloaded because encryption information is missing. + Le fichier %1 ne peut pas être téléchargé car les informations de chiffrement sont manquantes. - Free space on disk is less than %1 - Il y a moins de %1 d'espace libre sur le disque + File %1 downloaded but it resulted in a local file name clash! + Fichier %1 téléchargé, mais a abouti à un conflit de casse du nom de fichier local ! + + + File %1 has invalid modified time reported by server. Do not save it. + Le fichier %1 présente une date de modification invalide sur le serveur. Enregistrement impossible. + File has changed since discovery + Le fichier a changé depuis sa découverte + + File was deleted from server Le fichier a été supprimé du serveur - The file could not be downloaded completely. - Le fichier n'a pas pu être téléchargé intégralement. + Free space on disk is less than %1 + Il y a moins de %1 d'espace libre sur le disque - The downloaded file is empty, but the server said it should have been %1. - Le fichier téléchargé est vide bien que le serveur indique que sa taille devrait être de %1. - - - File %1 has invalid modified time reported by server. Do not save it. - Le fichier %1 présente une date de modification invalide sur le serveur. Enregistrement impossible. - - - File %1 downloaded but it resulted in a local file name clash! - Fichier %1 téléchargé, mais a abouti à un conflit de casse du nom de fichier local ! + The download would reduce free local disk space below the limit + Le téléchargement réduira l'espace disque libre en dessous de la limite - Error updating metadata: %1 - Erreur lors de la mise à jour des métadonnées : %1 + The downloaded file is empty, but the server said it should have been %1. + Le fichier téléchargé est vide bien que le serveur indique que sa taille devrait être de %1. The file %1 is currently in use Le fichier %1 est en cours d'utilisation - File has changed since discovery - Le fichier a changé depuis sa découverte + The file could not be downloaded completely. + Le fichier n'a pas pu être téléchargé intégralement. - + OCC::PropagateItemJob @@ -3508,37 +3597,41 @@ Il s'agit d'un nouveau mode expérimental. Si vous décidez de l' OCC::PropagateLocalMkdir - could not delete file %1, error: %2 - impossible de supprimer le fichier %1. Erreur : %2 + Could not create folder %1 + Impossible de créer le dossier %1 + + + Error updating metadata: %1 + Erreur lors de la mise à jour des métadonnées : %1 Folder %1 cannot be created because of a local file or folder name clash! Le dossier %1 n'a pu être créé à cause d'un conflit local de nom de fichier ou de dossier ! - Could not create folder %1 - Impossible de créer le dossier %1 + The file %1 is currently in use + Le fichier %1 est en cours d'utilisation - + The folder %1 cannot be made read-only: %2 Le dossier %1 ne peut être rendu en lecture seule : %2 - unknown exception - Exception inconnue - - - Error updating metadata: %1 - Erreur lors de la mise à jour des métadonnées : %1 + could not delete file %1, error: %2 + impossible de supprimer le fichier %1. Erreur : %2 - The file %1 is currently in use - Le fichier %1 est en cours d'utilisation + unknown exception + Exception inconnue - + OCC::PropagateLocalRemove + Could not delete file record %1 from local DB + Impossible de supprimer l'enregistrement du fichier %1 depuis la base de données locale + + Could not remove %1 because of a local file name clash Impossible de retirer %1 en raison d'un conflit de nom de fichier local @@ -3546,22 +3639,14 @@ Il s'agit d'un nouveau mode expérimental. Si vous décidez de l' Temporary error when removing local item removed from server. Erreur temporaire lors de la suppression d'un élément local supprimé du serveur. - - Could not delete file record %1 from local DB - Impossible de supprimer l'enregistrement du fichier %1 depuis la base de données locale - - + OCC::PropagateLocalRename - Folder %1 cannot be renamed because of a local file or folder name clash! - Le dossier %1 n’a pu être renommé à cause d’un conflit local de nom de fichier ou de dossier ! - - - File %1 downloaded but it resulted in a local file name clash! - Fichier %1 téléchargé, mais a abouti à un conflit de casse du nom de fichier local ! + Could not delete file record %1 from local DB + Impossible de récupérer le fichier %1 depuis la base de données locale - + Could not get file %1 from local DB Impossible de récupérer le fichier %1 depuis la base de données locale @@ -3573,10 +3658,6 @@ Il s'agit d'un nouveau mode expérimental. Si vous décidez de l' Error updating metadata: %1 Erreur lors de la mise à jour des métadonnées : %1 - - The file %1 is currently in use - Le fichier %1 est en cours d'utilisation - Failed to propagate directory rename in hierarchy Impossible de propager le renommage du dossier dans la hiérarchie @@ -3586,21 +3667,29 @@ Il s'agit d'un nouveau mode expérimental. Si vous décidez de l' Échec lors du changement de nom du fichier - Could not delete file record %1 from local DB - Impossible de récupérer le fichier %1 depuis la base de données locale + File %1 downloaded but it resulted in a local file name clash! + Fichier %1 téléchargé, mais a abouti à un conflit de casse du nom de fichier local ! - - - OCC::PropagateRemoteDelete - Wrong HTTP code returned by server. Expected 204, but received "%1 %2". - Le code HTTP retourné par le serveur n'est pas valide. La valeur attendue est 204 mais la valeur reçue est "%1 %2". + Folder %1 cannot be renamed because of a local file or folder name clash! + Le dossier %1 n’a pu être renommé à cause d’un conflit local de nom de fichier ou de dossier ! + + + The file %1 is currently in use + Le fichier %1 est en cours d'utilisation + + + OCC::PropagateRemoteDelete Could not delete file record %1 from local DB Impossible de récupérer le fichier %1 depuis la base de données locale - + + Wrong HTTP code returned by server. Expected 204, but received "%1 %2". + Le code HTTP retourné par le serveur n'est pas valide. La valeur attendue est 204 mais la valeur reçue est "%1 %2". + + OCC::PropagateRemoteDeleteEncryptedRootFolder @@ -3611,33 +3700,49 @@ Il s'agit d'un nouveau mode expérimental. Si vous décidez de l' OCC::PropagateRemoteMkdir - Wrong HTTP code returned by server. Expected 201, but received "%1 %2". - Le code HTTP retourné par le serveur n'est pas valide. La valeur attendue est 201 mais la valeur reçue est "%1 %2". + Error writing metadata to the database: %1 + Erreur d'écriture des métadonnées dans la base de données : %1 Failed to encrypt a folder %1 Échec du chiffrement d'un dossier %1 - - Error writing metadata to the database: %1 - Erreur d'écriture des métadonnées dans la base de données : %1 - The file %1 is currently in use Le fichier %1 est en cours d'utilisation - + + Wrong HTTP code returned by server. Expected 201, but received "%1 %2". + Le code HTTP retourné par le serveur n'est pas valide. La valeur attendue est 201 mais la valeur reçue est "%1 %2". + + OCC::PropagateRemoteMove + + Could not delete file record %1 from local DB + Impossible de récupérer le fichier %1 depuis la base de données locale + + + Could not get file %1 from local DB + Impossible de récupérer le fichier %1 depuis la base de données locale + Could not rename %1 to %2, error: %3 Impossible de renommer %1 en %2, erreur: %3 + + Error setting pin state + Erreur lors de la modification de l'état du fichier + Error updating metadata: %1 Erreur lors de la mise à jour des métadonnées : %1 + Error writing metadata to the database + Erreur à l'écriture des métadonnées dans la base de données + + The file %1 is currently in use Le fichier %1 est en cours d'utilisation @@ -3645,25 +3750,21 @@ Il s'agit d'un nouveau mode expérimental. Si vous décidez de l' Wrong HTTP code returned by server. Expected 201, but received "%1 %2". Le code HTTP retourné par le serveur n'est pas valide. La valeur attendue est 201 mais la valeur reçue est "%1 %2". + + + OCC::PropagateUploadFileCommon - Could not get file %1 from local DB - Impossible de récupérer le fichier %1 depuis la base de données locale - - - Could not delete file record %1 from local DB - Impossible de récupérer le fichier %1 depuis la base de données locale + Error updating metadata: %1 + Erreur lors de la mise à jour des métadonnées : %1 - Error setting pin state - Erreur lors de la modification de l'état du fichier + Failed to unlock encrypted folder. + Impossible de déverrouiller le dossier chiffré. - Error writing metadata to the database - Erreur à l'écriture des métadonnées dans la base de données + Failed to upload encrypted file. + Échec de téléversement du fichier chiffré. - - - OCC::PropagateUploadFileCommon File %1 cannot be uploaded because another file with the same name, differing only in case, exists Impossible de téléverser le fichier %1 car un autre fichier de même nom existe, différent seulement par la casse. @@ -3673,71 +3774,63 @@ Il s'agit d'un nouveau mode expérimental. Si vous décidez de l' Le fichier %1 présente une heure de modification invalide. Ne téléversez pas sur le serveur. - Local file changed during syncing. It will be resumed. - Fichier local modifié pendant la synchronisation. Elle va reprendre. + File Removed (start upload) %1 + Fichier supprimé (début du téléversement) %1 - + Local file changed during sync. Fichier local modifié pendant la synchronisation. - Failed to unlock encrypted folder. - Impossible de déverrouiller le dossier chiffré. - - - Unable to upload an item with invalid characters - Impossible de téléverser un élément contenant des caractères non valides - - - Error updating metadata: %1 - Erreur lors de la mise à jour des métadonnées : %1 + Local file changed during syncing. It will be resumed. + Fichier local modifié pendant la synchronisation. Elle va reprendre. The file %1 is currently in use Le fichier %1 est en cours d'utilisation - Upload of %1 exceeds the quota for the folder - Le téléversement de %1 provoque un dépassement du quota du dossier - - - Failed to upload encrypted file. - Échec de téléversement du fichier chiffré. + Unable to upload an item with invalid characters + Impossible de téléverser un élément contenant des caractères non valides - File Removed (start upload) %1 - Fichier supprimé (début du téléversement) %1 + Upload of %1 exceeds the quota for the folder + Le téléversement de %1 provoque un dépassement du quota du dossier - + OCC::PropagateUploadFileNG - - The local file was removed during sync. - Fichier local supprimé pendant la synchronisation. - Local file changed during sync. Fichier local modifié pendant la synchronisation. - Poll URL missing - URL du sondage manquante + Missing ETag from server + L'information Etag de modification de fichier est manquante sur le serveur + + + Missing File ID from server + L'identifiant de fichier est manquant sur le serveur - Unexpected return code from server (%1) - Le serveur a retourné un code inattendu (%1) + Poll URL missing + URL du sondage manquante - Missing File ID from server - L'identifiant de fichier est manquant sur le serveur + The local file was removed during sync. + Fichier local supprimé pendant la synchronisation. - Missing ETag from server - L'information Etag de modification de fichier est manquante sur le serveur + Unexpected return code from server (%1) + Le serveur a retourné un code inattendu (%1) - + OCC::PropagateUploadFileV1 + + Local file changed during sync. + Fichier local modifié pendant la synchronisation. + Poll URL missing URL de sondage manquante @@ -3746,10 +3839,6 @@ Il s'agit d'un nouveau mode expérimental. Si vous décidez de l' The local file was removed during sync. Fichier local supprimé pendant la synchronisation. - - Local file changed during sync. - Fichier local modifié pendant la synchronisation. - The server did not acknowledge the last chunk. (No e-tag was present) Le serveur n'a pas confirmé la réception du dernier morceau. (Aucun e-tag n'était présent). @@ -3758,13 +3847,13 @@ Il s'agit d'un nouveau mode expérimental. Si vous décidez de l' OCC::ProxyAuthDialog + Password: + Mot de passe : + + Proxy authentication required Authentification requise sur le proxy - - Username: - Nom d’utilisateur : - Proxy: Proxy : @@ -3774,10 +3863,10 @@ Il s'agit d'un nouveau mode expérimental. Si vous décidez de l' Le serveur proxy requiert un identifiant et un mot de passe. - Password: - Mot de passe : + Username: + Nom d’utilisateur : - + OCC::SelectiveSyncDialog @@ -3788,30 +3877,30 @@ Il s'agit d'un nouveau mode expérimental. Si vous décidez de l' OCC::SelectiveSyncWidget - Loading … - Chargement… + An error occurred while loading the list of sub folders. + Une erreur est survenue lors du chargement de la liste des sous-dossiers. - + Deselect remote folders you do not wish to synchronize. Désélectionnez les sous-dossiers distants que vous ne souhaitez pas synchroniser. - Name - Nom + Loading … + Chargement… - Size - Taille + Name + Nom No subfolders currently on the server. Aucun sous-dossier sur le serveur. - An error occurred while loading the list of sub folders. - Une erreur est survenue lors du chargement de la liste des sous-dossiers. + Size + Taille - + OCC::ServerNotificationHandler @@ -3821,16 +3910,16 @@ Il s'agit d'un nouveau mode expérimental. Si vous décidez de l' OCC::SettingsDialog - - Settings - Paramètres - %1 Settings This name refers to the application name e.g Nextcloud Paramètres %1 + Account + Compte + + General Général @@ -3839,10 +3928,30 @@ Il s'agit d'un nouveau mode expérimental. Si vous décidez de l' Réseau - Account - Compte + Settings + Paramètres - + + + OCC::ShareeModel + + %1 (%2) + sharee (shareWithAdditionalInfo) + %1 (%2) + + + Global search results + Résultats de la recherche globale + + + No results found + Aucun résultat trouvé + + + Search globally + Rechercher globalement + + OCC::ShareManager @@ -3861,272 +3970,246 @@ Il s'agit d'un nouveau mode expérimental. Si vous décidez de l' 1 jour - Today - Aujourd'hui + Could not find local folder for %1 + Impossible de trouver le dossier local pour %1 - - Secure file drop link - Lien de dépôt sécurisé de fichier - - - Share link - Partager un lien + + Internal link + Lien interne Link share Lien de partage - - Internal link - Lien interne - Secure file drop Dépôt de fichier sécurisé - Could not find local folder for %1 - Impossible de trouver le dossier local pour %1 - - - - OCC::ShareeModel - - Search globally - Rechercher globalement - - - No results found - Aucun résultat trouvé + Secure file drop link + Lien de dépôt sécurisé de fichier - Global search results - Résultats de la recherche globale + Share link + Partager un lien - %1 (%2) - sharee (shareWithAdditionalInfo) - %1 (%2) + Today + Aujourd'hui - + OCC::SocketApi + + Activity + Activité + Context menu share Partage du menu contextuel - I shared something with you - J'ai partagé quelque chose avec vous + Copy internal link + Copier le lien interne - Share options - Options de partage + Copy private link to clipboard + Copier le lien privé dans le presse-papier - Send private link by email … - Envoyer le lien privé par e-mail ... + Could not encrypt the following folder: "%1". + +Server replied with error: %2 + Impossible de chiffrer le dossier suivant : "%1". + +Le serveur a répondu avec l'erreur : %2 - Copy private link to clipboard - Copier le lien privé dans le presse-papier + Delete + Supprimer - Failed to encrypt folder at "%1" - Échec du chiffrement du dossier à "%1" + Delete local changes + Supprimer les modifications locales - The account %1 does not have end-to-end encryption configured. Please configure this in your account settings to enable folder encryption. - Le compte %1 n'a pas de chiffrement de bout en bout configuré. Veuillez le configurer dans les paramètres de votre compte pour activer le chiffrement des dossiers. + Encrypt + Chiffrer + + + Expires in %1 minutes + remaining time before lock expires + + Expire dans %1 minute + Expire dans %1 minutes + Failed to encrypt folder Échec du chiffrement du dossier - Could not encrypt the following folder: "%1". - -Server replied with error: %2 - Impossible de chiffrer le dossier suivant : "%1". - -Le serveur a répondu avec l'erreur : %2 + Failed to encrypt folder at "%1" + Échec du chiffrement du dossier à "%1" Folder encrypted successfully Dossier chiffré avec succès - The following folder was encrypted successfully: "%1" - Le dossier suivant a été chiffré avec succès : "%1" - - - Select new location … - Sélectionnez le nouvel emplacement ... - - - Activity - Activité + I shared something with you + J'ai partagé quelque chose avec vous Leave this share Quitter ce partage - Resharing this file is not allowed - Repartager ce fichier est interdit + Lock file + Verrouiller le fichier - Resharing this folder is not allowed - Repartager ce dossier est interdit + Locked by %1 + Verrouillé par %1 - Encrypt - Chiffrer + Move and rename … + Déplacer et renommer... - Lock file - Verrouiller le fichier + Move and upload … + Déplacer et téléverser… - Unlock file - Déverrouiller le fichier + Move, rename and upload … + Déplacer, renommer et téléverser… - Locked by %1 - Verrouillé par %1 + Open in browser + Ouvrir dans le navigateur - - Expires in %1 minutes - remaining time before lock expires - - Expire dans %1 minute - Expire dans %1 minutes - + + Resharing this file is not allowed + Repartager ce fichier est interdit - Resolve conflict … - Résoudre le conflit… + Resharing this folder is not allowed + Repartager ce dossier est interdit - Move and rename … - Déplacer et renommer... + Resolve conflict … + Résoudre le conflit… - Move, rename and upload … - Déplacer, renommer et téléverser… + Select new location … + Sélectionnez le nouvel emplacement ... - Delete local changes - Supprimer les modifications locales + Send private link by email … + Envoyer le lien privé par e-mail ... - Move and upload … - Déplacer et téléverser… + Share options + Options de partage - Delete - Supprimer + The account %1 does not have end-to-end encryption configured. Please configure this in your account settings to enable folder encryption. + Le compte %1 n'a pas de chiffrement de bout en bout configuré. Veuillez le configurer dans les paramètres de votre compte pour activer le chiffrement des dossiers. - Copy internal link - Copier le lien interne + The following folder was encrypted successfully: "%1" + Le dossier suivant a été chiffré avec succès : "%1" - Open in browser - Ouvrir dans le navigateur + Unlock file + Déverrouiller le fichier - + OCC::SslButton + + %1 + %1 + + + %1 (self-signed) + %1 (auto-signé) + <h3>Certificate Details</h3> <h3>Détails du certificat</h3> - Common Name (CN): - Nom commun (CN) : + <h3>Fingerprints</h3> + <h3>Empreintes numériques</h3> - Subject Alternative Names: - Noms alternatifs du sujet : + <h3>Issuer</h3> + <h3>Émetteur</h3> - Organization (O): - Organisation (O) : + <p><b>Note:</b> This certificate was manually approved</p> + <p><b>Note :</b> Ce certificat a été approuvé manuellement</p> - Organizational Unit (OU): - Unité d'organisation (OU) : + Certificate information: + Informations du certificat : - State/Province: - État/Région : + Common Name (CN): + Nom commun (CN) : Country: Pays : - Serial: - Numéro de série : + Expires on: + Expire le : - <h3>Issuer</h3> - <h3>Émetteur</h3> + Issued on: + Émis le : Issuer: Émetteur : - Issued on: - Émis le : - - - Expires on: - Expire le : + No support for SSL session tickets/identifiers + Identifiants/tickets de sessions SSL non pris en charge - <h3>Fingerprints</h3> - <h3>Empreintes numériques</h3> + Organization (O): + Organisation (O) : - SHA-256: - SHA-256 : + Organizational Unit (OU): + Unité d'organisation (OU) : SHA-1: SHA-1 : - <p><b>Note:</b> This certificate was manually approved</p> - <p><b>Note :</b> Ce certificat a été approuvé manuellement</p> - - - %1 (self-signed) - %1 (auto-signé) - - - %1 - %1 + SHA-256: + SHA-256 : - This connection is encrypted using %1 bit %2. - - Cette connexion est chiffrée en utilisant %1 bit %2. - + Serial: + Numéro de série : Server version: %1 Version du serveur : %1 - No support for SSL session tickets/identifiers - Identifiants/tickets de sessions SSL non pris en charge + State/Province: + État/Région : - Certificate information: - Informations du certificat : + Subject Alternative Names: + Noms alternatifs du sujet : The connection is not secure @@ -4138,70 +4221,76 @@ Le serveur a répondu avec l'erreur : %2 Cette connexion n'est PAS sécurisée car elle n'est pas chiffrée. - + + This connection is encrypted using %1 bit %2. + + Cette connexion est chiffrée en utilisant %1 bit %2. + + + OCC::SslErrorDialog - Trust this certificate anyway - Faire confiance à ce certificat malgré tout + &lt;not specified&gt; + &lt;non spécifié&gt; - Untrusted Certificate - Certificat non fiable + Additional errors: + Erreurs supplémentaires : Cannot connect securely to <i>%1</i>: Impossible de se connecter de manière sécurisée à <i>%1</i> : - Additional errors: - Erreurs supplémentaires : - - - with Certificate %1 - avec certificat %1 + Country: %1 + Pays : %1 - &lt;not specified&gt; - &lt;non spécifié&gt; + Effective Date: %1 + Date de début de validité : %1 - Organization: %1 - Organisation : %1 + Expiration Date: %1 + Date d'expiration : %1 - Unit: %1 - Unité : %1 + Fingerprint (SHA-256): <tt>%1</tt> + Empreinte (SHA-256): <tt>%1</tt> - Country: %1 - Pays : %1 + Fingerprint (SHA-512): <tt>%1</tt> + Empreinte (SHA-512): <tt>%1</tt> Fingerprint (SHA1): <tt>%1</tt> Empreinte (SHA1) : <tt>%1</tt> - Fingerprint (SHA-256): <tt>%1</tt> - Empreinte (SHA-256): <tt>%1</tt> + Issuer: %1 + Émetteur : %1 + + + Organization: %1 + Organisation : %1 - Fingerprint (SHA-512): <tt>%1</tt> - Empreinte (SHA-512): <tt>%1</tt> + Trust this certificate anyway + Faire confiance à ce certificat malgré tout - Effective Date: %1 - Date de début de validité : %1 + Unit: %1 + Unité : %1 - Expiration Date: %1 - Date d'expiration : %1 + Untrusted Certificate + Certificat non fiable - Issuer: %1 - Émetteur : %1 + with Certificate %1 + avec certificat %1 - + OCC::SyncEngine @@ -4209,25 +4298,16 @@ Le serveur a répondu avec l'erreur : %2 %1 (ignoré à cause d'une précédente erreur, nouvel essai dans %2) - Only %1 are available, need at least %2 to start - Placeholders are postfixed with file sizes using Utility::octetsToString() - Seulement %1 disponibles, il faut au moins %2 pour démarrer - - - Unable to open or create the local sync database. Make sure you have write access in the sync folder. - Impossible d'accéder ou de créer une base de données locale de synchronisation. Assurez vous de disposer des droits d'écriture dans le dossier de synchronisation. - - - Disk space is low: Downloads that would reduce free space below %1 were skipped. - L'espace disque est faible : les téléchargements qui amèneraient à réduire l'espace libre en dessous de %1 ont été ignorés. + Cannot open the sync journal + Impossible d'ouvrir le journal de synchronisation - - There is insufficient space available on the server for some uploads. - Il n'y a pas suffisamment d’espace disponible sur le serveur pour certains téléversements. + + Could not set file record to local DB: %1 + Impossible de définir l'enregistrement du fichier dans la base de données locale : %1 - Unresolved conflict. - conflit non résolu. + Could not update file metadata: %1 + Impossible de mettre à jour les métadonnées du fichier : %1 Could not update file: %1 @@ -4238,79 +4318,88 @@ Le serveur a répondu avec l'erreur : %2 Impossible de mettre à jour les métadonnées du fichier virutel : %1 - Could not update file metadata: %1 - Impossible de mettre à jour les métadonnées du fichier : %1 + Disk space is low: Downloads that would reduce free space below %1 were skipped. + L'espace disque est faible : les téléchargements qui amèneraient à réduire l'espace libre en dessous de %1 ont été ignorés. - Could not set file record to local DB: %1 - Impossible de définir l'enregistrement du fichier dans la base de données locale : %1 + Only %1 are available, need at least %2 to start + Placeholders are postfixed with file sizes using Utility::octetsToString() + Seulement %1 disponibles, il faut au moins %2 pour démarrer - Using virtual files with suffix, but suffix is not set - Utilisation de fichiers virtuels avec suffixe, mais le suffixe n'est pas défini + There is insufficient space available on the server for some uploads. + Il n'y a pas suffisamment d’espace disponible sur le serveur pour certains téléversements. - Unable to read the blacklist from the local database - Impossible de lire la liste noire de la base de données locale + Unable to open or create the local sync database. Make sure you have write access in the sync folder. + Impossible d'accéder ou de créer une base de données locale de synchronisation. Assurez vous de disposer des droits d'écriture dans le dossier de synchronisation. Unable to read from the sync journal. Impossible de lire le journal de synchronisation. - Cannot open the sync journal - Impossible d'ouvrir le journal de synchronisation + Unable to read the blacklist from the local database + Impossible de lire la liste noire de la base de données locale - + + Unresolved conflict. + conflit non résolu. + + + Using virtual files with suffix, but suffix is not set + Utilisation de fichiers virtuels avec suffixe, mais le suffixe n'est pas défini + + OCC::SyncStatusSummary - Offline - Hors ligne + %1 of %2 + %1 sur %2 + + + %1 of %2 · %3 left + %1 sur %2 · %3 restants All synced! Tout est synchronisé ! - Some files couldn't be synced! - Certains fichiers n’ont pas pu être synchronisés ! + Checking folder changes + Vérification des modifications du dossier - See below for errors - Voir ci-dessous pour les erreurs + Offline + Hors ligne - Checking folder changes - Vérification des modifications du dossier + See below for errors + Voir ci-dessous pour les erreurs - Syncing changes - Synchronisation des modifications + See below for warnings + Voir ci-dessous pour les avertissements - Sync paused - Synchronisation mise en pause + Some files could not be synced! + Certains fichiers n’ont pas pu être synchronisés ! - Some files could not be synced! - Certains fichiers n’ont pas pu être synchronisés ! + Some files couldn't be synced! + Certains fichiers n’ont pas pu être synchronisés ! - See below for warnings - Voir ci-dessous pour les avertissements + Sync paused + Synchronisation mise en pause Syncing Synchronisation - %1 of %2 · %3 left - %1 sur %2 · %3 restants - - - %1 of %2 - %1 sur %2 + Syncing changes + Synchronisation des modifications Syncing file %1 of %2 @@ -4319,58 +4408,54 @@ Le serveur a répondu avec l'erreur : %2 OCC::Systray - - Download - Télécharger - Add account Ajouter un compte - Open main dialog - Ouvrir la boîte de dialogue principale - - - Pause sync - Suspendre la synchronisation - - - Resume sync - Relancer la synchro + Download + Télécharger - Settings - Paramètres + Exit %1 + Quitter %1 Help Aide - Exit %1 - Quitter %1 + Open main dialog + Ouvrir la boîte de dialogue principale + + + Pause sync + Suspendre la synchronisation Pause sync for all Suspendre toutes les synchros + + Resume sync + Relancer la synchro + Resume sync for all Relancer toutes les synchros - + + Settings + Paramètres + + OCC::TermsOfServiceCheckWidget - Waiting for terms to be accepted - En attente de l'acceptation des conditions - - - Polling - Vote + Copy Link + Copier le lien - + Link copied to clipboard. Lien copié dans le presse-papiers. @@ -4379,10 +4464,14 @@ Le serveur a répondu avec l'erreur : %2 Ouvrir le navigateur - Copy Link - Copier le lien + Polling + Vote - + + Waiting for terms to be accepted + En attente de l'acceptation des conditions + + OCC::Theme @@ -4409,35 +4498,35 @@ Le serveur a répondu avec l'erreur : %2 Failed to fetch search providers for '%1'. Error: %2 Échec de la récupération des fournisseurs de recherche pour '%1'. Erreur : %2 - - Search has failed for '%2'. - La recherche de '%2' a échoué. - Search has failed for '%1'. Error: %2 La recherche de '%1' a échoué. Erreur: %2 - + + Search has failed for '%2'. + La recherche de '%2' a échoué. + + OCC::UpdateE2eeFolderMetadataJob - Failed to update folder metadata. - Échec du téléversement du dossier des métadonnées. + Failed to finalize item. + Impossible de finaliser l'item. - + Failed to unlock encrypted folder. Échec du déverrouillage du dossier chiffré. - Failed to finalize item. - Impossible de finaliser l'item. + Failed to update folder metadata. + Échec du téléversement du dossier des métadonnées. - + OCC::UpdateE2eeFolderUsersMetadataJob - Error updating metadata for a folder %1 - Erreur lors de la mise à jour des métadonnées pour un dossier %1 + Could not add or remove user %1 to access folder %2 + Impossible d’ajouter ou de supprimer l’utilisateur %1 de l’accès au dossier %2 Could not fetch public key for user %1 @@ -4448,8 +4537,8 @@ Le serveur a répondu avec l'erreur : %2 Impossible de trouver le dossier racine chiffré pour le dossier %1 - Could not add or remove user %1 to access folder %2 - Impossible d’ajouter ou de supprimer l’utilisateur %1 de l’accès au dossier %2 + Error updating metadata for a folder %1 + Erreur lors de la mise à jour des métadonnées pour un dossier %1 Failed to unlock a folder. @@ -4458,14 +4547,6 @@ Le serveur a répondu avec l'erreur : %2 OCC::User - - End-to-end certificate needs to be migrated to a new one - Le certificat de bout en bout doit être migré vers une nouvelle clé - - - Trigger the migration - Déclencher la migration - %n notification(s) @@ -4474,146 +4555,162 @@ Le serveur a répondu avec l'erreur : %2 - Retry all uploads - Réessayer tous les téléversements + End-to-end certificate needs to be migrated to a new one + Le certificat de bout en bout doit être migré vers une nouvelle clé - Resolve conflict - Résoudre le conflit + Open Nextcloud Assistant in browser + Ouvrir l'assistant Nextcloud dans le navigateur + Open Nextcloud Talk in browser + Ouvrir Nextcloud Discussion dans le navigateur + + Rename file Renommer le fichier - Open Nextcloud Assistant in browser - Ouvrir l'assistant Nextcloud dans le navigateur + Resolve conflict + Résoudre le conflit - Open Nextcloud Talk in browser - Ouvrir Nextcloud Discussion dans le navigateur + Retry all uploads + Réessayer tous les téléversements - - - OCC::UserModel - Confirm Account Removal - Confirmer le retrait du compte + Trigger the migration + Déclencher la migration + + + OCC::UserModel <p>Do you really want to remove the connection to the account <i>%1</i>?</p><p><b>Note:</b> This will <b>not</b> delete any files.</p> <p>Êtes-vous certain de vouloir retirer la connexion au compte <i>%1</i> ?</p><p><b>Note :</b> cette opération <b>ne supprimera aucun de vos fichiers</b> et ne supprimera pas non plus votre compte du serveur.</p> - - Remove connection - Supprimer la connexion - Cancel Annuler - + + Confirm Account Removal + Confirmer le retrait du compte + + + Remove connection + Supprimer la connexion + + OCC::UserStatusSelectorModel + + %1 days + + %1 jours + %1 jours + + + + %1 hours + + %1 heures + %1 heures + + + + %1 minutes + + %1 minutes + %1 minutes + + - Could not fetch predefined statuses. Make sure you are connected to the server. - Impossible de récupérer les statuts prédéfinis. Assurez-vous que vous êtes connecté au serveur. + 1 day + 1 jour - Could not fetch status. Make sure you are connected to the server. - Impossible de récupérer le statut. Merci de vérifier que vous êtes bien connecté(e) au serveur. + 1 hour + 1 heure - Status feature is not supported. You will not be able to set your status. - La fonctionnalité "statut" n'est pas supporté. Vous ne pourrez pas définir votre statut. + 1 minute + 1 minute - Emojis are not supported. Some status functionality may not work. - Les Emojis ne sont pas supportés. Certaines fonctionnalités de statut pourront ne pas fonctionner. + 30 minutes + 30 minutes - Could not set status. Make sure you are connected to the server. - Impossible de définir le statut. Merci de vérifier que vous êtes connecté(e) au serveur. + 4 hours + 4 heures Could not clear status message. Make sure you are connected to the server. Impossible d'effacer le message de statut. Assurez-vous que vous êtes connecté au serveur. - Don't clear - Ne pas effacer - - - 30 minutes - 30 minutes + Could not fetch predefined statuses. Make sure you are connected to the server. + Impossible de récupérer les statuts prédéfinis. Assurez-vous que vous êtes connecté au serveur. - 1 hour - 1 heure + Could not fetch status. Make sure you are connected to the server. + Impossible de récupérer le statut. Merci de vérifier que vous êtes bien connecté(e) au serveur. - 4 hours - 4 heures + Could not set status. Make sure you are connected to the server. + Impossible de définir le statut. Merci de vérifier que vous êtes connecté(e) au serveur. - Today - Aujourd'hui + Don't clear + Ne pas effacer - This week - Cette semaine + Emojis are not supported. Some status functionality may not work. + Les Emojis ne sont pas supportés. Certaines fonctionnalités de statut pourront ne pas fonctionner. Less than a minute Il y a moins d'une minute - 1 minute - 1 minute - - - %1 minutes - - %1 minutes - %1 minutes - - - - %1 hours - - %1 heures - %1 heures - + Status feature is not supported. You will not be able to set your status. + La fonctionnalité "statut" n'est pas supporté. Vous ne pourrez pas définir votre statut. - 1 day - 1 jour + This week + Cette semaine - - %1 days - - %1 jours - %1 jours - + + Today + Aujourd'hui - + OCC::Vfs Please choose a different location. %1 is a drive. It doesn't support virtual files. Veuillez choisir un emplacement différent. %1 est un lecteur. Il ne prend pas en charge les fichiers virtuels. - - Please choose a different location. %1 isn't a NTFS file system. It doesn't support virtual files. - Veuillez choisir un emplacement différent. %1 n'est pas un système de fichiers NTFS. Il ne prend pas en charge les fichiers virtuels. - Please choose a different location. %1 is a network drive. It doesn't support virtual files. Veuillez choisir un emplacement différent. %1 est un lecteur réseau. Il ne prend pas en charge les fichiers virtuels. - + + Please choose a different location. %1 isn't a NTFS file system. It doesn't support virtual files. + Veuillez choisir un emplacement différent. %1 n'est pas un système de fichiers NTFS. Il ne prend pas en charge les fichiers virtuels. + + OCC::VfsDownloadErrorDialog + + %1 could not be downloaded. + %1 ne peut pas être téléchargé. + + + > More details + > Plus de détails + Download error Erreur de téléchargement @@ -4623,26 +4720,18 @@ Le serveur a répondu avec l'erreur : %2 Erreur au téléchargement - could not be downloaded - ne peut pas être téléchargé - - - > More details - > Plus de détails + Error downloading %1 + Erreur au téléchargement %1 More details Plus de détails - Error downloading %1 - Erreur au téléchargement %1 - - - %1 could not be downloaded. - %1 ne peut pas être téléchargé. + could not be downloaded + ne peut pas être téléchargé - + OCC::VfsSuffix @@ -4677,203 +4766,231 @@ Le serveur a répondu avec l'erreur : %2 OCC::WelcomePage + + Easy-to-use web mail, calendaring & contacts + E-mail, agenda et contacts en ligne faciles à utiliser + Form Formulaire - Log in - Se connecter + Host your own server + Hébergez votre propre serveur + + + Keep your data secure and under your control + Gardez vos données en sécurité et sous votre contrôle - Sign up with provider - S'inscrire auprès d'un fournisseur + Log in + Se connecter - Keep your data secure and under your control - Gardez vos données en sécurité et sous votre contrôle + Screensharing, online meetings & web conferences + Partage d'écran, réunions en ligne et conférences Web Secure collaboration & file exchange Collaboration et échange de fichiers sécurisés - Easy-to-use web mail, calendaring & contacts - E-mail, agenda et contacts en ligne faciles à utiliser + Sign up with provider + S'inscrire auprès d'un fournisseur + + + OwncloudAdvancedSetupPage - Screensharing, online meetings & web conferences - Partage d'écran, réunions en ligne et conférences Web + &Local Folder + &Dossier local - - Host your own server - Hébergez votre propre serveur + + <html><head/><body><p>If this box is checked, existing content in the local folder will be erased to start a clean sync from the server.</p><p>Do not check this if the local content should be uploaded to the servers folder.</p></body></html> + <html><head/><body><p>Si cette case est cochée, le contenu existant du dossier local sera supprimé pour démarrer une synchronisation propre depuis le serveur.</p><p>Ne pas cocher si le contenu local doit être téléversé vers le serveur.</p></body></html> - - - OCC::ownCloudGui - Please sign in - Veuillez vous connecter + Ask before syncing external storages + Demander confirmation avant de synchroniser des stockages externes - There are no sync folders configured. - Aucun dossier à synchroniser n'est configuré + Ask before syncing folders larger than + Demander confirmation avant de synchroniser les dossiers de taille supérieure à - Disconnected from %1 - Déconnecté de %1 + Choose different folder + Choisir un autre dossier - Unsupported Server Version - Version du Serveur non prise en charge + Choose what to sync + Sélectionner le contenu à synchroniser - The server on account %1 runs an unsupported version %2. Using this client with unsupported server versions is untested and potentially dangerous. Proceed at your own risk. - Le serveur sur le compte %1 fonctionne avec une version non-supportée %2. Utiliser ce client avec des versions non-supportées du serveur n'est pas testé et est potentiellement dangereux. Procédez à vos risques et périls. + Erase local folder and start a clean sync + Effacer le dossier local et démarrer une synchronisation complète - Terms of service - Conditions d'utilisation + Keep local data + Conserver les données locales - Your account %1 requires you to accept the terms of service of your server. You will be redirected to %2 to acknowledge that you have read it and agrees with it. - Votre compte %1 vous demande d'accepter les conditions générales d'utilisation de votre serveur. Vous serez redirigé vers %2 pour confirmer que vous l'avez lu et que vous l'acceptez. + Local Folder + Dossier local - %1: %2 - Example text: "Nextcloud: Syncing 25MB (3 minutes left)" (%1 is the folder name to be synced, %2 a status message for that folder) - %1: %2 + MB + Trailing part of "Ask confirmation before syncing folder larger than" + Mo - macOS VFS for %1: Sync is running. - macOS VFS pour %1: Synchronisation en cours. + Server address + Adresse du serveur - macOS VFS for %1: Last sync was successful. - macOS VFS pour %1: La dernière synchronisation a réussi. + Sync Logo + Logo de synchronisation - macOS VFS for %1: A problem was encountered. - macOS VFS pour %1: Une erreur est survenue. + Synchronize everything from server + Tout synchroniser depuis le serveur - Checking for changes in remote "%1" - Vérification des modifications dans "%1" distant + Username + Nom d’utilisateur + + + OwncloudHttpCredsPage - Checking for changes in local "%1" - Vérification des modifications dans "%1" local + &Password + &Mot de passe + + + &Username + &Nom d’utilisateur + + + OwncloudSetupPage - Disconnected from accounts: - Déconnecté des comptes : + Logo + Logo - Account %1: %2 - Compte %1 : %2 + Server address + Adresse du serveur - Account synchronization is disabled - La synchronisation est en pause + TextLabel + Étiquette de texte - %1 (%2, %3) - %1 (%2, %3) + This is the link to your %1 web interface when you open it in the browser. + Il s'agit de l'adresse URL lorsque vous utilisez %1 dans un navigateur. - OwncloudAdvancedSetupPage + progress - Username - Nom d’utilisateur + Deleted + Supprimé - Local Folder - Dossier local + Deleting + Suppression - Choose different folder - Choisir un autre dossier + Downloaded + Reçu - Server address - Adresse du serveur + Downloading + Téléchargement - Sync Logo - Logo de synchronisation + Error + Erreur - Synchronize everything from server - Tout synchroniser depuis le serveur + Filesystem access error + Erreur d'accès au système de fichiers - Ask before syncing folders larger than - Demander confirmation avant de synchroniser les dossiers de taille supérieure à + Ignored + Exclu - Ask before syncing external storages - Demander confirmation avant de synchroniser des stockages externes + Ignoring + Ignoré - Keep local data - Conserver les données locales + Moved to %1 + Déplacé vers %1 - <html><head/><body><p>If this box is checked, existing content in the local folder will be erased to start a clean sync from the server.</p><p>Do not check this if the local content should be uploaded to the servers folder.</p></body></html> - <html><head/><body><p>Si cette case est cochée, le contenu existant du dossier local sera supprimé pour démarrer une synchronisation propre depuis le serveur.</p><p>Ne pas cocher si le contenu local doit être téléversé vers le serveur.</p></body></html> + Moving + Déplacement - Erase local folder and start a clean sync - Effacer le dossier local et démarrer une synchronisation complète + Replaced by virtual file + Remplacé par un fichier virtuel - MB - Trailing part of "Ask confirmation before syncing folder larger than" - Mo + Server version downloaded, copied changed local file into case conflict conflict file + La version du serveur est téléchargée, les changements locaux ont été copiés dans un fichier de conflit de casse. - Choose what to sync - Sélectionner le contenu à synchroniser + Server version downloaded, copied changed local file into conflict file + La version du serveur est téléchargée, les changements locaux ont été copiés dans un fichier conflit. - &Local Folder - &Dossier local + Unknown + Inconnu - - - OwncloudHttpCredsPage - &Username - &Nom d’utilisateur + Updated end-to-end encryption metadata + Métadonnées de chiffrement de bout en bout mises à jour - &Password - &Mot de passe + Updated local metadata + Métadonnées locales mises à jour - - - OwncloudSetupPage - TextLabel - Étiquette de texte + Updated local virtual files metadata + Fichiers locaux virtuels de métadonnées mis à jour - Logo - Logo + Updating end-to-end encryption metadata + Mise à jour des métadonnées de chiffrement de bout en bout + + + Updating local metadata + Mise à jour des méta-données locales - Server address - Adresse du serveur + Updating local virtual files metadata + Mise à jour des méta-données des fichiers virtuels - This is the link to your %1 web interface when you open it in the browser. - Il s'agit de l'adresse URL lorsque vous utilisez %1 dans un navigateur. + Uploaded + Téléversé - + + Uploading + Téléversement + + + Virtual file created + Fichier virtuel créé + + QObject + + %1: %2 + this displays an error string (%2) for a file %1 + %1 : %2 + %nd delay in days after an activity @@ -4882,10 +4999,6 @@ Le serveur a répondu avec l'erreur : %2 %njrs - - in the future - Dans le futur - %nh delay in hours after an activity @@ -4894,11 +5007,6 @@ Le serveur a répondu avec l'erreur : %2 %nh - - 1m - one minute after activity date and time - 1m - %nm delay in minutes after an activity @@ -4908,65 +5016,65 @@ Le serveur a répondu avec l'erreur : %2 - now - A l'instant + 1m + one minute after activity date and time + 1m - Some time ago - Il y a quelque temps + Could not create debug archive in selected location! + Impossible de créer l'archive de débogage à l'emplacement indiqué ! - %1: %2 - this displays an error string (%2) for a file %1 - %1 : %2 + Error deleting the file + Le fichier est déjà supprimé + + + Failed to create debug archive + Échec lors de la création de l'archive de déboguage New folder Nouveau dossier - Failed to create debug archive - Échec lors de la création de l'archive de déboguage + Paths beginning with '#' character are not supported in VFS mode. + Les chemins commençant par le caractère « # » ne sont pas pris en charge dans le mode VFS. - - Could not create debug archive in selected location! - Impossible de créer l'archive de débogage à l'emplacement indiqué ! + + Some time ago + Il y a quelque temps - You renamed %1 - Vous avez renommé %1 + Synced %1 + %1 a été synchronisé - You deleted %1 - Vous avez supprimé %1 + You changed %1 + Vous avez modifié %1 You created %1 Vous avez créé %1 - You changed %1 - Vous avez modifié %1 + You deleted %1 + Vous avez supprimé %1 - Synced %1 - %1 a été synchronisé + You renamed %1 + Vous avez renommé %1 - Error deleting the file - Le fichier est déjà supprimé + in the future + Dans le futur - Paths beginning with '#' character are not supported in VFS mode. - Les chemins commençant par le caractère « # » ne sont pas pris en charge dans le mode VFS. + now + A l'instant - + ResolveConflictsDialog - - Solve sync conflicts - Résoudre les conflits de synchronisation - %1 files in conflict indicate the number of conflicts to resolve @@ -4975,10 +5083,6 @@ Le serveur a répondu avec l'erreur : %2 %1 fichiers en conflit - - Choose if you want to keep the local version, server version, or both. If you choose both, the local file will have a number added to its name. - Choisissez si vous souhaitez conserver la version locale, la version serveur, ou les deux. Si vous choisissez les deux, un numéro sera ajouté au nom du fichier local. - All local versions Toutes les versions locales @@ -4987,15 +5091,23 @@ Le serveur a répondu avec l'erreur : %2 All server versions Toutes les versions serveur + + Cancel + Annuler + + + Choose if you want to keep the local version, server version, or both. If you choose both, the local file will have a number added to its name. + Choisissez si vous souhaitez conserver la version locale, la version serveur, ou les deux. Si vous choisissez les deux, un numéro sera ajouté au nom du fichier local. + Resolve conflicts Résoudre les conflits - Cancel - Annuler + Solve sync conflicts + Résoudre les conflits de synchronisation - + ShareDelegate @@ -5006,37 +5118,45 @@ Le serveur a répondu avec l'erreur : %2 ShareDetailsPage - An error occurred setting the share password. - Une erreur est survenue lors de la configuration du mot de passe de partage. - - - Edit share - Modifier le partage + Add another link + Ajouter un autre lien - Share label - Libellé du partage + Allow resharing + Permettre le repartage Allow upload and editing Autoriser le téléversement et l'édition - View only - Afficher seulement + An error occurred setting the share password. + Une erreur est survenue lors de la configuration du mot de passe de partage. - File drop (upload only) - Dépôt de fichiers (téléversement seulement) + Copy share link + Copier le lien de partage + + + Edit share + Modifier le partage - Allow resharing - Permettre le repartage + Enter a note for the recipient + Saisir une note pour le destinataire + + + File drop (upload only) + Dépôt de fichiers (téléversement seulement) Hide download Masquer le téléchargement + + Note to recipient + Note au destinataire + Password protection Protection par mot de passe @@ -5046,32 +5166,39 @@ Le serveur a répondu avec l'erreur : %2 Définir une date d'expiration - Note to recipient - Note au destinataire + Share label + Libellé du partage - Enter a note for the recipient - Saisir une note pour le destinataire + Share link copied! + Lien de partage copié ! Unshare Cesser le partage - Add another link - Ajouter un autre lien + View only + Afficher seulement + + + ShareeSearchField - Share link copied! - Lien de partage copié ! + Search for users or groups… + Rechercher des utilisateurs ou des groupes... - Copy share link - Copier le lien de partage + Sharing is not available for this folder + Le partage n'est pas disponible pour ce dossier ShareView + + Expires in %1 + Expire dans %1 + Password required for new share Mot de passe requis pour le nouveau partage @@ -5084,34 +5211,19 @@ Le serveur a répondu avec l'erreur : %2 Shared with you by %1 Partagé avec vous par %1 - - Expires in %1 - Expire dans %1 - Sharing is disabled Le partage est désactivté - - This item cannot be shared. - L'élément ne peut pas être partagé. - Sharing is disabled. Le partage est désactivé. - - - ShareeSearchField - - Search for users or groups… - Rechercher des utilisateurs ou des groupes... - - - Sharing is not available for this folder - Le partage n'est pas disponible pour ce dossier - - + + This item cannot be shared. + L'élément ne peut pas être partagé. + + SyncJournalDb @@ -5122,18 +5234,18 @@ Le serveur a répondu avec l'erreur : %2 SyncStatus - Sync now - Synchroniser maintenant + Open browser + Ouvrir le navigateur - + Resolve conflicts Résoudre les conflits - Open browser - Ouvrir le navigateur + Sync now + Synchroniser maintenant - + TalkReplyTextField @@ -5147,10 +5259,6 @@ Le serveur a répondu avec l'erreur : %2 TermsOfServiceCheckWidget - - Terms of Service - Conditions d'utilisation - Logo Logo @@ -5159,13 +5267,56 @@ Le serveur a répondu avec l'erreur : %2 Switch to your browser to accept the terms of service Accédez à votre navigateur pour accepter les conditions d'utilisation - + + Terms of Service + Conditions d'utilisation + + - TrayWindowHeader + theme - Open local or group folders - Ouvrir des dossiers locaux ou de groupe + Error occurred during setup + Une erreur est survenue pendant l'installation + + + Error occurred during sync + Une erreur est survenue pendant la synchronisation + + Preparing to sync + Préparation à la synchronisation + + + Stopping sync + Arrêt de la synchronisation + + + Sync is paused + La synchronisation est en pause + + + Sync is running + Synchronisation en cours + + + Sync status is unknown + Le statut de synchronisations est inconnu + + + Sync was successful + Synchronisation réussie + + + Sync was successful but some files were ignored + La syncronisation a réussi mais certains fichiers ont été ignorés + + + Waiting to start syncing + En attente du démarrage de la synchronisation + + + + TrayWindowHeader More apps Plus d'applications @@ -5174,7 +5325,11 @@ Le serveur a répondu avec l'erreur : %2 Open %1 in browser Ouvrir %1 dans le navigateur - + + Open local or group folders + Ouvrir des dossiers locaux ou de groupe + + UnifiedSearchInputContainer @@ -5227,67 +5382,83 @@ Le serveur a répondu avec l'erreur : %2 UserLine - Switch to account - Utiliser ce compte - - - Current account status is online - Le statut actuel du compte est "en ligne" + Account actions + Actions du compte Current account status is do not disturb Le statut actuel du compte est "ne pas déranger" - Account actions - Actions du compte + Current account status is online + Le statut actuel du compte est "en ligne" - Set status - Définir le statut + Log in + Se connecter Log out Se déconnecter - - Log in - Se connecter - Remove account Retirer le compte - + + Set status + Définir le statut + + + Switch to account + Utiliser ce compte + + UserStatusSelector - Online status - Statut en ligne + Appear offline + Apparaitre hors ligne - Online - En ligne + Apply + Appliquer - + Away Absent(e) + + Cancel + Annuler + + + Clear + Effacer + + + Clear status message after + Effacer le message de statut après + Do not disturb Ne pas déranger + + Invisible + Invisible + Mute all notifications Désactiver toutes les notifications - Invisible - Invisible + Online + En ligne - Appear offline - Apparaitre hors ligne + Online status + Statut en ligne Status message @@ -5297,59 +5468,33 @@ Le serveur a répondu avec l'erreur : %2 What is your status? Quel est votre statut ? + + + Utility - Clear status message after - Effacer le message de statut après - - - Cancel - Annuler - - - Clear - Effacer + %1 %2 + %1 %2 - - Apply - Appliquer + + %L1 B + %L1 octets - - - Utility %L1 GB %L1 Go - - %L1 MB - %L1 Mo - %L1 KB %L1 Ko - %L1 B - %L1 octets + %L1 MB + %L1 Mo %L1 TB %L1 To - - %n year(s) - - %n an - %n ans - - - - %n month(s) - - %n mois - %n mois - - %n day(s) @@ -5371,6 +5516,13 @@ Le serveur a répondu avec l'erreur : %2 %n minutes + + %n month(s) + + %n mois + %n mois + + %n second(s) @@ -5378,223 +5530,70 @@ Le serveur a répondu avec l'erreur : %2 %n secondes - - %1 %2 - %1 %2 - - - - ValidateChecksumHeader - - The checksum header is malformed. - L’en-tête de la somme de contrôle est mal formé. - - - The checksum header contained an unknown checksum type "%1" - L’en-tête de somme de contrôle contenait un type de somme de contrôle inconnu « %1 » - - - The downloaded file does not match the checksum, it will be resumed. "%1" != "%2" - Le fichier téléchargé ne correspond pas à la somme de contrôle, il sera repris. "%1" != "%2" - - - - main.cpp - - System Tray not available - Zone de notification système non disponible - - - %1 requires on a working system tray. If you are running XFCE, please follow <a href="http://docs.xfce.org/xfce/xfce4-panel/systray">these instructions</a>. Otherwise, please install a system tray application such as "trayer" and try again. - %1 nécessite une zone de notification système fonctionnelle. Si vous utiliser XFCE, veuillez suivre <a href="http://docs.xfce.org/xfce/xfce4-panel/systray">ces instructions</a>. Sinon, installez une application de la barre d'état système telle que "trayer" et réessayez. - - - - nextcloudTheme::aboutInfo() - - <p><small>Built from Git revision <a href="%1">%2</a> on %3, %4 using Qt %5, %6</small></p> - <p><small>Généré à partir de la révision Git <a href="%1">%2</a> du %3, %4 en utilisant Qt %5, %6</small></p> - - - - progress - - Virtual file created - Fichier virtuel créé - - - Replaced by virtual file - Remplacé par un fichier virtuel - - - Downloaded - Reçu - - - Uploaded - Téléversé - - - Server version downloaded, copied changed local file into conflict file - La version du serveur est téléchargée, les changements locaux ont été copiés dans un fichier conflit. - - - Server version downloaded, copied changed local file into case conflict conflict file - La version du serveur est téléchargée, les changements locaux ont été copiés dans un fichier de conflit de casse. - - - Deleted - Supprimé - - - Moved to %1 - Déplacé vers %1 - - - Ignored - Exclu - - - Filesystem access error - Erreur d'accès au système de fichiers - - - Error - Erreur - - - Updated local metadata - Métadonnées locales mises à jour - - - Updated local virtual files metadata - Fichiers locaux virtuels de métadonnées mis à jour - - - Updated end-to-end encryption metadata - Métadonnées de chiffrement de bout en bout mises à jour - - - Unknown - Inconnu - - - Downloading - Téléchargement - - - Uploading - Téléversement - - - Deleting - Suppression - - - Moving - Déplacement - - - Ignoring - Ignoré - - - Updating local metadata - Mise à jour des méta-données locales - - - Updating local virtual files metadata - Mise à jour des méta-données des fichiers virtuels - - - Updating end-to-end encryption metadata - Mise à jour des métadonnées de chiffrement de bout en bout + + %n year(s) + + %n an + %n ans + - + - theme - - Sync status is unknown - Le statut de synchronisations est inconnu - - - Waiting to start syncing - En attente du démarrage de la synchronisation - - - Sync is running - Synchronisation en cours - + utility - Sync was successful - Synchronisation réussie + Always available locally + Toujours disponible localement - Sync was successful but some files were ignored - La syncronisation a réussi mais certains fichiers ont été ignorés + Available online only + Disponible seulement en ligne - Error occurred during sync - Une erreur est survenue pendant la synchronisation + Could not open browser + Impossible de démarrer le navigateur - Error occurred during setup - Une erreur est survenue pendant l'installation + Could not open email client + Impossible d'ouvrir le client de messagerie - Stopping sync - Arrêt de la synchronisation + Currently available locally + Actuellement disponible en local - Preparing to sync - Préparation à la synchronisation + Free up local space + Libérer de l'espace local - - Sync is paused - La synchronisation est en pause + + Make always available locally + Toujours rendre disponible localement - - - utility - Could not open browser - Impossible de démarrer le navigateur + Some available online only + Certains sont disponibles en ligne seulement There was an error when launching the browser to go to URL %1. Maybe no default browser is configured? Une erreur est survenue au lancement du navigateur pour visiter l'adresse %1. Il est possible qu'aucun navigateur par défaut ne soit configuré. - - Could not open email client - Impossible d'ouvrir le client de messagerie - There was an error when launching the email client to create a new message. Maybe no default email client is configured? Il y a eu une erreur lors du lancement du client de messagerie pour créer un nouveau message. Peut-être qu'aucun client de messagerie n'est configuré ? + + + ValidateChecksumHeader - Always available locally - Toujours disponible localement - - - Currently available locally - Actuellement disponible en local - - - Some available online only - Certains sont disponibles en ligne seulement - - - Available online only - Disponible seulement en ligne + The checksum header contained an unknown checksum type "%1" + L’en-tête de somme de contrôle contenait un type de somme de contrôle inconnu « %1 » - Make always available locally - Toujours rendre disponible localement + The checksum header is malformed. + L’en-tête de la somme de contrôle est mal formé. - Free up local space - Libérer de l'espace local + The downloaded file does not match the checksum, it will be resumed. "%1" != "%2" + Le fichier téléchargé ne correspond pas à la somme de contrôle, il sera repris. "%1" != "%2" - + \ No newline at end of file diff --git a/translations/client_nl.ts b/translations/client_nl.ts index 256eb9c44320f..ef04c6c79fdd4 100644 --- a/translations/client_nl.ts +++ b/translations/client_nl.ts @@ -1,49 +1,44 @@ - - + ActivityItem - - Open %1 locally - %1 lokaal openen - In %1 In %1 - + + Open %1 locally + %1 lokaal openen + + ActivityItemContent - - Open file details - Bestandsdetails openen - Dismiss Negeren - + + Open file details + Bestandsdetails openen + + ActivityList Activity list Activiteitenlijst - - Scroll to top - Naar boven schuiven - No activities yet Nog geen activiteiten - + + Scroll to top + Naar boven schuiven + + CallNotificationDialog - - Talk notification caller avatar - Talk notificatie beller avatar - Answer Talk call notification Beantwoord Talk oproepmelding @@ -56,7 +51,11 @@ Decline Talk call notification Wijs Talk oproepmelding af - + + Talk notification caller avatar + Talk notificatie beller avatar + + CloudProviderWrapper @@ -68,62 +67,62 @@ Controleren op wijzigingen in '%1' - Syncing %1 of %2 (%3 left) - Synchroniseer %1 van %2 (%3 over) - - - Syncing %1 of %2 - Synchroniseren %1 van %2 - - - Syncing %1 (%2 left) - Synchroniseren %1 (%2 over) + Help + Help - Syncing %1 - Synchroniseren %1 + Log out + Uitloggen No recently changed files Geen recent gewijzigde bestanden - Sync paused - Synchroniseren gepauzeerd + Open website + Openen website - Syncing - Synchroniseren + Pause synchronization + Pauzeer synchronisatie - Open website - Openen website + Quit sync client + Afsluiten synchronisatieclient - + Recently changed Recent gewijzigd - Pause synchronization - Pauzeer synchronisatie + Settings + Instellingen - Help - Help + Sync paused + Synchroniseren gepauzeerd - Settings - Instellingen + Syncing + Synchroniseren - Log out - Uitloggen + Syncing %1 + Synchroniseren %1 - Quit sync client - Afsluiten synchronisatieclient + Syncing %1 (%2 left) + Synchroniseren %1 (%2 over) - + + Syncing %1 of %2 + Synchroniseren %1 van %2 + + + Syncing %1 of %2 (%3 left) + Synchroniseer %1 van %2 (%3 over) + + ConflictDelegate @@ -138,18 +137,10 @@ CurrentAccountHeaderButton - Current account - Huidige gebruiker - - - Resume sync for all - Synchronisatie hervatten voor alles - - - Pause sync for all - Synchronisatie pauzeren voor alles + Account switcher and settings menu + Wisselen van gebruiker en instellingsmenu - + Add account Gebruiker toevoegen @@ -158,30 +149,38 @@ Nieuwe gebruiker toevoegen - Settings - Instellingen - - - Exit - Verlaat + Current account + Huidige gebruiker Current account avatar Huidige gebruiker avatar + + Current account status is do not disturb + Huidige gebruikersstatus is Niet Storen + Current account status is online Huidige gebruikersstatus is Online - Current account status is do not disturb - Huidige gebruikersstatus is Niet Storen + Exit + Verlaat - Account switcher and settings menu - Wisselen van gebruiker en instellingsmenu + Pause sync for all + Synchronisatie pauzeren voor alles - + + Resume sync for all + Synchronisatie hervatten voor alles + + + Settings + Instellingen + + EditFileLocallyLoadingDialog @@ -205,23 +204,23 @@ EncryptionTokenSelectionWindow - - Token Encryption Key Chooser - Token-versleutelingssleutelkiezer - Available Keys for end-to-end Encryption: Beschikbare sleutels voor end-to-end-versleuteling + Cancel + Afbreken + + Choose Kies - Cancel - Afbreken + Token Encryption Key Chooser + Token-versleutelingssleutelkiezer - + ErrorBox @@ -253,15 +252,15 @@ Evict materialised files Gecreëerde items verwijderen - - Reload - Herlaad - Materialised items Gecreëerde items - + + Reload + Herlaad + + FileProviderFastEnumerationSettings @@ -283,24 +282,20 @@ FileProviderSettings - Virtual files settings - Virtuele bestandsinstellingen + Enable virtual files + Virtuele bestanden inschakelen - + General settings Algemene instellingen - Enable virtual files - Virtuele bestanden inschakelen + Virtual files settings + Virtuele bestandsinstellingen - + FileProviderStorageInfo - - Local storage use - Gebruik lokale opslag - %1 GB of %2 GB remote files synced %1 GB van %2 GB remote bestanden gesychroniseerd @@ -309,42 +304,50 @@ Evict local copies … Lokale kopieën verwijderen … - + + Local storage use + Gebruik lokale opslag + + FileProviderSyncStatus - - Syncing - Synchroniseren - All synced! Alles gesynchroniseerd! - - Request sync - Vraag synchronisatie aan - Request a sync of changes for the VFS environment. macOS may ignore or delay this request. Vraag een synchronisatie van wijzigingen voor de VFS-omgeving aan. macOS kan dit verzoek negeren of uitstellen. - - - FileSystem + + Request sync + Vraag synchronisatie aan + - Error removing "%1": %2 - Fout bij verwijderen '%1': %2 + Syncing + Synchroniseren + + + FileSystem Could not remove folder "%1" Kan map "%1" niet verwijderen - + + Error removing "%1": %2 + Fout bij verwijderen '%1': %2 + + Flow2AuthWidget + An error occurred while connecting. Please try again. + Er is een fout opgetreden tijdens het verbinden. Probeer het opnieuw. + + Browser Authentication Browserauthenticatie @@ -356,54 +359,68 @@ macOS kan dit verzoek negeren of uitstellen. Switch to your browser to connect your account Schakel over naar je browser om je account te verbinden - - An error occurred while connecting. Please try again. - Er is een fout opgetreden tijdens het verbinden. Probeer het opnieuw. - - + FolderWizardSourcePage - - Pick a local folder on your computer to sync - Kies een map op je computer om te synchroniseren - &Choose … &Kies ... - + + Pick a local folder on your computer to sync + Kies een map op je computer om te synchroniseren + + FolderWizardTargetPage - - Select a remote destination folder - Kies een externe doelmap - Create folder Maak map + Folders + Mappen + + Refresh Vernieuwen - Folders - Mappen + Select a remote destination folder + Kies een externe doelmap - + + + main.cpp + + %1 requires on a working system tray. If you are running XFCE, please follow <a href="http://docs.xfce.org/xfce/xfce4-panel/systray">these instructions</a>. Otherwise, please install a system tray application such as "trayer" and try again. + %1 heeft een werkend systeemvak nodig. Als je XFCE draait volg je <a href="http://docs.xfce.org/xfce/xfce4-panel/systray">deze instructies</a>. Installeer anders een systeemvak applicatie zoals "trayer" en probeer het opnieuw. + + + System Tray not available + Systeemvak niet beschikbaar + + MainWindow + New activities + + + Nextcloud desktop main dialog Nextcloud desktop basisdialoog Unified search results list - + + + + nextcloudTheme::aboutInfo() - New activities - + <p><small>Built from Git revision <a href="%1">%2</a> on %3, %4 using Qt %5, %6</small></p> + <p><small>Gebouwd vanaf Git revisie <a href="%1">%2</a> op %3, %4 gebruik makend van Qt %5, %6</small></p> @@ -412,15 +429,15 @@ macOS kan dit verzoek negeren of uitstellen. Connection timed out De verbindingstijd is verstreken - - Unknown error: network reply was deleted - Onbekende fout: netwerkantwoord verwijderd - Server replied "%1 %2" to "%3 %4" Server antwoordde "%1 %2" naar "%3 %4" - + + Unknown error: network reply was deleted + Onbekende fout: netwerkantwoord verwijderd + + OCC::Account @@ -444,381 +461,381 @@ Should the accounts be imported? %1 accounts van een eerdere desktop cliënt zijn gevonden. Moeten de accounts geïmporteerd worden? - Legacy import - Legacy import + 1 account was detected from a legacy desktop client. +Should the account be imported? + 1 account van een eerdere desktop cliënt is gevonden. Moet dit account geïmporteerd worden? + Could not import accounts from legacy client configuration. + Kon geen accounts importeren van legacy client configuratie. + + Import Import - 1 account was detected from a legacy desktop client. -Should the account be imported? - 1 account van een eerdere desktop cliënt is gevonden. Moet dit account geïmporteerd worden? + Legacy import + Legacy import Skip Overslaan - - Could not import accounts from legacy client configuration. - Kon geen accounts importeren van legacy client configuratie. - - + OCC::AccountSettings - Unchecked folders will be <b>removed</b> from your local file system and will not be synchronized to this computer anymore - Niet-geselecteerde mappen worden <b>verwijderd</b> van je lokale bestandssysteem en zullen niet meer met deze computer worden gesynchroniseerd + %1 (%3%) of %2 in use. Some folders, including network mounted or shared folders, might have different limits. + %1 (%3%) van %2 in gebruik. Sommige mappen, inclusief netwerkmappen en gedeelde mappen, kunnen andere limieten hebben. - Synchronize all - Alles synchroniseren + %1 as %2 + %1 als %2 - Synchronize none - Niets synchroniseren + %1 in use + %1 in gebruik - Apply manual changes - Handmatige wijzigingen toepassen + %1 of %2 in use + %1 van %2 in gebruik - Standard file sync - Standaard bestandssynchronisatie + (experimental) + (experimenteel) - Virtual file sync - Virtuele bestandssynchronisatie + <p>Could not create local folder <i>%1</i>.</p> + <p>Kan lokale map <i>%1</i> niet maken.</p> - Connection settings - Verbindingsinstellingen + <p>Do you really want to stop syncing the folder <i>%1</i>?</p><p><b>Note:</b> This will <b>not</b> delete any files.</p> + <p>Weet je zeker dat je het synchroniseren van map <i>%1</i> wilt stoppen?</p><p><b>Opmerking:</b> Dit zal <b>geen</b> bestanden verwijderen.</p> Apply Toepassen - Storage space: … - Opslagruimte: ... + Apply manual changes + Handmatige wijzigingen toepassen + + + Availability + Beschikbaarheid Cancel Annuleren - Connected with <server> as <user> - Verbonden met <server> als <user> + Choose what to sync + Kies wat je wilt synchroniseren - No account configured. - Geen account ingesteld. + Confirm Folder Sync Connection Removal + Bevestig het verwijderen van de verbinding voor mapsynchronisatie - End-to-end Encryption with Virtual Files - End-to-end versleuteling met virtuele bestanden + Connected to %1. + Verbonden met %1. - You seem to have the Virtual Files feature enabled on this folder. At the moment, it is not possible to implicitly download virtual files that are end-to-end encrypted. To get the best experience with virtual files and end-to-end encryption, make sure the encrypted folder is marked with "Make always available locally". - Het lijkt erop dat de functie Virtuele bestanden voor deze map is ingeschakeld. Momenteel is het niet mogelijk om impliciet virtuele bestanden te downloaden die begin-tot-eind versleuteld zijn. Om de beste ervaring met virtuele bestanden en begin-tot-eind versleuteling te krijgen, moet je ervoor zorgen dat de versleutelde map is gemarkeerd met "Altijd lokaal beschikbaar maken". + Connected with <server> as <user> + Verbonden met <server> als <user> - Do not encrypt folder - Map niet versleutelen + Connecting to %1 … + Verbinden met %1 ... - Encrypt folder - Versleutel map + Connection settings + Verbindingsinstellingen - End-to-end Encryption - Begin-tot-eind versleuteling + Could not encrypt folder because the folder does not exist anymore + Kon map niet versleutelen omdat de map niet meer bestaat - This will encrypt your folder and all files within it. These files will no longer be accessible without your encryption mnemonic key. -<b>This process is not reversible. Are you sure you want to proceed?</b> - Dit versleutelt je map en alle bestanden in de map. Deze bestanden zijn niet langer toegankelijk zonder je geheugensteunsleutel. -<b>Deze actie is onomkeerbaar. Weet je het zeker?</b> + Create new folder + Maak nieuwe map aan - Disable encryption - Encryptie deactiveren + Currently there is no storage usage information available. + Er is nu geen informatie over het gebruik van de opslagruimte beschikbaar. - Display mnemonic - Geheugensteun weergeven + Disable encryption + Encryptie deactiveren - End-to-end encryption has been enabled for this account - Begin-tot-eind versleuteling is ingeschakeld voor dit account + Disable end-to-end encryption + Begin-tot-eind versleuteling uitzetten - Warning - Waarschuwing + Disable end-to-end encryption for %1? + Begin-tot-eind versleuteling uitzetten voor %1? - Please wait for the folder to sync before trying to encrypt it. - Wacht tot de map gesynchroniseerd is alvorens deze te versleutelen. + Disable support + Ondersteuning uitschakelen - The folder has a minor sync problem. Encryption of this folder will be possible once it has synced successfully - De map heeft een klein synchronisatieprobleem. Versleuteling van de map is mogelijk als de synchronisatie gelukt is. + Disable virtual file support … + Ondersteuning voor virtuele bestanden uitschakelen... - The folder has a sync error. Encryption of this folder will be possible once it has synced successfully - De map heeft een synchronisatiefout. Versleuteling van de map is mogelijk als de synchronisatie gelukt is. + Disable virtual file support? + Ondersteuning voor virtuele bestanden uitschakelen? - End-to-end encryption is not configured on this device. Once it is configured, you will be able to encrypt this folder. -Would you like to set up end-to-end encryption? - Begin-tot-eind versleuteling is niet ingesteld op dit apparaat. Als dit ingesteld is kan je deze map versleutelen. -Wil je begin-tot-eind versleuteling instellen? + Display mnemonic + Geheugensteun weergeven - You cannot encrypt a folder with contents, please remove the files. -Wait for the new sync, then encrypt it. - Je kunt een map met inhoud niet versleutelen, verwijder de bestanden. Wacht op de nieuwe synchronisatie en versleutel ze vervolgens. + Do not encrypt folder + Map niet versleutelen - Encryption failed - Versleuteling mislukt + Edit Ignored Files + Genegeerde bestanden bewerken - Could not encrypt folder because the folder does not exist anymore - Kon map niet versleutelen omdat de map niet meer bestaat + Enable virtual file support %1 … + Virtuele bestandsondersteuning inschakelen %1... Encrypt Versleutelen - Edit Ignored Files - Genegeerde bestanden bewerken - - - Create new folder - Maak nieuwe map aan - - - Availability - Beschikbaarheid + Encrypt folder + Versleutel map - Choose what to sync - Kies wat je wilt synchroniseren + Encryption failed + Versleuteling mislukt - Force sync now - Synchronisatie nu forceren + End-to-end Encryption + Begin-tot-eind versleuteling - Restart sync - Synchronisatie herstarten + End-to-end Encryption with Virtual Files + End-to-end versleuteling met virtuele bestanden - Remove folder sync connection - Verwijder verbinding voor mapsynchronisatie + End-to-end encryption has been enabled for this account + Begin-tot-eind versleuteling is ingeschakeld voor dit account - Disable virtual file support … - Ondersteuning voor virtuele bestanden uitschakelen... + End-to-end encryption has been enabled on this account with another device.<br>It can be enabled on this device by entering your mnemonic.<br>This will enable synchronisation of existing encrypted folders. + Begin-tot-eind versleuteling is ingesteld voor dit account op een ander apparaat.<br>Het kan aangezet worden op dit apparaat door je geheugensteun in te voeren.<br>Dit activeert de synchronisatie van bestaande, versleutelde mappen. - Enable virtual file support %1 … - Virtuele bestandsondersteuning inschakelen %1... + End-to-end encryption is not configured on this device. Once it is configured, you will be able to encrypt this folder. +Would you like to set up end-to-end encryption? + Begin-tot-eind versleuteling is niet ingesteld op dit apparaat. Als dit ingesteld is kan je deze map versleutelen. +Wil je begin-tot-eind versleuteling instellen? - (experimental) - (experimenteel) + End-to-end encryption mnemonic + Geheugensteun voor begin-tot-eind versleuteling Folder creation failed Map maken mislukt - Confirm Folder Sync Connection Removal - Bevestig het verwijderen van de verbinding voor mapsynchronisatie - - - Remove Folder Sync Connection - Verwijder verbinding voor mapsynchronisatie + Force sync now + Synchronisatie nu forceren - Disable virtual file support? - Ondersteuning voor virtuele bestanden uitschakelen? + Migrate certificate to a new one + - This action will disable virtual file support. As a consequence contents of folders that are currently marked as "available online only" will be downloaded. - -The only advantage of disabling virtual file support is that the selective sync feature will become available again. - -This action will abort any currently running synchronization. - Deze actie schakelt ondersteuning voor virtuele bestanden uit. Hierdoor zullen de mappen, die gemarkeerd zijn als "alleen online beschikbaar", gedownload worden. - -Het enige voordeel van het uitschakelen van ondersteuning voor virtuele bestanden, is dat de optie voor selectieve synchronisatie weer beschikbaar komt. - -Dit zal alle synchronisaties, die op dit moment bezig zijn, afbreken. + No %1 connection configured. + Geen %1 connectie geconfigureerd. - - Disable support - Ondersteuning uitschakelen + + No account configured. + Geen account ingesteld. - End-to-end encryption mnemonic - Geheugensteun voor begin-tot-eind versleuteling + Open folder + Map openen - Sync Running - Bezig met synchroniseren + Pause sync + Synchronisatie pauzeren - The syncing operation is running.<br/>Do you want to terminate it? - Bezig met synchroniseren.<br/>Wil je stoppen met synchroniseren? + Please wait for the folder to sync before trying to encrypt it. + Wacht tot de map gesynchroniseerd is alvorens deze te versleutelen. - %1 in use - %1 in gebruik + Remove Folder Sync Connection + Verwijder verbinding voor mapsynchronisatie - Migrate certificate to a new one - + Remove folder sync connection + Verwijder verbinding voor mapsynchronisatie - There are folders that have grown in size beyond %1MB: %2 - Er zijn bestanden die groter zijn geworden dan %1MB: %2 + Removing end-to-end encryption will remove locally-synced files that are encrypted.<br>Encrypted files will remain on the server. + Verwijderen van begin-tot-eind versleuteling zal de lokale gesynchroniseerde bestanden verwijderen die versleuteld zijn.<br>Versleutelde bestanden blijven aanwezig op de server. - End-to-end encryption has been enabled on this account with another device.<br>It can be enabled on this device by entering your mnemonic.<br>This will enable synchronisation of existing encrypted folders. - Begin-tot-eind versleuteling is ingesteld voor dit account op een ander apparaat.<br>Het kan aangezet worden op dit apparaat door je geheugensteun in te voeren.<br>Dit activeert de synchronisatie van bestaande, versleutelde mappen. + Restart sync + Synchronisatie herstarten - Set up encryption - Versleuteling instellen + Resume sync + Synchronisatie hervatten - This account supports end-to-end encryption - Dit account ondersteunt end-to-end-versleuteling + Server %1 is currently being redirected, or your connection is behind a captive portal. + Server %1 wordt momenteel doorgestuurd of je verbinding zit achter een 'captive portal'. - Connected to %1. - Verbonden met %1. + Server %1 is currently in maintenance mode. + Server %1 is momenteel in onderhoudsmodus. Server %1 is temporarily unavailable. Server %1 is tijdelijk niet beschikbaar. - Server %1 is currently in maintenance mode. - Server %1 is momenteel in onderhoudsmodus. + Server configuration error: %1 at %2. + Serverconfiguratiefout: %1 op %2. + + + Set up encryption + Versleuteling instellen Signed out from %1. Uitgelogd van %1. - There are folders that were not synchronized because they are too big: - Er zijn mappen die niet gesynchroniseerd zijn, omdat ze te groot zijn: + Standard file sync + Standaard bestandssynchronisatie - There are folders that were not synchronized because they are external storages: - Er zijn mappen die niet gesynchroniseerd zijn, omdat ze op externe opslag staan: + Storage space: … + Opslagruimte: ... - There are folders that were not synchronized because they are too big or external storages: - Er zijn mappen die niet gesynchroniseerd zijn, omdat ze te groot zijn of op externe opslag staan: + Sync Running + Bezig met synchroniseren - Open folder - Map openen + Synchronize all + Alles synchroniseren - Resume sync - Synchronisatie hervatten + Synchronize none + Niets synchroniseren - Pause sync - Synchronisatie pauzeren + The folder has a minor sync problem. Encryption of this folder will be possible once it has synced successfully + De map heeft een klein synchronisatieprobleem. Versleuteling van de map is mogelijk als de synchronisatie gelukt is. - <p>Could not create local folder <i>%1</i>.</p> - <p>Kan lokale map <i>%1</i> niet maken.</p> + The folder has a sync error. Encryption of this folder will be possible once it has synced successfully + De map heeft een synchronisatiefout. Versleuteling van de map is mogelijk als de synchronisatie gelukt is. - <p>Do you really want to stop syncing the folder <i>%1</i>?</p><p><b>Note:</b> This will <b>not</b> delete any files.</p> - <p>Weet je zeker dat je het synchroniseren van map <i>%1</i> wilt stoppen?</p><p><b>Opmerking:</b> Dit zal <b>geen</b> bestanden verwijderen.</p> + The server version %1 is unsupported! Proceed at your own risk. + De serverversie %1 wordt niet ondersteund! Verdergaan is op eigen risico. - To protect your Cryptographic Identity, we encrypt it with a mnemonic of 12 dictionary words. Please note these down and keep them safe. They will be needed to add other devices to your account (like your mobile phone or laptop). - Om je cryptografische identiteit te beschermen, versleutelen we die met een geheugensteun van 12 woordenboekwoorden. Schrijf deze op en bewaar ze op een veilige plek. Ze zijn nodig om nieuwe apparaten aan je account toe te voegen (zoals je smartphone of laptop). + The syncing operation is running.<br/>Do you want to terminate it? + Bezig met synchroniseren.<br/>Wil je stoppen met synchroniseren? - Disable end-to-end encryption - Begin-tot-eind versleuteling uitzetten + There are folders that have grown in size beyond %1MB: %2 + Er zijn bestanden die groter zijn geworden dan %1MB: %2 - Disable end-to-end encryption for %1? - Begin-tot-eind versleuteling uitzetten voor %1? + There are folders that were not synchronized because they are external storages: + Er zijn mappen die niet gesynchroniseerd zijn, omdat ze op externe opslag staan: - Removing end-to-end encryption will remove locally-synced files that are encrypted.<br>Encrypted files will remain on the server. - Verwijderen van begin-tot-eind versleuteling zal de lokale gesynchroniseerde bestanden verwijderen die versleuteld zijn.<br>Versleutelde bestanden blijven aanwezig op de server. + There are folders that were not synchronized because they are too big or external storages: + Er zijn mappen die niet gesynchroniseerd zijn, omdat ze te groot zijn of op externe opslag staan: - %1 (%3%) of %2 in use. Some folders, including network mounted or shared folders, might have different limits. - %1 (%3%) van %2 in gebruik. Sommige mappen, inclusief netwerkmappen en gedeelde mappen, kunnen andere limieten hebben. + There are folders that were not synchronized because they are too big: + Er zijn mappen die niet gesynchroniseerd zijn, omdat ze te groot zijn: - %1 of %2 in use - %1 van %2 in gebruik + This account supports end-to-end encryption + Dit account ondersteunt end-to-end-versleuteling - Currently there is no storage usage information available. - Er is nu geen informatie over het gebruik van de opslagruimte beschikbaar. + This action will disable virtual file support. As a consequence contents of folders that are currently marked as "available online only" will be downloaded. + +The only advantage of disabling virtual file support is that the selective sync feature will become available again. + +This action will abort any currently running synchronization. + Deze actie schakelt ondersteuning voor virtuele bestanden uit. Hierdoor zullen de mappen, die gemarkeerd zijn als "alleen online beschikbaar", gedownload worden. + +Het enige voordeel van het uitschakelen van ondersteuning voor virtuele bestanden, is dat de optie voor selectieve synchronisatie weer beschikbaar komt. + +Dit zal alle synchronisaties, die op dit moment bezig zijn, afbreken. - %1 as %2 - %1 als %2 + This will encrypt your folder and all files within it. These files will no longer be accessible without your encryption mnemonic key. +<b>This process is not reversible. Are you sure you want to proceed?</b> + Dit versleutelt je map en alle bestanden in de map. Deze bestanden zijn niet langer toegankelijk zonder je geheugensteunsleutel. +<b>Deze actie is onomkeerbaar. Weet je het zeker?</b> - The server version %1 is unsupported! Proceed at your own risk. - De serverversie %1 wordt niet ondersteund! Verdergaan is op eigen risico. + To protect your Cryptographic Identity, we encrypt it with a mnemonic of 12 dictionary words. Please note these down and keep them safe. They will be needed to add other devices to your account (like your mobile phone or laptop). + Om je cryptografische identiteit te beschermen, versleutelen we die met een geheugensteun van 12 woordenboekwoorden. Schrijf deze op en bewaar ze op een veilige plek. Ze zijn nodig om nieuwe apparaten aan je account toe te voegen (zoals je smartphone of laptop). - Server %1 is currently being redirected, or your connection is behind a captive portal. - Server %1 wordt momenteel doorgestuurd of je verbinding zit achter een 'captive portal'. + Unable to connect to %1. + Kan niet verbinden met %1. - Connecting to %1 … - Verbinden met %1 ... + Unchecked folders will be <b>removed</b> from your local file system and will not be synchronized to this computer anymore + Niet-geselecteerde mappen worden <b>verwijderd</b> van je lokale bestandssysteem en zullen niet meer met deze computer worden gesynchroniseerd - Unable to connect to %1. - Kan niet verbinden met %1. + Virtual file sync + Virtuele bestandssynchronisatie - Server configuration error: %1 at %2. - Serverconfiguratiefout: %1 op %2. + Warning + Waarschuwing + + + You cannot encrypt a folder with contents, please remove the files. +Wait for the new sync, then encrypt it. + Je kunt een map met inhoud niet versleutelen, verwijder de bestanden. Wacht op de nieuwe synchronisatie en versleutel ze vervolgens. You need to accept the terms of service at %1. - + - No %1 connection configured. - Geen %1 connectie geconfigureerd. + You seem to have the Virtual Files feature enabled on this folder. At the moment, it is not possible to implicitly download virtual files that are end-to-end encrypted. To get the best experience with virtual files and end-to-end encryption, make sure the encrypted folder is marked with "Make always available locally". + Het lijkt erop dat de functie Virtuele bestanden voor deze map is ingeschakeld. Momenteel is het niet mogelijk om impliciet virtuele bestanden te downloaden die begin-tot-eind versleuteld zijn. Om de beste ervaring met virtuele bestanden en begin-tot-eind versleuteling te krijgen, moet je ervoor zorgen dat de versleutelde map is gemarkeerd met "Altijd lokaal beschikbaar maken". - + OCC::AccountSetupFromCommandLineJob - - The authenticated request to the server was redirected to "%1". The URL is bad, the server is misconfigured. - De geverifieerde aanvraag voor de server werd omgeleid naar "%1". De URL is onjuist, de server is verkeerd geconfigureerd. - Access forbidden by server. To verify that you have proper access, <a href="%1">click here</a> to access the service with your browser. Toegang door server verboden. Om te verifiëren dat je toegang mag hebben, <a href="%1">klik hier</a> om met je browser toegang tot de service te krijgen. + + The authenticated request to the server was redirected to "%1". The URL is bad, the server is misconfigured. + De geverifieerde aanvraag voor de server werd omgeleid naar "%1". De URL is onjuist, de server is verkeerd geconfigureerd. + There was an invalid response to an authenticated WebDAV request Er is een ongeldig antwoord ontvangen op een geverifieerde WebDAV aanvraag @@ -827,44 +844,44 @@ Dit zal alle synchronisaties, die op dit moment bezig zijn, afbreken. OCC::AccountState - Signed out - Afgemeld + Asking Credentials + Vragen naar inloggegevens - Disconnected - Niet verbonden + Configuration error + Configuratiefout Connected Verbonden - Service unavailable - Dienst niet beschikbaar + Disconnected + Niet verbonden Maintenance mode Onderhoudsmodus - Redirect detected - Redirect waargenomen + Need the user to accept the terms of service + Network error Netwerkfout - Configuration error - Configuratiefout + Redirect detected + Redirect waargenomen - Asking Credentials - Vragen naar inloggegevens + Service unavailable + Dienst niet beschikbaar - Need the user to accept the terms of service - + Signed out + Afgemeld Unknown account state @@ -873,14 +890,14 @@ Dit zal alle synchronisaties, die op dit moment bezig zijn, afbreken. OCC::ActivityListModel - - For more activities please open the Activity app. - Voor meer activiteiten open de Activiteit app. - Fetching activities … Ophalen activiteiten... + + For more activities please open the Activity app. + Voor meer activiteiten open de Activiteit app. + Network error occurred: client will retry syncing. Netwerkfout opgetreden: cliënt probeert synchronisatie opnieuw. @@ -889,91 +906,65 @@ Dit zal alle synchronisaties, die op dit moment bezig zijn, afbreken. OCC::AddCertificateDialog - SSL client certificate authentication - SSL client certificaat authenticatie + An encrypted pkcs12 bundle is strongly recommended as a copy will be stored in the configuration file. + Een versleutelde pkcs12-bundel wordt sterk aanbevolen, aangezien er een kopie wordt opgeslagen in het configuratiebestand. - This server probably requires a SSL client certificate. - De server vereist vermoedelijk een SSL client certificaat. + Browse … + Bladeren ... Certificate & Key (pkcs12): Certificaat & Sleutel (pkcs12): + Certificate files (*.p12 *.pfx) + Certificaat bestanden (*.p12 *.pfx) + + Certificate password: Wachtwoord certificaat: - An encrypted pkcs12 bundle is strongly recommended as a copy will be stored in the configuration file. - Een versleutelde pkcs12-bundel wordt sterk aanbevolen, aangezien er een kopie wordt opgeslagen in het configuratiebestand. - - - Browse … - Bladeren ... + SSL client certificate authentication + SSL client certificaat authenticatie Select a certificate Selecteer een certificaat - Certificate files (*.p12 *.pfx) - Certificaat bestanden (*.p12 *.pfx) + This server probably requires a SSL client certificate. + De server vereist vermoedelijk een SSL client certificaat. - + OCC::Application - - Some settings were configured in %1 versions of this client and use features that are not available in this version.<br><br>Continuing will mean <b>%2 these settings</b>.<br><br>The current configuration file was already backed up to <i>%3</i>. - Sommige instellingen zijn geconfigureerd in nieuwere versies van deze cliënt en maken gebruik van functies die niet beschikbaar zijn in deze versie.<br><br>Doorgaan betekent <br>%2 van deze instellingen</br>. Van het huidige configuratiebestand is al een back-up gemaakt naar <i>%3</i>. - - - newer - newer software version - recenter - - - older - older software version - ouder - - - ignoring - negeren - - - deleting - verwijderen - - - Quit - Stoppen - - - Continue - Doorgaan - %1 accounts number of accounts imported %1 accounts - - 1 account - 1 account - %1 folders number of folders imported %1 mappen + + 1 account + 1 account + 1 folder 1 map - Legacy import - Legacy import + Continue + Doorgaan + + + Error accessing the configuration file + Fout bij benaderen configuratiebestand Imported %1 and %2 from a legacy desktop client. @@ -983,33 +974,59 @@ Dit zal alle synchronisaties, die op dit moment bezig zijn, afbreken. - Error accessing the configuration file - Fout bij benaderen configuratiebestand + Legacy import + Legacy import + + + Quit + Stoppen + + + Some settings were configured in %1 versions of this client and use features that are not available in this version.<br><br>Continuing will mean <b>%2 these settings</b>.<br><br>The current configuration file was already backed up to <i>%3</i>. + Sommige instellingen zijn geconfigureerd in nieuwere versies van deze cliënt en maken gebruik van functies die niet beschikbaar zijn in deze versie.<br><br>Doorgaan betekent <br>%2 van deze instellingen</br>. Van het huidige configuratiebestand is al een back-up gemaakt naar <i>%3</i>. There was an error while accessing the configuration file at %1. Please make sure the file can be accessed by your system account. Fout bij het benaderen van het configuratiebestand op %1. Zorg ervoor dat het bestand door je systeemaccount kan worden benaderd. - - - OCC::AuthenticationDialog + + deleting + verwijderen + - Authentication Required - Authenticatie vereist + ignoring + negeren - Enter username and password for "%1" at %2. - Geef gebruikersnaam en wachtwoord op voor "%1" bij %2. + newer + newer software version + recenter - &Username: - &Gebruikersnaam: + older + older software version + ouder + + + OCC::AuthenticationDialog &Password: &Wachtwoord: - + + &Username: + &Gebruikersnaam: + + + Authentication Required + Authenticatie vereist + + + Enter username and password for "%1" at %2. + Geef gebruikersnaam en wachtwoord op voor "%1" bij %2. + + OCC::BasePropagateRemoteDeleteEncrypted @@ -1023,10 +1040,18 @@ Dit zal alle synchronisaties, die op dit moment bezig zijn, afbreken. OCC::BulkPropagatorJob + + Error updating metadata: %1 + Fout bij bijwerken metadata: %1 + File %1 cannot be uploaded because another file with the same name, differing only in case, exists Bestand %1 kan niet worden geüpload omdat er al een ander bestand met dezelfde naam bestaat, al verschillen hoofd/kleine letters + + File %1 has invalid modification time. Do not upload to the server. + Bestand %1 heeft een ongeldige laatste wijziging datum. Upload niet naar de server. + File %1 has invalid modified time. Do not upload to the server. Bestand %1 heeft een ongeldige wijzigingstijd. Niet uploaden naar de server. @@ -1036,26 +1061,22 @@ Dit zal alle synchronisaties, die op dit moment bezig zijn, afbreken.Bestand verwijderd (start upload) %1 - File %1 has invalid modification time. Do not upload to the server. - Bestand %1 heeft een ongeldige laatste wijziging datum. Upload niet naar de server. + Local file changed during sync. + Lokaal bestand gewijzigd tijdens synchronisatie. Local file changed during syncing. It will be resumed. Lokaal bestand gewijzigd gedurende synchronisatie. Wordt opnieuw meegenomen. - - Local file changed during sync. - Lokaal bestand gewijzigd tijdens synchronisatie. - Network error: %1 Netwerkfout: %1 - Error updating metadata: %1 - Fout bij bijwerken metadata: %1 + Restoration failed: %1 + Herstellen mislukt: %1 - + The file %1 is currently in use Bestand %1 is momenteel in gebruik @@ -1063,11 +1084,7 @@ Dit zal alle synchronisaties, die op dit moment bezig zijn, afbreken.The local file was removed during sync. Het lokale bestand werd verwijderd tijdens synchronisatie. - - Restoration failed: %1 - Herstellen mislukt: %1 - - + OCC::CaseClashConflictSolver @@ -1078,10 +1095,6 @@ Dit zal alle synchronisaties, die op dit moment bezig zijn, afbreken.Could not rename file. Please make sure you are connected to the server. Kan het bestand niet hernoemen. Zorg dat je verbonden bent met de server. - - You don't have the permission to rename this file. Please ask the author of the file to rename it. - Je bent niet gemachtigd om dit bestand te hernoemen. Vraag de auteur van het bestand om het te hernoemen. - Failed to fetch permissions with error %1 Ophalen van machtigingen mislukt met fout %1 @@ -1098,16 +1111,28 @@ Dit zal alle synchronisaties, die op dit moment bezig zijn, afbreken.Filename contains trailing spaces. De bestandsnaam bevat spaties achteraan. - + + You don't have the permission to rename this file. Please ask the author of the file to rename it. + Je bent niet gemachtigd om dit bestand te hernoemen. Vraag de auteur van het bestand om het te hernoemen. + + OCC::CaseClashFilenameDialog + + %1 does not support equal file names with only letter casing differences. + %1 ondersteund geen overeenkomstige bestandsnamen met verschil in hoofdlettergebruik. + + + 0 byte + 0 bytes + Case Clash Conflict Conflict in hoofdlettergebruik - The file could not be synced because it generates a case clash conflict with an existing file on this system. - Dit bestand kon niet worden gesynchroniseerd omdat er een conflict is in hoofdlettergebruik. + Case clashing file + Bestand met conflict in hoofdlettergebruik Error @@ -1118,40 +1143,36 @@ Dit zal alle synchronisaties, die op dit moment bezig zijn, afbreken.Bestaand bestand - file A - bestand A - - - today - vandaag + Filename contains illegal characters: %1 + Bestandsnaam bevat ongeldige tekens: %1 - - 0 byte - 0 bytes + + Filename contains leading and trailing spaces. + De bestandsnaam bevat spaties vooraan en achteraan. - Open existing file - Open bestaand bestand + Filename contains leading spaces. + De bestandsnaam bevat spaties vooraan. - Case clashing file - Bestand met conflict in hoofdlettergebruik + Filename contains trailing spaces. + De bestandsnaam bevat spaties achteraan. - file B - bestand B + New filename + Nieuwe bestandsnaam Open clashing file Open bestand met conflict - Please enter a new name for the clashing file: - Voer alsjeblieft een nieuwe naam in voor het bestand met het conflict: + Open existing file + Open bestaand bestand - New filename - Nieuwe bestandsnaam + Please enter a new name for the clashing file: + Voer alsjeblieft een nieuwe naam in voor het bestand met het conflict: Rename file @@ -1162,30 +1183,26 @@ Dit zal alle synchronisaties, die op dit moment bezig zijn, afbreken.Het bestand %1 kan niet worden gesynchroniseerd vanwege een conflict in hoofdlettergebruik met een bestaand bestand op dit systeem. - %1 does not support equal file names with only letter casing differences. - %1 ondersteund geen overeenkomstige bestandsnamen met verschil in hoofdlettergebruik. - - - Filename contains leading and trailing spaces. - De bestandsnaam bevat spaties vooraan en achteraan. + The file could not be synced because it generates a case clash conflict with an existing file on this system. + Dit bestand kon niet worden gesynchroniseerd omdat er een conflict is in hoofdlettergebruik. - Filename contains leading spaces. - De bestandsnaam bevat spaties vooraan. + Use invalid name + Gebruik ongeldige naam - Filename contains trailing spaces. - De bestandsnaam bevat spaties achteraan. + file A + bestand A - Use invalid name - Gebruik ongeldige naam + file B + bestand B - Filename contains illegal characters: %1 - Bestandsnaam bevat ongeldige tekens: %1 + today + vandaag - + OCC::CleanupPollsJob @@ -1196,76 +1213,72 @@ Dit zal alle synchronisaties, die op dit moment bezig zijn, afbreken. OCC::ClientSideEncryption - Input PIN code - Please keep it short and shorter than "Enter Certificate USB Token PIN:" - + Enter Certificate USB Token PIN: + - Enter Certificate USB Token PIN: - + Enter E2E passphrase + Invoeren E2E wachtwoord + + + Input PIN code + Please keep it short and shorter than "Enter Certificate USB Token PIN:" + Invalid PIN. Login failed - + Login to the token failed after providing the user PIN. It may be invalid or wrong. Please try again! - + Please enter your end-to-end encryption passphrase:<br><br>Username: %2<br>Account: %3<br> Voer je begin-tot-eind versleutelingswachtwoord in: <br><br>Gebruiker: %2<br>Account: %3<br> - - Enter E2E passphrase - Invoeren E2E wachtwoord - - + OCC::ConflictDialog - Sync Conflict - Synchronisatieconflict - - - Conflicting versions of %1. - Conflicterende versies van %1. + 0 byte + 0 bytes - Which version of the file do you want to keep?<br/>If you select both versions, the local file will have a number added to its name. - Welke versie van het bestand wil je bewaren? <br/>Als je beide versies selecteert, wordt er een getal achter de bestandsnaam van het lokale bestand gezet. + <a href="%1">Open local version</a> + <a href="%1">Open lokale versie</a> - Local version - Lokale versie + <a href="%1">Open server version</a> + <a href="%1">Open serverversie</a> Click to open the file Klik om het bestand te openen - today - vandaag + Conflicting versions of %1. + Conflicterende versies van %1. - 0 byte - 0 bytes + Keep both versions + Bewaar beide versies - <a href="%1">Open local version</a> - <a href="%1">Open lokale versie</a> + Keep local version + Bewaar lokale versie - Server version - Serverversie + Keep selected version + Bewaar geselecteerde versie - <a href="%1">Open server version</a> - <a href="%1">Open serverversie</a> + Keep server version + Bewaar serverversie - - Keep selected version - Bewaar geselecteerde versie + + Local version + Lokale versie Open local version @@ -1276,20 +1289,36 @@ Dit zal alle synchronisaties, die op dit moment bezig zijn, afbreken.Open serverversie - Keep both versions - Bewaar beide versies + Server version + Serverversie - Keep local version - Bewaar lokale versie + Sync Conflict + Synchronisatieconflict - Keep server version - Bewaar serverversie + Which version of the file do you want to keep?<br/>If you select both versions, the local file will have a number added to its name. + Welke versie van het bestand wil je bewaren? <br/>Als je beide versies selecteert, wordt er een getal achter de bestandsnaam van het lokale bestand gezet. - + + today + vandaag + + OCC::ConflictSolver + + Confirm deletion + Bevestig verwijderen + + + Do you want to delete the directory <i>%1</i> and all its contents permanently? + Wil je de map <i>%1</i>met gehele inhoud permanent verwijderen? + + + Do you want to delete the file <i>%1</i> permanently? + Wil je het bestand <i>%1</i>permanent verwijderen? + Error Fout @@ -1302,78 +1331,62 @@ Dit zal alle synchronisaties, die op dit moment bezig zijn, afbreken. - - Do you want to delete the directory <i>%1</i> and all its contents permanently? - Wil je de map <i>%1</i>met gehele inhoud permanent verwijderen? - - - Do you want to delete the file <i>%1</i> permanently? - Wil je het bestand <i>%1</i>permanent verwijderen? - - - Confirm deletion - Bevestig verwijderen - - + OCC::ConnectionValidator - Timeout - Time-out + Authentication error: Either username or password are wrong. + Authenticatiefout: Gebruikersnaam of wachtwoord onjuist. - The configured server for this client is too old - De voor dit programma ingestelde server is te oud + No Nextcloud account configured + Geen Nextcloud-account geconfigureerd Please update to the latest server and restart the client. Werk de server bij naar de nieuwste versie en herstart het programma. - Authentication error: Either username or password are wrong. - Authenticatiefout: Gebruikersnaam of wachtwoord onjuist. - - - No Nextcloud account configured - Geen Nextcloud-account geconfigureerd + The configured server for this client is too old + De voor dit programma ingestelde server is te oud The provided credentials are not correct De verstrekte inloggegevens zijn niet juist - + + Timeout + Time-out + + OCC::DiscoveryPhase - - Error while canceling deletion of a file - Fout bij het annuleren van verwijdering van een bestand - Error while canceling deletion of %1 Fout bij annuleren verwijderen van %1 - + + Error while canceling deletion of a file + Fout bij het annuleren van verwijdering van een bestand + + OCC::DiscoverySingleDirectoryJob - - Server error: PROPFIND reply is not XML formatted! - Serverfout: PROPFIND-antwoord heeft geen XML-opmaak! - Encrypted metadata setup error! Fout bij instellen versleutelde metadata! Encrypted metadata setup error: initial signature from server is empty. - + - + + Server error: PROPFIND reply is not XML formatted! + Serverfout: PROPFIND-antwoord heeft geen XML-opmaak! + + OCC::DiscoverySingleLocalDirectoryJob - - Error while opening directory %1 - Fout bij het openen van map %1 - Directory not accessible on client, permission denied Map niet toegankelijk op client, toegang geweigerd @@ -1383,77 +1396,81 @@ Dit zal alle synchronisaties, die op dit moment bezig zijn, afbreken.Map niet gevonden: %1 - Filename encoding is not valid - Bestandsnaamcodering is niet geldig + Error while opening directory %1 + Fout bij het openen van map %1 Error while reading directory %1 Fout tijdens lezen van map %1 - + + Filename encoding is not valid + Bestandsnaamcodering is niet geldig + + OCC::EditLocallyJob - Could not start editing locally. - Kon lokaal bewerken niet starten. + An error occurred during data retrieval. + Er trad een fout op tijdens het ophalen van data. An error occurred during setup. Er trad een fout op bij het instellen. - Could not find a file for local editing. Make sure its path is valid and it is synced locally. - Kon geen bestand vinden om lokaal te bewerken. Zorg ervoor dat het pad juist is en dat het lokaal gesynchroniseerd is. + An error occurred trying to synchronise the file to edit locally. + Er trad een fout op bij de poging het bestand voor lokaal bewerken te synchroniseren. Could not find a file for local editing. Make sure it is not excluded via selective sync. Kon geen bestand vinden om lokaal te bewerken. Zorg ervoor dat het niet uitgesloten is door selectieve synchronisatie. - An error occurred during data retrieval. - Er trad een fout op tijdens het ophalen van data. + Could not find a file for local editing. Make sure its path is valid and it is synced locally. + Kon geen bestand vinden om lokaal te bewerken. Zorg ervoor dat het pad juist is en dat het lokaal gesynchroniseerd is. - An error occurred trying to synchronise the file to edit locally. - Er trad een fout op bij de poging het bestand voor lokaal bewerken te synchroniseren. + Could not find a remote file info for local editing. Make sure its path is valid. + Kon geen remote bestandsinformatie vinden om lokaal te bewerken. Zorg ervoor dat het pad juist is. - Server error: PROPFIND reply is not XML formatted! - Serverfout: PROPFIND-antwoord heeft geen XML-opmaak! + Could not open %1 + Kon %1 niet openen - Could not find a remote file info for local editing. Make sure its path is valid. - Kon geen remote bestandsinformatie vinden om lokaal te bewerken. Zorg ervoor dat het pad juist is. + Could not start editing locally. + Kon lokaal bewerken niet starten. - Invalid local file path. - Ongeldig lokaal bestandspad. + File %1 already locked. + Bestand %1 is al vergrendeld. - Could not open %1 - Kon %1 niet openen + File %1 could not be locked. + Bestand %1 kon niet vergrendeld worden. - - Please try again. - Probeer a.u.b opnieuw + + File %1 now locked. + Bestand %1 is nu vergrendeld. - File %1 already locked. - Bestand %1 is al vergrendeld. + Invalid local file path. + Ongeldig lokaal bestandspad. Lock will last for %1 minutes. You can also unlock this file manually once you are finished editing. Vergrendeling duurt %1 minuten. Als je klaar bent met verwerken, kan je het bestand ook handmatig ontgrendelen. - File %1 now locked. - Bestand %1 is nu vergrendeld. + Please try again. + Probeer a.u.b opnieuw - File %1 could not be locked. - Bestand %1 kon niet vergrendeld worden. + Server error: PROPFIND reply is not XML formatted! + Serverfout: PROPFIND-antwoord heeft geen XML-opmaak! - + OCC::EditLocallyManager @@ -1468,18 +1485,10 @@ Dit zal alle synchronisaties, die op dit moment bezig zijn, afbreken. OCC::EditLocallyVerificationJob - Invalid token received. - Ongeldig token ontvangen. - - - Please try again. - Probeer a.u.b opnieuw - - - Invalid file path was provided. - Ongeldig pad opgegeven. + An error occurred trying to verify the request to edit locally. + Er trad een fout op bij de aanvraag voor lokaal bewerken. - + Could not find an account for local editing. Kon geen account vinden voor lokaal bewerken. @@ -1488,21 +1497,24 @@ Dit zal alle synchronisaties, die op dit moment bezig zijn, afbreken.Kon lokaal bewerken niet starten. - An error occurred trying to verify the request to edit locally. - Er trad een fout op bij de aanvraag voor lokaal bewerken. + Invalid file path was provided. + Ongeldig pad opgegeven. - - - OCC::EncryptFolderJob - Could not generate the metadata for encryption, Unlocking the folder. -This can be an issue with your OpenSSL libraries. - Kan de metadata voor versleuteling niet genereren, de map wordt ontgrendeld. -Dit kan een probleem zijn met je OpenSSL-bibliotheken. + Invalid token received. + Ongeldig token ontvangen. - + + Please try again. + Probeer a.u.b opnieuw + + OCC::EncryptedFolderMetadataHandler + + Error fetching encrypted folder ID. + Fout bij ophalen ID van versleutelde map. + Error fetching metadata. Fout bij ophalen metadata: %1 @@ -1511,10 +1523,6 @@ Dit kan een probleem zijn met je OpenSSL-bibliotheken. Error locking folder. Fout bij vergrendelen map. - - Error fetching encrypted folder ID. - Fout bij ophalen ID van versleutelde map. - Error parsing or decrypting metadata. Fout bij verwerken of ontsleutelen metadata. @@ -1525,71 +1533,80 @@ Dit kan een probleem zijn met je OpenSSL-bibliotheken. - OCC::FileDetails - - %1 second(s) ago - seconds elapsed since file last modified - - - - + OCC::EncryptFolderJob + + Could not generate the metadata for encryption, Unlocking the folder. +This can be an issue with your OpenSSL libraries. + Kan de metadata voor versleuteling niet genereren, de map wordt ontgrendeld. +Dit kan een probleem zijn met je OpenSSL-bibliotheken. + + + OCC::FileDetails - %1 minute(s) ago - minutes elapsed since file last modified + %1 day(s) ago + days elapsed since file last modified - - + + %1 hour(s) ago hours elapsed since file last modified - - + + - %1 day(s) ago - days elapsed since file last modified + %1 minute(s) ago + minutes elapsed since file last modified - - + + %1 month(s) ago months elapsed since file last modified - - + + + + + + %1 second(s) ago + seconds elapsed since file last modified + + + %1 year(s) ago years elapsed since file last modified - - + + Locked by %1 - Expires in %2 minute(s) remaining time before lock expires - - + + OCC::Flow2Auth - The returned server URL does not start with HTTPS despite the login URL started with HTTPS. Login will not be possible because this might be a security issue. Please contact your administrator. - De geretourneerde server-URL begint niet met HTTPS, ondanks dat de inlog-URL begint met HTTPS. Inloggen is niet mogelijk omdat dit een beveiligingsprobleem kan zijn. Neem contact op met je beheerder. + Could not parse the JSON returned from the server: <br><em>%1</em> + Kan de van de server ontvangen JSON niet verwerken: <br><em>%1</em> - + Error returned from the server: <em>%1</em> Fout gemeld door de server: <em>%1</em> @@ -1597,28 +1614,32 @@ Dit kan een probleem zijn met je OpenSSL-bibliotheken. The polling URL does not start with HTTPS despite the login URL started with HTTPS. Login will not be possible because this might be a security issue. Please contact your administrator. De polling-URL begint niet met HTTPS, ondanks dat de login-URL met HTTPS begint. Inloggen is niet mogelijk omdat dit een beveiligingsprobleem kan zijn. Neem contact op met je beheerder. - - There was an error accessing the "token" endpoint: <br><em>%1</em> - Er trad een fout op bij het benaderen van het "token" endpoint: <br><em>%1</em> - The reply from the server did not contain all expected fields Het antwoord van de server bevatte niet alle verwachte velden - Could not parse the JSON returned from the server: <br><em>%1</em> - Kan de van de server ontvangen JSON niet verwerken: <br><em>%1</em> + The returned server URL does not start with HTTPS despite the login URL started with HTTPS. Login will not be possible because this might be a security issue. Please contact your administrator. + De geretourneerde server-URL begint niet met HTTPS, ondanks dat de inlog-URL begint met HTTPS. Inloggen is niet mogelijk omdat dit een beveiligingsprobleem kan zijn. Neem contact op met je beheerder. - + + There was an error accessing the "token" endpoint: <br><em>%1</em> + Er trad een fout op bij het benaderen van het "token" endpoint: <br><em>%1</em> + + OCC::Flow2AuthWidget - Unable to open the Browser, please copy the link to your Browser. - Kan de browser niet openen, kopieer de link naar je browser. + Copy Link + Kopiëren link + + + Link copied to clipboard. + Link gekopieerd naar het klembord. - Waiting for authorization - Wachten op autorisatie + Open Browser + Polling for authorization @@ -1629,57 +1650,29 @@ Dit kan een probleem zijn met je OpenSSL-bibliotheken. Starten autorisatie - Link copied to clipboard. - Link gekopieerd naar het klembord. - - - Open Browser - + Unable to open the Browser, please copy the link to your Browser. + Kan de browser niet openen, kopieer de link naar je browser. - Copy Link - Kopiëren link + Waiting for authorization + Wachten op autorisatie - + OCC::Folder - - %1 has been removed. - %1 names a file. - %1 is verwijderd. - - - %1 has been updated. - %1 names a file. - %1 is bijgewerkt. - - - %1 has been renamed to %2. - %1 and %2 name files. - %1 is hernoemd naar %2. - - - %1 has been moved to %2. - %1 is verplaatst naar %2. - - %1 and %n other file(s) have been removed. - - - + %1 and %n other file(s) are currently locked. + + %1 en %n ander bestand zijn momenteel op slot. + %1 en %n ander(e) bestand(en) zijn momenteel op slot. - - Please choose a different location. The folder %1 doesn't exist. - - - - Please choose a different location. %1 isn't a valid folder. - - - - Please choose a different location. %1 isn't a readable folder. - + + %1 and %n other file(s) could not be synced due to errors. See the log for details. + + %1 en %n ander bestand(en) konden niet worden gesynchroniseerd wegens fouten. Bekijk het log voor details. + %1 en %n andere bestand(en) konden niet worden gesynchroniseerd wegens fouten. Bekijk het log voor details. + %1 and %n other file(s) have been added. @@ -1688,10 +1681,12 @@ Dit kan een probleem zijn met je OpenSSL-bibliotheken. %1 en %n andere bestanden zijn toegevoegd. - - %1 has been added. - %1 names a file. - %1 is toegevoegd. + + %1 and %n other file(s) have been removed. + + + + %1 and %n other file(s) have been updated. @@ -1700,19 +1695,13 @@ Dit kan een probleem zijn met je OpenSSL-bibliotheken. %1 en %n andere bestand(en) zijn bijgewerkt. - - %1 has been renamed to %2 and %n other file(s) have been renamed. - - %1 is hernoemd naar %2 en %n ander bestand(en) is hernoemd. - %1 is hernoemd naar %2 en %n andere bestand(en) zijn hernoemd. - + + %1 could not be synced due to an error. See the log for details. + %1 kon niet worden gesynchroniseerd door een fout. Bekijk het log voor details. - - %1 has been moved to %2 and %n other file(s) have been moved. - - %1 is verplaatst naar %2 en %n ander bestand(en) is verplaatst. - %1 is verplaatst naar %2 en %n andere bestand(en) zijn verplaatst. - + + %1 has a sync conflict. Please check the conflict file! + %1 heeft een synchronisatie-conflict. Controleer het conflictbestand! %1 has and %n other file(s) have sync conflicts. @@ -1722,44 +1711,46 @@ Dit kan een probleem zijn met je OpenSSL-bibliotheken. - %1 has a sync conflict. Please check the conflict file! - %1 heeft een synchronisatie-conflict. Controleer het conflictbestand! + %1 has been added. + %1 names a file. + %1 is toegevoegd. - %1 and %n other file(s) could not be synced due to errors. See the log for details. + %1 has been moved to %2 and %n other file(s) have been moved. - %1 en %n ander bestand(en) konden niet worden gesynchroniseerd wegens fouten. Bekijk het log voor details. - %1 en %n andere bestand(en) konden niet worden gesynchroniseerd wegens fouten. Bekijk het log voor details. + %1 is verplaatst naar %2 en %n ander bestand(en) is verplaatst. + %1 is verplaatst naar %2 en %n andere bestand(en) zijn verplaatst. - %1 could not be synced due to an error. See the log for details. - %1 kon niet worden gesynchroniseerd door een fout. Bekijk het log voor details. + %1 has been moved to %2. + %1 is verplaatst naar %2. + + + %1 has been removed. + %1 names a file. + %1 is verwijderd. - %1 and %n other file(s) are currently locked. + %1 has been renamed to %2 and %n other file(s) have been renamed. - %1 en %n ander bestand zijn momenteel op slot. - %1 en %n ander(e) bestand(en) zijn momenteel op slot. + %1 is hernoemd naar %2 en %n ander bestand(en) is hernoemd. + %1 is hernoemd naar %2 en %n andere bestand(en) zijn hernoemd. - %1 is currently locked. - %1 is momenteel op slot. - - - Sync Activity - Synchronisatie-activiteit + %1 has been renamed to %2. + %1 and %2 name files. + %1 is hernoemd naar %2. - Could not read system exclude file - Kon het systeem-uitsluitingsbestand niet lezen + %1 has been updated. + %1 names a file. + %1 is bijgewerkt. - A new folder larger than %1 MB has been added: %2. - - Er is een nieuwe map groter dan %1 MB toegevoegd: %2. - + %1 is currently locked. + %1 is momenteel op slot. A folder from an external storage has been added. @@ -1767,10 +1758,6 @@ Dit kan een probleem zijn met je OpenSSL-bibliotheken. Er is een map op externe opslag toegevoegd. - - Please go in the settings to select it if you wish to download it. - Ga naar de instellingen om het te selecteren als u deze wilt downloaden. - A folder has surpassed the set folder size limit of %1MB: %2. %3 @@ -1778,28 +1765,22 @@ Dit kan een probleem zijn met je OpenSSL-bibliotheken. %3 - Keep syncing - Doorgaan met synchronisatie - - - Stop syncing - Stop synchronisatie - - - The folder %1 has surpassed the set folder size limit of %2MB. - De map %1 is groter geworden dan de ingestelde limiet van %2MB - - - Would you like to stop syncing this folder? - Wil je stoppen met het synchroniseren van deze map? + A large number of files in the server have been deleted. +Please confirm if you'd like to proceed with these deletions. +Alternatively, you can restore all deleted files by uploading from '%1' folder to the server. + - The folder %1 was created but was excluded from synchronization previously. Data inside it will not be synchronized. - Map %1 is gecreëerd, maar eerder uitgesloten van synchronisatie. Bestanden erin worden niet gesynchroniseerd. + A large number of files in your local '%1' folder have been deleted. +Please confirm if you'd like to proceed with these deletions. +Alternatively, you can restore all deleted files by downloading them from the server. + - The file %1 was created but was excluded from synchronization previously. It will not be synchronized. - Bestand %1 is gecreëerd, maar eerder uitgesloten van synchronisatie. Het wordt niet gesynchroniseerd. + A new folder larger than %1 MB has been added: %2. + + Er is een nieuwe map groter dan %1 MB toegevoegd: %2. + Changes in synchronized folders could not be tracked reliably. @@ -1814,41 +1795,81 @@ Dit betekent dat de synchronisatieclient misschien niet meteen lokale wijziginge %1 - Virtual file download failed with code "%1", status "%2" and error message "%3" - + Could not read system exclude file + Kon het systeem-uitsluitingsbestand niet lezen - A large number of files in the server have been deleted. -Please confirm if you'd like to proceed with these deletions. -Alternatively, you can restore all deleted files by uploading from '%1' folder to the server. - + Keep syncing + Doorgaan met synchronisatie - A large number of files in your local '%1' folder have been deleted. -Please confirm if you'd like to proceed with these deletions. -Alternatively, you can restore all deleted files by downloading them from the server. - + Please choose a different location. %1 isn't a readable folder. + - Remove all files? - Alle bestanden verwijderen? + Please choose a different location. %1 isn't a valid folder. + + + + Please choose a different location. The folder %1 doesn't exist. + + + + Please go in the settings to select it if you wish to download it. + Ga naar de instellingen om het te selecteren als u deze wilt downloaden. Proceed with Deletion - + - Restore Files to Server - + Remove all files? + Alle bestanden verwijderen? Restore Files from Server - + - + + Restore Files to Server + + + + Stop syncing + Stop synchronisatie + + + Sync Activity + Synchronisatie-activiteit + + + The file %1 was created but was excluded from synchronization previously. It will not be synchronized. + Bestand %1 is gecreëerd, maar eerder uitgesloten van synchronisatie. Het wordt niet gesynchroniseerd. + + + The folder %1 has surpassed the set folder size limit of %2MB. + De map %1 is groter geworden dan de ingestelde limiet van %2MB + + + The folder %1 was created but was excluded from synchronization previously. Data inside it will not be synchronized. + Map %1 is gecreëerd, maar eerder uitgesloten van synchronisatie. Bestanden erin worden niet gesynchroniseerd. + + + Virtual file download failed with code "%1", status "%2" and error message "%3" + + + + Would you like to stop syncing this folder? + Wil je stoppen met het synchroniseren van deze map? + + OCC::FolderCreationDialog + Could not create a folder! Check your write permissions. + Kan map niet aanmaken! Controleer je schrijfmachtiging. + + Create new folder Maak nieuwe map aan @@ -1856,139 +1877,135 @@ Alternatively, you can restore all deleted files by downloading them from the se Enter folder name Geef mapnaam op - - Folder already exists - Map bestaat al - Error Fout - Could not create a folder! Check your write permissions. - Kan map niet aanmaken! Controleer je schrijfmachtiging. + Folder already exists + Map bestaat al - + OCC::FolderMan - Could not reset folder state - Kan de beginstaat van de map niet terugzetten + %1 (Sync is paused) + %1 (Synchronisatie onderbroken) + + + (backup %1) + (backup %1) (backup) (backup) - - (backup %1) - (backup %1) - An old sync journal "%1" was found, but could not be removed. Please make sure that no application is currently using it. Een oud synchronisatieverslag "%1" is gevonden maar kan niet worden verwijderd. Zorg ervoor dat geen applicatie dit bestand gebruikt. - Undefined state. - Ongedefinieerde status. + Could not reset folder state + Kan de beginstaat van de map niet terugzetten - Waiting to start syncing. - In afwachting van synchronisatie. + Last sync was successful. + Laatste synchronisatie was geslaagd. - Preparing for sync. - Synchronisatie wordt voorbereid + Please choose a different location. %1 is already being used as a sync folder for %2. + folder location, server url + - Syncing %1 of %2 (A few seconds left) - + Please choose a different location. %1 is already being used as a sync folder. + - Syncing %1 of %2 (%3 left) - + Please choose a different location. %1 is already contained in a folder used as a sync folder. + - Syncing %1 of %2 - Synchroniseren %1 van %2 + Please choose a different location. The path %1 doesn't exist. + - Syncing %1 (A few seconds left) - + Please choose a different location. The path %1 isn't a folder. + - Syncing %1 (%2 left) - Synchroniseren %1 (%2 over) + Please choose a different location. The selected folder isn't valid. + - Syncing %1 - Synchroniseren %1 + Please choose a different location. You don't have enough permissions to write to %1. + folder location + - Sync is running. - Bezig met synchroniseren. + Preparing for sync. + Synchronisatie wordt voorbereid + + + Setup error. + Installatiefout. Sync finished with unresolved conflicts. Synchronisatie beëindigd met niet opgeloste conflicten. - Last sync was successful. - Laatste synchronisatie was geslaagd. + Sync is paused. + Synchronisatie gepauzeerd. - Setup error. - Installatiefout. + Sync is running. + Bezig met synchroniseren. Sync request was cancelled. Synchronisatieaanvraag werd geannuleerd. - Please choose a different location. The selected folder isn't valid. - - - - Please choose a different location. %1 is already being used as a sync folder. - + Syncing %1 + Synchroniseren %1 - Please choose a different location. The path %1 doesn't exist. - + Syncing %1 (%2 left) + Synchroniseren %1 (%2 over) - Please choose a different location. The path %1 isn't a folder. - + Syncing %1 (A few seconds left) + - Please choose a different location. You don't have enough permissions to write to %1. - folder location - + Syncing %1 of %2 + Synchroniseren %1 van %2 - Please choose a different location. %1 is already contained in a folder used as a sync folder. - + Syncing %1 of %2 (%3 left) + - Please choose a different location. %1 is already being used as a sync folder for %2. - folder location, server url - + Syncing %1 of %2 (A few seconds left) + The folder %1 is linked to multiple accounts. This setup can cause data loss and it is no longer supported. To resolve this issue: please remove %1 from one of the accounts and create a new sync folder. For advanced users: this issue might be related to multiple sync database files found in one folder. Please check %1 for outdated and unused .sync_*.db files and remove them. - + - Sync is paused. - Synchronisatie gepauzeerd. + Undefined state. + Ongedefinieerde status. - %1 (Sync is paused) - %1 (Synchronisatie onderbroken) + Waiting to start syncing. + In afwachting van synchronisatie. - + OCC::FolderStatusDelegate @@ -2003,16 +2020,19 @@ For advanced users: this issue might be related to multiple sync database files OCC::FolderStatusModel - You need to be connected to add a folder - U moet verbonden zijn om een map toe te voegen + %1 %2 + Example text: "Uploading foobar.png" + %1 %2 - Click this button to add a folder to synchronize. - Klik op deze knop om een te synchroniseren map toe te voegen. + %1 %2 (%3 of %4) + Example text: "Uploading foobar.png (2MB of 2MB)" + %1 %2 (%3 van %4) - Could not decrypt! - Kon niet ontsleutelen! + %1 %2 … + Example text: "Uploading foobar.png (1MB of 2MB) time left 2 minutes at a rate of 24Kb/s" Example text: "Syncing 'foo.txt', 'bar.txt'" + %1 %2 ... %1 (%2) @@ -2020,41 +2040,42 @@ For advanced users: this issue might be related to multiple sync database files %1 (%2) - Error while loading the list of folders from the server. - Fout bij ophalen mappenlijst van de server. - - - Virtual file support is enabled. - Virtuele bestandsondersteuning is ingeschakeld. + %1 of %2, file %3 of %4 + Example text: "12 MB of 345 MB, file 6 of 7" + %1 van %2, bestand %3 van %4 - Signed out - Afgemeld + %5 left, %1 of %2, file %3 of %4 + %5 over, %1 van %2, bestand %3 van %4 - Synchronizing virtual files in local folder - Synchroniseren virtuele bestanden in lokale map + , + , - Synchronizing files in local folder - Synchroniseren bestanden in lokale map + A few seconds left, %1 of %2, file %3 of %4 + Example text: "5 minutes left, 12 MB of 345 MB, file 6 of 7" + Een paar seconden over, %1 van %2, bestand %3 van %4 - Checking for changes in remote "%1" - Controleren op wijzigingen in externe "%1" + About to start syncing + In afwachting van synchronisatie Checking for changes in local "%1" Controleren op wijzigingen in lokale "%1" - Syncing local and remote changes - Synchroniseren lokale en remote aanpassingen + Checking for changes in remote "%1" + Controleren op wijzigingen in externe "%1" - %1 %2 … - Example text: "Uploading foobar.png (1MB of 2MB) time left 2 minutes at a rate of 24Kb/s" Example text: "Syncing 'foo.txt', 'bar.txt'" - %1 %2 ... + Click this button to add a folder to synchronize. + Klik op deze knop om een te synchroniseren map toe te voegen. + + + Could not decrypt! + Kon niet ontsleutelen! Download %1/s @@ -2062,57 +2083,49 @@ For advanced users: this issue might be related to multiple sync database files Download %1/s - File %1 of %2 - Bestand %1 van %2 - - - There are unresolved conflicts. Click for details. - Er zijn nog niet-opgehelderde conflicten. Klik voor details. - - - , - , + Error while loading the list of folders from the server. + Fout bij ophalen mappenlijst van de server. Fetching folder list from server … Mappenlijst ophalen van de server ... - ↓ %1/s - ↓ %1/s + File %1 of %2 + Bestand %1 van %2 - Upload %1/s - Example text: "Upload 24Kb/s" (%1 is replaced by 24Kb (translated)) - Upload %1/s + Preparing to sync … + Voorbereiden synchronisatie ... + + + Signed out + Afgemeld - ↑ %1/s - ↑ %1/s + Synchronizing files in local folder + Synchroniseren bestanden in lokale map - %1 %2 (%3 of %4) - Example text: "Uploading foobar.png (2MB of 2MB)" - %1 %2 (%3 van %4) + Synchronizing virtual files in local folder + Synchroniseren virtuele bestanden in lokale map - %1 %2 - Example text: "Uploading foobar.png" - %1 %2 + Syncing local and remote changes + Synchroniseren lokale en remote aanpassingen - A few seconds left, %1 of %2, file %3 of %4 - Example text: "5 minutes left, 12 MB of 345 MB, file 6 of 7" - Een paar seconden over, %1 van %2, bestand %3 van %4 + There are unresolved conflicts. Click for details. + Er zijn nog niet-opgehelderde conflicten. Klik voor details. - %5 left, %1 of %2, file %3 of %4 - %5 over, %1 van %2, bestand %3 van %4 + Upload %1/s + Example text: "Upload 24Kb/s" (%1 is replaced by 24Kb (translated)) + Upload %1/s - %1 of %2, file %3 of %4 - Example text: "12 MB of 345 MB, file 6 of 7" - %1 van %2, bestand %3 van %4 + Virtual file support is enabled. + Virtuele bestandsondersteuning is ingeschakeld. Waiting for %n other folder(s) … @@ -2122,14 +2135,18 @@ For advanced users: this issue might be related to multiple sync database files - About to start syncing - In afwachting van synchronisatie + You need to be connected to add a folder + U moet verbonden zijn om een map toe te voegen - Preparing to sync … - Voorbereiden synchronisatie ... + ↑ %1/s + ↑ %1/s - + + ↓ %1/s + ↓ %1/s + + OCC::FolderWatcher @@ -2173,20 +2190,20 @@ For advanced users: this issue might be related to multiple sync database files OCC::FolderWizardRemotePath - Create Remote Folder - Externe map aanmaken + Authentication failed accessing %1 + Authenticatie mislukt bij benaderen %1 - Enter the name of the new folder to be created below "%1": - Voer de naam van de hieronder te maken nieuwe map in "%1": + Choose this to sync the entire account + Kies dit om je volledige account te synchroniseren - Folder was successfully created on %1. - Map is succesvol aangemaakt op %1. + Create Remote Folder + Externe map aanmaken - Authentication failed accessing %1 - Authenticatie mislukt bij benaderen %1 + Enter the name of the new folder to be created below "%1": + Voer de naam van de hieronder te maken nieuwe map in "%1": Failed to create the folder on %1. Please check manually. @@ -2197,264 +2214,252 @@ For advanced users: this issue might be related to multiple sync database files Tonen mappenlijst mislukt. Fout: %1 - Choose this to sync the entire account - Kies dit om je volledige account te synchroniseren + Folder was successfully created on %1. + Map is succesvol aangemaakt op %1. Please choose a different location. %1 is already being synced to %2. - + OCC::FolderWizardSelectiveSync - - Use virtual files instead of downloading content immediately %1 - Gebruik virtuele bestanden in plaats van de content direct te downloaden %1 - (experimental) (experimenteel) - Virtual files are not supported for Windows partition roots as local folder. Please choose a valid subfolder under drive letter. - Virtuele bestanden worden niet ondersteund voor Windows-partitie-hoofdmappen als lokale map. Kies een geldige submap onder de stationsletter. + Use virtual files instead of downloading content immediately %1 + Gebruik virtuele bestanden in plaats van de content direct te downloaden %1 Virtual files are not supported at the selected location - - - - - OCC::GETFileJob - - No E-Tag received from server, check Proxy/Gateway - Geen E-Tag ontvangen van de server, controleer Proxy/Gateway - - - We received a different E-Tag for resuming. Retrying next time. - We ontvingen een afwijkende E-Tag om door te gaan. We proberen het later opnieuw. - - - We received an unexpected download Content-Length. - We ontvingen een onverwachte download Content-Lengte. - - - Server returned wrong content-range - Server retourneerde verkeerde content-bandbreedte + - - Connection Timeout - Verbindingstime-out + + Virtual files are not supported for Windows partition roots as local folder. Please choose a valid subfolder under drive letter. + Virtuele bestanden worden niet ondersteund voor Windows-partitie-hoofdmappen als lokale map. Kies een geldige submap onder de stationsletter. - + OCC::GeneralSettings - General Settings - Algemene instellingen + &Automatically check for updates + &Controleer automatisch op updates - Show Call Notifications - Toon oproepmeldingen + &Launch on System Startup + &Starten bij systeemstart - For System Tray - Voor systeemvak + &Restart && Update + &Herstarten && Bijwerken - Show Chat Notifications - + - beta: contains versions with new features that may not be tested thoroughly +- daily: contains versions created daily only for testing and development + +Downgrading versions is not possible immediately: changing from beta to stable means waiting for the new stable version. + list of available update channels to non enterprise users and downgrading warning + - Show Server &Notifications - Tonen server&meldingen + - enterprise: contains stable versions for customers. + +Downgrading versions is not possible immediately: changing from stable to enterprise means waiting for the new enterprise version. + list of available update channels to enterprise users and downgrading warning + Advanced Geavanceerd - - MB - Trailing part of "Ask confirmation before syncing folder larger than" - MB - Ask for confirmation before synchronizing external storages Vraag bevestiging voor synchronisatie van mappen op externe opslag - - &Launch on System Startup - &Starten bij systeemstart - - - Use &Monochrome Icons - &Monochrome pictogrammen gebruiken - Ask for confirmation before synchronizing new folders larger than Vraag bevestiging voordat mappen worden gesynchroniseerd groter dan - - Notify when synchronised folders grow larger than specified limit - Melding als gesynchroniseerde mappen groter worden dan de opgegeven limiet - Automatically disable synchronisation of folders that overcome limit Synchronisatie automatisch uitschakelen van mappen die de limiet overschrijden - Move removed files to trash - Verplaats verwijderde bestanden naar de prullenbak - - - Show sync folders in &Explorer's navigation pane - Toon synchronisatiemappen in &Verkennen navigatievenster - - - S&how crash reporter - T&onen crash reporter + Cancel + Annuleren - Server poll interval - + Change update channel + Wijzigen bijwerkkanaal - seconds (if <a href="https://github.com/nextcloud/notify_push">Client Push</a> is unavailable) - + Changing update channel? + Wijzigen bijwerkkanaal? - Edit &Ignored Files - Bewerken &genegeerde bestanden + Check Now + Controleer nu Create Debug Archive Debugarchief maken - Info - Info + Debug Archive Created + Debugarchief Aangemaakt + Debug archive is created at %1 + Debugarchief is gemaakt op %1 + + Desktop client x.x.x Desktop cliënt x.x.x - Update channel - Bijwerkkanaal + Edit &Ignored Files + Bewerken &genegeerde bestanden - &Automatically check for updates - &Controleer automatisch op updates + For System Tray + Voor systeemvak - Check Now - Controleer nu + General Settings + Algemene instellingen - Usage Documentation - Gebruiksdocumentatie + Info + Info Legal Notice Juridische bepalingen - &Restart && Update - &Herstarten && Bijwerken + MB + Trailing part of "Ask confirmation before syncing folder larger than" + MB - Server notifications that require attention. - Servermeldingen die aandacht nodig hebben. + Move removed files to trash + Verplaats verwijderde bestanden naar de prullenbak - Show chat notification dialogs. - + Notify when synchronised folders grow larger than specified limit + Melding als gesynchroniseerde mappen groter worden dan de opgegeven limiet - Show call notification dialogs. - Toon oproepmeldingenvensters. + S&how crash reporter + T&onen crash reporter - You cannot disable autostart because system-wide autostart is enabled. - Je kunt autostart niet uitschakelen omdat systeem-brede autostart is ingeschakeld. + Server notifications that require attention. + Servermeldingen die aandacht nodig hebben. - stable - stabiel + Server poll interval + - beta - beta + Show Call Notifications + Toon oproepmeldingen - daily - dagelijks + Show Chat Notifications + - enterprise - zakelijk + Show Server &Notifications + Tonen server&meldingen - - beta: contains versions with new features that may not be tested thoroughly -- daily: contains versions created daily only for testing and development - -Downgrading versions is not possible immediately: changing from beta to stable means waiting for the new stable version. - list of available update channels to non enterprise users and downgrading warning - + Show call notification dialogs. + Toon oproepmeldingenvensters. - - enterprise: contains stable versions for customers. - -Downgrading versions is not possible immediately: changing from stable to enterprise means waiting for the new enterprise version. - list of available update channels to enterprise users and downgrading warning - + Show chat notification dialogs. + - Changing update channel? - Wijzigen bijwerkkanaal? + Show sync folders in &Explorer's navigation pane + Toon synchronisatiemappen in &Verkennen navigatievenster The channel determines which upgrades will be offered to install: - stable: contains tested versions considered reliable starts list of available update channels, stable is always available - + - Change update channel - Wijzigen bijwerkkanaal + Update channel + Bijwerkkanaal - Cancel - Annuleren + Usage Documentation + Gebruiksdocumentatie + + + Use &Monochrome Icons + &Monochrome pictogrammen gebruiken + + + You cannot disable autostart because system-wide autostart is enabled. + Je kunt autostart niet uitschakelen omdat systeem-brede autostart is ingeschakeld. Zip Archives Zip Archieven - Debug Archive Created - Debugarchief Aangemaakt + beta + beta - Debug archive is created at %1 - Debugarchief is gemaakt op %1 + daily + dagelijks - + + enterprise + zakelijk + + + seconds (if <a href="https://github.com/nextcloud/notify_push">Client Push</a> is unavailable) + + + + stable + stabiel + + - OCC::GetOrCreatePublicLinkShare + OCC::GETFileJob - Password for share required - Wachtwoord voor deellink vereist + Connection Timeout + Verbindingstime-out + + + No E-Tag received from server, check Proxy/Gateway + Geen E-Tag ontvangen van de server, controleer Proxy/Gateway - Please enter a password for your link share: - Voer het wachtwoord in voor je deellink: + Server returned wrong content-range + Server retourneerde verkeerde content-bandbreedte - Sharing error - Fout bij delen + We received a different E-Tag for resuming. Retrying next time. + We ontvingen een afwijkende E-Tag om door te gaan. We proberen het later opnieuw. + + + We received an unexpected download Content-Length. + We ontvingen een onverwachte download Content-Lengte. + + + OCC::GetOrCreatePublicLinkShare Could not retrieve or create the public link share. Error: @@ -2463,43 +2468,55 @@ Downgrading versions is not possible immediately: changing from stable to enterp %1 - - - OCC::HttpCredentialsGui + + Password for share required + Wachtwoord voor deellink vereist + - Please enter %1 password:<br><br>Username: %2<br>Account: %3<br> - Voer %1 wachtwoord in:<br><br>Gebruiker: %2<br>Account: %3<br> + Please enter a password for your link share: + Voer het wachtwoord in voor je deellink: - Reading from keychain failed with error: "%1" - Het lezen van de sleutelketen is mislukt met fout: "%1" + Sharing error + Fout bij delen + + + OCC::HttpCredentialsGui + <a href="%1">Click here</a> to request an app password from the web interface. + <a href="%1">Klik hier</a> om een nieuw app wachtwoord via de web interface op te vragen. + + Enter Password Vul het wachtwoord in - <a href="%1">Click here</a> to request an app password from the web interface. - <a href="%1">Klik hier</a> om een nieuw app wachtwoord via de web interface op te vragen. + Please enter %1 password:<br><br>Username: %2<br>Account: %3<br> + Voer %1 wachtwoord in:<br><br>Gebruiker: %2<br>Account: %3<br> - + + Reading from keychain failed with error: "%1" + Het lezen van de sleutelketen is mislukt met fout: "%1" + + OCC::IgnoreListEditor - Ignored Files Editor - Genegeerde bestanden-editor + Files Ignored by Patterns + Bestanden volgens patroon genegeerd Global Ignore Settings Algemene negeer-instellingen - Sync hidden files - Synchroniseer verborgen bestanden + Ignored Files Editor + Genegeerde bestanden-editor - Files Ignored by Patterns - Bestanden volgens patroon genegeerd + Sync hidden files + Synchroniseer verborgen bestanden This entry is provided by the system at "%1" and cannot be modified in this view. @@ -2509,24 +2526,28 @@ Downgrading versions is not possible immediately: changing from stable to enterp OCC::IgnoreListTableWidget - Pattern - Patroon + Add + Toevoegen - Allow Deletion - Verwijderen toestaan + Add Ignore Pattern + Toevoegen negeerpatroon - Add - Toevoegen + Add a new ignore pattern: + Voeg nieuw negeerpatroon toe: + + + Allow Deletion + Verwijderen toestaan - Remove - Verwijderen + Cannot write changes to "%1". + Kan geen wijzigingen wegschrijven naar "%1". - Remove all - Alles verwijderen + Could not open file + Kan het bestand niet openen Files or folders matching a pattern will not be synchronized. @@ -2537,147 +2558,151 @@ Items where deletion is allowed will be deleted if they prevent a directory from Onderdelen die gewist mogen worden, worden verwijderd als ze verhinderen dat een map verdwijnt. Dit is nuttig voor metadata. - Could not open file - Kan het bestand niet openen - - - Cannot write changes to "%1". - Kan geen wijzigingen wegschrijven naar "%1". + Pattern + Patroon - Add Ignore Pattern - Toevoegen negeerpatroon + Remove + Verwijderen - Add a new ignore pattern: - Voeg nieuw negeerpatroon toe: + Remove all + Alles verwijderen - + OCC::InvalidFilenameDialog - Invalid filename - Ongeldige bestandsnaam + Cannot rename file because a file with the same name does already exist on the server. Please pick another name. + Kan het bestand niet hernoemen omdat er al een bestand met dezelfde naam op de server bestaat. Kies een andere naam. - The file could not be synced because it contains characters which are not allowed on this system. - Dit bestand kon niet worden gesynchroniseerd omdat het symbolen bevat die niet toegestaan zijn op dit systeem. + Checking rename permissions … + Hernoem machtigingen controleren ... - Error - Fout + Could not rename file. Please make sure you are connected to the server. + Kan het bestand niet hernoemen. Zorg ervoor dat je verbonden bent met de server. - Please enter a new name for the file: - Voer alsjeblieft een nieuwe naam voor dit bestand in: + Could not rename local file. %1 + Kan lokaal bestand niet hernoemen. %1 - - New filename - Nieuwe bestandsnaam + + Error + Fout - Rename file - Bestand hernoemen + Failed to fetch permissions with error %1 + Ophalen van machtigingen mislukt met fout %1 - The file "%1" could not be synced because the name contains characters which are not allowed on this system. - Het bestand %1 kan niet worden gesynchroniseerd omdat de naam tekens bevat die niet zijn toegestaan op dit systeem. + Filename contains illegal characters: %1 + Bestandsnaam bevat ongeldige tekens: %1 - The following characters are not allowed on the system: \ / : ? * " < > | leading/trailing spaces - + Filename contains leading and trailing spaces. + De bestandsnaam bevat spaties vooraan en achteraan. - The file "%1" could not be synced because the name contains characters which are not allowed on the server. - Het bestand %1 kan niet worden gesynchroniseerd omdat de naam tekens bevat die niet zijn toegestaan op dit systeem. + Filename contains leading spaces. + De bestandsnaam bevat spaties vooraan. - The following characters are not allowed: %1 - De volgende tekens zijn niet toegestaan: %1 + Filename contains trailing spaces. + De bestandsnaam bevat spaties achteraan. - The following basenames are not allowed: %1 - De volgende basisnamen zijn niet toegestaan: %1 + Invalid filename + Ongeldige bestandsnaam - The following filenames are not allowed: %1 - De volgende bestandsnamen zijn niet toegestaan: %1 + New filename + Nieuwe bestandsnaam - The following file extensions are not allowed: %1 - De volgende bestandsextensies zijn niet toegestaan: %1 + Please enter a new name for the file: + Voer alsjeblieft een nieuwe naam voor dit bestand in: - Checking rename permissions … - Hernoem machtigingen controleren ... + Rename file + Bestand hernoemen - You don't have the permission to rename this file. Please ask the author of the file to rename it. - Je bent niet gemachtigd om dit bestand te hernoemen. Vraag de auteur van het bestand om het te hernoemen. + The file "%1" could not be synced because the name contains characters which are not allowed on the server. + Het bestand %1 kan niet worden gesynchroniseerd omdat de naam tekens bevat die niet zijn toegestaan op dit systeem. - Failed to fetch permissions with error %1 - Ophalen van machtigingen mislukt met fout %1 + The file "%1" could not be synced because the name contains characters which are not allowed on this system. + Het bestand %1 kan niet worden gesynchroniseerd omdat de naam tekens bevat die niet zijn toegestaan op dit systeem. - Filename contains leading and trailing spaces. - De bestandsnaam bevat spaties vooraan en achteraan. + The file could not be synced because it contains characters which are not allowed on this system. + Dit bestand kon niet worden gesynchroniseerd omdat het symbolen bevat die niet toegestaan zijn op dit systeem. - Filename contains leading spaces. - De bestandsnaam bevat spaties vooraan. + The following basenames are not allowed: %1 + De volgende basisnamen zijn niet toegestaan: %1 - Filename contains trailing spaces. - De bestandsnaam bevat spaties achteraan. + The following characters are not allowed on the system: \ / : ? * " < > | leading/trailing spaces + - Use invalid name - Gebruik ongeldige naam + The following characters are not allowed: %1 + De volgende tekens zijn niet toegestaan: %1 - Filename contains illegal characters: %1 - Bestandsnaam bevat ongeldige tekens: %1 + The following file extensions are not allowed: %1 + De volgende bestandsextensies zijn niet toegestaan: %1 - Could not rename file. Please make sure you are connected to the server. - Kan het bestand niet hernoemen. Zorg ervoor dat je verbonden bent met de server. + The following filenames are not allowed: %1 + De volgende bestandsnamen zijn niet toegestaan: %1 - Cannot rename file because a file with the same name does already exist on the server. Please pick another name. - Kan het bestand niet hernoemen omdat er al een bestand met dezelfde naam op de server bestaat. Kies een andere naam. + Use invalid name + Gebruik ongeldige naam - Could not rename local file. %1 - Kan lokaal bestand niet hernoemen. %1 + You don't have the permission to rename this file. Please ask the author of the file to rename it. + Je bent niet gemachtigd om dit bestand te hernoemen. Vraag de auteur van het bestand om het te hernoemen. - + OCC::LegalNotice - Legal notice - Juridische bepalingen + <p>Copyright 2017-2025 Nextcloud GmbH<br />Copyright 2012-2023 ownCloud GmbH</p> + + <p>Licensed under the GNU General Public License (GPL) Version 2.0 or any later version.</p> + <p>Gelicenseerd onder de GNU General Public License (GPL) Versie 2.0 of later</p> + + Close Sluiten - <p>Copyright 2017-2025 Nextcloud GmbH<br />Copyright 2012-2023 ownCloud GmbH</p> - - - - <p>Licensed under the GNU General Public License (GPL) Version 2.0 or any later version.</p> - <p>Gelicenseerd onder de GNU General Public License (GPL) Versie 2.0 of later</p> + Legal notice + Juridische bepalingen - + OCC::LogBrowser + + Enable logging to temporary folder + Inschakelen logging naar tijdelijke map + Log Output Log Output + Open folder + Openen map + + The client can write debug logs to a temporary folder. These logs are very helpful for diagnosing problems. Since log files can get large, the client will start a new one for each sync run and compress older ones. It will also delete log files after a couple of hours to avoid consuming too much disk space. If enabled, logs will be written to %1 @@ -2685,38 +2710,26 @@ If enabled, logs will be written to %1 Omdat logbestanden groot kunnen worden, zal de client een nieuwe starten voor elke synchronisatierun en de oudere comprimeren. Het zal ook logbestanden na een paar uur verwijderen om te voorkomen dat er te veel schijfruimte wordt verbruikt. Indien ingeschakeld, worden logboeken naar % 1 geschreven - - Enable logging to temporary folder - Inschakelen logging naar tijdelijke map - This setting persists across client restarts. Note that using any logging command line options will override this setting. Deze instelling blijft bestaan tijdens het opnieuw opstarten van de client. Merk op dat het gebruik van logging-opdrachtregel opties deze instelling zal overschrijven. - - Open folder - Openen map - - + OCC::Logger - - Error - Fout - <nobr>File "%1"<br/>cannot be opened for writing.<br/><br/>The log output <b>cannot</b> be saved!</nobr> <nobr>Bestand "%1"<br/>kan niet voor schrijven worden geopend.<br/><br/>De log output kan <b>niet</b> opgeslagen worden!</nobr> - + + Error + Fout + + OCC::Mac::FileProviderEditLocallyJob - - Could not start editing locally. - Kon lokaal bewerken niet starten. - An error occurred during setup. Er trad een fout op bij het instellen. @@ -2733,178 +2746,178 @@ Merk op dat het gebruik van logging-opdrachtregel opties deze instelling zal ove Could not get file identifier. Kon het bestands-ID niet ophalen. + + Could not start editing locally. + Kon lokaal bewerken niet starten. + The file identifier is empty. Het bestands-ID is leeg. - OCC::NSISUpdater - - New Version Available - Nieuwe versie beschikbaar - - - <p>A new version of the %1 Client is available.</p><p><b>%2</b> is available for download. The installed version is %3.</p> - <p>Er is een nieuwe versie van de %1 Client beschikbaar.</p><p><b>%2</b> is beschikbaar voor download. De geïnstalleerde versie is %3.</p> - + OCC::NetworkSettings - Update Failed - Bijwerken mislukt + Download Bandwidth + Download bandbreedte - <p>A new version of the %1 Client is available but the updating process failed.</p><p><b>%2</b> has been downloaded. The installed version is %3. If you confirm restart and update, your computer may reboot to complete the installation.</p> - <p>Een nieuwe versie van de %1 Client is beschikbaar, maar het updaten is mislukt.</p><p><b>%2</b> is gedownload. De geïnstalleerde versie is %3. Als je herstarten en bijwerken bevestigt, kan je computer opnieuw opgestart worden om de installatie te voltooien.</p> + HTTP(S) proxy + HTTP(S) proxy - Ask again later - Vraag later nogmaals + Host + Server - Restart and update - Herstarten en bijwerken + Hostname of proxy server + Hostnaam van proxyserver - Update manually - Handmatig bijwerken + KBytes/s + KBytes/s - Skip this time - Deze keer overslaan + Limit automatically + Beperk automatisch - Get update - Ophalen update + Limit to + Beperkt tot - - - OCC::NetworkSettings - Proxy Settings - Proxy Instellingen + Limit to 3/4 of estimated bandwidth + Beperk tot 3/4 van de geschatte bandbreedte - Use system proxy - Gebruik systeem proxy + Manually specify proxy + Specificeer proxy handmatig - Host - Server + No limit + Geen beperking - Proxy server requires authentication - Proxyserver heeft verificatie nodig + No proxy + Geen proxy - Download Bandwidth - Download bandbreedte + Note: proxy settings have no effects for accounts on localhost + Let op: proxy-instellingen hebben geen effect voor accounts op localhost - Limit to - Beperkt tot + Password for proxy server + Wachtwoord voor proxyserver - KBytes/s - KBytes/s + Proxy Settings + Proxy Instellingen - Note: proxy settings have no effects for accounts on localhost - Let op: proxy-instellingen hebben geen effect voor accounts op localhost + Proxy server requires authentication + Proxyserver heeft verificatie nodig - Manually specify proxy - Specificeer proxy handmatig + SOCKS5 proxy + SOCKS5 proxy - - No proxy - Geen proxy + + Upload Bandwidth + Upload bandbreedte Use global settings Gebruik globale instellingen - No limit - Geen beperking + Use system proxy + Gebruik systeem proxy - Limit to 3/4 of estimated bandwidth - Beperk tot 3/4 van de geschatte bandbreedte + Username for proxy server + Gebruikersnaam voor proxyserver + + + OCC::NSISUpdater - Upload Bandwidth - Upload bandbreedte + <p>A new version of the %1 Client is available but the updating process failed.</p><p><b>%2</b> has been downloaded. The installed version is %3. If you confirm restart and update, your computer may reboot to complete the installation.</p> + <p>Een nieuwe versie van de %1 Client is beschikbaar, maar het updaten is mislukt.</p><p><b>%2</b> is gedownload. De geïnstalleerde versie is %3. Als je herstarten en bijwerken bevestigt, kan je computer opnieuw opgestart worden om de installatie te voltooien.</p> - Limit automatically - Beperk automatisch + <p>A new version of the %1 Client is available.</p><p><b>%2</b> is available for download. The installed version is %3.</p> + <p>Er is een nieuwe versie van de %1 Client beschikbaar.</p><p><b>%2</b> is beschikbaar voor download. De geïnstalleerde versie is %3.</p> - Hostname of proxy server - Hostnaam van proxyserver + Ask again later + Vraag later nogmaals - Username for proxy server - Gebruikersnaam voor proxyserver + Get update + Ophalen update - - Password for proxy server - Wachtwoord voor proxyserver + + New Version Available + Nieuwe versie beschikbaar - HTTP(S) proxy - HTTP(S) proxy + Restart and update + Herstarten en bijwerken - SOCKS5 proxy - SOCKS5 proxy + Skip this time + Deze keer overslaan - - - OCC::OCUpdater - Could not check for new updates. - Kan niet controleren op nieuwe updates. + Update Failed + Bijwerken mislukt - Checking update server … - Controleren updateserver ... + Update manually + Handmatig bijwerken + + + OCC::OCUpdater - New %1 update ready - Nieuwe %1 update is klaar + %1 available. Restart application to start the update. + %1 beschikbaar. Herstart de applicatie om de update te starten. A new update for %1 is about to be installed. The updater may ask for additional privileges during the process. Your computer may reboot to complete the installation. Een nieuwe update voor %1 wordt geïnstalleerd. De updater kan om extra privileges vragen tijdens het update proces. Je computer kan herstart worden om de installatie te voltooien. - Downloading %1 … - Downloaden %1 … - - - %1 available. Restart application to start the update. - %1 beschikbaar. Herstart de applicatie om de update te starten. + Checking update server … + Controleren updateserver ... - Could not download update. Please open <a href='%1'>%1</a> to download the update manually. - Kon de download niet bijwerken. Open <a href='%1'>%1</a> om de update handmatig te downloaden. + Could not check for new updates. + Kan niet controleren op nieuwe updates. Could not download update. Please open %1 to download the update manually. Kon de update niet downloaden. Open %1 om de update handmatig te downloaden. - New %1 is available. Please open <a href='%2'>%2</a> to download the update. - Nieuwe %1 beschikbaar. Open <a href='%2'>%1</a> om de update te downloaden. + Could not download update. Please open <a href='%1'>%1</a> to download the update manually. + Kon de download niet bijwerken. Open <a href='%1'>%1</a> om de update handmatig te downloaden. + + + Downloading %1 … + Downloaden %1 … New %1 is available. Please open %2 to download the update. Nieuwe %1 beschikbaar. Open %2 om de update te downloaden. - Update status is unknown: Did not check for new updates. - Update status is onbekend: niet gecontroleerd op nieuwe updates. + New %1 is available. Please open <a href='%2'>%2</a> to download the update. + Nieuwe %1 beschikbaar. Open <a href='%2'>%1</a> om de update te downloaden. + + + New %1 update ready + Nieuwe %1 update is klaar No updates available. Your installation is at the latest version. @@ -2914,95 +2927,171 @@ Merk op dat het gebruik van logging-opdrachtregel opties deze instelling zal ove Update Check Controle update - + + Update status is unknown: Did not check for new updates. + Update status is onbekend: niet gecontroleerd op nieuwe updates. + + OCC::OwncloudAdvancedSetupPage - Connect - Verbinden + %1 folder "%2" is synced to local folder "%3" + %1 map "%2" is gesynchroniseerd naar de lokale map "%3" + + + %1 free space + %1 gets replaced with the size and a matching unit. Example: 3 MB or 5 GB + %1 vrije ruimte + + + (%1) + (%1) (experimental) (experimenteel) - Use &virtual files instead of downloading content immediately %1 - Gebruik &virtuele bestanden in plaats van direct downloaden content%1 + Connect + Verbinden - Virtual files are not supported for Windows partition roots as local folder. Please choose a valid subfolder under drive letter. - Virtuele bestanden worden niet ondersteund voor Windows-partitie-hoofdmappen als lokale map. Kies een geldige submap onder de stationsletter. + In Finder's "Locations" sidebar section + - - %1 folder "%2" is synced to local folder "%3" - %1 map "%2" is gesynchroniseerd naar de lokale map "%3" + + Local Sync Folder + Lokale synchronisatiemap Sync the folder "%1" Synchroniseer de map "%1" - Warning: The local folder is not empty. Pick a resolution! - Waarschuwing: De lokale map is niet leeg. Maak een keuze! + There isn't enough free space in the local folder! + Er is niet genoeg ruimte beschikbaar in de lokale map! - %1 free space - %1 gets replaced with the size and a matching unit. Example: 3 MB or 5 GB - %1 vrije ruimte + Use &virtual files instead of downloading content immediately %1 + Gebruik &virtuele bestanden in plaats van direct downloaden content%1 Virtual files are not supported at the selected location - + - Local Sync Folder - Lokale synchronisatiemap + Virtual files are not supported for Windows partition roots as local folder. Please choose a valid subfolder under drive letter. + Virtuele bestanden worden niet ondersteund voor Windows-partitie-hoofdmappen als lokale map. Kies een geldige submap onder de stationsletter. - (%1) - (%1) + Warning: The local folder is not empty. Pick a resolution! + Waarschuwing: De lokale map is niet leeg. Maak een keuze! + + + OCC::OwncloudConnectionMethodDialog - There isn't enough free space in the local folder! - Er is niet genoeg ruimte beschikbaar in de lokale map! + <html><head/><body><p>Failed to connect to the secure server address <em>%1</em>. How do you wish to proceed?</p></body></html> + <html><head/><body><p>Kan niet verbinden met het opgegeven beveiligde serveradres <em>%1</em>.Hoe wilt u verder gaan?</p></body></html> + + + <html><head/><body><p>Failed to connect to the secure server address specified. How do you wish to proceed?</p></body></html> + <html><head/><body><p>Kan niet verbinden met het opgegeven beveiligde serveradres. Hoe wilt u verder gaan?</p></body></html> - In Finder's "Locations" sidebar section - + Configure client-side TLS certificate + Configureer het client-side TLS-certificaat - - - OCC::OwncloudConnectionMethodDialog Connection failed Verbinding mislukt - <html><head/><body><p>Failed to connect to the secure server address specified. How do you wish to proceed?</p></body></html> - <html><head/><body><p>Kan niet verbinden met het opgegeven beveiligde serveradres. Hoe wilt u verder gaan?</p></body></html> + Retry unencrypted over HTTP (insecure) + Probeer onversleuteld over HTTP (onbeveiligd) Select a different URL Selecteer een andere URL + + + OCC::ownCloudGui - Retry unencrypted over HTTP (insecure) - Probeer onversleuteld over HTTP (onbeveiligd) + %1 (%2, %3) + %1 (%2, %3) + + + %1: %2 + Example text: "Nextcloud: Syncing 25MB (3 minutes left)" (%1 is the folder name to be synced, %2 a status message for that folder) + %1: %2 - Configure client-side TLS certificate - Configureer het client-side TLS-certificaat + Account %1: %2 + Account %1: %2 - <html><head/><body><p>Failed to connect to the secure server address <em>%1</em>. How do you wish to proceed?</p></body></html> - <html><head/><body><p>Kan niet verbinden met het opgegeven beveiligde serveradres <em>%1</em>.Hoe wilt u verder gaan?</p></body></html> + Account synchronization is disabled + Account synchronisatie is uitgeschakeld - - - OCC::OwncloudHttpCredsPage - &Email - &E-mail + Checking for changes in local "%1" + Controleren op wijzigingen in lokale "%1" + + + Checking for changes in remote "%1" + Controleren op wijzigingen in externe "%1" + + + Disconnected from %1 + Losgekoppeld van %1 + + + Disconnected from accounts: + Losgekoppeld van account: + + + Please sign in + Log alstublieft in + + + Terms of service + + + + The server on account %1 runs an unsupported version %2. Using this client with unsupported server versions is untested and potentially dangerous. Proceed at your own risk. + De server van account %1 gebruikt een niet ondersteunde versie %2. Het gebruik van deze clientsoftware met niet-ondersteunde server versies is niet getest en mogelijk gevaarlijk. Verdergaan is op eigen risico. + + + There are no sync folders configured. + Er zijn geen synchronisatie-mappen geconfigureerd. + + + Unsupported Server Version + Niet-ondersteunde server versie + + + Your account %1 requires you to accept the terms of service of your server. You will be redirected to %2 to acknowledge that you have read it and agrees with it. + + + + macOS VFS for %1: A problem was encountered. + + + + macOS VFS for %1: Last sync was successful. + + + + macOS VFS for %1: Sync is running. + + + + + OCC::OwncloudHttpCredsPage + + &Email + &E-mail Connect to %1 @@ -3022,161 +3111,157 @@ Merk op dat het gebruik van logging-opdrachtregel opties deze instelling zal ove OCC::OwncloudSetupPage - - The link to your %1 web interface when you open it in the browser. - %1 will be replaced with the application name - De link naar je %1 web interface wanneer je die opent in de browser. - &Next > &Volgende > + Could not load certificate. Maybe wrong password? + Kan certificaat niet laden. Misschien is het wachtwoord onjuist? + + Server address does not seem to be valid Het serveradres lijkt niet geldig - Could not load certificate. Maybe wrong password? - Kan certificaat niet laden. Misschien is het wachtwoord onjuist? + The link to your %1 web interface when you open it in the browser. + %1 will be replaced with the application name + De link naar je %1 web interface wanneer je die opent in de browser. - + OCC::OwncloudSetupWizard + <font color="green"><b>File Provider-based account %1 successfully created!</b></font> + + + + <font color="green"><b>Local sync folder %1 successfully created!</b></font> + <font color="green"><b>Lokale synch map %1 is succesvol aangemaakt!</b></font> + + <font color="green">Successfully connected to %1: %2 version %3 (%4)</font><br/><br/> <font color="green">Succesvol verbonden met %1: %2 versie %3 (%4)</font><br/><br/> - Failed to connect to %1 at %2:<br/>%3 - Kon geen verbinding maken met %1 op %2:<br/>%3 + <p><font color="red">Remote folder creation failed probably because the provided credentials are wrong.</font><br/>Please go back and check your credentials.</p> + <p><font color="red">Het aanmaken van de externe map is mislukt, waarschijnlijk omdat je inloggegevens fout waren.</font><br/>ga terug en controleer je inloggevens.</p> - Timeout while trying to connect to %1 at %2. - Time-out bij verbinden met %1 op %2. + A sync connection from %1 to remote directory %2 was set up. + Er is een synchronisatie verbinding van %1 naar externe map %2 opgezet. Access forbidden by server. To verify that you have proper access, <a href="%1">click here</a> to access the service with your browser. Toegang door server verboden. Om te verifiëren dat je toegang mag hebben, <a href="%1">klik hier</a> om met je browser toegang tot de service te krijgen. - Invalid URL - Ongeldige URL + Cannot remove and back up the folder because the folder or a file in it is open in another program. Please close the folder or file and hit retry or cancel the setup. + Kan de map niet verwijderen en back-uppen, omdat de map of een bestand daarin, geopend is in een ander programma. Sluit de map of het bestand en drup op Opnieuw of annuleer de installatie. - Trying to connect to %1 at %2 … - Probeer te verbinden met %1 om %2 ... + Connection to %1 could not be established. Please check again. + Er kan geen verbinding worden gemaakt met %1. Probeer het nog eens. - The authenticated request to the server was redirected to "%1". The URL is bad, the server is misconfigured. - De geauthentiseerde aanvraag voor de server werd omgeleid naar "%1". De URL is onjuist, de server is verkeerd geconfigureerd. + Could not create local folder %1 + Kan lokale map %1 niet aanmaken - There was an invalid response to an authenticated WebDAV request - Er is een ongeldig antwoord ontvangen op een geauthenticeerde WebDAV opvraging + Creating local sync folder %1 … + Creëren lokale synchronisatie map %1 ... - Local sync folder %1 already exists, setting it up for sync.<br/><br/> - Lokale synchronisatie map %1 bestaat al, deze wordt ingesteld voor synchronisatie.<br/><br/> + Error: %1 + Fout: %1 - Creating local sync folder %1 … - Creëren lokale synchronisatie map %1 ... + Failed to connect to %1 at %2:<br/>%3 + Kon geen verbinding maken met %1 op %2:<br/>%3 - OK - OK + Folder rename failed + Hernoemen map mislukt - failed. - mislukt. + Invalid URL + Ongeldige URL - Could not create local folder %1 - Kan lokale map %1 niet aanmaken + Local sync folder %1 already exists, setting it up for sync.<br/><br/> + Lokale synchronisatie map %1 bestaat al, deze wordt ingesteld voor synchronisatie.<br/><br/> No remote folder specified! Geen externe map opgegeven! - Error: %1 - Fout: %1 - - - creating folder on Nextcloud: %1 - aanmaken map op Nextcloud: %1 + OK + OK Remote folder %1 created successfully. Externe map %1 succesvol gecreëerd. - The remote folder %1 already exists. Connecting it for syncing. - De externe map %1 bestaat al. Verbinden voor synchroniseren. - - - The folder creation resulted in HTTP error code %1 - Het aanmaken van de map resulteerde in HTTP foutcode %1 - - - The remote folder creation failed because the provided credentials are wrong!<br/>Please go back and check your credentials.</p> - Het aanmaken van de externe map is mislukt, waarschijnlijk omdat je inloggegevens fout waren.<br/>Ga terug en controleer je inloggegevens.</p> + Remote folder %1 creation failed with error <tt>%2</tt>. + Aanmaken van externe map %1 mislukt met fout <tt>%2</tt>. - <p><font color="red">Remote folder creation failed probably because the provided credentials are wrong.</font><br/>Please go back and check your credentials.</p> - <p><font color="red">Het aanmaken van de externe map is mislukt, waarschijnlijk omdat je inloggegevens fout waren.</font><br/>ga terug en controleer je inloggevens.</p> + Successfully connected to %1! + Succesvol verbonden met %1! - Remote folder %1 creation failed with error <tt>%2</tt>. - Aanmaken van externe map %1 mislukt met fout <tt>%2</tt>. + The authenticated request to the server was redirected to "%1". The URL is bad, the server is misconfigured. + De geauthentiseerde aanvraag voor de server werd omgeleid naar "%1". De URL is onjuist, de server is verkeerd geconfigureerd. - A sync connection from %1 to remote directory %2 was set up. - Er is een synchronisatie verbinding van %1 naar externe map %2 opgezet. + The folder creation resulted in HTTP error code %1 + Het aanmaken van de map resulteerde in HTTP foutcode %1 - Successfully connected to %1! - Succesvol verbonden met %1! + The remote folder %1 already exists. Connecting it for syncing. + De externe map %1 bestaat al. Verbinden voor synchroniseren. - Connection to %1 could not be established. Please check again. - Er kan geen verbinding worden gemaakt met %1. Probeer het nog eens. + The remote folder creation failed because the provided credentials are wrong!<br/>Please go back and check your credentials.</p> + Het aanmaken van de externe map is mislukt, waarschijnlijk omdat je inloggegevens fout waren.<br/>Ga terug en controleer je inloggegevens.</p> - Folder rename failed - Hernoemen map mislukt + There was an invalid response to an authenticated WebDAV request + Er is een ongeldig antwoord ontvangen op een geauthenticeerde WebDAV opvraging - Cannot remove and back up the folder because the folder or a file in it is open in another program. Please close the folder or file and hit retry or cancel the setup. - Kan de map niet verwijderen en back-uppen, omdat de map of een bestand daarin, geopend is in een ander programma. Sluit de map of het bestand en drup op Opnieuw of annuleer de installatie. + Timeout while trying to connect to %1 at %2. + Time-out bij verbinden met %1 op %2. - <font color="green"><b>File Provider-based account %1 successfully created!</b></font> - + Trying to connect to %1 at %2 … + Probeer te verbinden met %1 om %2 ... Virtual files enabled - + Your account is now syncing with virtual files support. This means that all your files are online-only by default, and will be downloaded on-demand when you open them. You may find your files under the <b>Locations</b> section of the Finder sidebar. - + - <font color="green"><b>Local sync folder %1 successfully created!</b></font> - <font color="green"><b>Lokale synch map %1 is succesvol aangemaakt!</b></font> + creating folder on Nextcloud: %1 + aanmaken map op Nextcloud: %1 - + + failed. + mislukt. + + OCC::OwncloudWizard Add %1 account Toevoegen %1 account - - Skip folders configuration - Sla configuratie van mappen over - Cancel Annuleren @@ -3186,6 +3271,18 @@ Merk op dat het gebruik van logging-opdrachtregel opties deze instelling zal ove Inschakelen experimentele functies? + Enable experimental placeholder mode + Inschakelen experimentele aanduider modus + + + Skip folders configuration + Sla configuratie van mappen over + + + Stay safe + Blijf veilig + + When the "virtual files" mode is enabled no files will be downloaded initially. Instead, a tiny "%1" file will be created for each file that exists on the server. The contents can be downloaded by running these files or by using their context menu. The virtual files mode is mutually exclusive with selective sync. Currently unselected folders will be translated to online-only folders and your selective sync settings will be reset. @@ -3201,15 +3298,7 @@ Als je naar deze modus overschakelt, wordt elke momenteel lopende synchronisatie Dit is een nieuwe, experimentele modus. Als je besluit het te gebruiken, vragen we je om eventuele problemen te melden. - - Enable experimental placeholder mode - Inschakelen experimentele aanduider modus - - - Stay safe - Blijf veilig - - + OCC::PasswordInputDialog @@ -3230,45 +3319,11 @@ Dit is een nieuwe, experimentele modus. Als je besluit het te gebruiken, vragen OCC::ProcessDirectoryJob - - Symbolic links are not supported in syncing. - Symbolische links worden niet ondersteund bij het synchroniseren. - - - File is listed on the ignore list. - Het bestand is opgenomen op de negeerlijst. - - - File names ending with a period are not supported on this file system. - Bestandsnamen die eindigen met een punt worden niet ondersteund door het bestandssysteem. - - - Filename contains trailing spaces. - De bestandsnaam bevat spaties achteraan. - - - Cannot be renamed or uploaded. - - - - Folder - name of folder entity to use when warning about invalid name - Map - - - File - name of folder entity to use when warning about invalid name - Bestand - %1 name containing the character "%2" is not supported on this file system. folder or file impossible to sync due to an invalid name, placeholders will be file or folder and the invalid character %1 naam met teken "%2" wordt niet ondersteund door het bestandssysteem. - - Filename contains leading spaces. - De bestandsnaam bevat spaties vooraan. - %1 name contains at least one invalid character %1 naam bevat op z'n minst één ongeldig teken @@ -3278,140 +3333,166 @@ Dit is een nieuwe, experimentele modus. Als je besluit het te gebruiken, vragen %1 naam is een gereserveerde naam op dit bestandssysteem. - Filename contains leading and trailing spaces. - De bestandsnaam bevat spaties vooraan en achteraan. + Cannot be renamed or uploaded. + - Filename is too long. - De bestandsnaam is te lang. + Cannot modify encrypted item because the selected certificate is not valid. + - File/Folder is ignored because it's hidden. - Bestand/Map is genegeerd omdat het verborgen is. + Cannot sync due to invalid modification time + Kan niet synchroniseren door ongeldig wijzigingstijdstip - Stat failed. - Stat mislukt. + Case Clash Conflict: Server file downloaded and renamed to avoid clash. + Conflict: Server version downloaded, local copy renamed and not uploaded. Bestandsconflict: serverversie is gedownload, de lokale kopie is hernoemd en niet geüpload - Case Clash Conflict: Server file downloaded and renamed to avoid clash. - + Could not upload file, because it is open in "%1". + Kan bestand niet uploaden, omdat het geopend is in "%1". - The filename cannot be encoded on your file system. - De bestandsnaam kan op je bestandssysteem niet worden gecodeerd. + Error while deleting file record %1 from the database + Fout tijdens verwijderen bestandsrecord %1 uit de database - The filename is blacklisted on the server. - De bestandsnaam staat op de negeerlijst van de server. + Error while reading the database + Fout bij lezen database - Reason: the entire filename is forbidden. - - - - Reason: the filename has a forbidden base name (filename start). - + File + name of folder entity to use when warning about invalid name + Bestand - Reason: the file has a forbidden extension (.%1). - + File has extension reserved for virtual files. + Bestand heeft een extensie gereserveerd voor virtuele bestanden. - Reason: the filename contains a forbidden character (%1). - + File is listed on the ignore list. + Het bestand is opgenomen op de negeerlijst. - File has extension reserved for virtual files. - Bestand heeft een extensie gereserveerd voor virtuele bestanden. + File names ending with a period are not supported on this file system. + Bestandsnamen die eindigen met een punt worden niet ondersteund door het bestandssysteem. - size - omvang + File/Folder is ignored because it's hidden. + Bestand/Map is genegeerd omdat het verborgen is. - permission - machtiging + Filename contains leading and trailing spaces. + De bestandsnaam bevat spaties vooraan en achteraan. - file id - bestand id + Filename contains leading spaces. + De bestandsnaam bevat spaties vooraan. - Server reported no %1 - Server rapporteerde nr %1 + Filename contains trailing spaces. + De bestandsnaam bevat spaties achteraan. - Cannot sync due to invalid modification time - Kan niet synchroniseren door ongeldig wijzigingstijdstip + Filename is too long. + De bestandsnaam is te lang. - Could not upload file, because it is open in "%1". - Kan bestand niet uploaden, omdat het geopend is in "%1". + Folder + name of folder entity to use when warning about invalid name + Map - Error while deleting file record %1 from the database - Fout tijdens verwijderen bestandsrecord %1 uit de database + Ignored because of the "choose what to sync" blacklist + Genegeerd vanwege de "wat synchroniseren" negeerlijst Moved to invalid target, restoring Verplaatst naar ongeldig doel, herstellen - Cannot modify encrypted item because the selected certificate is not valid. - - - - Ignored because of the "choose what to sync" blacklist - Genegeerd vanwege de "wat synchroniseren" negeerlijst + Not allowed because you don't have permission to add files in that folder + Niet toegestaan omdat je geen machtiging hebt om bestanden in die map toe te voegen Not allowed because you don't have permission to add subfolders to that folder Niet toegestaan, omdat je geen machtiging hebt om submappen aan die map toe te voegen - Not allowed because you don't have permission to add files in that folder - Niet toegestaan omdat je geen machtiging hebt om bestanden in die map toe te voegen + Not allowed to remove, restoring + Niet toegestaan om te verwijderen, herstellen Not allowed to upload this file because it is read-only on the server, restoring Niet toegestaan om dit bestand te uploaden, omdat het alleen-lezen is op de server, herstellen - Not allowed to remove, restoring - Niet toegestaan om te verwijderen, herstellen + Reason: the entire filename is forbidden. + - Error while reading the database - Fout bij lezen database + Reason: the file has a forbidden extension (.%1). + + + + Reason: the filename contains a forbidden character (%1). + + + + Reason: the filename has a forbidden base name (filename start). + Server replied with an error while reading directory "%1" : %2 Server gaf een foutmelding bij lezen directory "%1'": %2 - + + Server reported no %1 + Server rapporteerde nr %1 + + + Stat failed. + Stat mislukt. + + + Symbolic links are not supported in syncing. + Symbolische links worden niet ondersteund bij het synchroniseren. + + + The filename cannot be encoded on your file system. + De bestandsnaam kan op je bestandssysteem niet worden gecodeerd. + + + The filename is blacklisted on the server. + De bestandsnaam staat op de negeerlijst van de server. + + + file id + bestand id + + + permission + machtiging + + + size + omvang + + OCC::PropagateDirectory Could not delete file %1 from local DB - + Error updating metadata due to invalid modification time Fout bij bijwerken metadata door ongeldige laatste wijziging datum - - The folder %1 cannot be made read-only: %2 - Map %1 kon niet alleen-lezen gemaakt worden: %2 - - - unknown exception - - Error updating metadata: %1 Fout bij bijwerken metadata: %1 @@ -3420,66 +3501,74 @@ Dit is een nieuwe, experimentele modus. Als je besluit het te gebruiken, vragen File is currently in use Bestand is al in gebruik - + + The folder %1 cannot be made read-only: %2 + Map %1 kon niet alleen-lezen gemaakt worden: %2 + + + unknown exception + + + OCC::PropagateDownloadFile - Could not get file %1 from local DB - + Could not delete file record %1 from local DB + Kon bestandsrecord %1 niet verwijderen uit de lokale DB - File %1 cannot be downloaded because encryption information is missing. - Bestand %1 kan niet worden gedownload, omdat crypto informatie ontbreekt. + Could not get file %1 from local DB + - Could not delete file record %1 from local DB - Kon bestandsrecord %1 niet verwijderen uit de lokale DB + Error updating metadata: %1 + Fout bij bijwerken metadata: %1 File %1 can not be downloaded because of a local file name clash! Bestand %1 kan niet worden gedownload, omdat de naam conflicteert met een lokaal bestand - The download would reduce free local disk space below the limit - De download zou de vrije lokale schijfruimte beperken tot onder de limiet + File %1 cannot be downloaded because encryption information is missing. + Bestand %1 kan niet worden gedownload, omdat crypto informatie ontbreekt. - Free space on disk is less than %1 - Vrije schijfruimte is minder dan %1 + File %1 downloaded but it resulted in a local file name clash! + Bestand %1 gedownload maar het resulteerde in een lokaal bestandsnaam conflict! - File was deleted from server - Bestand was verwijderd van de server + File %1 has invalid modified time reported by server. Do not save it. + Bestand %1 heeft een ongeldige wijzigingstijd gerapporteerd door de server. Bewaar het niet. - The file could not be downloaded completely. - Het bestand kon niet volledig worden gedownload. + File has changed since discovery + Het bestand is gewijzigd sinds het is gevonden - - The downloaded file is empty, but the server said it should have been %1. - Het gedownloade bestand is leeg, maar de server meldde dat het %1 zou moeten zijn. + + File was deleted from server + Bestand was verwijderd van de server - File %1 has invalid modified time reported by server. Do not save it. - Bestand %1 heeft een ongeldige wijzigingstijd gerapporteerd door de server. Bewaar het niet. + Free space on disk is less than %1 + Vrije schijfruimte is minder dan %1 - File %1 downloaded but it resulted in a local file name clash! - Bestand %1 gedownload maar het resulteerde in een lokaal bestandsnaam conflict! + The download would reduce free local disk space below the limit + De download zou de vrije lokale schijfruimte beperken tot onder de limiet - Error updating metadata: %1 - Fout bij bijwerken metadata: %1 + The downloaded file is empty, but the server said it should have been %1. + Het gedownloade bestand is leeg, maar de server meldde dat het %1 zou moeten zijn. The file %1 is currently in use Bestand %1 is al in gebruik - File has changed since discovery - Het bestand is gewijzigd sinds het is gevonden + The file could not be downloaded completely. + Het bestand kon niet volledig worden gedownload. - + OCC::PropagateItemJob @@ -3494,62 +3583,58 @@ Dit is een nieuwe, experimentele modus. Als je besluit het te gebruiken, vragen OCC::PropagateLocalMkdir - could not delete file %1, error: %2 - kon bestand file %1 niet verwijderen, fout: %2 + Could not create folder %1 + Kon map %1 niet maken + + + Error updating metadata: %1 + Fout bij bijwerken metadata: %1 Folder %1 cannot be created because of a local file or folder name clash! Map %1 kan niet worden gemaakt wegens een lokaal map- of bestandsnaam conflict! - Could not create folder %1 - Kon map %1 niet maken + The file %1 is currently in use + Bestand %1 is al in gebruik - + The folder %1 cannot be made read-only: %2 Map %1 kon niet alleen-lezen gemaakt worden: %2 - unknown exception - - - - Error updating metadata: %1 - Fout bij bijwerken metadata: %1 + could not delete file %1, error: %2 + kon bestand file %1 niet verwijderen, fout: %2 - The file %1 is currently in use - Bestand %1 is al in gebruik + unknown exception + - + OCC::PropagateLocalRemove + Could not delete file record %1 from local DB + Kon bestandsrecord %1 niet verwijderen uit de lokale DB + + Could not remove %1 because of a local file name clash Bestand %1 kon niet worden verwijderd, omdat de naam conflicteert met een lokaal bestand Temporary error when removing local item removed from server. - - - - Could not delete file record %1 from local DB - Kon bestandsrecord %1 niet verwijderen uit de lokale DB + - + OCC::PropagateLocalRename - Folder %1 cannot be renamed because of a local file or folder name clash! - Map %1 kan niet worden hernoemd wegens een lokaal map- of bestandsnaam conflict! - - - File %1 downloaded but it resulted in a local file name clash! - Bestand %1 gedownload maar het resulteerde in een lokaal bestandsnaam conflict! + Could not delete file record %1 from local DB + Kon bestandsrecord %1 niet verwijderen uit de lokale DB - + Could not get file %1 from local DB - + Error setting pin state @@ -3559,34 +3644,38 @@ Dit is een nieuwe, experimentele modus. Als je besluit het te gebruiken, vragen Error updating metadata: %1 Fout bij bijwerken metadata: %1 - - The file %1 is currently in use - Bestand %1 is al in gebruik - Failed to propagate directory rename in hierarchy - + Failed to rename file Kon bestand niet hernoemen - Could not delete file record %1 from local DB - Kon bestandsrecord %1 niet verwijderen uit de lokale DB + File %1 downloaded but it resulted in a local file name clash! + Bestand %1 gedownload maar het resulteerde in een lokaal bestandsnaam conflict! - - - OCC::PropagateRemoteDelete - Wrong HTTP code returned by server. Expected 204, but received "%1 %2". - Foutieve HTTP code ontvangen van de server. Verwacht was 204, maar ontvangen "%1 %2". + Folder %1 cannot be renamed because of a local file or folder name clash! + Map %1 kan niet worden hernoemd wegens een lokaal map- of bestandsnaam conflict! + + + The file %1 is currently in use + Bestand %1 is al in gebruik + + + OCC::PropagateRemoteDelete Could not delete file record %1 from local DB Kon bestandsrecord %1 niet verwijderen uit de lokale DB - + + Wrong HTTP code returned by server. Expected 204, but received "%1 %2". + Foutieve HTTP code ontvangen van de server. Verwacht was 204, maar ontvangen "%1 %2". + + OCC::PropagateRemoteDeleteEncryptedRootFolder @@ -3597,33 +3686,49 @@ Dit is een nieuwe, experimentele modus. Als je besluit het te gebruiken, vragen OCC::PropagateRemoteMkdir - Wrong HTTP code returned by server. Expected 201, but received "%1 %2". - Foutieve HTTP code ontvangen van de server. Verwacht was 201, maar ontvangen "%1 %2". + Error writing metadata to the database: %1 + Fout bij schrijven van metadata naar de database: %1 Failed to encrypt a folder %1 Kon een map %1 niet versleutelen - - Error writing metadata to the database: %1 - Fout bij schrijven van metadata naar de database: %1 - The file %1 is currently in use Bestand %1 is al in gebruik - + + Wrong HTTP code returned by server. Expected 201, but received "%1 %2". + Foutieve HTTP code ontvangen van de server. Verwacht was 201, maar ontvangen "%1 %2". + + OCC::PropagateRemoteMove + + Could not delete file record %1 from local DB + Kon bestandsrecord %1 niet verwijderen uit de lokale DB + + + Could not get file %1 from local DB + + Could not rename %1 to %2, error: %3 Kon niet %1 hernoemen naar %2, fout: %3 + + Error setting pin state + Fout bij instellen pin status + Error updating metadata: %1 Fout bij bijwerken metadata: %1 + Error writing metadata to the database + Fout bij schrijven van Metadata naar de database + + The file %1 is currently in use Bestand %1 is al in gebruik @@ -3631,25 +3736,21 @@ Dit is een nieuwe, experimentele modus. Als je besluit het te gebruiken, vragen Wrong HTTP code returned by server. Expected 201, but received "%1 %2". Foutieve HTTP code ontvangen van de server. Verwacht werd 201, maar ontvangen "%1 %2". + + + OCC::PropagateUploadFileCommon - Could not get file %1 from local DB - - - - Could not delete file record %1 from local DB - Kon bestandsrecord %1 niet verwijderen uit de lokale DB + Error updating metadata: %1 + Fout bij bijwerken metadata: %1 - Error setting pin state - Fout bij instellen pin status + Failed to unlock encrypted folder. + Kon versleutelde map niet ontgrendelen. - Error writing metadata to the database - Fout bij schrijven van Metadata naar de database + Failed to upload encrypted file. + Kon versleuteld bestand niet uploaden. - - - OCC::PropagateUploadFileCommon File %1 cannot be uploaded because another file with the same name, differing only in case, exists Bestand %1 kan niet worden geüpload omdat er al een ander bestand met dezelfde naam bestaat, al verschillen hoofd/kleine letters @@ -3659,71 +3760,63 @@ Dit is een nieuwe, experimentele modus. Als je besluit het te gebruiken, vragen Bestand %1 heeft een ongeldige laatste wijziging datum. Upload niet naar de server. - Local file changed during syncing. It will be resumed. - Lokaal bestand gewijzigd gedurende sync. Wordt opnieuw meegenomen. + File Removed (start upload) %1 + Bestand verwijderd (start upload) %1 - + Local file changed during sync. Lokaal bestand gewijzigd tijdens sync. - Failed to unlock encrypted folder. - Kon versleutelde map niet ontgrendelen. - - - Unable to upload an item with invalid characters - Kon een item met onjuiste tekens niet uploaden - - - Error updating metadata: %1 - Fout bij bijwerken metadata: %1 + Local file changed during syncing. It will be resumed. + Lokaal bestand gewijzigd gedurende sync. Wordt opnieuw meegenomen. The file %1 is currently in use Bestand %1 is al in gebruik - Upload of %1 exceeds the quota for the folder - Upload van %1 overschrijdt het quotum voor de map - - - Failed to upload encrypted file. - Kon versleuteld bestand niet uploaden. + Unable to upload an item with invalid characters + Kon een item met onjuiste tekens niet uploaden - File Removed (start upload) %1 - Bestand verwijderd (start upload) %1 + Upload of %1 exceeds the quota for the folder + Upload van %1 overschrijdt het quotum voor de map - + OCC::PropagateUploadFileNG - - The local file was removed during sync. - Het lokale bestand werd verwijderd tijdens sync. - Local file changed during sync. Lokaal bestand gewijzigd tijdens sync. - Poll URL missing - Peilingen-URL ontbreekt + Missing ETag from server + Ontbrekende ETag van de server + + + Missing File ID from server + Ontbrekende File ID van de server - Unexpected return code from server (%1) - Onverwachte reactie van server (%1) + Poll URL missing + Peilingen-URL ontbreekt - Missing File ID from server - Ontbrekende File ID van de server + The local file was removed during sync. + Het lokale bestand werd verwijderd tijdens sync. - Missing ETag from server - Ontbrekende ETag van de server + Unexpected return code from server (%1) + Onverwachte reactie van server (%1) - + OCC::PropagateUploadFileV1 + + Local file changed during sync. + Lokaal bestand gewijzigd tijdens sync. + Poll URL missing URL opvraag ontbreekt @@ -3732,10 +3825,6 @@ Dit is een nieuwe, experimentele modus. Als je besluit het te gebruiken, vragen The local file was removed during sync. Het lokale bestand werd verwijderd tijdens sync. - - Local file changed during sync. - Lokaal bestand gewijzigd tijdens sync. - The server did not acknowledge the last chunk. (No e-tag was present) De server heeft het laatste deel niet bevestigd (er was geen e-tag aanwezig) @@ -3744,13 +3833,13 @@ Dit is een nieuwe, experimentele modus. Als je besluit het te gebruiken, vragen OCC::ProxyAuthDialog + Password: + Wachtwoord: + + Proxy authentication required Proxy-authenticatie vereist - - Username: - Gebruikersnaam: - Proxy: Proxy: @@ -3760,10 +3849,10 @@ Dit is een nieuwe, experimentele modus. Als je besluit het te gebruiken, vragen De proxyserver heeft een gebruikersnaam en wachtwoord nodig - Password: - Wachtwoord: + Username: + Gebruikersnaam: - + OCC::SelectiveSyncDialog @@ -3774,30 +3863,30 @@ Dit is een nieuwe, experimentele modus. Als je besluit het te gebruiken, vragen OCC::SelectiveSyncWidget - Loading … - Laden ... + An error occurred while loading the list of sub folders. + Er trad een fout op bij het laden van de lijst met submappen. - + Deselect remote folders you do not wish to synchronize. Deselecteer de externe mappen die u niet wenst te synchroniseren. - Name - Naam + Loading … + Laden ... - Size - Grootte + Name + Naam No subfolders currently on the server. Momenteel geen submappen op de server. - An error occurred while loading the list of sub folders. - Er trad een fout op bij het laden van de lijst met submappen. + Size + Grootte - + OCC::ServerNotificationHandler @@ -3807,16 +3896,16 @@ Dit is een nieuwe, experimentele modus. Als je besluit het te gebruiken, vragen OCC::SettingsDialog - - Settings - Instellingen - %1 Settings This name refers to the application name e.g Nextcloud %1 Instellingen + Account + Account + + General Algemeen @@ -3825,10 +3914,30 @@ Dit is een nieuwe, experimentele modus. Als je besluit het te gebruiken, vragen Netwerk - Account - Account + Settings + Instellingen - + + + OCC::ShareeModel + + %1 (%2) + sharee (shareWithAdditionalInfo) + %1 (%2) + + + Global search results + Zoekresultaten (global) + + + No results found + Geen resultaten gevonden + + + Search globally + Zoek door alles + + OCC::ShareManager @@ -3840,95 +3949,59 @@ Dit is een nieuwe, experimentele modus. Als je besluit het te gebruiken, vragen OCC::ShareModel %1 days - + 1 day 1 dag - Today - Vandaag - - - Secure file drop link - Beveiligde bestands-drop link + Could not find local folder for %1 + Kan lokale map niet vinden voor %1 - - Share link - Deellink + + Internal link + Interne link Link share - - - - Internal link - Interne link + Secure file drop Beveiligde bestands-drop - Could not find local folder for %1 - Kan lokale map niet vinden voor %1 - - - - OCC::ShareeModel - - Search globally - Zoek door alles - - - No results found - Geen resultaten gevonden + Secure file drop link + Beveiligde bestands-drop link - Global search results - Zoekresultaten (global) + Share link + Deellink - %1 (%2) - sharee (shareWithAdditionalInfo) - %1 (%2) + Today + Vandaag - + OCC::SocketApi - Context menu share - Contextmenu delen - - - I shared something with you - Ik deelde iets met u + Activity + Activiteit - Share options - Deelopties + Context menu share + Contextmenu delen - Send private link by email … - Verstuur privélink per e-mail --- + Copy internal link + Kopieer interne link Copy private link to clipboard Kopieer privé-link naar klembord - - Failed to encrypt folder at "%1" - Kon een map niet versleutelen in %1 - - - The account %1 does not have end-to-end encryption configured. Please configure this in your account settings to enable folder encryption. - Het account %1 heeft geen begin-tot-eind versleuteling ingesteld. Ga naar je accountinstellingen om mapversleuteling in te stellen. - - - Failed to encrypt folder - Kon de map niet versleutelen - Could not encrypt the following folder: "%1". @@ -3938,181 +4011,191 @@ Server replied with error: %2 Server antwoordde met fout: %2 - Folder encrypted successfully - Map succesvol versleuteld + Delete + Verwijderen - The following folder was encrypted successfully: "%1" - De volgende map was succesvol versleuteld: "%1" + Delete local changes + Verwijder lokale aanpassingen - Select new location … - Selecteer nieuwe locatie ... + Encrypt + Versleutel + + + Expires in %1 minutes + remaining time before lock expires + + Vervalt over %n maanden + Vervalt over %1 minuut/minuten + - Activity - Activiteit + Failed to encrypt folder + Kon de map niet versleutelen - Leave this share - Verlaat deze gedeelde locatie + Failed to encrypt folder at "%1" + Kon een map niet versleutelen in %1 - Resharing this file is not allowed - Opnieuw delen van dit bestand is niet toegestaan + Folder encrypted successfully + Map succesvol versleuteld - Resharing this folder is not allowed - Opnieuw delen van deze map is niet toegestaan + I shared something with you + Ik deelde iets met u - Encrypt - Versleutel + Leave this share + Verlaat deze gedeelde locatie Lock file Vergrendel bestand - - Unlock file - Ontgrendel bestand - Locked by %1 Vergrendeld door %1 - - Expires in %1 minutes - remaining time before lock expires - - Vervalt over %n maanden - Vervalt over %1 minuut/minuten - - - - Resolve conflict … - Oplossen conflict ... - Move and rename … Verplaatsen en hernoemen ... + + Move and upload … + Verplaatsen en uploaden ... + Move, rename and upload … Verplaatsen, hernoemen en uploaden ... - Delete local changes - Verwijder lokale aanpassingen + Open in browser + Openen in browser + + + Resharing this file is not allowed + Opnieuw delen van dit bestand is niet toegestaan - Move and upload … - Verplaatsen en uploaden ... + Resharing this folder is not allowed + Opnieuw delen van deze map is niet toegestaan - Delete - Verwijderen + Resolve conflict … + Oplossen conflict ... - Copy internal link - Kopieer interne link + Select new location … + Selecteer nieuwe locatie ... - Open in browser - Openen in browser + Send private link by email … + Verstuur privélink per e-mail --- - - - OCC::SslButton - <h3>Certificate Details</h3> - <h3>Certificaat details</h3> + Share options + Deelopties - Common Name (CN): - Common Name (CN): + The account %1 does not have end-to-end encryption configured. Please configure this in your account settings to enable folder encryption. + Het account %1 heeft geen begin-tot-eind versleuteling ingesteld. Ga naar je accountinstellingen om mapversleuteling in te stellen. - Subject Alternative Names: - Alternatieve subject namen: + The following folder was encrypted successfully: "%1" + De volgende map was succesvol versleuteld: "%1" - Organization (O): - Organisatie (O): + Unlock file + Ontgrendel bestand + + + OCC::SslButton - Organizational Unit (OU): - Organisatie unit (OU): + %1 + %1 - State/Province: - Land/Provincie: + %1 (self-signed) + %1 (zelf ondertekend) - Country: - Land: + <h3>Certificate Details</h3> + <h3>Certificaat details</h3> - Serial: - Serienummer: + <h3>Fingerprints</h3> + <h3>Vingerafdrukken</h3> <h3>Issuer</h3> <h3>Uitgever</h3> - Issuer: - Uitgever: + <p><b>Note:</b> This certificate was manually approved</p> + <p><b>Let op:</b> Dit certificaat werd handmatig goedgekeurd</p> - Issued on: - Uitgegeven op: + Certificate information: + Certificaat informatie: + + + Common Name (CN): + Common Name (CN): + + + Country: + Land: Expires on: Vervalt op: - <h3>Fingerprints</h3> - <h3>Vingerafdrukken</h3> + Issued on: + Uitgegeven op: - SHA-256: - SHA-256: + Issuer: + Uitgever: - SHA-1: - SHA-1: + No support for SSL session tickets/identifiers + Geen ondersteuning voor SSL-sessie tickets/identifiers - <p><b>Note:</b> This certificate was manually approved</p> - <p><b>Let op:</b> Dit certificaat werd handmatig goedgekeurd</p> + Organization (O): + Organisatie (O): - %1 (self-signed) - %1 (zelf ondertekend) + Organizational Unit (OU): + Organisatie unit (OU): - %1 - %1 + SHA-1: + SHA-1: - This connection is encrypted using %1 bit %2. - - Deze verbinding is versleuteld via %1 bit %2. - + SHA-256: + SHA-256: + + + Serial: + Serienummer: Server version: %1 Serverversie: %1 - No support for SSL session tickets/identifiers - Geen ondersteuning voor SSL-sessie tickets/identifiers + State/Province: + Land/Provincie: - Certificate information: - Certificaat informatie: + Subject Alternative Names: + Alternatieve subject namen: The connection is not secure @@ -4124,70 +4207,76 @@ Server antwoordde met fout: %2 Deze verbinding is NIET veilig, omdat deze niet versleuteld is. - + + This connection is encrypted using %1 bit %2. + + Deze verbinding is versleuteld via %1 bit %2. + + + OCC::SslErrorDialog - Trust this certificate anyway - Vertrouw dit certificaat alsnog + &lt;not specified&gt; + &lt;niet gespecificeerd&gt; - Untrusted Certificate - Niet vertrouwd certificaat + Additional errors: + Additionele fouten: Cannot connect securely to <i>%1</i>: Kan niet beveiligd verbinden met <i>%1</i>: - Additional errors: - Additionele fouten: - - - with Certificate %1 - met certificaat %1 + Country: %1 + Land: %1 - &lt;not specified&gt; - &lt;niet gespecificeerd&gt; + Effective Date: %1 + Ingangsdatum: %1 - Organization: %1 - Organisatie: %1 + Expiration Date: %1 + Vervaldatum: %1 - Unit: %1 - Unit: %1 + Fingerprint (SHA-256): <tt>%1</tt> + Fingerprint (SHA-256): <tt>%1</tt> - Country: %1 - Land: %1 + Fingerprint (SHA-512): <tt>%1</tt> + Fingerprint (SHA-512): <tt>%1</tt> Fingerprint (SHA1): <tt>%1</tt> Fingerprint (SHA1): <tt>%1</tt> - Fingerprint (SHA-256): <tt>%1</tt> - Fingerprint (SHA-256): <tt>%1</tt> + Issuer: %1 + Uitgever: %1 + + + Organization: %1 + Organisatie: %1 - Fingerprint (SHA-512): <tt>%1</tt> - Fingerprint (SHA-512): <tt>%1</tt> + Trust this certificate anyway + Vertrouw dit certificaat alsnog - Effective Date: %1 - Ingangsdatum: %1 + Unit: %1 + Unit: %1 - Expiration Date: %1 - Vervaldatum: %1 + Untrusted Certificate + Niet vertrouwd certificaat - Issuer: %1 - Uitgever: %1 + with Certificate %1 + met certificaat %1 - + OCC::SyncEngine @@ -4195,25 +4284,16 @@ Server antwoordde met fout: %2 %1 (overgeslagen wegens een eerdere fout, probeer opnieuw over %2) - Only %1 are available, need at least %2 to start - Placeholders are postfixed with file sizes using Utility::octetsToString() - Slechts %1 beschikbaar, maar heeft minimaal %2 nodig om te starten - - - Unable to open or create the local sync database. Make sure you have write access in the sync folder. - Kon de lokale sync-database niet openen of aanmaken. Zorg ervoor dat je schrijf-toegang hebt in de sync-map - - - Disk space is low: Downloads that would reduce free space below %1 were skipped. - Schijfruimte laag: Downloads die de vrije ruimte tot onder %1 zouden reduceren, zijn overgeslagen. + Cannot open the sync journal + Kan het sync transactielog niet openen - - There is insufficient space available on the server for some uploads. - Onvoldoende schijfruimte op de server voor sommige uploads. + + Could not set file record to local DB: %1 + Kon bestandsrecord %1 niet instellen op de lokale DB: %1 - Unresolved conflict. - Bestandsconflict + Could not update file metadata: %1 + Kon bestand metadata niet bijwerken: %1 Could not update file: %1 @@ -4224,79 +4304,88 @@ Server antwoordde met fout: %2 Kon virtuele bestand metadata niet bijwerken: %1 - Could not update file metadata: %1 - Kon bestand metadata niet bijwerken: %1 + Disk space is low: Downloads that would reduce free space below %1 were skipped. + Schijfruimte laag: Downloads die de vrije ruimte tot onder %1 zouden reduceren, zijn overgeslagen. - Could not set file record to local DB: %1 - Kon bestandsrecord %1 niet instellen op de lokale DB: %1 + Only %1 are available, need at least %2 to start + Placeholders are postfixed with file sizes using Utility::octetsToString() + Slechts %1 beschikbaar, maar heeft minimaal %2 nodig om te starten - Using virtual files with suffix, but suffix is not set - gebruik maken van virtuele bestanden met achtervoegsel, maar achtervoegsel niet ingesteld + There is insufficient space available on the server for some uploads. + Onvoldoende schijfruimte op de server voor sommige uploads. - Unable to read the blacklist from the local database - Kan de blacklist niet lezen uit de lokale database + Unable to open or create the local sync database. Make sure you have write access in the sync folder. + Kon de lokale sync-database niet openen of aanmaken. Zorg ervoor dat je schrijf-toegang hebt in de sync-map Unable to read from the sync journal. Niet mogelijk om te lezen uit het synchronisatie verslag. - Cannot open the sync journal - Kan het sync transactielog niet openen + Unable to read the blacklist from the local database + Kan de blacklist niet lezen uit de lokale database - + + Unresolved conflict. + Bestandsconflict + + + Using virtual files with suffix, but suffix is not set + gebruik maken van virtuele bestanden met achtervoegsel, maar achtervoegsel niet ingesteld + + OCC::SyncStatusSummary - Offline - Offline + %1 of %2 + %1 van %2 + + + %1 of %2 · %3 left + %1 van %2 · %3 resterend All synced! Alles gesynchroniseerd! - - Some files couldn't be synced! - Sommige bestanden konden niet gesynchroniseerd worden! - - - See below for errors - Zie hieronder voor fouten - Checking folder changes Controleren op wijzigingen map - Syncing changes - Synchroniseren wijzigingen + Offline + Offline - Sync paused - Synchronisatie gepauzeerd + See below for errors + Zie hieronder voor fouten + + + See below for warnings + Zie hieronder voor waarschuwingen Some files could not be synced! Sommige bestanden konden niet gesynchroniseerd worden! - See below for warnings - Zie hieronder voor waarschuwingen + Some files couldn't be synced! + Sommige bestanden konden niet gesynchroniseerd worden! - Syncing - Synchroniseren + Sync paused + Synchronisatie gepauzeerd - %1 of %2 · %3 left - %1 van %2 · %3 resterend + Syncing + Synchroniseren - %1 of %2 - %1 van %2 + Syncing changes + Synchroniseren wijzigingen Syncing file %1 of %2 @@ -4305,76 +4394,76 @@ Server antwoordde met fout: %2 OCC::Systray - - Download - Download - Add account Account toevoegen - Open main dialog - Open het hoofdvenster - - - Pause sync - Pauzeer sync - - - Resume sync - Vervolg sync + Download + Download - Settings - Instellingen + Exit %1 + %1 afsluiten Help Help - Exit %1 - %1 afsluiten + Open main dialog + Open het hoofdvenster + + + Pause sync + Pauzeer sync Pause sync for all Pauzeer sync voor iedereen + + Resume sync + Vervolg sync + Resume sync for all Vervolg sync voor iedereen - + + Settings + Instellingen + + OCC::TermsOfServiceCheckWidget - Waiting for terms to be accepted - - - - Polling - + Copy Link + Kopiëren link - + Link copied to clipboard. Link gekopieerd naar het klembord. Open Browser - + - Copy Link - Kopiëren link + Polling + - + + Waiting for terms to be accepted + + + OCC::Theme %1 Desktop Client Version %2 (%3) %1 is application name. %2 is the human version string. %3 is the operating system name. - + <p><small>Using virtual files plugin: %1</small></p> @@ -4395,35 +4484,35 @@ Server antwoordde met fout: %2 Failed to fetch search providers for '%1'. Error: %2 Fout bij het zoeken van providers voor '%1'. Error: %2 - - Search has failed for '%2'. - Fout bij het zoeken naar '%2'. - Search has failed for '%1'. Error: %2 Fout bij het zoeken naar '%1'. Error: %2 - + + Search has failed for '%2'. + Fout bij het zoeken naar '%2'. + + OCC::UpdateE2eeFolderMetadataJob - Failed to update folder metadata. - Kon metadata niet uploaden. + Failed to finalize item. + Kon item niet afronden. - + Failed to unlock encrypted folder. Kon versleutelde map niet ontgrendelen. - Failed to finalize item. - Kon item niet afronden. + Failed to update folder metadata. + Kon metadata niet uploaden. - + OCC::UpdateE2eeFolderUsersMetadataJob - Error updating metadata for a folder %1 - Fout bij bijwerken metadata voor een map: %1 + Could not add or remove user %1 to access folder %2 + Kon gebruiker %1 niet toevoegen of verwijderen om toegang te krijgen tot map %2 Could not fetch public key for user %1 @@ -4434,8 +4523,8 @@ Server antwoordde met fout: %2 Kon de versleutelde basismap voor map %1 niet vinden - Could not add or remove user %1 to access folder %2 - Kon gebruiker %1 niet toevoegen of verwijderen om toegang te krijgen tot map %2 + Error updating metadata for a folder %1 + Fout bij bijwerken metadata voor een map: %1 Failed to unlock a folder. @@ -4444,162 +4533,170 @@ Server antwoordde met fout: %2 OCC::User - - End-to-end certificate needs to be migrated to a new one - - - - Trigger the migration - - %n notification(s) - - + + - Retry all uploads - Probeer alle uploads opnieuw + End-to-end certificate needs to be migrated to a new one + - Resolve conflict - Conflict oplossen... + Open Nextcloud Assistant in browser + Open Nextcloud Assistant in browser + Open Nextcloud Talk in browser + Open Nextcloud Talk in browser + + Rename file Bestand hernoemen - Open Nextcloud Assistant in browser - Open Nextcloud Assistant in browser + Resolve conflict + Conflict oplossen... - Open Nextcloud Talk in browser - Open Nextcloud Talk in browser + Retry all uploads + Probeer alle uploads opnieuw - - - OCC::UserModel - Confirm Account Removal - Bevestig verwijderen account + Trigger the migration + + + + OCC::UserModel <p>Do you really want to remove the connection to the account <i>%1</i>?</p><p><b>Note:</b> This will <b>not</b> delete any files.</p> <p>Wilt je echt de verbinding met het account <i>%1</i> verbreken?</p><p><b>Let op:</b> Hierdoor verwijder je <b>geen</b> bestanden.</p> - - Remove connection - Verwijderen verbinding - Cancel Annuleren - + + Confirm Account Removal + Bevestig verwijderen account + + + Remove connection + Verwijderen verbinding + + OCC::UserStatusSelectorModel + + %1 days + + + + + + + %1 hours + + + + + + + %1 minutes + + + + + - Could not fetch predefined statuses. Make sure you are connected to the server. - Kan vooraf gedefinieerde statussen niet ophalen. Zorg ervoor dat je verbonden bent met de server. + 1 day + 1 dag - Could not fetch status. Make sure you are connected to the server. - Kan status niet ophalen. Zorg ervoor dat je verbonden bent met de server. + 1 hour + 1 uur - Status feature is not supported. You will not be able to set your status. - Gebruikersstatus functie wordt niet ondersteund. Je zult je gebruikersstatus niet kunnen instellen. + 1 minute + 1 minuut - Emojis are not supported. Some status functionality may not work. - Emoji's worden niet ondersteund. Sommige gebruikersstatusfuncties werken mogelijk niet. + 30 minutes + 30 minuten - Could not set status. Make sure you are connected to the server. - Kan status niet instellen. Zorg ervoor dat je verbonden bent met de server. + 4 hours + 4 uren Could not clear status message. Make sure you are connected to the server. Kan het statusbericht niet wissen. Zorg ervoor dat je verbonden bent met de server. - Don't clear - Niet wissen - - - 30 minutes - 30 minuten + Could not fetch predefined statuses. Make sure you are connected to the server. + Kan vooraf gedefinieerde statussen niet ophalen. Zorg ervoor dat je verbonden bent met de server. - 1 hour - 1 uur + Could not fetch status. Make sure you are connected to the server. + Kan status niet ophalen. Zorg ervoor dat je verbonden bent met de server. - 4 hours - 4 uren + Could not set status. Make sure you are connected to the server. + Kan status niet instellen. Zorg ervoor dat je verbonden bent met de server. - Today - Vandaag + Don't clear + Niet wissen - This week - Deze week + Emojis are not supported. Some status functionality may not work. + Emoji's worden niet ondersteund. Sommige gebruikersstatusfuncties werken mogelijk niet. Less than a minute Minder dan een minuut - 1 minute - 1 minuut - - - %1 minutes - - - - - - - %1 hours - - - - + Status feature is not supported. You will not be able to set your status. + Gebruikersstatus functie wordt niet ondersteund. Je zult je gebruikersstatus niet kunnen instellen. - 1 day - 1 dag + This week + Deze week - - %1 days - - - - + + Today + Vandaag - + OCC::Vfs Please choose a different location. %1 is a drive. It doesn't support virtual files. - - - - Please choose a different location. %1 isn't a NTFS file system. It doesn't support virtual files. - + Please choose a different location. %1 is a network drive. It doesn't support virtual files. - + - + + Please choose a different location. %1 isn't a NTFS file system. It doesn't support virtual files. + + + OCC::VfsDownloadErrorDialog + + %1 could not be downloaded. + %1 kon niet worden gedownload. + + + > More details + > Meer details + Download error Downloadfout @@ -4609,26 +4706,18 @@ Server antwoordde met fout: %2 Fout bij downloaden - could not be downloaded - kon niet worden gedownload - - - > More details - > Meer details + Error downloading %1 + Fout bij downloaden %1 More details Meer details - Error downloading %1 - Fout bij downloaden %1 - - - %1 could not be downloaded. - %1 kon niet worden gedownload. + could not be downloaded + kon niet worden gedownload - + OCC::VfsSuffix @@ -4663,308 +4752,323 @@ Server antwoordde met fout: %2 OCC::WelcomePage + + Easy-to-use web mail, calendaring & contacts + Eenvoudig te gebruiken webmail, agenda & contacten + Form Formulier - Log in - Aanmelden + Host your own server + Host je eigen server + + + Keep your data secure and under your control + Hou je gegevens veilig en in eigen beheer - Sign up with provider - Aanmelden bij provider + Log in + Aanmelden - Keep your data secure and under your control - Hou je gegevens veilig en in eigen beheer + Screensharing, online meetings & web conferences + Schermdelen, online afspraken & web conferenties Secure collaboration & file exchange Veilige samenwerking & bestandsuitwisseling - Easy-to-use web mail, calendaring & contacts - Eenvoudig te gebruiken webmail, agenda & contacten + Sign up with provider + Aanmelden bij provider + + + OwncloudAdvancedSetupPage - Screensharing, online meetings & web conferences - Schermdelen, online afspraken & web conferenties + &Local Folder + &Lokale map - - Host your own server - Host je eigen server + + <html><head/><body><p>If this box is checked, existing content in the local folder will be erased to start a clean sync from the server.</p><p>Do not check this if the local content should be uploaded to the servers folder.</p></body></html> + <html><head/><body><p>Als deze checkbox is aangevinkt zullen bestaande bestanden in de lokale map worden gewist om een schone sync vanaf de server te starten.</p><p>Vink dit niet aan als de lokale bestanden naar de map op de server zouden moeten worden geüploadet.</p></body></html> - - - OCC::ownCloudGui - Please sign in - Log alstublieft in + Ask before syncing external storages + Vraag bevestiging voor synchronisatie externe opslag - There are no sync folders configured. - Er zijn geen synchronisatie-mappen geconfigureerd. + Ask before syncing folders larger than + Vraag bevestiging voor synchronisatie van mappen groter dan - Disconnected from %1 - Losgekoppeld van %1 + Choose different folder + Kies een andere map - Unsupported Server Version - Niet-ondersteunde server versie + Choose what to sync + Selectieve synchronisatie - The server on account %1 runs an unsupported version %2. Using this client with unsupported server versions is untested and potentially dangerous. Proceed at your own risk. - De server van account %1 gebruikt een niet ondersteunde versie %2. Het gebruik van deze clientsoftware met niet-ondersteunde server versies is niet getest en mogelijk gevaarlijk. Verdergaan is op eigen risico. + Erase local folder and start a clean sync + Wis de map op je computer en start een schone sync - Terms of service - + Keep local data + Bewaar de lokale gegevens - Your account %1 requires you to accept the terms of service of your server. You will be redirected to %2 to acknowledge that you have read it and agrees with it. - + Local Folder + Lokale map - %1: %2 - Example text: "Nextcloud: Syncing 25MB (3 minutes left)" (%1 is the folder name to be synced, %2 a status message for that folder) - %1: %2 + MB + Trailing part of "Ask confirmation before syncing folder larger than" + MB - macOS VFS for %1: Sync is running. - + Server address + Serveradres - macOS VFS for %1: Last sync was successful. - + Sync Logo + Sync Logo - macOS VFS for %1: A problem was encountered. - + Synchronize everything from server + Synchroniseer alles vanaf de server - Checking for changes in remote "%1" - Controleren op wijzigingen in externe "%1" + Username + Gebruikersnaam + + + OwncloudHttpCredsPage - Checking for changes in local "%1" - Controleren op wijzigingen in lokale "%1" + &Password + &Wachtwoord + + + &Username + &Gebruikersnaam + + + OwncloudSetupPage - Disconnected from accounts: - Losgekoppeld van account: + Logo + Logo - Account %1: %2 - Account %1: %2 + Server address + Serveradres - Account synchronization is disabled - Account synchronisatie is uitgeschakeld + TextLabel + TextLabel - %1 (%2, %3) - %1 (%2, %3) + This is the link to your %1 web interface when you open it in the browser. + De link naar je %1 web interface wanneer je die opent in de browser. - OwncloudAdvancedSetupPage + progress - Username - Gebruikersnaam + Deleted + Verwijderd - Local Folder - Lokale map + Deleting + Verwijderen - Choose different folder - Kies een andere map + Downloaded + Gedownload - Server address - Serveradres + Downloading + Downloaden - Sync Logo - Sync Logo + Error + Fout - Synchronize everything from server - Synchroniseer alles vanaf de server + Filesystem access error + Toegangsfout van het bestandssysteem - Ask before syncing folders larger than - Vraag bevestiging voor synchronisatie van mappen groter dan + Ignored + Genegeerd - Ask before syncing external storages - Vraag bevestiging voor synchronisatie externe opslag + Ignoring + Negeren - Keep local data - Bewaar de lokale gegevens + Moved to %1 + Verplaatst naar %1 - <html><head/><body><p>If this box is checked, existing content in the local folder will be erased to start a clean sync from the server.</p><p>Do not check this if the local content should be uploaded to the servers folder.</p></body></html> - <html><head/><body><p>Als deze checkbox is aangevinkt zullen bestaande bestanden in de lokale map worden gewist om een schone sync vanaf de server te starten.</p><p>Vink dit niet aan als de lokale bestanden naar de map op de server zouden moeten worden geüploadet.</p></body></html> + Moving + Verplaatsen - Erase local folder and start a clean sync - Wis de map op je computer en start een schone sync + Replaced by virtual file + Vervangen door virtueel bestand - MB - Trailing part of "Ask confirmation before syncing folder larger than" - MB + Server version downloaded, copied changed local file into case conflict conflict file + Serverversie gedownload, gewijzigde lokale bestand gekopieerd in conflictbestand - Choose what to sync - Selectieve synchronisatie + Server version downloaded, copied changed local file into conflict file + Serverversie gedownload, gewijzigde lokale bestand gekopieerd in conflictbestand - &Local Folder - &Lokale map + Unknown + Onbekend - - - OwncloudHttpCredsPage - &Username - &Gebruikersnaam + Updated end-to-end encryption metadata + - &Password - &Wachtwoord + Updated local metadata + Lokale metadata geüploaded - - - OwncloudSetupPage - TextLabel - TextLabel + Updated local virtual files metadata + Lokale virtuele bestanden metadata geüploaded - Logo - Logo + Updating end-to-end encryption metadata + + + + Updating local metadata + Bijwerken lokale metadata - Server address - Serveradres + Updating local virtual files metadata + Bijwerken lokale virtuele bestanden metadata - This is the link to your %1 web interface when you open it in the browser. - De link naar je %1 web interface wanneer je die opent in de browser. + Uploaded + Geüpload - + + Uploading + Uploaden + + + Virtual file created + Virtueel bestand gecreëerd + + QObject + + %1: %2 + this displays an error string (%2) for a file %1 + %1: %2 + %nd delay in days after an activity - - + + - - in the future - in de toekomst - %nh delay in hours after an activity - - + + - - 1m - one minute after activity date and time - - %nm delay in minutes after an activity - - + + - now - nu - - - Some time ago - Even geleden + 1m + one minute after activity date and time + - %1: %2 - this displays an error string (%2) for a file %1 - %1: %2 + Could not create debug archive in selected location! + Kon debugarchief niet maken op de geselecteerde locatie! - New folder - Nieuwe map + Error deleting the file + Failed to create debug archive Kon debugarchief niet maken - Could not create debug archive in selected location! - Kon debugarchief niet maken op de geselecteerde locatie! + New folder + Nieuwe map - You renamed %1 - Je hernoemde %1 + Paths beginning with '#' character are not supported in VFS mode. + - - You deleted %1 - Je verwijderde %1 + + Some time ago + Even geleden - You created %1 - Je creëerde %1 + Synced %1 + Gesynchroniseerd %1 You changed %1 Je wijzigde %1 - Synced %1 - Gesynchroniseerd %1 + You created %1 + Je creëerde %1 - Error deleting the file - + You deleted %1 + Je verwijderde %1 - Paths beginning with '#' character are not supported in VFS mode. - + You renamed %1 + Je hernoemde %1 - - - ResolveConflictsDialog - Solve sync conflicts - Los synchronisatieconflicten op + in the future + in de toekomst + + + now + nu + + + ResolveConflictsDialog %1 files in conflict indicate the number of conflicts to resolve - - + + - - Choose if you want to keep the local version, server version, or both. If you choose both, the local file will have a number added to its name. - Kies of je lokale versie, server versie of beide wilt behouden. Als je voor beide kiest, krijgt het lokale bestand een nummer toegevoegd aan de naam. - All local versions Alle lokale versies @@ -4973,15 +5077,23 @@ Server antwoordde met fout: %2 All server versions Alle server versies + + Cancel + Annuleren + + + Choose if you want to keep the local version, server version, or both. If you choose both, the local file will have a number added to its name. + Kies of je lokale versie, server versie of beide wilt behouden. Als je voor beide kiest, krijgt het lokale bestand een nummer toegevoegd aan de naam. + Resolve conflicts Los conflicten op - Cancel - Annuleren + Solve sync conflicts + Los synchronisatieconflicten op - + ShareDelegate @@ -4992,72 +5104,87 @@ Server antwoordde met fout: %2 ShareDetailsPage - An error occurred setting the share password. - Er trad een fout op bij het instellen van het wachtwoord voor de deellink - - - Edit share - Bewerk deellink + Add another link + Nog een link toevoegen - Share label - Deel label + Allow resharing + Opnieuw delen toestaan Allow upload and editing Uploaden en bewerken toestaan - View only - Alleen bekijken + An error occurred setting the share password. + Er trad een fout op bij het instellen van het wachtwoord voor de deellink - File drop (upload only) - Bestands-drop (alleen uploaden) + Copy share link + Kopiëren deellink + + + Edit share + Bewerk deellink - Allow resharing - Opnieuw delen toestaan + Enter a note for the recipient + + + + File drop (upload only) + Bestands-drop (alleen uploaden) Hide download Verberg download + + Note to recipient + Notitie voor ontvanger + Password protection - + Set expiration date Instellen vervaldatum - Note to recipient - Notitie voor ontvanger + Share label + Deel label - Enter a note for the recipient - + Share link copied! + Deellink gekopieerd! Unshare Delen opheffen - Add another link - Nog een link toevoegen + View only + Alleen bekijken + + + ShareeSearchField - Share link copied! - Deellink gekopieerd! + Search for users or groups… + Zoeken naar gebruikers of groepen ... - Copy share link - Kopiëren deellink + Sharing is not available for this folder + Delen is niet beschikbaar voor deze map ShareView + + Expires in %1 + + Password required for new share Wachtwoord vereist voor delen @@ -5068,36 +5195,21 @@ Server antwoordde met fout: %2 Shared with you by %1 - - - - Expires in %1 - + Sharing is disabled Delen is uitgeschakeld - - This item cannot be shared. - Dit item kan niet worden gedeeld - Sharing is disabled. Delen is uitgeschakeld. - - - ShareeSearchField - - Search for users or groups… - Zoeken naar gebruikers of groepen ... - - - Sharing is not available for this folder - Delen is niet beschikbaar voor deze map + + This item cannot be shared. + Dit item kan niet worden gedeeld - + SyncJournalDb @@ -5108,18 +5220,18 @@ Server antwoordde met fout: %2 SyncStatus - Sync now - Nu synchroniseren + Open browser + - + Resolve conflicts Los conflicten op - Open browser - + Sync now + Nu synchroniseren - + TalkReplyTextField @@ -5133,34 +5245,77 @@ Server antwoordde met fout: %2 TermsOfServiceCheckWidget - - Terms of Service - - Logo Logo Switch to your browser to accept the terms of service - + - + + Terms of Service + + + - TrayWindowHeader + theme - Open local or group folders - Open lokale of groepsmappen + Error occurred during setup + Er trad een fout op bij het instellen + + + Error occurred during sync + Er trad een fout op tijdens synchronisatie + + + Preparing to sync + Voorbereiden synchronisatie + + + Stopping sync + Synchronisatie stoppen + + + Sync is paused + Synchronisatie is gepauzeerd + + + Sync is running + Bezig met synchroniseren + + + Sync status is unknown + Synchronisatiestatus is onbekend + + + Sync was successful + Synchronisatie was geslaagd + + + Sync was successful but some files were ignored + Synchronisatie geslaagd, sommige bestanden werden genegeerd + + Waiting to start syncing + In afwachting van synchronisatie + + + + TrayWindowHeader More apps - + Open %1 in browser - + - + + Open local or group folders + Open lokale of groepsmappen + + UnifiedSearchInputContainer @@ -5172,7 +5327,7 @@ Server antwoordde met fout: %2 UnifiedSearchPlaceholderView Start typing to search - + @@ -5213,67 +5368,83 @@ Server antwoordde met fout: %2 UserLine - Switch to account - Omschakelen naar account - - - Current account status is online - Huidige gebruikersstatus is online + Account actions + Accountacties Current account status is do not disturb Huidige gebruikersstatus is niet storen - Account actions - Accountacties + Current account status is online + Huidige gebruikersstatus is online - Set status - Status instellen + Log in + Meld u aan Log out Afmelden - - Log in - Meld u aan - Remove account Verwijder account - + + Set status + Status instellen + + + Switch to account + Omschakelen naar account + + UserStatusSelector - Online status - Online status + Appear offline + Toon als afwezig - Online - Online + Apply + Toepassen - + Away Afwezig + + Cancel + Annuleren + + + Clear + + + + Clear status message after + Statusbericht wissen na + Do not disturb Niet storen + + Invisible + Onzichtbaar + Mute all notifications Demp alle meldingen - Invisible - Onzichtbaar + Online + Online - Appear offline - Toon als afwezig + Online status + Online status Status message @@ -5283,59 +5454,33 @@ Server antwoordde met fout: %2 What is your status? Wat is je status? + + + Utility - Clear status message after - Statusbericht wissen na - - - Cancel - Annuleren - - - Clear - + %1 %2 + %1 %2 - - Apply - Toepassen + + %L1 B + %L1 B - - - Utility %L1 GB %L1 GB - - %L1 MB - %L1 MB - %L1 KB %L1 KB - %L1 B - %L1 B + %L1 MB + %L1 MB %L1 TB %L1 TB - - %n year(s) - - %n jaar - %n jaar - - - - %n month(s) - - %n maand - %n maanden - - %n day(s) @@ -5357,6 +5502,13 @@ Server antwoordde met fout: %2 %n minuten + + %n month(s) + + %n maand + %n maanden + + %n second(s) @@ -5364,223 +5516,70 @@ Server antwoordde met fout: %2 %n seconde(n) - - %1 %2 - %1 %2 - - - - ValidateChecksumHeader - - The checksum header is malformed. - De header van het controlegetal is misvormd. - - - The checksum header contained an unknown checksum type "%1" - Het header controlegetal bevat een onbekend controlegetal type "%1" - - - The downloaded file does not match the checksum, it will be resumed. "%1" != "%2" - Het gedownloade bestand komt niet overeen met het controlegetal. Het wordt opnieuw verwerkt. "%1" != "%2" - - - - main.cpp - - System Tray not available - Systeemvak niet beschikbaar - - - %1 requires on a working system tray. If you are running XFCE, please follow <a href="http://docs.xfce.org/xfce/xfce4-panel/systray">these instructions</a>. Otherwise, please install a system tray application such as "trayer" and try again. - %1 heeft een werkend systeemvak nodig. Als je XFCE draait volg je <a href="http://docs.xfce.org/xfce/xfce4-panel/systray">deze instructies</a>. Installeer anders een systeemvak applicatie zoals "trayer" en probeer het opnieuw. - - - - nextcloudTheme::aboutInfo() - - <p><small>Built from Git revision <a href="%1">%2</a> on %3, %4 using Qt %5, %6</small></p> - <p><small>Gebouwd vanaf Git revisie <a href="%1">%2</a> op %3, %4 gebruik makend van Qt %5, %6</small></p> - - - - progress - - Virtual file created - Virtueel bestand gecreëerd - - - Replaced by virtual file - Vervangen door virtueel bestand - - - Downloaded - Gedownload - - - Uploaded - Geüpload - - - Server version downloaded, copied changed local file into conflict file - Serverversie gedownload, gewijzigde lokale bestand gekopieerd in conflictbestand - - - Server version downloaded, copied changed local file into case conflict conflict file - Serverversie gedownload, gewijzigde lokale bestand gekopieerd in conflictbestand - - - Deleted - Verwijderd - - - Moved to %1 - Verplaatst naar %1 - - - Ignored - Genegeerd - - - Filesystem access error - Toegangsfout van het bestandssysteem - - - Error - Fout - - - Updated local metadata - Lokale metadata geüploaded - - - Updated local virtual files metadata - Lokale virtuele bestanden metadata geüploaded - - - Updated end-to-end encryption metadata - - - - Unknown - Onbekend - - - Downloading - Downloaden - - - Uploading - Uploaden - - - Deleting - Verwijderen - - - Moving - Verplaatsen - - - Ignoring - Negeren - - - Updating local metadata - Bijwerken lokale metadata - - - Updating local virtual files metadata - Bijwerken lokale virtuele bestanden metadata - - - Updating end-to-end encryption metadata - + + %n year(s) + + %n jaar + %n jaar + - + - theme - - Sync status is unknown - Synchronisatiestatus is onbekend - - - Waiting to start syncing - In afwachting van synchronisatie - - - Sync is running - Bezig met synchroniseren - + utility - Sync was successful - Synchronisatie was geslaagd + Always available locally + Altijd lokaal beschikbaar - Sync was successful but some files were ignored - Synchronisatie geslaagd, sommige bestanden werden genegeerd + Available online only + Alleen online beschikbaar - Error occurred during sync - Er trad een fout op tijdens synchronisatie + Could not open browser + Kon browser niet openen - Error occurred during setup - Er trad een fout op bij het instellen + Could not open email client + Kon e-mailclient niet openen - Stopping sync - Synchronisatie stoppen + Currently available locally + Momenteel lokaal beschikbaar - Preparing to sync - Voorbereiden synchronisatie + Free up local space + Lokale ruimte vrijmaken - - Sync is paused - Synchronisatie is gepauzeerd + + Make always available locally + Maak altijd lokaal beschikbaar - - - utility - Could not open browser - Kon browser niet openen + Some available online only + Sommige alleen online beschikbaar There was an error when launching the browser to go to URL %1. Maybe no default browser is configured? Er trad een fout op bij het starten van de browser om naar URL %1 te gaan. Misschien is er geen standaardbrowser geconfigureerd? - - Could not open email client - Kon e-mailclient niet openen - There was an error when launching the email client to create a new message. Maybe no default email client is configured? Er trad een fout op bij het starten van de e-mailclient om een nieuw bericht te maken. Misschien is er geen e-mailclient gedefinieerd? + + + ValidateChecksumHeader - Always available locally - Altijd lokaal beschikbaar - - - Currently available locally - Momenteel lokaal beschikbaar - - - Some available online only - Sommige alleen online beschikbaar - - - Available online only - Alleen online beschikbaar + The checksum header contained an unknown checksum type "%1" + Het header controlegetal bevat een onbekend controlegetal type "%1" - Make always available locally - Maak altijd lokaal beschikbaar + The checksum header is malformed. + De header van het controlegetal is misvormd. - Free up local space - Lokale ruimte vrijmaken + The downloaded file does not match the checksum, it will be resumed. "%1" != "%2" + Het gedownloade bestand komt niet overeen met het controlegetal. Het wordt opnieuw verwerkt. "%1" != "%2" - + \ No newline at end of file From 40409804953d90d5a39cc7c60aa64903fe56859f Mon Sep 17 00:00:00 2001 From: Kevin Beraz Date: Thu, 16 Oct 2025 10:50:17 +0200 Subject: [PATCH 367/371] merge step 1 --- translations/client_de.ts | 828 ++++++++++++++++++++++++++-------- translations/client_en.ts | 832 ++++++++++++++++++++++------------ translations/client_en_GB.ts | 828 ++++++++++++++++++++++++++-------- translations/client_es.ts | 828 ++++++++++++++++++++++++++-------- translations/client_fr.ts | 828 ++++++++++++++++++++++++++-------- translations/client_nl.ts | 836 ++++++++++++++++++++++++++--------- 6 files changed, 3718 insertions(+), 1262 deletions(-) diff --git a/translations/client_de.ts b/translations/client_de.ts index d389a3c1b5c08..871023dbdb01e 100644 --- a/translations/client_de.ts +++ b/translations/client_de.ts @@ -6,22 +6,22 @@ In %1 In %1 - + Open %1 locally %1 lokal öffnen - + ActivityItemContent Dismiss Ablehnen - + Open file details Dateidetails öffnen - + ActivityList @@ -32,11 +32,11 @@ No activities yet Noch keine Aktivitäten vorhanden - + Scroll to top Nach unten blättern - + CallNotificationDialog @@ -51,11 +51,11 @@ Decline Talk call notification Benachrichtigung zu Talk-Anruf ablehnen - + Talk notification caller avatar Avatar zu Benachrichtigung über Talk-Anrufer - + CloudProviderWrapper @@ -90,7 +90,7 @@ Quit sync client Sync-Client beenden - + Recently changed Zuletzt geändert @@ -122,7 +122,11 @@ Syncing %1 of %2 (%3 left) Synchronisiere %1 von %2 (%3 übrig) - + + Syncing %1 of %2 (%3 left) + Synchronisiere %1 von %2 (%3 übrig) + + ConflictDelegate @@ -140,7 +144,7 @@ Account switcher and settings menu Konto-Umschalter und Einstellungsmenü - + Add account Konto hinzufügen @@ -180,7 +184,7 @@ Settings Einstellungen - + EditFileLocallyLoadingDialog @@ -212,7 +216,7 @@ Cancel Abbrechen - + Choose Auswählen @@ -220,7 +224,7 @@ Token Encryption Key Chooser Auswahl des Token-Schlüssels - + ErrorBox @@ -235,10 +239,14 @@ Aktivität + Dismiss + Ablehnen + + Sharing Teilen - + FileDetailsWindow @@ -256,11 +264,11 @@ Materialised items Materialisierte Elemente - + Reload Neu laden - + FileProviderFastEnumerationSettings @@ -271,6 +279,10 @@ Fast sync will only sync changes in files and folders within folders that have been explored. This can significantly increase responsiveness on initial configuration of virtual files. However, it will cause redundant downloads of files moved to an unexplored folder. Bei der schnellen Synchronisierung werden nur Änderungen an Dateien und Ordnern innerhalb der Ordner synchronisiert, die bereits untersucht wurden. Dies kann die Reaktionsfähigkeit bei der Ersteinrichtung virtueller Dateien erheblich erhöhen. Allerdings führt dies zu redundanten Downloads von Dateien, die in einen noch nicht erfassten Ordner verschoben wurden. + + Fast sync will only sync changes in files and folders within folders that have been explored. This can significantly increase responsiveness on initial configuration of virtual files. However, it will cause redundant downloads of files moved to an unexplored folder. + + FileProviderFileDelegate @@ -285,7 +297,7 @@ Enable virtual files Virtuelle Dateien aktivieren - + General settings Allgemeine Einstellungen @@ -293,7 +305,7 @@ Virtual files settings Einstellungen für virtuelle Dateien - + FileProviderStorageInfo @@ -304,11 +316,11 @@ Evict local copies … Lokale Kopien entfernen … - + Local storage use Lokaler Speicher verwenden - + FileProviderSyncStatus @@ -321,7 +333,7 @@ macOS may ignore or delay this request. Eine Synchronisierung der Änderungen für die VFS-Umgebung anfordern. macOS kann diese Anforderung ignorieren oder verzögern. - + Request sync Synchronisierung anfordern @@ -329,51 +341,94 @@ macOS kann diese Anforderung ignorieren oder verzögern. Syncing Synchronisiere - + FileSystem Could not remove folder "%1" Der Ordner "%1" konnte nicht entfernt werden - + Error removing "%1": %2 Fehler beim Entfernen von "%1": %2 - + Flow2AuthWidget An error occurred while connecting. Please try again. Es ist ein Fehler beim Herstellen der Verbindung aufgetreten. Bitte erneut versuchen. - + Browser Authentication Browser-Authentifizierung + + Copy Link + Link kopieren + Logo Logo + Reopen Browser + + + Switch to your browser to connect your account Wechseln Sie zu Ihrem Browser, um Ihr Konto zu verbinden + + FolderWizardSelectiveSync + + Add Folder Sync + + + + Step 3 of 3: Selektive Synchronisation + + + FolderWizardSourcePage + &Choose + + + &Choose … &Wählen … - + + Add Folder Sync + + + Pick a local folder on your computer to sync Wählen Sie einen lokalen Ordner zum Synchronisieren aus + + Select a folder on your hard drive that should be permanetly connected to your %1. All files and subfolders are automatically uploaded and synchronized + + + + Step 1 of 3: Select local folder + + FolderWizardTargetPage + Add Folder Sync + + + + Both folders are permanently linked and the respective contents are automatically synchronized and updated. + + + Create folder Ordner erstellen @@ -381,7 +436,11 @@ macOS kann diese Anforderung ignorieren oder verzögern. Folders Ordner - + + Please now select or create a target folder in your %1 where the content should be uploaded and synchronized. + + + Refresh Aktualisieren @@ -389,6 +448,10 @@ macOS kann diese Anforderung ignorieren oder verzögern. Select a remote destination folder Einen entfernten Zielordner auswählen + + Step 2 of 3: Directory in your %1 + + main.cpp @@ -396,18 +459,18 @@ macOS kann diese Anforderung ignorieren oder verzögern. %1 requires on a working system tray. If you are running XFCE, please follow <a href="http://docs.xfce.org/xfce/xfce4-panel/systray">these instructions</a>. Otherwise, please install a system tray application such as "trayer" and try again. %1 benötigt ein funktionierendes Benachrichtigungsfeld. Falls Sie XFCE einsetzen, dann folgen Sie bitte <a href="http://docs.xfce.org/xfce/xfce4-panel/systray">diesen Anweisungen</a>. Andernfalls installieren Sie bitte ein Benachrichtigungsfeld wie zum Beispiel "Trayer" und versuchen es nochmal. - + System Tray not available Benachrichtigungsfeld (Taskleiste) ist nicht verfügbar. - + MainWindow New activities Neue Aktivitäten - + Nextcloud desktop main dialog Nextcloud Desktop-Hauptdialog @@ -415,7 +478,7 @@ macOS kann diese Anforderung ignorieren oder verzögern. Unified search results list Einheitliche Suchergebnisliste - + nextcloudTheme::aboutInfo() @@ -433,11 +496,11 @@ macOS kann diese Anforderung ignorieren oder verzögern. Server replied "%1 %2" to "%3 %4" Server hat "%1 %2" auf "%3 %4" geantwortet - + Unknown error: network reply was deleted Unbekannter Fehler: Netzwerk-Antwort wurde gelöscht - + OCC::Account @@ -471,7 +534,7 @@ Soll das Konto importiert werden? Could not import accounts from legacy client configuration. Konten von älterer Client-Konfiguration konnten nicht importiert werden. - + Import Importieren @@ -483,7 +546,7 @@ Soll das Konto importiert werden? Skip Überspringen - + OCC::AccountSettings @@ -643,6 +706,10 @@ Would you like to set up end-to-end encryption? End-to-end encryption mnemonic Gedächtnisstütze für die Ende-zu-Ende-Verschlüsselung + + Expand Memory + + Folder creation failed Anlegen des Ordners fehlgeschlagen @@ -659,7 +726,7 @@ Would you like to set up end-to-end encryption? No %1 connection configured. Keine %1-Verbindung konfiguriert. - + No account configured. Kein Konto konfiguriert. @@ -723,6 +790,10 @@ Would you like to set up end-to-end encryption? Standard file sync Standard Dateisynchronisierung + + Storage space %1% occupied + + Storage space: … Speicherplatz: … @@ -763,14 +834,26 @@ Would you like to set up end-to-end encryption? There are folders that were not synchronized because they are external storages: Es gibt Ordner, die nicht synchronisiert werden konnten, da sie externe Speicher sind: + + There are folders that were not synchronized because they are external storages: + + There are folders that were not synchronized because they are too big or external storages: Es gibt Ordner, die nicht synchronisiert werden konnten, da sie zu groß oder externe Speicher sind: + There are folders that were not synchronized because they are too big or external storages: + + + There are folders that were not synchronized because they are too big: Einige Ordner konnten nicht synchronisiert werden, da sie zu groß sind: + + There are folders that were not synchronized because they are too big: + + This account supports end-to-end encryption Dieses Konto unterstützt Ende-zu-Ende-Verschlüsselung @@ -827,6 +910,10 @@ Warten Sie auf die neue Synchronisierung und verschlüsseln Sie sie dann.You seem to have the Virtual Files feature enabled on this folder. At the moment, it is not possible to implicitly download virtual files that are end-to-end encrypted. To get the best experience with virtual files and end-to-end encryption, make sure the encrypted folder is marked with "Make always available locally". Sie scheinen die Funktion "Virtuelle Dateien" für diesen Ordner aktiviert zu haben. Im Moment ist es nicht möglich, virtuelle Dateien, die Ende-zu-Ende-verschlüsselt sind, implizit herunterzuladen. Um die beste Erfahrung mit virtuellen Dateien und Ende-zu-Ende-Verschlüsselung zu machen, stellen Sie sicher, dass der verschlüsselte Ordner mit "Immer lokal verfügbar machen" markiert ist. + + https://wl.hidrive.com/easy/0057 + + OCC::AccountSetupFromCommandLineJob @@ -923,7 +1010,7 @@ Warten Sie auf die neue Synchronisierung und verschlüsseln Sie sie dann.Certificate files (*.p12 *.pfx) Zertifikatsdateien (*.p12 *.pfx) - + Certificate password: Zertifikatspasswort: @@ -939,7 +1026,7 @@ Warten Sie auf die neue Synchronisierung und verschlüsseln Sie sie dann.This server probably requires a SSL client certificate. Der Server benötigt vermutlich ein SSL-Client-Zertifikat - + OCC::Application @@ -991,7 +1078,7 @@ Warten Sie auf die neue Synchronisierung und verschlüsseln Sie sie dann.There was an error while accessing the configuration file at %1. Please make sure the file can be accessed by your system account. Beim Zugriff auf die Konfigurationsdatei unter %1 ist ein Fehler aufgetreten. Stellen Sie sicher, dass Ihr Systemkonto auf die Datei zugreifen kann. - + deleting Lösche @@ -1009,14 +1096,14 @@ Warten Sie auf die neue Synchronisierung und verschlüsseln Sie sie dann.older software version Älter - + OCC::AuthenticationDialog &Password: &Passwort: - + &Username: &Benutzername: @@ -1028,7 +1115,7 @@ Warten Sie auf die neue Synchronisierung und verschlüsseln Sie sie dann.Enter username and password for "%1" at %2. Benutzername und Passwort für "%1" auf %2 eingeben. - + OCC::BasePropagateRemoteDeleteEncrypted @@ -1078,7 +1165,7 @@ Warten Sie auf die neue Synchronisierung und verschlüsseln Sie sie dann.Restoration failed: %1 Wiederherstellung fehlgeschlagen: %1 - + The file %1 is currently in use Die Datei %1 wird aktuell verwendet @@ -1086,7 +1173,7 @@ Warten Sie auf die neue Synchronisierung und verschlüsseln Sie sie dann.The local file was removed during sync. Die lokale Datei wurde während der Synchronisierung entfernt. - + OCC::CaseClashConflictSolver @@ -1113,11 +1200,11 @@ Warten Sie auf die neue Synchronisierung und verschlüsseln Sie sie dann.Filename contains trailing spaces. Dateiname enthält Leerzeichen am Ende. - + You don't have the permission to rename this file. Please ask the author of the file to rename it. Sie haben nicht die Berechtigung, diese Datei umzubenennen. Bitte wenden Sie sich zum Umbenennen der Datei an deren Ersteller. - + OCC::CaseClashFilenameDialog @@ -1148,7 +1235,7 @@ Warten Sie auf die neue Synchronisierung und verschlüsseln Sie sie dann.Filename contains illegal characters: %1 Dateiname enthält unzulässige Zeichen: %1 - + Filename contains leading and trailing spaces. Dateiname enthält Leerzeichen am Anfang und am Ende. @@ -1204,7 +1291,7 @@ Warten Sie auf die neue Synchronisierung und verschlüsseln Sie sie dann.today Heute - + OCC::CleanupPollsJob @@ -1222,7 +1309,7 @@ Warten Sie auf die neue Synchronisierung und verschlüsseln Sie sie dann.Enter E2E passphrase E2E-Passphrase eingeben - + Input PIN code Please keep it short and shorter than "Enter Certificate USB Token PIN:" PIN-Code eingeben @@ -1239,7 +1326,7 @@ Warten Sie auf die neue Synchronisierung und verschlüsseln Sie sie dann.Please enter your end-to-end encryption passphrase:<br><br>Username: %2<br>Account: %3<br> Geben Sie Ihre Passphrase für Ende-zu-Ende-Verschlüsselung ein:<br><br>Benutzername: %2<br>Konto: %3<br> - + OCC::ConflictDialog @@ -1278,7 +1365,7 @@ Warten Sie auf die neue Synchronisierung und verschlüsseln Sie sie dann.Keep server version Serverversion behalten - + Local version Lokale Version @@ -1306,14 +1393,14 @@ Warten Sie auf die neue Synchronisierung und verschlüsseln Sie sie dann.today Heute - + OCC::ConflictSolver Confirm deletion Löschen bestätigen - + Do you want to delete the directory <i>%1</i> and all its contents permanently? Möchten Sie den Ordner <i>%1</i> und dessen Inhalte dauerhaft löschen? @@ -1333,7 +1420,7 @@ Warten Sie auf die neue Synchronisierung und verschlüsseln Sie sie dann. - + OCC::ConnectionValidator @@ -1356,22 +1443,76 @@ Warten Sie auf die neue Synchronisierung und verschlüsseln Sie sie dann.The provided credentials are not correct Die zur Verfügung gestellten Anmeldeinformationen sind nicht korrekt - + Timeout Zeitüberschreitung - + + + OCC::DataProtectionPage + + Agree + + + + Form + Formular + + + Settings + Einstellungen + + + This application uses tracking technologies. By clicking on Agree, you accept the processing of your anonymized data. You can adjust your choices at any time via the settings. <br/> <br/>Information on data processing and more can be found in our <a href='https://wl.hidrive.com/easy/0005'>privacy policy</a>. + + + + + OCC::DataProtectionSettingsPage + + Back + + + + Form + Formular + + + Necessary data + + + + Required to ensure that the software can be used as expected + + + + Save Settings + + + + Send anonymous use + + + + This helps us to optimize the software and to better identify system crashes and unexpected errors. + + + + We collect anonymized data to optimize our app. We use software solutions from various partners for this purpose. We want to give you full transparency and freedom of choice regarding the collection and processing of your anonymized usage. You can change your settings at any time under the menu item Data Protection. + + + OCC::DiscoveryPhase Error while canceling deletion of %1 Fehler beim Abbrechen des Löschens von %1 - + Error while canceling deletion of a file Fehler beim Abbrechen des Löschens einer Datei - + OCC::DiscoverySingleDirectoryJob @@ -1382,11 +1523,11 @@ Warten Sie auf die neue Synchronisierung und verschlüsseln Sie sie dann.Encrypted metadata setup error: initial signature from server is empty. Fehler bei der Einrichtung der verschlüsselten Metadaten: Die ursprüngliche Signatur vom Server ist leer. - + Server error: PROPFIND reply is not XML formatted! Serverantwort: PROPFIND-Antwort ist nicht im XML-Format! - + OCC::DiscoverySingleLocalDirectoryJob @@ -1405,11 +1546,11 @@ Warten Sie auf die neue Synchronisierung und verschlüsseln Sie sie dann.Error while reading directory %1 Fehler beim Lesen des Ordners %1 - + Filename encoding is not valid Dateinamenkodierung ist ungültig - + OCC::EditLocallyJob @@ -1452,7 +1593,7 @@ Warten Sie auf die neue Synchronisierung und verschlüsseln Sie sie dann.File %1 could not be locked. Datei %1 konnte nicht gesperrt werden. - + File %1 now locked. Datei %1 ist jetzt gesperrt. @@ -1472,7 +1613,7 @@ Warten Sie auf die neue Synchronisierung und verschlüsseln Sie sie dann.Server error: PROPFIND reply is not XML formatted! Serverantwort: PROPFIND-Antwort ist nicht im XML-Format! - + OCC::EditLocallyManager @@ -1490,7 +1631,7 @@ Warten Sie auf die neue Synchronisierung und verschlüsseln Sie sie dann.An error occurred trying to verify the request to edit locally. Es ist ein Fehler beim Versuch, die Anfrage zur lokalen Bearbeitung zu überprüfen, aufgetreten. - + Could not find an account for local editing. Es konnte kein Konto für die lokale Bearbeitung gefunden werden. @@ -1510,7 +1651,7 @@ Warten Sie auf die neue Synchronisierung und verschlüsseln Sie sie dann.Please try again. Bitte erneut versuchen. - + OCC::EncryptedFolderMetadataHandler @@ -1608,7 +1749,7 @@ Dies kann ein Problem mit Ihren OpenSSL-Bibliotheken sein. Could not parse the JSON returned from the server: <br><em>%1</em> Der vom Server zurückgegebene JSON-Code konnte nicht verarbeitet werden: <br><em>%1</em> - + Error returned from the server: <em>%1</em> Vom Server zurückgegebener Fehler: <em>%1</em> @@ -1628,14 +1769,18 @@ Dies kann ein Problem mit Ihren OpenSSL-Bibliotheken sein. There was an error accessing the "token" endpoint: <br><em>%1</em> Fehler beim Zugriff auf den "Token"-Endpunkt: <br><em>%1</em> - + OCC::Flow2AuthWidget Copy Link Link kopieren - + + Error + Fehler + + Link copied to clipboard. Link in die Zwischenablage kopiert. @@ -1652,6 +1797,10 @@ Dies kann ein Problem mit Ihren OpenSSL-Bibliotheken sein. Starte Autorisierung + Switch to your browser to connect your account + Wechseln Sie zu Ihrem Browser, um Ihr Konto zu verbinden + + Unable to open the Browser, please copy the link to your Browser. Der Browser kann nicht geöffnet werden. Bitte kopieren Sie den Link in Ihren Browser. @@ -1761,6 +1910,10 @@ Dies kann ein Problem mit Ihren OpenSSL-Bibliotheken sein. + A folder from an external storage has been added. + + + A folder has surpassed the set folder size limit of %1MB: %2. %3 Ein Ordner hat die festgelegte Ordnergrößenbeschränkung von %1 MB überschritten: %2. @@ -1788,6 +1941,10 @@ Alternativ können Sie auch alle gelöschten Dateien wiederherstellen, indem Sie Ein neuer Ordner größer als %1 MB wurde hinzugefügt: %2. + + A new folder larger than %1 MB has been added: %2. + + Changes in synchronized folders could not be tracked reliably. @@ -1836,7 +1993,7 @@ Dies bedeutet, dass der Synchronisierungs-Client lokale Änderungen möglicherwe Restore Files from Server Dateien vom Server wiederherstellen - + Restore Files to Server Dateien auf dem Server wiederherstellen @@ -1872,10 +2029,14 @@ Dies bedeutet, dass der Synchronisierungs-Client lokale Änderungen möglicherwe OCC::FolderCreationDialog + %1 Create new folder + + + Could not create a folder! Check your write permissions. Ordner konnte nicht erstellt werden! Prüfen Sie die Schreibberechtigungen. - + Create new folder Neuen Ordner erstellen @@ -1898,14 +2059,22 @@ Dies bedeutet, dass der Synchronisierungs-Client lokale Änderungen möglicherwe %1 (Sync is paused) %1 (Synchronisierung ist pausiert) - + (backup %1) (Sicherung %1) + (backup %1) + + + (backup) (Sicherung) + + (backup) + + An old sync journal "%1" was found, but could not be removed. Please make sure that no application is currently using it. Ein altes Synchronisierungsprotokoll "%1" wurde gefunden, konnte jedoch nicht entfernt werden. Bitte stellen Sie sicher, dass keine Anwendung es verwendet. @@ -2017,6 +2186,10 @@ Für fortgeschrittene Benutzer: Dieses Problem kann damit zusammenhängen, dass OCC::FolderStatusDelegate + + Add Folder Sync + + Add Folder Sync Connection Ordner-Synchronisierung hinzufügen @@ -2025,6 +2198,10 @@ Für fortgeschrittene Benutzer: Dieses Problem kann damit zusammenhängen, dass File Datei + + Synchronize any other local folder with your %1 + + OCC::FolderStatusModel @@ -2106,7 +2283,7 @@ Für fortgeschrittene Benutzer: Dieses Problem kann damit zusammenhängen, dass Preparing to sync … Synchronisierung wird vorbereitet … - + Signed out Abgemeldet @@ -2154,7 +2331,7 @@ Für fortgeschrittene Benutzer: Dieses Problem kann damit zusammenhängen, dass ↓ %1/s ↓ %1/s - + OCC::FolderWatcher @@ -2183,6 +2360,14 @@ Für fortgeschrittene Benutzer: Dieses Problem kann damit zusammenhängen, dass OCC::FolderWizardLocalPath + Add Folder Sync + + + + Choose + Auswählen + + Click to select a local folder to sync. Hier klicken, um einen lokalen Ordner zum Synchronisieren auszuwählen. @@ -2190,17 +2375,33 @@ Für fortgeschrittene Benutzer: Dieses Problem kann damit zusammenhängen, dass Enter the path to the local folder. Pfad zum lokalen Ordner eingeben + + Select a folder on your hard drive that should be permanetly connected to your %1. All files and subfolders are automatically uploaded and synchronized + + Select the source folder Quellordner auswählen - + + Step 1 of 3: Select local folder + + + OCC::FolderWizardRemotePath + + Add Folder Sync + + Authentication failed accessing %1 Beim Zugriff auf %1 ist die Authentifizierung fehlgeschlagen + + Both folders are permanently linked and the respective contents are automatically synchronized and updated. + + Choose this to sync the entire account Wählen Sie dies, um das gesamte Konto zu synchronisieren @@ -2210,6 +2411,10 @@ Für fortgeschrittene Benutzer: Dieses Problem kann damit zusammenhängen, dass Entfernten Ordner erstellen + Create folder + Ordner erstellen + + Enter the name of the new folder to be created below "%1": Geben Sie den Namen des neuen, unter "%1" zu erstellenden Ordners ein: @@ -2229,7 +2434,19 @@ Für fortgeschrittene Benutzer: Dieses Problem kann damit zusammenhängen, dass Please choose a different location. %1 is already being synced to %2. Bitte wählen Sie einen anderen Speicherort. %1 wird bereits mit %2 synchronisiert. - + + Please now select or create a target folder in your %1 where the content should be uploaded and synchronized. + + + + Refresh + Aktualisieren + + + Step 2 of 3: Directory in your %1 + + + OCC::FolderWizardSelectiveSync @@ -2237,6 +2454,14 @@ Für fortgeschrittene Benutzer: Dieses Problem kann damit zusammenhängen, dass (experimentell) + Add Folder Sync + + + + Step 3 of 3: Selektive Synchronisation + + + Use virtual files instead of downloading content immediately %1 Virtuelle Dateien verwenden, anstatt den Inhalt sofort herunterzuladen %1 @@ -2244,7 +2469,7 @@ Für fortgeschrittene Benutzer: Dieses Problem kann damit zusammenhängen, dass Virtual files are not supported at the selected location Virtuelle Dateien werden an dem ausgewählten Speicherort nicht unterstützt - + Virtual files are not supported for Windows partition roots as local folder. Please choose a valid subfolder under drive letter. Virtuelle Dateien werden für die Wurzel von Windows-Partitionen als lokaler Ordner nicht unterstützt. Bitte wählen Sie einen gültigen Unterordner unter dem Laufwerksbuchstaben. @@ -2319,6 +2544,10 @@ Ein Downgrade von Versionen ist nicht sofort möglich: Der Wechsel von Beta auf Create Debug Archive Debug-Archiv erstellen + + Data Protection + + Debug Archive Created Debug-Archiv erstellt @@ -2327,7 +2556,7 @@ Ein Downgrade von Versionen ist nicht sofort möglich: Der Wechsel von Beta auf Debug archive is created at %1 Debug-Archiv erstellt in %1 - + Desktop client x.x.x Desktop-Client x.x.x @@ -2356,18 +2585,42 @@ Ein Downgrade von Versionen ist nicht sofort möglich: Der Wechsel von Beta auf Trailing part of "Ask confirmation before syncing folder larger than" MB + + More Information + + Move removed files to trash Entfernte Dateien in den Papierkorb verschieben + + Necessary data + + Notify when synchronised folders grow larger than specified limit Benachrichtigen, wenn synchronisierte Ordner größer werden als das angegebene Limit + + Open Source Software + + + + Privacy Policy + + + + Required to ensure that the software can be used as expected + + S&how crash reporter &Crash-Reporter anzeigen + + Send anonymous use + + Server notifications that require attention. Server-Benachrichtigungen, die Aufmerksamkeit erfordern. @@ -2392,6 +2645,10 @@ Ein Downgrade von Versionen ist nicht sofort möglich: Der Wechsel von Beta auf Show call notification dialogs. Dialog zu Anrufbenachrichtigungen anzeigen + + Show call notifications + + Show chat notification dialogs. Dialog zu Chat-Benachrichtigungen anzeigen @@ -2408,10 +2665,18 @@ Ein Downgrade von Versionen ist nicht sofort möglich: Der Wechsel von Beta auf Der Kanal bestimmt, welche Aktualisierungen zur Installation angeboten werden: - Stabil: enthält getestete Versionen, die als zuverlässig gelten + + This helps us to optimize the software and to better identify system crashes and unexpected errors. + + Update channel Update-Kanal + + Updates + + Usage Documentation Nutzungsdokumentation @@ -2420,6 +2685,10 @@ Ein Downgrade von Versionen ist nicht sofort möglich: Der Wechsel von Beta auf Use &Monochrome Icons &Monochrome Symbole verwenden + + Use &monochrome icons + + You cannot disable autostart because system-wide autostart is enabled. Sie können den Autostart nicht deaktivieren, da der systemweite Autostart aktiviert ist. @@ -2440,6 +2709,22 @@ Ein Downgrade von Versionen ist nicht sofort möglich: Der Wechsel von Beta auf enterprise Unternehmensversion + + https://wl.hidrive.com/easy/0004 + + + + https://wl.hidrive.com/easy/0005 + + + + https://wl.hidrive.com/easy/0006 + + + + https://wl.hidrive.com/easy/0007 + + seconds (if <a href="https://github.com/nextcloud/notify_push">Client Push</a> is unavailable) Sekunden (Wenn <a href="https://github.com/nextcloud/notify_push">Client Push</a> nicht verfügbar ist) @@ -2455,7 +2740,7 @@ Ein Downgrade von Versionen ist nicht sofort möglich: Der Wechsel von Beta auf Connection Timeout Zeitüberschreitung der Verbindung - + No E-Tag received from server, check Proxy/Gateway Kein E-Tag vom Server empfangen, bitte Proxy/Gateway überprüfen @@ -2471,7 +2756,7 @@ Ein Downgrade von Versionen ist nicht sofort möglich: Der Wechsel von Beta auf We received an unexpected download Content-Length. Wir haben eine unerwartete Download-Content-Länge erhalten. - + OCC::GetOrCreatePublicLinkShare @@ -2482,7 +2767,7 @@ Ein Downgrade von Versionen ist nicht sofort möglich: Der Wechsel von Beta auf %1 - + Password for share required Passwort für die Freigabe erforderlich @@ -2494,14 +2779,14 @@ Ein Downgrade von Versionen ist nicht sofort möglich: Der Wechsel von Beta auf Sharing error Fehler beim Teilen - + OCC::HttpCredentialsGui <a href="%1">Click here</a> to request an app password from the web interface. <a href="%1">Hier klicken</a>, um von der Web-Oberfläche ein App-Passwort zu erhalten. - + Enter Password Passwort eingeben @@ -2513,7 +2798,7 @@ Ein Downgrade von Versionen ist nicht sofort möglich: Der Wechsel von Beta auf Reading from keychain failed with error: "%1" Lesen vom Schlüsselbund fehlgeschlagen mit Fehler: "%1" - + OCC::IgnoreListEditor @@ -2551,7 +2836,7 @@ Ein Downgrade von Versionen ist nicht sofort möglich: Der Wechsel von Beta auf Add a new ignore pattern: Neues Ignoriermuster hinzufügen - + Allow Deletion Löschen erlauben @@ -2572,6 +2857,10 @@ Items where deletion is allowed will be deleted if they prevent a directory from Objekte, bei denen Löschen erlaubt ist, werden gelöscht, wenn diese das Entfernen eines Ordners verhindern würden. Dies ist für Metadaten nützlich. + Ignore Pattern + + + Pattern Muster @@ -2602,7 +2891,7 @@ Objekte, bei denen Löschen erlaubt ist, werden gelöscht, wenn diese das Entfer Could not rename local file. %1 Lokale Datei konnte nicht umbenannt werden. %1 - + Error Fehler @@ -2682,7 +2971,7 @@ Objekte, bei denen Löschen erlaubt ist, werden gelöscht, wenn diese das Entfer You don't have the permission to rename this file. Please ask the author of the file to rename it. Sie haben nicht die Berechtigung, diese Datei umzubenennen. Bitte wenden Sie sich an den Autor der Datei, um sie umzubenennen. - + OCC::LegalNotice @@ -2693,7 +2982,7 @@ Objekte, bei denen Löschen erlaubt ist, werden gelöscht, wenn diese das Entfer <p>Licensed under the GNU General Public License (GPL) Version 2.0 or any later version.</p> <p>Lizensiert unter der GNU General Public License (GPL) Version 2.0 oder jeder neueren Version.</p> - + Close Schliessen @@ -2701,7 +2990,7 @@ Objekte, bei denen Löschen erlaubt ist, werden gelöscht, wenn diese das Entfer Legal notice Impressum - + OCC::LogBrowser @@ -2716,7 +3005,7 @@ Objekte, bei denen Löschen erlaubt ist, werden gelöscht, wenn diese das Entfer Open folder Ordner öffnen - + The client can write debug logs to a temporary folder. These logs are very helpful for diagnosing problems. Since log files can get large, the client will start a new one for each sync run and compress older ones. It will also delete log files after a couple of hours to avoid consuming too much disk space. If enabled, logs will be written to %1 @@ -2730,18 +3019,18 @@ Note that using any logging command line options will override this setting.Diese Einstellung bleibt über Client-Neustarts hinweg bestehen. Beachten Sie, dass die Verwendung von Befehlszeilenoptionen für die Protokollierung diese Einstellung außer Kraft setzt. - + OCC::Logger <nobr>File "%1"<br/>cannot be opened for writing.<br/><br/>The log output <b>cannot</b> be saved!</nobr> <nobr>Datei "%1"<br/>kann nicht zum Schreiben geöffnet werden.<br/><br/>Die Protokolldatei kann <b>nicht</b> gespeichert werden!</nobr> - + Error Fehler - + OCC::Mac::FileProviderEditLocallyJob @@ -2835,7 +3124,7 @@ Beachten Sie, dass die Verwendung von Befehlszeilenoptionen für die Protokollie SOCKS5 proxy SOCKS5-Proxy - + Upload Bandwidth Upload-Bandbreite @@ -2851,7 +3140,7 @@ Beachten Sie, dass die Verwendung von Befehlszeilenoptionen für die Protokollie Username for proxy server Benutzername für den Proxy-Server - + OCC::NSISUpdater @@ -2870,7 +3159,7 @@ Beachten Sie, dass die Verwendung von Befehlszeilenoptionen für die Protokollie Get update Aktualisierung durchführen - + New Version Available Eine neue Version ist verfügbar @@ -2890,7 +3179,7 @@ Beachten Sie, dass die Verwendung von Befehlszeilenoptionen für die Protokollie Update manually Manuell aktualisieren - + OCC::OCUpdater @@ -2941,11 +3230,11 @@ Beachten Sie, dass die Verwendung von Befehlszeilenoptionen für die Protokollie Update Check Aktualitätsprüfung - + Update status is unknown: Did not check for new updates. Aktualisierungsstatus unbekannt: Auf neue Aktualisierungen wurde nicht geprüft. - + OCC::OwncloudAdvancedSetupPage @@ -2973,7 +3262,7 @@ Beachten Sie, dass die Verwendung von Befehlszeilenoptionen für die Protokollie In Finder's "Locations" sidebar section In der Finder-Seitenleiste unter "Orte" - + Local Sync Folder Lokaler Ordner für die Synchronisierung @@ -3001,14 +3290,14 @@ Beachten Sie, dass die Verwendung von Befehlszeilenoptionen für die Protokollie Warning: The local folder is not empty. Pick a resolution! Achtung: Der lokale Ordner ist nicht leer. Bitte wählen Sie eine entsprechende Lösung! - + OCC::OwncloudConnectionMethodDialog <html><head/><body><p>Failed to connect to the secure server address <em>%1</em>. How do you wish to proceed?</p></body></html> <html><head/><body><p>Sichere Verbindung zur Serveradresse <em>%1</em> fehlgeschlagen. Wie wollen Sie fortfahren?</p></body></html> - + <html><head/><body><p>Failed to connect to the secure server address specified. How do you wish to proceed?</p></body></html> <html><head/><body><p>Verbindung mit der angegebenen sicheren Serveradresse fehlgeschlagen. Wie möchten Sie fortfahren?</p></body></html> @@ -3028,14 +3317,14 @@ Beachten Sie, dass die Verwendung von Befehlszeilenoptionen für die Protokollie Select a different URL Andere URL wählen - + OCC::ownCloudGui %1 (%2, %3) %1 (%2, %3) - + %1: %2 Example text: "Nextcloud: Syncing 25MB (3 minutes left)" (%1 is the folder name to be synced, %2 a status message for that folder) %1: %2 @@ -3100,7 +3389,7 @@ Beachten Sie, dass die Verwendung von Befehlszeilenoptionen für die Protokollie macOS VFS for %1: Sync is running. macOS VFS für %1: Synchronisierung läuft. - + OCC::OwncloudHttpCredsPage @@ -3133,7 +3422,7 @@ Beachten Sie, dass die Verwendung von Befehlszeilenoptionen für die Protokollie Could not load certificate. Maybe wrong password? Das Zertifikat konnte nicht geladen werden. Vielleicht ein falsches Passwort? - + Server address does not seem to be valid Serveradresse scheint nicht gültig zu sein @@ -3142,7 +3431,7 @@ Beachten Sie, dass die Verwendung von Befehlszeilenoptionen für die Protokollie %1 will be replaced with the application name Der Link zu Ihrer %1 Webseite, wenn Sie diese im Browser öffnen. - + OCC::OwncloudSetupWizard @@ -3153,7 +3442,7 @@ Beachten Sie, dass die Verwendung von Befehlszeilenoptionen für die Protokollie <font color="green"><b>Local sync folder %1 successfully created!</b></font> <font color="green"><b>Lokaler Sync-Ordner %1 erstellt!</b></font> - + <font color="green">Successfully connected to %1: %2 version %3 (%4)</font><br/><br/> <font color="green">Erfolgreich mit %1 verbunden: %2 Version %3 (%4)</font><br/><br/> @@ -3269,7 +3558,7 @@ Beachten Sie, dass die Verwendung von Befehlszeilenoptionen für die Protokollie failed. fehlgeschlagen. - + OCC::OwncloudWizard @@ -3296,7 +3585,7 @@ Beachten Sie, dass die Verwendung von Befehlszeilenoptionen für die Protokollie Stay safe Bleiben Sie sicher - + When the "virtual files" mode is enabled no files will be downloaded initially. Instead, a tiny "%1" file will be created for each file that exists on the server. The contents can be downloaded by running these files or by using their context menu. The virtual files mode is mutually exclusive with selective sync. Currently unselected folders will be translated to online-only folders and your selective sync settings will be reset. @@ -3312,7 +3601,7 @@ Wenn Sie in diesen Modus wechseln, wird eine aktuell laufende Synchronisierung a Dies ist ein neuer, experimenteller Modus. Wenn Sie sich entscheiden, ihn zu verwenden, melden Sie bitte alle auftretenden Probleme. - + OCC::PasswordInputDialog @@ -3464,7 +3753,7 @@ Dies ist ein neuer, experimenteller Modus. Wenn Sie sich entscheiden, ihn zu ver Server replied with an error while reading directory "%1" : %2 Der Server hat während des Lesens des Verzeichnisses "%1" mit einem Fehler geantwortet: %2 - + Server reported no %1 Server meldet keine %1 @@ -3496,7 +3785,7 @@ Dies ist ein neuer, experimenteller Modus. Wenn Sie sich entscheiden, ihn zu ver size Größe - + OCC::PropagateDirectory @@ -3515,7 +3804,7 @@ Dies ist ein neuer, experimenteller Modus. Wenn Sie sich entscheiden, ihn zu ver File is currently in use Datei ist aktuell in Benutzung - + The folder %1 cannot be made read-only: %2 Der Ordner %1 kann nicht schreibgeschützt werden: %2 @@ -3523,7 +3812,7 @@ Dies ist ein neuer, experimenteller Modus. Wenn Sie sich entscheiden, ihn zu ver unknown exception Unbekannter Ausnahmefehler - + OCC::PropagateDownloadFile @@ -3558,7 +3847,7 @@ Dies ist ein neuer, experimenteller Modus. Wenn Sie sich entscheiden, ihn zu ver File has changed since discovery Datei ist seit der Entdeckung geändert worden - + File was deleted from server Die Datei wurde vom Server gelöscht @@ -3582,7 +3871,7 @@ Dies ist ein neuer, experimenteller Modus. Wenn Sie sich entscheiden, ihn zu ver The file could not be downloaded completely. Die Datei konnte nicht vollständig heruntergeladen werden. - + OCC::PropagateItemJob @@ -3612,7 +3901,7 @@ Dies ist ein neuer, experimenteller Modus. Wenn Sie sich entscheiden, ihn zu ver The file %1 is currently in use Die Datei %1 ist aktuell in Benutzung - + The folder %1 cannot be made read-only: %2 Der Ordner %1 kann nicht schreibgeschützt werden: %2 @@ -3624,14 +3913,14 @@ Dies ist ein neuer, experimenteller Modus. Wenn Sie sich entscheiden, ihn zu ver unknown exception Unbekannter Ausnahmefehler - + OCC::PropagateLocalRemove Could not delete file record %1 from local DB Der Dateidatensatz %1 konnte nicht aus der lokalen Datenbank gelöscht werden - + Could not remove %1 because of a local file name clash %1 kann aufgrund eines Konfliktes mit dem lokalen Dateinamen nicht entfernt werden @@ -3639,14 +3928,14 @@ Dies ist ein neuer, experimenteller Modus. Wenn Sie sich entscheiden, ihn zu ver Temporary error when removing local item removed from server. Vorübergehender Fehler beim Entfernen eines vom Server entfernten lokalen Objekts. - + OCC::PropagateLocalRename Could not delete file record %1 from local DB Der Dateidatensatz %1 konnte nicht aus der lokalen Datenbank gelöscht werden - + Could not get file %1 from local DB Datei %1 konnte nicht aus der lokalen Datenbank abgerufen werden @@ -3678,18 +3967,18 @@ Dies ist ein neuer, experimenteller Modus. Wenn Sie sich entscheiden, ihn zu ver The file %1 is currently in use Die Datei %1 ist aktuell in Benutzung - + OCC::PropagateRemoteDelete Could not delete file record %1 from local DB Der Dateidatensatz %1 konnte nicht aus der lokalen Datenbank gelöscht werden - + Wrong HTTP code returned by server. Expected 204, but received "%1 %2". Es wurde ein falscher HTTP-Status-Code vom Server gesendet. Erwartet wurde 204, aber gesendet wurde "%1 %2". - + OCC::PropagateRemoteDeleteEncryptedRootFolder @@ -3711,11 +4000,11 @@ Dies ist ein neuer, experimenteller Modus. Wenn Sie sich entscheiden, ihn zu ver The file %1 is currently in use Die Datei %1 ist aktuell in Benutzung - + Wrong HTTP code returned by server. Expected 201, but received "%1 %2". Es wurde ein falscher HTTP-Status-Code vom Server gesendet. Erwartet wurde 201, aber gesendet wurde "%1 %2". - + OCC::PropagateRemoteMove @@ -3742,7 +4031,7 @@ Dies ist ein neuer, experimenteller Modus. Wenn Sie sich entscheiden, ihn zu ver Error writing metadata to the database Fehler beim Schreiben der Metadaten in die Datenbank - + The file %1 is currently in use Die Datei %1 ist aktuell in Benutzung @@ -3750,7 +4039,7 @@ Dies ist ein neuer, experimenteller Modus. Wenn Sie sich entscheiden, ihn zu ver Wrong HTTP code returned by server. Expected 201, but received "%1 %2". Es wurde ein falscher HTTP-Status-Code vom Server gesendet. Erwartet wurde 201, aber gesendet wurde "%1 %2". - + OCC::PropagateUploadFileCommon @@ -3777,7 +4066,7 @@ Dies ist ein neuer, experimenteller Modus. Wenn Sie sich entscheiden, ihn zu ver File Removed (start upload) %1 Datei entfernt (starte Hochladen) %1 - + Local file changed during sync. Eine lokale Datei wurde während der Synchronisierung geändert. @@ -3797,7 +4086,7 @@ Dies ist ein neuer, experimenteller Modus. Wenn Sie sich entscheiden, ihn zu ver Upload of %1 exceeds the quota for the folder Das Hochladen von %1 überschreitet das Speicherkontingent des Ordners - + OCC::PropagateUploadFileNG @@ -3808,7 +4097,7 @@ Dies ist ein neuer, experimenteller Modus. Wenn Sie sich entscheiden, ihn zu ver Missing ETag from server Fehlender ETag vom Server - + Missing File ID from server Fehlende Datei-ID vom Server @@ -3824,7 +4113,7 @@ Dies ist ein neuer, experimenteller Modus. Wenn Sie sich entscheiden, ihn zu ver Unexpected return code from server (%1) Unerwarteter Rückgabe-Code Antwort vom Server (%1) - + OCC::PropagateUploadFileV1 @@ -3850,7 +4139,7 @@ Dies ist ein neuer, experimenteller Modus. Wenn Sie sich entscheiden, ihn zu ver Password: Passwort: - + Proxy authentication required Proxy-Authentifzierung erforderlich @@ -3866,7 +4155,7 @@ Dies ist ein neuer, experimenteller Modus. Wenn Sie sich entscheiden, ihn zu ver Username: Benutzername: - + OCC::SelectiveSyncDialog @@ -3880,7 +4169,7 @@ Dies ist ein neuer, experimenteller Modus. Wenn Sie sich entscheiden, ihn zu ver An error occurred while loading the list of sub folders. Es ist ein Fehler während des Ladens der Liste der Unterordner aufgetreten. - + Deselect remote folders you do not wish to synchronize. Entfernte Ordner abwählen, die nicht synchronisiert werden sollen. @@ -3900,7 +4189,7 @@ Dies ist ein neuer, experimenteller Modus. Wenn Sie sich entscheiden, ihn zu ver Size Größe - + OCC::ServerNotificationHandler @@ -3908,6 +4197,21 @@ Dies ist ein neuer, experimenteller Modus. Wenn Sie sich entscheiden, ihn zu ver Antworten + + OCC::sesSnackBar + + Error + Fehler + + + Success + + + + Warning + Warnung + + OCC::SettingsDialog @@ -3919,7 +4223,7 @@ Dies ist ein neuer, experimenteller Modus. Wenn Sie sich entscheiden, ihn zu ver Account Konto - + General Allgemein @@ -3928,6 +4232,10 @@ Dies ist ein neuer, experimenteller Modus. Wenn Sie sich entscheiden, ihn zu ver Netzwerk + New account + + + Settings Einstellungen @@ -3939,7 +4247,7 @@ Dies ist ein neuer, experimenteller Modus. Wenn Sie sich entscheiden, ihn zu ver sharee (shareWithAdditionalInfo) %1 (%2) - + Global search results Globale Suchergebnisse @@ -3951,7 +4259,7 @@ Dies ist ein neuer, experimenteller Modus. Wenn Sie sich entscheiden, ihn zu ver Search globally Global suchen - + OCC::ShareManager @@ -3973,7 +4281,7 @@ Dies ist ein neuer, experimenteller Modus. Wenn Sie sich entscheiden, ihn zu ver Could not find local folder for %1 Lokaler Ordner für %1 nicht gefunden - + Internal link Interner Link @@ -3997,7 +4305,7 @@ Dies ist ein neuer, experimenteller Modus. Wenn Sie sich entscheiden, ihn zu ver Today Heute - + OCC::SocketApi @@ -4088,7 +4396,7 @@ Server antwortete mit Fehler: %2 Open in browser Im Browser öffnen - + Resharing this file is not allowed Weiterteilen dieser Datei ist nicht erlaubt @@ -4124,7 +4432,7 @@ Server antwortete mit Fehler: %2 Unlock file Datei entsperren - + OCC::SslButton @@ -4221,12 +4529,20 @@ Server antwortete mit Fehler: %2 Diese Verbindung ist NICHT sicher, da diese nicht verschlüsselt ist. + + This connection is NOT secure as it is not encrypted. + + This connection is encrypted using %1 bit %2. Diese Verbindung ist verschlüsselt mit %1 Bit %2. + + This connection is encrypted using %1 bit %2. + + OCC::SslErrorDialog @@ -4270,7 +4586,7 @@ Server antwortete mit Fehler: %2 Issuer: %1 Aussteller: %1 - + Organization: %1 Organisation: %1 @@ -4290,7 +4606,7 @@ Server antwortete mit Fehler: %2 with Certificate %1 mit Zertifikat %1 - + OCC::SyncEngine @@ -4301,7 +4617,7 @@ Server antwortete mit Fehler: %2 Cannot open the sync journal Synchronisierungsprotokoll kann nicht geöffnet werden - + Could not set file record to local DB: %1 Der Dateidatensatz konnte nicht in die lokale Datenbank eingestellt werden: %1 @@ -4350,7 +4666,7 @@ Server antwortete mit Fehler: %2 Using virtual files with suffix, but suffix is not set Virtuelle Dateien mit Endung verwenden, aber Endung ist nicht gesetzt. - + OCC::SyncStatusSummary @@ -4444,18 +4760,18 @@ Server antwortete mit Fehler: %2 Resume sync for all Synchronisierung für alle fortsetzen - + Settings Einstellungen - + OCC::TermsOfServiceCheckWidget Copy Link Link kopieren - + Link copied to clipboard. Link in die Zwischenablage kopiert. @@ -4471,7 +4787,7 @@ Server antwortete mit Fehler: %2 Waiting for terms to be accepted Es wird auf die Bestätigung der Nutzungsbedingungen gewartet - + OCC::Theme @@ -4487,6 +4803,10 @@ Server antwortete mit Fehler: %2 <p>This release was supplied by %1.</p> <p>Diese Version wird von %1 bereitgestellt</p>. + + easy/0118 + + OCC::UnifiedSearchResultsListModel @@ -4502,18 +4822,18 @@ Server antwortete mit Fehler: %2 Search has failed for '%1'. Error: %2 Suche nach '%1' fehlgeschlagen. Fehler: %2 - + Search has failed for '%2'. Suche nach '%2' fehlgeschlagen. - + OCC::UpdateE2eeFolderMetadataJob Failed to finalize item. Element konnte nicht fertiggestellt werden - + Failed to unlock encrypted folder. Verschlüsselter Ordner konnte nicht entsperrt werden. @@ -4521,7 +4841,7 @@ Server antwortete mit Fehler: %2 Failed to update folder metadata. Ordner-Metadaten konnten nicht aktualisiert werden - + OCC::UpdateE2eeFolderUsersMetadataJob @@ -4566,7 +4886,7 @@ Server antwortete mit Fehler: %2 Open Nextcloud Talk in browser Nextcloud-Talk im Browser öffnen - + Rename file Datei umbenennen @@ -4582,7 +4902,7 @@ Server antwortete mit Fehler: %2 Trigger the migration Starten der Migration - + OCC::UserModel @@ -4593,7 +4913,7 @@ Server antwortete mit Fehler: %2 Cancel Abbrechen - + Confirm Account Removal Kontenentfernung bestätigen @@ -4601,7 +4921,7 @@ Server antwortete mit Fehler: %2 Remove connection Verbindung entfernen - + OCC::UserStatusSelectorModel @@ -4611,7 +4931,7 @@ Server antwortete mit Fehler: %2 %1 Tage - + %1 hours %1 Stunde @@ -4685,7 +5005,7 @@ Server antwortete mit Fehler: %2 Today Heute - + OCC::Vfs @@ -4696,18 +5016,18 @@ Server antwortete mit Fehler: %2 Please choose a different location. %1 is a network drive. It doesn't support virtual files. Bitte wählen Sie einen anderen Speicherort. %1 ist ein Netzlaufwerk. Es unterstützt keine virtuellen Dateien. - + Please choose a different location. %1 isn't a NTFS file system. It doesn't support virtual files. Bitte wählen Sie einen anderen Speicherort. %1 ist kein NTFS-Dateisystem. Es unterstützt keine virtuellen Dateien. - + OCC::VfsDownloadErrorDialog %1 could not be downloaded. %1 konnte nicht heruntergeladen werden. - + > More details > Weitere Details @@ -4731,7 +5051,7 @@ Server antwortete mit Fehler: %2 could not be downloaded Konnte nicht heruntergeladen werden - + OCC::VfsSuffix @@ -4760,10 +5080,14 @@ Server antwortete mit Fehler: %2 OCC::WebFlowCredentials + <b>You have been logged out of your account %1 at %2. Please login again.</b> + + + You have been logged out of your account %1 at %2. Please login again. Sie wurden von Ihrem Konto %1 als %2 abgemeldet. Bitte melden Sie sich erneut an. - + OCC::WelcomePage @@ -4778,7 +5102,7 @@ Server antwortete mit Fehler: %2 Host your own server Eigenen Server betreiben - + Keep your data secure and under your control Halten Sie Ihre Daten sicher und unter Ihrer Kontrolle @@ -4798,14 +5122,14 @@ Server antwortete mit Fehler: %2 Sign up with provider Mit Provider anmelden - + OwncloudAdvancedSetupPage &Local Folder &Lokaler Ordner - + <html><head/><body><p>If this box is checked, existing content in the local folder will be erased to start a clean sync from the server.</p><p>Do not check this if the local content should be uploaded to the servers folder.</p></body></html> <html><head/><body><p>Wenn diese Option gesetzt ist, werden bestehende Inhalte im lokalen Ordner gelöscht, um eine saubere Synchronisierung nur der Serverdaten zu ermöglichen.</p><p>Wählen Sie diese Option nicht, wenn die lokalen Inhalte auf den Server übertragen werden sollen.</p></body></html> @@ -4858,18 +5182,18 @@ Server antwortete mit Fehler: %2 Username Benutzername - + OwncloudHttpCredsPage &Password &Passwort - + &Username &Benutzername - + OwncloudSetupPage @@ -4963,7 +5287,7 @@ Server antwortete mit Fehler: %2 Updating end-to-end encryption metadata Aktualisieren der Metadaten für die Ende-zu-Ende-Verschlüsselung - + Updating local metadata Aktualisiere lokale Metadaten @@ -4983,7 +5307,7 @@ Server antwortete mit Fehler: %2 Virtual file created Virtuelle Datei erstellt - + QObject @@ -5040,7 +5364,7 @@ Server antwortete mit Fehler: %2 Paths beginning with '#' character are not supported in VFS mode. Pfade, die mit dem Zeichen '#' beginnen, werden im VFS-Modus nicht unterstützt. - + Some time ago Vor einiger Zeit @@ -5049,6 +5373,10 @@ Server antwortete mit Fehler: %2 %1 synchronisiert + The directory %1 cannot be part of your sync directory. Please choose another folder. + + + You changed %1 Sie haben %1 geändert @@ -5095,7 +5423,7 @@ Server antwortete mit Fehler: %2 Cancel Abbrechen - + Choose if you want to keep the local version, server version, or both. If you choose both, the local file will have a number added to its name. Wählen Sie, ob Sie die lokale Version, die Serverversion oder beide behalten möchten. Wenn Sie beide auswählen, wird dem Namen der lokalen Datei eine Nummer hinzugefügt. @@ -5107,6 +5435,28 @@ Server antwortete mit Fehler: %2 Solve sync conflicts Synchronisationskonflikte lösen + + + SesErrorBox + + Error + Fehler + + + + SesTrayHeader + + Open Nextcloud in browser + + + + Open local or group folders + Lokalen oder Gruppenordner öffnen + + + Website + + ShareDelegate @@ -5114,6 +5464,18 @@ Server antwortete mit Fehler: %2 Copied! Kopiert! + + Copy share link location + + + + Create a new share link + + + + Share options + Freigabeoptionen + ShareDetailsPage @@ -5137,6 +5499,10 @@ Server antwortete mit Fehler: %2 Copy share link Freigabe-Link kopieren + + Custom Permissions + + Edit share Freigabe bearbeiten @@ -5145,6 +5511,10 @@ Server antwortete mit Fehler: %2 Enter a note for the recipient Eine Notiz für den Empfänger eingeben + + Enter the note to recipient + + File drop (upload only) Dateien ablegen (nur Hochladen) @@ -5219,11 +5589,11 @@ Server antwortete mit Fehler: %2 Sharing is disabled. Teilen ist deaktiviert. - + This item cannot be shared. Dieses Element kann nicht geteilt werden - + SyncJournalDb @@ -5237,7 +5607,7 @@ Server antwortete mit Fehler: %2 Open browser Browser öffnen - + Resolve conflicts Konflikte lösen @@ -5245,7 +5615,7 @@ Server antwortete mit Fehler: %2 Sync now Jetzt synchronisieren - + TalkReplyTextField @@ -5267,11 +5637,11 @@ Server antwortete mit Fehler: %2 Switch to your browser to accept the terms of service Zum Browser wechseln, um die Nutzungsbedingungen zu bestätigen - + Terms of Service Nutzungsbedingungen - + theme @@ -5294,7 +5664,7 @@ Server antwortete mit Fehler: %2 Sync is paused Synchronisierung ist angehalten. - + Sync is running Synchronisierung läuft @@ -5314,6 +5684,49 @@ Server antwortete mit Fehler: %2 Waiting to start syncing Warte auf Beginn der Synchronisierung. + + + TrayWindowAccountMenu + + Account switcher and settings menu + Konto-Umschalter und Einstellungsmenü + + + Add account + Konto hinzufügen + + + Current account + Aktuelles Konto + + + Current account avatar + Avatar des aktuellen Kontos + + + Current account status is do not disturb + Aktueller Kontostatus ist "Nicht stören" + + + Current account status is online + Aktueller Kontostatus ist "Online" + + + Exit + Beenden + + + Pause sync for all + Synchronisierung für alle pausieren + + + Resume sync for all + Synchronisierung für alle fortsetzen + + + Settings + Einstellungen + TrayWindowHeader @@ -5325,10 +5738,37 @@ Server antwortete mit Fehler: %2 Open %1 in browser %1 im Browser öffnen - + Open local or group folders Lokalen oder Gruppenordner öffnen + + + TrayWindowHeaderBar + + More apps + Weitere Apps + + + Open %1 in browser + %1 im Browser öffnen + + + Open Nextcloud Talk in browser + Nextcloud-Talk im Browser öffnen + + + Open Nextcloud in browser + + + + Open local or group folders + Lokalen oder Gruppenordner öffnen + + + Website + + UnifiedSearchInputContainer @@ -5405,7 +5845,7 @@ Server antwortete mit Fehler: %2 Remove account Konto entfernen - + Set status Status setzen @@ -5413,7 +5853,7 @@ Server antwortete mit Fehler: %2 Switch to account Zu Konto wechseln - + UserStatusSelector @@ -5424,7 +5864,7 @@ Server antwortete mit Fehler: %2 Apply Anwenden - + Away Abwesend @@ -5468,14 +5908,14 @@ Server antwortete mit Fehler: %2 What is your status? Wie ist Ihr Status? - + Utility %1 %2 %1 %2 - + %L1 B %L1 B @@ -5537,7 +5977,7 @@ Server antwortete mit Fehler: %2 %n Jahre - + utility @@ -5564,7 +6004,7 @@ Server antwortete mit Fehler: %2 Free up local space Lokalen Speicherplatz freigeben - + Make always available locally Immer lokal verfügbar machen @@ -5580,7 +6020,7 @@ Server antwortete mit Fehler: %2 There was an error when launching the email client to create a new message. Maybe no default email client is configured? Fehler beim Öffnen der E-Mail-Anwendung zum Erstellen einer neuen Nachricht. Vielleicht ist keine Standard-E-Mail Anwendung eingerichtet? - + ValidateChecksumHeader diff --git a/translations/client_en.ts b/translations/client_en.ts index 3e476ffb40248..45b0a0b139d5b 100644 --- a/translations/client_en.ts +++ b/translations/client_en.ts @@ -6,22 +6,22 @@ In %1 - + Open %1 locally - + ActivityItemContent Dismiss - + Open file details - + ActivityList @@ -32,11 +32,11 @@ No activities yet - + Scroll to top - + CallNotificationDialog @@ -51,11 +51,11 @@ Decline Talk call notification - + Talk notification caller avatar - + CloudProviderWrapper @@ -90,7 +90,7 @@ Quit sync client - + Recently changed @@ -119,10 +119,10 @@ - Syncing %1 of %2 (%3 left) + Syncing %1 of %2 (%3 left) - + ConflictDelegate @@ -140,7 +140,7 @@ Account switcher and settings menu - + Add account @@ -180,7 +180,7 @@ Settings - + EditFileLocallyLoadingDialog @@ -212,7 +212,7 @@ Cancel - + Choose @@ -220,7 +220,7 @@ Token Encryption Key Chooser - + ErrorBox @@ -231,11 +231,7 @@ FileDetailsPage - Activity - - - - Sharing + Dismiss @@ -268,7 +264,7 @@ - Fast sync will only sync changes in files and folders within folders that have been explored. This can significantly increase responsiveness on initial configuration of virtual files. However, it will cause redundant downloads of files moved to an unexplored folder. + Fast sync will only sync changes in files and folders within folders that have been explored. This can significantly increase responsiveness on initial configuration of virtual files. However, it will cause redundant downloads of files moved to an unexplored folder. @@ -285,7 +281,7 @@ Enable virtual files - + General settings @@ -293,7 +289,7 @@ Virtual files settings - + FileProviderStorageInfo @@ -304,11 +300,11 @@ Evict local copies … - + Local storage use - + FileProviderSyncStatus @@ -320,7 +316,7 @@ macOS may ignore or delay this request. - + Request sync @@ -328,51 +324,86 @@ macOS may ignore or delay this request. Syncing - + FileSystem Could not remove folder "%1" - + Error removing "%1": %2 - + Flow2AuthWidget An error occurred while connecting. Please try again. - + Browser Authentication + + Copy Link + + Logo + Reopen Browser + + + Switch to your browser to connect your account + + FolderWizardSelectiveSync + + Add Folder Sync + + + + Step 3 of 3: Selektive Synchronisation + + + FolderWizardSourcePage - &Choose … + &Choose - Pick a local folder on your computer to sync + Add Folder Sync + + + + Select a folder on your hard drive that should be permanetly connected to your %1. All files and subfolders are automatically uploaded and synchronized + + + + Step 1 of 3: Select local folder FolderWizardTargetPage + Add Folder Sync + + + + Both folders are permanently linked and the respective contents are automatically synchronized and updated. + + + Create folder @@ -380,12 +411,16 @@ macOS may ignore or delay this request. Folders - + + Please now select or create a target folder in your %1 where the content should be uploaded and synchronized. + + + Refresh - Select a remote destination folder + Step 2 of 3: Directory in your %1 @@ -395,18 +430,18 @@ macOS may ignore or delay this request. %1 requires on a working system tray. If you are running XFCE, please follow <a href="http://docs.xfce.org/xfce/xfce4-panel/systray">these instructions</a>. Otherwise, please install a system tray application such as "trayer" and try again. - + System Tray not available - + MainWindow New activities - + Nextcloud desktop main dialog @@ -414,7 +449,7 @@ macOS may ignore or delay this request. Unified search results list - + nextcloudTheme::aboutInfo() @@ -432,11 +467,11 @@ macOS may ignore or delay this request. Server replied "%1 %2" to "%3 %4" - + Unknown error: network reply was deleted - + OCC::Account @@ -468,7 +503,7 @@ Should the account be imported? Could not import accounts from legacy client configuration. - + Import @@ -480,7 +515,7 @@ Should the account be imported? Skip - + OCC::AccountSettings @@ -640,6 +675,10 @@ Would you like to set up end-to-end encryption? End-to-end encryption mnemonic + + Expand Memory + + Folder creation failed @@ -656,7 +695,7 @@ Would you like to set up end-to-end encryption? No %1 connection configured. - + No account configured. @@ -720,6 +759,10 @@ Would you like to set up end-to-end encryption? Standard file sync + + Storage space %1% occupied + + Storage space: … @@ -757,15 +800,15 @@ Would you like to set up end-to-end encryption? - There are folders that were not synchronized because they are external storages: + There are folders that were not synchronized because they are external storages: - There are folders that were not synchronized because they are too big or external storages: + There are folders that were not synchronized because they are too big or external storages: - - There are folders that were not synchronized because they are too big: + + There are folders that were not synchronized because they are too big: @@ -818,6 +861,10 @@ Wait for the new sync, then encrypt it. You seem to have the Virtual Files feature enabled on this folder. At the moment, it is not possible to implicitly download virtual files that are end-to-end encrypted. To get the best experience with virtual files and end-to-end encryption, make sure the encrypted folder is marked with "Make always available locally". + + https://wl.hidrive.com/easy/0057 + + OCC::AccountSetupFromCommandLineJob @@ -914,7 +961,7 @@ Wait for the new sync, then encrypt it. Certificate files (*.p12 *.pfx) - + Certificate password: @@ -930,7 +977,7 @@ Wait for the new sync, then encrypt it. This server probably requires a SSL client certificate. - + OCC::Application @@ -981,7 +1028,7 @@ Wait for the new sync, then encrypt it. There was an error while accessing the configuration file at %1. Please make sure the file can be accessed by your system account. - + deleting @@ -999,14 +1046,14 @@ Wait for the new sync, then encrypt it. older software version - + OCC::AuthenticationDialog &Password: - + &Username: @@ -1018,7 +1065,7 @@ Wait for the new sync, then encrypt it. Enter username and password for "%1" at %2. - + OCC::BasePropagateRemoteDeleteEncrypted @@ -1068,7 +1115,7 @@ Wait for the new sync, then encrypt it. Restoration failed: %1 - + The file %1 is currently in use @@ -1076,7 +1123,7 @@ Wait for the new sync, then encrypt it. The local file was removed during sync. - + OCC::CaseClashConflictSolver @@ -1103,11 +1150,11 @@ Wait for the new sync, then encrypt it. Filename contains trailing spaces. - + You don't have the permission to rename this file. Please ask the author of the file to rename it. - + OCC::CaseClashFilenameDialog @@ -1138,7 +1185,7 @@ Wait for the new sync, then encrypt it. Filename contains illegal characters: %1 - + Filename contains leading and trailing spaces. @@ -1194,7 +1241,7 @@ Wait for the new sync, then encrypt it. today - + OCC::CleanupPollsJob @@ -1212,7 +1259,7 @@ Wait for the new sync, then encrypt it. Enter E2E passphrase - + Input PIN code Please keep it short and shorter than "Enter Certificate USB Token PIN:" @@ -1229,7 +1276,7 @@ Wait for the new sync, then encrypt it. Please enter your end-to-end encryption passphrase:<br><br>Username: %2<br>Account: %3<br> - + OCC::ConflictDialog @@ -1268,7 +1315,7 @@ Wait for the new sync, then encrypt it. Keep server version - + Local version @@ -1296,7 +1343,7 @@ Wait for the new sync, then encrypt it. today - + OCC::ConflictSolver @@ -1344,22 +1391,76 @@ Wait for the new sync, then encrypt it. The provided credentials are not correct - + Timeout - + + + OCC::DataProtectionPage + + Agree + + + + Form + + + + Settings + + + + This application uses tracking technologies. By clicking on Agree, you accept the processing of your anonymized data. You can adjust your choices at any time via the settings. <br/> <br/>Information on data processing and more can be found in our <a href='https://wl.hidrive.com/easy/0005'>privacy policy</a>. + + + + + OCC::DataProtectionSettingsPage + + Back + + + + Form + + + + Necessary data + + + + Required to ensure that the software can be used as expected + + + + Save Settings + + + + Send anonymous use + + + + This helps us to optimize the software and to better identify system crashes and unexpected errors. + + + + We collect anonymized data to optimize our app. We use software solutions from various partners for this purpose. We want to give you full transparency and freedom of choice regarding the collection and processing of your anonymized usage. You can change your settings at any time under the menu item Data Protection. + + + OCC::DiscoveryPhase Error while canceling deletion of %1 - + Error while canceling deletion of a file - + OCC::DiscoverySingleDirectoryJob @@ -1370,11 +1471,11 @@ Wait for the new sync, then encrypt it. Encrypted metadata setup error: initial signature from server is empty. - + Server error: PROPFIND reply is not XML formatted! - + OCC::DiscoverySingleLocalDirectoryJob @@ -1393,11 +1494,11 @@ Wait for the new sync, then encrypt it. Error while reading directory %1 - + Filename encoding is not valid - + OCC::EditLocallyJob @@ -1440,7 +1541,7 @@ Wait for the new sync, then encrypt it. File %1 could not be locked. - + File %1 now locked. @@ -1460,7 +1561,7 @@ Wait for the new sync, then encrypt it. Server error: PROPFIND reply is not XML formatted! - + OCC::EditLocallyManager @@ -1478,7 +1579,7 @@ Wait for the new sync, then encrypt it. An error occurred trying to verify the request to edit locally. - + Could not find an account for local editing. @@ -1498,7 +1599,7 @@ Wait for the new sync, then encrypt it. Please try again. - + OCC::EncryptedFolderMetadataHandler @@ -1611,18 +1712,22 @@ This can be an issue with your OpenSSL libraries. The returned server URL does not start with HTTPS despite the login URL started with HTTPS. Login will not be possible because this might be a security issue. Please contact your administrator. - + There was an error accessing the "token" endpoint: <br><em>%1</em> - + OCC::Flow2AuthWidget Copy Link - + + Error + + + Link copied to clipboard. @@ -1639,6 +1744,10 @@ This can be an issue with your OpenSSL libraries. + Switch to your browser to connect your account + + + Unable to open the Browser, please copy the link to your Browser. @@ -1742,11 +1851,10 @@ This can be an issue with your OpenSSL libraries. - A folder from an external storage has been added. - + A folder from an external storage has been added. - + A folder has surpassed the set folder size limit of %1MB: %2. %3 @@ -1764,8 +1872,7 @@ Alternatively, you can restore all deleted files by downloading them from the se - A new folder larger than %1 MB has been added: %2. - + A new folder larger than %1 MB has been added: %2. @@ -1812,7 +1919,7 @@ This means that the synchronization client might not upload local changes immedi Restore Files from Server - + Restore Files to Server @@ -1848,10 +1955,14 @@ This means that the synchronization client might not upload local changes immedi OCC::FolderCreationDialog - Could not create a folder! Check your write permissions. + %1 Create new folder + Could not create a folder! Check your write permissions. + + + Create new folder @@ -1874,12 +1985,12 @@ This means that the synchronization client might not upload local changes immedi %1 (Sync is paused) - - (backup %1) + + (backup %1) - - (backup) + + (backup) @@ -1991,13 +2102,17 @@ For advanced users: this issue might be related to multiple sync database files OCC::FolderStatusDelegate - Add Folder Sync Connection + Add Folder Sync File + + Synchronize any other local folder with your %1 + + OCC::FolderStatusModel @@ -2079,7 +2194,7 @@ For advanced users: this issue might be related to multiple sync database files Preparing to sync … - + Signed out @@ -2127,7 +2242,7 @@ For advanced users: this issue might be related to multiple sync database files ↓ %1/s - + OCC::FolderWatcher @@ -2156,6 +2271,14 @@ For advanced users: this issue might be related to multiple sync database files OCC::FolderWizardLocalPath + Add Folder Sync + + + + Choose + + + Click to select a local folder to sync. @@ -2163,17 +2286,33 @@ For advanced users: this issue might be related to multiple sync database files Enter the path to the local folder. + + Select a folder on your hard drive that should be permanetly connected to your %1. All files and subfolders are automatically uploaded and synchronized + + Select the source folder - + + Step 1 of 3: Select local folder + + + OCC::FolderWizardRemotePath + + Add Folder Sync + + Authentication failed accessing %1 + + Both folders are permanently linked and the respective contents are automatically synchronized and updated. + + Choose this to sync the entire account @@ -2183,6 +2322,10 @@ For advanced users: this issue might be related to multiple sync database files + Create folder + + + Enter the name of the new folder to be created below "%1": @@ -2202,7 +2345,19 @@ For advanced users: this issue might be related to multiple sync database files Please choose a different location. %1 is already being synced to %2. - + + Please now select or create a target folder in your %1 where the content should be uploaded and synchronized. + + + + Refresh + + + + Step 2 of 3: Directory in your %1 + + + OCC::FolderWizardSelectiveSync @@ -2210,6 +2365,14 @@ For advanced users: this issue might be related to multiple sync database files + Add Folder Sync + + + + Step 3 of 3: Selektive Synchronisation + + + Use virtual files instead of downloading content immediately %1 @@ -2217,7 +2380,7 @@ For advanced users: this issue might be related to multiple sync database files Virtual files are not supported at the selected location - + Virtual files are not supported for Windows partition roots as local folder. Please choose a valid subfolder under drive letter. @@ -2287,6 +2450,10 @@ Downgrading versions is not possible immediately: changing from stable to enterp Create Debug Archive + + Data Protection + + Debug Archive Created @@ -2295,7 +2462,7 @@ Downgrading versions is not possible immediately: changing from stable to enterp Debug archive is created at %1 - + Desktop client x.x.x @@ -2311,10 +2478,6 @@ Downgrading versions is not possible immediately: changing from stable to enterp General Settings - - Info - - Legal Notice @@ -2324,32 +2487,44 @@ Downgrading versions is not possible immediately: changing from stable to enterp Trailing part of "Ask confirmation before syncing folder larger than" + + More Information + + Move removed files to trash + + Necessary data + + Notify when synchronised folders grow larger than specified limit - S&how crash reporter + Open Source Software - Server notifications that require attention. + Privacy Policy - Server poll interval + Required to ensure that the software can be used as expected - Show Call Notifications + S&how crash reporter - Show Chat Notifications + Send anonymous use + + + + Server notifications that require attention. @@ -2361,7 +2536,7 @@ Downgrading versions is not possible immediately: changing from stable to enterp - Show chat notification dialogs. + Show call notifications @@ -2375,16 +2550,24 @@ Downgrading versions is not possible immediately: changing from stable to enterp starts list of available update channels, stable is always available + + This helps us to optimize the software and to better identify system crashes and unexpected errors. + + Update channel + + Updates + + Usage Documentation - Use &Monochrome Icons + Use &monochrome icons @@ -2408,7 +2591,19 @@ Downgrading versions is not possible immediately: changing from stable to enterp - seconds (if <a href="https://github.com/nextcloud/notify_push">Client Push</a> is unavailable) + https://wl.hidrive.com/easy/0004 + + + + https://wl.hidrive.com/easy/0005 + + + + https://wl.hidrive.com/easy/0006 + + + + https://wl.hidrive.com/easy/0007 @@ -2422,7 +2617,7 @@ Downgrading versions is not possible immediately: changing from stable to enterp Connection Timeout - + No E-Tag received from server, check Proxy/Gateway @@ -2438,7 +2633,7 @@ Downgrading versions is not possible immediately: changing from stable to enterp We received an unexpected download Content-Length. - + OCC::GetOrCreatePublicLinkShare @@ -2447,7 +2642,7 @@ Downgrading versions is not possible immediately: changing from stable to enterp %1 - + Password for share required @@ -2459,14 +2654,14 @@ Downgrading versions is not possible immediately: changing from stable to enterp Sharing error - + OCC::HttpCredentialsGui <a href="%1">Click here</a> to request an app password from the web interface. - + Enter Password @@ -2478,7 +2673,7 @@ Downgrading versions is not possible immediately: changing from stable to enterp Reading from keychain failed with error: "%1" - + OCC::IgnoreListEditor @@ -2508,15 +2703,11 @@ Downgrading versions is not possible immediately: changing from stable to enterp Add - - Add Ignore Pattern - - Add a new ignore pattern: - + Allow Deletion @@ -2535,6 +2726,10 @@ Items where deletion is allowed will be deleted if they prevent a directory from + Ignore Pattern + + + Pattern @@ -2565,7 +2760,7 @@ Items where deletion is allowed will be deleted if they prevent a directory from Could not rename local file. %1 - + Error @@ -2645,7 +2840,7 @@ Items where deletion is allowed will be deleted if they prevent a directory from You don't have the permission to rename this file. Please ask the author of the file to rename it. - + OCC::LegalNotice @@ -2656,7 +2851,7 @@ Items where deletion is allowed will be deleted if they prevent a directory from <p>Licensed under the GNU General Public License (GPL) Version 2.0 or any later version.</p> - + Close @@ -2664,7 +2859,7 @@ Items where deletion is allowed will be deleted if they prevent a directory from Legal notice - + OCC::LogBrowser @@ -2679,7 +2874,7 @@ Items where deletion is allowed will be deleted if they prevent a directory from Open folder - + The client can write debug logs to a temporary folder. These logs are very helpful for diagnosing problems. Since log files can get large, the client will start a new one for each sync run and compress older ones. It will also delete log files after a couple of hours to avoid consuming too much disk space. If enabled, logs will be written to %1 @@ -2690,18 +2885,18 @@ If enabled, logs will be written to %1 Note that using any logging command line options will override this setting. - + OCC::Logger <nobr>File "%1"<br/>cannot be opened for writing.<br/><br/>The log output <b>cannot</b> be saved!</nobr> - + Error - + OCC::Mac::FileProviderEditLocallyJob @@ -2795,7 +2990,7 @@ Note that using any logging command line options will override this setting.SOCKS5 proxy - + Upload Bandwidth @@ -2811,7 +3006,7 @@ Note that using any logging command line options will override this setting.Username for proxy server - + OCC::NSISUpdater @@ -2830,7 +3025,7 @@ Note that using any logging command line options will override this setting.Get update - + New Version Available @@ -2850,7 +3045,7 @@ Note that using any logging command line options will override this setting.Update manually - + OCC::OCUpdater @@ -2901,11 +3096,11 @@ Note that using any logging command line options will override this setting.Update Check - + Update status is unknown: Did not check for new updates. - + OCC::OwncloudAdvancedSetupPage @@ -2933,7 +3128,7 @@ Note that using any logging command line options will override this setting.In Finder's "Locations" sidebar section - + Local Sync Folder @@ -2961,14 +3156,14 @@ Note that using any logging command line options will override this setting.Warning: The local folder is not empty. Pick a resolution! - + OCC::OwncloudConnectionMethodDialog <html><head/><body><p>Failed to connect to the secure server address <em>%1</em>. How do you wish to proceed?</p></body></html> - + <html><head/><body><p>Failed to connect to the secure server address specified. How do you wish to proceed?</p></body></html> @@ -2988,14 +3183,14 @@ Note that using any logging command line options will override this setting.Select a different URL - + OCC::ownCloudGui %1 (%2, %3) - + %1: %2 Example text: "Nextcloud: Syncing 25MB (3 minutes left)" (%1 is the folder name to be synced, %2 a status message for that folder) @@ -3060,7 +3255,7 @@ Note that using any logging command line options will override this setting.macOS VFS for %1: Sync is running. - + OCC::OwncloudHttpCredsPage @@ -3093,7 +3288,7 @@ Note that using any logging command line options will override this setting.Could not load certificate. Maybe wrong password? - + Server address does not seem to be valid @@ -3102,7 +3297,7 @@ Note that using any logging command line options will override this setting.%1 will be replaced with the application name - + OCC::OwncloudSetupWizard @@ -3113,7 +3308,7 @@ Note that using any logging command line options will override this setting.<font color="green"><b>Local sync folder %1 successfully created!</b></font> - + <font color="green">Successfully connected to %1: %2 version %3 (%4)</font><br/><br/> @@ -3213,14 +3408,6 @@ Note that using any logging command line options will override this setting.Trying to connect to %1 at %2 … - - Virtual files enabled - - - - Your account is now syncing with virtual files support. This means that all your files are online-only by default, and will be downloaded on-demand when you open them. You may find your files under the <b>Locations</b> section of the Finder sidebar. - - creating folder on Nextcloud: %1 @@ -3229,7 +3416,7 @@ Note that using any logging command line options will override this setting.failed. - + OCC::OwncloudWizard @@ -3256,7 +3443,7 @@ Note that using any logging command line options will override this setting.Stay safe - + When the "virtual files" mode is enabled no files will be downloaded initially. Instead, a tiny "%1" file will be created for each file that exists on the server. The contents can be downloaded by running these files or by using their context menu. The virtual files mode is mutually exclusive with selective sync. Currently unselected folders will be translated to online-only folders and your selective sync settings will be reset. @@ -3266,7 +3453,7 @@ Switching to this mode will abort any currently running synchronization. This is a new, experimental mode. If you decide to use it, please report any issues that come up. - + OCC::PasswordInputDialog @@ -3418,7 +3605,7 @@ This is a new, experimental mode. If you decide to use it, please report any iss Server replied with an error while reading directory "%1" : %2 - + Server reported no %1 @@ -3450,7 +3637,7 @@ This is a new, experimental mode. If you decide to use it, please report any iss size - + OCC::PropagateDirectory @@ -3469,7 +3656,7 @@ This is a new, experimental mode. If you decide to use it, please report any iss File is currently in use - + The folder %1 cannot be made read-only: %2 @@ -3477,7 +3664,7 @@ This is a new, experimental mode. If you decide to use it, please report any iss unknown exception - + OCC::PropagateDownloadFile @@ -3512,7 +3699,7 @@ This is a new, experimental mode. If you decide to use it, please report any iss File has changed since discovery - + File was deleted from server @@ -3536,7 +3723,7 @@ This is a new, experimental mode. If you decide to use it, please report any iss The file could not be downloaded completely. - + OCC::PropagateItemJob @@ -3566,7 +3753,7 @@ This is a new, experimental mode. If you decide to use it, please report any iss The file %1 is currently in use - + The folder %1 cannot be made read-only: %2 @@ -3578,14 +3765,14 @@ This is a new, experimental mode. If you decide to use it, please report any iss unknown exception - + OCC::PropagateLocalRemove Could not delete file record %1 from local DB - + Could not remove %1 because of a local file name clash @@ -3593,14 +3780,14 @@ This is a new, experimental mode. If you decide to use it, please report any iss Temporary error when removing local item removed from server. - + OCC::PropagateLocalRename Could not delete file record %1 from local DB - + Could not get file %1 from local DB @@ -3632,18 +3819,18 @@ This is a new, experimental mode. If you decide to use it, please report any iss The file %1 is currently in use - + OCC::PropagateRemoteDelete Could not delete file record %1 from local DB - + Wrong HTTP code returned by server. Expected 204, but received "%1 %2". - + OCC::PropagateRemoteDeleteEncryptedRootFolder @@ -3665,11 +3852,11 @@ This is a new, experimental mode. If you decide to use it, please report any iss The file %1 is currently in use - + Wrong HTTP code returned by server. Expected 201, but received "%1 %2". - + OCC::PropagateRemoteMove @@ -3696,7 +3883,7 @@ This is a new, experimental mode. If you decide to use it, please report any iss Error writing metadata to the database - + The file %1 is currently in use @@ -3704,7 +3891,7 @@ This is a new, experimental mode. If you decide to use it, please report any iss Wrong HTTP code returned by server. Expected 201, but received "%1 %2". - + OCC::PropagateUploadFileCommon @@ -3731,7 +3918,7 @@ This is a new, experimental mode. If you decide to use it, please report any iss File Removed (start upload) %1 - + Local file changed during sync. @@ -3751,7 +3938,7 @@ This is a new, experimental mode. If you decide to use it, please report any iss Upload of %1 exceeds the quota for the folder - + OCC::PropagateUploadFileNG @@ -3762,7 +3949,7 @@ This is a new, experimental mode. If you decide to use it, please report any iss Missing ETag from server - + Missing File ID from server @@ -3778,7 +3965,7 @@ This is a new, experimental mode. If you decide to use it, please report any iss Unexpected return code from server (%1) - + OCC::PropagateUploadFileV1 @@ -3804,7 +3991,7 @@ This is a new, experimental mode. If you decide to use it, please report any iss Password: - + Proxy authentication required @@ -3820,7 +4007,7 @@ This is a new, experimental mode. If you decide to use it, please report any iss Username: - + OCC::SelectiveSyncDialog @@ -3834,7 +4021,7 @@ This is a new, experimental mode. If you decide to use it, please report any iss An error occurred while loading the list of sub folders. - + Deselect remote folders you do not wish to synchronize. @@ -3854,7 +4041,7 @@ This is a new, experimental mode. If you decide to use it, please report any iss Size - + OCC::ServerNotificationHandler @@ -3862,6 +4049,21 @@ This is a new, experimental mode. If you decide to use it, please report any iss + + OCC::sesSnackBar + + Error + + + + Success + + + + Warning + + + OCC::SettingsDialog @@ -3873,7 +4075,7 @@ This is a new, experimental mode. If you decide to use it, please report any iss Account - + General @@ -3882,6 +4084,10 @@ This is a new, experimental mode. If you decide to use it, please report any iss + New account + + + Settings @@ -3893,7 +4099,7 @@ This is a new, experimental mode. If you decide to use it, please report any iss sharee (shareWithAdditionalInfo) - + Global search results @@ -3905,7 +4111,7 @@ This is a new, experimental mode. If you decide to use it, please report any iss Search globally - + OCC::ShareManager @@ -3927,7 +4133,7 @@ This is a new, experimental mode. If you decide to use it, please report any iss Could not find local folder for %1 - + Internal link @@ -3951,7 +4157,7 @@ This is a new, experimental mode. If you decide to use it, please report any iss Today - + OCC::SocketApi @@ -4040,7 +4246,7 @@ Server replied with error: %2 Open in browser - + Resharing this file is not allowed @@ -4076,7 +4282,7 @@ Server replied with error: %2 Unlock file - + OCC::SslButton @@ -4168,13 +4374,11 @@ Server replied with error: %2 - This connection is NOT secure as it is not encrypted. - + This connection is NOT secure as it is not encrypted. - This connection is encrypted using %1 bit %2. - + This connection is encrypted using %1 bit %2. @@ -4220,7 +4424,7 @@ Server replied with error: %2 Issuer: %1 - + Organization: %1 @@ -4240,7 +4444,7 @@ Server replied with error: %2 with Certificate %1 - + OCC::SyncEngine @@ -4251,7 +4455,7 @@ Server replied with error: %2 Cannot open the sync journal - + Could not set file record to local DB: %1 @@ -4300,7 +4504,7 @@ Server replied with error: %2 Using virtual files with suffix, but suffix is not set - + OCC::SyncStatusSummary @@ -4394,18 +4598,18 @@ Server replied with error: %2 Resume sync for all - + Settings - + OCC::TermsOfServiceCheckWidget Copy Link - + Link copied to clipboard. @@ -4421,7 +4625,7 @@ Server replied with error: %2 Waiting for terms to be accepted - + OCC::Theme @@ -4437,6 +4641,10 @@ Server replied with error: %2 <p>This release was supplied by %1.</p> + + easy/0118 + + OCC::UnifiedSearchResultsListModel @@ -4452,18 +4660,18 @@ Server replied with error: %2 Search has failed for '%1'. Error: %2 - + Search has failed for '%2'. - + OCC::UpdateE2eeFolderMetadataJob Failed to finalize item. - + Failed to unlock encrypted folder. @@ -4471,7 +4679,7 @@ Server replied with error: %2 Failed to update folder metadata. - + OCC::UpdateE2eeFolderUsersMetadataJob @@ -4516,7 +4724,7 @@ Server replied with error: %2 Open Nextcloud Talk in browser - + Rename file @@ -4532,7 +4740,7 @@ Server replied with error: %2 Trigger the migration - + OCC::UserModel @@ -4543,7 +4751,7 @@ Server replied with error: %2 Cancel - + Confirm Account Removal @@ -4551,7 +4759,7 @@ Server replied with error: %2 Remove connection - + OCC::UserStatusSelectorModel @@ -4561,7 +4769,7 @@ Server replied with error: %2 - + %1 hours @@ -4635,7 +4843,7 @@ Server replied with error: %2 Today - + OCC::Vfs @@ -4646,18 +4854,18 @@ Server replied with error: %2 Please choose a different location. %1 is a network drive. It doesn't support virtual files. - + Please choose a different location. %1 isn't a NTFS file system. It doesn't support virtual files. - + OCC::VfsDownloadErrorDialog %1 could not be downloaded. - + > More details @@ -4681,7 +4889,7 @@ Server replied with error: %2 could not be downloaded - + OCC::VfsSuffix @@ -4710,16 +4918,12 @@ Server replied with error: %2 OCC::WebFlowCredentials - You have been logged out of your account %1 at %2. Please login again. + <b>You have been logged out of your account %1 at %2. Please login again.</b> OCC::WelcomePage - - Easy-to-use web mail, calendaring & contacts - - Form @@ -4728,7 +4932,7 @@ Server replied with error: %2 Host your own server - + Keep your data secure and under your control @@ -4736,31 +4940,19 @@ Server replied with error: %2 Log in - - Screensharing, online meetings & web conferences - - - - Secure collaboration & file exchange - - Sign up with provider - + OwncloudAdvancedSetupPage &Local Folder - - <html><head/><body><p>If this box is checked, existing content in the local folder will be erased to start a clean sync from the server.</p><p>Do not check this if the local content should be uploaded to the servers folder.</p></body></html> - - - Ask before syncing external storages + <html><head/><body><p>If this box is checked, existing content in the local folder will be erased to start a clean sync from the server.</p><p>Do not check this if the local content should be uploaded to the servers folder.</p></body></html> @@ -4808,24 +5000,20 @@ Server replied with error: %2 Username - + OwncloudHttpCredsPage &Password - + &Username - + OwncloudSetupPage - - Logo - - Server address @@ -4913,7 +5101,7 @@ Server replied with error: %2 Updating end-to-end encryption metadata - + Updating local metadata @@ -4933,7 +5121,7 @@ Server replied with error: %2 Virtual file created - + QObject @@ -4990,7 +5178,7 @@ Server replied with error: %2 Paths beginning with '#' character are not supported in VFS mode. - + Some time ago @@ -4999,6 +5187,10 @@ Server replied with error: %2 + The directory %1 cannot be part of your sync directory. Please choose another folder. + + + You changed %1 @@ -5045,7 +5237,7 @@ Server replied with error: %2 Cancel - + Choose if you want to keep the local version, server version, or both. If you choose both, the local file will have a number added to its name. @@ -5057,6 +5249,28 @@ Server replied with error: %2 Solve sync conflicts + + + SesErrorBox + + Error + + + + + SesTrayHeader + + Open Nextcloud in browser + + + + Open local or group folders + + + + Website + + ShareDelegate @@ -5064,6 +5278,18 @@ Server replied with error: %2 Copied! + + Copy share link location + + + + Create a new share link + + + + Share options + + ShareDetailsPage @@ -5087,12 +5313,12 @@ Server replied with error: %2 Copy share link - - Edit share + + Custom Permissions - - Enter a note for the recipient + + Enter the note to recipient @@ -5115,10 +5341,6 @@ Server replied with error: %2 Set expiration date - - Share label - - Share link copied! @@ -5169,11 +5391,11 @@ Server replied with error: %2 Sharing is disabled. - + This item cannot be shared. - + SyncJournalDb @@ -5187,7 +5409,7 @@ Server replied with error: %2 Open browser - + Resolve conflicts @@ -5195,7 +5417,7 @@ Server replied with error: %2 Sync now - + TalkReplyTextField @@ -5217,11 +5439,11 @@ Server replied with error: %2 Switch to your browser to accept the terms of service - + Terms of Service - + theme @@ -5244,7 +5466,7 @@ Server replied with error: %2 Sync is paused - + Sync is running @@ -5264,6 +5486,49 @@ Server replied with error: %2 Waiting to start syncing + + + TrayWindowAccountMenu + + Account switcher and settings menu + + + + Add account + + + + Current account + + + + Current account avatar + + + + Current account status is do not disturb + + + + Current account status is online + + + + Exit + + + + Pause sync for all + + + + Resume sync for all + + + + Settings + + TrayWindowHeader @@ -5275,10 +5540,37 @@ Server replied with error: %2 Open %1 in browser + + Open local or group folders + + + + + TrayWindowHeaderBar + + More apps + + + + Open %1 in browser + + + Open Nextcloud Talk in browser + + + + Open Nextcloud in browser + + + Open local or group folders + + Website + + UnifiedSearchInputContainer @@ -5335,14 +5627,6 @@ Server replied with error: %2 Account actions - - Current account status is do not disturb - - - - Current account status is online - - Log in @@ -5355,7 +5639,7 @@ Server replied with error: %2 Remove account - + Set status @@ -5363,7 +5647,7 @@ Server replied with error: %2 Switch to account - + UserStatusSelector @@ -5374,7 +5658,7 @@ Server replied with error: %2 Apply - + Away @@ -5418,14 +5702,14 @@ Server replied with error: %2 What is your status? - + Utility %1 %2 - + %L1 B @@ -5487,7 +5771,7 @@ Server replied with error: %2 - + utility @@ -5514,7 +5798,7 @@ Server replied with error: %2 Free up local space - + Make always available locally @@ -5530,7 +5814,7 @@ Server replied with error: %2 There was an error when launching the email client to create a new message. Maybe no default email client is configured? - + ValidateChecksumHeader diff --git a/translations/client_en_GB.ts b/translations/client_en_GB.ts index 8294605af22c0..1fcbe403b354c 100644 --- a/translations/client_en_GB.ts +++ b/translations/client_en_GB.ts @@ -6,22 +6,22 @@ In %1 In %1 - + Open %1 locally Open %1 locally - + ActivityItemContent Dismiss Dismiss - + Open file details Open file details - + ActivityList @@ -32,11 +32,11 @@ No activities yet No activities yet - + Scroll to top Scroll to top - + CallNotificationDialog @@ -51,11 +51,11 @@ Decline Talk call notification Decline Talk call notification - + Talk notification caller avatar Talk notification caller avatar - + CloudProviderWrapper @@ -90,7 +90,7 @@ Quit sync client Quit sync client - + Recently changed Recently changed @@ -122,7 +122,11 @@ Syncing %1 of %2 (%3 left) Syncing %1 of %2 (%3 left) - + + Syncing %1 of %2 (%3 left) + Syncing %1 of %2 (%3 left) + + ConflictDelegate @@ -140,7 +144,7 @@ Account switcher and settings menu Account switcher and settings menu - + Add account Add account @@ -180,7 +184,7 @@ Settings Settings - + EditFileLocallyLoadingDialog @@ -212,7 +216,7 @@ Cancel Cancel - + Choose Choose @@ -220,7 +224,7 @@ Token Encryption Key Chooser Token Encryption Key Chooser - + ErrorBox @@ -235,10 +239,14 @@ Activity + Dismiss + Dismiss + + Sharing Sharing - + FileDetailsWindow @@ -256,11 +264,11 @@ Materialised items Materialised items - + Reload Reload - + FileProviderFastEnumerationSettings @@ -271,6 +279,10 @@ Fast sync will only sync changes in files and folders within folders that have been explored. This can significantly increase responsiveness on initial configuration of virtual files. However, it will cause redundant downloads of files moved to an unexplored folder. Fast sync will only sync changes in files and folders within folders that have been explored. This can significantly increase responsiveness on initial configuration of virtual files. However, it will cause redundant downloads of files moved to an unexplored folder. + + Fast sync will only sync changes in files and folders within folders that have been explored. This can significantly increase responsiveness on initial configuration of virtual files. However, it will cause redundant downloads of files moved to an unexplored folder. + + FileProviderFileDelegate @@ -285,7 +297,7 @@ Enable virtual files Enable virtual files - + General settings General settings @@ -293,7 +305,7 @@ Virtual files settings Virtual files settings - + FileProviderStorageInfo @@ -304,11 +316,11 @@ Evict local copies … Evict local copies … - + Local storage use Local storage use - + FileProviderSyncStatus @@ -321,7 +333,7 @@ macOS may ignore or delay this request. Request a sync of changes for the VFS environment. macOS may ignore or delay this request. - + Request sync Request sync @@ -329,51 +341,94 @@ macOS may ignore or delay this request. Syncing Syncing - + FileSystem Could not remove folder "%1" Could not remove folder "%1" - + Error removing "%1": %2 Error removing "%1": %2 - + Flow2AuthWidget An error occurred while connecting. Please try again. An error occurred while connecting. Please try again. - + Browser Authentication Browser Authentication + + Copy Link + Copy Link + Logo Logo + Reopen Browser + + + Switch to your browser to connect your account Switch to your browser to connect your account + + FolderWizardSelectiveSync + + Add Folder Sync + + + + Step 3 of 3: Selektive Synchronisation + + + FolderWizardSourcePage + &Choose + + + &Choose … &Choose … - + + Add Folder Sync + + + Pick a local folder on your computer to sync Pick a local folder on your computer to sync + + Select a folder on your hard drive that should be permanetly connected to your %1. All files and subfolders are automatically uploaded and synchronized + + + + Step 1 of 3: Select local folder + + FolderWizardTargetPage + Add Folder Sync + + + + Both folders are permanently linked and the respective contents are automatically synchronized and updated. + + + Create folder Create folder @@ -381,7 +436,11 @@ macOS may ignore or delay this request. Folders Folders - + + Please now select or create a target folder in your %1 where the content should be uploaded and synchronized. + + + Refresh Refresh @@ -389,6 +448,10 @@ macOS may ignore or delay this request. Select a remote destination folder Select a remote destination folder + + Step 2 of 3: Directory in your %1 + + main.cpp @@ -396,18 +459,18 @@ macOS may ignore or delay this request. %1 requires on a working system tray. If you are running XFCE, please follow <a href="http://docs.xfce.org/xfce/xfce4-panel/systray">these instructions</a>. Otherwise, please install a system tray application such as "trayer" and try again. %1 requires on a working system tray. If you are running XFCE, please follow <a href="http://docs.xfce.org/xfce/xfce4-panel/systray">these instructions</a>. Otherwise, please install a system tray application such as "trayer" and try again. - + System Tray not available System Tray not available - + MainWindow New activities New activities - + Nextcloud desktop main dialog Nextcloud desktop main dialogue @@ -415,7 +478,7 @@ macOS may ignore or delay this request. Unified search results list Unified search results list - + nextcloudTheme::aboutInfo() @@ -433,11 +496,11 @@ macOS may ignore or delay this request. Server replied "%1 %2" to "%3 %4" Server replied "%1 %2" to "%3 %4" - + Unknown error: network reply was deleted Unknown error: network reply was deleted - + OCC::Account @@ -471,7 +534,7 @@ Should the account be imported? Could not import accounts from legacy client configuration. Could not import accounts from legacy client configuration. - + Import Import @@ -483,7 +546,7 @@ Should the account be imported? Skip Skip - + OCC::AccountSettings @@ -644,6 +707,10 @@ Would you like to set up end-to-end encryption? End-to-end encryption mnemonic End-to-end encryption mnemonic + + Expand Memory + + Folder creation failed Folder creation failed @@ -660,7 +727,7 @@ Would you like to set up end-to-end encryption? No %1 connection configured. No %1 connection configured. - + No account configured. No account configured. @@ -724,6 +791,10 @@ Would you like to set up end-to-end encryption? Standard file sync Standard file sync + + Storage space %1% occupied + + Storage space: … Storage space: … @@ -764,14 +835,26 @@ Would you like to set up end-to-end encryption? There are folders that were not synchronized because they are external storages: There are folders that were not synchronised because they are external storages: + + There are folders that were not synchronized because they are external storages: + + There are folders that were not synchronized because they are too big or external storages: There are folders that were not synchronised because they are too big or external storages: + There are folders that were not synchronized because they are too big or external storages: + + + There are folders that were not synchronized because they are too big: There are folders that were not synchronised because they are too big: + + There are folders that were not synchronized because they are too big: + + This account supports end-to-end encryption This account supports end-to-end encryption @@ -828,6 +911,10 @@ Wait for the new sync, then encrypt it. You seem to have the Virtual Files feature enabled on this folder. At the moment, it is not possible to implicitly download virtual files that are end-to-end encrypted. To get the best experience with virtual files and end-to-end encryption, make sure the encrypted folder is marked with "Make always available locally". You seem to have the Virtual Files feature enabled on this folder. At the moment, it is not possible to implicitly download virtual files that are end-to-end encrypted. To get the best experience with virtual files and end-to-end encryption, make sure the encrypted folder is marked with "Make always available locally". + + https://wl.hidrive.com/easy/0057 + + OCC::AccountSetupFromCommandLineJob @@ -924,7 +1011,7 @@ Wait for the new sync, then encrypt it. Certificate files (*.p12 *.pfx) Certificate files (*.p12 *.pfx) - + Certificate password: Certificate password: @@ -940,7 +1027,7 @@ Wait for the new sync, then encrypt it. This server probably requires a SSL client certificate. This server probably requires a SSL client certificate. - + OCC::Application @@ -992,7 +1079,7 @@ Wait for the new sync, then encrypt it. There was an error while accessing the configuration file at %1. Please make sure the file can be accessed by your system account. There was an error while accessing the configuration file at %1. Please make sure the file can be accessed by your system account. - + deleting deleting @@ -1010,14 +1097,14 @@ Wait for the new sync, then encrypt it. older software version older - + OCC::AuthenticationDialog &Password: &Password: - + &Username: &Username: @@ -1029,7 +1116,7 @@ Wait for the new sync, then encrypt it. Enter username and password for "%1" at %2. Enter username and password for "%1" at %2. - + OCC::BasePropagateRemoteDeleteEncrypted @@ -1079,7 +1166,7 @@ Wait for the new sync, then encrypt it. Restoration failed: %1 Restoration failed: %1 - + The file %1 is currently in use The file %1 is currently in use @@ -1087,7 +1174,7 @@ Wait for the new sync, then encrypt it. The local file was removed during sync. The local file was removed during sync. - + OCC::CaseClashConflictSolver @@ -1114,11 +1201,11 @@ Wait for the new sync, then encrypt it. Filename contains trailing spaces. Filename contains trailing spaces. - + You don't have the permission to rename this file. Please ask the author of the file to rename it. You don't have the permission to rename this file. Please ask the author of the file to rename it. - + OCC::CaseClashFilenameDialog @@ -1149,7 +1236,7 @@ Wait for the new sync, then encrypt it. Filename contains illegal characters: %1 Filename contains illegal characters: %1 - + Filename contains leading and trailing spaces. Filename contains leading and trailing spaces. @@ -1205,7 +1292,7 @@ Wait for the new sync, then encrypt it. today today - + OCC::CleanupPollsJob @@ -1223,7 +1310,7 @@ Wait for the new sync, then encrypt it. Enter E2E passphrase Enter E2E passphrase - + Input PIN code Please keep it short and shorter than "Enter Certificate USB Token PIN:" Input PIN code @@ -1240,7 +1327,7 @@ Wait for the new sync, then encrypt it. Please enter your end-to-end encryption passphrase:<br><br>Username: %2<br>Account: %3<br> Please enter your end-to-end encryption passphrase:<br><br>Username: %2<br>Account: %3<br> - + OCC::ConflictDialog @@ -1279,7 +1366,7 @@ Wait for the new sync, then encrypt it. Keep server version Keep server version - + Local version Local version @@ -1307,14 +1394,14 @@ Wait for the new sync, then encrypt it. today today - + OCC::ConflictSolver Confirm deletion Confirm deletion - + Do you want to delete the directory <i>%1</i> and all its contents permanently? Do you want to delete the directory <i>%1</i> and all its contents permanently? @@ -1334,7 +1421,7 @@ Wait for the new sync, then encrypt it. %1 - + OCC::ConnectionValidator @@ -1357,22 +1444,76 @@ Wait for the new sync, then encrypt it. The provided credentials are not correct The provided credentials are not correct - + Timeout Timeout - + + + OCC::DataProtectionPage + + Agree + + + + Form + Form + + + Settings + Settings + + + This application uses tracking technologies. By clicking on Agree, you accept the processing of your anonymized data. You can adjust your choices at any time via the settings. <br/> <br/>Information on data processing and more can be found in our <a href='https://wl.hidrive.com/easy/0005'>privacy policy</a>. + + + + + OCC::DataProtectionSettingsPage + + Back + + + + Form + Form + + + Necessary data + + + + Required to ensure that the software can be used as expected + + + + Save Settings + + + + Send anonymous use + + + + This helps us to optimize the software and to better identify system crashes and unexpected errors. + + + + We collect anonymized data to optimize our app. We use software solutions from various partners for this purpose. We want to give you full transparency and freedom of choice regarding the collection and processing of your anonymized usage. You can change your settings at any time under the menu item Data Protection. + + + OCC::DiscoveryPhase Error while canceling deletion of %1 Error while canceling deletion of %1 - + Error while canceling deletion of a file Error while canceling deletion of a file - + OCC::DiscoverySingleDirectoryJob @@ -1383,11 +1524,11 @@ Wait for the new sync, then encrypt it. Encrypted metadata setup error: initial signature from server is empty. Encrypted metadata setup error: initial signature from server is empty. - + Server error: PROPFIND reply is not XML formatted! Server error: PROPFIND reply is not XML formatted! - + OCC::DiscoverySingleLocalDirectoryJob @@ -1406,11 +1547,11 @@ Wait for the new sync, then encrypt it. Error while reading directory %1 Error while reading directory %1 - + Filename encoding is not valid Filename encoding is not valid - + OCC::EditLocallyJob @@ -1453,7 +1594,7 @@ Wait for the new sync, then encrypt it. File %1 could not be locked. File %1 could not be locked. - + File %1 now locked. File %1 now locked. @@ -1473,7 +1614,7 @@ Wait for the new sync, then encrypt it. Server error: PROPFIND reply is not XML formatted! Server error: PROPFIND reply is not XML formatted! - + OCC::EditLocallyManager @@ -1491,7 +1632,7 @@ Wait for the new sync, then encrypt it. An error occurred trying to verify the request to edit locally. An error occurred trying to verify the request to edit locally. - + Could not find an account for local editing. Could not find an account for local editing. @@ -1511,7 +1652,7 @@ Wait for the new sync, then encrypt it. Please try again. Please try again. - + OCC::EncryptedFolderMetadataHandler @@ -1609,7 +1750,7 @@ This can be an issue with your OpenSSL libraries. Could not parse the JSON returned from the server: <br><em>%1</em> Could not parse the JSON returned from the server: <br><em>%1</em> - + Error returned from the server: <em>%1</em> Error returned from the server: <em>%1</em> @@ -1629,14 +1770,18 @@ This can be an issue with your OpenSSL libraries. There was an error accessing the "token" endpoint: <br><em>%1</em> There was an error accessing the "token" endpoint: <br><em>%1</em> - + OCC::Flow2AuthWidget Copy Link Copy Link - + + Error + Error + + Link copied to clipboard. Link copied to clipboard. @@ -1653,6 +1798,10 @@ This can be an issue with your OpenSSL libraries. Starting authorization + Switch to your browser to connect your account + Switch to your browser to connect your account + + Unable to open the Browser, please copy the link to your Browser. Unable to open the Browser, please copy the link to your Browser. @@ -1762,6 +1911,10 @@ This can be an issue with your OpenSSL libraries. + A folder from an external storage has been added. + + + A folder has surpassed the set folder size limit of %1MB: %2. %3 A folder has surpassed the set folder size limit of %1MB: %2. @@ -1789,6 +1942,10 @@ Alternatively, you can restore all deleted files by downloading them from the se A new folder larger than %1 MB has been added: %2. + + A new folder larger than %1 MB has been added: %2. + + Changes in synchronized folders could not be tracked reliably. @@ -1837,7 +1994,7 @@ This means that the synchronization client might not upload local changes immedi Restore Files from Server Restore Files from Server - + Restore Files to Server Restore Files to Server @@ -1873,10 +2030,14 @@ This means that the synchronization client might not upload local changes immedi OCC::FolderCreationDialog + %1 Create new folder + + + Could not create a folder! Check your write permissions. Could not create a folder! Check your write permissions. - + Create new folder Create new folder @@ -1899,14 +2060,22 @@ This means that the synchronization client might not upload local changes immedi %1 (Sync is paused) %1 (Sync is paused) - + (backup %1) (backup %1) + (backup %1) + + + (backup) (backup) + + (backup) + + An old sync journal "%1" was found, but could not be removed. Please make sure that no application is currently using it. An old sync journal "%1" was found, but could not be removed. Please make sure that no application is currently using it. @@ -2018,6 +2187,10 @@ For advanced users: this issue might be related to multiple sync database files OCC::FolderStatusDelegate + + Add Folder Sync + + Add Folder Sync Connection Add Folder Sync Connection @@ -2026,6 +2199,10 @@ For advanced users: this issue might be related to multiple sync database files File File + + Synchronize any other local folder with your %1 + + OCC::FolderStatusModel @@ -2107,7 +2284,7 @@ For advanced users: this issue might be related to multiple sync database files Preparing to sync … Preparing to sync … - + Signed out Signed out @@ -2155,7 +2332,7 @@ For advanced users: this issue might be related to multiple sync database files ↓ %1/s ↓ %1/s - + OCC::FolderWatcher @@ -2184,6 +2361,14 @@ For advanced users: this issue might be related to multiple sync database files OCC::FolderWizardLocalPath + Add Folder Sync + + + + Choose + Choose + + Click to select a local folder to sync. Click to select a local folder to sync. @@ -2191,17 +2376,33 @@ For advanced users: this issue might be related to multiple sync database files Enter the path to the local folder. Enter the path to the local folder. + + Select a folder on your hard drive that should be permanetly connected to your %1. All files and subfolders are automatically uploaded and synchronized + + Select the source folder Select the source folder - + + Step 1 of 3: Select local folder + + + OCC::FolderWizardRemotePath + + Add Folder Sync + + Authentication failed accessing %1 Authentication failed accessing %1 + + Both folders are permanently linked and the respective contents are automatically synchronized and updated. + + Choose this to sync the entire account Choose this to sync the entire account @@ -2211,6 +2412,10 @@ For advanced users: this issue might be related to multiple sync database files Create Remote Folder + Create folder + Create folder + + Enter the name of the new folder to be created below "%1": Enter the name of the new folder to be created below "%1": @@ -2230,7 +2435,19 @@ For advanced users: this issue might be related to multiple sync database files Please choose a different location. %1 is already being synced to %2. Please choose a different location. %1 is already being synced to %2. - + + Please now select or create a target folder in your %1 where the content should be uploaded and synchronized. + + + + Refresh + Refresh + + + Step 2 of 3: Directory in your %1 + + + OCC::FolderWizardSelectiveSync @@ -2238,6 +2455,14 @@ For advanced users: this issue might be related to multiple sync database files (experimental) + Add Folder Sync + + + + Step 3 of 3: Selektive Synchronisation + + + Use virtual files instead of downloading content immediately %1 Use virtual files instead of downloading content immediately %1 @@ -2245,7 +2470,7 @@ For advanced users: this issue might be related to multiple sync database files Virtual files are not supported at the selected location Virtual files are not supported at the selected location - + Virtual files are not supported for Windows partition roots as local folder. Please choose a valid subfolder under drive letter. Virtual files are not supported for Windows partition roots as local folder. Please choose a valid subfolder under drive letter. @@ -2320,6 +2545,10 @@ Downgrading versions is not possible immediately: changing from stable to enterp Create Debug Archive Create Debug Archive + + Data Protection + + Debug Archive Created Debug Archive Created @@ -2328,7 +2557,7 @@ Downgrading versions is not possible immediately: changing from stable to enterp Debug archive is created at %1 Debug archive is created at %1 - + Desktop client x.x.x Desktop client x.x.x @@ -2357,18 +2586,42 @@ Downgrading versions is not possible immediately: changing from stable to enterp Trailing part of "Ask confirmation before syncing folder larger than" MB + + More Information + + Move removed files to trash Move removed files to trash + + Necessary data + + Notify when synchronised folders grow larger than specified limit Notify when synchronised folders grow larger than specified limit + + Open Source Software + + + + Privacy Policy + + + + Required to ensure that the software can be used as expected + + S&how crash reporter S&how crash reporter + + Send anonymous use + + Server notifications that require attention. Server notifications that require attention. @@ -2393,6 +2646,10 @@ Downgrading versions is not possible immediately: changing from stable to enterp Show call notification dialogs. Show call notification dialogues. + + Show call notifications + + Show chat notification dialogs. Show chat notification dialogs. @@ -2410,10 +2667,18 @@ Downgrading versions is not possible immediately: changing from stable to enterp - stable: contains tested versions considered reliable + + This helps us to optimize the software and to better identify system crashes and unexpected errors. + + Update channel Update channel + + Updates + + Usage Documentation Usage Documentation @@ -2422,6 +2687,10 @@ Downgrading versions is not possible immediately: changing from stable to enterp Use &Monochrome Icons Use &Monochrome Icons + + Use &monochrome icons + + You cannot disable autostart because system-wide autostart is enabled. You cannot disable autostart because system-wide autostart is enabled. @@ -2442,6 +2711,22 @@ Downgrading versions is not possible immediately: changing from stable to enterp enterprise enterprise + + https://wl.hidrive.com/easy/0004 + + + + https://wl.hidrive.com/easy/0005 + + + + https://wl.hidrive.com/easy/0006 + + + + https://wl.hidrive.com/easy/0007 + + seconds (if <a href="https://github.com/nextcloud/notify_push">Client Push</a> is unavailable) seconds (if <a href="https://github.com/nextcloud/notify_push">Client Push</a> is unavailable) @@ -2457,7 +2742,7 @@ Downgrading versions is not possible immediately: changing from stable to enterp Connection Timeout Connection Timeout - + No E-Tag received from server, check Proxy/Gateway No E-Tag received from server, check Proxy/Gateway @@ -2473,7 +2758,7 @@ Downgrading versions is not possible immediately: changing from stable to enterp We received an unexpected download Content-Length. We received an unexpected download Content-Length. - + OCC::GetOrCreatePublicLinkShare @@ -2484,7 +2769,7 @@ Downgrading versions is not possible immediately: changing from stable to enterp %1 - + Password for share required Password for share required @@ -2496,14 +2781,14 @@ Downgrading versions is not possible immediately: changing from stable to enterp Sharing error Sharing error - + OCC::HttpCredentialsGui <a href="%1">Click here</a> to request an app password from the web interface. <a href="%1">Click here</a> to request an app password from the web interface. - + Enter Password Enter Password @@ -2515,7 +2800,7 @@ Downgrading versions is not possible immediately: changing from stable to enterp Reading from keychain failed with error: "%1" Reading from keychain failed with error: "%1" - + OCC::IgnoreListEditor @@ -2553,7 +2838,7 @@ Downgrading versions is not possible immediately: changing from stable to enterp Add a new ignore pattern: Add a new ignore pattern: - + Allow Deletion Allow Deletion @@ -2574,6 +2859,10 @@ Items where deletion is allowed will be deleted if they prevent a directory from Items where deletion is allowed will be deleted if they prevent a directory from being removed. This is useful for meta data. + Ignore Pattern + + + Pattern Pattern @@ -2604,7 +2893,7 @@ Items where deletion is allowed will be deleted if they prevent a directory from Could not rename local file. %1 Could not rename local file. %1 - + Error Error @@ -2684,7 +2973,7 @@ Items where deletion is allowed will be deleted if they prevent a directory from You don't have the permission to rename this file. Please ask the author of the file to rename it. You don't have the permission to rename this file. Please ask the author of the file to rename it. - + OCC::LegalNotice @@ -2695,7 +2984,7 @@ Items where deletion is allowed will be deleted if they prevent a directory from <p>Licensed under the GNU General Public License (GPL) Version 2.0 or any later version.</p> <p>Licensed under the GNU General Public License (GPL) Version 2.0 or any later version.</p> - + Close Close @@ -2703,7 +2992,7 @@ Items where deletion is allowed will be deleted if they prevent a directory from Legal notice Legal notice - + OCC::LogBrowser @@ -2718,7 +3007,7 @@ Items where deletion is allowed will be deleted if they prevent a directory from Open folder Open folder - + The client can write debug logs to a temporary folder. These logs are very helpful for diagnosing problems. Since log files can get large, the client will start a new one for each sync run and compress older ones. It will also delete log files after a couple of hours to avoid consuming too much disk space. If enabled, logs will be written to %1 @@ -2732,18 +3021,18 @@ Note that using any logging command line options will override this setting.This setting persists across client restarts. Note that using any logging command line options will override this setting. - + OCC::Logger <nobr>File "%1"<br/>cannot be opened for writing.<br/><br/>The log output <b>cannot</b> be saved!</nobr> <nobr>File "%1"<br/>cannot be opened for writing.<br/><br/>The log output <b>cannot</b> be saved!</nobr> - + Error Error - + OCC::Mac::FileProviderEditLocallyJob @@ -2837,7 +3126,7 @@ Note that using any logging command line options will override this setting.SOCKS5 proxy SOCKS5 proxy - + Upload Bandwidth Upload Bandwidth @@ -2853,7 +3142,7 @@ Note that using any logging command line options will override this setting.Username for proxy server Username for proxy server - + OCC::NSISUpdater @@ -2872,7 +3161,7 @@ Note that using any logging command line options will override this setting.Get update Get update - + New Version Available New Version Available @@ -2892,7 +3181,7 @@ Note that using any logging command line options will override this setting.Update manually Update manually - + OCC::OCUpdater @@ -2943,11 +3232,11 @@ Note that using any logging command line options will override this setting.Update Check Update Check - + Update status is unknown: Did not check for new updates. Update status is unknown: Did not check for new updates. - + OCC::OwncloudAdvancedSetupPage @@ -2975,7 +3264,7 @@ Note that using any logging command line options will override this setting.In Finder's "Locations" sidebar section In Finder's "Locations" sidebar section - + Local Sync Folder Local Sync Folder @@ -3003,14 +3292,14 @@ Note that using any logging command line options will override this setting.Warning: The local folder is not empty. Pick a resolution! Warning: The local folder is not empty. Pick a resolution! - + OCC::OwncloudConnectionMethodDialog <html><head/><body><p>Failed to connect to the secure server address <em>%1</em>. How do you wish to proceed?</p></body></html> <html><head/><body><p>Failed to connect to the secure server address <em>%1</em>. How do you wish to proceed?</p></body></html> - + <html><head/><body><p>Failed to connect to the secure server address specified. How do you wish to proceed?</p></body></html> <html><head/><body><p>Failed to connect to the secure server address specified. How do you wish to proceed?</p></body></html> @@ -3030,14 +3319,14 @@ Note that using any logging command line options will override this setting.Select a different URL Select a different URL - + OCC::ownCloudGui %1 (%2, %3) %1 (%2, %3) - + %1: %2 Example text: "Nextcloud: Syncing 25MB (3 minutes left)" (%1 is the folder name to be synced, %2 a status message for that folder) %1: %2 @@ -3102,7 +3391,7 @@ Note that using any logging command line options will override this setting.macOS VFS for %1: Sync is running. macOS VFS for %1: Sync is running. - + OCC::OwncloudHttpCredsPage @@ -3135,7 +3424,7 @@ Note that using any logging command line options will override this setting.Could not load certificate. Maybe wrong password? Could not load certificate. Maybe wrong password? - + Server address does not seem to be valid Server address does not seem to be valid @@ -3144,7 +3433,7 @@ Note that using any logging command line options will override this setting.%1 will be replaced with the application name The link to your %1 web interface when you open it in the browser. - + OCC::OwncloudSetupWizard @@ -3155,7 +3444,7 @@ Note that using any logging command line options will override this setting.<font color="green"><b>Local sync folder %1 successfully created!</b></font> <font colour="green"><b>Local sync folder %1 successfully created!</b></font> - + <font color="green">Successfully connected to %1: %2 version %3 (%4)</font><br/><br/> <font colour="green">Successfully connected to %1: %2 version %3 (%4)</font><br/><br/> @@ -3271,7 +3560,7 @@ Note that using any logging command line options will override this setting.failed. failed. - + OCC::OwncloudWizard @@ -3298,7 +3587,7 @@ Note that using any logging command line options will override this setting.Stay safe Stay safe - + When the "virtual files" mode is enabled no files will be downloaded initially. Instead, a tiny "%1" file will be created for each file that exists on the server. The contents can be downloaded by running these files or by using their context menu. The virtual files mode is mutually exclusive with selective sync. Currently unselected folders will be translated to online-only folders and your selective sync settings will be reset. @@ -3314,7 +3603,7 @@ Switching to this mode will abort any currently running synchronization. This is a new, experimental mode. If you decide to use it, please report any issues that come up. - + OCC::PasswordInputDialog @@ -3466,7 +3755,7 @@ This is a new, experimental mode. If you decide to use it, please report any iss Server replied with an error while reading directory "%1" : %2 Server replied with an error while reading directory "%1" : %2 - + Server reported no %1 Server reported no %1 @@ -3498,7 +3787,7 @@ This is a new, experimental mode. If you decide to use it, please report any iss size size - + OCC::PropagateDirectory @@ -3517,7 +3806,7 @@ This is a new, experimental mode. If you decide to use it, please report any iss File is currently in use File is currently in use - + The folder %1 cannot be made read-only: %2 The folder %1 cannot be made read-only: %2 @@ -3525,7 +3814,7 @@ This is a new, experimental mode. If you decide to use it, please report any iss unknown exception unknown exception - + OCC::PropagateDownloadFile @@ -3560,7 +3849,7 @@ This is a new, experimental mode. If you decide to use it, please report any iss File has changed since discovery File has changed since discovery - + File was deleted from server File was deleted from server @@ -3584,7 +3873,7 @@ This is a new, experimental mode. If you decide to use it, please report any iss The file could not be downloaded completely. The file could not be downloaded completely. - + OCC::PropagateItemJob @@ -3614,7 +3903,7 @@ This is a new, experimental mode. If you decide to use it, please report any iss The file %1 is currently in use The file %1 is currently in use - + The folder %1 cannot be made read-only: %2 The folder %1 cannot be made read-only: %2 @@ -3626,14 +3915,14 @@ This is a new, experimental mode. If you decide to use it, please report any iss unknown exception unknown exception - + OCC::PropagateLocalRemove Could not delete file record %1 from local DB Could not delete file record %1 from local DB - + Could not remove %1 because of a local file name clash Could not remove %1 because of a local file name clash @@ -3641,14 +3930,14 @@ This is a new, experimental mode. If you decide to use it, please report any iss Temporary error when removing local item removed from server. Temporary error when removing local item removed from server. - + OCC::PropagateLocalRename Could not delete file record %1 from local DB Could not delete file record %1 from local DB - + Could not get file %1 from local DB Could not get file %1 from local DB @@ -3680,18 +3969,18 @@ This is a new, experimental mode. If you decide to use it, please report any iss The file %1 is currently in use The file %1 is currently in use - + OCC::PropagateRemoteDelete Could not delete file record %1 from local DB Could not delete file record %1 from local DB - + Wrong HTTP code returned by server. Expected 204, but received "%1 %2". Wrong HTTP code returned by server. Expected 204, but received "%1 %2". - + OCC::PropagateRemoteDeleteEncryptedRootFolder @@ -3713,11 +4002,11 @@ This is a new, experimental mode. If you decide to use it, please report any iss The file %1 is currently in use The file %1 is currently in use - + Wrong HTTP code returned by server. Expected 201, but received "%1 %2". Wrong HTTP code returned by server. Expected 201, but received "%1 %2". - + OCC::PropagateRemoteMove @@ -3744,7 +4033,7 @@ This is a new, experimental mode. If you decide to use it, please report any iss Error writing metadata to the database Error writing metadata to the database - + The file %1 is currently in use The file %1 is currently in use @@ -3752,7 +4041,7 @@ This is a new, experimental mode. If you decide to use it, please report any iss Wrong HTTP code returned by server. Expected 201, but received "%1 %2". Wrong HTTP code returned by server. Expected 201, but received "%1 %2". - + OCC::PropagateUploadFileCommon @@ -3779,7 +4068,7 @@ This is a new, experimental mode. If you decide to use it, please report any iss File Removed (start upload) %1 File Removed (start upload) %1 - + Local file changed during sync. Local file changed during sync. @@ -3799,7 +4088,7 @@ This is a new, experimental mode. If you decide to use it, please report any iss Upload of %1 exceeds the quota for the folder Upload of %1 exceeds the quota for the folder - + OCC::PropagateUploadFileNG @@ -3810,7 +4099,7 @@ This is a new, experimental mode. If you decide to use it, please report any iss Missing ETag from server Missing ETag from server - + Missing File ID from server Missing File ID from server @@ -3826,7 +4115,7 @@ This is a new, experimental mode. If you decide to use it, please report any iss Unexpected return code from server (%1) Unexpected return code from server (%1) - + OCC::PropagateUploadFileV1 @@ -3852,7 +4141,7 @@ This is a new, experimental mode. If you decide to use it, please report any iss Password: Password: - + Proxy authentication required Proxy authentication required @@ -3868,7 +4157,7 @@ This is a new, experimental mode. If you decide to use it, please report any iss Username: Username: - + OCC::SelectiveSyncDialog @@ -3882,7 +4171,7 @@ This is a new, experimental mode. If you decide to use it, please report any iss An error occurred while loading the list of sub folders. An error occurred while loading the list of sub folders. - + Deselect remote folders you do not wish to synchronize. Deselect remote folders you do not wish to synchronise. @@ -3902,7 +4191,7 @@ This is a new, experimental mode. If you decide to use it, please report any iss Size Size - + OCC::ServerNotificationHandler @@ -3910,6 +4199,21 @@ This is a new, experimental mode. If you decide to use it, please report any iss Reply + + OCC::sesSnackBar + + Error + Error + + + Success + + + + Warning + Warning + + OCC::SettingsDialog @@ -3921,7 +4225,7 @@ This is a new, experimental mode. If you decide to use it, please report any iss Account Account - + General General @@ -3930,6 +4234,10 @@ This is a new, experimental mode. If you decide to use it, please report any iss Network + New account + + + Settings Settings @@ -3941,7 +4249,7 @@ This is a new, experimental mode. If you decide to use it, please report any iss sharee (shareWithAdditionalInfo) %1 (%2) - + Global search results Global search results @@ -3953,7 +4261,7 @@ This is a new, experimental mode. If you decide to use it, please report any iss Search globally Search globally - + OCC::ShareManager @@ -3975,7 +4283,7 @@ This is a new, experimental mode. If you decide to use it, please report any iss Could not find local folder for %1 Could not find local folder for %1 - + Internal link Internal link @@ -3999,7 +4307,7 @@ This is a new, experimental mode. If you decide to use it, please report any iss Today Today - + OCC::SocketApi @@ -4090,7 +4398,7 @@ Server replied with error: %2 Open in browser Open in browser - + Resharing this file is not allowed Resharing this file is not allowed @@ -4126,7 +4434,7 @@ Server replied with error: %2 Unlock file Unlock file - + OCC::SslButton @@ -4223,12 +4531,20 @@ Server replied with error: %2 This connection is NOT secure as it is not encrypted. + + This connection is NOT secure as it is not encrypted. + + This connection is encrypted using %1 bit %2. This connection is encrypted using %1 bit %2. + + This connection is encrypted using %1 bit %2. + + OCC::SslErrorDialog @@ -4272,7 +4588,7 @@ Server replied with error: %2 Issuer: %1 Issuer: %1 - + Organization: %1 Organisation: %1 @@ -4292,7 +4608,7 @@ Server replied with error: %2 with Certificate %1 with Certificate %1 - + OCC::SyncEngine @@ -4303,7 +4619,7 @@ Server replied with error: %2 Cannot open the sync journal Cannot open the sync journal - + Could not set file record to local DB: %1 Could not set file record to local DB: %1 @@ -4352,7 +4668,7 @@ Server replied with error: %2 Using virtual files with suffix, but suffix is not set Using virtual files with suffix, but suffix is not set - + OCC::SyncStatusSummary @@ -4446,18 +4762,18 @@ Server replied with error: %2 Resume sync for all Resume sync for all - + Settings Settings - + OCC::TermsOfServiceCheckWidget Copy Link Copy Link - + Link copied to clipboard. Link copied to clipboard. @@ -4473,7 +4789,7 @@ Server replied with error: %2 Waiting for terms to be accepted Waiting for terms to be accepted - + OCC::Theme @@ -4489,6 +4805,10 @@ Server replied with error: %2 <p>This release was supplied by %1.</p> <p>This release was supplied by %1.</p> + + easy/0118 + + OCC::UnifiedSearchResultsListModel @@ -4504,18 +4824,18 @@ Server replied with error: %2 Search has failed for '%1'. Error: %2 Search has failed for '%1'. Error: %2 - + Search has failed for '%2'. Search has failed for '%2'. - + OCC::UpdateE2eeFolderMetadataJob Failed to finalize item. Failed to finalize item. - + Failed to unlock encrypted folder. Failed to unlock encrypted folder. @@ -4523,7 +4843,7 @@ Server replied with error: %2 Failed to update folder metadata. Failed to update folder metadata. - + OCC::UpdateE2eeFolderUsersMetadataJob @@ -4568,7 +4888,7 @@ Server replied with error: %2 Open Nextcloud Talk in browser Open Nextcloud Talk in browser - + Rename file Rename file @@ -4584,7 +4904,7 @@ Server replied with error: %2 Trigger the migration Trigger the migration - + OCC::UserModel @@ -4595,7 +4915,7 @@ Server replied with error: %2 Cancel Cancel - + Confirm Account Removal Confirm Account Removal @@ -4603,7 +4923,7 @@ Server replied with error: %2 Remove connection Remove connection - + OCC::UserStatusSelectorModel @@ -4613,7 +4933,7 @@ Server replied with error: %2 %1 days - + %1 hours %1 hours @@ -4687,7 +5007,7 @@ Server replied with error: %2 Today Today - + OCC::Vfs @@ -4698,18 +5018,18 @@ Server replied with error: %2 Please choose a different location. %1 is a network drive. It doesn't support virtual files. Please choose a different location. %1 is a network drive. It doesn't support virtual files. - + Please choose a different location. %1 isn't a NTFS file system. It doesn't support virtual files. Please choose a different location. %1 isn't a NTFS file system. It doesn't support virtual files. - + OCC::VfsDownloadErrorDialog %1 could not be downloaded. %1 could not be downloaded. - + > More details > More details @@ -4733,7 +5053,7 @@ Server replied with error: %2 could not be downloaded could not be downloaded - + OCC::VfsSuffix @@ -4762,10 +5082,14 @@ Server replied with error: %2 OCC::WebFlowCredentials + <b>You have been logged out of your account %1 at %2. Please login again.</b> + + + You have been logged out of your account %1 at %2. Please login again. You have been logged out of your account %1 at %2. Please login again. - + OCC::WelcomePage @@ -4780,7 +5104,7 @@ Server replied with error: %2 Host your own server Host your own server - + Keep your data secure and under your control Keep your data secure and under your control @@ -4800,14 +5124,14 @@ Server replied with error: %2 Sign up with provider Sign up with provider - + OwncloudAdvancedSetupPage &Local Folder &Local Folder - + <html><head/><body><p>If this box is checked, existing content in the local folder will be erased to start a clean sync from the server.</p><p>Do not check this if the local content should be uploaded to the servers folder.</p></body></html> <html><head/><body><p>If this box is checked, existing content in the local folder will be erased to start a clean sync from the server.</p><p>Do not check this if the local content should be uploaded to the servers folder.</p></body></html> @@ -4860,18 +5184,18 @@ Server replied with error: %2 Username Username - + OwncloudHttpCredsPage &Password &Password - + &Username &Username - + OwncloudSetupPage @@ -4965,7 +5289,7 @@ Server replied with error: %2 Updating end-to-end encryption metadata Updating end-to-end encryption metadata - + Updating local metadata Updating local metadata @@ -4985,7 +5309,7 @@ Server replied with error: %2 Virtual file created Virtual file created - + QObject @@ -5042,7 +5366,7 @@ Server replied with error: %2 Paths beginning with '#' character are not supported in VFS mode. Paths beginning with '#' character are not supported in VFS mode. - + Some time ago Some time ago @@ -5051,6 +5375,10 @@ Server replied with error: %2 Synced %1 + The directory %1 cannot be part of your sync directory. Please choose another folder. + + + You changed %1 You changed %1 @@ -5097,7 +5425,7 @@ Server replied with error: %2 Cancel Cancel - + Choose if you want to keep the local version, server version, or both. If you choose both, the local file will have a number added to its name. Choose if you want to keep the local version, server version, or both. If you choose both, the local file will have a number added to its name. @@ -5109,6 +5437,28 @@ Server replied with error: %2 Solve sync conflicts Solve sync conflicts + + + SesErrorBox + + Error + Error + + + + SesTrayHeader + + Open Nextcloud in browser + + + + Open local or group folders + Open local or group folders + + + Website + + ShareDelegate @@ -5116,6 +5466,18 @@ Server replied with error: %2 Copied! Copied! + + Copy share link location + + + + Create a new share link + + + + Share options + Share options + ShareDetailsPage @@ -5139,6 +5501,10 @@ Server replied with error: %2 Copy share link Copy share link + + Custom Permissions + + Edit share Edit share @@ -5147,6 +5513,10 @@ Server replied with error: %2 Enter a note for the recipient Enter a note for the recipient + + Enter the note to recipient + + File drop (upload only) File drop (upload only) @@ -5221,11 +5591,11 @@ Server replied with error: %2 Sharing is disabled. Sharing is disabled. - + This item cannot be shared. This item cannot be shared. - + SyncJournalDb @@ -5239,7 +5609,7 @@ Server replied with error: %2 Open browser Open browser - + Resolve conflicts Resolve conflicts @@ -5247,7 +5617,7 @@ Server replied with error: %2 Sync now Sync now - + TalkReplyTextField @@ -5269,11 +5639,11 @@ Server replied with error: %2 Switch to your browser to accept the terms of service Switch to your browser to accept the terms of service - + Terms of Service Terms of Service - + theme @@ -5296,7 +5666,7 @@ Server replied with error: %2 Sync is paused Sync is paused - + Sync is running Sync is running @@ -5316,6 +5686,49 @@ Server replied with error: %2 Waiting to start syncing Waiting to start syncing + + + TrayWindowAccountMenu + + Account switcher and settings menu + Account switcher and settings menu + + + Add account + Add account + + + Current account + Current account + + + Current account avatar + Current account avatar + + + Current account status is do not disturb + Current account status is do not disturb + + + Current account status is online + Current account status is online + + + Exit + Exit + + + Pause sync for all + Pause sync for all + + + Resume sync for all + Resume sync for all + + + Settings + Settings + TrayWindowHeader @@ -5327,10 +5740,37 @@ Server replied with error: %2 Open %1 in browser Open %1 in browser - + Open local or group folders Open local or group folders + + + TrayWindowHeaderBar + + More apps + More apps + + + Open %1 in browser + Open %1 in browser + + + Open Nextcloud Talk in browser + Open Nextcloud Talk in browser + + + Open Nextcloud in browser + + + + Open local or group folders + Open local or group folders + + + Website + + UnifiedSearchInputContainer @@ -5407,7 +5847,7 @@ Server replied with error: %2 Remove account Remove account - + Set status Set status @@ -5415,7 +5855,7 @@ Server replied with error: %2 Switch to account Switch to account - + UserStatusSelector @@ -5426,7 +5866,7 @@ Server replied with error: %2 Apply Apply - + Away Away @@ -5470,14 +5910,14 @@ Server replied with error: %2 What is your status? What is your status? - + Utility %1 %2 %1 %2 - + %L1 B %L1 B @@ -5539,7 +5979,7 @@ Server replied with error: %2 %n years - + utility @@ -5566,7 +6006,7 @@ Server replied with error: %2 Free up local space Free up local space - + Make always available locally Make always available locally @@ -5582,7 +6022,7 @@ Server replied with error: %2 There was an error when launching the email client to create a new message. Maybe no default email client is configured? There was an error when launching the email client to create a new message. Maybe no default email client is configured? - + ValidateChecksumHeader diff --git a/translations/client_es.ts b/translations/client_es.ts index 5335190a7a138..6037527fa3d31 100644 --- a/translations/client_es.ts +++ b/translations/client_es.ts @@ -6,22 +6,22 @@ In %1 En %1 - + Open %1 locally Abrir %1 localmente - + ActivityItemContent Dismiss Descartar - + Open file details Abrir detalles del archivo - + ActivityList @@ -32,11 +32,11 @@ No activities yet Aún no hay actividades - + Scroll to top Desplazarse hasta la parte superior - + CallNotificationDialog @@ -51,11 +51,11 @@ Decline Talk call notification Rechazar la notificación de llamadas de Talk - + Talk notification caller avatar Avatar de la notificación de llamada - + CloudProviderWrapper @@ -90,7 +90,7 @@ Quit sync client Cerrar cliente de sincronización - + Recently changed Cambiado recientemente @@ -122,7 +122,11 @@ Syncing %1 of %2 (%3 left) Sincronizando %1 de %2 (%3 restantes) - + + Syncing %1 of %2 (%3 left) + Sicronizando %1 de %2 (quedan %3) + + ConflictDelegate @@ -140,7 +144,7 @@ Account switcher and settings menu Menú para cambio de cuentas y ajustes - + Add account Añadir cuenta @@ -180,7 +184,7 @@ Settings Ajustes - + EditFileLocallyLoadingDialog @@ -212,7 +216,7 @@ Cancel Cancelar - + Choose Seleccione @@ -220,7 +224,7 @@ Token Encryption Key Chooser Seleccionador de Token para llave de cifrado - + ErrorBox @@ -235,10 +239,14 @@ Actividad + Dismiss + Descartar + + Sharing Compartir - + FileDetailsWindow @@ -256,11 +264,11 @@ Materialised items Elementos materializados - + Reload Recargar - + FileProviderFastEnumerationSettings @@ -271,6 +279,10 @@ Fast sync will only sync changes in files and folders within folders that have been explored. This can significantly increase responsiveness on initial configuration of virtual files. However, it will cause redundant downloads of files moved to an unexplored folder. La sincronización rápida sólo sincronizará los cambios en archivos y carpetas dentro de las carpetas que se han explorado. Esto puede incrementar significativamente la capacidad de respuesta en la configuración inicial de los archivos virtuales. Sin embargo, esto provocará descargas redundantes de archivos movidos a carpetas inexploradas. + + Fast sync will only sync changes in files and folders within folders that have been explored. This can significantly increase responsiveness on initial configuration of virtual files. However, it will cause redundant downloads of files moved to an unexplored folder. + + FileProviderFileDelegate @@ -285,7 +297,7 @@ Enable virtual files Activar archivos virtuales - + General settings Configuración general @@ -293,7 +305,7 @@ Virtual files settings Configuración de archivos virtuales - + FileProviderStorageInfo @@ -304,11 +316,11 @@ Evict local copies … Quitar copias locales … - + Local storage use Uso de almacenamiento local - + FileProviderSyncStatus @@ -321,7 +333,7 @@ macOS may ignore or delay this request. Solicitar una sincronización de cambios para el ambiente VFS. macOS podría ignorar o demorar esta solicitud. - + Request sync Solicitar sincronización @@ -329,51 +341,94 @@ macOS podría ignorar o demorar esta solicitud. Syncing Sincronizando - + FileSystem Could not remove folder "%1" No se ha podido eliminar la carpeta "%1" - + Error removing "%1": %2 Error al eliminar "%1": %2 - + Flow2AuthWidget An error occurred while connecting. Please try again. Se ha producido un error al conectarse. Por favor, inténtelo de nuevo. - + Browser Authentication Autentificación del navegador + + Copy Link + + Logo Logo + Reopen Browser + + + Switch to your browser to connect your account Cambiar al navegador para conectar con tu cuenta + + FolderWizardSelectiveSync + + Add Folder Sync + + + + Step 3 of 3: Selektive Synchronisation + + + FolderWizardSourcePage + &Choose + + + &Choose … &Seleccionar … - + + Add Folder Sync + + + Pick a local folder on your computer to sync Seleccione una carpeta local en su equipo para sincronizar + + Select a folder on your hard drive that should be permanetly connected to your %1. All files and subfolders are automatically uploaded and synchronized + + + + Step 1 of 3: Select local folder + + FolderWizardTargetPage + Add Folder Sync + + + + Both folders are permanently linked and the respective contents are automatically synchronized and updated. + + + Create folder Crear carpeta @@ -381,7 +436,11 @@ macOS podría ignorar o demorar esta solicitud. Folders Carpetas - + + Please now select or create a target folder in your %1 where the content should be uploaded and synchronized. + + + Refresh Actualizar @@ -389,6 +448,10 @@ macOS podría ignorar o demorar esta solicitud. Select a remote destination folder Seleccionar una carpeta remota de destino + + Step 2 of 3: Directory in your %1 + + main.cpp @@ -396,18 +459,18 @@ macOS podría ignorar o demorar esta solicitud. %1 requires on a working system tray. If you are running XFCE, please follow <a href="http://docs.xfce.org/xfce/xfce4-panel/systray">these instructions</a>. Otherwise, please install a system tray application such as "trayer" and try again. %1 requiere una bandeja del sistema de trabajo. Si estás ejecutando XFCE, por favor, siga <a href="http://docs.xfce.org/xfce/xfce4-panel/systray">estas instrucciones</a>. Por otro lado, instale una bandeja del sistema de aplicaciones como "trayer" e inténtelo de nuevo. - + System Tray not available La bandeja del sistema no está disponible - + MainWindow New activities Nuevas actividades - + Nextcloud desktop main dialog Diálogo principal de Nextcloud para escritorio @@ -415,7 +478,7 @@ macOS podría ignorar o demorar esta solicitud. Unified search results list Lista de resultados de la búsqueda unificada - + nextcloudTheme::aboutInfo() @@ -433,11 +496,11 @@ macOS podría ignorar o demorar esta solicitud. Server replied "%1 %2" to "%3 %4" El servidor respondió "%1 %2" a "%3 %4" - + Unknown error: network reply was deleted Error desconocido: la respuesta de red fue eliminada - + OCC::Account @@ -471,7 +534,7 @@ Should the account be imported? Could not import accounts from legacy client configuration. No se pudieron importar las cuentas desde la configuración del cliente antiguo. - + Import Importar @@ -483,7 +546,7 @@ Should the account be imported? Skip Saltar - + OCC::AccountSettings @@ -644,6 +707,10 @@ Would you like to set up end-to-end encryption? End-to-end encryption mnemonic Mnemónico para cifrado de extremo a extremo + + Expand Memory + + Folder creation failed Ha fallado la creación de la carpeta @@ -660,7 +727,7 @@ Would you like to set up end-to-end encryption? No %1 connection configured. No hay ninguna conexión de %1 configurada. - + No account configured. No se ha configurado ninguna cuenta. @@ -724,6 +791,10 @@ Would you like to set up end-to-end encryption? Standard file sync Sincronización de archivos estándar + + Storage space %1% occupied + + Storage space: … Espacio de almacenamiento: ... @@ -764,14 +835,26 @@ Would you like to set up end-to-end encryption? There are folders that were not synchronized because they are external storages: Hay carpetas que no se han sincronizado porque están en el almacenamiento externo: + + There are folders that were not synchronized because they are external storages: + + There are folders that were not synchronized because they are too big or external storages: Hay carpetas que no se han sincronizado porque son demasiado grandes o están en el almacenamiento externo: + There are folders that were not synchronized because they are too big or external storages: + + + There are folders that were not synchronized because they are too big: Hay carpetas que no se han sincronizado porque son demasiado grandes: + + There are folders that were not synchronized because they are too big: + + This account supports end-to-end encryption Esta cuenta soporta cifrado punto a punto @@ -828,6 +911,10 @@ Espere a una nueva sincronización, luego cifrala. You seem to have the Virtual Files feature enabled on this folder. At the moment, it is not possible to implicitly download virtual files that are end-to-end encrypted. To get the best experience with virtual files and end-to-end encryption, make sure the encrypted folder is marked with "Make always available locally". Parece que tiene la función de Archivos Virtuales activada en esta carpeta. Por el momento, no es posible descargar implícitamente los archivos virtuales que están cifrados de extremo a extremo. Para obtener la mejor experiencia con los archivos virtuales y el cifrado de extremo a extremo, asegúrese de que la carpeta cifrada está marcada con "Hacer que esté siempre disponible localmente". + + https://wl.hidrive.com/easy/0057 + + OCC::AccountSetupFromCommandLineJob @@ -924,7 +1011,7 @@ Espere a una nueva sincronización, luego cifrala. Certificate files (*.p12 *.pfx) Archivos de certificado (*.p12 *.pfx) - + Certificate password: Contraseña del certificado: @@ -940,7 +1027,7 @@ Espere a una nueva sincronización, luego cifrala. This server probably requires a SSL client certificate. Probablemente este servidor requiera un certificado SSL del cliente. - + OCC::Application @@ -992,7 +1079,7 @@ Espere a una nueva sincronización, luego cifrala. There was an error while accessing the configuration file at %1. Please make sure the file can be accessed by your system account. Se ha producido un error al acceder al archivo de configuración en %1. Por favor, asegúrese de que su cuenta del sistema puede acceder al archivo. - + deleting eliminando @@ -1010,14 +1097,14 @@ Espere a una nueva sincronización, luego cifrala. older software version antiguos - + OCC::AuthenticationDialog &Password: &Contraseña: - + &Username: &Usuario: @@ -1029,7 +1116,7 @@ Espere a una nueva sincronización, luego cifrala. Enter username and password for "%1" at %2. Introduce usuario y contraseña para "%1" en %2. - + OCC::BasePropagateRemoteDeleteEncrypted @@ -1079,7 +1166,7 @@ Espere a una nueva sincronización, luego cifrala. Restoration failed: %1 Fallo al restaurar: %1 - + The file %1 is currently in use El archivo %1 se encuentra en uso @@ -1087,7 +1174,7 @@ Espere a una nueva sincronización, luego cifrala. The local file was removed during sync. El archivo local ha sido eliminado durante la sincronización. - + OCC::CaseClashConflictSolver @@ -1114,11 +1201,11 @@ Espere a una nueva sincronización, luego cifrala. Filename contains trailing spaces. El nombre del archivo contiene espacios al final. - + You don't have the permission to rename this file. Please ask the author of the file to rename it. No tiene permisos para renombrar este archivo. Por favor, solicite al autor del archivo que lo renombre. - + OCC::CaseClashFilenameDialog @@ -1149,7 +1236,7 @@ Espere a una nueva sincronización, luego cifrala. Filename contains illegal characters: %1 El nombre del archivo contiene caracteres ilegales: %1 - + Filename contains leading and trailing spaces. El nombre del archivo contiene espacios iniciales y finales. @@ -1205,7 +1292,7 @@ Espere a una nueva sincronización, luego cifrala. today hoy - + OCC::CleanupPollsJob @@ -1223,7 +1310,7 @@ Espere a una nueva sincronización, luego cifrala. Enter E2E passphrase Introduce la frase de acceso E2E - + Input PIN code Please keep it short and shorter than "Enter Certificate USB Token PIN:" Ingrese código PIN @@ -1240,7 +1327,7 @@ Espere a una nueva sincronización, luego cifrala. Please enter your end-to-end encryption passphrase:<br><br>Username: %2<br>Account: %3<br> Por favor, introduzca su frase de cifrado de extremo a extremo:<br><br>Nombre de usuario: %2<br> Cuenta: %3<br> - + OCC::ConflictDialog @@ -1279,7 +1366,7 @@ Espere a una nueva sincronización, luego cifrala. Keep server version Mantener la versión del servidor - + Local version Versión local @@ -1307,14 +1394,14 @@ Espere a una nueva sincronización, luego cifrala. today hoy - + OCC::ConflictSolver Confirm deletion Confirmar borrado - + Do you want to delete the directory <i>%1</i> and all its contents permanently? ¿Quieres eliminar la carpeta <i>%1</i> y todo su contenido permanentemente? @@ -1334,7 +1421,7 @@ Espere a una nueva sincronización, luego cifrala. %1 - + OCC::ConnectionValidator @@ -1357,22 +1444,76 @@ Espere a una nueva sincronización, luego cifrala. The provided credentials are not correct Las credenciales proporcionadas no son correctas - + Timeout Tiempo de espera superado - + + + OCC::DataProtectionPage + + Agree + + + + Form + Formulario + + + Settings + + + + This application uses tracking technologies. By clicking on Agree, you accept the processing of your anonymized data. You can adjust your choices at any time via the settings. <br/> <br/>Information on data processing and more can be found in our <a href='https://wl.hidrive.com/easy/0005'>privacy policy</a>. + + + + + OCC::DataProtectionSettingsPage + + Back + + + + Form + Formulario + + + Necessary data + + + + Required to ensure that the software can be used as expected + + + + Save Settings + + + + Send anonymous use + + + + This helps us to optimize the software and to better identify system crashes and unexpected errors. + + + + We collect anonymized data to optimize our app. We use software solutions from various partners for this purpose. We want to give you full transparency and freedom of choice regarding the collection and processing of your anonymized usage. You can change your settings at any time under the menu item Data Protection. + + + OCC::DiscoveryPhase Error while canceling deletion of %1 Error al cancelar la eliminación de %1 - + Error while canceling deletion of a file Error al cancelar la eliminación de un archivo - + OCC::DiscoverySingleDirectoryJob @@ -1383,11 +1524,11 @@ Espere a una nueva sincronización, luego cifrala. Encrypted metadata setup error: initial signature from server is empty. Error de configuración de los metadatos cifrados: la firma inicial del servidor está vacía. - + Server error: PROPFIND reply is not XML formatted! Error del servidor: ¡la respuesta de PROPFIND no tiene formato XML! - + OCC::DiscoverySingleLocalDirectoryJob @@ -1406,11 +1547,11 @@ Espere a una nueva sincronización, luego cifrala. Error while reading directory %1 Error al leer el directorio %1 - + Filename encoding is not valid La codificación del nombre del archivo no es válida - + OCC::EditLocallyJob @@ -1453,7 +1594,7 @@ Espere a una nueva sincronización, luego cifrala. File %1 could not be locked. El archivo %1 no pudo ser bloqueado. - + File %1 now locked. El archivo %1 ahora está bloqueado. @@ -1473,7 +1614,7 @@ Espere a una nueva sincronización, luego cifrala. Server error: PROPFIND reply is not XML formatted! Error del servidor: ¡la respuesta de PROPFIND no tiene formato XML! - + OCC::EditLocallyManager @@ -1491,7 +1632,7 @@ Espere a una nueva sincronización, luego cifrala. An error occurred trying to verify the request to edit locally. Ha ocurrido un error intentando verificar la petición para editar localmente. - + Could not find an account for local editing. No se ha podido encontrar una cuenta para edición local. @@ -1511,7 +1652,7 @@ Espere a una nueva sincronización, luego cifrala. Please try again. Por favor, vuelve a intentarlo. - + OCC::EncryptedFolderMetadataHandler @@ -1609,7 +1750,7 @@ Esto podría ser un problema con tu librería OpenSSL Could not parse the JSON returned from the server: <br><em>%1</em> No se pudo procesar el código JSON recibido del servidor: <br><em>%1</em> - + Error returned from the server: <em>%1</em> Error devuelto por el servidor: <em>%1</em> @@ -1629,14 +1770,18 @@ Esto podría ser un problema con tu librería OpenSSL There was an error accessing the "token" endpoint: <br><em>%1</em> Hubo un error accediendo al "token" endpoint: <br><em>%1</em> - + OCC::Flow2AuthWidget Copy Link Copiar Link - + + Error + Error + + Link copied to clipboard. Enlace copiado al portapapeles. @@ -1653,6 +1798,10 @@ Esto podría ser un problema con tu librería OpenSSL Iniciando autorización + Switch to your browser to connect your account + Cambiar al navegador para conectar con tu cuenta + + Unable to open the Browser, please copy the link to your Browser. No se ha podido abrir el navegador, por favor copie el enlace en su navegador. @@ -1762,6 +1911,10 @@ Esto podría ser un problema con tu librería OpenSSL + A folder from an external storage has been added. + + + A folder has surpassed the set folder size limit of %1MB: %2. %3 Una carpeta ha sobrepasado el límite establecido de tamaño de %1MB: %2. @@ -1789,6 +1942,10 @@ Alternativamente, puede restaurar todos los archivos borrados descargándolos de Una carpeta mayor de %1 MB ha sido añadida: %2. + + A new folder larger than %1 MB has been added: %2. + + Changes in synchronized folders could not be tracked reliably. @@ -1837,7 +1994,7 @@ Esto significa que el cliente de sincronización podría no subir inmediatamente Restore Files from Server Restaurar los archivos desde el servidor - + Restore Files to Server Restaurar los archivos al servidor @@ -1873,10 +2030,14 @@ Esto significa que el cliente de sincronización podría no subir inmediatamente OCC::FolderCreationDialog + %1 Create new folder + + + Could not create a folder! Check your write permissions. ¡No se pudo crear la carpeta! Comprueba los permisos de escritura. - + Create new folder Crear nueva carpeta @@ -1899,14 +2060,22 @@ Esto significa que el cliente de sincronización podría no subir inmediatamente %1 (Sync is paused) %1 (Sincronización en pausa) - + (backup %1) (copia de seguridad %1) + (backup %1) + + + (backup) (copia de seguridad) + + (backup) + + An old sync journal "%1" was found, but could not be removed. Please make sure that no application is currently using it. Se ha encontrado un registro de sincronización antiguo "%1", que no se ha podido eliminar. Por favor, asegúrese de que ninguna aplicación lo está utilizando en este momento. @@ -2018,6 +2187,10 @@ Para usuarios avanzados: Este problema puede estar relacionado a múltiples arch OCC::FolderStatusDelegate + + Add Folder Sync + + Add Folder Sync Connection Añadir conexión para el directorio de sincronización @@ -2026,6 +2199,10 @@ Para usuarios avanzados: Este problema puede estar relacionado a múltiples arch File Archivo + + Synchronize any other local folder with your %1 + + OCC::FolderStatusModel @@ -2107,7 +2284,7 @@ Para usuarios avanzados: Este problema puede estar relacionado a múltiples arch Preparing to sync … Preparando la sincronización ... - + Signed out Cerrar sesión @@ -2155,7 +2332,7 @@ Para usuarios avanzados: Este problema puede estar relacionado a múltiples arch ↓ %1/s ↓ %1/s - + OCC::FolderWatcher @@ -2184,6 +2361,14 @@ Para usuarios avanzados: Este problema puede estar relacionado a múltiples arch OCC::FolderWizardLocalPath + Add Folder Sync + + + + Choose + Seleccione + + Click to select a local folder to sync. Haga clic para seleccionar una carpeta local que sincronizar. @@ -2191,17 +2376,33 @@ Para usuarios avanzados: Este problema puede estar relacionado a múltiples arch Enter the path to the local folder. Introduzca la ubicación de la carpeta local. + + Select a folder on your hard drive that should be permanetly connected to your %1. All files and subfolders are automatically uploaded and synchronized + + Select the source folder Seleccione la carpeta de origen - + + Step 1 of 3: Select local folder + + + OCC::FolderWizardRemotePath + + Add Folder Sync + + Authentication failed accessing %1 Fallo de autenticación al acceder a %1 + + Both folders are permanently linked and the respective contents are automatically synchronized and updated. + + Choose this to sync the entire account Elija esto para sincronizar la cuenta entera @@ -2211,6 +2412,10 @@ Para usuarios avanzados: Este problema puede estar relacionado a múltiples arch Crear carpeta remota + Create folder + Crear carpeta + + Enter the name of the new folder to be created below "%1": Introduce el nombre de la nueva carpeta que se creará debajo de "%1": @@ -2230,7 +2435,19 @@ Para usuarios avanzados: Este problema puede estar relacionado a múltiples arch Please choose a different location. %1 is already being synced to %2. Por favor, escoja una ubicación diferente. %1 ya se está sincronizando para %2. - + + Please now select or create a target folder in your %1 where the content should be uploaded and synchronized. + + + + Refresh + Actualizar + + + Step 2 of 3: Directory in your %1 + + + OCC::FolderWizardSelectiveSync @@ -2238,6 +2455,14 @@ Para usuarios avanzados: Este problema puede estar relacionado a múltiples arch (experimental) + Add Folder Sync + + + + Step 3 of 3: Selektive Synchronisation + + + Use virtual files instead of downloading content immediately %1 Usa archivos virtuales en vez de descargar el contenido inmediatamente %1 @@ -2245,7 +2470,7 @@ Para usuarios avanzados: Este problema puede estar relacionado a múltiples arch Virtual files are not supported at the selected location Los archivos virtuales no están soportados en la ubicación seleccionada - + Virtual files are not supported for Windows partition roots as local folder. Please choose a valid subfolder under drive letter. Los archivos virtuales no son compatibles con la carpeta raíz de la partición de Windows como carpeta local. Por favor, elija una subcarpeta válida bajo la letra de la unidad. @@ -2320,6 +2545,10 @@ Cambiar a una versión anterior no es inmediatamente posible: cambiar de estable Create Debug Archive Crear archivo de depuración + + Data Protection + + Debug Archive Created Archivo de depuración creado @@ -2328,7 +2557,7 @@ Cambiar a una versión anterior no es inmediatamente posible: cambiar de estable Debug archive is created at %1 El archivo de depuración se ha creado en %1 - + Desktop client x.x.x Cliente de escritorio x.x.x @@ -2357,18 +2586,42 @@ Cambiar a una versión anterior no es inmediatamente posible: cambiar de estable Trailing part of "Ask confirmation before syncing folder larger than" MB + + More Information + + Move removed files to trash Mover archivos eliminados a la papelera + + Necessary data + + Notify when synchronised folders grow larger than specified limit Notificar cuando las carpetas sincronizadas aumenten su tamaño más allá del límite especificado + + Open Source Software + + + + Privacy Policy + + + + Required to ensure that the software can be used as expected + + S&how crash reporter M&ostrar el informe de fallos + + Send anonymous use + + Server notifications that require attention. Notificaciones del servidor que requieren atención. @@ -2393,6 +2646,10 @@ Cambiar a una versión anterior no es inmediatamente posible: cambiar de estable Show call notification dialogs. Mostrar diálogos de notificación de llamadas. + + Show call notifications + + Show chat notification dialogs. Mostrar diálogos de notificación de chats. @@ -2410,10 +2667,18 @@ Cambiar a una versión anterior no es inmediatamente posible: cambiar de estable - estable: contiene versiones probadas consideradas fiables. + + This helps us to optimize the software and to better identify system crashes and unexpected errors. + + Update channel Canal de actualización + + Updates + + Usage Documentation Documentación de uso @@ -2422,6 +2687,10 @@ Cambiar a una versión anterior no es inmediatamente posible: cambiar de estable Use &Monochrome Icons Usar iconos &monocromáticos + + Use &monochrome icons + + You cannot disable autostart because system-wide autostart is enabled. No puedes desactivar el inicio automático porque el inicio automático de todo el sistema está activado. @@ -2442,6 +2711,22 @@ Cambiar a una versión anterior no es inmediatamente posible: cambiar de estable enterprise empresarial + + https://wl.hidrive.com/easy/0004 + + + + https://wl.hidrive.com/easy/0005 + + + + https://wl.hidrive.com/easy/0006 + + + + https://wl.hidrive.com/easy/0007 + + seconds (if <a href="https://github.com/nextcloud/notify_push">Client Push</a> is unavailable) segundos (si <a href="https://github.com/nextcloud/notify_push">Client Push</a>no está disponible) @@ -2457,7 +2742,7 @@ Cambiar a una versión anterior no es inmediatamente posible: cambiar de estable Connection Timeout Tiempo de espera de conexión agotado - + No E-Tag received from server, check Proxy/Gateway No se ha recibido ninguna E-Tag del servidor, revise el proxy/puerta de enlace @@ -2473,7 +2758,7 @@ Cambiar a una versión anterior no es inmediatamente posible: cambiar de estable We received an unexpected download Content-Length. Hemos recibido una longitud inesperada de contenido de la descarga. - + OCC::GetOrCreatePublicLinkShare @@ -2484,7 +2769,7 @@ Cambiar a una versión anterior no es inmediatamente posible: cambiar de estable %1 - + Password for share required Se requiere contraseña para compartir @@ -2496,14 +2781,14 @@ Cambiar a una versión anterior no es inmediatamente posible: cambiar de estable Sharing error Error al compartir - + OCC::HttpCredentialsGui <a href="%1">Click here</a> to request an app password from the web interface. <a href="%1">Haga clic aquí</a> para solicitar una contraseña de aplicación desde la interfaz web. - + Enter Password Introduzca la contraseña @@ -2515,7 +2800,7 @@ Cambiar a una versión anterior no es inmediatamente posible: cambiar de estable Reading from keychain failed with error: "%1" La lectura del keychain falló con el error "%1" - + OCC::IgnoreListEditor @@ -2553,7 +2838,7 @@ Cambiar a una versión anterior no es inmediatamente posible: cambiar de estable Add a new ignore pattern: Añadir un nuevo patrón de archivos ignorados: - + Allow Deletion Permitir borrado @@ -2574,6 +2859,10 @@ Items where deletion is allowed will be deleted if they prevent a directory from Los elementos que se permite su borrado se eliminarán si impiden que un directorio se elimine. Esto es útil para los metadatos. + Ignore Pattern + + + Pattern Patrón @@ -2604,7 +2893,7 @@ Los elementos que se permite su borrado se eliminarán si impiden que un directo Could not rename local file. %1 No se ha podido renombrar el archivo local. %1 - + Error Error @@ -2684,7 +2973,7 @@ Los elementos que se permite su borrado se eliminarán si impiden que un directo You don't have the permission to rename this file. Please ask the author of the file to rename it. No tienes permisos para renombrar este archivo. Por favor, dile al autor del archivo que lo renombre. - + OCC::LegalNotice @@ -2695,7 +2984,7 @@ Los elementos que se permite su borrado se eliminarán si impiden que un directo <p>Licensed under the GNU General Public License (GPL) Version 2.0 or any later version.</p> <p>Bajo la Licencia Pública General de GNU (GPL) versión 2.0 o posterior.</p> - + Close Cerrar @@ -2703,7 +2992,7 @@ Los elementos que se permite su borrado se eliminarán si impiden que un directo Legal notice Aviso legal - + OCC::LogBrowser @@ -2718,7 +3007,7 @@ Los elementos que se permite su borrado se eliminarán si impiden que un directo Open folder Abrir carpeta - + The client can write debug logs to a temporary folder. These logs are very helpful for diagnosing problems. Since log files can get large, the client will start a new one for each sync run and compress older ones. It will also delete log files after a couple of hours to avoid consuming too much disk space. If enabled, logs will be written to %1 @@ -2732,18 +3021,18 @@ Note that using any logging command line options will override this setting.Este ajuste persiste tras el reinicio del cliente. Nótese que usar cualquier opción de toma de registros a través de línea de comandos anulará este ajuste. - + OCC::Logger <nobr>File "%1"<br/>cannot be opened for writing.<br/><br/>The log output <b>cannot</b> be saved!</nobr> <nobr>El archivo "%1"<br/>no se puede abrir para escritura.<br/><br/>¡El archivo de registro <b>no se puede</b> guardar!</nobr> - + Error Error - + OCC::Mac::FileProviderEditLocallyJob @@ -2837,7 +3126,7 @@ Nótese que usar cualquier opción de toma de registros a través de línea de c SOCKS5 proxy Proxy SOCKS5 - + Upload Bandwidth Velocidad de subida @@ -2853,7 +3142,7 @@ Nótese que usar cualquier opción de toma de registros a través de línea de c Username for proxy server Nombre de usuario para el servidor proxy - + OCC::NSISUpdater @@ -2872,7 +3161,7 @@ Nótese que usar cualquier opción de toma de registros a través de línea de c Get update Actualizar - + New Version Available Nueva versión disponible @@ -2892,7 +3181,7 @@ Nótese que usar cualquier opción de toma de registros a través de línea de c Update manually Actualizar manualmente - + OCC::OCUpdater @@ -2943,11 +3232,11 @@ Nótese que usar cualquier opción de toma de registros a través de línea de c Update Check Comprobar si hay actualizaciones - + Update status is unknown: Did not check for new updates. Estado de actualización desconocido: no se buscaron nuevas actualizaciones. - + OCC::OwncloudAdvancedSetupPage @@ -2975,7 +3264,7 @@ Nótese que usar cualquier opción de toma de registros a través de línea de c In Finder's "Locations" sidebar section En la sección "Ubicaciones" de la barra lateral del Finder - + Local Sync Folder Carpeta local de sincronización @@ -3003,14 +3292,14 @@ Nótese que usar cualquier opción de toma de registros a través de línea de c Warning: The local folder is not empty. Pick a resolution! Advertencia: La carpeta local no está vacía. ¡Elija una solución! - + OCC::OwncloudConnectionMethodDialog <html><head/><body><p>Failed to connect to the secure server address <em>%1</em>. How do you wish to proceed?</p></body></html> <html><head/><body><p>Fallo al conectar con la dirección del servidor seguro <em>%1</em>. ¿Cómo desea proceder?</p></body></html> - + <html><head/><body><p>Failed to connect to the secure server address specified. How do you wish to proceed?</p></body></html> <html><head/><body><p>Fallo al conectar con la dirección del servidor seguro especificado. ¿Cómo desea proceder?</p></body></html> @@ -3030,14 +3319,14 @@ Nótese que usar cualquier opción de toma de registros a través de línea de c Select a different URL Seleccionar una URL diferente - + OCC::ownCloudGui %1 (%2, %3) %1 (%2, %3) - + %1: %2 Example text: "Nextcloud: Syncing 25MB (3 minutes left)" (%1 is the folder name to be synced, %2 a status message for that folder) %1:%2 @@ -3102,7 +3391,7 @@ Nótese que usar cualquier opción de toma de registros a través de línea de c macOS VFS for %1: Sync is running. macOS VFS para %1: Sincronización en progreso. - + OCC::OwncloudHttpCredsPage @@ -3135,7 +3424,7 @@ Nótese que usar cualquier opción de toma de registros a través de línea de c Could not load certificate. Maybe wrong password? No se ha podido guardar el certificado. ¿Quizás la contraseña sea incorrecta? - + Server address does not seem to be valid La dirección del servidor no es válida @@ -3144,7 +3433,7 @@ Nótese que usar cualquier opción de toma de registros a través de línea de c %1 will be replaced with the application name El link a su interfaz web %1 cuando la abra en el navegador. - + OCC::OwncloudSetupWizard @@ -3155,7 +3444,7 @@ Nótese que usar cualquier opción de toma de registros a través de línea de c <font color="green"><b>Local sync folder %1 successfully created!</b></font> <font color="green"><b>Carpeta de sincronización local %1 creada con éxito</b></font> - + <font color="green">Successfully connected to %1: %2 version %3 (%4)</font><br/><br/> <font color="green">Conectado con éxito a %1: versión %2 %3 (%4)</font><br/><br/> @@ -3271,7 +3560,7 @@ Nótese que usar cualquier opción de toma de registros a través de línea de c failed. ha fallado. - + OCC::OwncloudWizard @@ -3298,7 +3587,7 @@ Nótese que usar cualquier opción de toma de registros a través de línea de c Stay safe Mantente a salvo - + When the "virtual files" mode is enabled no files will be downloaded initially. Instead, a tiny "%1" file will be created for each file that exists on the server. The contents can be downloaded by running these files or by using their context menu. The virtual files mode is mutually exclusive with selective sync. Currently unselected folders will be translated to online-only folders and your selective sync settings will be reset. @@ -3314,7 +3603,7 @@ Cambiar a este modo interrumpirá cualquier sincronización en proceso. Esta es un modo nuevo y experimental. Si decides usarlo, por favor, informa de cualquier tipo de problema que pueda surgir. - + OCC::PasswordInputDialog @@ -3466,7 +3755,7 @@ Esta es un modo nuevo y experimental. Si decides usarlo, por favor, informa de c Server replied with an error while reading directory "%1" : %2 El servidor contestó con un error al leer el directorio "%1" : %2 - + Server reported no %1 El servidor informó de no %1 @@ -3498,7 +3787,7 @@ Esta es un modo nuevo y experimental. Si decides usarlo, por favor, informa de c size tamaño - + OCC::PropagateDirectory @@ -3517,7 +3806,7 @@ Esta es un modo nuevo y experimental. Si decides usarlo, por favor, informa de c File is currently in use El archivo se encuentra en uso - + The folder %1 cannot be made read-only: %2 La carpeta %1 no se puede hacer de sólo lectura: %2 @@ -3525,7 +3814,7 @@ Esta es un modo nuevo y experimental. Si decides usarlo, por favor, informa de c unknown exception excepción inválida - + OCC::PropagateDownloadFile @@ -3560,7 +3849,7 @@ Esta es un modo nuevo y experimental. Si decides usarlo, por favor, informa de c File has changed since discovery El archivo ha cambiado desde que fue descubierto - + File was deleted from server Se ha eliminado el archivo del servidor @@ -3584,7 +3873,7 @@ Esta es un modo nuevo y experimental. Si decides usarlo, por favor, informa de c The file could not be downloaded completely. No se ha podido descargar el archivo completamente. - + OCC::PropagateItemJob @@ -3614,7 +3903,7 @@ Esta es un modo nuevo y experimental. Si decides usarlo, por favor, informa de c The file %1 is currently in use El archivo %1 se encuentra en uso - + The folder %1 cannot be made read-only: %2 La carpeta %1 no se puede hacer de sólo lectura: %2 @@ -3626,14 +3915,14 @@ Esta es un modo nuevo y experimental. Si decides usarlo, por favor, informa de c unknown exception excepción inválida - + OCC::PropagateLocalRemove Could not delete file record %1 from local DB No fue posible borrar el registro del archivo %1 de la base de datos local - + Could not remove %1 because of a local file name clash No se ha podido eliminar %1 por causa de un conflicto con el nombre de un archivo local @@ -3641,14 +3930,14 @@ Esta es un modo nuevo y experimental. Si decides usarlo, por favor, informa de c Temporary error when removing local item removed from server. Error temporal al quitar ítem local que fue eliminado del servidor. - + OCC::PropagateLocalRename Could not delete file record %1 from local DB No fue posible borrar el registro del archivo %1 de la base de datos local - + Could not get file %1 from local DB No se pudo obtener el archivo %1 de la DB local @@ -3680,18 +3969,18 @@ Esta es un modo nuevo y experimental. Si decides usarlo, por favor, informa de c The file %1 is currently in use El archivo %1 se encuentra en uso - + OCC::PropagateRemoteDelete Could not delete file record %1 from local DB No fue posible borrar el registro del archivo %1 de la base de datos local - + Wrong HTTP code returned by server. Expected 204, but received "%1 %2". El código HTTP devuelto por el servidor es erróneo. Se esperaba 204, pero se recibió "%1 %2". - + OCC::PropagateRemoteDeleteEncryptedRootFolder @@ -3713,11 +4002,11 @@ Esta es un modo nuevo y experimental. Si decides usarlo, por favor, informa de c The file %1 is currently in use El archivo %1 se encuentra en uso - + Wrong HTTP code returned by server. Expected 201, but received "%1 %2". El código HTTP devuelto por el servidor es erróneo. Se esperaba 201, pero se recibió "%1 %2". - + OCC::PropagateRemoteMove @@ -3744,7 +4033,7 @@ Esta es un modo nuevo y experimental. Si decides usarlo, por favor, informa de c Error writing metadata to the database Error al escribir los metadatos en la base de datos - + The file %1 is currently in use El archivo %1 se encuentra en uso @@ -3752,7 +4041,7 @@ Esta es un modo nuevo y experimental. Si decides usarlo, por favor, informa de c Wrong HTTP code returned by server. Expected 201, but received "%1 %2". El código HTTP devuelto por el servidor es erróneo. Esperado 201, pero recibido "%1 %2". - + OCC::PropagateUploadFileCommon @@ -3779,7 +4068,7 @@ Esta es un modo nuevo y experimental. Si decides usarlo, por favor, informa de c File Removed (start upload) %1 Archivo eliminado (comenzar subida) %1 - + Local file changed during sync. Un archivo local ha sido modificado durante la sincronización. @@ -3799,7 +4088,7 @@ Esta es un modo nuevo y experimental. Si decides usarlo, por favor, informa de c Upload of %1 exceeds the quota for the folder La subida %1 excede el límite de tamaño de la carpeta - + OCC::PropagateUploadFileNG @@ -3810,7 +4099,7 @@ Esta es un modo nuevo y experimental. Si decides usarlo, por favor, informa de c Missing ETag from server Perdido ETag del servidor - + Missing File ID from server ID perdido del archivo del servidor @@ -3826,7 +4115,7 @@ Esta es un modo nuevo y experimental. Si decides usarlo, por favor, informa de c Unexpected return code from server (%1) Respuesta inesperada del servidor (%1) - + OCC::PropagateUploadFileV1 @@ -3852,7 +4141,7 @@ Esta es un modo nuevo y experimental. Si decides usarlo, por favor, informa de c Password: Contraseña: - + Proxy authentication required Autenticación de proxy necesaria @@ -3868,7 +4157,7 @@ Esta es un modo nuevo y experimental. Si decides usarlo, por favor, informa de c Username: Nombre de usuario: - + OCC::SelectiveSyncDialog @@ -3882,7 +4171,7 @@ Esta es un modo nuevo y experimental. Si decides usarlo, por favor, informa de c An error occurred while loading the list of sub folders. Se ha producido un error al cargar la lista de carpetas. - + Deselect remote folders you do not wish to synchronize. Deseleccione las carpetas remotas que no desea sincronizar. @@ -3902,7 +4191,7 @@ Esta es un modo nuevo y experimental. Si decides usarlo, por favor, informa de c Size Tamaño - + OCC::ServerNotificationHandler @@ -3910,6 +4199,21 @@ Esta es un modo nuevo y experimental. Si decides usarlo, por favor, informa de c Responder + + OCC::sesSnackBar + + Error + Error + + + Success + + + + Warning + Aviso + + OCC::SettingsDialog @@ -3921,7 +4225,7 @@ Esta es un modo nuevo y experimental. Si decides usarlo, por favor, informa de c Account Cuenta - + General General @@ -3930,6 +4234,10 @@ Esta es un modo nuevo y experimental. Si decides usarlo, por favor, informa de c Red + New account + + + Settings Ajustes @@ -3941,7 +4249,7 @@ Esta es un modo nuevo y experimental. Si decides usarlo, por favor, informa de c sharee (shareWithAdditionalInfo) %1 (%2) - + Global search results Resultados de búsqueda global @@ -3953,7 +4261,7 @@ Esta es un modo nuevo y experimental. Si decides usarlo, por favor, informa de c Search globally Buscar globalmente - + OCC::ShareManager @@ -3975,7 +4283,7 @@ Esta es un modo nuevo y experimental. Si decides usarlo, por favor, informa de c Could not find local folder for %1 No se ha podido encontrar una carpeta local para %1 - + Internal link Enlace interno @@ -3999,7 +4307,7 @@ Esta es un modo nuevo y experimental. Si decides usarlo, por favor, informa de c Today Hoy - + OCC::SocketApi @@ -4090,7 +4398,7 @@ El servidor respondió con el error: %2 Open in browser Abrir en navegador - + Resharing this file is not allowed No está permitido compartir de nuevo @@ -4126,7 +4434,7 @@ El servidor respondió con el error: %2 Unlock file Desbloquear archivo - + OCC::SslButton @@ -4223,12 +4531,20 @@ El servidor respondió con el error: %2 Esta conexión NO ES SEGURA, pues no está cifrada. + + This connection is NOT secure as it is not encrypted. + + This connection is encrypted using %1 bit %2. Esta conexión está cifrada con %1 bit %2. + + This connection is encrypted using %1 bit %2. + + OCC::SslErrorDialog @@ -4272,7 +4588,7 @@ El servidor respondió con el error: %2 Issuer: %1 Emisor: %1 - + Organization: %1 Organización: %1 @@ -4292,7 +4608,7 @@ El servidor respondió con el error: %2 with Certificate %1 con certificado %1 - + OCC::SyncEngine @@ -4303,7 +4619,7 @@ El servidor respondió con el error: %2 Cannot open the sync journal No es posible abrir el diario de sincronización - + Could not set file record to local DB: %1 No fue posible establecer el registro del archivo a la base de datos local: %1 @@ -4352,7 +4668,7 @@ El servidor respondió con el error: %2 Using virtual files with suffix, but suffix is not set Usando archivos virtuales con sufijo, pero el sufijo no está establecido - + OCC::SyncStatusSummary @@ -4446,18 +4762,18 @@ El servidor respondió con el error: %2 Resume sync for all Continuar sincronización a todos - + Settings Ajustes - + OCC::TermsOfServiceCheckWidget Copy Link Copiar enlace - + Link copied to clipboard. Enlace copiado al portapapeles @@ -4473,7 +4789,7 @@ El servidor respondió con el error: %2 Waiting for terms to be accepted Esperando a que los términos de servicio sean aceptados - + OCC::Theme @@ -4489,6 +4805,10 @@ El servidor respondió con el error: %2 <p>This release was supplied by %1.</p> <p>Esta versión ha sido suministrada por %1.</p> + + easy/0118 + + OCC::UnifiedSearchResultsListModel @@ -4504,18 +4824,18 @@ El servidor respondió con el error: %2 Search has failed for '%1'. Error: %2 La búsqueda ha fallado para '%1'. Error: %2 - + Search has failed for '%2'. La búsqueda ha fallado para '%2'. - + OCC::UpdateE2eeFolderMetadataJob Failed to finalize item. Fallo al finalizar ítem. - + Failed to unlock encrypted folder. Fallo al desbloquear carpeta cifrada. @@ -4523,7 +4843,7 @@ El servidor respondió con el error: %2 Failed to update folder metadata. Fallo al actualizar los metadatos de la carpeta. - + OCC::UpdateE2eeFolderUsersMetadataJob @@ -4568,7 +4888,7 @@ El servidor respondió con el error: %2 Open Nextcloud Talk in browser Abrir Nextcloud Talk en el navegador - + Rename file Renombrar archivo @@ -4584,7 +4904,7 @@ El servidor respondió con el error: %2 Trigger the migration Iniciar la migración - + OCC::UserModel @@ -4595,7 +4915,7 @@ El servidor respondió con el error: %2 Cancel Cancelar - + Confirm Account Removal Confirma la eliminación de cuenta @@ -4603,7 +4923,7 @@ El servidor respondió con el error: %2 Remove connection Eliminar vinculación - + OCC::UserStatusSelectorModel @@ -4613,7 +4933,7 @@ El servidor respondió con el error: %2 %1 días - + %1 hours %1 hora @@ -4687,7 +5007,7 @@ El servidor respondió con el error: %2 Today Hoy - + OCC::Vfs @@ -4698,18 +5018,18 @@ El servidor respondió con el error: %2 Please choose a different location. %1 is a network drive. It doesn't support virtual files. Por favor seleccione un ubicación diferente. %1 es una unidad de red. No soporta archivos virtuales. - + Please choose a different location. %1 isn't a NTFS file system. It doesn't support virtual files. Por favor seleccione un ubicación diferente. %1no es un sistema de archivos NTFS. No soporta archivos virtuales. - + OCC::VfsDownloadErrorDialog %1 could not be downloaded. %1 no pudo ser descargado. - + > More details > Más detalles @@ -4733,7 +5053,7 @@ El servidor respondió con el error: %2 could not be downloaded no pudo ser descargado - + OCC::VfsSuffix @@ -4762,10 +5082,14 @@ El servidor respondió con el error: %2 OCC::WebFlowCredentials + <b>You have been logged out of your account %1 at %2. Please login again.</b> + + + You have been logged out of your account %1 at %2. Please login again. Ha cerrado la sesión de su cuenta %1 en %2. Por favor, inicie sesión de nuevo. - + OCC::WelcomePage @@ -4780,7 +5104,7 @@ El servidor respondió con el error: %2 Host your own server Aloja tu propio servidor - + Keep your data secure and under your control Mantén tus datos seguros y bajo tu control @@ -4800,14 +5124,14 @@ El servidor respondió con el error: %2 Sign up with provider Iniciar sesión a través de un proveedor - + OwncloudAdvancedSetupPage &Local Folder Carpeta &local - + <html><head/><body><p>If this box is checked, existing content in the local folder will be erased to start a clean sync from the server.</p><p>Do not check this if the local content should be uploaded to the servers folder.</p></body></html> <html><head/><body><p>Si esta casilla está marcada, el contenido existente en el directorio local será eliminado para comenzar una sincronización limpia desde el servidor.</p><p>No marque esta casilla si el contenido local debería subirse al directorio del servidor.</p></body></html> @@ -4860,18 +5184,18 @@ El servidor respondió con el error: %2 Username Nombre de usuario - + OwncloudHttpCredsPage &Password &Contraseña - + &Username &Nombre de usuario - + OwncloudSetupPage @@ -4965,7 +5289,7 @@ El servidor respondió con el error: %2 Updating end-to-end encryption metadata Actualizando metadatos de cifrado extremo a extremo - + Updating local metadata Actualizando los metadatos locales @@ -4985,7 +5309,7 @@ El servidor respondió con el error: %2 Virtual file created Archivo virtual creado - + QObject @@ -5042,7 +5366,7 @@ El servidor respondió con el error: %2 Paths beginning with '#' character are not supported in VFS mode. Las rutas que comienzan con el carácter '#' no están soportadas en el modo VFS. - + Some time ago Hace tiempo @@ -5051,6 +5375,10 @@ El servidor respondió con el error: %2 Sincronizado %1 + The directory %1 cannot be part of your sync directory. Please choose another folder. + + + You changed %1 Ha cambiado %1 @@ -5097,7 +5425,7 @@ El servidor respondió con el error: %2 Cancel Cancelar - + Choose if you want to keep the local version, server version, or both. If you choose both, the local file will have a number added to its name. Decida si quiere mantener la versión local, la versión del servidor, o ambas. Si escoge ambas, se le añadirá un número al nombre del archivo local. @@ -5109,6 +5437,28 @@ El servidor respondió con el error: %2 Solve sync conflicts Resolver conflictos de sincronización + + + SesErrorBox + + Error + Error + + + + SesTrayHeader + + Open Nextcloud in browser + + + + Open local or group folders + Abrir carpetas locales o de grupo + + + Website + + ShareDelegate @@ -5116,6 +5466,18 @@ El servidor respondió con el error: %2 Copied! ¡Copiado! + + Copy share link location + + + + Create a new share link + + + + Share options + Opciones de compartir + ShareDetailsPage @@ -5139,6 +5501,10 @@ El servidor respondió con el error: %2 Copy share link Copiar enlace de recurso compartido + + Custom Permissions + + Edit share Editar recurso compartido @@ -5147,6 +5513,10 @@ El servidor respondió con el error: %2 Enter a note for the recipient Ingrese una nota para el destinatario + + Enter the note to recipient + + File drop (upload only) Entrega de archivos (solo carga) @@ -5221,11 +5591,11 @@ El servidor respondió con el error: %2 Sharing is disabled. Compartir está deshabilitado. - + This item cannot be shared. Este ítem no puede ser compartido. - + SyncJournalDb @@ -5239,7 +5609,7 @@ El servidor respondió con el error: %2 Open browser Abrir navegador - + Resolve conflicts Resolver conflictos @@ -5247,7 +5617,7 @@ El servidor respondió con el error: %2 Sync now Sincronizar ahora - + TalkReplyTextField @@ -5269,11 +5639,11 @@ El servidor respondió con el error: %2 Switch to your browser to accept the terms of service Cambie al navegador para aceptar los términos de servicio - + Terms of Service Términos de Servicio - + theme @@ -5296,7 +5666,7 @@ El servidor respondió con el error: %2 Sync is paused La sincronización está en pausa. - + Sync is running Sincronizado en proceso @@ -5316,6 +5686,49 @@ El servidor respondió con el error: %2 Waiting to start syncing Esperando para empezar la sincronización + + + TrayWindowAccountMenu + + Account switcher and settings menu + Menú para cambio de cuentas y ajustes + + + Add account + + + + Current account + Cuenta actual + + + Current account avatar + Avatar de la cuenta actual + + + Current account status is do not disturb + El estado actual de la cuenta es no molestar + + + Current account status is online + El estado actual de la cuenta es en línea + + + Exit + Salir + + + Pause sync for all + + + + Resume sync for all + + + + Settings + + TrayWindowHeader @@ -5327,10 +5740,37 @@ El servidor respondió con el error: %2 Open %1 in browser Abrir %1 en el navegador - + Open local or group folders Abrir carpetas locales o de grupo + + + TrayWindowHeaderBar + + More apps + Más apps + + + Open %1 in browser + Abrir %1 en el navegador + + + Open Nextcloud Talk in browser + Abrir Nextcloud Talk en el navegador + + + Open Nextcloud in browser + + + + Open local or group folders + Abrir carpetas locales o de grupo + + + Website + + UnifiedSearchInputContainer @@ -5407,7 +5847,7 @@ El servidor respondió con el error: %2 Remove account Eliminar cuenta - + Set status Establecer estado @@ -5415,7 +5855,7 @@ El servidor respondió con el error: %2 Switch to account Cambiar a la cuenta - + UserStatusSelector @@ -5426,7 +5866,7 @@ El servidor respondió con el error: %2 Apply Aplicar - + Away Ausente @@ -5470,14 +5910,14 @@ El servidor respondió con el error: %2 What is your status? ¿Cuál es su estado? - + Utility %1 %2 %1 %2 - + %L1 B %L1 B @@ -5539,7 +5979,7 @@ El servidor respondió con el error: %2 %n año(s) - + utility @@ -5566,7 +6006,7 @@ El servidor respondió con el error: %2 Free up local space Liberar espacio local - + Make always available locally Hacer que esté siempre localmente disponible @@ -5582,7 +6022,7 @@ El servidor respondió con el error: %2 There was an error when launching the email client to create a new message. Maybe no default email client is configured? Se ha producido un error al lanzar el cliente de correo electrónico para crear un nuevo mensaje. ¿Puede ser que no haya ningún cliente de correo electrónico configurado? - + ValidateChecksumHeader diff --git a/translations/client_fr.ts b/translations/client_fr.ts index 87b0abf41b7d8..227e3d6452403 100644 --- a/translations/client_fr.ts +++ b/translations/client_fr.ts @@ -6,22 +6,22 @@ In %1 Dans %1 - + Open %1 locally Ouvrir %1 localement - + ActivityItemContent Dismiss Rejeter - + Open file details Ouvrir les détails du fichier - + ActivityList @@ -32,11 +32,11 @@ No activities yet Pas encore d'activité - + Scroll to top Défiler vers le haut - + CallNotificationDialog @@ -51,11 +51,11 @@ Decline Talk call notification Décliner la notification d'appel de Talk - + Talk notification caller avatar Avatar de l'appelant de la notification Talk - + CloudProviderWrapper @@ -90,7 +90,7 @@ Quit sync client Quitter le client de synchro - + Recently changed Modifié récemment @@ -122,7 +122,11 @@ Syncing %1 of %2 (%3 left) Synchronisation de %1 sur %2 (%3 restant) - + + Syncing %1 of %2 (%3 left) + Synchronisation de %1 sur %2 (%3 restant⸱s) + + ConflictDelegate @@ -140,7 +144,7 @@ Account switcher and settings menu Sélecteur de compte et menu de paramètres - + Add account Ajouter un compte @@ -180,7 +184,7 @@ Settings Paramètres - + EditFileLocallyLoadingDialog @@ -212,7 +216,7 @@ Cancel Annuler - + Choose Choisir @@ -220,7 +224,7 @@ Token Encryption Key Chooser Choisir la clé de chiffrement du jeton - + ErrorBox @@ -235,10 +239,14 @@ Activité + Dismiss + Rejeter + + Sharing Partage - + FileDetailsWindow @@ -256,11 +264,11 @@ Materialised items Éléments matérialisés - + Reload Recharger - + FileProviderFastEnumerationSettings @@ -271,6 +279,10 @@ Fast sync will only sync changes in files and folders within folders that have been explored. This can significantly increase responsiveness on initial configuration of virtual files. However, it will cause redundant downloads of files moved to an unexplored folder. La synchronisation rapide va uniquement synchroniser les modifications des fichiers et des dossiers dans les dossiers qui ont été explorés. Ceci peut significativement augmenter la réactivité sur la configuration initiale des fichiers virtuelles. Cependant, cela va causer des téléchargements redondants de fichiers déplacés dans un dossier non exploré. + + Fast sync will only sync changes in files and folders within folders that have been explored. This can significantly increase responsiveness on initial configuration of virtual files. However, it will cause redundant downloads of files moved to an unexplored folder. + + FileProviderFileDelegate @@ -285,7 +297,7 @@ Enable virtual files Activer les fichiers virtuels - + General settings Paramètres généraux @@ -293,7 +305,7 @@ Virtual files settings Paramètres des fichiers virtuels - + FileProviderStorageInfo @@ -304,11 +316,11 @@ Evict local copies … Évincer les copies locales… - + Local storage use Utilisation du stockage local - + FileProviderSyncStatus @@ -321,7 +333,7 @@ macOS may ignore or delay this request. Synchroniser les modifications pour l'environnement VFS. macOS peut ignorer ou retarder cette demande. - + Request sync Synchroniser @@ -329,51 +341,94 @@ macOS may ignore or delay this request. Syncing Synchronisation - + FileSystem Could not remove folder "%1" Impossible de supprimer le dossier "%1" - + Error removing "%1": %2 Erreur lors de la suppression de "%1" : %2 - + Flow2AuthWidget An error occurred while connecting. Please try again. Une erreur s'est produite pendant la connexion. Veuillez ré-essayer. - + Browser Authentication Authentification avec le navigateur Internet + + Copy Link + Copier le lien + Logo Logo + Reopen Browser + + + Switch to your browser to connect your account Basculez sur votre navigateur pour connecter votre compte + + FolderWizardSelectiveSync + + Add Folder Sync + + + + Step 3 of 3: Selektive Synchronisation + + + FolderWizardSourcePage + &Choose + + + &Choose … &Sélectionner … - + + Add Folder Sync + + + Pick a local folder on your computer to sync Sélectionnez un dossier local de votre ordinateur à synchroniser + + Select a folder on your hard drive that should be permanetly connected to your %1. All files and subfolders are automatically uploaded and synchronized + + + + Step 1 of 3: Select local folder + + FolderWizardTargetPage + Add Folder Sync + + + + Both folders are permanently linked and the respective contents are automatically synchronized and updated. + + + Create folder Créer un dossier @@ -381,7 +436,11 @@ macOS may ignore or delay this request. Folders Dossiers - + + Please now select or create a target folder in your %1 where the content should be uploaded and synchronized. + + + Refresh Rafraîchir @@ -389,6 +448,10 @@ macOS may ignore or delay this request. Select a remote destination folder Veuillez sélectionner un dossier distant + + Step 2 of 3: Directory in your %1 + + main.cpp @@ -396,18 +459,18 @@ macOS may ignore or delay this request. %1 requires on a working system tray. If you are running XFCE, please follow <a href="http://docs.xfce.org/xfce/xfce4-panel/systray">these instructions</a>. Otherwise, please install a system tray application such as "trayer" and try again. %1 nécessite une zone de notification système fonctionnelle. Si vous utiliser XFCE, veuillez suivre <a href="http://docs.xfce.org/xfce/xfce4-panel/systray">ces instructions</a>. Sinon, installez une application de la barre d'état système telle que "trayer" et réessayez. - + System Tray not available Zone de notification système non disponible - + MainWindow New activities Nouvelles activités - + Nextcloud desktop main dialog Boîte de dialogue principale du bureau Nextcloud @@ -415,7 +478,7 @@ macOS may ignore or delay this request. Unified search results list Liste des résultats de la recherche unifiée - + nextcloudTheme::aboutInfo() @@ -433,11 +496,11 @@ macOS may ignore or delay this request. Server replied "%1 %2" to "%3 %4" Le serveur a répondu "%1 %2" à "%3 %4" - + Unknown error: network reply was deleted Erreur inconnue : La réponse du réseau a été supprimée - + OCC::Account @@ -471,7 +534,7 @@ Le compte doit-il être importé ? Could not import accounts from legacy client configuration. Impossible d'importer des comptes à partir de l'ancienne configuration client. - + Import Importer @@ -483,7 +546,7 @@ Le compte doit-il être importé ? Skip Ignorer - + OCC::AccountSettings @@ -644,6 +707,10 @@ Souhaitez-vous configurer le chiffrement de bout en bout ? End-to-end encryption mnemonic Phrase secrète du chiffrement de bout en bout + + Expand Memory + + Folder creation failed Échec de la création du dossier @@ -660,7 +727,7 @@ Souhaitez-vous configurer le chiffrement de bout en bout ? No %1 connection configured. Aucune connexion à %1 configurée - + No account configured. Aucun compte configuré. @@ -724,6 +791,10 @@ Souhaitez-vous configurer le chiffrement de bout en bout ? Standard file sync Synchronisation standard des fichiers + + Storage space %1% occupied + + Storage space: … Espace de stockage : ... @@ -765,14 +836,26 @@ Vous prenez vos propres risques. There are folders that were not synchronized because they are external storages: Certains dossiers n'ont pas été synchronisés parce qu'ils sont localisés sur un stockage externe : + + There are folders that were not synchronized because they are external storages: + + There are folders that were not synchronized because they are too big or external storages: Certains dossiers n'ont pas été synchronisés parce qu'ils sont localisés sur un stockage externe ou qu'ils sont de taille trop importante : + There are folders that were not synchronized because they are too big or external storages: + + + There are folders that were not synchronized because they are too big: Certains dossiers n'ont pas été synchronisés parce qu'ils sont de taille trop importante : + + There are folders that were not synchronized because they are too big: + + This account supports end-to-end encryption Ce compte prend en charge le chiffrement de bout en bout. @@ -826,6 +909,10 @@ Wait for the new sync, then encrypt it. You seem to have the Virtual Files feature enabled on this folder. At the moment, it is not possible to implicitly download virtual files that are end-to-end encrypted. To get the best experience with virtual files and end-to-end encryption, make sure the encrypted folder is marked with "Make always available locally". Il semble que la fonctionnalité des Fichiers Virtuels soit activée sur ce dossier. Pour l'instant, il n'est pas possible de télécharger implicitement des fichiers virtuels qui sont chiffrés de bout en bout. Pour bénéficier d'une expérience optimale avec les fichiers virtuels et le chiffrement de bout en bout, assurez-vous que le dossier chiffré soit marqué par l'option "Toujours rendre disponible localement". + + https://wl.hidrive.com/easy/0057 + + OCC::AccountSetupFromCommandLineJob @@ -922,7 +1009,7 @@ Wait for the new sync, then encrypt it. Certificate files (*.p12 *.pfx) Fichiers de certificats (*.p12 *.pfx) - + Certificate password: Mot de passe du certificat : @@ -938,7 +1025,7 @@ Wait for the new sync, then encrypt it. This server probably requires a SSL client certificate. Ce serveur requiert probablement un certificat SSL client. - + OCC::Application @@ -990,7 +1077,7 @@ Wait for the new sync, then encrypt it. There was an error while accessing the configuration file at %1. Please make sure the file can be accessed by your system account. Une erreur est survenue lors de l'accès au fichier de configuration à %1. Merci de vérifier que le fichier est accessible du compte système. - + deleting supprimés @@ -1008,14 +1095,14 @@ Wait for the new sync, then encrypt it. older software version antérieures - + OCC::AuthenticationDialog &Password: &Password: - + &Username: &Username: @@ -1027,7 +1114,7 @@ Wait for the new sync, then encrypt it. Enter username and password for "%1" at %2. Saisir le nom d’utilisateur et le mot de passe pour « %1 » sur %2. - + OCC::BasePropagateRemoteDeleteEncrypted @@ -1077,7 +1164,7 @@ Wait for the new sync, then encrypt it. Restoration failed: %1 Échec de la restauration : %1 - + The file %1 is currently in use Le fichier %1 est en cours d'utilisation @@ -1085,7 +1172,7 @@ Wait for the new sync, then encrypt it. The local file was removed during sync. Le fichier local a été supprimé pendant la synchronisation. - + OCC::CaseClashConflictSolver @@ -1112,11 +1199,11 @@ Wait for the new sync, then encrypt it. Filename contains trailing spaces. Le nom de fichier contient des espaces de fin. - + You don't have the permission to rename this file. Please ask the author of the file to rename it. Vous n'avez pas les permissions de renommer ce fichier. Veuillez demander à son auteur de le renommer. - + OCC::CaseClashFilenameDialog @@ -1147,7 +1234,7 @@ Wait for the new sync, then encrypt it. Filename contains illegal characters: %1 Le nom du fichier contient des caractères illégaux : %1 - + Filename contains leading and trailing spaces. Le nom de fichier contient des espaces de début et de fin. @@ -1203,7 +1290,7 @@ Wait for the new sync, then encrypt it. today aujourd'hui - + OCC::CleanupPollsJob @@ -1221,7 +1308,7 @@ Wait for the new sync, then encrypt it. Enter E2E passphrase Entrez la phrase secrète E2E - + Input PIN code Please keep it short and shorter than "Enter Certificate USB Token PIN:" Saisir le code PIN @@ -1238,7 +1325,7 @@ Wait for the new sync, then encrypt it. Please enter your end-to-end encryption passphrase:<br><br>Username: %2<br>Account: %3<br> Veuillez entrer votre phrase de passe de chiffrement de bout en bout :<br><br>Nom d'utilisateur : %2<br>Compte : %3<br> - + OCC::ConflictDialog @@ -1277,7 +1364,7 @@ Wait for the new sync, then encrypt it. Keep server version Conserver la version serveur - + Local version Version locale @@ -1305,14 +1392,14 @@ Wait for the new sync, then encrypt it. today aujourd'hui - + OCC::ConflictSolver Confirm deletion Confirmer la suppression - + Do you want to delete the directory <i>%1</i> and all its contents permanently? Voulez-vous supprimer le dossier <i>%1</i> et tout son contenu définitivement ? @@ -1332,7 +1419,7 @@ Wait for the new sync, then encrypt it. %1 - + OCC::ConnectionValidator @@ -1355,22 +1442,76 @@ Wait for the new sync, then encrypt it. The provided credentials are not correct Les informations d'identification fournies ne sont pas correctes - + Timeout Délai d'attente - + + + OCC::DataProtectionPage + + Agree + + + + Form + Formulaire + + + Settings + Paramètres + + + This application uses tracking technologies. By clicking on Agree, you accept the processing of your anonymized data. You can adjust your choices at any time via the settings. <br/> <br/>Information on data processing and more can be found in our <a href='https://wl.hidrive.com/easy/0005'>privacy policy</a>. + + + + + OCC::DataProtectionSettingsPage + + Back + + + + Form + Formulaire + + + Necessary data + + + + Required to ensure that the software can be used as expected + + + + Save Settings + + + + Send anonymous use + + + + This helps us to optimize the software and to better identify system crashes and unexpected errors. + + + + We collect anonymized data to optimize our app. We use software solutions from various partners for this purpose. We want to give you full transparency and freedom of choice regarding the collection and processing of your anonymized usage. You can change your settings at any time under the menu item Data Protection. + + + OCC::DiscoveryPhase Error while canceling deletion of %1 Erreur lors de l'annulation de la suppression de %1 - + Error while canceling deletion of a file Erreur lors de l'annulation de la suppression d'un fichier - + OCC::DiscoverySingleDirectoryJob @@ -1381,11 +1522,11 @@ Wait for the new sync, then encrypt it. Encrypted metadata setup error: initial signature from server is empty. Erreur de configuration des métadonnées chiffrées: la signature initiale du serveur est vide. - + Server error: PROPFIND reply is not XML formatted! Erreur du serveur : La réponse PROPFIND n'est pas au format XML ! - + OCC::DiscoverySingleLocalDirectoryJob @@ -1404,11 +1545,11 @@ Wait for the new sync, then encrypt it. Error while reading directory %1 Erreur de lecture du dossier %1 - + Filename encoding is not valid L’encodage du nom de fichier n’est pas valide - + OCC::EditLocallyJob @@ -1451,7 +1592,7 @@ Wait for the new sync, then encrypt it. File %1 could not be locked. Impossible de verrouiller le fichier %1. - + File %1 now locked. Fichier %1 désormais verrouillé. @@ -1471,7 +1612,7 @@ Wait for the new sync, then encrypt it. Server error: PROPFIND reply is not XML formatted! Erreur de serveur : La réponse de PROPFIND n'est pas formatée en XML ! - + OCC::EditLocallyManager @@ -1489,7 +1630,7 @@ Wait for the new sync, then encrypt it. An error occurred trying to verify the request to edit locally. Une erreur est survenue, tentative de vérification de la requête pour éditer localement. - + Could not find an account for local editing. Impossible de trouver un compte pour l'édition locale. @@ -1509,7 +1650,7 @@ Wait for the new sync, then encrypt it. Please try again. Merci de réessayer. - + OCC::EncryptedFolderMetadataHandler @@ -1607,7 +1748,7 @@ Cela peut être un problème avec vos bibliothèques OpenSSL. Could not parse the JSON returned from the server: <br><em>%1</em> Impossible d'analyser le JSON renvoyé par le serveur : <br><em>%1</em> - + Error returned from the server: <em>%1</em> Erreur renvoyée par le serveur : <em>%1</em> @@ -1627,14 +1768,18 @@ Cela peut être un problème avec vos bibliothèques OpenSSL. There was an error accessing the "token" endpoint: <br><em>%1</em> Une erreur est survenue en accédant au "jeton" : <br><em>%1</em> - + OCC::Flow2AuthWidget Copy Link Copier le lien - + + Error + Erreur + + Link copied to clipboard. Lien copié dans le presse-papier @@ -1651,6 +1796,10 @@ Cela peut être un problème avec vos bibliothèques OpenSSL. Démarrage de l'autorisation + Switch to your browser to connect your account + Basculez sur votre navigateur pour connecter votre compte + + Unable to open the Browser, please copy the link to your Browser. Impossible d'ouvrir le navigateur, veuillez copier le lien dans votre navigateur Web. @@ -1761,6 +1910,10 @@ Cela peut être un problème avec vos bibliothèques OpenSSL. + A folder from an external storage has been added. + + + A folder has surpassed the set folder size limit of %1MB: %2. %3 Un dossier a dépassé la taille limite fixée de %1 Mo : %2. @@ -1788,6 +1941,10 @@ Vous pouvez également restaurer tous les fichiers supprimés en les télécharg Un nouveau dossier de taille supérieure à %1 Mo a été ajouté : %2. + + A new folder larger than %1 MB has been added: %2. + + Changes in synchronized folders could not be tracked reliably. @@ -1836,7 +1993,7 @@ Cela signifie que le client de bureau ne va pas téléverser immédiatement les Restore Files from Server Restaurer des fichiers à partir du serveur - + Restore Files to Server Restaurer les fichiers sur le serveur @@ -1872,10 +2029,14 @@ Cela signifie que le client de bureau ne va pas téléverser immédiatement les OCC::FolderCreationDialog + %1 Create new folder + + + Could not create a folder! Check your write permissions. Impossible de créer le dossier ! Veuillez vérifier vos permissions d’écriture. - + Create new folder Créer un nouveau dossier @@ -1898,14 +2059,22 @@ Cela signifie que le client de bureau ne va pas téléverser immédiatement les %1 (Sync is paused) %1 (Synchronisation en pause) - + (backup %1) (sauvegarde %1) + (backup %1) + + + (backup) (sauvegarde) + + (backup) + + An old sync journal "%1" was found, but could not be removed. Please make sure that no application is currently using it. Un ancien fichier journal "%1" a été trouvé, mais ne peut être supprimé. Veuillez vous assurer qu’aucune application ne l'utilise en ce moment. @@ -2017,6 +2186,10 @@ Pour les utilisateurs avancés: ce problème peut aussi venir de plusieurs fichi OCC::FolderStatusDelegate + + Add Folder Sync + + Add Folder Sync Connection Ajouter une synchronisation de dossier @@ -2025,6 +2198,10 @@ Pour les utilisateurs avancés: ce problème peut aussi venir de plusieurs fichi File Fichier + + Synchronize any other local folder with your %1 + + OCC::FolderStatusModel @@ -2106,7 +2283,7 @@ Pour les utilisateurs avancés: ce problème peut aussi venir de plusieurs fichi Preparing to sync … Préparation de la synchronisation ... - + Signed out Session fermée @@ -2154,7 +2331,7 @@ Pour les utilisateurs avancés: ce problème peut aussi venir de plusieurs fichi ↓ %1/s ↓ %1/s - + OCC::FolderWatcher @@ -2183,6 +2360,14 @@ Pour les utilisateurs avancés: ce problème peut aussi venir de plusieurs fichi OCC::FolderWizardLocalPath + Add Folder Sync + + + + Choose + Choisir + + Click to select a local folder to sync. Cliquez pour choisir un dossier local à synchroniser. @@ -2190,17 +2375,33 @@ Pour les utilisateurs avancés: ce problème peut aussi venir de plusieurs fichi Enter the path to the local folder. Entrez le chemin du dossier local. + + Select a folder on your hard drive that should be permanetly connected to your %1. All files and subfolders are automatically uploaded and synchronized + + Select the source folder Sélectionnez le dossier source - + + Step 1 of 3: Select local folder + + + OCC::FolderWizardRemotePath + + Add Folder Sync + + Authentication failed accessing %1 Erreur d'authentification lors de l'accès à %1 + + Both folders are permanently linked and the respective contents are automatically synchronized and updated. + + Choose this to sync the entire account Sélectionnez ceci pour synchroniser l'ensemble du compte @@ -2210,6 +2411,10 @@ Pour les utilisateurs avancés: ce problème peut aussi venir de plusieurs fichi Créer un dossier distant + Create folder + Créer un dossier + + Enter the name of the new folder to be created below "%1": Entrez le nom du nouveau dossier à créer dans "%1" : @@ -2229,7 +2434,19 @@ Pour les utilisateurs avancés: ce problème peut aussi venir de plusieurs fichi Please choose a different location. %1 is already being synced to %2. Veuillez choisir un emplacement différent. %1 est déjà synchronisé avec %2. - + + Please now select or create a target folder in your %1 where the content should be uploaded and synchronized. + + + + Refresh + Rafraîchir + + + Step 2 of 3: Directory in your %1 + + + OCC::FolderWizardSelectiveSync @@ -2237,6 +2454,14 @@ Pour les utilisateurs avancés: ce problème peut aussi venir de plusieurs fichi (expérimental) + Add Folder Sync + + + + Step 3 of 3: Selektive Synchronisation + + + Use virtual files instead of downloading content immediately %1 Utiliser les fichiers virtuels au lieu de télécharger le contenu immédiatement %1 @@ -2244,7 +2469,7 @@ Pour les utilisateurs avancés: ce problème peut aussi venir de plusieurs fichi Virtual files are not supported at the selected location Les fichiers virtuels ne sont pas pris en charge à l'emplacement sélectionné - + Virtual files are not supported for Windows partition roots as local folder. Please choose a valid subfolder under drive letter. Vous ne pouvez pas définir la racine d'une partition Windows pour votre dossier local. Veuillez choisir un (sous)dossier de la partition. @@ -2319,6 +2544,10 @@ La rétrogradation des versions n'est pas possible immédiatement: passer d Create Debug Archive Créer une archive de débogage + + Data Protection + + Debug Archive Created Archive de débogage créée @@ -2327,7 +2556,7 @@ La rétrogradation des versions n'est pas possible immédiatement: passer d Debug archive is created at %1 Archive de débogage créée à %1 - + Desktop client x.x.x Client de bureau x.x.x @@ -2356,18 +2585,42 @@ La rétrogradation des versions n'est pas possible immédiatement: passer d Trailing part of "Ask confirmation before syncing folder larger than" Mo + + More Information + + Move removed files to trash Déplacer les fichiers supprimés vers la corbeille + + Necessary data + + Notify when synchronised folders grow larger than specified limit Notifier lorsque les dossiers synchronisés dépassent la limite spécifiée + + Open Source Software + + + + Privacy Policy + + + + Required to ensure that the software can be used as expected + + S&how crash reporter Affic&her le rapport d'incident + + Send anonymous use + + Server notifications that require attention. Notifications du serveur requérant votre attention. @@ -2392,6 +2645,10 @@ La rétrogradation des versions n'est pas possible immédiatement: passer d Show call notification dialogs. Montre les fenêtres de notification d'appel. + + Show call notifications + + Show chat notification dialogs. Afficher les boîtes de dialogue de notification de chat. @@ -2409,10 +2666,18 @@ La rétrogradation des versions n'est pas possible immédiatement: passer d - stable: contient des versions testées et considérées comme fiables + + This helps us to optimize the software and to better identify system crashes and unexpected errors. + + Update channel Canal de mise à jour + + Updates + + Usage Documentation Documentation d'utilisation @@ -2421,6 +2686,10 @@ La rétrogradation des versions n'est pas possible immédiatement: passer d Use &Monochrome Icons Utiliser les icônes &monochromes + + Use &monochrome icons + + You cannot disable autostart because system-wide autostart is enabled. Vous ne pouvez pas désactiver le démarrage automatique parce que le démarrage automatique à l'échelle du système est activé. @@ -2441,6 +2710,22 @@ La rétrogradation des versions n'est pas possible immédiatement: passer d enterprise enterprise + + https://wl.hidrive.com/easy/0004 + + + + https://wl.hidrive.com/easy/0005 + + + + https://wl.hidrive.com/easy/0006 + + + + https://wl.hidrive.com/easy/0007 + + seconds (if <a href="https://github.com/nextcloud/notify_push">Client Push</a> is unavailable) secondes (si le Client Push n'est pas disponible) @@ -2456,7 +2741,7 @@ La rétrogradation des versions n'est pas possible immédiatement: passer d Connection Timeout Délai d'attente de connexion dépassé - + No E-Tag received from server, check Proxy/Gateway Aucun E-Tag reçu du serveur, vérifiez le proxy / la passerelle @@ -2472,7 +2757,7 @@ La rétrogradation des versions n'est pas possible immédiatement: passer d We received an unexpected download Content-Length. Nous avons reçu un téléchargement de Contenu-Longeur inattendu - + OCC::GetOrCreatePublicLinkShare @@ -2483,7 +2768,7 @@ La rétrogradation des versions n'est pas possible immédiatement: passer d %1 - + Password for share required Mot de passe requis @@ -2495,14 +2780,14 @@ La rétrogradation des versions n'est pas possible immédiatement: passer d Sharing error Erreur de partage - + OCC::HttpCredentialsGui <a href="%1">Click here</a> to request an app password from the web interface. <a href="%1">Cliquez ici</a> pour demander un mot de passe d'application depuis l'interface web. - + Enter Password Saisissez le mot de passe @@ -2514,7 +2799,7 @@ La rétrogradation des versions n'est pas possible immédiatement: passer d Reading from keychain failed with error: "%1" La lecture à partir du trousseau a échoué avec l'erreur : "%1" - + OCC::IgnoreListEditor @@ -2552,7 +2837,7 @@ La rétrogradation des versions n'est pas possible immédiatement: passer d Add a new ignore pattern: Ajouter un nouveau modèle d'exclusion : - + Allow Deletion Autoriser la suppression @@ -2572,6 +2857,10 @@ Items where deletion is allowed will be deleted if they prevent a directory from Les éléments dont la suppression est autorisée seront supprimés s'ils empêchent la suppression d'un répertoire. Cette fonction est utile pour les métadonnées. + Ignore Pattern + + + Pattern Modèle @@ -2602,7 +2891,7 @@ Les éléments dont la suppression est autorisée seront supprimés s'ils e Could not rename local file. %1 Impossible de renommer le dossier local %1 - + Error Erreur @@ -2682,7 +2971,7 @@ Les éléments dont la suppression est autorisée seront supprimés s'ils e You don't have the permission to rename this file. Please ask the author of the file to rename it. Vous n'avez pas la permission de renommer ce fichier. Veuillez demander à son auteur de le renommer. - + OCC::LegalNotice @@ -2693,7 +2982,7 @@ Les éléments dont la suppression est autorisée seront supprimés s'ils e <p>Licensed under the GNU General Public License (GPL) Version 2.0 or any later version.</p> <p>Sous licence GNU General Public License (GPL) Version 2.0 ou supérieure.</p> - + Close Fermer @@ -2701,7 +2990,7 @@ Les éléments dont la suppression est autorisée seront supprimés s'ils e Legal notice Notice légale - + OCC::LogBrowser @@ -2716,7 +3005,7 @@ Les éléments dont la suppression est autorisée seront supprimés s'ils e Open folder Ouvrir le dossier - + The client can write debug logs to a temporary folder. These logs are very helpful for diagnosing problems. Since log files can get large, the client will start a new one for each sync run and compress older ones. It will also delete log files after a couple of hours to avoid consuming too much disk space. If enabled, logs will be written to %1 @@ -2730,18 +3019,18 @@ Note that using any logging command line options will override this setting.Ce paramètre persiste lors des redémarrages du client. Notez que l'utilisation de toute option de ligne de commande de journalisation remplacera ce paramètre. - + OCC::Logger <nobr>File "%1"<br/>cannot be opened for writing.<br/><br/>The log output <b>cannot</b> be saved!</nobr> <nobr>Le fichier "%1"<br/>ne peut pas être ouvert en écriture.<br/><br/>Le fichier journal <b>ne peut pas</b> être sauvegardé !</nobr> - + Error Erreur - + OCC::Mac::FileProviderEditLocallyJob @@ -2835,7 +3124,7 @@ Notez que l'utilisation de toute option de ligne de commande de journalisat SOCKS5 proxy Proxy SOCKS5 - + Upload Bandwidth Bande passante d'émission @@ -2851,7 +3140,7 @@ Notez que l'utilisation de toute option de ligne de commande de journalisat Username for proxy server Nom d’utilisateur pour le serveur proxy - + OCC::NSISUpdater @@ -2870,7 +3159,7 @@ Notez que l'utilisation de toute option de ligne de commande de journalisat Get update Télécharger la version - + New Version Available Nouvelle version disponible @@ -2890,7 +3179,7 @@ Notez que l'utilisation de toute option de ligne de commande de journalisat Update manually Mettre à jour manuellement - + OCC::OCUpdater @@ -2941,11 +3230,11 @@ Notez que l'utilisation de toute option de ligne de commande de journalisat Update Check Recherche de mise à jour - + Update status is unknown: Did not check for new updates. L'état du processus de mise à jour est inconnu. Impossible de vérifier la présence de mises à jour. - + OCC::OwncloudAdvancedSetupPage @@ -2973,7 +3262,7 @@ Notez que l'utilisation de toute option de ligne de commande de journalisat In Finder's "Locations" sidebar section Dans la section « Emplacements » de la barre latérale du Finder - + Local Sync Folder Dossier de synchronisation local @@ -3001,14 +3290,14 @@ Notez que l'utilisation de toute option de ligne de commande de journalisat Warning: The local folder is not empty. Pick a resolution! Avertissement : Le dossier local n'est pas vide. Choisissez une option. - + OCC::OwncloudConnectionMethodDialog <html><head/><body><p>Failed to connect to the secure server address <em>%1</em>. How do you wish to proceed?</p></body></html> <html><head/><body><p>Impossible de se connecter à l'adresse sécurisée <em>%1</em>. Que souhaitez-vous faire ?</p></body></html> - + <html><head/><body><p>Failed to connect to the secure server address specified. How do you wish to proceed?</p></body></html> <html><head/><body><p>Impossible de se connecter au serveur via l'adresse sécurisée indiquée. Que souhaitez-vous faire ?</p></body></html> @@ -3028,14 +3317,14 @@ Notez que l'utilisation de toute option de ligne de commande de journalisat Select a different URL Choisir une URL différente - + OCC::ownCloudGui %1 (%2, %3) %1 (%2, %3) - + %1: %2 Example text: "Nextcloud: Syncing 25MB (3 minutes left)" (%1 is the folder name to be synced, %2 a status message for that folder) %1: %2 @@ -3100,7 +3389,7 @@ Notez que l'utilisation de toute option de ligne de commande de journalisat macOS VFS for %1: Sync is running. macOS VFS pour %1: Synchronisation en cours. - + OCC::OwncloudHttpCredsPage @@ -3133,7 +3422,7 @@ Notez que l'utilisation de toute option de ligne de commande de journalisat Could not load certificate. Maybe wrong password? Impossible de charger le certificat. Vérifiez le mot de passe saisi. - + Server address does not seem to be valid L'adresse du serveur ne semble pas être valide @@ -3142,7 +3431,7 @@ Notez que l'utilisation de toute option de ligne de commande de journalisat %1 will be replaced with the application name Adresse URL visible dans la barre d'adresse de votre navigateur Web lorsque vous êtes connecté à %1. - + OCC::OwncloudSetupWizard @@ -3153,7 +3442,7 @@ Notez que l'utilisation de toute option de ligne de commande de journalisat <font color="green"><b>Local sync folder %1 successfully created!</b></font> <font color="green"><b>Dossier de synchronisation local %1 créé avec succès !</b></font> - + <font color="green">Successfully connected to %1: %2 version %3 (%4)</font><br/><br/> <font color="green">Connecté avec succès à %1 : %2 version %3 (%4)</font><br/><br/> @@ -3269,7 +3558,7 @@ Notez que l'utilisation de toute option de ligne de commande de journalisat failed. échoué. - + OCC::OwncloudWizard @@ -3296,7 +3585,7 @@ Notez que l'utilisation de toute option de ligne de commande de journalisat Stay safe Restez en sécurité - + When the "virtual files" mode is enabled no files will be downloaded initially. Instead, a tiny "%1" file will be created for each file that exists on the server. The contents can be downloaded by running these files or by using their context menu. The virtual files mode is mutually exclusive with selective sync. Currently unselected folders will be translated to online-only folders and your selective sync settings will be reset. @@ -3312,7 +3601,7 @@ Le passage à ce mode annulera toute synchronisation en cours. Il s'agit d'un nouveau mode expérimental. Si vous décidez de l'utiliser, veuillez signaler tout problème qui surviendrait. - + OCC::PasswordInputDialog @@ -3464,7 +3753,7 @@ Il s'agit d'un nouveau mode expérimental. Si vous décidez de l' Server replied with an error while reading directory "%1" : %2 Le serveur a répondu avec une erreur lors de la lecture du dossier "%1" : %2 - + Server reported no %1 Le serveur n'a signalé aucun %1 @@ -3496,7 +3785,7 @@ Il s'agit d'un nouveau mode expérimental. Si vous décidez de l' size taille - + OCC::PropagateDirectory @@ -3515,7 +3804,7 @@ Il s'agit d'un nouveau mode expérimental. Si vous décidez de l' File is currently in use Le fichier est actuellement en cours d'utilisation - + The folder %1 cannot be made read-only: %2 Le dossier %1 ne peut pas être mis en lecture seule : %2 @@ -3523,7 +3812,7 @@ Il s'agit d'un nouveau mode expérimental. Si vous décidez de l' unknown exception Exception inconnue - + OCC::PropagateDownloadFile @@ -3558,7 +3847,7 @@ Il s'agit d'un nouveau mode expérimental. Si vous décidez de l' File has changed since discovery Le fichier a changé depuis sa découverte - + File was deleted from server Le fichier a été supprimé du serveur @@ -3582,7 +3871,7 @@ Il s'agit d'un nouveau mode expérimental. Si vous décidez de l' The file could not be downloaded completely. Le fichier n'a pas pu être téléchargé intégralement. - + OCC::PropagateItemJob @@ -3612,7 +3901,7 @@ Il s'agit d'un nouveau mode expérimental. Si vous décidez de l' The file %1 is currently in use Le fichier %1 est en cours d'utilisation - + The folder %1 cannot be made read-only: %2 Le dossier %1 ne peut être rendu en lecture seule : %2 @@ -3624,14 +3913,14 @@ Il s'agit d'un nouveau mode expérimental. Si vous décidez de l' unknown exception Exception inconnue - + OCC::PropagateLocalRemove Could not delete file record %1 from local DB Impossible de supprimer l'enregistrement du fichier %1 depuis la base de données locale - + Could not remove %1 because of a local file name clash Impossible de retirer %1 en raison d'un conflit de nom de fichier local @@ -3639,14 +3928,14 @@ Il s'agit d'un nouveau mode expérimental. Si vous décidez de l' Temporary error when removing local item removed from server. Erreur temporaire lors de la suppression d'un élément local supprimé du serveur. - + OCC::PropagateLocalRename Could not delete file record %1 from local DB Impossible de récupérer le fichier %1 depuis la base de données locale - + Could not get file %1 from local DB Impossible de récupérer le fichier %1 depuis la base de données locale @@ -3678,18 +3967,18 @@ Il s'agit d'un nouveau mode expérimental. Si vous décidez de l' The file %1 is currently in use Le fichier %1 est en cours d'utilisation - + OCC::PropagateRemoteDelete Could not delete file record %1 from local DB Impossible de récupérer le fichier %1 depuis la base de données locale - + Wrong HTTP code returned by server. Expected 204, but received "%1 %2". Le code HTTP retourné par le serveur n'est pas valide. La valeur attendue est 204 mais la valeur reçue est "%1 %2". - + OCC::PropagateRemoteDeleteEncryptedRootFolder @@ -3711,11 +4000,11 @@ Il s'agit d'un nouveau mode expérimental. Si vous décidez de l' The file %1 is currently in use Le fichier %1 est en cours d'utilisation - + Wrong HTTP code returned by server. Expected 201, but received "%1 %2". Le code HTTP retourné par le serveur n'est pas valide. La valeur attendue est 201 mais la valeur reçue est "%1 %2". - + OCC::PropagateRemoteMove @@ -3742,7 +4031,7 @@ Il s'agit d'un nouveau mode expérimental. Si vous décidez de l' Error writing metadata to the database Erreur à l'écriture des métadonnées dans la base de données - + The file %1 is currently in use Le fichier %1 est en cours d'utilisation @@ -3750,7 +4039,7 @@ Il s'agit d'un nouveau mode expérimental. Si vous décidez de l' Wrong HTTP code returned by server. Expected 201, but received "%1 %2". Le code HTTP retourné par le serveur n'est pas valide. La valeur attendue est 201 mais la valeur reçue est "%1 %2". - + OCC::PropagateUploadFileCommon @@ -3777,7 +4066,7 @@ Il s'agit d'un nouveau mode expérimental. Si vous décidez de l' File Removed (start upload) %1 Fichier supprimé (début du téléversement) %1 - + Local file changed during sync. Fichier local modifié pendant la synchronisation. @@ -3797,7 +4086,7 @@ Il s'agit d'un nouveau mode expérimental. Si vous décidez de l' Upload of %1 exceeds the quota for the folder Le téléversement de %1 provoque un dépassement du quota du dossier - + OCC::PropagateUploadFileNG @@ -3808,7 +4097,7 @@ Il s'agit d'un nouveau mode expérimental. Si vous décidez de l' Missing ETag from server L'information Etag de modification de fichier est manquante sur le serveur - + Missing File ID from server L'identifiant de fichier est manquant sur le serveur @@ -3824,7 +4113,7 @@ Il s'agit d'un nouveau mode expérimental. Si vous décidez de l' Unexpected return code from server (%1) Le serveur a retourné un code inattendu (%1) - + OCC::PropagateUploadFileV1 @@ -3850,7 +4139,7 @@ Il s'agit d'un nouveau mode expérimental. Si vous décidez de l' Password: Mot de passe : - + Proxy authentication required Authentification requise sur le proxy @@ -3866,7 +4155,7 @@ Il s'agit d'un nouveau mode expérimental. Si vous décidez de l' Username: Nom d’utilisateur : - + OCC::SelectiveSyncDialog @@ -3880,7 +4169,7 @@ Il s'agit d'un nouveau mode expérimental. Si vous décidez de l' An error occurred while loading the list of sub folders. Une erreur est survenue lors du chargement de la liste des sous-dossiers. - + Deselect remote folders you do not wish to synchronize. Désélectionnez les sous-dossiers distants que vous ne souhaitez pas synchroniser. @@ -3900,7 +4189,7 @@ Il s'agit d'un nouveau mode expérimental. Si vous décidez de l' Size Taille - + OCC::ServerNotificationHandler @@ -3908,6 +4197,21 @@ Il s'agit d'un nouveau mode expérimental. Si vous décidez de l' Répondre + + OCC::sesSnackBar + + Error + Erreur + + + Success + + + + Warning + Attention + + OCC::SettingsDialog @@ -3919,7 +4223,7 @@ Il s'agit d'un nouveau mode expérimental. Si vous décidez de l' Account Compte - + General Général @@ -3928,6 +4232,10 @@ Il s'agit d'un nouveau mode expérimental. Si vous décidez de l' Réseau + New account + + + Settings Paramètres @@ -3939,7 +4247,7 @@ Il s'agit d'un nouveau mode expérimental. Si vous décidez de l' sharee (shareWithAdditionalInfo) %1 (%2) - + Global search results Résultats de la recherche globale @@ -3951,7 +4259,7 @@ Il s'agit d'un nouveau mode expérimental. Si vous décidez de l' Search globally Rechercher globalement - + OCC::ShareManager @@ -3973,7 +4281,7 @@ Il s'agit d'un nouveau mode expérimental. Si vous décidez de l' Could not find local folder for %1 Impossible de trouver le dossier local pour %1 - + Internal link Lien interne @@ -3997,7 +4305,7 @@ Il s'agit d'un nouveau mode expérimental. Si vous décidez de l' Today Aujourd'hui - + OCC::SocketApi @@ -4088,7 +4396,7 @@ Le serveur a répondu avec l'erreur : %2 Open in browser Ouvrir dans le navigateur - + Resharing this file is not allowed Repartager ce fichier est interdit @@ -4124,7 +4432,7 @@ Le serveur a répondu avec l'erreur : %2 Unlock file Déverrouiller le fichier - + OCC::SslButton @@ -4221,12 +4529,20 @@ Le serveur a répondu avec l'erreur : %2 Cette connexion n'est PAS sécurisée car elle n'est pas chiffrée. + + This connection is NOT secure as it is not encrypted. + + This connection is encrypted using %1 bit %2. Cette connexion est chiffrée en utilisant %1 bit %2. + + This connection is encrypted using %1 bit %2. + + OCC::SslErrorDialog @@ -4270,7 +4586,7 @@ Le serveur a répondu avec l'erreur : %2 Issuer: %1 Émetteur : %1 - + Organization: %1 Organisation : %1 @@ -4290,7 +4606,7 @@ Le serveur a répondu avec l'erreur : %2 with Certificate %1 avec certificat %1 - + OCC::SyncEngine @@ -4301,7 +4617,7 @@ Le serveur a répondu avec l'erreur : %2 Cannot open the sync journal Impossible d'ouvrir le journal de synchronisation - + Could not set file record to local DB: %1 Impossible de définir l'enregistrement du fichier dans la base de données locale : %1 @@ -4350,7 +4666,7 @@ Le serveur a répondu avec l'erreur : %2 Using virtual files with suffix, but suffix is not set Utilisation de fichiers virtuels avec suffixe, mais le suffixe n'est pas défini - + OCC::SyncStatusSummary @@ -4444,18 +4760,18 @@ Le serveur a répondu avec l'erreur : %2 Resume sync for all Relancer toutes les synchros - + Settings Paramètres - + OCC::TermsOfServiceCheckWidget Copy Link Copier le lien - + Link copied to clipboard. Lien copié dans le presse-papiers. @@ -4471,7 +4787,7 @@ Le serveur a répondu avec l'erreur : %2 Waiting for terms to be accepted En attente de l'acceptation des conditions - + OCC::Theme @@ -4487,6 +4803,10 @@ Le serveur a répondu avec l'erreur : %2 <p>This release was supplied by %1.</p> <p>Cette version a été fournie par %1.</p> + + easy/0118 + + OCC::UnifiedSearchResultsListModel @@ -4502,18 +4822,18 @@ Le serveur a répondu avec l'erreur : %2 Search has failed for '%1'. Error: %2 La recherche de '%1' a échoué. Erreur: %2 - + Search has failed for '%2'. La recherche de '%2' a échoué. - + OCC::UpdateE2eeFolderMetadataJob Failed to finalize item. Impossible de finaliser l'item. - + Failed to unlock encrypted folder. Échec du déverrouillage du dossier chiffré. @@ -4521,7 +4841,7 @@ Le serveur a répondu avec l'erreur : %2 Failed to update folder metadata. Échec du téléversement du dossier des métadonnées. - + OCC::UpdateE2eeFolderUsersMetadataJob @@ -4566,7 +4886,7 @@ Le serveur a répondu avec l'erreur : %2 Open Nextcloud Talk in browser Ouvrir Nextcloud Discussion dans le navigateur - + Rename file Renommer le fichier @@ -4582,7 +4902,7 @@ Le serveur a répondu avec l'erreur : %2 Trigger the migration Déclencher la migration - + OCC::UserModel @@ -4593,7 +4913,7 @@ Le serveur a répondu avec l'erreur : %2 Cancel Annuler - + Confirm Account Removal Confirmer le retrait du compte @@ -4601,7 +4921,7 @@ Le serveur a répondu avec l'erreur : %2 Remove connection Supprimer la connexion - + OCC::UserStatusSelectorModel @@ -4611,7 +4931,7 @@ Le serveur a répondu avec l'erreur : %2 %1 jours - + %1 hours %1 heures @@ -4685,7 +5005,7 @@ Le serveur a répondu avec l'erreur : %2 Today Aujourd'hui - + OCC::Vfs @@ -4696,18 +5016,18 @@ Le serveur a répondu avec l'erreur : %2 Please choose a different location. %1 is a network drive. It doesn't support virtual files. Veuillez choisir un emplacement différent. %1 est un lecteur réseau. Il ne prend pas en charge les fichiers virtuels. - + Please choose a different location. %1 isn't a NTFS file system. It doesn't support virtual files. Veuillez choisir un emplacement différent. %1 n'est pas un système de fichiers NTFS. Il ne prend pas en charge les fichiers virtuels. - + OCC::VfsDownloadErrorDialog %1 could not be downloaded. %1 ne peut pas être téléchargé. - + > More details > Plus de détails @@ -4731,7 +5051,7 @@ Le serveur a répondu avec l'erreur : %2 could not be downloaded ne peut pas être téléchargé - + OCC::VfsSuffix @@ -4760,10 +5080,14 @@ Le serveur a répondu avec l'erreur : %2 OCC::WebFlowCredentials + <b>You have been logged out of your account %1 at %2. Please login again.</b> + + + You have been logged out of your account %1 at %2. Please login again. Vous avez été déconnecté de votre compte %1 à %2. Merci de vous reconnecter. - + OCC::WelcomePage @@ -4778,7 +5102,7 @@ Le serveur a répondu avec l'erreur : %2 Host your own server Hébergez votre propre serveur - + Keep your data secure and under your control Gardez vos données en sécurité et sous votre contrôle @@ -4798,14 +5122,14 @@ Le serveur a répondu avec l'erreur : %2 Sign up with provider S'inscrire auprès d'un fournisseur - + OwncloudAdvancedSetupPage &Local Folder &Dossier local - + <html><head/><body><p>If this box is checked, existing content in the local folder will be erased to start a clean sync from the server.</p><p>Do not check this if the local content should be uploaded to the servers folder.</p></body></html> <html><head/><body><p>Si cette case est cochée, le contenu existant du dossier local sera supprimé pour démarrer une synchronisation propre depuis le serveur.</p><p>Ne pas cocher si le contenu local doit être téléversé vers le serveur.</p></body></html> @@ -4858,18 +5182,18 @@ Le serveur a répondu avec l'erreur : %2 Username Nom d’utilisateur - + OwncloudHttpCredsPage &Password &Mot de passe - + &Username &Nom d’utilisateur - + OwncloudSetupPage @@ -4963,7 +5287,7 @@ Le serveur a répondu avec l'erreur : %2 Updating end-to-end encryption metadata Mise à jour des métadonnées de chiffrement de bout en bout - + Updating local metadata Mise à jour des méta-données locales @@ -4983,7 +5307,7 @@ Le serveur a répondu avec l'erreur : %2 Virtual file created Fichier virtuel créé - + QObject @@ -5040,7 +5364,7 @@ Le serveur a répondu avec l'erreur : %2 Paths beginning with '#' character are not supported in VFS mode. Les chemins commençant par le caractère « # » ne sont pas pris en charge dans le mode VFS. - + Some time ago Il y a quelque temps @@ -5049,6 +5373,10 @@ Le serveur a répondu avec l'erreur : %2 %1 a été synchronisé + The directory %1 cannot be part of your sync directory. Please choose another folder. + + + You changed %1 Vous avez modifié %1 @@ -5095,7 +5423,7 @@ Le serveur a répondu avec l'erreur : %2 Cancel Annuler - + Choose if you want to keep the local version, server version, or both. If you choose both, the local file will have a number added to its name. Choisissez si vous souhaitez conserver la version locale, la version serveur, ou les deux. Si vous choisissez les deux, un numéro sera ajouté au nom du fichier local. @@ -5107,6 +5435,28 @@ Le serveur a répondu avec l'erreur : %2 Solve sync conflicts Résoudre les conflits de synchronisation + + + SesErrorBox + + Error + Erreur + + + + SesTrayHeader + + Open Nextcloud in browser + + + + Open local or group folders + Ouvrir des dossiers locaux ou de groupe + + + Website + + ShareDelegate @@ -5114,6 +5464,18 @@ Le serveur a répondu avec l'erreur : %2 Copied! Copié ! + + Copy share link location + + + + Create a new share link + + + + Share options + Options de partage + ShareDetailsPage @@ -5137,6 +5499,10 @@ Le serveur a répondu avec l'erreur : %2 Copy share link Copier le lien de partage + + Custom Permissions + + Edit share Modifier le partage @@ -5145,6 +5511,10 @@ Le serveur a répondu avec l'erreur : %2 Enter a note for the recipient Saisir une note pour le destinataire + + Enter the note to recipient + + File drop (upload only) Dépôt de fichiers (téléversement seulement) @@ -5219,11 +5589,11 @@ Le serveur a répondu avec l'erreur : %2 Sharing is disabled. Le partage est désactivé. - + This item cannot be shared. L'élément ne peut pas être partagé. - + SyncJournalDb @@ -5237,7 +5607,7 @@ Le serveur a répondu avec l'erreur : %2 Open browser Ouvrir le navigateur - + Resolve conflicts Résoudre les conflits @@ -5245,7 +5615,7 @@ Le serveur a répondu avec l'erreur : %2 Sync now Synchroniser maintenant - + TalkReplyTextField @@ -5267,11 +5637,11 @@ Le serveur a répondu avec l'erreur : %2 Switch to your browser to accept the terms of service Accédez à votre navigateur pour accepter les conditions d'utilisation - + Terms of Service Conditions d'utilisation - + theme @@ -5294,7 +5664,7 @@ Le serveur a répondu avec l'erreur : %2 Sync is paused La synchronisation est en pause - + Sync is running Synchronisation en cours @@ -5314,6 +5684,49 @@ Le serveur a répondu avec l'erreur : %2 Waiting to start syncing En attente du démarrage de la synchronisation + + + TrayWindowAccountMenu + + Account switcher and settings menu + Sélecteur de compte et menu de paramètres + + + Add account + Ajouter un compte + + + Current account + Compte actuel + + + Current account avatar + Avatar du compte actuel + + + Current account status is do not disturb + + + + Current account status is online + + + + Exit + Quitter + + + Pause sync for all + + + + Resume sync for all + + + + Settings + Paramètres + TrayWindowHeader @@ -5325,10 +5738,37 @@ Le serveur a répondu avec l'erreur : %2 Open %1 in browser Ouvrir %1 dans le navigateur - + Open local or group folders Ouvrir des dossiers locaux ou de groupe + + + TrayWindowHeaderBar + + More apps + Plus d'applications + + + Open %1 in browser + Ouvrir %1 dans le navigateur + + + Open Nextcloud Talk in browser + Ouvrir Nextcloud Discussion dans le navigateur + + + Open Nextcloud in browser + + + + Open local or group folders + Ouvrir des dossiers locaux ou de groupe + + + Website + + UnifiedSearchInputContainer @@ -5405,7 +5845,7 @@ Le serveur a répondu avec l'erreur : %2 Remove account Retirer le compte - + Set status Définir le statut @@ -5413,7 +5853,7 @@ Le serveur a répondu avec l'erreur : %2 Switch to account Utiliser ce compte - + UserStatusSelector @@ -5424,7 +5864,7 @@ Le serveur a répondu avec l'erreur : %2 Apply Appliquer - + Away Absent(e) @@ -5468,14 +5908,14 @@ Le serveur a répondu avec l'erreur : %2 What is your status? Quel est votre statut ? - + Utility %1 %2 %1 %2 - + %L1 B %L1 octets @@ -5537,7 +5977,7 @@ Le serveur a répondu avec l'erreur : %2 %n ans - + utility @@ -5564,7 +6004,7 @@ Le serveur a répondu avec l'erreur : %2 Free up local space Libérer de l'espace local - + Make always available locally Toujours rendre disponible localement @@ -5580,7 +6020,7 @@ Le serveur a répondu avec l'erreur : %2 There was an error when launching the email client to create a new message. Maybe no default email client is configured? Il y a eu une erreur lors du lancement du client de messagerie pour créer un nouveau message. Peut-être qu'aucun client de messagerie n'est configuré ? - + ValidateChecksumHeader diff --git a/translations/client_nl.ts b/translations/client_nl.ts index ef04c6c79fdd4..617b918444c70 100644 --- a/translations/client_nl.ts +++ b/translations/client_nl.ts @@ -6,22 +6,22 @@ In %1 In %1 - + Open %1 locally %1 lokaal openen - + ActivityItemContent Dismiss Negeren - + Open file details Bestandsdetails openen - + ActivityList @@ -32,11 +32,11 @@ No activities yet Nog geen activiteiten - + Scroll to top Naar boven schuiven - + CallNotificationDialog @@ -51,11 +51,11 @@ Decline Talk call notification Wijs Talk oproepmelding af - + Talk notification caller avatar Talk notificatie beller avatar - + CloudProviderWrapper @@ -90,7 +90,7 @@ Quit sync client Afsluiten synchronisatieclient - + Recently changed Recent gewijzigd @@ -122,7 +122,11 @@ Syncing %1 of %2 (%3 left) Synchroniseer %1 van %2 (%3 over) - + + Syncing %1 of %2 (%3 left) + + + ConflictDelegate @@ -140,7 +144,7 @@ Account switcher and settings menu Wisselen van gebruiker en instellingsmenu - + Add account Gebruiker toevoegen @@ -180,7 +184,7 @@ Settings Instellingen - + EditFileLocallyLoadingDialog @@ -212,7 +216,7 @@ Cancel Afbreken - + Choose Kies @@ -220,7 +224,7 @@ Token Encryption Key Chooser Token-versleutelingssleutelkiezer - + ErrorBox @@ -235,10 +239,14 @@ Activiteit + Dismiss + Negeren + + Sharing Delen - + FileDetailsWindow @@ -256,11 +264,11 @@ Materialised items Gecreëerde items - + Reload Herlaad - + FileProviderFastEnumerationSettings @@ -271,6 +279,10 @@ Fast sync will only sync changes in files and folders within folders that have been explored. This can significantly increase responsiveness on initial configuration of virtual files. However, it will cause redundant downloads of files moved to an unexplored folder. Snelle synchronisatie synchroniseert alleen wijzigingen in bestanden en mappen binnen mappen die zijn verkend. Dit kan de reactiesnelheid bij de eerste configuratie van virtuele bestanden aanzienlijk verbeteren. Het zal echter leiden tot overbodige downloads van bestanden die verplaatst zijn naar een niet verkende map. + + Fast sync will only sync changes in files and folders within folders that have been explored. This can significantly increase responsiveness on initial configuration of virtual files. However, it will cause redundant downloads of files moved to an unexplored folder. + + FileProviderFileDelegate @@ -285,7 +297,7 @@ Enable virtual files Virtuele bestanden inschakelen - + General settings Algemene instellingen @@ -293,7 +305,7 @@ Virtual files settings Virtuele bestandsinstellingen - + FileProviderStorageInfo @@ -304,11 +316,11 @@ Evict local copies … Lokale kopieën verwijderen … - + Local storage use Gebruik lokale opslag - + FileProviderSyncStatus @@ -321,7 +333,7 @@ macOS may ignore or delay this request. Vraag een synchronisatie van wijzigingen voor de VFS-omgeving aan. macOS kan dit verzoek negeren of uitstellen. - + Request sync Vraag synchronisatie aan @@ -329,51 +341,94 @@ macOS kan dit verzoek negeren of uitstellen. Syncing Synchroniseren - + FileSystem Could not remove folder "%1" Kan map "%1" niet verwijderen - + Error removing "%1": %2 Fout bij verwijderen '%1': %2 - + Flow2AuthWidget An error occurred while connecting. Please try again. Er is een fout opgetreden tijdens het verbinden. Probeer het opnieuw. - + Browser Authentication Browserauthenticatie + + Copy Link + Kopiëren link + Logo Logo + Reopen Browser + + + Switch to your browser to connect your account Schakel over naar je browser om je account te verbinden + + FolderWizardSelectiveSync + + Add Folder Sync + + + + Step 3 of 3: Selektive Synchronisation + + + FolderWizardSourcePage + &Choose + + + &Choose … &Kies ... - + + Add Folder Sync + + + Pick a local folder on your computer to sync Kies een map op je computer om te synchroniseren + + Select a folder on your hard drive that should be permanetly connected to your %1. All files and subfolders are automatically uploaded and synchronized + + + + Step 1 of 3: Select local folder + + FolderWizardTargetPage + Add Folder Sync + + + + Both folders are permanently linked and the respective contents are automatically synchronized and updated. + + + Create folder Maak map @@ -381,7 +436,11 @@ macOS kan dit verzoek negeren of uitstellen. Folders Mappen - + + Please now select or create a target folder in your %1 where the content should be uploaded and synchronized. + + + Refresh Vernieuwen @@ -389,6 +448,10 @@ macOS kan dit verzoek negeren of uitstellen. Select a remote destination folder Kies een externe doelmap + + Step 2 of 3: Directory in your %1 + + main.cpp @@ -396,18 +459,18 @@ macOS kan dit verzoek negeren of uitstellen. %1 requires on a working system tray. If you are running XFCE, please follow <a href="http://docs.xfce.org/xfce/xfce4-panel/systray">these instructions</a>. Otherwise, please install a system tray application such as "trayer" and try again. %1 heeft een werkend systeemvak nodig. Als je XFCE draait volg je <a href="http://docs.xfce.org/xfce/xfce4-panel/systray">deze instructies</a>. Installeer anders een systeemvak applicatie zoals "trayer" en probeer het opnieuw. - + System Tray not available Systeemvak niet beschikbaar - + MainWindow New activities - + Nextcloud desktop main dialog Nextcloud desktop basisdialoog @@ -415,7 +478,7 @@ macOS kan dit verzoek negeren of uitstellen. Unified search results list - + nextcloudTheme::aboutInfo() @@ -433,11 +496,11 @@ macOS kan dit verzoek negeren of uitstellen. Server replied "%1 %2" to "%3 %4" Server antwoordde "%1 %2" naar "%3 %4" - + Unknown error: network reply was deleted Onbekende fout: netwerkantwoord verwijderd - + OCC::Account @@ -469,7 +532,7 @@ Should the account be imported? Could not import accounts from legacy client configuration. Kon geen accounts importeren van legacy client configuratie. - + Import Import @@ -481,7 +544,7 @@ Should the account be imported? Skip Overslaan - + OCC::AccountSettings @@ -642,6 +705,10 @@ Wil je begin-tot-eind versleuteling instellen? End-to-end encryption mnemonic Geheugensteun voor begin-tot-eind versleuteling + + Expand Memory + + Folder creation failed Map maken mislukt @@ -658,7 +725,7 @@ Wil je begin-tot-eind versleuteling instellen? No %1 connection configured. Geen %1 connectie geconfigureerd. - + No account configured. Geen account ingesteld. @@ -722,6 +789,10 @@ Wil je begin-tot-eind versleuteling instellen? Standard file sync Standaard bestandssynchronisatie + + Storage space %1% occupied + + Storage space: … Opslagruimte: ... @@ -762,14 +833,26 @@ Wil je begin-tot-eind versleuteling instellen? There are folders that were not synchronized because they are external storages: Er zijn mappen die niet gesynchroniseerd zijn, omdat ze op externe opslag staan: + + There are folders that were not synchronized because they are external storages: + + There are folders that were not synchronized because they are too big or external storages: Er zijn mappen die niet gesynchroniseerd zijn, omdat ze te groot zijn of op externe opslag staan: + There are folders that were not synchronized because they are too big or external storages: + + + There are folders that were not synchronized because they are too big: Er zijn mappen die niet gesynchroniseerd zijn, omdat ze te groot zijn: + + There are folders that were not synchronized because they are too big: + + This account supports end-to-end encryption Dit account ondersteunt end-to-end-versleuteling @@ -825,6 +908,10 @@ Wait for the new sync, then encrypt it. You seem to have the Virtual Files feature enabled on this folder. At the moment, it is not possible to implicitly download virtual files that are end-to-end encrypted. To get the best experience with virtual files and end-to-end encryption, make sure the encrypted folder is marked with "Make always available locally". Het lijkt erop dat de functie Virtuele bestanden voor deze map is ingeschakeld. Momenteel is het niet mogelijk om impliciet virtuele bestanden te downloaden die begin-tot-eind versleuteld zijn. Om de beste ervaring met virtuele bestanden en begin-tot-eind versleuteling te krijgen, moet je ervoor zorgen dat de versleutelde map is gemarkeerd met "Altijd lokaal beschikbaar maken". + + https://wl.hidrive.com/easy/0057 + + OCC::AccountSetupFromCommandLineJob @@ -921,7 +1008,7 @@ Wait for the new sync, then encrypt it. Certificate files (*.p12 *.pfx) Certificaat bestanden (*.p12 *.pfx) - + Certificate password: Wachtwoord certificaat: @@ -937,7 +1024,7 @@ Wait for the new sync, then encrypt it. This server probably requires a SSL client certificate. De server vereist vermoedelijk een SSL client certificaat. - + OCC::Application @@ -989,7 +1076,7 @@ Wait for the new sync, then encrypt it. There was an error while accessing the configuration file at %1. Please make sure the file can be accessed by your system account. Fout bij het benaderen van het configuratiebestand op %1. Zorg ervoor dat het bestand door je systeemaccount kan worden benaderd. - + deleting verwijderen @@ -1007,14 +1094,14 @@ Wait for the new sync, then encrypt it. older software version ouder - + OCC::AuthenticationDialog &Password: &Wachtwoord: - + &Username: &Gebruikersnaam: @@ -1026,7 +1113,7 @@ Wait for the new sync, then encrypt it. Enter username and password for "%1" at %2. Geef gebruikersnaam en wachtwoord op voor "%1" bij %2. - + OCC::BasePropagateRemoteDeleteEncrypted @@ -1076,7 +1163,7 @@ Wait for the new sync, then encrypt it. Restoration failed: %1 Herstellen mislukt: %1 - + The file %1 is currently in use Bestand %1 is momenteel in gebruik @@ -1084,7 +1171,7 @@ Wait for the new sync, then encrypt it. The local file was removed during sync. Het lokale bestand werd verwijderd tijdens synchronisatie. - + OCC::CaseClashConflictSolver @@ -1111,11 +1198,11 @@ Wait for the new sync, then encrypt it. Filename contains trailing spaces. De bestandsnaam bevat spaties achteraan. - + You don't have the permission to rename this file. Please ask the author of the file to rename it. Je bent niet gemachtigd om dit bestand te hernoemen. Vraag de auteur van het bestand om het te hernoemen. - + OCC::CaseClashFilenameDialog @@ -1146,7 +1233,7 @@ Wait for the new sync, then encrypt it. Filename contains illegal characters: %1 Bestandsnaam bevat ongeldige tekens: %1 - + Filename contains leading and trailing spaces. De bestandsnaam bevat spaties vooraan en achteraan. @@ -1202,7 +1289,7 @@ Wait for the new sync, then encrypt it. today vandaag - + OCC::CleanupPollsJob @@ -1220,7 +1307,7 @@ Wait for the new sync, then encrypt it. Enter E2E passphrase Invoeren E2E wachtwoord - + Input PIN code Please keep it short and shorter than "Enter Certificate USB Token PIN:" @@ -1237,7 +1324,7 @@ Wait for the new sync, then encrypt it. Please enter your end-to-end encryption passphrase:<br><br>Username: %2<br>Account: %3<br> Voer je begin-tot-eind versleutelingswachtwoord in: <br><br>Gebruiker: %2<br>Account: %3<br> - + OCC::ConflictDialog @@ -1276,7 +1363,7 @@ Wait for the new sync, then encrypt it. Keep server version Bewaar serverversie - + Local version Lokale versie @@ -1304,14 +1391,14 @@ Wait for the new sync, then encrypt it. today vandaag - + OCC::ConflictSolver Confirm deletion Bevestig verwijderen - + Do you want to delete the directory <i>%1</i> and all its contents permanently? Wil je de map <i>%1</i>met gehele inhoud permanent verwijderen? @@ -1331,7 +1418,7 @@ Wait for the new sync, then encrypt it. %1 - + OCC::ConnectionValidator @@ -1354,22 +1441,76 @@ Wait for the new sync, then encrypt it. The provided credentials are not correct De verstrekte inloggegevens zijn niet juist - + Timeout Time-out - + + + OCC::DataProtectionPage + + Agree + + + + Form + Formulier + + + Settings + Instellingen + + + This application uses tracking technologies. By clicking on Agree, you accept the processing of your anonymized data. You can adjust your choices at any time via the settings. <br/> <br/>Information on data processing and more can be found in our <a href='https://wl.hidrive.com/easy/0005'>privacy policy</a>. + + + + + OCC::DataProtectionSettingsPage + + Back + + + + Form + Formulier + + + Necessary data + + + + Required to ensure that the software can be used as expected + + + + Save Settings + + + + Send anonymous use + + + + This helps us to optimize the software and to better identify system crashes and unexpected errors. + + + + We collect anonymized data to optimize our app. We use software solutions from various partners for this purpose. We want to give you full transparency and freedom of choice regarding the collection and processing of your anonymized usage. You can change your settings at any time under the menu item Data Protection. + + + OCC::DiscoveryPhase Error while canceling deletion of %1 Fout bij annuleren verwijderen van %1 - + Error while canceling deletion of a file Fout bij het annuleren van verwijdering van een bestand - + OCC::DiscoverySingleDirectoryJob @@ -1380,11 +1521,11 @@ Wait for the new sync, then encrypt it. Encrypted metadata setup error: initial signature from server is empty. - + Server error: PROPFIND reply is not XML formatted! Serverfout: PROPFIND-antwoord heeft geen XML-opmaak! - + OCC::DiscoverySingleLocalDirectoryJob @@ -1403,11 +1544,11 @@ Wait for the new sync, then encrypt it. Error while reading directory %1 Fout tijdens lezen van map %1 - + Filename encoding is not valid Bestandsnaamcodering is niet geldig - + OCC::EditLocallyJob @@ -1450,7 +1591,7 @@ Wait for the new sync, then encrypt it. File %1 could not be locked. Bestand %1 kon niet vergrendeld worden. - + File %1 now locked. Bestand %1 is nu vergrendeld. @@ -1470,7 +1611,7 @@ Wait for the new sync, then encrypt it. Server error: PROPFIND reply is not XML formatted! Serverfout: PROPFIND-antwoord heeft geen XML-opmaak! - + OCC::EditLocallyManager @@ -1488,7 +1629,7 @@ Wait for the new sync, then encrypt it. An error occurred trying to verify the request to edit locally. Er trad een fout op bij de aanvraag voor lokaal bewerken. - + Could not find an account for local editing. Kon geen account vinden voor lokaal bewerken. @@ -1508,7 +1649,7 @@ Wait for the new sync, then encrypt it. Please try again. Probeer a.u.b opnieuw - + OCC::EncryptedFolderMetadataHandler @@ -1606,7 +1747,7 @@ Dit kan een probleem zijn met je OpenSSL-bibliotheken. Could not parse the JSON returned from the server: <br><em>%1</em> Kan de van de server ontvangen JSON niet verwerken: <br><em>%1</em> - + Error returned from the server: <em>%1</em> Fout gemeld door de server: <em>%1</em> @@ -1626,14 +1767,18 @@ Dit kan een probleem zijn met je OpenSSL-bibliotheken. There was an error accessing the "token" endpoint: <br><em>%1</em> Er trad een fout op bij het benaderen van het "token" endpoint: <br><em>%1</em> - + OCC::Flow2AuthWidget Copy Link Kopiëren link - + + Error + Fout + + Link copied to clipboard. Link gekopieerd naar het klembord. @@ -1650,6 +1795,10 @@ Dit kan een probleem zijn met je OpenSSL-bibliotheken. Starten autorisatie + Switch to your browser to connect your account + Schakel over naar je browser om je account te verbinden + + Unable to open the Browser, please copy the link to your Browser. Kan de browser niet openen, kopieer de link naar je browser. @@ -1759,6 +1908,10 @@ Dit kan een probleem zijn met je OpenSSL-bibliotheken. + A folder from an external storage has been added. + + + A folder has surpassed the set folder size limit of %1MB: %2. %3 Een map is groter geworden dan de ingestelde limiet van %1MB: %2. @@ -1782,6 +1935,10 @@ Alternatively, you can restore all deleted files by downloading them from the se Er is een nieuwe map groter dan %1 MB toegevoegd: %2. + + A new folder larger than %1 MB has been added: %2. + + Changes in synchronized folders could not be tracked reliably. @@ -1830,7 +1987,7 @@ Dit betekent dat de synchronisatieclient misschien niet meteen lokale wijziginge Restore Files from Server - + Restore Files to Server @@ -1866,10 +2023,14 @@ Dit betekent dat de synchronisatieclient misschien niet meteen lokale wijziginge OCC::FolderCreationDialog + %1 Create new folder + + + Could not create a folder! Check your write permissions. Kan map niet aanmaken! Controleer je schrijfmachtiging. - + Create new folder Maak nieuwe map aan @@ -1892,14 +2053,22 @@ Dit betekent dat de synchronisatieclient misschien niet meteen lokale wijziginge %1 (Sync is paused) %1 (Synchronisatie onderbroken) - + (backup %1) (backup %1) + (backup %1) + + + (backup) (backup) + + (backup) + + An old sync journal "%1" was found, but could not be removed. Please make sure that no application is currently using it. Een oud synchronisatieverslag "%1" is gevonden maar kan niet worden verwijderd. Zorg ervoor dat geen applicatie dit bestand gebruikt. @@ -2008,6 +2177,10 @@ For advanced users: this issue might be related to multiple sync database files OCC::FolderStatusDelegate + + Add Folder Sync + + Add Folder Sync Connection Toevoegen mapsynchronisatie verbinding @@ -2016,6 +2189,10 @@ For advanced users: this issue might be related to multiple sync database files File Bestand + + Synchronize any other local folder with your %1 + + OCC::FolderStatusModel @@ -2098,7 +2275,7 @@ For advanced users: this issue might be related to multiple sync database files Preparing to sync … Voorbereiden synchronisatie ... - + Signed out Afgemeld @@ -2146,7 +2323,7 @@ For advanced users: this issue might be related to multiple sync database files ↓ %1/s ↓ %1/s - + OCC::FolderWatcher @@ -2175,6 +2352,14 @@ For advanced users: this issue might be related to multiple sync database files OCC::FolderWizardLocalPath + Add Folder Sync + + + + Choose + Kies + + Click to select a local folder to sync. Klikken om een lokale map te selecteren voor synchronisatie @@ -2182,17 +2367,33 @@ For advanced users: this issue might be related to multiple sync database files Enter the path to the local folder. Geef het pad op naar de lokale map. + + Select a folder on your hard drive that should be permanetly connected to your %1. All files and subfolders are automatically uploaded and synchronized + + Select the source folder Selecteer de bronmap - + + Step 1 of 3: Select local folder + + + OCC::FolderWizardRemotePath + + Add Folder Sync + + Authentication failed accessing %1 Authenticatie mislukt bij benaderen %1 + + Both folders are permanently linked and the respective contents are automatically synchronized and updated. + + Choose this to sync the entire account Kies dit om je volledige account te synchroniseren @@ -2202,6 +2403,10 @@ For advanced users: this issue might be related to multiple sync database files Externe map aanmaken + Create folder + Maak map + + Enter the name of the new folder to be created below "%1": Voer de naam van de hieronder te maken nieuwe map in "%1": @@ -2221,7 +2426,19 @@ For advanced users: this issue might be related to multiple sync database files Please choose a different location. %1 is already being synced to %2. - + + Please now select or create a target folder in your %1 where the content should be uploaded and synchronized. + + + + Refresh + Vernieuwen + + + Step 2 of 3: Directory in your %1 + + + OCC::FolderWizardSelectiveSync @@ -2229,6 +2446,14 @@ For advanced users: this issue might be related to multiple sync database files (experimenteel) + Add Folder Sync + + + + Step 3 of 3: Selektive Synchronisation + + + Use virtual files instead of downloading content immediately %1 Gebruik virtuele bestanden in plaats van de content direct te downloaden %1 @@ -2236,7 +2461,7 @@ For advanced users: this issue might be related to multiple sync database files Virtual files are not supported at the selected location - + Virtual files are not supported for Windows partition roots as local folder. Please choose a valid subfolder under drive letter. Virtuele bestanden worden niet ondersteund voor Windows-partitie-hoofdmappen als lokale map. Kies een geldige submap onder de stationsletter. @@ -2306,6 +2531,10 @@ Downgrading versions is not possible immediately: changing from stable to enterp Create Debug Archive Debugarchief maken + + Data Protection + + Debug Archive Created Debugarchief Aangemaakt @@ -2314,7 +2543,7 @@ Downgrading versions is not possible immediately: changing from stable to enterp Debug archive is created at %1 Debugarchief is gemaakt op %1 - + Desktop client x.x.x Desktop cliënt x.x.x @@ -2343,34 +2572,50 @@ Downgrading versions is not possible immediately: changing from stable to enterp Trailing part of "Ask confirmation before syncing folder larger than" MB + + More Information + + Move removed files to trash Verplaats verwijderde bestanden naar de prullenbak + + Necessary data + + Notify when synchronised folders grow larger than specified limit Melding als gesynchroniseerde mappen groter worden dan de opgegeven limiet - S&how crash reporter - T&onen crash reporter + Open Source Software + - Server notifications that require attention. - Servermeldingen die aandacht nodig hebben. + Privacy Policy + - Server poll interval + Required to ensure that the software can be used as expected - Show Call Notifications - Toon oproepmeldingen + S&how crash reporter + T&onen crash reporter - Show Chat Notifications + Send anonymous use + + Server notifications that require attention. + Servermeldingen die aandacht nodig hebben. + + + Show Call Notifications + Toon oproepmeldingen + Show Server &Notifications Tonen server&meldingen @@ -2380,7 +2625,7 @@ Downgrading versions is not possible immediately: changing from stable to enterp Toon oproepmeldingenvensters. - Show chat notification dialogs. + Show call notifications @@ -2394,10 +2639,18 @@ Downgrading versions is not possible immediately: changing from stable to enterp starts list of available update channels, stable is always available + + This helps us to optimize the software and to better identify system crashes and unexpected errors. + + Update channel Bijwerkkanaal + + Updates + + Usage Documentation Gebruiksdocumentatie @@ -2406,6 +2659,10 @@ Downgrading versions is not possible immediately: changing from stable to enterp Use &Monochrome Icons &Monochrome pictogrammen gebruiken + + Use &monochrome icons + + You cannot disable autostart because system-wide autostart is enabled. Je kunt autostart niet uitschakelen omdat systeem-brede autostart is ingeschakeld. @@ -2427,7 +2684,19 @@ Downgrading versions is not possible immediately: changing from stable to enterp zakelijk - seconds (if <a href="https://github.com/nextcloud/notify_push">Client Push</a> is unavailable) + https://wl.hidrive.com/easy/0004 + + + + https://wl.hidrive.com/easy/0005 + + + + https://wl.hidrive.com/easy/0006 + + + + https://wl.hidrive.com/easy/0007 @@ -2441,7 +2710,7 @@ Downgrading versions is not possible immediately: changing from stable to enterp Connection Timeout Verbindingstime-out - + No E-Tag received from server, check Proxy/Gateway Geen E-Tag ontvangen van de server, controleer Proxy/Gateway @@ -2457,7 +2726,7 @@ Downgrading versions is not possible immediately: changing from stable to enterp We received an unexpected download Content-Length. We ontvingen een onverwachte download Content-Lengte. - + OCC::GetOrCreatePublicLinkShare @@ -2468,7 +2737,7 @@ Downgrading versions is not possible immediately: changing from stable to enterp %1 - + Password for share required Wachtwoord voor deellink vereist @@ -2480,14 +2749,14 @@ Downgrading versions is not possible immediately: changing from stable to enterp Sharing error Fout bij delen - + OCC::HttpCredentialsGui <a href="%1">Click here</a> to request an app password from the web interface. <a href="%1">Klik hier</a> om een nieuw app wachtwoord via de web interface op te vragen. - + Enter Password Vul het wachtwoord in @@ -2499,7 +2768,7 @@ Downgrading versions is not possible immediately: changing from stable to enterp Reading from keychain failed with error: "%1" Het lezen van de sleutelketen is mislukt met fout: "%1" - + OCC::IgnoreListEditor @@ -2537,7 +2806,7 @@ Downgrading versions is not possible immediately: changing from stable to enterp Add a new ignore pattern: Voeg nieuw negeerpatroon toe: - + Allow Deletion Verwijderen toestaan @@ -2558,6 +2827,10 @@ Items where deletion is allowed will be deleted if they prevent a directory from Onderdelen die gewist mogen worden, worden verwijderd als ze verhinderen dat een map verdwijnt. Dit is nuttig voor metadata. + Ignore Pattern + + + Pattern Patroon @@ -2588,7 +2861,7 @@ Onderdelen die gewist mogen worden, worden verwijderd als ze verhinderen dat een Could not rename local file. %1 Kan lokaal bestand niet hernoemen. %1 - + Error Fout @@ -2668,7 +2941,7 @@ Onderdelen die gewist mogen worden, worden verwijderd als ze verhinderen dat een You don't have the permission to rename this file. Please ask the author of the file to rename it. Je bent niet gemachtigd om dit bestand te hernoemen. Vraag de auteur van het bestand om het te hernoemen. - + OCC::LegalNotice @@ -2679,7 +2952,7 @@ Onderdelen die gewist mogen worden, worden verwijderd als ze verhinderen dat een <p>Licensed under the GNU General Public License (GPL) Version 2.0 or any later version.</p> <p>Gelicenseerd onder de GNU General Public License (GPL) Versie 2.0 of later</p> - + Close Sluiten @@ -2687,7 +2960,7 @@ Onderdelen die gewist mogen worden, worden verwijderd als ze verhinderen dat een Legal notice Juridische bepalingen - + OCC::LogBrowser @@ -2702,7 +2975,7 @@ Onderdelen die gewist mogen worden, worden verwijderd als ze verhinderen dat een Open folder Openen map - + The client can write debug logs to a temporary folder. These logs are very helpful for diagnosing problems. Since log files can get large, the client will start a new one for each sync run and compress older ones. It will also delete log files after a couple of hours to avoid consuming too much disk space. If enabled, logs will be written to %1 @@ -2716,18 +2989,18 @@ Note that using any logging command line options will override this setting.Deze instelling blijft bestaan tijdens het opnieuw opstarten van de client. Merk op dat het gebruik van logging-opdrachtregel opties deze instelling zal overschrijven. - + OCC::Logger <nobr>File "%1"<br/>cannot be opened for writing.<br/><br/>The log output <b>cannot</b> be saved!</nobr> <nobr>Bestand "%1"<br/>kan niet voor schrijven worden geopend.<br/><br/>De log output kan <b>niet</b> opgeslagen worden!</nobr> - + Error Fout - + OCC::Mac::FileProviderEditLocallyJob @@ -2821,7 +3094,7 @@ Merk op dat het gebruik van logging-opdrachtregel opties deze instelling zal ove SOCKS5 proxy SOCKS5 proxy - + Upload Bandwidth Upload bandbreedte @@ -2837,7 +3110,7 @@ Merk op dat het gebruik van logging-opdrachtregel opties deze instelling zal ove Username for proxy server Gebruikersnaam voor proxyserver - + OCC::NSISUpdater @@ -2856,7 +3129,7 @@ Merk op dat het gebruik van logging-opdrachtregel opties deze instelling zal ove Get update Ophalen update - + New Version Available Nieuwe versie beschikbaar @@ -2876,7 +3149,7 @@ Merk op dat het gebruik van logging-opdrachtregel opties deze instelling zal ove Update manually Handmatig bijwerken - + OCC::OCUpdater @@ -2927,11 +3200,11 @@ Merk op dat het gebruik van logging-opdrachtregel opties deze instelling zal ove Update Check Controle update - + Update status is unknown: Did not check for new updates. Update status is onbekend: niet gecontroleerd op nieuwe updates. - + OCC::OwncloudAdvancedSetupPage @@ -2959,7 +3232,7 @@ Merk op dat het gebruik van logging-opdrachtregel opties deze instelling zal ove In Finder's "Locations" sidebar section - + Local Sync Folder Lokale synchronisatiemap @@ -2987,14 +3260,14 @@ Merk op dat het gebruik van logging-opdrachtregel opties deze instelling zal ove Warning: The local folder is not empty. Pick a resolution! Waarschuwing: De lokale map is niet leeg. Maak een keuze! - + OCC::OwncloudConnectionMethodDialog <html><head/><body><p>Failed to connect to the secure server address <em>%1</em>. How do you wish to proceed?</p></body></html> <html><head/><body><p>Kan niet verbinden met het opgegeven beveiligde serveradres <em>%1</em>.Hoe wilt u verder gaan?</p></body></html> - + <html><head/><body><p>Failed to connect to the secure server address specified. How do you wish to proceed?</p></body></html> <html><head/><body><p>Kan niet verbinden met het opgegeven beveiligde serveradres. Hoe wilt u verder gaan?</p></body></html> @@ -3014,14 +3287,14 @@ Merk op dat het gebruik van logging-opdrachtregel opties deze instelling zal ove Select a different URL Selecteer een andere URL - + OCC::ownCloudGui %1 (%2, %3) %1 (%2, %3) - + %1: %2 Example text: "Nextcloud: Syncing 25MB (3 minutes left)" (%1 is the folder name to be synced, %2 a status message for that folder) %1: %2 @@ -3086,7 +3359,7 @@ Merk op dat het gebruik van logging-opdrachtregel opties deze instelling zal ove macOS VFS for %1: Sync is running. - + OCC::OwncloudHttpCredsPage @@ -3119,7 +3392,7 @@ Merk op dat het gebruik van logging-opdrachtregel opties deze instelling zal ove Could not load certificate. Maybe wrong password? Kan certificaat niet laden. Misschien is het wachtwoord onjuist? - + Server address does not seem to be valid Het serveradres lijkt niet geldig @@ -3128,7 +3401,7 @@ Merk op dat het gebruik van logging-opdrachtregel opties deze instelling zal ove %1 will be replaced with the application name De link naar je %1 web interface wanneer je die opent in de browser. - + OCC::OwncloudSetupWizard @@ -3139,7 +3412,7 @@ Merk op dat het gebruik van logging-opdrachtregel opties deze instelling zal ove <font color="green"><b>Local sync folder %1 successfully created!</b></font> <font color="green"><b>Lokale synch map %1 is succesvol aangemaakt!</b></font> - + <font color="green">Successfully connected to %1: %2 version %3 (%4)</font><br/><br/> <font color="green">Succesvol verbonden met %1: %2 versie %3 (%4)</font><br/><br/> @@ -3239,14 +3512,6 @@ Merk op dat het gebruik van logging-opdrachtregel opties deze instelling zal ove Trying to connect to %1 at %2 … Probeer te verbinden met %1 om %2 ... - - Virtual files enabled - - - - Your account is now syncing with virtual files support. This means that all your files are online-only by default, and will be downloaded on-demand when you open them. You may find your files under the <b>Locations</b> section of the Finder sidebar. - - creating folder on Nextcloud: %1 aanmaken map op Nextcloud: %1 @@ -3255,7 +3520,7 @@ Merk op dat het gebruik van logging-opdrachtregel opties deze instelling zal ove failed. mislukt. - + OCC::OwncloudWizard @@ -3282,7 +3547,7 @@ Merk op dat het gebruik van logging-opdrachtregel opties deze instelling zal ove Stay safe Blijf veilig - + When the "virtual files" mode is enabled no files will be downloaded initially. Instead, a tiny "%1" file will be created for each file that exists on the server. The contents can be downloaded by running these files or by using their context menu. The virtual files mode is mutually exclusive with selective sync. Currently unselected folders will be translated to online-only folders and your selective sync settings will be reset. @@ -3298,7 +3563,7 @@ Als je naar deze modus overschakelt, wordt elke momenteel lopende synchronisatie Dit is een nieuwe, experimentele modus. Als je besluit het te gebruiken, vragen we je om eventuele problemen te melden. - + OCC::PasswordInputDialog @@ -3450,7 +3715,7 @@ Dit is een nieuwe, experimentele modus. Als je besluit het te gebruiken, vragen Server replied with an error while reading directory "%1" : %2 Server gaf een foutmelding bij lezen directory "%1'": %2 - + Server reported no %1 Server rapporteerde nr %1 @@ -3482,7 +3747,7 @@ Dit is een nieuwe, experimentele modus. Als je besluit het te gebruiken, vragen size omvang - + OCC::PropagateDirectory @@ -3501,7 +3766,7 @@ Dit is een nieuwe, experimentele modus. Als je besluit het te gebruiken, vragen File is currently in use Bestand is al in gebruik - + The folder %1 cannot be made read-only: %2 Map %1 kon niet alleen-lezen gemaakt worden: %2 @@ -3509,7 +3774,7 @@ Dit is een nieuwe, experimentele modus. Als je besluit het te gebruiken, vragen unknown exception - + OCC::PropagateDownloadFile @@ -3544,7 +3809,7 @@ Dit is een nieuwe, experimentele modus. Als je besluit het te gebruiken, vragen File has changed since discovery Het bestand is gewijzigd sinds het is gevonden - + File was deleted from server Bestand was verwijderd van de server @@ -3568,7 +3833,7 @@ Dit is een nieuwe, experimentele modus. Als je besluit het te gebruiken, vragen The file could not be downloaded completely. Het bestand kon niet volledig worden gedownload. - + OCC::PropagateItemJob @@ -3598,7 +3863,7 @@ Dit is een nieuwe, experimentele modus. Als je besluit het te gebruiken, vragen The file %1 is currently in use Bestand %1 is al in gebruik - + The folder %1 cannot be made read-only: %2 Map %1 kon niet alleen-lezen gemaakt worden: %2 @@ -3610,14 +3875,14 @@ Dit is een nieuwe, experimentele modus. Als je besluit het te gebruiken, vragen unknown exception - + OCC::PropagateLocalRemove Could not delete file record %1 from local DB Kon bestandsrecord %1 niet verwijderen uit de lokale DB - + Could not remove %1 because of a local file name clash Bestand %1 kon niet worden verwijderd, omdat de naam conflicteert met een lokaal bestand @@ -3625,14 +3890,14 @@ Dit is een nieuwe, experimentele modus. Als je besluit het te gebruiken, vragen Temporary error when removing local item removed from server. - + OCC::PropagateLocalRename Could not delete file record %1 from local DB Kon bestandsrecord %1 niet verwijderen uit de lokale DB - + Could not get file %1 from local DB @@ -3664,18 +3929,18 @@ Dit is een nieuwe, experimentele modus. Als je besluit het te gebruiken, vragen The file %1 is currently in use Bestand %1 is al in gebruik - + OCC::PropagateRemoteDelete Could not delete file record %1 from local DB Kon bestandsrecord %1 niet verwijderen uit de lokale DB - + Wrong HTTP code returned by server. Expected 204, but received "%1 %2". Foutieve HTTP code ontvangen van de server. Verwacht was 204, maar ontvangen "%1 %2". - + OCC::PropagateRemoteDeleteEncryptedRootFolder @@ -3697,11 +3962,11 @@ Dit is een nieuwe, experimentele modus. Als je besluit het te gebruiken, vragen The file %1 is currently in use Bestand %1 is al in gebruik - + Wrong HTTP code returned by server. Expected 201, but received "%1 %2". Foutieve HTTP code ontvangen van de server. Verwacht was 201, maar ontvangen "%1 %2". - + OCC::PropagateRemoteMove @@ -3728,7 +3993,7 @@ Dit is een nieuwe, experimentele modus. Als je besluit het te gebruiken, vragen Error writing metadata to the database Fout bij schrijven van Metadata naar de database - + The file %1 is currently in use Bestand %1 is al in gebruik @@ -3736,7 +4001,7 @@ Dit is een nieuwe, experimentele modus. Als je besluit het te gebruiken, vragen Wrong HTTP code returned by server. Expected 201, but received "%1 %2". Foutieve HTTP code ontvangen van de server. Verwacht werd 201, maar ontvangen "%1 %2". - + OCC::PropagateUploadFileCommon @@ -3763,7 +4028,7 @@ Dit is een nieuwe, experimentele modus. Als je besluit het te gebruiken, vragen File Removed (start upload) %1 Bestand verwijderd (start upload) %1 - + Local file changed during sync. Lokaal bestand gewijzigd tijdens sync. @@ -3783,7 +4048,7 @@ Dit is een nieuwe, experimentele modus. Als je besluit het te gebruiken, vragen Upload of %1 exceeds the quota for the folder Upload van %1 overschrijdt het quotum voor de map - + OCC::PropagateUploadFileNG @@ -3794,7 +4059,7 @@ Dit is een nieuwe, experimentele modus. Als je besluit het te gebruiken, vragen Missing ETag from server Ontbrekende ETag van de server - + Missing File ID from server Ontbrekende File ID van de server @@ -3810,7 +4075,7 @@ Dit is een nieuwe, experimentele modus. Als je besluit het te gebruiken, vragen Unexpected return code from server (%1) Onverwachte reactie van server (%1) - + OCC::PropagateUploadFileV1 @@ -3836,7 +4101,7 @@ Dit is een nieuwe, experimentele modus. Als je besluit het te gebruiken, vragen Password: Wachtwoord: - + Proxy authentication required Proxy-authenticatie vereist @@ -3852,7 +4117,7 @@ Dit is een nieuwe, experimentele modus. Als je besluit het te gebruiken, vragen Username: Gebruikersnaam: - + OCC::SelectiveSyncDialog @@ -3866,7 +4131,7 @@ Dit is een nieuwe, experimentele modus. Als je besluit het te gebruiken, vragen An error occurred while loading the list of sub folders. Er trad een fout op bij het laden van de lijst met submappen. - + Deselect remote folders you do not wish to synchronize. Deselecteer de externe mappen die u niet wenst te synchroniseren. @@ -3886,7 +4151,7 @@ Dit is een nieuwe, experimentele modus. Als je besluit het te gebruiken, vragen Size Grootte - + OCC::ServerNotificationHandler @@ -3894,6 +4159,21 @@ Dit is een nieuwe, experimentele modus. Als je besluit het te gebruiken, vragen Antwoord + + OCC::sesSnackBar + + Error + Fout + + + Success + + + + Warning + Waarschuwing + + OCC::SettingsDialog @@ -3905,7 +4185,7 @@ Dit is een nieuwe, experimentele modus. Als je besluit het te gebruiken, vragen Account Account - + General Algemeen @@ -3914,6 +4194,10 @@ Dit is een nieuwe, experimentele modus. Als je besluit het te gebruiken, vragen Netwerk + New account + + + Settings Instellingen @@ -3925,7 +4209,7 @@ Dit is een nieuwe, experimentele modus. Als je besluit het te gebruiken, vragen sharee (shareWithAdditionalInfo) %1 (%2) - + Global search results Zoekresultaten (global) @@ -3937,7 +4221,7 @@ Dit is een nieuwe, experimentele modus. Als je besluit het te gebruiken, vragen Search globally Zoek door alles - + OCC::ShareManager @@ -3959,7 +4243,7 @@ Dit is een nieuwe, experimentele modus. Als je besluit het te gebruiken, vragen Could not find local folder for %1 Kan lokale map niet vinden voor %1 - + Internal link Interne link @@ -3983,7 +4267,7 @@ Dit is een nieuwe, experimentele modus. Als je besluit het te gebruiken, vragen Today Vandaag - + OCC::SocketApi @@ -4074,7 +4358,7 @@ Server antwoordde met fout: %2 Open in browser Openen in browser - + Resharing this file is not allowed Opnieuw delen van dit bestand is niet toegestaan @@ -4110,7 +4394,7 @@ Server antwoordde met fout: %2 Unlock file Ontgrendel bestand - + OCC::SslButton @@ -4207,12 +4491,20 @@ Server antwoordde met fout: %2 Deze verbinding is NIET veilig, omdat deze niet versleuteld is. + + This connection is NOT secure as it is not encrypted. + + This connection is encrypted using %1 bit %2. Deze verbinding is versleuteld via %1 bit %2. + + This connection is encrypted using %1 bit %2. + + OCC::SslErrorDialog @@ -4256,7 +4548,7 @@ Server antwoordde met fout: %2 Issuer: %1 Uitgever: %1 - + Organization: %1 Organisatie: %1 @@ -4276,7 +4568,7 @@ Server antwoordde met fout: %2 with Certificate %1 met certificaat %1 - + OCC::SyncEngine @@ -4287,7 +4579,7 @@ Server antwoordde met fout: %2 Cannot open the sync journal Kan het sync transactielog niet openen - + Could not set file record to local DB: %1 Kon bestandsrecord %1 niet instellen op de lokale DB: %1 @@ -4336,7 +4628,7 @@ Server antwoordde met fout: %2 Using virtual files with suffix, but suffix is not set gebruik maken van virtuele bestanden met achtervoegsel, maar achtervoegsel niet ingesteld - + OCC::SyncStatusSummary @@ -4430,18 +4722,18 @@ Server antwoordde met fout: %2 Resume sync for all Vervolg sync voor iedereen - + Settings Instellingen - + OCC::TermsOfServiceCheckWidget Copy Link Kopiëren link - + Link copied to clipboard. Link gekopieerd naar het klembord. @@ -4457,7 +4749,7 @@ Server antwoordde met fout: %2 Waiting for terms to be accepted - + OCC::Theme @@ -4473,6 +4765,10 @@ Server antwoordde met fout: %2 <p>This release was supplied by %1.</p> <p>Deze release is geleverd door %1</p> + + easy/0118 + + OCC::UnifiedSearchResultsListModel @@ -4488,18 +4784,18 @@ Server antwoordde met fout: %2 Search has failed for '%1'. Error: %2 Fout bij het zoeken naar '%1'. Error: %2 - + Search has failed for '%2'. Fout bij het zoeken naar '%2'. - + OCC::UpdateE2eeFolderMetadataJob Failed to finalize item. Kon item niet afronden. - + Failed to unlock encrypted folder. Kon versleutelde map niet ontgrendelen. @@ -4507,7 +4803,7 @@ Server antwoordde met fout: %2 Failed to update folder metadata. Kon metadata niet uploaden. - + OCC::UpdateE2eeFolderUsersMetadataJob @@ -4552,7 +4848,7 @@ Server antwoordde met fout: %2 Open Nextcloud Talk in browser Open Nextcloud Talk in browser - + Rename file Bestand hernoemen @@ -4568,7 +4864,7 @@ Server antwoordde met fout: %2 Trigger the migration - + OCC::UserModel @@ -4579,7 +4875,7 @@ Server antwoordde met fout: %2 Cancel Annuleren - + Confirm Account Removal Bevestig verwijderen account @@ -4587,7 +4883,7 @@ Server antwoordde met fout: %2 Remove connection Verwijderen verbinding - + OCC::UserStatusSelectorModel @@ -4597,7 +4893,7 @@ Server antwoordde met fout: %2 - + %1 hours @@ -4671,7 +4967,7 @@ Server antwoordde met fout: %2 Today Vandaag - + OCC::Vfs @@ -4682,18 +4978,18 @@ Server antwoordde met fout: %2 Please choose a different location. %1 is a network drive. It doesn't support virtual files. - + Please choose a different location. %1 isn't a NTFS file system. It doesn't support virtual files. - + OCC::VfsDownloadErrorDialog %1 could not be downloaded. %1 kon niet worden gedownload. - + > More details > Meer details @@ -4717,7 +5013,7 @@ Server antwoordde met fout: %2 could not be downloaded kon niet worden gedownload - + OCC::VfsSuffix @@ -4746,10 +5042,14 @@ Server antwoordde met fout: %2 OCC::WebFlowCredentials + <b>You have been logged out of your account %1 at %2. Please login again.</b> + + + You have been logged out of your account %1 at %2. Please login again. Je bent afgemeld bij je account %1 op %2. Meld opnieuw aan. - + OCC::WelcomePage @@ -4764,7 +5064,7 @@ Server antwoordde met fout: %2 Host your own server Host je eigen server - + Keep your data secure and under your control Hou je gegevens veilig en in eigen beheer @@ -4784,14 +5084,14 @@ Server antwoordde met fout: %2 Sign up with provider Aanmelden bij provider - + OwncloudAdvancedSetupPage &Local Folder &Lokale map - + <html><head/><body><p>If this box is checked, existing content in the local folder will be erased to start a clean sync from the server.</p><p>Do not check this if the local content should be uploaded to the servers folder.</p></body></html> <html><head/><body><p>Als deze checkbox is aangevinkt zullen bestaande bestanden in de lokale map worden gewist om een schone sync vanaf de server te starten.</p><p>Vink dit niet aan als de lokale bestanden naar de map op de server zouden moeten worden geüploadet.</p></body></html> @@ -4844,18 +5144,18 @@ Server antwoordde met fout: %2 Username Gebruikersnaam - + OwncloudHttpCredsPage &Password &Wachtwoord - + &Username &Gebruikersnaam - + OwncloudSetupPage @@ -4949,7 +5249,7 @@ Server antwoordde met fout: %2 Updating end-to-end encryption metadata - + Updating local metadata Bijwerken lokale metadata @@ -4969,7 +5269,7 @@ Server antwoordde met fout: %2 Virtual file created Virtueel bestand gecreëerd - + QObject @@ -5026,7 +5326,7 @@ Server antwoordde met fout: %2 Paths beginning with '#' character are not supported in VFS mode. - + Some time ago Even geleden @@ -5035,6 +5335,10 @@ Server antwoordde met fout: %2 Gesynchroniseerd %1 + The directory %1 cannot be part of your sync directory. Please choose another folder. + + + You changed %1 Je wijzigde %1 @@ -5081,7 +5385,7 @@ Server antwoordde met fout: %2 Cancel Annuleren - + Choose if you want to keep the local version, server version, or both. If you choose both, the local file will have a number added to its name. Kies of je lokale versie, server versie of beide wilt behouden. Als je voor beide kiest, krijgt het lokale bestand een nummer toegevoegd aan de naam. @@ -5093,6 +5397,28 @@ Server antwoordde met fout: %2 Solve sync conflicts Los synchronisatieconflicten op + + + SesErrorBox + + Error + Fout + + + + SesTrayHeader + + Open Nextcloud in browser + + + + Open local or group folders + Open lokale of groepsmappen + + + Website + + ShareDelegate @@ -5100,6 +5426,18 @@ Server antwoordde met fout: %2 Copied! Gekopieerd! + + Copy share link location + + + + Create a new share link + + + + Share options + Deelopties + ShareDetailsPage @@ -5123,12 +5461,16 @@ Server antwoordde met fout: %2 Copy share link Kopiëren deellink + + Custom Permissions + + Edit share Bewerk deellink - Enter a note for the recipient + Enter the note to recipient @@ -5205,11 +5547,11 @@ Server antwoordde met fout: %2 Sharing is disabled. Delen is uitgeschakeld. - + This item cannot be shared. Dit item kan niet worden gedeeld - + SyncJournalDb @@ -5223,7 +5565,7 @@ Server antwoordde met fout: %2 Open browser - + Resolve conflicts Los conflicten op @@ -5231,7 +5573,7 @@ Server antwoordde met fout: %2 Sync now Nu synchroniseren - + TalkReplyTextField @@ -5253,11 +5595,11 @@ Server antwoordde met fout: %2 Switch to your browser to accept the terms of service - + Terms of Service - + theme @@ -5280,7 +5622,7 @@ Server antwoordde met fout: %2 Sync is paused Synchronisatie is gepauzeerd - + Sync is running Bezig met synchroniseren @@ -5300,6 +5642,49 @@ Server antwoordde met fout: %2 Waiting to start syncing In afwachting van synchronisatie + + + TrayWindowAccountMenu + + Account switcher and settings menu + Wisselen van gebruiker en instellingsmenu + + + Add account + + + + Current account + Huidige gebruiker + + + Current account avatar + Huidige gebruiker avatar + + + Current account status is do not disturb + + + + Current account status is online + + + + Exit + Verlaat + + + Pause sync for all + + + + Resume sync for all + + + + Settings + Instellingen + TrayWindowHeader @@ -5311,10 +5696,37 @@ Server antwoordde met fout: %2 Open %1 in browser + + Open local or group folders + Open lokale of groepsmappen + + + + TrayWindowHeaderBar + + More apps + + + + Open %1 in browser + + + Open Nextcloud Talk in browser + Open Nextcloud Talk in browser + + + Open Nextcloud in browser + + + Open local or group folders Open lokale of groepsmappen + + Website + + UnifiedSearchInputContainer @@ -5391,7 +5803,7 @@ Server antwoordde met fout: %2 Remove account Verwijder account - + Set status Status instellen @@ -5399,7 +5811,7 @@ Server antwoordde met fout: %2 Switch to account Omschakelen naar account - + UserStatusSelector @@ -5410,7 +5822,7 @@ Server antwoordde met fout: %2 Apply Toepassen - + Away Afwezig @@ -5454,14 +5866,14 @@ Server antwoordde met fout: %2 What is your status? Wat is je status? - + Utility %1 %2 %1 %2 - + %L1 B %L1 B @@ -5523,7 +5935,7 @@ Server antwoordde met fout: %2 %n jaar - + utility @@ -5550,7 +5962,7 @@ Server antwoordde met fout: %2 Free up local space Lokale ruimte vrijmaken - + Make always available locally Maak altijd lokaal beschikbaar @@ -5566,7 +5978,7 @@ Server antwoordde met fout: %2 There was an error when launching the email client to create a new message. Maybe no default email client is configured? Er trad een fout op bij het starten van de e-mailclient om een nieuw bericht te maken. Misschien is er geen e-mailclient gedefinieerd? - + ValidateChecksumHeader From 4abf91aa74ca347e78bbdcfba47e7488d7d77c9a Mon Sep 17 00:00:00 2001 From: Kevin Beraz Date: Thu, 16 Oct 2025 10:52:20 +0200 Subject: [PATCH 368/371] merge step 2 --- translations/client_de.ts | 238 ++++++---------------------------- translations/client_en.ts | 84 ++++++------ translations/client_en_GB.ts | 238 ++++++---------------------------- translations/client_es.ts | 238 ++++++---------------------------- translations/client_fr.ts | 239 ++++++----------------------------- translations/client_nl.ts | 210 ++++++------------------------ 6 files changed, 237 insertions(+), 1010 deletions(-) diff --git a/translations/client_de.ts b/translations/client_de.ts index 871023dbdb01e..6b5e91e565fe4 100644 --- a/translations/client_de.ts +++ b/translations/client_de.ts @@ -118,10 +118,6 @@ Syncing %1 of %2 Synchronisiere %1 von %2 - - Syncing %1 of %2 (%3 left) - Synchronisiere %1 von %2 (%3 übrig) - Syncing %1 of %2 (%3 left) Synchronisiere %1 von %2 (%3 übrig) @@ -234,19 +230,11 @@ FileDetailsPage - - Activity - Aktivität - Dismiss Ablehnen - - Sharing - Teilen - - + FileDetailsWindow @@ -275,10 +263,6 @@ Enable fast sync Schnelle Synchronisierung aktivieren - - Fast sync will only sync changes in files and folders within folders that have been explored. This can significantly increase responsiveness on initial configuration of virtual files. However, it will cause redundant downloads of files moved to an unexplored folder. - Bei der schnellen Synchronisierung werden nur Änderungen an Dateien und Ordnern innerhalb der Ordner synchronisiert, die bereits untersucht wurden. Dies kann die Reaktionsfähigkeit bei der Ersteinrichtung virtueller Dateien erheblich erhöhen. Allerdings führt dies zu redundanten Downloads von Dateien, die in einen noch nicht erfassten Ordner verschoben wurden. - Fast sync will only sync changes in files and folders within folders that have been explored. This can significantly increase responsiveness on initial configuration of virtual files. However, it will cause redundant downloads of files moved to an unexplored folder. @@ -375,11 +359,11 @@ macOS kann diese Anforderung ignorieren oder verzögern. Reopen Browser - + Switch to your browser to connect your account Wechseln Sie zu Ihrem Browser, um Ihr Konto zu verbinden - + FolderWizardSelectiveSync @@ -397,18 +381,10 @@ macOS kann diese Anforderung ignorieren oder verzögern. &Choose - - &Choose … - &Wählen … - Add Folder Sync - - Pick a local folder on your computer to sync - Wählen Sie einen lokalen Ordner zum Synchronisieren aus - Select a folder on your hard drive that should be permanetly connected to your %1. All files and subfolders are automatically uploaded and synchronized @@ -417,7 +393,7 @@ macOS kann diese Anforderung ignorieren oder verzögern. Step 1 of 3: Select local folder - + FolderWizardTargetPage @@ -428,7 +404,7 @@ macOS kann diese Anforderung ignorieren oder verzögern. Both folders are permanently linked and the respective contents are automatically synchronized and updated. - + Create folder Ordner erstellen @@ -444,15 +420,11 @@ macOS kann diese Anforderung ignorieren oder verzögern. Refresh Aktualisieren - - Select a remote destination folder - Einen entfernten Zielordner auswählen - Step 2 of 3: Directory in your %1 - + main.cpp @@ -830,26 +802,14 @@ Would you like to set up end-to-end encryption? There are folders that have grown in size beyond %1MB: %2 Es gibt Ordner, deren Größe über %1 MB hinaus gewachsen ist: %2 - - There are folders that were not synchronized because they are external storages: - Es gibt Ordner, die nicht synchronisiert werden konnten, da sie externe Speicher sind: - There are folders that were not synchronized because they are external storages: - - There are folders that were not synchronized because they are too big or external storages: - Es gibt Ordner, die nicht synchronisiert werden konnten, da sie zu groß oder externe Speicher sind: - There are folders that were not synchronized because they are too big or external storages: - - There are folders that were not synchronized because they are too big: - Einige Ordner konnten nicht synchronisiert werden, da sie zu groß sind: - There are folders that were not synchronized because they are too big: @@ -914,7 +874,7 @@ Warten Sie auf die neue Synchronisierung und verschlüsseln Sie sie dann.https://wl.hidrive.com/easy/0057 - + OCC::AccountSetupFromCommandLineJob @@ -1800,7 +1760,7 @@ Dies kann ein Problem mit Ihren OpenSSL-Bibliotheken sein. Switch to your browser to connect your account Wechseln Sie zu Ihrem Browser, um Ihr Konto zu verbinden - + Unable to open the Browser, please copy the link to your Browser. Der Browser kann nicht geöffnet werden. Bitte kopieren Sie den Link in Ihren Browser. @@ -1808,7 +1768,7 @@ Dies kann ein Problem mit Ihren OpenSSL-Bibliotheken sein. Waiting for authorization Warte auf Autorisierung - + OCC::Folder @@ -1903,17 +1863,11 @@ Dies kann ein Problem mit Ihren OpenSSL-Bibliotheken sein. %1 is currently locked. %1 ist aktuell gesperrt. - - A folder from an external storage has been added. - - Ein Ordner von einem externen Speicher wurde hinzugefügt. - - A folder from an external storage has been added. - + A folder has surpassed the set folder size limit of %1MB: %2. %3 Ein Ordner hat die festgelegte Ordnergrößenbeschränkung von %1 MB überschritten: %2. @@ -1934,12 +1888,6 @@ Alternatively, you can restore all deleted files by downloading them from the se Eine große Anzahl von Dateien wurde lokal im Ordner '%1' gelöscht. Bitte bestätigen Sie, dass Sie mit diesen Löschungen fortfahren möchten. Alternativ können Sie auch alle gelöschten Dateien wiederherstellen, indem Sie sie vom Server herunterladen. - - - A new folder larger than %1 MB has been added: %2. - - Ein neuer Ordner größer als %1 MB wurde hinzugefügt: %2. - A new folder larger than %1 MB has been added: %2. @@ -2025,14 +1973,14 @@ Dies bedeutet, dass der Synchronisierungs-Client lokale Änderungen möglicherwe Would you like to stop syncing this folder? Möchten Sie die Synchronisierung dieses Ordners stoppen? - + OCC::FolderCreationDialog %1 Create new folder - + Could not create a folder! Check your write permissions. Ordner konnte nicht erstellt werden! Prüfen Sie die Schreibberechtigungen. @@ -2052,25 +2000,17 @@ Dies bedeutet, dass der Synchronisierungs-Client lokale Änderungen möglicherwe Folder already exists Ordner existiert bereits - + OCC::FolderMan %1 (Sync is paused) %1 (Synchronisierung ist pausiert) - - (backup %1) - (Sicherung %1) - (backup %1) - - (backup) - (Sicherung) - (backup) @@ -2183,17 +2123,13 @@ Für fortgeschrittene Benutzer: Dieses Problem kann damit zusammenhängen, dass Waiting to start syncing. Wartet auf Beginn der Synchronisierung. - + OCC::FolderStatusDelegate Add Folder Sync - - Add Folder Sync Connection - Ordner-Synchronisierung hinzufügen - File Datei @@ -2367,7 +2303,7 @@ Für fortgeschrittene Benutzer: Dieses Problem kann damit zusammenhängen, dass Choose Auswählen - + Click to select a local folder to sync. Hier klicken, um einen lokalen Ordner zum Synchronisieren auszuwählen. @@ -2387,7 +2323,7 @@ Für fortgeschrittene Benutzer: Dieses Problem kann damit zusammenhängen, dass Step 1 of 3: Select local folder - + OCC::FolderWizardRemotePath @@ -2414,7 +2350,7 @@ Für fortgeschrittene Benutzer: Dieses Problem kann damit zusammenhängen, dass Create folder Ordner erstellen - + Enter the name of the new folder to be created below "%1": Geben Sie den Namen des neuen, unter "%1" zu erstellenden Ordners ein: @@ -2446,7 +2382,7 @@ Für fortgeschrittene Benutzer: Dieses Problem kann damit zusammenhängen, dass Step 2 of 3: Directory in your %1 - + OCC::FolderWizardSelectiveSync @@ -2461,7 +2397,7 @@ Für fortgeschrittene Benutzer: Dieses Problem kann damit zusammenhängen, dass Step 3 of 3: Selektive Synchronisation - + Use virtual files instead of downloading content immediately %1 Virtuelle Dateien verwenden, anstatt den Inhalt sofort herunterzuladen %1 @@ -2473,7 +2409,7 @@ Für fortgeschrittene Benutzer: Dieses Problem kann damit zusammenhängen, dass Virtual files are not supported for Windows partition roots as local folder. Please choose a valid subfolder under drive letter. Virtuelle Dateien werden für die Wurzel von Windows-Partitionen als lokaler Ordner nicht unterstützt. Bitte wählen Sie einen gültigen Unterordner unter dem Laufwerksbuchstaben. - + OCC::GeneralSettings @@ -2572,10 +2508,6 @@ Ein Downgrade von Versionen ist nicht sofort möglich: Der Wechsel von Beta auf General Settings Allgemeine Einstellungen - - Info - Info - Legal Notice Impressum @@ -2625,18 +2557,6 @@ Ein Downgrade von Versionen ist nicht sofort möglich: Der Wechsel von Beta auf Server notifications that require attention. Server-Benachrichtigungen, die Aufmerksamkeit erfordern. - - Server poll interval - Serverabrufintervall - - - Show Call Notifications - Anrufbenachrichtigungen anzeigen - - - Show Chat Notifications - Chat-Benachrichtigungen anzeigen - Show Server &Notifications Server&benachrichtigungen anzeigen @@ -2649,10 +2569,6 @@ Ein Downgrade von Versionen ist nicht sofort möglich: Der Wechsel von Beta auf Show call notifications - - Show chat notification dialogs. - Dialog zu Chat-Benachrichtigungen anzeigen - Show sync folders in &Explorer's navigation pane Synchronisierungsordner im Navigationsbereich des &Explorers anzeigen @@ -2681,10 +2597,6 @@ Ein Downgrade von Versionen ist nicht sofort möglich: Der Wechsel von Beta auf Usage Documentation Nutzungsdokumentation - - Use &Monochrome Icons - &Monochrome Symbole verwenden - Use &monochrome icons @@ -2717,7 +2629,7 @@ Ein Downgrade von Versionen ist nicht sofort möglich: Der Wechsel von Beta auf https://wl.hidrive.com/easy/0005 - + https://wl.hidrive.com/easy/0006 @@ -2725,15 +2637,11 @@ Ein Downgrade von Versionen ist nicht sofort möglich: Der Wechsel von Beta auf https://wl.hidrive.com/easy/0007 - - seconds (if <a href="https://github.com/nextcloud/notify_push">Client Push</a> is unavailable) - Sekunden (Wenn <a href="https://github.com/nextcloud/notify_push">Client Push</a> nicht verfügbar ist) - stable Stabil - + OCC::GETFileJob @@ -2828,10 +2736,6 @@ Ein Downgrade von Versionen ist nicht sofort möglich: Der Wechsel von Beta auf Add Hinzufügen - - Add Ignore Pattern - Ignoriermuster hinzufügen - Add a new ignore pattern: Neues Ignoriermuster hinzufügen @@ -2860,7 +2764,7 @@ Objekte, bei denen Löschen erlaubt ist, werden gelöscht, wenn diese das Entfer Ignore Pattern - + Pattern Muster @@ -2872,7 +2776,7 @@ Objekte, bei denen Löschen erlaubt ist, werden gelöscht, wenn diese das Entfer Remove all Alle entfernen - + OCC::InvalidFilenameDialog @@ -3542,14 +3446,6 @@ Beachten Sie, dass die Verwendung von Befehlszeilenoptionen für die Protokollie Trying to connect to %1 at %2 … Verbindungsversuch mit %1 unter %2 … - - Virtual files enabled - Virtuelle Dateien aktiviert - - - Your account is now syncing with virtual files support. This means that all your files are online-only by default, and will be downloaded on-demand when you open them. You may find your files under the <b>Locations</b> section of the Finder sidebar. - Ihr Konto wird jetzt mithilfe virtueller Dateien synchronisiert. Das bedeutet, dass alle Ihre Dateien standardmäßig online gespeichert sind und erst dann heruntergeladen werden, wenn Sie sie öffnen. Sie finden Ihre Dateien unter dem Abschnitt <b>Speicherorte</b> in der Finder-Seitenleiste. - creating folder on Nextcloud: %1 Erstelle Ordner auf Nextcloud: %1 @@ -4207,11 +4103,11 @@ Dies ist ein neuer, experimenteller Modus. Wenn Sie sich entscheiden, ihn zu ver Success - + Warning Warnung - + OCC::SettingsDialog @@ -4235,11 +4131,11 @@ Dies ist ein neuer, experimenteller Modus. Wenn Sie sich entscheiden, ihn zu ver New account - + Settings Einstellungen - + OCC::ShareeModel @@ -4523,27 +4419,15 @@ Server antwortete mit Fehler: %2 The connection is not secure Die Verbindung ist nicht sicher - - This connection is NOT secure as it is not encrypted. - - Diese Verbindung ist NICHT sicher, da diese nicht verschlüsselt ist. - - This connection is NOT secure as it is not encrypted. - - This connection is encrypted using %1 bit %2. - - Diese Verbindung ist verschlüsselt mit %1 Bit %2. - - This connection is encrypted using %1 bit %2. - + OCC::SslErrorDialog @@ -5083,17 +4967,9 @@ Server antwortete mit Fehler: %2 <b>You have been logged out of your account %1 at %2. Please login again.</b> - - You have been logged out of your account %1 at %2. Please login again. - Sie wurden von Ihrem Konto %1 als %2 abgemeldet. Bitte melden Sie sich erneut an. - - + OCC::WelcomePage - - Easy-to-use web mail, calendaring & contacts - Einfach zu bedienende Webmail, Kalender & Kontakte - Form Formular @@ -5110,14 +4986,6 @@ Server antwortete mit Fehler: %2 Log in Anmelden - - Screensharing, online meetings & web conferences - Bildschirmfreigabe, Online-Meetings & Webkonferenzen - - - Secure collaboration & file exchange - Sichere Zusammenarbeit & Dateiaustausch - Sign up with provider Mit Provider anmelden @@ -5133,10 +5001,6 @@ Server antwortete mit Fehler: %2 <html><head/><body><p>If this box is checked, existing content in the local folder will be erased to start a clean sync from the server.</p><p>Do not check this if the local content should be uploaded to the servers folder.</p></body></html> <html><head/><body><p>Wenn diese Option gesetzt ist, werden bestehende Inhalte im lokalen Ordner gelöscht, um eine saubere Synchronisierung nur der Serverdaten zu ermöglichen.</p><p>Wählen Sie diese Option nicht, wenn die lokalen Inhalte auf den Server übertragen werden sollen.</p></body></html> - - Ask before syncing external storages - Fragen, bevor externe Speicher synchronisiert werden - Ask before syncing folders larger than Fragen, bevor Ordner synchronisiert werden. Grenze: @@ -5196,10 +5060,6 @@ Server antwortete mit Fehler: %2 OwncloudSetupPage - - Logo - Logo - Server address Serveradresse @@ -5376,7 +5236,7 @@ Server antwortete mit Fehler: %2 The directory %1 cannot be part of your sync directory. Please choose another folder. - + You changed %1 Sie haben %1 geändert @@ -5400,7 +5260,7 @@ Server antwortete mit Fehler: %2 now jetzt - + ResolveConflictsDialog @@ -5453,11 +5313,11 @@ Server antwortete mit Fehler: %2 Open local or group folders Lokalen oder Gruppenordner öffnen - + Website - + ShareDelegate @@ -5503,14 +5363,6 @@ Server antwortete mit Fehler: %2 Custom Permissions - - Edit share - Freigabe bearbeiten - - - Enter a note for the recipient - Eine Notiz für den Empfänger eingeben - Enter the note to recipient @@ -5535,10 +5387,6 @@ Server antwortete mit Fehler: %2 Set expiration date Ablaufdatum setzen - - Share label - Freigabe-Label - Share link copied! Freigabelink kopiert! @@ -5551,7 +5399,7 @@ Server antwortete mit Fehler: %2 View only Nur anzeigen - + ShareeSearchField @@ -5691,7 +5539,7 @@ Server antwortete mit Fehler: %2 Account switcher and settings menu Konto-Umschalter und Einstellungsmenü - + Add account Konto hinzufügen @@ -5727,7 +5575,7 @@ Server antwortete mit Fehler: %2 Settings Einstellungen - + TrayWindowHeader @@ -5753,7 +5601,7 @@ Server antwortete mit Fehler: %2 Open %1 in browser %1 im Browser öffnen - + Open Nextcloud Talk in browser Nextcloud-Talk im Browser öffnen @@ -5769,7 +5617,7 @@ Server antwortete mit Fehler: %2 Website - + UnifiedSearchInputContainer @@ -5825,14 +5673,6 @@ Server antwortete mit Fehler: %2 Account actions Konto-Aktionen - - Current account status is do not disturb - Aktueller Kontostatus ist "Nicht stören" - - - Current account status is online - Aktueller Kontostatus ist "Online" - Log in Anmelden diff --git a/translations/client_en.ts b/translations/client_en.ts index 45b0a0b139d5b..a24d7de5e7adb 100644 --- a/translations/client_en.ts +++ b/translations/client_en.ts @@ -358,11 +358,11 @@ macOS may ignore or delay this request. Reopen Browser - + Switch to your browser to connect your account - + FolderWizardSelectiveSync @@ -380,7 +380,7 @@ macOS may ignore or delay this request. &Choose - + Add Folder Sync @@ -392,7 +392,7 @@ macOS may ignore or delay this request. Step 1 of 3: Select local folder - + FolderWizardTargetPage @@ -403,7 +403,7 @@ macOS may ignore or delay this request. Both folders are permanently linked and the respective contents are automatically synchronized and updated. - + Create folder @@ -423,7 +423,7 @@ macOS may ignore or delay this request. Step 2 of 3: Directory in your %1 - + main.cpp @@ -807,7 +807,7 @@ Would you like to set up end-to-end encryption? There are folders that were not synchronized because they are too big or external storages: - + There are folders that were not synchronized because they are too big: @@ -865,7 +865,7 @@ Wait for the new sync, then encrypt it. https://wl.hidrive.com/easy/0057 - + OCC::AccountSetupFromCommandLineJob @@ -1747,7 +1747,7 @@ This can be an issue with your OpenSSL libraries. Switch to your browser to connect your account - + Unable to open the Browser, please copy the link to your Browser. @@ -1755,7 +1755,7 @@ This can be an issue with your OpenSSL libraries. Waiting for authorization - + OCC::Folder @@ -1854,7 +1854,7 @@ This can be an issue with your OpenSSL libraries. A folder from an external storage has been added. - + A folder has surpassed the set folder size limit of %1MB: %2. %3 @@ -1951,14 +1951,14 @@ This means that the synchronization client might not upload local changes immedi Would you like to stop syncing this folder? - + OCC::FolderCreationDialog %1 Create new folder - + Could not create a folder! Check your write permissions. @@ -1978,7 +1978,7 @@ This means that the synchronization client might not upload local changes immedi Folder already exists - + OCC::FolderMan @@ -1989,7 +1989,7 @@ This means that the synchronization client might not upload local changes immedi (backup %1) - + (backup) @@ -2098,7 +2098,7 @@ For advanced users: this issue might be related to multiple sync database files Waiting to start syncing. - + OCC::FolderStatusDelegate @@ -2278,7 +2278,7 @@ For advanced users: this issue might be related to multiple sync database files Choose - + Click to select a local folder to sync. @@ -2298,7 +2298,7 @@ For advanced users: this issue might be related to multiple sync database files Step 1 of 3: Select local folder - + OCC::FolderWizardRemotePath @@ -2325,7 +2325,7 @@ For advanced users: this issue might be related to multiple sync database files Create folder - + Enter the name of the new folder to be created below "%1": @@ -2357,7 +2357,7 @@ For advanced users: this issue might be related to multiple sync database files Step 2 of 3: Directory in your %1 - + OCC::FolderWizardSelectiveSync @@ -2372,7 +2372,7 @@ For advanced users: this issue might be related to multiple sync database files Step 3 of 3: Selektive Synchronisation - + Use virtual files instead of downloading content immediately %1 @@ -2384,7 +2384,7 @@ For advanced users: this issue might be related to multiple sync database files Virtual files are not supported for Windows partition roots as local folder. Please choose a valid subfolder under drive letter. - + OCC::GeneralSettings @@ -2598,7 +2598,7 @@ Downgrading versions is not possible immediately: changing from stable to enterp https://wl.hidrive.com/easy/0005 - + https://wl.hidrive.com/easy/0006 @@ -2610,7 +2610,7 @@ Downgrading versions is not possible immediately: changing from stable to enterp stable - + OCC::GETFileJob @@ -2729,7 +2729,7 @@ Items where deletion is allowed will be deleted if they prevent a directory from Ignore Pattern - + Pattern @@ -2741,7 +2741,7 @@ Items where deletion is allowed will be deleted if they prevent a directory from Remove all - + OCC::InvalidFilenameDialog @@ -4059,11 +4059,11 @@ This is a new, experimental mode. If you decide to use it, please report any iss Success - + Warning - + OCC::SettingsDialog @@ -4087,11 +4087,11 @@ This is a new, experimental mode. If you decide to use it, please report any iss New account - + Settings - + OCC::ShareeModel @@ -4377,11 +4377,11 @@ Server replied with error: %2 This connection is NOT secure as it is not encrypted. - + This connection is encrypted using %1 bit %2. - + OCC::SslErrorDialog @@ -5190,7 +5190,7 @@ Server replied with error: %2 The directory %1 cannot be part of your sync directory. Please choose another folder. - + You changed %1 @@ -5214,7 +5214,7 @@ Server replied with error: %2 now - + ResolveConflictsDialog @@ -5267,11 +5267,11 @@ Server replied with error: %2 Open local or group folders - + Website - + ShareDelegate @@ -5317,7 +5317,7 @@ Server replied with error: %2 Custom Permissions - + Enter the note to recipient @@ -5353,7 +5353,7 @@ Server replied with error: %2 View only - + ShareeSearchField @@ -5493,7 +5493,7 @@ Server replied with error: %2 Account switcher and settings menu - + Add account @@ -5529,7 +5529,7 @@ Server replied with error: %2 Settings - + TrayWindowHeader @@ -5555,7 +5555,7 @@ Server replied with error: %2 Open %1 in browser - + Open Nextcloud Talk in browser @@ -5571,7 +5571,7 @@ Server replied with error: %2 Website - + UnifiedSearchInputContainer diff --git a/translations/client_en_GB.ts b/translations/client_en_GB.ts index 1fcbe403b354c..8ee7017d6aedf 100644 --- a/translations/client_en_GB.ts +++ b/translations/client_en_GB.ts @@ -118,10 +118,6 @@ Syncing %1 of %2 Syncing %1 of %2 - - Syncing %1 of %2 (%3 left) - Syncing %1 of %2 (%3 left) - Syncing %1 of %2 (%3 left) Syncing %1 of %2 (%3 left) @@ -234,19 +230,11 @@ FileDetailsPage - - Activity - Activity - Dismiss Dismiss - - Sharing - Sharing - - + FileDetailsWindow @@ -275,10 +263,6 @@ Enable fast sync Enable fast sync - - Fast sync will only sync changes in files and folders within folders that have been explored. This can significantly increase responsiveness on initial configuration of virtual files. However, it will cause redundant downloads of files moved to an unexplored folder. - Fast sync will only sync changes in files and folders within folders that have been explored. This can significantly increase responsiveness on initial configuration of virtual files. However, it will cause redundant downloads of files moved to an unexplored folder. - Fast sync will only sync changes in files and folders within folders that have been explored. This can significantly increase responsiveness on initial configuration of virtual files. However, it will cause redundant downloads of files moved to an unexplored folder. @@ -375,11 +359,11 @@ macOS may ignore or delay this request. Reopen Browser - + Switch to your browser to connect your account Switch to your browser to connect your account - + FolderWizardSelectiveSync @@ -397,18 +381,10 @@ macOS may ignore or delay this request. &Choose - - &Choose … - &Choose … - Add Folder Sync - - Pick a local folder on your computer to sync - Pick a local folder on your computer to sync - Select a folder on your hard drive that should be permanetly connected to your %1. All files and subfolders are automatically uploaded and synchronized @@ -417,7 +393,7 @@ macOS may ignore or delay this request. Step 1 of 3: Select local folder - + FolderWizardTargetPage @@ -428,7 +404,7 @@ macOS may ignore or delay this request. Both folders are permanently linked and the respective contents are automatically synchronized and updated. - + Create folder Create folder @@ -444,15 +420,11 @@ macOS may ignore or delay this request. Refresh Refresh - - Select a remote destination folder - Select a remote destination folder - Step 2 of 3: Directory in your %1 - + main.cpp @@ -831,26 +803,14 @@ Would you like to set up end-to-end encryption? There are folders that have grown in size beyond %1MB: %2 There are folders that have grown in size beyond %1MB: %2 - - There are folders that were not synchronized because they are external storages: - There are folders that were not synchronised because they are external storages: - There are folders that were not synchronized because they are external storages: - - There are folders that were not synchronized because they are too big or external storages: - There are folders that were not synchronised because they are too big or external storages: - There are folders that were not synchronized because they are too big or external storages: - - There are folders that were not synchronized because they are too big: - There are folders that were not synchronised because they are too big: - There are folders that were not synchronized because they are too big: @@ -915,7 +875,7 @@ Wait for the new sync, then encrypt it. https://wl.hidrive.com/easy/0057 - + OCC::AccountSetupFromCommandLineJob @@ -1801,7 +1761,7 @@ This can be an issue with your OpenSSL libraries. Switch to your browser to connect your account Switch to your browser to connect your account - + Unable to open the Browser, please copy the link to your Browser. Unable to open the Browser, please copy the link to your Browser. @@ -1809,7 +1769,7 @@ This can be an issue with your OpenSSL libraries. Waiting for authorization Waiting for authorization - + OCC::Folder @@ -1904,17 +1864,11 @@ This can be an issue with your OpenSSL libraries. %1 is currently locked. %1 is currently locked. - - A folder from an external storage has been added. - - A folder from an external storage has been added. - - A folder from an external storage has been added. - + A folder has surpassed the set folder size limit of %1MB: %2. %3 A folder has surpassed the set folder size limit of %1MB: %2. @@ -1935,12 +1889,6 @@ Alternatively, you can restore all deleted files by downloading them from the se A large number of files in your local '%1' folder have been deleted. Please confirm if you'd like to proceed with these deletions. Alternatively, you can restore all deleted files by downloading them from the server. - - - A new folder larger than %1 MB has been added: %2. - - A new folder larger than %1 MB has been added: %2. - A new folder larger than %1 MB has been added: %2. @@ -2026,14 +1974,14 @@ This means that the synchronization client might not upload local changes immedi Would you like to stop syncing this folder? Would you like to stop syncing this folder? - + OCC::FolderCreationDialog %1 Create new folder - + Could not create a folder! Check your write permissions. Could not create a folder! Check your write permissions. @@ -2053,25 +2001,17 @@ This means that the synchronization client might not upload local changes immedi Folder already exists Folder already exists - + OCC::FolderMan %1 (Sync is paused) %1 (Sync is paused) - - (backup %1) - (backup %1) - (backup %1) - - (backup) - (backup) - (backup) @@ -2184,17 +2124,13 @@ For advanced users: this issue might be related to multiple sync database files Waiting to start syncing. Waiting to start syncing. - + OCC::FolderStatusDelegate Add Folder Sync - - Add Folder Sync Connection - Add Folder Sync Connection - File File @@ -2368,7 +2304,7 @@ For advanced users: this issue might be related to multiple sync database files Choose Choose - + Click to select a local folder to sync. Click to select a local folder to sync. @@ -2388,7 +2324,7 @@ For advanced users: this issue might be related to multiple sync database files Step 1 of 3: Select local folder - + OCC::FolderWizardRemotePath @@ -2415,7 +2351,7 @@ For advanced users: this issue might be related to multiple sync database files Create folder Create folder - + Enter the name of the new folder to be created below "%1": Enter the name of the new folder to be created below "%1": @@ -2447,7 +2383,7 @@ For advanced users: this issue might be related to multiple sync database files Step 2 of 3: Directory in your %1 - + OCC::FolderWizardSelectiveSync @@ -2462,7 +2398,7 @@ For advanced users: this issue might be related to multiple sync database files Step 3 of 3: Selektive Synchronisation - + Use virtual files instead of downloading content immediately %1 Use virtual files instead of downloading content immediately %1 @@ -2474,7 +2410,7 @@ For advanced users: this issue might be related to multiple sync database files Virtual files are not supported for Windows partition roots as local folder. Please choose a valid subfolder under drive letter. Virtual files are not supported for Windows partition roots as local folder. Please choose a valid subfolder under drive letter. - + OCC::GeneralSettings @@ -2573,10 +2509,6 @@ Downgrading versions is not possible immediately: changing from stable to enterp General Settings General Settings - - Info - Info - Legal Notice Legal Notice @@ -2626,18 +2558,6 @@ Downgrading versions is not possible immediately: changing from stable to enterp Server notifications that require attention. Server notifications that require attention. - - Server poll interval - Server poll interval - - - Show Call Notifications - Show Call Notifications - - - Show Chat Notifications - Show Chat Notifications - Show Server &Notifications Show Server &Notifications @@ -2650,10 +2570,6 @@ Downgrading versions is not possible immediately: changing from stable to enterp Show call notifications - - Show chat notification dialogs. - Show chat notification dialogs. - Show sync folders in &Explorer's navigation pane Show sync folders in &Explorer's navigation pane @@ -2683,10 +2599,6 @@ Downgrading versions is not possible immediately: changing from stable to enterp Usage Documentation Usage Documentation - - Use &Monochrome Icons - Use &Monochrome Icons - Use &monochrome icons @@ -2719,7 +2631,7 @@ Downgrading versions is not possible immediately: changing from stable to enterp https://wl.hidrive.com/easy/0005 - + https://wl.hidrive.com/easy/0006 @@ -2727,15 +2639,11 @@ Downgrading versions is not possible immediately: changing from stable to enterp https://wl.hidrive.com/easy/0007 - - seconds (if <a href="https://github.com/nextcloud/notify_push">Client Push</a> is unavailable) - seconds (if <a href="https://github.com/nextcloud/notify_push">Client Push</a> is unavailable) - stable stable - + OCC::GETFileJob @@ -2830,10 +2738,6 @@ Downgrading versions is not possible immediately: changing from stable to enterp Add Add - - Add Ignore Pattern - Add Ignore Pattern - Add a new ignore pattern: Add a new ignore pattern: @@ -2862,7 +2766,7 @@ Items where deletion is allowed will be deleted if they prevent a directory from Ignore Pattern - + Pattern Pattern @@ -2874,7 +2778,7 @@ Items where deletion is allowed will be deleted if they prevent a directory from Remove all Remove all - + OCC::InvalidFilenameDialog @@ -3544,14 +3448,6 @@ Note that using any logging command line options will override this setting.Trying to connect to %1 at %2 … Trying to connect to %1 at %2 … - - Virtual files enabled - Virtual files enabled - - - Your account is now syncing with virtual files support. This means that all your files are online-only by default, and will be downloaded on-demand when you open them. You may find your files under the <b>Locations</b> section of the Finder sidebar. - Your account is now syncing with virtual files support. This means that all your files are online-only by default, and will be downloaded on-demand when you open them. You may find your files under the <b>Locations</b> section of the Finder sidebar. - creating folder on Nextcloud: %1 creating folder on Nextcloud: %1 @@ -4209,11 +4105,11 @@ This is a new, experimental mode. If you decide to use it, please report any iss Success - + Warning Warning - + OCC::SettingsDialog @@ -4237,11 +4133,11 @@ This is a new, experimental mode. If you decide to use it, please report any iss New account - + Settings Settings - + OCC::ShareeModel @@ -4525,27 +4421,15 @@ Server replied with error: %2 The connection is not secure The connection is not secure - - This connection is NOT secure as it is not encrypted. - - This connection is NOT secure as it is not encrypted. - - This connection is NOT secure as it is not encrypted. - - This connection is encrypted using %1 bit %2. - - This connection is encrypted using %1 bit %2. - - This connection is encrypted using %1 bit %2. - + OCC::SslErrorDialog @@ -5085,17 +4969,9 @@ Server replied with error: %2 <b>You have been logged out of your account %1 at %2. Please login again.</b> - - You have been logged out of your account %1 at %2. Please login again. - You have been logged out of your account %1 at %2. Please login again. - - + OCC::WelcomePage - - Easy-to-use web mail, calendaring & contacts - Easy-to-use web mail, calendaring & contacts - Form Form @@ -5112,14 +4988,6 @@ Server replied with error: %2 Log in Log in - - Screensharing, online meetings & web conferences - Screensharing, online meetings & web conferences - - - Secure collaboration & file exchange - Secure collaboration & file exchange - Sign up with provider Sign up with provider @@ -5135,10 +5003,6 @@ Server replied with error: %2 <html><head/><body><p>If this box is checked, existing content in the local folder will be erased to start a clean sync from the server.</p><p>Do not check this if the local content should be uploaded to the servers folder.</p></body></html> <html><head/><body><p>If this box is checked, existing content in the local folder will be erased to start a clean sync from the server.</p><p>Do not check this if the local content should be uploaded to the servers folder.</p></body></html> - - Ask before syncing external storages - Ask before syncing external storages - Ask before syncing folders larger than Ask before syncing folders larger than @@ -5198,10 +5062,6 @@ Server replied with error: %2 OwncloudSetupPage - - Logo - Logo - Server address Server address @@ -5378,7 +5238,7 @@ Server replied with error: %2 The directory %1 cannot be part of your sync directory. Please choose another folder. - + You changed %1 You changed %1 @@ -5402,7 +5262,7 @@ Server replied with error: %2 now now - + ResolveConflictsDialog @@ -5455,11 +5315,11 @@ Server replied with error: %2 Open local or group folders Open local or group folders - + Website - + ShareDelegate @@ -5505,14 +5365,6 @@ Server replied with error: %2 Custom Permissions - - Edit share - Edit share - - - Enter a note for the recipient - Enter a note for the recipient - Enter the note to recipient @@ -5537,10 +5389,6 @@ Server replied with error: %2 Set expiration date Set expiration date - - Share label - Share label - Share link copied! Share link copied! @@ -5553,7 +5401,7 @@ Server replied with error: %2 View only View only - + ShareeSearchField @@ -5693,7 +5541,7 @@ Server replied with error: %2 Account switcher and settings menu Account switcher and settings menu - + Add account Add account @@ -5729,7 +5577,7 @@ Server replied with error: %2 Settings Settings - + TrayWindowHeader @@ -5755,7 +5603,7 @@ Server replied with error: %2 Open %1 in browser Open %1 in browser - + Open Nextcloud Talk in browser Open Nextcloud Talk in browser @@ -5771,7 +5619,7 @@ Server replied with error: %2 Website - + UnifiedSearchInputContainer @@ -5827,14 +5675,6 @@ Server replied with error: %2 Account actions Account actions - - Current account status is do not disturb - Current account status is do not disturb - - - Current account status is online - Current account status is online - Log in Log in diff --git a/translations/client_es.ts b/translations/client_es.ts index 6037527fa3d31..9fa143c2d89a1 100644 --- a/translations/client_es.ts +++ b/translations/client_es.ts @@ -118,10 +118,6 @@ Syncing %1 of %2 Sincronizando %1 de %2 - - Syncing %1 of %2 (%3 left) - Sincronizando %1 de %2 (%3 restantes) - Syncing %1 of %2 (%3 left) Sicronizando %1 de %2 (quedan %3) @@ -234,19 +230,11 @@ FileDetailsPage - - Activity - Actividad - Dismiss Descartar - - Sharing - Compartir - - + FileDetailsWindow @@ -275,10 +263,6 @@ Enable fast sync Habilitar sincronización rápida - - Fast sync will only sync changes in files and folders within folders that have been explored. This can significantly increase responsiveness on initial configuration of virtual files. However, it will cause redundant downloads of files moved to an unexplored folder. - La sincronización rápida sólo sincronizará los cambios en archivos y carpetas dentro de las carpetas que se han explorado. Esto puede incrementar significativamente la capacidad de respuesta en la configuración inicial de los archivos virtuales. Sin embargo, esto provocará descargas redundantes de archivos movidos a carpetas inexploradas. - Fast sync will only sync changes in files and folders within folders that have been explored. This can significantly increase responsiveness on initial configuration of virtual files. However, it will cause redundant downloads of files moved to an unexplored folder. @@ -375,11 +359,11 @@ macOS podría ignorar o demorar esta solicitud. Reopen Browser - + Switch to your browser to connect your account Cambiar al navegador para conectar con tu cuenta - + FolderWizardSelectiveSync @@ -397,18 +381,10 @@ macOS podría ignorar o demorar esta solicitud. &Choose - - &Choose … - &Seleccionar … - Add Folder Sync - - Pick a local folder on your computer to sync - Seleccione una carpeta local en su equipo para sincronizar - Select a folder on your hard drive that should be permanetly connected to your %1. All files and subfolders are automatically uploaded and synchronized @@ -417,7 +393,7 @@ macOS podría ignorar o demorar esta solicitud. Step 1 of 3: Select local folder - + FolderWizardTargetPage @@ -428,7 +404,7 @@ macOS podría ignorar o demorar esta solicitud. Both folders are permanently linked and the respective contents are automatically synchronized and updated. - + Create folder Crear carpeta @@ -444,15 +420,11 @@ macOS podría ignorar o demorar esta solicitud. Refresh Actualizar - - Select a remote destination folder - Seleccionar una carpeta remota de destino - Step 2 of 3: Directory in your %1 - + main.cpp @@ -831,26 +803,14 @@ Would you like to set up end-to-end encryption? There are folders that have grown in size beyond %1MB: %2 Existen carpetas que han aumentado de tamaño más allá de %1MB: %2 - - There are folders that were not synchronized because they are external storages: - Hay carpetas que no se han sincronizado porque están en el almacenamiento externo: - There are folders that were not synchronized because they are external storages: - - There are folders that were not synchronized because they are too big or external storages: - Hay carpetas que no se han sincronizado porque son demasiado grandes o están en el almacenamiento externo: - There are folders that were not synchronized because they are too big or external storages: - - There are folders that were not synchronized because they are too big: - Hay carpetas que no se han sincronizado porque son demasiado grandes: - There are folders that were not synchronized because they are too big: @@ -915,7 +875,7 @@ Espere a una nueva sincronización, luego cifrala. https://wl.hidrive.com/easy/0057 - + OCC::AccountSetupFromCommandLineJob @@ -1801,7 +1761,7 @@ Esto podría ser un problema con tu librería OpenSSL Switch to your browser to connect your account Cambiar al navegador para conectar con tu cuenta - + Unable to open the Browser, please copy the link to your Browser. No se ha podido abrir el navegador, por favor copie el enlace en su navegador. @@ -1809,7 +1769,7 @@ Esto podría ser un problema con tu librería OpenSSL Waiting for authorization Esperando autorización - + OCC::Folder @@ -1904,17 +1864,11 @@ Esto podría ser un problema con tu librería OpenSSL %1 is currently locked. %1 está actualmente bloqueado. - - A folder from an external storage has been added. - - Una carpeta de almacenamiento externo ha sido añadida. - - A folder from an external storage has been added. - + A folder has surpassed the set folder size limit of %1MB: %2. %3 Una carpeta ha sobrepasado el límite establecido de tamaño de %1MB: %2. @@ -1935,12 +1889,6 @@ Alternatively, you can restore all deleted files by downloading them from the se Han sido eliminados un gran número de archivos en su carpeta local '%1'. Por favor, confirma si quiere continuar con estas eliminaciones. Alternativamente, puede restaurar todos los archivos borrados descargándolos del servidor. - - - A new folder larger than %1 MB has been added: %2. - - Una carpeta mayor de %1 MB ha sido añadida: %2. - A new folder larger than %1 MB has been added: %2. @@ -2026,14 +1974,14 @@ Esto significa que el cliente de sincronización podría no subir inmediatamente Would you like to stop syncing this folder? ¿Desea detener la sincronización de esta carpeta? - + OCC::FolderCreationDialog %1 Create new folder - + Could not create a folder! Check your write permissions. ¡No se pudo crear la carpeta! Comprueba los permisos de escritura. @@ -2053,25 +2001,17 @@ Esto significa que el cliente de sincronización podría no subir inmediatamente Folder already exists Ya existe la carpeta - + OCC::FolderMan %1 (Sync is paused) %1 (Sincronización en pausa) - - (backup %1) - (copia de seguridad %1) - (backup %1) - - (backup) - (copia de seguridad) - (backup) @@ -2184,17 +2124,13 @@ Para usuarios avanzados: Este problema puede estar relacionado a múltiples arch Waiting to start syncing. Esperando para comenzar la sincronización. - + OCC::FolderStatusDelegate Add Folder Sync - - Add Folder Sync Connection - Añadir conexión para el directorio de sincronización - File Archivo @@ -2368,7 +2304,7 @@ Para usuarios avanzados: Este problema puede estar relacionado a múltiples arch Choose Seleccione - + Click to select a local folder to sync. Haga clic para seleccionar una carpeta local que sincronizar. @@ -2388,7 +2324,7 @@ Para usuarios avanzados: Este problema puede estar relacionado a múltiples arch Step 1 of 3: Select local folder - + OCC::FolderWizardRemotePath @@ -2415,7 +2351,7 @@ Para usuarios avanzados: Este problema puede estar relacionado a múltiples arch Create folder Crear carpeta - + Enter the name of the new folder to be created below "%1": Introduce el nombre de la nueva carpeta que se creará debajo de "%1": @@ -2447,7 +2383,7 @@ Para usuarios avanzados: Este problema puede estar relacionado a múltiples arch Step 2 of 3: Directory in your %1 - + OCC::FolderWizardSelectiveSync @@ -2462,7 +2398,7 @@ Para usuarios avanzados: Este problema puede estar relacionado a múltiples arch Step 3 of 3: Selektive Synchronisation - + Use virtual files instead of downloading content immediately %1 Usa archivos virtuales en vez de descargar el contenido inmediatamente %1 @@ -2474,7 +2410,7 @@ Para usuarios avanzados: Este problema puede estar relacionado a múltiples arch Virtual files are not supported for Windows partition roots as local folder. Please choose a valid subfolder under drive letter. Los archivos virtuales no son compatibles con la carpeta raíz de la partición de Windows como carpeta local. Por favor, elija una subcarpeta válida bajo la letra de la unidad. - + OCC::GeneralSettings @@ -2573,10 +2509,6 @@ Cambiar a una versión anterior no es inmediatamente posible: cambiar de estable General Settings Ajustes generales - - Info - Información - Legal Notice Aviso Legal @@ -2626,18 +2558,6 @@ Cambiar a una versión anterior no es inmediatamente posible: cambiar de estable Server notifications that require attention. Notificaciones del servidor que requieren atención. - - Server poll interval - Intervalo de sondeo del servidor - - - Show Call Notifications - Mostrar notificaciones de llamadas - - - Show Chat Notifications - Mostrar las notificaciones de Chat - Show Server &Notifications Mostrar &Notificaciones del Servidor @@ -2650,10 +2570,6 @@ Cambiar a una versión anterior no es inmediatamente posible: cambiar de estable Show call notifications - - Show chat notification dialogs. - Mostrar diálogos de notificación de chats. - Show sync folders in &Explorer's navigation pane Mostrar carpetas sincronizadas en el panel de navegación del &Explorador @@ -2683,10 +2599,6 @@ Cambiar a una versión anterior no es inmediatamente posible: cambiar de estable Usage Documentation Documentación de uso - - Use &Monochrome Icons - Usar iconos &monocromáticos - Use &monochrome icons @@ -2719,7 +2631,7 @@ Cambiar a una versión anterior no es inmediatamente posible: cambiar de estable https://wl.hidrive.com/easy/0005 - + https://wl.hidrive.com/easy/0006 @@ -2727,15 +2639,11 @@ Cambiar a una versión anterior no es inmediatamente posible: cambiar de estable https://wl.hidrive.com/easy/0007 - - seconds (if <a href="https://github.com/nextcloud/notify_push">Client Push</a> is unavailable) - segundos (si <a href="https://github.com/nextcloud/notify_push">Client Push</a>no está disponible) - stable stable - + OCC::GETFileJob @@ -2830,10 +2738,6 @@ Cambiar a una versión anterior no es inmediatamente posible: cambiar de estable Add Añadir - - Add Ignore Pattern - Añadir patrón de ignorados - Add a new ignore pattern: Añadir un nuevo patrón de archivos ignorados: @@ -2862,7 +2766,7 @@ Los elementos que se permite su borrado se eliminarán si impiden que un directo Ignore Pattern - + Pattern Patrón @@ -2874,7 +2778,7 @@ Los elementos que se permite su borrado se eliminarán si impiden que un directo Remove all Eliminar todos - + OCC::InvalidFilenameDialog @@ -3544,14 +3448,6 @@ Nótese que usar cualquier opción de toma de registros a través de línea de c Trying to connect to %1 at %2 … Intentando conectar a %1 desde %2 ... - - Virtual files enabled - Archivos virtuales habilitados - - - Your account is now syncing with virtual files support. This means that all your files are online-only by default, and will be downloaded on-demand when you open them. You may find your files under the <b>Locations</b> section of the Finder sidebar. - Su cuenta se encuentra ahora sincronizando con soporte a archivos virtuales. Esto significa que, por defecto, todos sus archivos están en modo solo en línea, y se descargarán bajo demanda cuando los abra. Puede conseguir sus archivos bajo la sección <b>Ubicaciones</b> de la barra lateral del Finder. - creating folder on Nextcloud: %1 Creando carpeta en Nextcloud: %1 @@ -4209,11 +4105,11 @@ Esta es un modo nuevo y experimental. Si decides usarlo, por favor, informa de c Success - + Warning Aviso - + OCC::SettingsDialog @@ -4237,11 +4133,11 @@ Esta es un modo nuevo y experimental. Si decides usarlo, por favor, informa de c New account - + Settings Ajustes - + OCC::ShareeModel @@ -4525,27 +4421,15 @@ El servidor respondió con el error: %2 The connection is not secure La conexión no es segura - - This connection is NOT secure as it is not encrypted. - - Esta conexión NO ES SEGURA, pues no está cifrada. - - This connection is NOT secure as it is not encrypted. - - This connection is encrypted using %1 bit %2. - - Esta conexión está cifrada con %1 bit %2. - - This connection is encrypted using %1 bit %2. - + OCC::SslErrorDialog @@ -5085,17 +4969,9 @@ El servidor respondió con el error: %2 <b>You have been logged out of your account %1 at %2. Please login again.</b> - - You have been logged out of your account %1 at %2. Please login again. - Ha cerrado la sesión de su cuenta %1 en %2. Por favor, inicie sesión de nuevo. - - + OCC::WelcomePage - - Easy-to-use web mail, calendaring & contacts - Correo web, calendario y contactos fáciles de usar - Form Formulario @@ -5112,14 +4988,6 @@ El servidor respondió con el error: %2 Log in Iniciar sesión - - Screensharing, online meetings & web conferences - Compartir pantalla, reuniones online y conferencias web - - - Secure collaboration & file exchange - Colaboración segura e intercambio de archivos - Sign up with provider Iniciar sesión a través de un proveedor @@ -5135,10 +5003,6 @@ El servidor respondió con el error: %2 <html><head/><body><p>If this box is checked, existing content in the local folder will be erased to start a clean sync from the server.</p><p>Do not check this if the local content should be uploaded to the servers folder.</p></body></html> <html><head/><body><p>Si esta casilla está marcada, el contenido existente en el directorio local será eliminado para comenzar una sincronización limpia desde el servidor.</p><p>No marque esta casilla si el contenido local debería subirse al directorio del servidor.</p></body></html> - - Ask before syncing external storages - Preguntar antes sincronizar almacenamientos externos - Ask before syncing folders larger than Preguntar antes sincronizar carpetas mayores de @@ -5198,10 +5062,6 @@ El servidor respondió con el error: %2 OwncloudSetupPage - - Logo - Logo - Server address Nombre del servidor @@ -5378,7 +5238,7 @@ El servidor respondió con el error: %2 The directory %1 cannot be part of your sync directory. Please choose another folder. - + You changed %1 Ha cambiado %1 @@ -5402,7 +5262,7 @@ El servidor respondió con el error: %2 now ahora - + ResolveConflictsDialog @@ -5455,11 +5315,11 @@ El servidor respondió con el error: %2 Open local or group folders Abrir carpetas locales o de grupo - + Website - + ShareDelegate @@ -5505,14 +5365,6 @@ El servidor respondió con el error: %2 Custom Permissions - - Edit share - Editar recurso compartido - - - Enter a note for the recipient - Ingrese una nota para el destinatario - Enter the note to recipient @@ -5537,10 +5389,6 @@ El servidor respondió con el error: %2 Set expiration date Fijar fecha de caducidad - - Share label - Etiqueta del recurso compartido - Share link copied! ¡Enlace al recurso compartido copiado! @@ -5553,7 +5401,7 @@ El servidor respondió con el error: %2 View only Solo lectura - + ShareeSearchField @@ -5693,7 +5541,7 @@ El servidor respondió con el error: %2 Account switcher and settings menu Menú para cambio de cuentas y ajustes - + Add account @@ -5729,7 +5577,7 @@ El servidor respondió con el error: %2 Settings - + TrayWindowHeader @@ -5755,7 +5603,7 @@ El servidor respondió con el error: %2 Open %1 in browser Abrir %1 en el navegador - + Open Nextcloud Talk in browser Abrir Nextcloud Talk en el navegador @@ -5771,7 +5619,7 @@ El servidor respondió con el error: %2 Website - + UnifiedSearchInputContainer @@ -5827,14 +5675,6 @@ El servidor respondió con el error: %2 Account actions Acciones de la cuenta - - Current account status is do not disturb - El estado actual de la cuenta es no molestar - - - Current account status is online - El estado actual de la cuenta es en línea - Log in Iniciar sesión diff --git a/translations/client_fr.ts b/translations/client_fr.ts index 227e3d6452403..8d1413ebb1822 100644 --- a/translations/client_fr.ts +++ b/translations/client_fr.ts @@ -118,10 +118,6 @@ Syncing %1 of %2 Synchronisation de %1 sur %2 - - Syncing %1 of %2 (%3 left) - Synchronisation de %1 sur %2 (%3 restant) - Syncing %1 of %2 (%3 left) Synchronisation de %1 sur %2 (%3 restant⸱s) @@ -234,19 +230,11 @@ FileDetailsPage - - Activity - Activité - Dismiss Rejeter - - Sharing - Partage - - + FileDetailsWindow @@ -275,10 +263,6 @@ Enable fast sync Activer la sync. rapide - - Fast sync will only sync changes in files and folders within folders that have been explored. This can significantly increase responsiveness on initial configuration of virtual files. However, it will cause redundant downloads of files moved to an unexplored folder. - La synchronisation rapide va uniquement synchroniser les modifications des fichiers et des dossiers dans les dossiers qui ont été explorés. Ceci peut significativement augmenter la réactivité sur la configuration initiale des fichiers virtuelles. Cependant, cela va causer des téléchargements redondants de fichiers déplacés dans un dossier non exploré. - Fast sync will only sync changes in files and folders within folders that have been explored. This can significantly increase responsiveness on initial configuration of virtual files. However, it will cause redundant downloads of files moved to an unexplored folder. @@ -375,11 +359,11 @@ macOS may ignore or delay this request. Reopen Browser - + Switch to your browser to connect your account Basculez sur votre navigateur pour connecter votre compte - + FolderWizardSelectiveSync @@ -397,18 +381,10 @@ macOS may ignore or delay this request. &Choose - - &Choose … - &Sélectionner … - Add Folder Sync - - Pick a local folder on your computer to sync - Sélectionnez un dossier local de votre ordinateur à synchroniser - Select a folder on your hard drive that should be permanetly connected to your %1. All files and subfolders are automatically uploaded and synchronized @@ -417,7 +393,7 @@ macOS may ignore or delay this request. Step 1 of 3: Select local folder - + FolderWizardTargetPage @@ -428,7 +404,7 @@ macOS may ignore or delay this request. Both folders are permanently linked and the respective contents are automatically synchronized and updated. - + Create folder Créer un dossier @@ -444,15 +420,11 @@ macOS may ignore or delay this request. Refresh Rafraîchir - - Select a remote destination folder - Veuillez sélectionner un dossier distant - Step 2 of 3: Directory in your %1 - + main.cpp @@ -832,26 +804,14 @@ Vous prenez vos propres risques. There are folders that have grown in size beyond %1MB: %2 Il y a des dossiers qui ont augmenté de taille au-delà de %1 Mo : %2 - - There are folders that were not synchronized because they are external storages: - Certains dossiers n'ont pas été synchronisés parce qu'ils sont localisés sur un stockage externe : - There are folders that were not synchronized because they are external storages: - - There are folders that were not synchronized because they are too big or external storages: - Certains dossiers n'ont pas été synchronisés parce qu'ils sont localisés sur un stockage externe ou qu'ils sont de taille trop importante : - There are folders that were not synchronized because they are too big or external storages: - - There are folders that were not synchronized because they are too big: - Certains dossiers n'ont pas été synchronisés parce qu'ils sont de taille trop importante : - There are folders that were not synchronized because they are too big: @@ -913,7 +873,7 @@ Wait for the new sync, then encrypt it. https://wl.hidrive.com/easy/0057 - + OCC::AccountSetupFromCommandLineJob @@ -1799,7 +1759,7 @@ Cela peut être un problème avec vos bibliothèques OpenSSL. Switch to your browser to connect your account Basculez sur votre navigateur pour connecter votre compte - + Unable to open the Browser, please copy the link to your Browser. Impossible d'ouvrir le navigateur, veuillez copier le lien dans votre navigateur Web. @@ -1807,7 +1767,7 @@ Cela peut être un problème avec vos bibliothèques OpenSSL. Waiting for authorization En attente de l'autorisation - + OCC::Folder @@ -1902,18 +1862,11 @@ Cela peut être un problème avec vos bibliothèques OpenSSL. %1 is currently locked. %1 est actuellement verrouillé. - - A folder from an external storage has been added. - - Un nouveau dossier localisé sur un stockage externe a été ajouté. - - - A folder from an external storage has been added. - + A folder has surpassed the set folder size limit of %1MB: %2. %3 Un dossier a dépassé la taille limite fixée de %1 Mo : %2. @@ -1934,12 +1887,6 @@ Alternatively, you can restore all deleted files by downloading them from the se Un grand nombre de fichiers de votre dossier local '%1' ont été supprimés. Veuillez confirmer si vous souhaitez procéder à ces suppressions. Vous pouvez également restaurer tous les fichiers supprimés en les téléchargeant depuis le serveur. - - - A new folder larger than %1 MB has been added: %2. - - Un nouveau dossier de taille supérieure à %1 Mo a été ajouté : %2. - A new folder larger than %1 MB has been added: %2. @@ -2025,14 +1972,14 @@ Cela signifie que le client de bureau ne va pas téléverser immédiatement les Would you like to stop syncing this folder? Voulez vous arrêter la synchronisation de ce dossier ? - + OCC::FolderCreationDialog %1 Create new folder - + Could not create a folder! Check your write permissions. Impossible de créer le dossier ! Veuillez vérifier vos permissions d’écriture. @@ -2052,25 +1999,17 @@ Cela signifie que le client de bureau ne va pas téléverser immédiatement les Folder already exists Le dossier existe déjà - + OCC::FolderMan %1 (Sync is paused) %1 (Synchronisation en pause) - - (backup %1) - (sauvegarde %1) - (backup %1) - - (backup) - (sauvegarde) - (backup) @@ -2183,17 +2122,13 @@ Pour les utilisateurs avancés: ce problème peut aussi venir de plusieurs fichi Waiting to start syncing. En attente de synchronisation. - + OCC::FolderStatusDelegate Add Folder Sync - - Add Folder Sync Connection - Ajouter une synchronisation de dossier - File Fichier @@ -2367,7 +2302,7 @@ Pour les utilisateurs avancés: ce problème peut aussi venir de plusieurs fichi Choose Choisir - + Click to select a local folder to sync. Cliquez pour choisir un dossier local à synchroniser. @@ -2387,7 +2322,7 @@ Pour les utilisateurs avancés: ce problème peut aussi venir de plusieurs fichi Step 1 of 3: Select local folder - + OCC::FolderWizardRemotePath @@ -2414,7 +2349,7 @@ Pour les utilisateurs avancés: ce problème peut aussi venir de plusieurs fichi Create folder Créer un dossier - + Enter the name of the new folder to be created below "%1": Entrez le nom du nouveau dossier à créer dans "%1" : @@ -2446,7 +2381,7 @@ Pour les utilisateurs avancés: ce problème peut aussi venir de plusieurs fichi Step 2 of 3: Directory in your %1 - + OCC::FolderWizardSelectiveSync @@ -2461,7 +2396,7 @@ Pour les utilisateurs avancés: ce problème peut aussi venir de plusieurs fichi Step 3 of 3: Selektive Synchronisation - + Use virtual files instead of downloading content immediately %1 Utiliser les fichiers virtuels au lieu de télécharger le contenu immédiatement %1 @@ -2473,7 +2408,7 @@ Pour les utilisateurs avancés: ce problème peut aussi venir de plusieurs fichi Virtual files are not supported for Windows partition roots as local folder. Please choose a valid subfolder under drive letter. Vous ne pouvez pas définir la racine d'une partition Windows pour votre dossier local. Veuillez choisir un (sous)dossier de la partition. - + OCC::GeneralSettings @@ -2572,10 +2507,6 @@ La rétrogradation des versions n'est pas possible immédiatement: passer d General Settings Paramètres généraux - - Info - Informations - Legal Notice Mentions légales @@ -2625,18 +2556,6 @@ La rétrogradation des versions n'est pas possible immédiatement: passer d Server notifications that require attention. Notifications du serveur requérant votre attention. - - Server poll interval - Intervalle de vérification du serveur - - - Show Call Notifications - Afficher les notifications d'appel - - - Show Chat Notifications - Afficher les notifications de discussion - Show Server &Notifications Afficher les &notifications serveur @@ -2649,10 +2568,6 @@ La rétrogradation des versions n'est pas possible immédiatement: passer d Show call notifications - - Show chat notification dialogs. - Afficher les boîtes de dialogue de notification de chat. - Show sync folders in &Explorer's navigation pane Afficher les dossiers synchronisés dans le panneau de navigation de l'&Explorateur de fichiers @@ -2682,10 +2597,6 @@ La rétrogradation des versions n'est pas possible immédiatement: passer d Usage Documentation Documentation d'utilisation - - Use &Monochrome Icons - Utiliser les icônes &monochromes - Use &monochrome icons @@ -2718,7 +2629,7 @@ La rétrogradation des versions n'est pas possible immédiatement: passer d https://wl.hidrive.com/easy/0005 - + https://wl.hidrive.com/easy/0006 @@ -2726,15 +2637,11 @@ La rétrogradation des versions n'est pas possible immédiatement: passer d https://wl.hidrive.com/easy/0007 - - seconds (if <a href="https://github.com/nextcloud/notify_push">Client Push</a> is unavailable) - secondes (si le Client Push n'est pas disponible) - stable stable - + OCC::GETFileJob @@ -2829,10 +2736,6 @@ La rétrogradation des versions n'est pas possible immédiatement: passer d Add Ajouter - - Add Ignore Pattern - Ajouter un modèle d'exclusion - Add a new ignore pattern: Ajouter un nouveau modèle d'exclusion : @@ -2860,7 +2763,7 @@ Les éléments dont la suppression est autorisée seront supprimés s'ils e Ignore Pattern - + Pattern Modèle @@ -2872,7 +2775,7 @@ Les éléments dont la suppression est autorisée seront supprimés s'ils e Remove all Tout retirer - + OCC::InvalidFilenameDialog @@ -3542,14 +3445,6 @@ Notez que l'utilisation de toute option de ligne de commande de journalisat Trying to connect to %1 at %2 … Tentative de connexion à %1 sur %2 ... - - Virtual files enabled - Fichiers virtuels activés - - - Your account is now syncing with virtual files support. This means that all your files are online-only by default, and will be downloaded on-demand when you open them. You may find your files under the <b>Locations</b> section of the Finder sidebar. - Votre compte est désormais synchronisé avec la prise en charge des fichiers virtuels. Cela signifie que tous vos fichiers sont par défaut accessibles en ligne uniquement et seront téléchargés à la demande à votre ouverture. Vous trouverez vos fichiers dans la section <b> Emplacement </b> de la barre latérale du Finder. - creating folder on Nextcloud: %1 Création du dossier sur Nextcloud : %1 @@ -4207,11 +4102,11 @@ Il s'agit d'un nouveau mode expérimental. Si vous décidez de l' Success - + Warning Attention - + OCC::SettingsDialog @@ -4235,11 +4130,11 @@ Il s'agit d'un nouveau mode expérimental. Si vous décidez de l' New account - + Settings Paramètres - + OCC::ShareeModel @@ -4523,27 +4418,15 @@ Le serveur a répondu avec l'erreur : %2 The connection is not secure La connexion n'est pas sécurisée - - This connection is NOT secure as it is not encrypted. - - Cette connexion n'est PAS sécurisée car elle n'est pas chiffrée. - - This connection is NOT secure as it is not encrypted. - - This connection is encrypted using %1 bit %2. - - Cette connexion est chiffrée en utilisant %1 bit %2. - - This connection is encrypted using %1 bit %2. - + OCC::SslErrorDialog @@ -5083,17 +4966,9 @@ Le serveur a répondu avec l'erreur : %2 <b>You have been logged out of your account %1 at %2. Please login again.</b> - - You have been logged out of your account %1 at %2. Please login again. - Vous avez été déconnecté de votre compte %1 à %2. Merci de vous reconnecter. - - + OCC::WelcomePage - - Easy-to-use web mail, calendaring & contacts - E-mail, agenda et contacts en ligne faciles à utiliser - Form Formulaire @@ -5110,14 +4985,6 @@ Le serveur a répondu avec l'erreur : %2 Log in Se connecter - - Screensharing, online meetings & web conferences - Partage d'écran, réunions en ligne et conférences Web - - - Secure collaboration & file exchange - Collaboration et échange de fichiers sécurisés - Sign up with provider S'inscrire auprès d'un fournisseur @@ -5133,10 +5000,6 @@ Le serveur a répondu avec l'erreur : %2 <html><head/><body><p>If this box is checked, existing content in the local folder will be erased to start a clean sync from the server.</p><p>Do not check this if the local content should be uploaded to the servers folder.</p></body></html> <html><head/><body><p>Si cette case est cochée, le contenu existant du dossier local sera supprimé pour démarrer une synchronisation propre depuis le serveur.</p><p>Ne pas cocher si le contenu local doit être téléversé vers le serveur.</p></body></html> - - Ask before syncing external storages - Demander confirmation avant de synchroniser des stockages externes - Ask before syncing folders larger than Demander confirmation avant de synchroniser les dossiers de taille supérieure à @@ -5196,10 +5059,6 @@ Le serveur a répondu avec l'erreur : %2 OwncloudSetupPage - - Logo - Logo - Server address Adresse du serveur @@ -5376,7 +5235,7 @@ Le serveur a répondu avec l'erreur : %2 The directory %1 cannot be part of your sync directory. Please choose another folder. - + You changed %1 Vous avez modifié %1 @@ -5400,7 +5259,7 @@ Le serveur a répondu avec l'erreur : %2 now A l'instant - + ResolveConflictsDialog @@ -5453,11 +5312,11 @@ Le serveur a répondu avec l'erreur : %2 Open local or group folders Ouvrir des dossiers locaux ou de groupe - + Website - + ShareDelegate @@ -5503,14 +5362,6 @@ Le serveur a répondu avec l'erreur : %2 Custom Permissions - - Edit share - Modifier le partage - - - Enter a note for the recipient - Saisir une note pour le destinataire - Enter the note to recipient @@ -5535,10 +5386,6 @@ Le serveur a répondu avec l'erreur : %2 Set expiration date Définir une date d'expiration - - Share label - Libellé du partage - Share link copied! Lien de partage copié ! @@ -5551,7 +5398,7 @@ Le serveur a répondu avec l'erreur : %2 View only Afficher seulement - + ShareeSearchField @@ -5691,7 +5538,7 @@ Le serveur a répondu avec l'erreur : %2 Account switcher and settings menu Sélecteur de compte et menu de paramètres - + Add account Ajouter un compte @@ -5727,7 +5574,7 @@ Le serveur a répondu avec l'erreur : %2 Settings Paramètres - + TrayWindowHeader @@ -5753,7 +5600,7 @@ Le serveur a répondu avec l'erreur : %2 Open %1 in browser Ouvrir %1 dans le navigateur - + Open Nextcloud Talk in browser Ouvrir Nextcloud Discussion dans le navigateur @@ -5769,7 +5616,7 @@ Le serveur a répondu avec l'erreur : %2 Website - + UnifiedSearchInputContainer @@ -5825,14 +5672,6 @@ Le serveur a répondu avec l'erreur : %2 Account actions Actions du compte - - Current account status is do not disturb - Le statut actuel du compte est "ne pas déranger" - - - Current account status is online - Le statut actuel du compte est "en ligne" - Log in Se connecter diff --git a/translations/client_nl.ts b/translations/client_nl.ts index 617b918444c70..73a6eee496349 100644 --- a/translations/client_nl.ts +++ b/translations/client_nl.ts @@ -118,10 +118,6 @@ Syncing %1 of %2 Synchroniseren %1 van %2 - - Syncing %1 of %2 (%3 left) - Synchroniseer %1 van %2 (%3 over) - Syncing %1 of %2 (%3 left) @@ -234,19 +230,11 @@ FileDetailsPage - - Activity - Activiteit - Dismiss Negeren - - Sharing - Delen - - + FileDetailsWindow @@ -275,10 +263,6 @@ Enable fast sync Snelle sync inschakelen - - Fast sync will only sync changes in files and folders within folders that have been explored. This can significantly increase responsiveness on initial configuration of virtual files. However, it will cause redundant downloads of files moved to an unexplored folder. - Snelle synchronisatie synchroniseert alleen wijzigingen in bestanden en mappen binnen mappen die zijn verkend. Dit kan de reactiesnelheid bij de eerste configuratie van virtuele bestanden aanzienlijk verbeteren. Het zal echter leiden tot overbodige downloads van bestanden die verplaatst zijn naar een niet verkende map. - Fast sync will only sync changes in files and folders within folders that have been explored. This can significantly increase responsiveness on initial configuration of virtual files. However, it will cause redundant downloads of files moved to an unexplored folder. @@ -375,11 +359,11 @@ macOS kan dit verzoek negeren of uitstellen. Reopen Browser - + Switch to your browser to connect your account Schakel over naar je browser om je account te verbinden - + FolderWizardSelectiveSync @@ -397,18 +381,10 @@ macOS kan dit verzoek negeren of uitstellen. &Choose - - &Choose … - &Kies ... - Add Folder Sync - - Pick a local folder on your computer to sync - Kies een map op je computer om te synchroniseren - Select a folder on your hard drive that should be permanetly connected to your %1. All files and subfolders are automatically uploaded and synchronized @@ -417,7 +393,7 @@ macOS kan dit verzoek negeren of uitstellen. Step 1 of 3: Select local folder - + FolderWizardTargetPage @@ -428,7 +404,7 @@ macOS kan dit verzoek negeren of uitstellen. Both folders are permanently linked and the respective contents are automatically synchronized and updated. - + Create folder Maak map @@ -444,15 +420,11 @@ macOS kan dit verzoek negeren of uitstellen. Refresh Vernieuwen - - Select a remote destination folder - Kies een externe doelmap - Step 2 of 3: Directory in your %1 - + main.cpp @@ -829,26 +801,14 @@ Wil je begin-tot-eind versleuteling instellen? There are folders that have grown in size beyond %1MB: %2 Er zijn bestanden die groter zijn geworden dan %1MB: %2 - - There are folders that were not synchronized because they are external storages: - Er zijn mappen die niet gesynchroniseerd zijn, omdat ze op externe opslag staan: - There are folders that were not synchronized because they are external storages: - - There are folders that were not synchronized because they are too big or external storages: - Er zijn mappen die niet gesynchroniseerd zijn, omdat ze te groot zijn of op externe opslag staan: - There are folders that were not synchronized because they are too big or external storages: - - There are folders that were not synchronized because they are too big: - Er zijn mappen die niet gesynchroniseerd zijn, omdat ze te groot zijn: - There are folders that were not synchronized because they are too big: @@ -912,7 +872,7 @@ Wait for the new sync, then encrypt it. https://wl.hidrive.com/easy/0057 - + OCC::AccountSetupFromCommandLineJob @@ -1798,7 +1758,7 @@ Dit kan een probleem zijn met je OpenSSL-bibliotheken. Switch to your browser to connect your account Schakel over naar je browser om je account te verbinden - + Unable to open the Browser, please copy the link to your Browser. Kan de browser niet openen, kopieer de link naar je browser. @@ -1806,7 +1766,7 @@ Dit kan een probleem zijn met je OpenSSL-bibliotheken. Waiting for authorization Wachten op autorisatie - + OCC::Folder @@ -1901,17 +1861,11 @@ Dit kan een probleem zijn met je OpenSSL-bibliotheken. %1 is currently locked. %1 is momenteel op slot. - - A folder from an external storage has been added. - - Er is een map op externe opslag toegevoegd. - - A folder from an external storage has been added. - + A folder has surpassed the set folder size limit of %1MB: %2. %3 Een map is groter geworden dan de ingestelde limiet van %1MB: %2. @@ -1929,12 +1883,6 @@ Please confirm if you'd like to proceed with these deletions. Alternatively, you can restore all deleted files by downloading them from the server. - - A new folder larger than %1 MB has been added: %2. - - Er is een nieuwe map groter dan %1 MB toegevoegd: %2. - - A new folder larger than %1 MB has been added: %2. @@ -2019,14 +1967,14 @@ Dit betekent dat de synchronisatieclient misschien niet meteen lokale wijziginge Would you like to stop syncing this folder? Wil je stoppen met het synchroniseren van deze map? - + OCC::FolderCreationDialog %1 Create new folder - + Could not create a folder! Check your write permissions. Kan map niet aanmaken! Controleer je schrijfmachtiging. @@ -2046,25 +1994,17 @@ Dit betekent dat de synchronisatieclient misschien niet meteen lokale wijziginge Folder already exists Map bestaat al - + OCC::FolderMan %1 (Sync is paused) %1 (Synchronisatie onderbroken) - - (backup %1) - (backup %1) - (backup %1) - - (backup) - (backup) - (backup) @@ -2174,17 +2114,13 @@ For advanced users: this issue might be related to multiple sync database files Waiting to start syncing. In afwachting van synchronisatie. - + OCC::FolderStatusDelegate Add Folder Sync - - Add Folder Sync Connection - Toevoegen mapsynchronisatie verbinding - File Bestand @@ -2359,7 +2295,7 @@ For advanced users: this issue might be related to multiple sync database files Choose Kies - + Click to select a local folder to sync. Klikken om een lokale map te selecteren voor synchronisatie @@ -2379,7 +2315,7 @@ For advanced users: this issue might be related to multiple sync database files Step 1 of 3: Select local folder - + OCC::FolderWizardRemotePath @@ -2406,7 +2342,7 @@ For advanced users: this issue might be related to multiple sync database files Create folder Maak map - + Enter the name of the new folder to be created below "%1": Voer de naam van de hieronder te maken nieuwe map in "%1": @@ -2438,7 +2374,7 @@ For advanced users: this issue might be related to multiple sync database files Step 2 of 3: Directory in your %1 - + OCC::FolderWizardSelectiveSync @@ -2453,7 +2389,7 @@ For advanced users: this issue might be related to multiple sync database files Step 3 of 3: Selektive Synchronisation - + Use virtual files instead of downloading content immediately %1 Gebruik virtuele bestanden in plaats van de content direct te downloaden %1 @@ -2465,7 +2401,7 @@ For advanced users: this issue might be related to multiple sync database files Virtual files are not supported for Windows partition roots as local folder. Please choose a valid subfolder under drive letter. Virtuele bestanden worden niet ondersteund voor Windows-partitie-hoofdmappen als lokale map. Kies een geldige submap onder de stationsletter. - + OCC::GeneralSettings @@ -2559,10 +2495,6 @@ Downgrading versions is not possible immediately: changing from stable to enterp General Settings Algemene instellingen - - Info - Info - Legal Notice Juridische bepalingen @@ -2612,10 +2544,6 @@ Downgrading versions is not possible immediately: changing from stable to enterp Server notifications that require attention. Servermeldingen die aandacht nodig hebben. - - Show Call Notifications - Toon oproepmeldingen - Show Server &Notifications Tonen server&meldingen @@ -2655,10 +2583,6 @@ Downgrading versions is not possible immediately: changing from stable to enterp Usage Documentation Gebruiksdocumentatie - - Use &Monochrome Icons - &Monochrome pictogrammen gebruiken - Use &monochrome icons @@ -2691,7 +2615,7 @@ Downgrading versions is not possible immediately: changing from stable to enterp https://wl.hidrive.com/easy/0005 - + https://wl.hidrive.com/easy/0006 @@ -2703,7 +2627,7 @@ Downgrading versions is not possible immediately: changing from stable to enterp stable stabiel - + OCC::GETFileJob @@ -2798,10 +2722,6 @@ Downgrading versions is not possible immediately: changing from stable to enterp Add Toevoegen - - Add Ignore Pattern - Toevoegen negeerpatroon - Add a new ignore pattern: Voeg nieuw negeerpatroon toe: @@ -2830,7 +2750,7 @@ Onderdelen die gewist mogen worden, worden verwijderd als ze verhinderen dat een Ignore Pattern - + Pattern Patroon @@ -2842,7 +2762,7 @@ Onderdelen die gewist mogen worden, worden verwijderd als ze verhinderen dat een Remove all Alles verwijderen - + OCC::InvalidFilenameDialog @@ -4169,11 +4089,11 @@ Dit is een nieuwe, experimentele modus. Als je besluit het te gebruiken, vragen Success - + Warning Waarschuwing - + OCC::SettingsDialog @@ -4197,11 +4117,11 @@ Dit is een nieuwe, experimentele modus. Als je besluit het te gebruiken, vragen New account - + Settings Instellingen - + OCC::ShareeModel @@ -4485,27 +4405,15 @@ Server antwoordde met fout: %2 The connection is not secure De verbinding is niet veilig - - This connection is NOT secure as it is not encrypted. - - Deze verbinding is NIET veilig, omdat deze niet versleuteld is. - - This connection is NOT secure as it is not encrypted. - - This connection is encrypted using %1 bit %2. - - Deze verbinding is versleuteld via %1 bit %2. - - This connection is encrypted using %1 bit %2. - + OCC::SslErrorDialog @@ -5045,17 +4953,9 @@ Server antwoordde met fout: %2 <b>You have been logged out of your account %1 at %2. Please login again.</b> - - You have been logged out of your account %1 at %2. Please login again. - Je bent afgemeld bij je account %1 op %2. Meld opnieuw aan. - - + OCC::WelcomePage - - Easy-to-use web mail, calendaring & contacts - Eenvoudig te gebruiken webmail, agenda & contacten - Form Formulier @@ -5072,14 +4972,6 @@ Server antwoordde met fout: %2 Log in Aanmelden - - Screensharing, online meetings & web conferences - Schermdelen, online afspraken & web conferenties - - - Secure collaboration & file exchange - Veilige samenwerking & bestandsuitwisseling - Sign up with provider Aanmelden bij provider @@ -5095,10 +4987,6 @@ Server antwoordde met fout: %2 <html><head/><body><p>If this box is checked, existing content in the local folder will be erased to start a clean sync from the server.</p><p>Do not check this if the local content should be uploaded to the servers folder.</p></body></html> <html><head/><body><p>Als deze checkbox is aangevinkt zullen bestaande bestanden in de lokale map worden gewist om een schone sync vanaf de server te starten.</p><p>Vink dit niet aan als de lokale bestanden naar de map op de server zouden moeten worden geüploadet.</p></body></html> - - Ask before syncing external storages - Vraag bevestiging voor synchronisatie externe opslag - Ask before syncing folders larger than Vraag bevestiging voor synchronisatie van mappen groter dan @@ -5158,10 +5046,6 @@ Server antwoordde met fout: %2 OwncloudSetupPage - - Logo - Logo - Server address Serveradres @@ -5338,7 +5222,7 @@ Server antwoordde met fout: %2 The directory %1 cannot be part of your sync directory. Please choose another folder. - + You changed %1 Je wijzigde %1 @@ -5362,7 +5246,7 @@ Server antwoordde met fout: %2 now nu - + ResolveConflictsDialog @@ -5415,11 +5299,11 @@ Server antwoordde met fout: %2 Open local or group folders Open lokale of groepsmappen - + Website - + ShareDelegate @@ -5465,10 +5349,6 @@ Server antwoordde met fout: %2 Custom Permissions - - Edit share - Bewerk deellink - Enter the note to recipient @@ -5493,10 +5373,6 @@ Server antwoordde met fout: %2 Set expiration date Instellen vervaldatum - - Share label - Deel label - Share link copied! Deellink gekopieerd! @@ -5509,7 +5385,7 @@ Server antwoordde met fout: %2 View only Alleen bekijken - + ShareeSearchField @@ -5649,7 +5525,7 @@ Server antwoordde met fout: %2 Account switcher and settings menu Wisselen van gebruiker en instellingsmenu - + Add account @@ -5685,7 +5561,7 @@ Server antwoordde met fout: %2 Settings Instellingen - + TrayWindowHeader @@ -5711,7 +5587,7 @@ Server antwoordde met fout: %2 Open %1 in browser - + Open Nextcloud Talk in browser Open Nextcloud Talk in browser @@ -5727,7 +5603,7 @@ Server antwoordde met fout: %2 Website - + UnifiedSearchInputContainer @@ -5783,14 +5659,6 @@ Server antwoordde met fout: %2 Account actions Accountacties - - Current account status is do not disturb - Huidige gebruikersstatus is niet storen - - - Current account status is online - Huidige gebruikersstatus is online - Log in Meld u aan From 878abd5472f4a2a9bfd492e02a1e8198fb4fd76e Mon Sep 17 00:00:00 2001 From: Kevin Beraz Date: Thu, 16 Oct 2025 10:53:01 +0200 Subject: [PATCH 369/371] merge step 3 --- translations/client_de.ts | 146 ++++++++++++------------- translations/client_en.ts | 202 ++++++++++++++++++----------------- translations/client_en_GB.ts | 118 ++++++++++---------- translations/client_es.ts | 161 ++++++++++++++-------------- translations/client_fr.ts | 157 +++++++++++++-------------- translations/client_nl.ts | 171 +++++++++++++++-------------- 6 files changed, 485 insertions(+), 470 deletions(-) diff --git a/translations/client_de.ts b/translations/client_de.ts index 6b5e91e565fe4..9447a1502dfdb 100644 --- a/translations/client_de.ts +++ b/translations/client_de.ts @@ -1,6 +1,6 @@ - +AgreeZustimmenBackZurückNecessary dataErforderliche DatenRequired to ensure that the software can be used as expectedErforderlich, um sicherzustellen, dass die Software wie erwartet verwendet werden kann.Save SettingsEinstellungen speichernSend anonymous useAnonyme Nutzungsdaten sendenSettingsEinstellungenThis application uses tracking technologies. By clicking on Agree, you accept the processing of your anonymized data. You can adjust your choices at any time via the settings. <br/> <br/>Information on data processing and more can be found in our <a href='https://wl.hidrive.com/easy/0005'>privacy policy</a>.Diese Anwendung verwendet Tracking-Technologien. Wenn Sie auf Zustimmen klicken, akzeptieren Sie die Verarbeitung Ihrer anonymisierten Daten. Sie können Ihre Auswahl jederzeit über die Einstellungen anpassen. <br/> <br/>Informationen zur Datenverarbeitung und mehr finden Sie in unserer <a href='https://wl.hidrive.com/easy/0045'>Datenschutzrichtlinie</a>.This helps us to optimize the software and to better identify system crashes and unexpected errors.Dies hilft uns, die Software zu optimieren und Systemabstürze und unerwartete Fehler besser zu erkennen.We collect anonymized data to optimize our app. We use software solutions from various partners for this purpose. We want to give you full transparency and freedom of choice regarding the collection and processing of your anonymized usage. You can change your settings at any time under the menu item Data Protection.Wir sammeln anonymisierte Daten, um unsere App zu optimieren. Dazu nutzen wir Softwarelösungen von verschiedenen Partnern. Wir möchten Ihnen volle Transparenz und Wahlfreiheit bezüglich der Erhebung und Verarbeitung Ihrer anonymisierten Nutzung geben. Sie können Ihre Einstellungen jederzeit unter dem Menüpunkt Datenschutz ändern. ActivityItem In %1 @@ -37,7 +37,7 @@ Nach unten blättern - +BasicComboBoxClear status message menuStatusmeldungs-Menü löschen CallNotificationDialog Answer Talk call notification @@ -88,7 +88,7 @@ Quit sync client - Sync-Client beenden + Sync-Client beenden Recently changed @@ -265,7 +265,7 @@ Fast sync will only sync changes in files and folders within folders that have been explored. This can significantly increase responsiveness on initial configuration of virtual files. However, it will cause redundant downloads of files moved to an unexplored folder. - + Bei der schnellen Synchronisierung werden nur Änderungen an Dateien und Ordnern innerhalb der Ordner synchronisiert, die bereits untersucht wurden. Dies kann die Reaktionsfähigkeit bei der Ersteinrichtung virtueller Dateien erheblich erhöhen. Allerdings führt dies zu redundanten Downloads von Dateien, die in einen noch nicht erfassten Ordner verschoben wurden. @@ -285,7 +285,7 @@ General settings Allgemeine Einstellungen - + Signal file provider domainDomain des Signaldateianbieters Virtual files settings Einstellungen für virtuelle Dateien @@ -300,7 +300,7 @@ Evict local copies … Lokale Kopien entfernen … - + Evict local copies...Lokale Kopien entfernen... Local storage use Lokaler Speicher verwenden @@ -368,18 +368,18 @@ macOS kann diese Anforderung ignorieren oder verzögern. FolderWizardSelectiveSync Add Folder Sync - + Ordner Sync hinzufügen Step 3 of 3: Selektive Synchronisation - + Schritt 3 von 3: Selektive Synchronisierung FolderWizardSourcePage &Choose - + &Wählen Add Folder Sync @@ -387,11 +387,11 @@ macOS kann diese Anforderung ignorieren oder verzögern. Select a folder on your hard drive that should be permanetly connected to your %1. All files and subfolders are automatically uploaded and synchronized - + Wählen Sie einen Ordner auf Ihrer Festplatte, der dauerhaft mit Ihrem %1 verbunden sein soll. Alle Dateien und Unterordner werden automatisch hochgeladen und synchronisiert. Step 1 of 3: Select local folder - + Schritt 1 von 3: Lokalen Ordner auswählen @@ -402,7 +402,7 @@ macOS kann diese Anforderung ignorieren oder verzögern. Both folders are permanently linked and the respective contents are automatically synchronized and updated. - + Beide Ordner sind dauerhaft miteinander verknüpft und die jeweiligen Inhalte werden automatisch synchronisiert und aktualisiert. Create folder @@ -414,7 +414,7 @@ macOS kann diese Anforderung ignorieren oder verzögern. Please now select or create a target folder in your %1 where the content should be uploaded and synchronized. - + Bitte wählen oder erstellen Sie nun einen Zielordner in Ihrem %1, in den der Inhalt hochgeladen und synchronisiert werden soll. Refresh @@ -422,7 +422,7 @@ macOS kann diese Anforderung ignorieren oder verzögern. Step 2 of 3: Directory in your %1 - + Schritt 2 von 3: Verzeichnis in Ihrem %1 @@ -494,7 +494,7 @@ macOS kann diese Anforderung ignorieren oder verzögern. %1 accounts were detected from a legacy desktop client. Should the accounts be imported? %1 Konten wurden von einem älteren Desktop-Client erkannt. -Sollen die Konten importiert werden? + Sollen die Konten importiert werden? 1 account was detected from a legacy desktop client. @@ -523,7 +523,7 @@ Soll das Konto importiert werden? OCC::AccountSettings %1 (%3%) of %2 in use. Some folders, including network mounted or shared folders, might have different limits. - %1 (%3%) von %2 Serverkapazität verwendet. Einige Ordner, einschließlich über das Netzwerk verbundene oder geteilte Ordner, können unterschiedliche Beschränkungen aufweisen. + %1 (%3%) von %2 Serverkapazität verwendet. Einige Ordner, einschließlich über das Netzwerk verbundene oder geteilte Ordner, können unterschiedliche Beschränkungen aufweisen. %1 as %2 @@ -680,7 +680,7 @@ Would you like to set up end-to-end encryption? Expand Memory - + Speicher erweitern Folder creation failed @@ -688,7 +688,7 @@ Would you like to set up end-to-end encryption? Force sync now - Synchronisierung jetzt erzwingen + Synchronisierung jetzt erzwingen Migrate certificate to a new one @@ -764,7 +764,7 @@ Would you like to set up end-to-end encryption? Storage space %1% occupied - + Speicherplatz %1% belegt Storage space: … @@ -804,15 +804,15 @@ Would you like to set up end-to-end encryption? There are folders that were not synchronized because they are external storages: - + Es gibt Ordner, die nicht synchronisiert werden konnten, da sie externe Speicher sind: There are folders that were not synchronized because they are too big or external storages: - + Es gibt Ordner, die nicht synchronisiert werden konnten, da sie zu groß oder externe Speicher sind: There are folders that were not synchronized because they are too big: - + Einige Ordner konnten nicht synchronisiert werden, da sie zu groß sind: This account supports end-to-end encryption @@ -872,7 +872,7 @@ Warten Sie auf die neue Synchronisierung und verschlüsseln Sie sie dann. https://wl.hidrive.com/easy/0057 - + https://wl.hidrive.com/easy/0067 @@ -1233,7 +1233,7 @@ Warten Sie auf die neue Synchronisierung und verschlüsseln Sie sie dann. The file could not be synced because it generates a case clash conflict with an existing file on this system. - Die Datei konnte nicht synchronisiert werden, da diese einen Konflikt bezüglich der Groß- und Kleinschreibung mit einer vorhandenen Datei auf diesem System erzeugt. + Die Datei konnte nicht synchronisiert werden, da diese einen Konflikt bezüglich Groß- und Kleinschreibung mit einer vorhandenen Datei auf diesem System erzeugt. Use invalid name @@ -1746,7 +1746,7 @@ Dies kann ein Problem mit Ihren OpenSSL-Bibliotheken sein. Open Browser - Browser öffnen + Im Browser öffnen Polling for authorization @@ -1865,7 +1865,7 @@ Dies kann ein Problem mit Ihren OpenSSL-Bibliotheken sein. A folder from an external storage has been added. - + Ein Ordner von einem externen Speicher wurde hinzugefügt. A folder has surpassed the set folder size limit of %1MB: %2. @@ -1877,21 +1877,21 @@ Dies kann ein Problem mit Ihren OpenSSL-Bibliotheken sein. A large number of files in the server have been deleted. Please confirm if you'd like to proceed with these deletions. Alternatively, you can restore all deleted files by uploading from '%1' folder to the server. - Eine große Anzahl von Dateien auf dem Server wurde gelöscht. -Bitte bestätigen Sie, dass Sie mit diesen Löschungen fortfahren möchten. -Alternativ können Sie alle gelöschten Dateien wiederherstellen, indem Sie von Ordner '%1' auf den Server hochladen. + Eine große Anzahl von Dateien wurde auf dem Server gelöscht. +Bitte bestätigen Sie, ob Sie mit diesen Löschungen fortfahren möchten. +Alternativ können Sie alle gelöschten Dateien wiederherstellen, indem Sie sie aus dem Ordner "%1" auf den Server hochladen. A large number of files in your local '%1' folder have been deleted. Please confirm if you'd like to proceed with these deletions. Alternatively, you can restore all deleted files by downloading them from the server. - Eine große Anzahl von Dateien wurde lokal im Ordner '%1' gelöscht. -Bitte bestätigen Sie, dass Sie mit diesen Löschungen fortfahren möchten. -Alternativ können Sie auch alle gelöschten Dateien wiederherstellen, indem Sie sie vom Server herunterladen. + Eine große Anzahl von Dateien in Ihrem lokalen Ordner "%1" wurde gelöscht. +Bitte bestätigen Sie, ob Sie mit diesen Löschungen fortfahren möchten. +Alternativ können Sie alle gelöschten Dateien wiederherstellen, indem Sie sie vom Server herunterladen. A new folder larger than %1 MB has been added: %2. - + Ein neuer Ordner größer als %1 MB wurde hinzugefügt: %2. Changes in synchronized folders could not be tracked reliably. @@ -1978,7 +1978,7 @@ Dies bedeutet, dass der Synchronisierungs-Client lokale Änderungen möglicherwe OCC::FolderCreationDialog %1 Create new folder - + %1 Neuen Ordner erstellen Could not create a folder! Check your write permissions. @@ -2009,11 +2009,11 @@ Dies bedeutet, dass der Synchronisierungs-Client lokale Änderungen möglicherwe (backup %1) - + (Sicherung %1) (backup) - + (Sicherung) An old sync journal "%1" was found, but could not be removed. Please make sure that no application is currently using it. @@ -2136,7 +2136,7 @@ Für fortgeschrittene Benutzer: Dieses Problem kann damit zusammenhängen, dass Synchronize any other local folder with your %1 - + Synchronisieren Sie jeden anderen lokalen Ordner mit Ihrem %1 @@ -2301,7 +2301,7 @@ Für fortgeschrittene Benutzer: Dieses Problem kann damit zusammenhängen, dass Choose - Auswählen + Wählen Sie Click to select a local folder to sync. @@ -2352,7 +2352,7 @@ Für fortgeschrittene Benutzer: Dieses Problem kann damit zusammenhängen, dass Enter the name of the new folder to be created below "%1": - Geben Sie den Namen des neuen, unter "%1" zu erstellenden Ordners ein: + Geben Sie den Namen des neuen, unter "%1" zu erstellenden Ordners ein: Failed to create the folder on %1. Please check manually. @@ -2412,7 +2412,7 @@ Für fortgeschrittene Benutzer: Dieses Problem kann damit zusammenhängen, dass OCC::GeneralSettings - + &Analysis data collection for needs-based design&Analyse der Datenerhebung für bedarfsgerechte Gestaltung &Automatically check for updates &Automatisch auf Aktualisierungen prüfen @@ -2454,7 +2454,7 @@ Ein Downgrade von Versionen ist nicht sofort möglich: Der Wechsel von Beta auf Ask for confirmation before synchronizing new folders larger than - Bestätigung erfragen, bevor neue Ordner synchronisiert werden, die größer sind als + Um eine Bestätigung bitten, bevor Sie neue Ordner synchronisieren, die größer sind als Automatically disable synchronisation of folders that overcome limit @@ -2482,7 +2482,7 @@ Ein Downgrade von Versionen ist nicht sofort möglich: Der Wechsel von Beta auf Data Protection - + Datenschutzbestimmungen Debug Archive Created @@ -2519,7 +2519,7 @@ Ein Downgrade von Versionen ist nicht sofort möglich: Der Wechsel von Beta auf More Information - + Mehr Informationen Move removed files to trash @@ -2535,11 +2535,11 @@ Ein Downgrade von Versionen ist nicht sofort möglich: Der Wechsel von Beta auf Open Source Software - + Open-Source-Software Privacy Policy - + Datenschutzerklärung Required to ensure that the software can be used as expected @@ -2591,7 +2591,7 @@ Ein Downgrade von Versionen ist nicht sofort möglich: Der Wechsel von Beta auf Updates - + Aktualisierungen Usage Documentation @@ -2623,19 +2623,19 @@ Ein Downgrade von Versionen ist nicht sofort möglich: Der Wechsel von Beta auf https://wl.hidrive.com/easy/0004 - + https://wl.hidrive.com/easy/0044 https://wl.hidrive.com/easy/0005 - + https://wl.hidrive.com/easy/0045 https://wl.hidrive.com/easy/0006 - + https://wl.hidrive.com/easy/0006 https://wl.hidrive.com/easy/0007 - + https://wl.hidrive.com/easy/0047 stable @@ -2758,11 +2758,11 @@ Ein Downgrade von Versionen ist nicht sofort möglich: Der Wechsel von Beta auf Items where deletion is allowed will be deleted if they prevent a directory from being removed. This is useful for meta data. Dateien oder Ordner, die diesem Muster entsprechen, werden nicht synchronisiert. -Objekte, bei denen Löschen erlaubt ist, werden gelöscht, wenn diese das Entfernen eines Ordners verhindern würden. Dies ist für Metadaten nützlich. +Objekte, die gelöscht werden dürfen, werden gelöscht, wenn sie das Löschen eines Ordners verhindern würden. Dies ist nützlich für Metadaten. Ignore Pattern - + Muster ignorieren Pattern @@ -3783,7 +3783,7 @@ Dies ist ein neuer, experimenteller Modus. Wenn Sie sich entscheiden, ihn zu ver OCC::PropagateLocalMkdir Could not create folder %1 - Ordner %1 konnte nicht erstellt werden + Ordner %1 konnte nicht erstellt werden Error updating metadata: %1 @@ -3857,7 +3857,7 @@ Dies ist ein neuer, experimenteller Modus. Wenn Sie sich entscheiden, ihn zu ver Folder %1 cannot be renamed because of a local file or folder name clash! - Ordner %1 kann aufgrund einer lokalen Datei- oder Ordnernamenskollision nicht umbenannt werden! + Ordner %1 kann nicht umbenannt werden, da ein Konflikt zwischen lokalen Datei- oder Ordnernamen besteht! The file %1 is currently in use @@ -3980,7 +3980,7 @@ Dies ist ein neuer, experimenteller Modus. Wenn Sie sich entscheiden, ihn zu ver Upload of %1 exceeds the quota for the folder - Das Hochladen von %1 überschreitet das Speicherkontingent des Ordners + Das Hochladen von %1 überschreitet das Speicherkontingent des Ordners @@ -4101,7 +4101,7 @@ Dies ist ein neuer, experimenteller Modus. Wenn Sie sich entscheiden, ihn zu ver Success - + Erfolg Warning @@ -4129,7 +4129,7 @@ Dies ist ein neuer, experimenteller Modus. Wenn Sie sich entscheiden, ihn zu ver New account - + Neues Konto Settings @@ -4421,11 +4421,11 @@ Server antwortete mit Fehler: %2 This connection is NOT secure as it is not encrypted. - + Diese Verbindung ist NICHT sicher, da diese nicht verschlüsselt ist. This connection is encrypted using %1 bit %2. - + Diese Verbindung ist verschlüsselt mit %1 Bit %2. @@ -4689,7 +4689,7 @@ Server antwortete mit Fehler: %2 easy/0118 - + easy/0148 @@ -4715,7 +4715,7 @@ Server antwortete mit Fehler: %2 OCC::UpdateE2eeFolderMetadataJob Failed to finalize item. - Element konnte nicht fertiggestellt werden + Fehler beim Fertigstellen des Elements. Failed to unlock encrypted folder. @@ -4730,7 +4730,7 @@ Server antwortete mit Fehler: %2 OCC::UpdateE2eeFolderUsersMetadataJob Could not add or remove user %1 to access folder %2 - Benutzer %1 konnte für den Zugriff auf Ordner %2 nicht hinzugefügt oder entfernt werden + Benutzer %1 konnte nicht zum Zugriffsordner %2 hinzugefügt oder entfernt werden Could not fetch public key for user %1 @@ -4751,7 +4751,7 @@ Server antwortete mit Fehler: %2 OCC::User - + %1 notifications%1 Benachrichtigungen %n notification(s) %n Benachrichtigung @@ -4965,7 +4965,7 @@ Server antwortete mit Fehler: %2 OCC::WebFlowCredentials <b>You have been logged out of your account %1 at %2. Please login again.</b> - + <b>Sie wurden von Ihrem Konto %1 bei %2 abgemeldet. Bitte melden Sie sich erneut an.</b> @@ -5141,7 +5141,7 @@ Server antwortete mit Fehler: %2 Updated local virtual files metadata - Metadaten für lokale virtuelle Dateien aktualisiert + Aktualisierte Metadaten für lokale virtuelle Dateien Updating end-to-end encryption metadata @@ -5167,7 +5167,7 @@ Server antwortete mit Fehler: %2 Virtual file created Virtuelle Datei erstellt - +updating local virtual files metadataAktualisierung der Metadaten lokaler virtueller Dateien QObject @@ -5214,7 +5214,7 @@ Server antwortete mit Fehler: %2 Failed to create debug archive - Debug-Archiv konnte nicht erstellt werden + Fehler beim Erstellen des Debug-Archivs New folder @@ -5234,7 +5234,7 @@ Server antwortete mit Fehler: %2 The directory %1 cannot be part of your sync directory. Please choose another folder. - + Das Verzeichnis %1 kann nicht Teil Ihres Synchronisationsverzeichnisses sein. Bitte wählen Sie einen anderen Ordner. You changed %1 @@ -5307,7 +5307,7 @@ Server antwortete mit Fehler: %2 SesTrayHeader Open Nextcloud in browser - + HiDrive Next im Browser öffnen Open local or group folders @@ -5315,7 +5315,7 @@ Server antwortete mit Fehler: %2 Website - + Website @@ -5361,11 +5361,11 @@ Server antwortete mit Fehler: %2 Custom Permissions - + Benutzerdefinierte Berechtigungen Enter the note to recipient - + Geben Sie eine Notiz an den Empfänger ein File drop (upload only) @@ -5533,7 +5533,7 @@ Server antwortete mit Fehler: %2 Warte auf Beginn der Synchronisierung. - +TrayFoldersMenuButtonFilesDateien TrayWindowAccountMenu Account switcher and settings menu diff --git a/translations/client_en.ts b/translations/client_en.ts index a24d7de5e7adb..0b6eb2113c17c 100644 --- a/translations/client_en.ts +++ b/translations/client_en.ts @@ -1,6 +1,6 @@ - +AgreeAgreeBackBackNecessary dataNecessary dataRequired to ensure that the software can be used as expectedRequired to ensure that the software can be used as expectedSave SettingsSave SettingsSend anonymous useSend anonymous useSettingsSettingsThis application uses tracking technologies. By clicking on Agree, you accept the processing of your anonymized data. You can adjust your choices at any time via the settings. <br/> <br/>Information on data processing and more can be found in our <a href='https://wl.hidrive.com/easy/0005'>privacy policy</a>.This application uses tracking technologies. By clicking on Agree, you accept the processing of your anonymized data. You can adjust your choices at any time via the settings. <br/> <br/>Information on data processing and more can be found in our <a href='https://wl.hidrive.com/easy/0005'>privacy policy</a>.This helps us to optimize the software and to better identify system crashes and unexpected errors.This helps us to optimize the software and to better identify system crashes and unexpected errors.We collect anonymized data to optimize our app. We use software solutions from various partners for this purpose. We want to give you full transparency and freedom of choice regarding the collection and processing of your anonymized usage. You can change your settings at any time under the menu item Data Protection.We collect anonymized data to optimize our app. We use software solutions from various partners for this purpose. We want to give you full transparency and freedom of choice regarding the collection and processing of your anonymized usage. You can change your settings at any time under the menu item Data Protection. ActivityItem In %1 @@ -37,11 +37,11 @@ - +BasicComboBoxClear status message menuDelete status message menu CallNotificationDialog Answer Talk call notification - + Answer Talk call notification Decline @@ -49,11 +49,11 @@ Decline Talk call notification - + Decline Talk call notification Talk notification caller avatar - + Talk notification caller avatar @@ -88,7 +88,7 @@ Quit sync client - + Quit sync client Recently changed @@ -127,11 +127,11 @@ ConflictDelegate Local version - + Local version Server version - + Server version @@ -265,14 +265,14 @@ Fast sync will only sync changes in files and folders within folders that have been explored. This can significantly increase responsiveness on initial configuration of virtual files. However, it will cause redundant downloads of files moved to an unexplored folder. - + Fast sync will only sync changes in files and folders within folders that have been explored. This can significantly increase responsiveness on initial configuration of virtual files. However, it will cause redundant downloads of files moved to an unexplored folder. FileProviderFileDelegate Delete - + Delete @@ -285,7 +285,7 @@ General settings - + Signal file provider domainSignal file provider domain Virtual files settings @@ -300,7 +300,7 @@ Evict local copies … - + Evict local copies...Evict local copies... Local storage use @@ -309,7 +309,7 @@ FileProviderSyncStatus All synced! - + All synced! Request a sync of changes for the VFS environment. @@ -367,18 +367,18 @@ macOS may ignore or delay this request. FolderWizardSelectiveSync Add Folder Sync - + Add Folder Sync Step 3 of 3: Selektive Synchronisation - + Step 3 of 3: Selective Synchronisation FolderWizardSourcePage &Choose - + &Choose Add Folder Sync @@ -386,11 +386,11 @@ macOS may ignore or delay this request. Select a folder on your hard drive that should be permanetly connected to your %1. All files and subfolders are automatically uploaded and synchronized - + Select a folder on your hard drive that should be permanetly connected to your %1. All files and subfolders are automatically uploaded and synchronized. Step 1 of 3: Select local folder - + Step 1 of 3: Select local folder @@ -401,11 +401,11 @@ macOS may ignore or delay this request. Both folders are permanently linked and the respective contents are automatically synchronized and updated. - + Both folders are permanently linked and the respective contents are automatically synchronized and updated. Create folder - + Create folder Folders @@ -413,7 +413,7 @@ macOS may ignore or delay this request. Please now select or create a target folder in your %1 where the content should be uploaded and synchronized. - + Please now select or create a target folder in your %1 where the content should be uploaded and synchronized. Refresh @@ -421,7 +421,7 @@ macOS may ignore or delay this request. Step 2 of 3: Directory in your %1 - + Step 2 of 3: Directory in your %1 @@ -492,7 +492,8 @@ macOS may ignore or delay this request. %1 accounts were detected from a legacy desktop client. Should the accounts be imported? - + %1 accounts were detected from a legacy desktop client. +Should the accounts be imported? 1 account was detected from a legacy desktop client. @@ -520,7 +521,7 @@ Should the account be imported? OCC::AccountSettings %1 (%3%) of %2 in use. Some folders, including network mounted or shared folders, might have different limits. - + %1 (%3%) of %2 in use. Some folders, including network mounted or shared folders, might have different limits. %1 as %2 @@ -677,7 +678,7 @@ Would you like to set up end-to-end encryption? Expand Memory - + Expand Memory Folder creation failed @@ -685,7 +686,7 @@ Would you like to set up end-to-end encryption? Force sync now - + Force sync now Migrate certificate to a new one @@ -761,7 +762,7 @@ Would you like to set up end-to-end encryption? Storage space %1% occupied - + Storage space %1% occupied Storage space: … @@ -801,15 +802,15 @@ Would you like to set up end-to-end encryption? There are folders that were not synchronized because they are external storages: - + There are folders that were not synchronised because they are external storages: There are folders that were not synchronized because they are too big or external storages: - + There are folders that were not synchronised because they are too big or external storages: There are folders that were not synchronized because they are too big: - + There are folders that were not synchronised because they are too big: This account supports end-to-end encryption @@ -826,11 +827,12 @@ This action will abort any currently running synchronization. This will encrypt your folder and all files within it. These files will no longer be accessible without your encryption mnemonic key. <b>This process is not reversible. Are you sure you want to proceed?</b> - + This will encrypt your folder and all files within it. These files will no longer be accessible without your encryption mnemonic key. +<b>This process is not reversible. Are you sure you want to proceed?</b> To protect your Cryptographic Identity, we encrypt it with a mnemonic of 12 dictionary words. Please note these down and keep them safe. They will be needed to add other devices to your account (like your mobile phone or laptop). - + To protect your Cryptographic Identity, we encrypt it with a mnemonic of 12 dictionary words. Please note these down and keep them safe. They will be needed to add other devices to your account (like your mobile phone or laptop). Unable to connect to %1. @@ -863,7 +865,7 @@ Wait for the new sync, then encrypt it. https://wl.hidrive.com/easy/0057 - + https://wl.hidrive.com/easy/0077 @@ -1179,7 +1181,7 @@ Wait for the new sync, then encrypt it. Existing file - + Existing file Filename contains illegal characters: %1 @@ -1223,7 +1225,7 @@ Wait for the new sync, then encrypt it. The file could not be synced because it generates a case clash conflict with an existing file on this system. - + The file could not be synced because it generates a case clash conflict with an existing file on this system. Use invalid name @@ -1465,11 +1467,11 @@ Wait for the new sync, then encrypt it. OCC::DiscoverySingleDirectoryJob Encrypted metadata setup error! - + Encrypted metadata setup error! Encrypted metadata setup error: initial signature from server is empty. - + Encrypted metadata setup error: initial signature from server is empty. Server error: PROPFIND reply is not XML formatted! @@ -1733,7 +1735,7 @@ This can be an issue with your OpenSSL libraries. Open Browser - + Open Browser Polling for authorization @@ -1852,7 +1854,7 @@ This can be an issue with your OpenSSL libraries. A folder from an external storage has been added. - + A folder from an external storage has been added. A folder has surpassed the set folder size limit of %1MB: %2. @@ -1863,17 +1865,21 @@ This can be an issue with your OpenSSL libraries. A large number of files in the server have been deleted. Please confirm if you'd like to proceed with these deletions. Alternatively, you can restore all deleted files by uploading from '%1' folder to the server. - + Eine große Anzahl von Dateien wurde auf dem Server gelöscht. +Bitte bestätigen Sie, ob Sie mit diesen Löschungen fortfahren möchten. +Alternativ können Sie alle gelöschten Dateien wiederherstellen, indem Sie sie aus dem Ordner "%1" auf den Server hochladen. A large number of files in your local '%1' folder have been deleted. Please confirm if you'd like to proceed with these deletions. Alternatively, you can restore all deleted files by downloading them from the server. - + Eine große Anzahl von Dateien in Ihrem lokalen Ordner "%1" wurde gelöscht. +Bitte bestätigen Sie, ob Sie mit diesen Löschungen fortfahren möchten. +Alternativ können Sie alle gelöschten Dateien wiederherstellen, indem Sie sie vom Server herunterladen. A new folder larger than %1 MB has been added: %2. - + A new folder larger than %1 MB has been added: %2. Changes in synchronized folders could not be tracked reliably. @@ -1909,19 +1915,19 @@ This means that the synchronization client might not upload local changes immedi Proceed with Deletion - + Proceed with deletion Remove all files? - + Remove all files? Restore Files from Server - + Restore files from server Restore Files to Server - + Restore files to server Stop syncing @@ -1956,7 +1962,7 @@ This means that the synchronization client might not upload local changes immedi OCC::FolderCreationDialog %1 Create new folder - + %1 Create new folder Could not create a folder! Check your write permissions. @@ -1987,11 +1993,11 @@ This means that the synchronization client might not upload local changes immedi (backup %1) - + (backup %1) (backup) - + (backup) An old sync journal "%1" was found, but could not be removed. Please make sure that no application is currently using it. @@ -2111,7 +2117,7 @@ For advanced users: this issue might be related to multiple sync database files Synchronize any other local folder with your %1 - + Synchronize any other local folder with your %1 @@ -2276,7 +2282,7 @@ For advanced users: this issue might be related to multiple sync database files Choose - + Choose Click to select a local folder to sync. @@ -2327,7 +2333,7 @@ For advanced users: this issue might be related to multiple sync database files Enter the name of the new folder to be created below "%1": - + Enter the name of the new folder to be created below "%1": Failed to create the folder on %1. Please check manually. @@ -2374,7 +2380,7 @@ For advanced users: this issue might be related to multiple sync database files Use virtual files instead of downloading content immediately %1 - + Use virtual files instead of downloading content immediately %1 Virtual files are not supported at the selected location @@ -2387,7 +2393,7 @@ For advanced users: this issue might be related to multiple sync database files OCC::GeneralSettings - + &Analysis data collection for needs-based design&Analysis data collection for needs-based design &Automatically check for updates @@ -2420,15 +2426,15 @@ Downgrading versions is not possible immediately: changing from stable to enterp Ask for confirmation before synchronizing external storages - + Ask for confirmation before synchronizing external storages Ask for confirmation before synchronizing new folders larger than - + Ask for confirmation before synchronizing new folders larger than Automatically disable synchronisation of folders that overcome limit - + Automatically disable synchronisation of folders that overcome limit Cancel @@ -2452,7 +2458,7 @@ Downgrading versions is not possible immediately: changing from stable to enterp Data Protection - + Data Protection Debug Archive Created @@ -2489,7 +2495,7 @@ Downgrading versions is not possible immediately: changing from stable to enterp More Information - + More Information Move removed files to trash @@ -2505,11 +2511,11 @@ Downgrading versions is not possible immediately: changing from stable to enterp Open Source Software - + Open Source Software Privacy Policy - + Privacy Policy Required to ensure that the software can be used as expected @@ -2541,7 +2547,7 @@ Downgrading versions is not possible immediately: changing from stable to enterp Show sync folders in &Explorer's navigation pane - + Show sync folders in &Explorer's navigation pane The channel determines which upgrades will be offered to install: @@ -2560,7 +2566,7 @@ Downgrading versions is not possible immediately: changing from stable to enterp Updates - + Updates Usage Documentation @@ -2592,19 +2598,19 @@ Downgrading versions is not possible immediately: changing from stable to enterp https://wl.hidrive.com/easy/0004 - + https://wl.hidrive.com/easy/0004 https://wl.hidrive.com/easy/0005 - + https://wl.hidrive.com/easy/0005 https://wl.hidrive.com/easy/0006 - + https://wl.hidrive.com/easy/0006 https://wl.hidrive.com/easy/0007 - + https://wl.hidrive.com/easy/0007 stable @@ -2705,7 +2711,7 @@ Downgrading versions is not possible immediately: changing from stable to enterp Add a new ignore pattern: - + Add a new ignore pattern: Allow Deletion @@ -2723,11 +2729,13 @@ Downgrading versions is not possible immediately: changing from stable to enterp Files or folders matching a pattern will not be synchronized. Items where deletion is allowed will be deleted if they prevent a directory from being removed. This is useful for meta data. - + Files or folders matching a pattern will not be synchronized. + +Items where deletion is allowed will be deleted if they prevent a directory from being removed. This is useful for meta data. Ignore Pattern - + Ignore Pattern Pattern @@ -2968,7 +2976,7 @@ Note that using any logging command line options will override this setting. No proxy - + No proxy Note: proxy settings have no effects for accounts on localhost @@ -3739,7 +3747,7 @@ This is a new, experimental mode. If you decide to use it, please report any iss OCC::PropagateLocalMkdir Could not create folder %1 - + Could not create folder %1 Error updating metadata: %1 @@ -3813,7 +3821,7 @@ This is a new, experimental mode. If you decide to use it, please report any iss Folder %1 cannot be renamed because of a local file or folder name clash! - + Folder %1 cannot be renamed because of a local file or folder name clash! The file %1 is currently in use @@ -3936,7 +3944,7 @@ This is a new, experimental mode. If you decide to use it, please report any iss Upload of %1 exceeds the quota for the folder - + Upload of %1 exceeds the quota for the folder @@ -4057,7 +4065,7 @@ This is a new, experimental mode. If you decide to use it, please report any iss Success - + Success Warning @@ -4085,7 +4093,7 @@ This is a new, experimental mode. If you decide to use it, please report any iss New account - + New Account Settings @@ -4375,11 +4383,11 @@ Server replied with error: %2 This connection is NOT secure as it is not encrypted. - + This connection is NOT secure as it is not encrypted. This connection is encrypted using %1 bit %2. - + This connection is encrypted using %1 bit %2. @@ -4643,7 +4651,7 @@ Server replied with error: %2 easy/0118 - + easy/0108 @@ -4669,11 +4677,11 @@ Server replied with error: %2 OCC::UpdateE2eeFolderMetadataJob Failed to finalize item. - + Failed to finalize item. Failed to unlock encrypted folder. - + Failed to unlock encrypted folder. Failed to update folder metadata. @@ -4684,7 +4692,7 @@ Server replied with error: %2 OCC::UpdateE2eeFolderUsersMetadataJob Could not add or remove user %1 to access folder %2 - + Could not add or remove user %1 to access folder %2 Could not fetch public key for user %1 @@ -4705,7 +4713,7 @@ Server replied with error: %2 OCC::User - + %1 notifications%1 notifications %n notification(s) @@ -4919,7 +4927,7 @@ Server replied with error: %2 OCC::WebFlowCredentials <b>You have been logged out of your account %1 at %2. Please login again.</b> - + <b>You have been logged out of your account %1 at %2. Please login again.</b> @@ -4953,7 +4961,7 @@ Server replied with error: %2 <html><head/><body><p>If this box is checked, existing content in the local folder will be erased to start a clean sync from the server.</p><p>Do not check this if the local content should be uploaded to the servers folder.</p></body></html> - + <html><head/><body><p>If this box is checked, existing content in the local folder will be erased to start a clean sync from the server.</p><p>Do not check this if the local content should be uploaded to the servers folder.</p></body></html> Ask before syncing folders larger than @@ -5095,7 +5103,7 @@ Server replied with error: %2 Updated local virtual files metadata - + Updated local virtual files metadata Updating end-to-end encryption metadata @@ -5121,7 +5129,7 @@ Server replied with error: %2 Virtual file created - +updating local virtual files metadataUpdating local virtual files metadata QObject @@ -5160,7 +5168,7 @@ Server replied with error: %2 Could not create debug archive in selected location! - + Could not create debug archive in selected location! Error deleting the file @@ -5168,7 +5176,7 @@ Server replied with error: %2 Failed to create debug archive - + Failed to create debug archive New folder @@ -5188,7 +5196,7 @@ Server replied with error: %2 The directory %1 cannot be part of your sync directory. Please choose another folder. - + The directory %1 cannot be part of your sync directory. Please choose another folder. You changed %1 @@ -5261,7 +5269,7 @@ Server replied with error: %2 SesTrayHeader Open Nextcloud in browser - + Open HiDrive Next in browser Open local or group folders @@ -5269,7 +5277,7 @@ Server replied with error: %2 Website - + Website @@ -5311,15 +5319,15 @@ Server replied with error: %2 Copy share link - + Copy share link Custom Permissions - + Custom Permissions Enter the note to recipient - + Enter the note to recipient File drop (upload only) @@ -5343,7 +5351,7 @@ Server replied with error: %2 Share link copied! - + Share link copied! Unshare @@ -5487,7 +5495,7 @@ Server replied with error: %2 - +TrayFoldersMenuButtonFilesFiles TrayWindowAccountMenu Account switcher and settings menu diff --git a/translations/client_en_GB.ts b/translations/client_en_GB.ts index 8ee7017d6aedf..5687738864d4a 100644 --- a/translations/client_en_GB.ts +++ b/translations/client_en_GB.ts @@ -1,6 +1,6 @@ - +AgreeAgreeBackBackNecessary dataNecessary dataRequired to ensure that the software can be used as expectedRequired to ensure that the software can be used as expectedSave SettingsSave SettingsSend anonymous useSend anonymous useSettingsSettingsThis application uses tracking technologies. By clicking on Agree, you accept the processing of your anonymized data. You can adjust your choices at any time via the settings. <br/> <br/>Information on data processing and more can be found in our <a href='https://wl.hidrive.com/easy/0005'>privacy policy</a>.This application uses tracking technologies. By clicking on Agree, you accept the processing of your anonymized data. You can adjust your choices at any time via the settings. <br/> <br/>Information on data processing and more can be found in our <a href='https://wl.hidrive.com/easy/0005'>privacy policy</a>.This helps us to optimize the software and to better identify system crashes and unexpected errors.This helps us to optimize the software and to better identify system crashes and unexpected errors.We collect anonymized data to optimize our app. We use software solutions from various partners for this purpose. We want to give you full transparency and freedom of choice regarding the collection and processing of your anonymized usage. You can change your settings at any time under the menu item Data Protection.We collect anonymized data to optimize our app. We use software solutions from various partners for this purpose. We want to give you full transparency and freedom of choice regarding the collection and processing of your anonymized usage. You can change your settings at any time under the menu item Data Protection. ActivityItem In %1 @@ -37,7 +37,7 @@ Scroll to top - +BasicComboBoxClear status message menuDelete status message menu CallNotificationDialog Answer Talk call notification @@ -265,7 +265,7 @@ Fast sync will only sync changes in files and folders within folders that have been explored. This can significantly increase responsiveness on initial configuration of virtual files. However, it will cause redundant downloads of files moved to an unexplored folder. - + Fast sync will only sync changes in files and folders within folders that have been explored. This can significantly increase responsiveness on initial configuration of virtual files. However, it will cause redundant downloads of files moved to an unexplored folder. @@ -285,7 +285,7 @@ General settings General settings - + Signal file provider domainSignal file provider domain Virtual files settings Virtual files settings @@ -300,7 +300,7 @@ Evict local copies … Evict local copies … - + Evict local copies...Evict local copies... Local storage use Local storage use @@ -368,18 +368,18 @@ macOS may ignore or delay this request. FolderWizardSelectiveSync Add Folder Sync - + Add Folder Sync Step 3 of 3: Selektive Synchronisation - + Step 3 of 3: Selective Synchronisation FolderWizardSourcePage &Choose - + &Choose Add Folder Sync @@ -387,11 +387,11 @@ macOS may ignore or delay this request. Select a folder on your hard drive that should be permanetly connected to your %1. All files and subfolders are automatically uploaded and synchronized - + Select a folder on your hard drive that should be permanetly connected to your %1. All files and subfolders are automatically uploaded and synchronized Step 1 of 3: Select local folder - + Step 1 of 3: Select local folder @@ -402,7 +402,7 @@ macOS may ignore or delay this request. Both folders are permanently linked and the respective contents are automatically synchronized and updated. - + Both folders are permanently linked and the respective contents are automatically synchronized and updated. Create folder @@ -414,7 +414,7 @@ macOS may ignore or delay this request. Please now select or create a target folder in your %1 where the content should be uploaded and synchronized. - + Please now select or create a target folder in your %1 where the content should be uploaded and synchronized. Refresh @@ -422,7 +422,7 @@ macOS may ignore or delay this request. Step 2 of 3: Directory in your %1 - + Step 2 of 3: Directory in your %1 @@ -681,7 +681,7 @@ Would you like to set up end-to-end encryption? Expand Memory - + Expand Memory Folder creation failed @@ -765,7 +765,7 @@ Would you like to set up end-to-end encryption? Storage space %1% occupied - + Storage space %1% occupied Storage space: … @@ -805,15 +805,15 @@ Would you like to set up end-to-end encryption? There are folders that were not synchronized because they are external storages: - + There are folders that were not synchronised because they are external storages: There are folders that were not synchronized because they are too big or external storages: - + There are folders that were not synchronised because they are too big or external storages: There are folders that were not synchronized because they are too big: - + There are folders that were not synchronised because they are too big: This account supports end-to-end encryption @@ -834,7 +834,7 @@ This action will abort any currently running synchronization. This will encrypt your folder and all files within it. These files will no longer be accessible without your encryption mnemonic key. <b>This process is not reversible. Are you sure you want to proceed?</b> - This will encrypt your folder and all files within it. These files will no longer be accessible without your encryption mnemonic key. + This will encrypt your folder and all files within it. These files will no longer be accessible without your encryption mnemonic key. <b>This process is not reversible. Are you sure you want to proceed?</b> @@ -873,7 +873,7 @@ Wait for the new sync, then encrypt it. https://wl.hidrive.com/easy/0057 - + https://wl.hidrive.com/easy/0057 @@ -1866,7 +1866,7 @@ This can be an issue with your OpenSSL libraries. A folder from an external storage has been added. - + A folder from an external storage has been added. A folder has surpassed the set folder size limit of %1MB: %2. @@ -1878,21 +1878,21 @@ This can be an issue with your OpenSSL libraries. A large number of files in the server have been deleted. Please confirm if you'd like to proceed with these deletions. Alternatively, you can restore all deleted files by uploading from '%1' folder to the server. - A large number of files in the server have been deleted. -Please confirm if you'd like to proceed with these deletions. -Alternatively, you can restore all deleted files by uploading from '%1' folder to the server. + Eine große Anzahl von Dateien wurde auf dem Server gelöscht. +Bitte bestätigen Sie, ob Sie mit diesen Löschungen fortfahren möchten. +Alternativ können Sie alle gelöschten Dateien wiederherstellen, indem Sie sie aus dem Ordner "%1" auf den Server hochladen. A large number of files in your local '%1' folder have been deleted. Please confirm if you'd like to proceed with these deletions. Alternatively, you can restore all deleted files by downloading them from the server. - A large number of files in your local '%1' folder have been deleted. -Please confirm if you'd like to proceed with these deletions. -Alternatively, you can restore all deleted files by downloading them from the server. + Eine große Anzahl von Dateien in Ihrem lokalen Ordner "%1" wurde gelöscht. +Bitte bestätigen Sie, ob Sie mit diesen Löschungen fortfahren möchten. +Alternativ können Sie alle gelöschten Dateien wiederherstellen, indem Sie sie vom Server herunterladen. A new folder larger than %1 MB has been added: %2. - + A new folder larger than %1 MB has been added: %2. Changes in synchronized folders could not be tracked reliably. @@ -1979,7 +1979,7 @@ This means that the synchronization client might not upload local changes immedi OCC::FolderCreationDialog %1 Create new folder - + %1 Create new folder Could not create a folder! Check your write permissions. @@ -2010,11 +2010,11 @@ This means that the synchronization client might not upload local changes immedi (backup %1) - + (backup %1) (backup) - + (backup) An old sync journal "%1" was found, but could not be removed. Please make sure that no application is currently using it. @@ -2137,7 +2137,7 @@ For advanced users: this issue might be related to multiple sync database files Synchronize any other local folder with your %1 - + Synchronize any other local folder with your %1 @@ -2302,7 +2302,7 @@ For advanced users: this issue might be related to multiple sync database files Choose - Choose + Choose Click to select a local folder to sync. @@ -2413,7 +2413,7 @@ For advanced users: this issue might be related to multiple sync database files OCC::GeneralSettings - + &Analysis data collection for needs-based design&Analysis data collection for needs-based design &Automatically check for updates &Automatically check for updates @@ -2483,7 +2483,7 @@ Downgrading versions is not possible immediately: changing from stable to enterp Data Protection - + Data Protection Debug Archive Created @@ -2520,7 +2520,7 @@ Downgrading versions is not possible immediately: changing from stable to enterp More Information - + More Information Move removed files to trash @@ -2536,11 +2536,11 @@ Downgrading versions is not possible immediately: changing from stable to enterp Open Source Software - + Open Source Software Privacy Policy - + Privacy Policy Required to ensure that the software can be used as expected @@ -2593,7 +2593,7 @@ Downgrading versions is not possible immediately: changing from stable to enterp Updates - + Updates Usage Documentation @@ -2625,19 +2625,19 @@ Downgrading versions is not possible immediately: changing from stable to enterp https://wl.hidrive.com/easy/0004 - + https://wl.hidrive.com/easy/0004 https://wl.hidrive.com/easy/0005 - + https://wl.hidrive.com/easy/0005 https://wl.hidrive.com/easy/0006 - + https://wl.hidrive.com/easy/0006 https://wl.hidrive.com/easy/0007 - + https://wl.hidrive.com/easy/0007 stable @@ -2764,7 +2764,7 @@ Items where deletion is allowed will be deleted if they prevent a directory from Ignore Pattern - + Ignore Pattern Pattern @@ -4103,7 +4103,7 @@ This is a new, experimental mode. If you decide to use it, please report any iss Success - + Success Warning @@ -4131,7 +4131,7 @@ This is a new, experimental mode. If you decide to use it, please report any iss New account - + New account Settings @@ -4423,11 +4423,11 @@ Server replied with error: %2 This connection is NOT secure as it is not encrypted. - + This connection is NOT secure as it is not encrypted. This connection is encrypted using %1 bit %2. - + This connection is encrypted using %1 bit %2. @@ -4691,7 +4691,7 @@ Server replied with error: %2 easy/0118 - + easy/0108 @@ -4732,7 +4732,7 @@ Server replied with error: %2 OCC::UpdateE2eeFolderUsersMetadataJob Could not add or remove user %1 to access folder %2 - Unable to add or remove user %1 from accessing folder %2. + Could not add or remove user %1 to access folder %2 Could not fetch public key for user %1 @@ -4753,7 +4753,7 @@ Server replied with error: %2 OCC::User - + %1 notifications%1 notifications %n notification(s) %n notification(s) @@ -4967,7 +4967,7 @@ Server replied with error: %2 OCC::WebFlowCredentials <b>You have been logged out of your account %1 at %2. Please login again.</b> - + <b>You have been logged out of your account %1 at %2. Please login again.</b> @@ -5169,7 +5169,7 @@ Server replied with error: %2 Virtual file created Virtual file created - +updating local virtual files metadataUpdating local virtual files metadata QObject @@ -5236,7 +5236,7 @@ Server replied with error: %2 The directory %1 cannot be part of your sync directory. Please choose another folder. - + The directory %1 cannot be part of your sync directory. Please choose another folder. You changed %1 @@ -5309,7 +5309,7 @@ Server replied with error: %2 SesTrayHeader Open Nextcloud in browser - + Open HiDrive Next in browser Open local or group folders @@ -5317,7 +5317,7 @@ Server replied with error: %2 Website - + Website @@ -5363,11 +5363,11 @@ Server replied with error: %2 Custom Permissions - + Custom Permissions Enter the note to recipient - + Enter the note to recipient File drop (upload only) @@ -5535,7 +5535,7 @@ Server replied with error: %2 Waiting to start syncing - +TrayFoldersMenuButtonFilesFiles TrayWindowAccountMenu Account switcher and settings menu diff --git a/translations/client_es.ts b/translations/client_es.ts index 9fa143c2d89a1..6803b98a6e077 100644 --- a/translations/client_es.ts +++ b/translations/client_es.ts @@ -1,6 +1,7 @@ - +AgreeAceptarBackVolverNecessary dataDatos necesariosRequired to ensure that the software can be used as expectedNecesario para garantizar que el software puede utilizarse según lo previstoSave SettingsGuardar ajustesSend anonymous useEnviar uso anónimoSettingsAjustesThis application uses tracking technologies. By clicking on Agree, you accept the processing of your anonymized data. You can adjust your choices at any time via the settings. <br/> <br/>Information on data processing and more can be found in our <a href='https://wl.hidrive.com/easy/0005'>privacy policy</a>.Esta aplicación utiliza tecnologías de seguimiento. Al hacer clic en Aceptar, usted acepta el tratamiento de sus datos anónimos. Puede ajustar sus opciones en cualquier momento a través de la configuración. <br/> <br/>Puede encontrar información sobre el procesamiento de datos y más en nuestra <a href='https://wl.hidrive.com/easy/0015'>política de privacidad</a>.This helps us to optimize the software and to better identify system crashes and unexpected errors.Esto nos ayuda a optimizar el software y a identificar mejor las caídas del sistema y los errores inesperados.We collect anonymized data to optimize our app. We use software solutions from various partners for this purpose. We want to give you full transparency and freedom of choice regarding the collection and processing of your anonymized usage. You can change your settings at any time under the menu item Data Protection.Recopilamos datos de carácter anónimo para la optimización de nuestra aplicación. +Para ello, utilizamos soluciones de software de distintos socios. Deseamos transmitirte total transparencia y libertad de decisión acerca de la recopilación y el tratamiento de tu uso anónimo. Puedes modificar tu configuración en la opción del menú «Protección de datos» en cualquier momento. ActivityItem In %1 @@ -37,7 +38,7 @@ Desplazarse hasta la parte superior - +BasicComboBoxClear status message menuBorrar el menú de mensajes de estado CallNotificationDialog Answer Talk call notification @@ -265,7 +266,7 @@ Fast sync will only sync changes in files and folders within folders that have been explored. This can significantly increase responsiveness on initial configuration of virtual files. However, it will cause redundant downloads of files moved to an unexplored folder. - + La sincronización rápida sólo sincronizará los cambios en archivos y carpetas dentro de las carpetas que se han explorado. Esto puede incrementar significativamente la capacidad de respuesta en la configuración inicial de archivos virtuales. Sin embargo, esto provocará descargas redundantes de archivos movidos a carpetas inexploradas. @@ -285,7 +286,7 @@ General settings Configuración general - + Signal file provider domainDominio del proveedor de archivos de firmas Virtual files settings Configuración de archivos virtuales @@ -300,7 +301,7 @@ Evict local copies … Quitar copias locales … - + Evict local copies...Desalojar las copias locales... Local storage use Uso de almacenamiento local @@ -368,18 +369,18 @@ macOS podría ignorar o demorar esta solicitud. FolderWizardSelectiveSync Add Folder Sync - + Añadir sincronización de carpetas Step 3 of 3: Selektive Synchronisation - + Paso 3 de 3: Sincronización selectiva FolderWizardSourcePage &Choose - + &Elegir Add Folder Sync @@ -387,11 +388,11 @@ macOS podría ignorar o demorar esta solicitud. Select a folder on your hard drive that should be permanetly connected to your %1. All files and subfolders are automatically uploaded and synchronized - + Selecciona una carpeta de tu disco duro que deba estar permanentemente conectada a tu %1. Todos los archivos y subcarpetas se cargan y sincronizan automáticamente. Step 1 of 3: Select local folder - + Paso 1 de 3: Seleccionar carpeta local @@ -402,11 +403,11 @@ macOS podría ignorar o demorar esta solicitud. Both folders are permanently linked and the respective contents are automatically synchronized and updated. - + Ambas carpetas están permanentemente vinculadas y sus respectivos contenidos se sincronizan y actualizan automáticamente. Create folder - Crear carpeta + Crear carpeta Folders @@ -414,7 +415,7 @@ macOS podría ignorar o demorar esta solicitud. Please now select or create a target folder in your %1 where the content should be uploaded and synchronized. - + Por favor, ahora seleccione o cree una carpeta de destino en su %1 donde el contenido debe ser cargado y sincronizado. Refresh @@ -422,7 +423,7 @@ macOS podría ignorar o demorar esta solicitud. Step 2 of 3: Directory in your %1 - + Paso 2 de 3: Directorio en su %1 @@ -493,7 +494,7 @@ macOS podría ignorar o demorar esta solicitud. %1 accounts were detected from a legacy desktop client. Should the accounts be imported? - %1 cuentas se detectaron desde un cliente de escritorio antiguo. + %1 cuentas se detectaron con un cliente de escritorio antiguo. ¿Deben estas cuentas ser importadas? @@ -681,7 +682,7 @@ Would you like to set up end-to-end encryption? Expand Memory - + Ampliar la memoria Folder creation failed @@ -765,7 +766,7 @@ Would you like to set up end-to-end encryption? Storage space %1% occupied - + Espacio de almacenamiento %1% ocupado Storage space: … @@ -805,15 +806,15 @@ Would you like to set up end-to-end encryption? There are folders that were not synchronized because they are external storages: - + Hay carpetas que no se han sincronizado porque están en el almacenamiento externo: There are folders that were not synchronized because they are too big or external storages: - + Hay carpetas que no se han sincronizado porque son demasiado grandes o están en el almacenamiento externo: There are folders that were not synchronized because they are too big: - + Hay carpetas que no se han sincronizado porque son demasiado grandes: This account supports end-to-end encryption @@ -834,12 +835,12 @@ Además, esta acción interrumpirá cualquier sincronización en curso. This will encrypt your folder and all files within it. These files will no longer be accessible without your encryption mnemonic key. <b>This process is not reversible. Are you sure you want to proceed?</b> - Esto cifrará su carpeta y todos los archivos contenidos en ella. Ya no se podrá acceder a estos archivos sin su clave de cifrado mnemónica. -<b>Este proceso no es puede deshacer. ¿Seguro que desea continuar?</b> + Esto cifrará su carpeta y todos los archivos contenidos en ella. Ya no se podrá acceder a estos archivos sin su clave de cifrado. +<b>Este proceso no es reversible. ¿Seguro que quiere continuar?</b> To protect your Cryptographic Identity, we encrypt it with a mnemonic of 12 dictionary words. Please note these down and keep them safe. They will be needed to add other devices to your account (like your mobile phone or laptop). - Para proteger su identidad criptográfica, ciframos la misma con una regla mnemotécnica de 12 palabras de diccionario. Por favor, anótelas y consérvelas a salvo. Estas palabras serán necesarias para añadir otros dispositivos a su cuenta (como su teléfono móvil o un portátil). + Para proteger tu identidad criptográfica, la ciframos con una regla mnemotécnica de 12 palabras del diccionario. Por favor, anótalas y mantenlas a salvo. Estas palabras serán necesarias para añadir otros dispositivos a su cuenta (como un teléfono móvil o un portátil). Unable to connect to %1. @@ -873,7 +874,7 @@ Espere a una nueva sincronización, luego cifrala. https://wl.hidrive.com/easy/0057 - + https://wl.hidrive.com/easy/0087 @@ -1482,7 +1483,7 @@ Espere a una nueva sincronización, luego cifrala. Encrypted metadata setup error: initial signature from server is empty. - Error de configuración de los metadatos cifrados: la firma inicial del servidor está vacía. + Error de configuración de metadatos encriptados: la firma inicial del servidor está vacía. Server error: PROPFIND reply is not XML formatted! @@ -1747,7 +1748,7 @@ Esto podría ser un problema con tu librería OpenSSL Open Browser - Abrir Navegador + Abrir en el navegador Polling for authorization @@ -1866,7 +1867,7 @@ Esto podría ser un problema con tu librería OpenSSL A folder from an external storage has been added. - + Una carpeta de almacenamiento externo ha sido añadida. A folder has surpassed the set folder size limit of %1MB: %2. @@ -1878,21 +1879,21 @@ Esto podría ser un problema con tu librería OpenSSL A large number of files in the server have been deleted. Please confirm if you'd like to proceed with these deletions. Alternatively, you can restore all deleted files by uploading from '%1' folder to the server. - Han sido eliminados un gran número de archivos en el servidor. -Por favor, confirme si quiere proceder con estas eliminaciones. -Alternativamente, puede restaurar todos los archivos borrados subiéndolos desde la carpeta '%1' al servidor. + Se ha eliminado un gran número de archivos del servidor. +Por favor, confirme si desea proceder con estos borrados. +Alternativamente, puede restaurar todos los archivos borrados subiendo desde la carpeta '%1' al servidor. A large number of files in your local '%1' folder have been deleted. Please confirm if you'd like to proceed with these deletions. Alternatively, you can restore all deleted files by downloading them from the server. - Han sido eliminados un gran número de archivos en su carpeta local '%1'. -Por favor, confirma si quiere continuar con estas eliminaciones. -Alternativamente, puede restaurar todos los archivos borrados descargándolos del servidor. + Se ha eliminado un gran número de archivos de tu carpeta local '%1'. +Por favor, confirme si desea proceder con estos borrados. +Alternativamente, puedes restaurar todos los archivos borrados descargándolos del servidor. A new folder larger than %1 MB has been added: %2. - + Una carpeta mayor de %1 MB ha sido añadida: %2. Changes in synchronized folders could not be tracked reliably. @@ -1932,7 +1933,7 @@ Esto significa que el cliente de sincronización podría no subir inmediatamente Proceed with Deletion - Continuar con la eliminación + Proceder a la supresión Remove all files? @@ -1940,11 +1941,11 @@ Esto significa que el cliente de sincronización podría no subir inmediatamente Restore Files from Server - Restaurar los archivos desde el servidor + Restaurar archivos del servidor Restore Files to Server - Restaurar los archivos al servidor + Restaurar archivos en el servidor Stop syncing @@ -1979,7 +1980,7 @@ Esto significa que el cliente de sincronización podría no subir inmediatamente OCC::FolderCreationDialog %1 Create new folder - + %1 Crear nueva carpeta Could not create a folder! Check your write permissions. @@ -2010,11 +2011,11 @@ Esto significa que el cliente de sincronización podría no subir inmediatamente (backup %1) - + (copia de seguridad %1) (backup) - + (copia de seguridad) An old sync journal "%1" was found, but could not be removed. Please make sure that no application is currently using it. @@ -2137,7 +2138,7 @@ Para usuarios avanzados: Este problema puede estar relacionado a múltiples arch Synchronize any other local folder with your %1 - + Sincroniza cualquier otra carpeta local con tu %1 @@ -2302,7 +2303,7 @@ Para usuarios avanzados: Este problema puede estar relacionado a múltiples arch Choose - Seleccione + Seleccione Click to select a local folder to sync. @@ -2413,7 +2414,7 @@ Para usuarios avanzados: Este problema puede estar relacionado a múltiples arch OCC::GeneralSettings - + &Analysis data collection for needs-based design&Recogida de datos de análisis para un diseño basado en las necesidades &Automatically check for updates Comprobar &actualizaciones automáticamente @@ -2451,7 +2452,7 @@ Cambiar a una versión anterior no es inmediatamente posible: cambiar de estable Ask for confirmation before synchronizing external storages - Preguntar si se desea sincronizar carpetas de almacenamiento externo + Pide confirmación antes de sincronizar almacenamientos externos Ask for confirmation before synchronizing new folders larger than @@ -2459,7 +2460,7 @@ Cambiar a una versión anterior no es inmediatamente posible: cambiar de estable Automatically disable synchronisation of folders that overcome limit - Deshabilitar sincronización de manera automática para las carpetas que sobrepasen el límite + Desactivar automáticamente la sincronización de carpetas que superen el límite Cancel @@ -2483,7 +2484,7 @@ Cambiar a una versión anterior no es inmediatamente posible: cambiar de estable Data Protection - + Protección de datos Debug Archive Created @@ -2520,7 +2521,7 @@ Cambiar a una versión anterior no es inmediatamente posible: cambiar de estable More Information - + Más información Move removed files to trash @@ -2536,11 +2537,11 @@ Cambiar a una versión anterior no es inmediatamente posible: cambiar de estable Open Source Software - + Software de código abierto Privacy Policy - + Política de privacidad Required to ensure that the software can be used as expected @@ -2572,7 +2573,7 @@ Cambiar a una versión anterior no es inmediatamente posible: cambiar de estable Show sync folders in &Explorer's navigation pane - Mostrar carpetas sincronizadas en el panel de navegación del &Explorador + Mostrar carpetas de sincronización en el panel de navegación de &Explorer The channel determines which upgrades will be offered to install: @@ -2593,7 +2594,7 @@ Cambiar a una versión anterior no es inmediatamente posible: cambiar de estable Updates - + Actualizaciones Usage Documentation @@ -2625,19 +2626,19 @@ Cambiar a una versión anterior no es inmediatamente posible: cambiar de estable https://wl.hidrive.com/easy/0004 - + https://wl.hidrive.com/easy/0014 https://wl.hidrive.com/easy/0005 - + https://wl.hidrive.com/easy/0015 https://wl.hidrive.com/easy/0006 - + https://wl.hidrive.com/easy/0006 https://wl.hidrive.com/easy/0007 - + https://wl.hidrive.com/easy/0017 stable @@ -2740,7 +2741,7 @@ Cambiar a una versión anterior no es inmediatamente posible: cambiar de estable Add a new ignore pattern: - Añadir un nuevo patrón de archivos ignorados: + Añadir un nuevo patrón de ignorar: Allow Deletion @@ -2758,13 +2759,13 @@ Cambiar a una versión anterior no es inmediatamente posible: cambiar de estable Files or folders matching a pattern will not be synchronized. Items where deletion is allowed will be deleted if they prevent a directory from being removed. This is useful for meta data. - Los archivos o carpetas que coincidan con un patrón no se sincronizarán. + Los archivos o carpetas que coincidan con este patrón no se sincronizarán. -Los elementos que se permite su borrado se eliminarán si impiden que un directorio se elimine. Esto es útil para los metadatos. +Los objetos cuyo borrado esté permitido se eliminarán si impiden que se borre una carpeta. Esto es útil para los metadatos. Ignore Pattern - + Ignorar patrón Pattern @@ -3859,7 +3860,7 @@ Esta es un modo nuevo y experimental. Si decides usarlo, por favor, informa de c Folder %1 cannot be renamed because of a local file or folder name clash! - ¡La carpeta %1 no puede ser renombrada ya que un archivo o carpeta local causa un conflicto de nombre! + La carpeta %1 no puede renombrarse debido a un conflicto de nombres de archivos o carpetas locales. The file %1 is currently in use @@ -4103,7 +4104,7 @@ Esta es un modo nuevo y experimental. Si decides usarlo, por favor, informa de c Success - + Éxito Warning @@ -4131,7 +4132,7 @@ Esta es un modo nuevo y experimental. Si decides usarlo, por favor, informa de c New account - + Nueva cuenta Settings @@ -4423,11 +4424,11 @@ El servidor respondió con el error: %2 This connection is NOT secure as it is not encrypted. - + Esta conexión NO ES SEGURA, pues no está cifrada. This connection is encrypted using %1 bit %2. - + Esta conexión está cifrada con %1 bit %2. @@ -4691,7 +4692,7 @@ El servidor respondió con el error: %2 easy/0118 - + easy/0118 @@ -4732,7 +4733,7 @@ El servidor respondió con el error: %2 OCC::UpdateE2eeFolderUsersMetadataJob Could not add or remove user %1 to access folder %2 - No se ha podido añadir o eliminar al usuario %1 para acceder a la carpeta %2 + No se ha podido añadir o eliminar el usuario %1 para acceder a la carpeta %2 Could not fetch public key for user %1 @@ -4753,7 +4754,7 @@ El servidor respondió con el error: %2 OCC::User - + %1 notifications%1 notificaciones %n notification(s) %n notificación @@ -4967,7 +4968,7 @@ El servidor respondió con el error: %2 OCC::WebFlowCredentials <b>You have been logged out of your account %1 at %2. Please login again.</b> - + <b>Se ha cerrado la sesión de su cuenta %1 en %2. Vuelva a iniciar sesión.</b> @@ -5001,7 +5002,7 @@ El servidor respondió con el error: %2 <html><head/><body><p>If this box is checked, existing content in the local folder will be erased to start a clean sync from the server.</p><p>Do not check this if the local content should be uploaded to the servers folder.</p></body></html> - <html><head/><body><p>Si esta casilla está marcada, el contenido existente en el directorio local será eliminado para comenzar una sincronización limpia desde el servidor.</p><p>No marque esta casilla si el contenido local debería subirse al directorio del servidor.</p></body></html> + <html><head/><body><p>Si esta casilla está marcada, el contenido existente en la carpeta local se borrará para iniciar una sincronización limpia desde el servidor.</p><p>No marque esta casilla si el contenido local debe cargarse en la carpeta de los servidores.</p></body></html>. Ask before syncing folders larger than @@ -5143,7 +5144,7 @@ El servidor respondió con el error: %2 Updated local virtual files metadata - Se han actualizado los metadatos para los archivos virtuales + Actualizados los metadatos de los archivos virtuales locales Updating end-to-end encryption metadata @@ -5169,7 +5170,7 @@ El servidor respondió con el error: %2 Virtual file created Archivo virtual creado - +updating local virtual files metadataActualización de los metadatos de los archivos virtuales locales QObject @@ -5208,7 +5209,7 @@ El servidor respondió con el error: %2 Could not create debug archive in selected location! - ¡No se pudo crear el archivo de depuración en la ubicación seleccionada! + No se ha podido crear el archivo de depuración en la ubicación seleccionada. Error deleting the file @@ -5216,7 +5217,7 @@ El servidor respondió con el error: %2 Failed to create debug archive - Fallo al crear archivo de depuración + Error al crear el archivo de depuración New folder @@ -5236,7 +5237,7 @@ El servidor respondió con el error: %2 The directory %1 cannot be part of your sync directory. Please choose another folder. - + El directorio %1 no puede formar parte de su directorio de sincronización. Por favor, elija otra carpeta. You changed %1 @@ -5309,7 +5310,7 @@ El servidor respondió con el error: %2 SesTrayHeader Open Nextcloud in browser - + Abrir HiDrive Next en el navegador Open local or group folders @@ -5317,7 +5318,7 @@ El servidor respondió con el error: %2 Website - + Sitio web @@ -5363,11 +5364,11 @@ El servidor respondió con el error: %2 Custom Permissions - + Permisos personalizados Enter the note to recipient - + Introducir la nota al destinatario File drop (upload only) @@ -5391,7 +5392,7 @@ El servidor respondió con el error: %2 Share link copied! - ¡Enlace al recurso compartido copiado! + ¡Enlace compartido copiado! Unshare @@ -5535,7 +5536,7 @@ El servidor respondió con el error: %2 Esperando para empezar la sincronización - +TrayFoldersMenuButtonFilesArchivos TrayWindowAccountMenu Account switcher and settings menu diff --git a/translations/client_fr.ts b/translations/client_fr.ts index 8d1413ebb1822..f6e2b9e49063d 100644 --- a/translations/client_fr.ts +++ b/translations/client_fr.ts @@ -1,6 +1,6 @@ - +AgreeAccepterBackRetourNecessary dataDonnées indispensablesRequired to ensure that the software can be used as expectedNécessaire pour s'assurer que le logiciel peut être utilisé comme prévuSave SettingsSauvegarder les paramètresSend anonymous useEnvoyer utilisation anonymeSettingsParamètresThis application uses tracking technologies. By clicking on Agree, you accept the processing of your anonymized data. You can adjust your choices at any time via the settings. <br/> <br/>Information on data processing and more can be found in our <a href='https://wl.hidrive.com/easy/0005'>privacy policy</a>.Cette application utilise des technologies de suivi. En cliquant sur Accepter, vous acceptez le traitement de vos données anonymes. Vous pouvez modifier vos choix à tout moment via les paramètres. <br/> <br/>Des informations sur le traitement des données et autres peuvent être trouvées dans notre <a href='https://wl.hidrive.com/easy/0025'>politique de confidentialité</a>.This helps us to optimize the software and to better identify system crashes and unexpected errors.Cela nous aide à optimiser le logiciel et à mieux identifier les pannes de système et les erreurs inattendues.We collect anonymized data to optimize our app. We use software solutions from various partners for this purpose. We want to give you full transparency and freedom of choice regarding the collection and processing of your anonymized usage. You can change your settings at any time under the menu item Data Protection.Nous collectons des données anonymes pour optimiser notre application. Nous utilisons à cet effet des solutions logicielles de différents partenaires. Nous souhaitons vous offrir une transparence totale et une liberté de choix en ce qui concerne la collecte et le traitement de votre utilisation anonyme. Vous pouvez modifier vos paramètres à tout moment dans le menu Protection des données. ActivityItem In %1 @@ -37,7 +37,7 @@ Défiler vers le haut - +BasicComboBoxClear status message menuMenu d'effacement du message de statut CallNotificationDialog Answer Talk call notification @@ -131,7 +131,7 @@ Server version - Version serveur + Version du serveur @@ -265,7 +265,7 @@ Fast sync will only sync changes in files and folders within folders that have been explored. This can significantly increase responsiveness on initial configuration of virtual files. However, it will cause redundant downloads of files moved to an unexplored folder. - + La synchronisation rapide va uniquement synchroniser les modifications des fichiers et des dossiers dans les dossiers qui ont été explorés. Ceci peut significativement augmenter la réactivité sur la configuration initiale des fichiers virtuelles. Cependant, cela va causer des téléchargements redondants de fichiers déplacés dans un dossier non exploré. @@ -285,7 +285,7 @@ General settings Paramètres généraux - + Signal file provider domainIndiquer le domaine du fournisseur de fichiers Virtual files settings Paramètres des fichiers virtuels @@ -300,7 +300,7 @@ Evict local copies … Évincer les copies locales… - + Evict local copies...Supprimer les copies locales Local storage use Utilisation du stockage local @@ -368,18 +368,18 @@ macOS may ignore or delay this request. FolderWizardSelectiveSync Add Folder Sync - + Ajouter une synchronisation de dossiers Step 3 of 3: Selektive Synchronisation - + Étape 3 sur 3 : synchronisation sélective FolderWizardSourcePage &Choose - + &Choisir Add Folder Sync @@ -387,11 +387,11 @@ macOS may ignore or delay this request. Select a folder on your hard drive that should be permanetly connected to your %1. All files and subfolders are automatically uploaded and synchronized - + Sélectionnez sur votre disque dur un dossier qui doit être en permanence rattaché à votre %1. Tous les fichiers et sous-dossiers sont automatiquement importés et synchronisés. Step 1 of 3: Select local folder - + Étape 1 sur 3 : sélectionner un dossier local @@ -402,7 +402,7 @@ macOS may ignore or delay this request. Both folders are permanently linked and the respective contents are automatically synchronized and updated. - + Les deux dossiers sont en permanence rattachés et leur contenu respectif est automatiquement synchronisé et importé. Create folder @@ -414,7 +414,7 @@ macOS may ignore or delay this request. Please now select or create a target folder in your %1 where the content should be uploaded and synchronized. - + À présent, sélectionnez ou créez dans votre %1 un dossier cible dans lequel le contenu doit être importé et synchronisé. Refresh @@ -422,7 +422,7 @@ macOS may ignore or delay this request. Step 2 of 3: Directory in your %1 - + Étape 2 sur 3 : répertoire dans votre %1 @@ -681,7 +681,7 @@ Souhaitez-vous configurer le chiffrement de bout en bout ? Expand Memory - + Augmenter la mémoire Folder creation failed @@ -765,7 +765,7 @@ Souhaitez-vous configurer le chiffrement de bout en bout ? Storage space %1% occupied - + Espace de stockage %1% occupé Storage space: … @@ -806,15 +806,15 @@ Vous prenez vos propres risques. There are folders that were not synchronized because they are external storages: - + Certains dossiers n'ont pas été synchronisés parce qu'ils sont localisés sur un stockage externe : There are folders that were not synchronized because they are too big or external storages: - + Certains dossiers n'ont pas été synchronisés parce qu'ils sont localisés sur un stockage externe ou qu'ils sont de taille trop importante : There are folders that were not synchronized because they are too big: - + Certains dossiers n'ont pas été synchronisés parce qu'ils sont de taille trop importante : This account supports end-to-end encryption @@ -833,8 +833,8 @@ Cette action entraînera l'interruption de toute synchronisation en cours.< This will encrypt your folder and all files within it. These files will no longer be accessible without your encryption mnemonic key. <b>This process is not reversible. Are you sure you want to proceed?</b> - Cela va chiffrer votre dossier et tous les fichiers qu'il contient. Ces fichiers ne seront plus accessibles sans votre clé de chiffrement mnémonique. -<b>Ce processus n'est pas réversible. Êtes-vous sûr de vouloir le faire ?</b> + Cette opération cryptera votre dossier et tous les fichiers qu'il contient. Ces fichiers ne seront plus accessibles sans votre clé mnémonique de cryptage. +<b>Ce processus n'est pas réversible. Êtes-vous sûr de vouloir continuer ? To protect your Cryptographic Identity, we encrypt it with a mnemonic of 12 dictionary words. Please note these down and keep them safe. They will be needed to add other devices to your account (like your mobile phone or laptop). @@ -871,7 +871,7 @@ Wait for the new sync, then encrypt it. https://wl.hidrive.com/easy/0057 - + https://wl.hidrive.com/easy/0057 @@ -1188,7 +1188,7 @@ Wait for the new sync, then encrypt it. Existing file - Fichier existant + Dossier existant Filename contains illegal characters: %1 @@ -1232,7 +1232,7 @@ Wait for the new sync, then encrypt it. The file could not be synced because it generates a case clash conflict with an existing file on this system. - Le fichier n'a pas pu être synchronisé parce qu'il génère un conflit de casse avec un fichier existant dans ce système. + Le fichier n'a pas pu être synchronisé car il génère un conflit de cas avec un fichier existant sur ce système. Use invalid name @@ -1476,11 +1476,11 @@ Wait for the new sync, then encrypt it. OCC::DiscoverySingleDirectoryJob Encrypted metadata setup error! - Erreur lors de la configuration des métadonnées chiffrées ! + Erreur de configuration des métadonnées chiffrées ! Encrypted metadata setup error: initial signature from server is empty. - Erreur de configuration des métadonnées chiffrées: la signature initiale du serveur est vide. + Erreur de configuration des métadonnées cryptées : la signature initiale du serveur est vide. Server error: PROPFIND reply is not XML formatted! @@ -1864,7 +1864,7 @@ Cela peut être un problème avec vos bibliothèques OpenSSL. A folder from an external storage has been added. - + Un nouveau dossier localisé sur un stockage externe a été ajouté. A folder has surpassed the set folder size limit of %1MB: %2. @@ -1876,21 +1876,21 @@ Cela peut être un problème avec vos bibliothèques OpenSSL. A large number of files in the server have been deleted. Please confirm if you'd like to proceed with these deletions. Alternatively, you can restore all deleted files by uploading from '%1' folder to the server. - Un grand nombre de fichiers du serveur ont été supprimés. + Un grand nombre de fichiers ont été supprimés sur le serveur. Veuillez confirmer si vous souhaitez procéder à ces suppressions. -Vous pouvez également restaurer tous les fichiers supprimés en les téléversant depuis le dossier '%1' vers le serveur. +Vous pouvez également restaurer tous les fichiers supprimés en les téléchargeant depuis le dossier '%1' vers le serveur. A large number of files in your local '%1' folder have been deleted. Please confirm if you'd like to proceed with these deletions. Alternatively, you can restore all deleted files by downloading them from the server. - Un grand nombre de fichiers de votre dossier local '%1' ont été supprimés. + Un grand nombre de fichiers de votre dossier local "%1" ont été supprimés. Veuillez confirmer si vous souhaitez procéder à ces suppressions. Vous pouvez également restaurer tous les fichiers supprimés en les téléchargeant depuis le serveur. A new folder larger than %1 MB has been added: %2. - + Un nouveau dossier de taille supérieure à %1 Mo a été ajouté : %2. Changes in synchronized folders could not be tracked reliably. @@ -1934,7 +1934,7 @@ Cela signifie que le client de bureau ne va pas téléverser immédiatement les Remove all files? - Supprimer tous les fichiers ? + Supprimer tous les fichiers ? Restore Files from Server @@ -1977,7 +1977,7 @@ Cela signifie que le client de bureau ne va pas téléverser immédiatement les OCC::FolderCreationDialog %1 Create new folder - + %1 Créer un nouveau dossier Could not create a folder! Check your write permissions. @@ -2008,11 +2008,11 @@ Cela signifie que le client de bureau ne va pas téléverser immédiatement les (backup %1) - + (sauvegarde %1) (backup) - + (sauvegarde) An old sync journal "%1" was found, but could not be removed. Please make sure that no application is currently using it. @@ -2135,7 +2135,7 @@ Pour les utilisateurs avancés: ce problème peut aussi venir de plusieurs fichi Synchronize any other local folder with your %1 - + Synchronisez n’importe quel autre dossier local avec votre %1 @@ -2300,7 +2300,7 @@ Pour les utilisateurs avancés: ce problème peut aussi venir de plusieurs fichi Choose - Choisir + Choisissez Click to select a local folder to sync. @@ -2398,7 +2398,7 @@ Pour les utilisateurs avancés: ce problème peut aussi venir de plusieurs fichi Use virtual files instead of downloading content immediately %1 - Utiliser les fichiers virtuels au lieu de télécharger le contenu immédiatement %1 + Utiliser les fichiers virtuels %1 Virtual files are not supported at the selected location @@ -2411,7 +2411,7 @@ Pour les utilisateurs avancés: ce problème peut aussi venir de plusieurs fichi OCC::GeneralSettings - + &Analysis data collection for needs-based design&Collecte des données d’analyse pour une conception basée sur les besoins &Automatically check for updates &Vérifier automatiquement les mises à jour @@ -2449,15 +2449,15 @@ La rétrogradation des versions n'est pas possible immédiatement: passer d Ask for confirmation before synchronizing external storages - Demander confirmation avant de synchroniser des stockages externes + Confirmation avant de synchroniser des stockages externes Ask for confirmation before synchronizing new folders larger than - Demander confirmation avant de synchroniser les dossiers plus grands que + Demander la confirmation avant de synchroniser les dossiers plus grands que Automatically disable synchronisation of folders that overcome limit - Désactiver automatiquement la synchronisation des dossiers qui dépassent la limite fixée + Désactiver automatiquement la synchronisation des dossiers qui dépassent la limite Cancel @@ -2481,7 +2481,7 @@ La rétrogradation des versions n'est pas possible immédiatement: passer d Data Protection - + Protection des données Debug Archive Created @@ -2518,7 +2518,7 @@ La rétrogradation des versions n'est pas possible immédiatement: passer d More Information - + Plus d’informations Move removed files to trash @@ -2534,11 +2534,11 @@ La rétrogradation des versions n'est pas possible immédiatement: passer d Open Source Software - + Logiciel libre Privacy Policy - + Politique de confidentialité Required to ensure that the software can be used as expected @@ -2591,7 +2591,7 @@ La rétrogradation des versions n'est pas possible immédiatement: passer d Updates - + Mises à jour Usage Documentation @@ -2623,19 +2623,19 @@ La rétrogradation des versions n'est pas possible immédiatement: passer d https://wl.hidrive.com/easy/0004 - + https://wl.hidrive.com/easy/0024 https://wl.hidrive.com/easy/0005 - + https://wl.hidrive.com/easy/0025 https://wl.hidrive.com/easy/0006 - + https://wl.hidrive.com/easy/0006 https://wl.hidrive.com/easy/0007 - + https://wl.hidrive.com/easy/0027 stable @@ -2738,7 +2738,7 @@ La rétrogradation des versions n'est pas possible immédiatement: passer d Add a new ignore pattern: - Ajouter un nouveau modèle d'exclusion : + Ajouter un nouveau motif d'exclusion: Allow Deletion @@ -2756,12 +2756,13 @@ La rétrogradation des versions n'est pas possible immédiatement: passer d Files or folders matching a pattern will not be synchronized. Items where deletion is allowed will be deleted if they prevent a directory from being removed. This is useful for meta data. - Les fichiers ou dossiers correspondant à un modèle ne seront pas synchronisés. -Les éléments dont la suppression est autorisée seront supprimés s'ils empêchent la suppression d'un répertoire. Cette fonction est utile pour les métadonnées. + Les fichiers ou dossiers qui correspondent à ce modèle ne seront pas synchronisés. + +Les objets autorisés à être supprimés le seront s'ils empêchent la suppression d'un dossier. Ceci est utile pour les métadonnées. Ignore Pattern - + Ignorer le modèle Pattern @@ -3856,7 +3857,7 @@ Il s'agit d'un nouveau mode expérimental. Si vous décidez de l' Folder %1 cannot be renamed because of a local file or folder name clash! - Le dossier %1 n’a pu être renommé à cause d’un conflit local de nom de fichier ou de dossier ! + Le dossier %1 ne peut pas être renommé en raison d’un conflit de nom avec un fichier ou un dossier local ! The file %1 is currently in use @@ -3979,7 +3980,7 @@ Il s'agit d'un nouveau mode expérimental. Si vous décidez de l' Upload of %1 exceeds the quota for the folder - Le téléversement de %1 provoque un dépassement du quota du dossier + L'envoi de %1 amène un dépassement de quota pour le dossier @@ -4100,7 +4101,7 @@ Il s'agit d'un nouveau mode expérimental. Si vous décidez de l' Success - + Réussite Warning @@ -4128,7 +4129,7 @@ Il s'agit d'un nouveau mode expérimental. Si vous décidez de l' New account - + Nouveau compte Settings @@ -4420,11 +4421,11 @@ Le serveur a répondu avec l'erreur : %2 This connection is NOT secure as it is not encrypted. - + Cette connexion n'est PAS sécurisée car elle n'est pas chiffrée. This connection is encrypted using %1 bit %2. - + Cette connexion est chiffrée en utilisant %1 bit %2. @@ -4688,7 +4689,7 @@ Le serveur a répondu avec l'erreur : %2 easy/0118 - + easy/0128 @@ -4714,7 +4715,7 @@ Le serveur a répondu avec l'erreur : %2 OCC::UpdateE2eeFolderMetadataJob Failed to finalize item. - Impossible de finaliser l'item. + Échec de finalisation de l’élément. Failed to unlock encrypted folder. @@ -4729,7 +4730,7 @@ Le serveur a répondu avec l'erreur : %2 OCC::UpdateE2eeFolderUsersMetadataJob Could not add or remove user %1 to access folder %2 - Impossible d’ajouter ou de supprimer l’utilisateur %1 de l’accès au dossier %2 + Impossible de supprimer l’utilisateur %1 au dossier d’accès %2 ou de l’y ajouter Could not fetch public key for user %1 @@ -4750,7 +4751,7 @@ Le serveur a répondu avec l'erreur : %2 OCC::User - + %1 notifications%1 notifications %n notification(s) %n notification @@ -4964,7 +4965,7 @@ Le serveur a répondu avec l'erreur : %2 OCC::WebFlowCredentials <b>You have been logged out of your account %1 at %2. Please login again.</b> - + <b>Vous avez été déconnecté(e) de votre compte %1 à %2. Veuillez vous reconnecter.</b> @@ -5140,7 +5141,7 @@ Le serveur a répondu avec l'erreur : %2 Updated local virtual files metadata - Fichiers locaux virtuels de métadonnées mis à jour + Métadonnées des fichiers virtuels locaux mises à jour Updating end-to-end encryption metadata @@ -5166,7 +5167,7 @@ Le serveur a répondu avec l'erreur : %2 Virtual file created Fichier virtuel créé - +updating local virtual files metadataMise à jour des métadonnées des fichiers virtuels locaux QObject @@ -5205,7 +5206,7 @@ Le serveur a répondu avec l'erreur : %2 Could not create debug archive in selected location! - Impossible de créer l'archive de débogage à l'emplacement indiqué ! + Impossible de créer une archive de débogage à l’emplacement sélectionné ! Error deleting the file @@ -5213,7 +5214,7 @@ Le serveur a répondu avec l'erreur : %2 Failed to create debug archive - Échec lors de la création de l'archive de déboguage + Échec de création de l’archive de débogage New folder @@ -5233,7 +5234,7 @@ Le serveur a répondu avec l'erreur : %2 The directory %1 cannot be part of your sync directory. Please choose another folder. - + La répertoire %1 ne peut pas faire partie de votre répertoire de synchronisation. Veuillez choisir un autre dossier. You changed %1 @@ -5306,7 +5307,7 @@ Le serveur a répondu avec l'erreur : %2 SesTrayHeader Open Nextcloud in browser - + Ouvrir HiDrive Next dans le navigateur Open local or group folders @@ -5314,7 +5315,7 @@ Le serveur a répondu avec l'erreur : %2 Website - + Site Web @@ -5356,15 +5357,15 @@ Le serveur a répondu avec l'erreur : %2 Copy share link - Copier le lien de partage + Copier le lien Custom Permissions - + Autorisations personnalisées Enter the note to recipient - + Saisir la remarque à l’attention du destinataire File drop (upload only) @@ -5388,7 +5389,7 @@ Le serveur a répondu avec l'erreur : %2 Share link copied! - Lien de partage copié ! + Lien copié ! Unshare @@ -5532,7 +5533,7 @@ Le serveur a répondu avec l'erreur : %2 En attente du démarrage de la synchronisation - +TrayFoldersMenuButtonFilesFichiers TrayWindowAccountMenu Account switcher and settings menu diff --git a/translations/client_nl.ts b/translations/client_nl.ts index 73a6eee496349..15b99c79fc744 100644 --- a/translations/client_nl.ts +++ b/translations/client_nl.ts @@ -1,6 +1,6 @@ - +AgreeAkkoordBackTerugNecessary dataNoodzakelijke gegevensRequired to ensure that the software can be used as expectedVereist om ervoor te zorgen dat de software kan worden gebruikt zoals verwachtSave SettingsInstellingen opslaanSend anonymous useAnoniem gebruik verzendenSettingsInstellingenThis application uses tracking technologies. By clicking on Agree, you accept the processing of your anonymized data. You can adjust your choices at any time via the settings. <br/> <br/>Information on data processing and more can be found in our <a href='https://wl.hidrive.com/easy/0005'>privacy policy</a>.Deze applicatie maakt gebruik van traceertechnologieën. Door op Akkoord te klikken, accepteert u de verwerking van uw geanonimiseerde gegevens. U kunt uw keuzes op elk gewenst moment aanpassen via de instellingen. <br/> <br/>Informatie over gegevensverwerking en meer kunt u vinden in ons <a href='https://wl.hidrive.com/easy/0045'>privacybeleid</a>.This helps us to optimize the software and to better identify system crashes and unexpected errors.Dit helpt ons om de software te optimaliseren en om systeemcrashes en onverwachte fouten beter te identificeren.We collect anonymized data to optimize our app. We use software solutions from various partners for this purpose. We want to give you full transparency and freedom of choice regarding the collection and processing of your anonymized usage. You can change your settings at any time under the menu item Data Protection.We verzamelen geanonimiseerde gegevens om onze app te optimaliseren. Hiervoor gebruiken we softwareoplossingen van verschillende partners. We willen je volledige transparantie en keuzevrijheid geven met betrekking tot het verzamelen en verwerken van je geanonimiseerde gebruik. Je kunt je instellingen op elk gewenst moment wijzigen onder het menu-item Gegevensbescherming. ActivityItem In %1 @@ -37,11 +37,11 @@ Naar boven schuiven - +BasicComboBoxClear status message menuStatusbericht wissen CallNotificationDialog Answer Talk call notification - Beantwoord Talk oproepmelding + Answer Talk call notification Decline @@ -49,11 +49,11 @@ Decline Talk call notification - Wijs Talk oproepmelding af + Afwijzingsmelding voor gesprek Talk notification caller avatar - Talk notificatie beller avatar + Spraakmelding beller avatar @@ -131,7 +131,7 @@ Server version - Server versie + Serverversie @@ -265,14 +265,14 @@ Fast sync will only sync changes in files and folders within folders that have been explored. This can significantly increase responsiveness on initial configuration of virtual files. However, it will cause redundant downloads of files moved to an unexplored folder. - + Fast sync will only sync changes in files and folders within folders that have been explored. This can significantly increase responsiveness on initial configuration of virtual files. However, it will cause redundant downloads of files moved to an unexplored folder. FileProviderFileDelegate Delete - Verwijder + Verwijderen @@ -285,7 +285,7 @@ General settings Algemene instellingen - + Signal file provider domainSignal file provider domain Virtual files settings Virtuele bestandsinstellingen @@ -300,7 +300,7 @@ Evict local copies … Lokale kopieën verwijderen … - + Evict local copies...Lokale kopieën verwijderen... Local storage use Gebruik lokale opslag @@ -368,18 +368,18 @@ macOS kan dit verzoek negeren of uitstellen. FolderWizardSelectiveSync Add Folder Sync - + Mapsynchronisatie toevoegen Step 3 of 3: Selektive Synchronisation - + Stap 3 van 3: Selektieve synchronisatie FolderWizardSourcePage &Choose - + &Kiezen Add Folder Sync @@ -387,11 +387,11 @@ macOS kan dit verzoek negeren of uitstellen. Select a folder on your hard drive that should be permanetly connected to your %1. All files and subfolders are automatically uploaded and synchronized - + Selecteer een map op je harde schijf die permanent verbonden moet zijn met je %1. Alle bestanden en submappen worden automatisch geüpload en gesynchroniseerd. Step 1 of 3: Select local folder - + Stap 1 van 3: Selecteer lokale map @@ -402,7 +402,7 @@ macOS kan dit verzoek negeren of uitstellen. Both folders are permanently linked and the respective contents are automatically synchronized and updated. - + Beide mappen zijn permanent gekoppeld en de respectieve inhoud wordt automatisch gesynchroniseerd en bijgewerkt. Create folder @@ -414,7 +414,7 @@ macOS kan dit verzoek negeren of uitstellen. Please now select or create a target folder in your %1 where the content should be uploaded and synchronized. - + Selecteer of maak nu een doelmap in uw %1 waar de inhoud moet worden geüpload en gesynchroniseerd. Refresh @@ -422,7 +422,7 @@ macOS kan dit verzoek negeren of uitstellen. Step 2 of 3: Directory in your %1 - + Stap 2 van 3: Directory in uw %1 @@ -493,7 +493,8 @@ macOS kan dit verzoek negeren of uitstellen. %1 accounts were detected from a legacy desktop client. Should the accounts be imported? - %1 accounts van een eerdere desktop cliënt zijn gevonden. Moeten de accounts geïmporteerd worden? + Er zijn %1 accounts gedetecteerd van een oudere desktopclient. +Moeten de accounts worden geïmporteerd? 1 account was detected from a legacy desktop client. @@ -679,7 +680,7 @@ Wil je begin-tot-eind versleuteling instellen? Expand Memory - + Geheugen uitbreiden Folder creation failed @@ -763,7 +764,7 @@ Wil je begin-tot-eind versleuteling instellen? Storage space %1% occupied - + Opslagruimte %1% bezet Storage space: … @@ -803,15 +804,15 @@ Wil je begin-tot-eind versleuteling instellen? There are folders that were not synchronized because they are external storages: - + Er zijn mappen die niet gesynchroniseerd zijn, omdat ze op externe opslag staan: There are folders that were not synchronized because they are too big or external storages: - + Er zijn mappen die niet gesynchroniseerd zijn, omdat ze te groot zijn of op externe opslag staan: There are folders that were not synchronized because they are too big: - + Er zijn mappen die niet gesynchroniseerd zijn, omdat ze te groot zijn: This account supports end-to-end encryption @@ -832,12 +833,12 @@ Dit zal alle synchronisaties, die op dit moment bezig zijn, afbreken. This will encrypt your folder and all files within it. These files will no longer be accessible without your encryption mnemonic key. <b>This process is not reversible. Are you sure you want to proceed?</b> - Dit versleutelt je map en alle bestanden in de map. Deze bestanden zijn niet langer toegankelijk zonder je geheugensteunsleutel. -<b>Deze actie is onomkeerbaar. Weet je het zeker?</b> + Dit zal je map en alle bestanden erin versleutelen. Deze bestanden zullen niet langer toegankelijk zijn zonder je coderingssleutel. +<b>Dit proces is niet omkeerbaar. Weet u zeker dat u wilt doorgaan? To protect your Cryptographic Identity, we encrypt it with a mnemonic of 12 dictionary words. Please note these down and keep them safe. They will be needed to add other devices to your account (like your mobile phone or laptop). - Om je cryptografische identiteit te beschermen, versleutelen we die met een geheugensteun van 12 woordenboekwoorden. Schrijf deze op en bewaar ze op een veilige plek. Ze zijn nodig om nieuwe apparaten aan je account toe te voegen (zoals je smartphone of laptop). + To protect your Cryptographic Identity, we encrypt it with a mnemonic of 12 dictionary words. Please note these down and keep them safe. They will be needed to add other devices to your account (like your mobile phone or laptop). Unable to connect to %1. @@ -870,7 +871,7 @@ Wait for the new sync, then encrypt it. https://wl.hidrive.com/easy/0057 - + https://wl.hidrive.com/easy/0097 @@ -1231,7 +1232,7 @@ Wait for the new sync, then encrypt it. The file could not be synced because it generates a case clash conflict with an existing file on this system. - Dit bestand kon niet worden gesynchroniseerd omdat er een conflict is in hoofdlettergebruik. + The file could not be synced because it generates a case clash conflict with an existing file on this system. Use invalid name @@ -1475,11 +1476,11 @@ Wait for the new sync, then encrypt it. OCC::DiscoverySingleDirectoryJob Encrypted metadata setup error! - Fout bij instellen versleutelde metadata! + Encrypted metadata setup error! Encrypted metadata setup error: initial signature from server is empty. - + Fout bij opzetten versleutelde metagegevens: initiële handtekening van server is leeg. Server error: PROPFIND reply is not XML formatted! @@ -1744,7 +1745,7 @@ Dit kan een probleem zijn met je OpenSSL-bibliotheken. Open Browser - + Browser openen Polling for authorization @@ -1863,7 +1864,7 @@ Dit kan een probleem zijn met je OpenSSL-bibliotheken. A folder from an external storage has been added. - + Er is een map op externe opslag toegevoegd. A folder has surpassed the set folder size limit of %1MB: %2. @@ -1875,17 +1876,21 @@ Dit kan een probleem zijn met je OpenSSL-bibliotheken. A large number of files in the server have been deleted. Please confirm if you'd like to proceed with these deletions. Alternatively, you can restore all deleted files by uploading from '%1' folder to the server. - + Een groot aantal bestanden op de server is verwijderd. +Bevestig alstublieft of u door wilt gaan met deze verwijderingen. +U kunt ook alle verwijderde bestanden terugzetten door vanuit de map '%1' te uploaden naar de server. A large number of files in your local '%1' folder have been deleted. Please confirm if you'd like to proceed with these deletions. Alternatively, you can restore all deleted files by downloading them from the server. - + Een groot aantal bestanden in uw lokale map '%1' is verwijderd. +Bevestig alstublieft of u door wilt gaan met deze verwijderingen. +U kunt ook alle verwijderde bestanden herstellen door ze van de server te downloaden. A new folder larger than %1 MB has been added: %2. - + Er is een nieuwe map groter dan %1 MB toegevoegd: %2. Changes in synchronized folders could not be tracked reliably. @@ -1925,7 +1930,7 @@ Dit betekent dat de synchronisatieclient misschien niet meteen lokale wijziginge Proceed with Deletion - + Doorgaan met verwijderen Remove all files? @@ -1933,11 +1938,11 @@ Dit betekent dat de synchronisatieclient misschien niet meteen lokale wijziginge Restore Files from Server - + Bestanden terugzetten van server Restore Files to Server - + Bestanden terugzetten naar server Stop syncing @@ -1972,7 +1977,7 @@ Dit betekent dat de synchronisatieclient misschien niet meteen lokale wijziginge OCC::FolderCreationDialog %1 Create new folder - + %1 Nieuwe map maken Could not create a folder! Check your write permissions. @@ -2003,11 +2008,11 @@ Dit betekent dat de synchronisatieclient misschien niet meteen lokale wijziginge (backup %1) - + (backup %1) (backup) - + (backup) An old sync journal "%1" was found, but could not be removed. Please make sure that no application is currently using it. @@ -2127,7 +2132,7 @@ For advanced users: this issue might be related to multiple sync database files Synchronize any other local folder with your %1 - + Synchroniseer een andere lokale map met uw %1 @@ -2293,7 +2298,7 @@ For advanced users: this issue might be related to multiple sync database files Choose - Kies + Kies Click to select a local folder to sync. @@ -2391,7 +2396,7 @@ For advanced users: this issue might be related to multiple sync database files Use virtual files instead of downloading content immediately %1 - Gebruik virtuele bestanden in plaats van de content direct te downloaden %1 + Gebruik virtuele bestanden in plaats van direct downloaden content%1 Virtual files are not supported at the selected location @@ -2404,7 +2409,7 @@ For advanced users: this issue might be related to multiple sync database files OCC::GeneralSettings - + &Analysis data collection for needs-based design&Analyse van gegevensverzameling voor een op behoeften gebaseerd ontwerp &Automatically check for updates &Controleer automatisch op updates @@ -2441,11 +2446,11 @@ Downgrading versions is not possible immediately: changing from stable to enterp Ask for confirmation before synchronizing new folders larger than - Vraag bevestiging voordat mappen worden gesynchroniseerd groter dan + Ask for confirmation before synchronizing new folders larger than Automatically disable synchronisation of folders that overcome limit - Synchronisatie automatisch uitschakelen van mappen die de limiet overschrijden + Automatically disable synchronisation of folders that overcome limit Cancel @@ -2469,7 +2474,7 @@ Downgrading versions is not possible immediately: changing from stable to enterp Data Protection - + Gegevensbescherming Debug Archive Created @@ -2506,7 +2511,7 @@ Downgrading versions is not possible immediately: changing from stable to enterp More Information - + Meer informatie Move removed files to trash @@ -2522,11 +2527,11 @@ Downgrading versions is not possible immediately: changing from stable to enterp Open Source Software - + Open source software Privacy Policy - + Privacybeleid Required to ensure that the software can be used as expected @@ -2558,7 +2563,7 @@ Downgrading versions is not possible immediately: changing from stable to enterp Show sync folders in &Explorer's navigation pane - Toon synchronisatiemappen in &Verkennen navigatievenster + Show sync folders in &Explorer's navigation pane The channel determines which upgrades will be offered to install: @@ -2577,7 +2582,7 @@ Downgrading versions is not possible immediately: changing from stable to enterp Updates - + Updates Usage Documentation @@ -2609,19 +2614,19 @@ Downgrading versions is not possible immediately: changing from stable to enterp https://wl.hidrive.com/easy/0004 - + https://wl.hidrive.com/easy/0054 https://wl.hidrive.com/easy/0005 - + https://wl.hidrive.com/easy/0055 https://wl.hidrive.com/easy/0006 - + https://wl.hidrive.com/easy/0006 https://wl.hidrive.com/easy/0007 - + https://wl.hidrive.com/easy/0057 stable @@ -2742,13 +2747,13 @@ Downgrading versions is not possible immediately: changing from stable to enterp Files or folders matching a pattern will not be synchronized. Items where deletion is allowed will be deleted if they prevent a directory from being removed. This is useful for meta data. - Bestanden of mappen die overeenkomen met een patroon zullen niet worden gesynchroniseerd. + Bestanden of mappen die overeenkomen met dit patroon worden niet gesynchroniseerd. -Onderdelen die gewist mogen worden, worden verwijderd als ze verhinderen dat een map verdwijnt. Dit is nuttig voor metadata. +Objecten die verwijderd mogen worden, worden verwijderd als ze zouden verhinderen dat een map verwijderd wordt. Dit is nuttig voor metadata. Ignore Pattern - + Patroon negeren Pattern @@ -3843,7 +3848,7 @@ Dit is een nieuwe, experimentele modus. Als je besluit het te gebruiken, vragen Folder %1 cannot be renamed because of a local file or folder name clash! - Map %1 kan niet worden hernoemd wegens een lokaal map- of bestandsnaam conflict! + Map %1 kan niet hernoemd worden vanwege een lokale bestands- of mapnaamclash! The file %1 is currently in use @@ -4087,7 +4092,7 @@ Dit is een nieuwe, experimentele modus. Als je besluit het te gebruiken, vragen Success - + Succes Warning @@ -4115,7 +4120,7 @@ Dit is een nieuwe, experimentele modus. Als je besluit het te gebruiken, vragen New account - + Nieuw account Settings @@ -4407,11 +4412,11 @@ Server antwoordde met fout: %2 This connection is NOT secure as it is not encrypted. - + Deze verbinding is NIET veilig, omdat deze niet versleuteld is. This connection is encrypted using %1 bit %2. - + Deze verbinding is versleuteld via %1 bit %2. @@ -4675,7 +4680,7 @@ Server antwoordde met fout: %2 easy/0118 - + easy/0108 @@ -4701,7 +4706,7 @@ Server antwoordde met fout: %2 OCC::UpdateE2eeFolderMetadataJob Failed to finalize item. - Kon item niet afronden. + Failed to finalize item. Failed to unlock encrypted folder. @@ -4716,7 +4721,7 @@ Server antwoordde met fout: %2 OCC::UpdateE2eeFolderUsersMetadataJob Could not add or remove user %1 to access folder %2 - Kon gebruiker %1 niet toevoegen of verwijderen om toegang te krijgen tot map %2 + Kan gebruiker %1 niet toevoegen of verwijderen voor toegang tot map %2 Could not fetch public key for user %1 @@ -4737,7 +4742,7 @@ Server antwoordde met fout: %2 OCC::User - + %1 notifications%1 kennisgevingen %n notification(s) @@ -4951,7 +4956,7 @@ Server antwoordde met fout: %2 OCC::WebFlowCredentials <b>You have been logged out of your account %1 at %2. Please login again.</b> - + <b>U bent afgemeld bij uw account %1 op %2. Log opnieuw in.</b> @@ -5127,7 +5132,7 @@ Server antwoordde met fout: %2 Updated local virtual files metadata - Lokale virtuele bestanden metadata geüploaded + Metagegevens van lokale virtuele bestanden bijgewerkt Updating end-to-end encryption metadata @@ -5153,7 +5158,7 @@ Server antwoordde met fout: %2 Virtual file created Virtueel bestand gecreëerd - +updating local virtual files metadataMetagegevens van lokale virtuele bestanden bijwerken QObject @@ -5192,7 +5197,7 @@ Server antwoordde met fout: %2 Could not create debug archive in selected location! - Kon debugarchief niet maken op de geselecteerde locatie! + Kon geen debug-archief aanmaken op geselecteerde locatie! Error deleting the file @@ -5200,7 +5205,7 @@ Server antwoordde met fout: %2 Failed to create debug archive - Kon debugarchief niet maken + Debug-archief is niet aangemaakt New folder @@ -5220,7 +5225,7 @@ Server antwoordde met fout: %2 The directory %1 cannot be part of your sync directory. Please choose another folder. - + De map %1 kan geen deel uitmaken van je synchronisatiemap. Kies een andere map. You changed %1 @@ -5293,7 +5298,7 @@ Server antwoordde met fout: %2 SesTrayHeader Open Nextcloud in browser - + HiDrive Next in browser openen Open local or group folders @@ -5301,7 +5306,7 @@ Server antwoordde met fout: %2 Website - + Website @@ -5343,15 +5348,15 @@ Server antwoordde met fout: %2 Copy share link - Kopiëren deellink + Copy share link Custom Permissions - + Aangepaste machtigingen Enter the note to recipient - + Voer de notitie aan de ontvanger in File drop (upload only) @@ -5375,7 +5380,7 @@ Server antwoordde met fout: %2 Share link copied! - Deellink gekopieerd! + Share link copied! Unshare @@ -5519,7 +5524,7 @@ Server antwoordde met fout: %2 In afwachting van synchronisatie - +TrayFoldersMenuButtonFilesBestanden TrayWindowAccountMenu Account switcher and settings menu From e8cf8019ba5f5f00060ca86be20ff2683d32f32c Mon Sep 17 00:00:00 2001 From: Kevin Beraz Date: Thu, 16 Oct 2025 10:53:42 +0200 Subject: [PATCH 370/371] merge step 4 --- translations/client_de.ts | 147 ++++++++++++++++++++++------- translations/client_en.ts | 175 +++++++++++++++++++++++++---------- translations/client_en_GB.ts | 147 ++++++++++++++++++++++------- translations/client_es.ts | 150 +++++++++++++++++++++++------- translations/client_fr.ts | 151 ++++++++++++++++++++++-------- translations/client_nl.ts | 153 ++++++++++++++++++++++-------- 6 files changed, 693 insertions(+), 230 deletions(-) diff --git a/translations/client_de.ts b/translations/client_de.ts index 9447a1502dfdb..78c40c0a65118 100644 --- a/translations/client_de.ts +++ b/translations/client_de.ts @@ -1,6 +1,49 @@ -AgreeZustimmenBackZurückNecessary dataErforderliche DatenRequired to ensure that the software can be used as expectedErforderlich, um sicherzustellen, dass die Software wie erwartet verwendet werden kann.Save SettingsEinstellungen speichernSend anonymous useAnonyme Nutzungsdaten sendenSettingsEinstellungenThis application uses tracking technologies. By clicking on Agree, you accept the processing of your anonymized data. You can adjust your choices at any time via the settings. <br/> <br/>Information on data processing and more can be found in our <a href='https://wl.hidrive.com/easy/0005'>privacy policy</a>.Diese Anwendung verwendet Tracking-Technologien. Wenn Sie auf Zustimmen klicken, akzeptieren Sie die Verarbeitung Ihrer anonymisierten Daten. Sie können Ihre Auswahl jederzeit über die Einstellungen anpassen. <br/> <br/>Informationen zur Datenverarbeitung und mehr finden Sie in unserer <a href='https://wl.hidrive.com/easy/0045'>Datenschutzrichtlinie</a>.This helps us to optimize the software and to better identify system crashes and unexpected errors.Dies hilft uns, die Software zu optimieren und Systemabstürze und unerwartete Fehler besser zu erkennen.We collect anonymized data to optimize our app. We use software solutions from various partners for this purpose. We want to give you full transparency and freedom of choice regarding the collection and processing of your anonymized usage. You can change your settings at any time under the menu item Data Protection.Wir sammeln anonymisierte Daten, um unsere App zu optimieren. Dazu nutzen wir Softwarelösungen von verschiedenen Partnern. Wir möchten Ihnen volle Transparenz und Wahlfreiheit bezüglich der Erhebung und Verarbeitung Ihrer anonymisierten Nutzung geben. Sie können Ihre Einstellungen jederzeit unter dem Menüpunkt Datenschutz ändern. + + + + Agree + Zustimmen + + + Back + Zurück + + + Necessary data + Erforderliche Daten + + + Required to ensure that the software can be used as expected + Erforderlich, um sicherzustellen, dass die Software wie erwartet verwendet werden kann. + + + Save Settings + Einstellungen speichern + + + Send anonymous use + Anonyme Nutzungsdaten senden + + + Settings + Einstellungen + + + This application uses tracking technologies. By clicking on Agree, you accept the processing of your anonymized data. You can adjust your choices at any time via the settings. <br/> <br/>Information on data processing and more can be found in our <a href='https://wl.hidrive.com/easy/0005'>privacy policy</a>. + Diese Anwendung verwendet Tracking-Technologien. Wenn Sie auf Zustimmen klicken, akzeptieren Sie die Verarbeitung Ihrer anonymisierten Daten. Sie können Ihre Auswahl jederzeit über die Einstellungen anpassen. <br/> <br/>Informationen zur Datenverarbeitung und mehr finden Sie in unserer <a href='https://wl.hidrive.com/easy/0045'>Datenschutzrichtlinie</a>. + + + This helps us to optimize the software and to better identify system crashes and unexpected errors. + Dies hilft uns, die Software zu optimieren und Systemabstürze und unerwartete Fehler besser zu erkennen. + + + We collect anonymized data to optimize our app. We use software solutions from various partners for this purpose. We want to give you full transparency and freedom of choice regarding the collection and processing of your anonymized usage. You can change your settings at any time under the menu item Data Protection. + Wir sammeln anonymisierte Daten, um unsere App zu optimieren. Dazu nutzen wir Softwarelösungen von verschiedenen Partnern. Wir möchten Ihnen volle Transparenz und Wahlfreiheit bezüglich der Erhebung und Verarbeitung Ihrer anonymisierten Nutzung geben. Sie können Ihre Einstellungen jederzeit unter dem Menüpunkt Datenschutz ändern. + + + ActivityItem In %1 @@ -37,7 +80,14 @@ Nach unten blättern -BasicComboBoxClear status message menuStatusmeldungs-Menü löschen + + BasicComboBox + + Clear status message menu + Statusmeldungs-Menü löschen + + + CallNotificationDialog Answer Talk call notification @@ -285,7 +335,11 @@ General settings Allgemeine Einstellungen - Signal file provider domainDomain des Signaldateianbieters + + Signal file provider domain + Domain des Signaldateianbieters + + Virtual files settings Einstellungen für virtuelle Dateien @@ -300,7 +354,11 @@ Evict local copies … Lokale Kopien entfernen … - Evict local copies...Lokale Kopien entfernen... + + Evict local copies... + Lokale Kopien entfernen... + + Local storage use Lokaler Speicher verwenden @@ -383,7 +441,7 @@ macOS kann diese Anforderung ignorieren oder verzögern. Add Folder Sync - + Ordner Sync hinzufügen Select a folder on your hard drive that should be permanetly connected to your %1. All files and subfolders are automatically uploaded and synchronized @@ -398,7 +456,7 @@ macOS kann diese Anforderung ignorieren oder verzögern. FolderWizardTargetPage Add Folder Sync - + Ordner Sync hinzufügen Both folders are permanently linked and the respective contents are automatically synchronized and updated. @@ -1412,7 +1470,7 @@ Warten Sie auf die neue Synchronisierung und verschlüsseln Sie sie dann.OCC::DataProtectionPage Agree - + Zustimmen Form @@ -1424,14 +1482,14 @@ Warten Sie auf die neue Synchronisierung und verschlüsseln Sie sie dann. This application uses tracking technologies. By clicking on Agree, you accept the processing of your anonymized data. You can adjust your choices at any time via the settings. <br/> <br/>Information on data processing and more can be found in our <a href='https://wl.hidrive.com/easy/0005'>privacy policy</a>. - + Diese Anwendung verwendet Tracking-Technologien. Wenn Sie auf Zustimmen klicken, akzeptieren Sie die Verarbeitung Ihrer anonymisierten Daten. Sie können Ihre Auswahl jederzeit über die Einstellungen anpassen. <br/> <br/>Informationen zur Datenverarbeitung und mehr finden Sie in unserer <a href='https://wl.hidrive.com/easy/0045'>Datenschutzrichtlinie</a>. OCC::DataProtectionSettingsPage Back - + Zurück Form @@ -1439,27 +1497,27 @@ Warten Sie auf die neue Synchronisierung und verschlüsseln Sie sie dann. Necessary data - + Erforderliche Daten Required to ensure that the software can be used as expected - + Erforderlich, um sicherzustellen, dass die Software wie erwartet verwendet werden kann. Save Settings - + Einstellungen speichern Send anonymous use - + Anonyme Nutzungsdaten senden This helps us to optimize the software and to better identify system crashes and unexpected errors. - + Dies hilft uns, die Software zu optimieren und Systemabstürze und unerwartete Fehler besser zu erkennen. We collect anonymized data to optimize our app. We use software solutions from various partners for this purpose. We want to give you full transparency and freedom of choice regarding the collection and processing of your anonymized usage. You can change your settings at any time under the menu item Data Protection. - + Wir sammeln anonymisierte Daten, um unsere App zu optimieren. Dazu nutzen wir Softwarelösungen von verschiedenen Partnern. Wir möchten Ihnen volle Transparenz und Wahlfreiheit bezüglich der Erhebung und Verarbeitung Ihrer anonymisierten Nutzung geben. Sie können Ihre Einstellungen jederzeit unter dem Menüpunkt Datenschutz ändern. @@ -2128,7 +2186,7 @@ Für fortgeschrittene Benutzer: Dieses Problem kann damit zusammenhängen, dass OCC::FolderStatusDelegate Add Folder Sync - + Ordner Sync hinzufügen File @@ -2297,7 +2355,7 @@ Für fortgeschrittene Benutzer: Dieses Problem kann damit zusammenhängen, dass OCC::FolderWizardLocalPath Add Folder Sync - + Ordner Sync hinzufügen Choose @@ -2313,7 +2371,7 @@ Für fortgeschrittene Benutzer: Dieses Problem kann damit zusammenhängen, dass Select a folder on your hard drive that should be permanetly connected to your %1. All files and subfolders are automatically uploaded and synchronized - + Wählen Sie einen Ordner auf Ihrer Festplatte, der dauerhaft mit Ihrem %1 verbunden sein soll. Alle Dateien und Unterordner werden automatisch hochgeladen und synchronisiert. Select the source folder @@ -2321,14 +2379,14 @@ Für fortgeschrittene Benutzer: Dieses Problem kann damit zusammenhängen, dass Step 1 of 3: Select local folder - + Schritt 1 von 3: Lokalen Ordner auswählen OCC::FolderWizardRemotePath Add Folder Sync - + Ordner Sync hinzufügen Authentication failed accessing %1 @@ -2336,7 +2394,7 @@ Für fortgeschrittene Benutzer: Dieses Problem kann damit zusammenhängen, dass Both folders are permanently linked and the respective contents are automatically synchronized and updated. - + Beide Ordner sind dauerhaft miteinander verknüpft und die jeweiligen Inhalte werden automatisch synchronisiert und aktualisiert. Choose this to sync the entire account @@ -2372,7 +2430,7 @@ Für fortgeschrittene Benutzer: Dieses Problem kann damit zusammenhängen, dass Please now select or create a target folder in your %1 where the content should be uploaded and synchronized. - + Bitte wählen oder erstellen Sie nun einen Zielordner in Ihrem %1, in den der Inhalt hochgeladen und synchronisiert werden soll. Refresh @@ -2380,7 +2438,7 @@ Für fortgeschrittene Benutzer: Dieses Problem kann damit zusammenhängen, dass Step 2 of 3: Directory in your %1 - + Schritt 2 von 3: Verzeichnis in Ihrem %1 @@ -2391,11 +2449,11 @@ Für fortgeschrittene Benutzer: Dieses Problem kann damit zusammenhängen, dass Add Folder Sync - + Ordner Sync hinzufügen Step 3 of 3: Selektive Synchronisation - + Schritt 3 von 3: Selektive Synchronisierung Use virtual files instead of downloading content immediately %1 @@ -2412,7 +2470,11 @@ Für fortgeschrittene Benutzer: Dieses Problem kann damit zusammenhängen, dass OCC::GeneralSettings - &Analysis data collection for needs-based design&Analyse der Datenerhebung für bedarfsgerechte Gestaltung + + &Analysis data collection for needs-based design + &Analyse der Datenerhebung für bedarfsgerechte Gestaltung + + &Automatically check for updates &Automatisch auf Aktualisierungen prüfen @@ -2527,7 +2589,7 @@ Ein Downgrade von Versionen ist nicht sofort möglich: Der Wechsel von Beta auf Necessary data - + Erforderliche Daten Notify when synchronised folders grow larger than specified limit @@ -2543,7 +2605,7 @@ Ein Downgrade von Versionen ist nicht sofort möglich: Der Wechsel von Beta auf Required to ensure that the software can be used as expected - + Erforderlich, um sicherzustellen, dass die Software wie erwartet verwendet werden kann. S&how crash reporter @@ -2551,7 +2613,7 @@ Ein Downgrade von Versionen ist nicht sofort möglich: Der Wechsel von Beta auf Send anonymous use - + Anonyme Nutzungsdaten senden Server notifications that require attention. @@ -2583,7 +2645,7 @@ Ein Downgrade von Versionen ist nicht sofort möglich: Der Wechsel von Beta auf This helps us to optimize the software and to better identify system crashes and unexpected errors. - + Dies hilft uns, die Software zu optimieren und Systemabstürze und unerwartete Fehler besser zu erkennen. Update channel @@ -4751,7 +4813,11 @@ Server antwortete mit Fehler: %2 OCC::User - %1 notifications%1 Benachrichtigungen + + %1 notifications + %1 Benachrichtigungen + + %n notification(s) %n Benachrichtigung @@ -5167,7 +5233,11 @@ Server antwortete mit Fehler: %2 Virtual file created Virtuelle Datei erstellt -updating local virtual files metadataAktualisierung der Metadaten lokaler virtueller Dateien + + updating local virtual files metadata + Aktualisierung der Metadaten lokaler virtueller Dateien + + QObject @@ -5533,7 +5603,14 @@ Server antwortete mit Fehler: %2 Warte auf Beginn der Synchronisierung. -TrayFoldersMenuButtonFilesDateien + + TrayFoldersMenuButton + + Files + Dateien + + + TrayWindowAccountMenu Account switcher and settings menu @@ -5607,7 +5684,7 @@ Server antwortete mit Fehler: %2 Open Nextcloud in browser - + HiDrive Next im Browser öffnen Open local or group folders @@ -5615,7 +5692,7 @@ Server antwortete mit Fehler: %2 Website - + Website diff --git a/translations/client_en.ts b/translations/client_en.ts index 0b6eb2113c17c..aba2f8417bb11 100644 --- a/translations/client_en.ts +++ b/translations/client_en.ts @@ -1,6 +1,49 @@ -AgreeAgreeBackBackNecessary dataNecessary dataRequired to ensure that the software can be used as expectedRequired to ensure that the software can be used as expectedSave SettingsSave SettingsSend anonymous useSend anonymous useSettingsSettingsThis application uses tracking technologies. By clicking on Agree, you accept the processing of your anonymized data. You can adjust your choices at any time via the settings. <br/> <br/>Information on data processing and more can be found in our <a href='https://wl.hidrive.com/easy/0005'>privacy policy</a>.This application uses tracking technologies. By clicking on Agree, you accept the processing of your anonymized data. You can adjust your choices at any time via the settings. <br/> <br/>Information on data processing and more can be found in our <a href='https://wl.hidrive.com/easy/0005'>privacy policy</a>.This helps us to optimize the software and to better identify system crashes and unexpected errors.This helps us to optimize the software and to better identify system crashes and unexpected errors.We collect anonymized data to optimize our app. We use software solutions from various partners for this purpose. We want to give you full transparency and freedom of choice regarding the collection and processing of your anonymized usage. You can change your settings at any time under the menu item Data Protection.We collect anonymized data to optimize our app. We use software solutions from various partners for this purpose. We want to give you full transparency and freedom of choice regarding the collection and processing of your anonymized usage. You can change your settings at any time under the menu item Data Protection. + + + + Agree + Agree + + + Back + Back + + + Necessary data + Necessary data + + + Required to ensure that the software can be used as expected + Required to ensure that the software can be used as expected + + + Save Settings + Save Settings + + + Send anonymous use + Send anonymous use + + + Settings + Settings + + + This application uses tracking technologies. By clicking on Agree, you accept the processing of your anonymized data. You can adjust your choices at any time via the settings. <br/> <br/>Information on data processing and more can be found in our <a href='https://wl.hidrive.com/easy/0005'>privacy policy</a>. + This application uses tracking technologies. By clicking on Agree, you accept the processing of your anonymized data. You can adjust your choices at any time via the settings. <br/> <br/>Information on data processing and more can be found in our <a href='https://wl.hidrive.com/easy/0005'>privacy policy</a>. + + + This helps us to optimize the software and to better identify system crashes and unexpected errors. + This helps us to optimize the software and to better identify system crashes and unexpected errors. + + + We collect anonymized data to optimize our app. We use software solutions from various partners for this purpose. We want to give you full transparency and freedom of choice regarding the collection and processing of your anonymized usage. You can change your settings at any time under the menu item Data Protection. + We collect anonymized data to optimize our app. We use software solutions from various partners for this purpose. We want to give you full transparency and freedom of choice regarding the collection and processing of your anonymized usage. You can change your settings at any time under the menu item Data Protection. + + + ActivityItem In %1 @@ -37,7 +80,14 @@ -BasicComboBoxClear status message menuDelete status message menu + + BasicComboBox + + Clear status message menu + Delete status message menu + + + CallNotificationDialog Answer Talk call notification @@ -96,7 +146,7 @@ Settings - + Settings Sync paused @@ -178,7 +228,7 @@ Settings - + Settings @@ -214,7 +264,7 @@ Choose - + Choose Token Encryption Key Chooser @@ -285,7 +335,11 @@ General settings - Signal file provider domainSignal file provider domain + + Signal file provider domain + Signal file provider domain + + Virtual files settings @@ -300,7 +354,11 @@ Evict local copies … - Evict local copies...Evict local copies... + + Evict local copies... + Evict local copies... + + Local storage use @@ -382,7 +440,7 @@ macOS may ignore or delay this request. Add Folder Sync - + Add Folder Sync Select a folder on your hard drive that should be permanetly connected to your %1. All files and subfolders are automatically uploaded and synchronized @@ -397,7 +455,7 @@ macOS may ignore or delay this request. FolderWizardTargetPage Add Folder Sync - + Add Folder Sync Both folders are permanently linked and the respective contents are automatically synchronized and updated. @@ -1319,7 +1377,7 @@ Wait for the new sync, then encrypt it. Local version - + Local version Open local version @@ -1331,7 +1389,7 @@ Wait for the new sync, then encrypt it. Server version - + Server version Sync Conflict @@ -1402,7 +1460,7 @@ Wait for the new sync, then encrypt it. OCC::DataProtectionPage Agree - + Agree Form @@ -1410,18 +1468,18 @@ Wait for the new sync, then encrypt it. Settings - + Settings This application uses tracking technologies. By clicking on Agree, you accept the processing of your anonymized data. You can adjust your choices at any time via the settings. <br/> <br/>Information on data processing and more can be found in our <a href='https://wl.hidrive.com/easy/0005'>privacy policy</a>. - + This application uses tracking technologies. By clicking on Agree, you accept the processing of your anonymized data. You can adjust your choices at any time via the settings. <br/> <br/>Information on data processing and more can be found in our <a href='https://wl.hidrive.com/easy/0005'>privacy policy</a>. OCC::DataProtectionSettingsPage Back - + Back Form @@ -1429,27 +1487,27 @@ Wait for the new sync, then encrypt it. Necessary data - + Necessary data Required to ensure that the software can be used as expected - + Required to ensure that the software can be used as expected Save Settings - + Save Settings Send anonymous use - + Send anonymous use This helps us to optimize the software and to better identify system crashes and unexpected errors. - + This helps us to optimize the software and to better identify system crashes and unexpected errors. We collect anonymized data to optimize our app. We use software solutions from various partners for this purpose. We want to give you full transparency and freedom of choice regarding the collection and processing of your anonymized usage. You can change your settings at any time under the menu item Data Protection. - + We collect anonymized data to optimize our app. We use software solutions from various partners for this purpose. We want to give you full transparency and freedom of choice regarding the collection and processing of your anonymized usage. You can change your settings at any time under the menu item Data Protection. @@ -2109,7 +2167,7 @@ For advanced users: this issue might be related to multiple sync database files OCC::FolderStatusDelegate Add Folder Sync - + Add Folder Sync File @@ -2278,7 +2336,7 @@ For advanced users: this issue might be related to multiple sync database files OCC::FolderWizardLocalPath Add Folder Sync - + Add Folder Sync Choose @@ -2294,7 +2352,7 @@ For advanced users: this issue might be related to multiple sync database files Select a folder on your hard drive that should be permanetly connected to your %1. All files and subfolders are automatically uploaded and synchronized - + Select a folder on your hard drive that should be permanetly connected to your %1. All files and subfolders are automatically uploaded and synchronized. Select the source folder @@ -2302,14 +2360,14 @@ For advanced users: this issue might be related to multiple sync database files Step 1 of 3: Select local folder - + Step 1 of 3: Select local folder OCC::FolderWizardRemotePath Add Folder Sync - + Add Folder Sync Authentication failed accessing %1 @@ -2317,7 +2375,7 @@ For advanced users: this issue might be related to multiple sync database files Both folders are permanently linked and the respective contents are automatically synchronized and updated. - + Both folders are permanently linked and the respective contents are automatically synchronized and updated. Choose this to sync the entire account @@ -2329,7 +2387,7 @@ For advanced users: this issue might be related to multiple sync database files Create folder - + Create folder Enter the name of the new folder to be created below "%1": @@ -2353,7 +2411,7 @@ For advanced users: this issue might be related to multiple sync database files Please now select or create a target folder in your %1 where the content should be uploaded and synchronized. - + Please now select or create a target folder in your %1 where the content should be uploaded and synchronized. Refresh @@ -2361,7 +2419,7 @@ For advanced users: this issue might be related to multiple sync database files Step 2 of 3: Directory in your %1 - + Step 2 of 3: Directory in your %1 @@ -2372,11 +2430,11 @@ For advanced users: this issue might be related to multiple sync database files Add Folder Sync - + Add Folder Sync Step 3 of 3: Selektive Synchronisation - + Step 3 of 3: Selective Synchronisation Use virtual files instead of downloading content immediately %1 @@ -2393,7 +2451,11 @@ For advanced users: this issue might be related to multiple sync database files OCC::GeneralSettings - &Analysis data collection for needs-based design&Analysis data collection for needs-based design + + &Analysis data collection for needs-based design + &Analysis data collection for needs-based design + + &Automatically check for updates @@ -2503,7 +2565,7 @@ Downgrading versions is not possible immediately: changing from stable to enterp Necessary data - + Necessary data Notify when synchronised folders grow larger than specified limit @@ -2519,7 +2581,7 @@ Downgrading versions is not possible immediately: changing from stable to enterp Required to ensure that the software can be used as expected - + Required to ensure that the software can be used as expected S&how crash reporter @@ -2527,7 +2589,7 @@ Downgrading versions is not possible immediately: changing from stable to enterp Send anonymous use - + Send anonymous use Server notifications that require attention. @@ -2558,7 +2620,7 @@ Downgrading versions is not possible immediately: changing from stable to enterp This helps us to optimize the software and to better identify system crashes and unexpected errors. - + This helps us to optimize the software and to better identify system crashes and unexpected errors. Update channel @@ -3908,7 +3970,7 @@ This is a new, experimental mode. If you decide to use it, please report any iss Failed to unlock encrypted folder. - + Failed to unlock encrypted folder. Failed to upload encrypted file. @@ -4097,7 +4159,7 @@ This is a new, experimental mode. If you decide to use it, please report any iss Settings - + Settings @@ -4192,7 +4254,7 @@ Server replied with error: %2 Delete - + Delete Delete local changes @@ -4525,7 +4587,7 @@ Server replied with error: %2 All synced! - + All synced! Checking folder changes @@ -4608,7 +4670,7 @@ Server replied with error: %2 Settings - + Settings @@ -4623,7 +4685,7 @@ Server replied with error: %2 Open Browser - + Open Browser Polling @@ -4713,7 +4775,11 @@ Server replied with error: %2 OCC::User - %1 notifications%1 notifications + + %1 notifications + %1 notifications + + %n notification(s) @@ -5129,7 +5195,11 @@ Server replied with error: %2 Virtual file created -updating local virtual files metadataUpdating local virtual files metadata + + updating local virtual files metadata + Updating local virtual files metadata + + QObject @@ -5495,7 +5565,14 @@ Server replied with error: %2 -TrayFoldersMenuButtonFilesFiles + + TrayFoldersMenuButton + + Files + Files + + + TrayWindowAccountMenu Account switcher and settings menu @@ -5535,7 +5612,7 @@ Server replied with error: %2 Settings - + Settings @@ -5569,7 +5646,7 @@ Server replied with error: %2 Open Nextcloud in browser - + Open HiDrive Next in browser Open local or group folders @@ -5577,7 +5654,7 @@ Server replied with error: %2 Website - + Website diff --git a/translations/client_en_GB.ts b/translations/client_en_GB.ts index 5687738864d4a..652357e8a56fb 100644 --- a/translations/client_en_GB.ts +++ b/translations/client_en_GB.ts @@ -1,6 +1,49 @@ -AgreeAgreeBackBackNecessary dataNecessary dataRequired to ensure that the software can be used as expectedRequired to ensure that the software can be used as expectedSave SettingsSave SettingsSend anonymous useSend anonymous useSettingsSettingsThis application uses tracking technologies. By clicking on Agree, you accept the processing of your anonymized data. You can adjust your choices at any time via the settings. <br/> <br/>Information on data processing and more can be found in our <a href='https://wl.hidrive.com/easy/0005'>privacy policy</a>.This application uses tracking technologies. By clicking on Agree, you accept the processing of your anonymized data. You can adjust your choices at any time via the settings. <br/> <br/>Information on data processing and more can be found in our <a href='https://wl.hidrive.com/easy/0005'>privacy policy</a>.This helps us to optimize the software and to better identify system crashes and unexpected errors.This helps us to optimize the software and to better identify system crashes and unexpected errors.We collect anonymized data to optimize our app. We use software solutions from various partners for this purpose. We want to give you full transparency and freedom of choice regarding the collection and processing of your anonymized usage. You can change your settings at any time under the menu item Data Protection.We collect anonymized data to optimize our app. We use software solutions from various partners for this purpose. We want to give you full transparency and freedom of choice regarding the collection and processing of your anonymized usage. You can change your settings at any time under the menu item Data Protection. + + + + Agree + Agree + + + Back + Back + + + Necessary data + Necessary data + + + Required to ensure that the software can be used as expected + Required to ensure that the software can be used as expected + + + Save Settings + Save Settings + + + Send anonymous use + Send anonymous use + + + Settings + Settings + + + This application uses tracking technologies. By clicking on Agree, you accept the processing of your anonymized data. You can adjust your choices at any time via the settings. <br/> <br/>Information on data processing and more can be found in our <a href='https://wl.hidrive.com/easy/0005'>privacy policy</a>. + This application uses tracking technologies. By clicking on Agree, you accept the processing of your anonymized data. You can adjust your choices at any time via the settings. <br/> <br/>Information on data processing and more can be found in our <a href='https://wl.hidrive.com/easy/0005'>privacy policy</a>. + + + This helps us to optimize the software and to better identify system crashes and unexpected errors. + This helps us to optimize the software and to better identify system crashes and unexpected errors. + + + We collect anonymized data to optimize our app. We use software solutions from various partners for this purpose. We want to give you full transparency and freedom of choice regarding the collection and processing of your anonymized usage. You can change your settings at any time under the menu item Data Protection. + We collect anonymized data to optimize our app. We use software solutions from various partners for this purpose. We want to give you full transparency and freedom of choice regarding the collection and processing of your anonymized usage. You can change your settings at any time under the menu item Data Protection. + + + ActivityItem In %1 @@ -37,7 +80,14 @@ Scroll to top -BasicComboBoxClear status message menuDelete status message menu + + BasicComboBox + + Clear status message menu + Delete status message menu + + + CallNotificationDialog Answer Talk call notification @@ -285,7 +335,11 @@ General settings General settings - Signal file provider domainSignal file provider domain + + Signal file provider domain + Signal file provider domain + + Virtual files settings Virtual files settings @@ -300,7 +354,11 @@ Evict local copies … Evict local copies … - Evict local copies...Evict local copies... + + Evict local copies... + Evict local copies... + + Local storage use Local storage use @@ -383,7 +441,7 @@ macOS may ignore or delay this request. Add Folder Sync - + Add Folder Sync Select a folder on your hard drive that should be permanetly connected to your %1. All files and subfolders are automatically uploaded and synchronized @@ -398,7 +456,7 @@ macOS may ignore or delay this request. FolderWizardTargetPage Add Folder Sync - + Add Folder Sync Both folders are permanently linked and the respective contents are automatically synchronized and updated. @@ -1413,7 +1471,7 @@ Wait for the new sync, then encrypt it. OCC::DataProtectionPage Agree - + Agree Form @@ -1425,14 +1483,14 @@ Wait for the new sync, then encrypt it. This application uses tracking technologies. By clicking on Agree, you accept the processing of your anonymized data. You can adjust your choices at any time via the settings. <br/> <br/>Information on data processing and more can be found in our <a href='https://wl.hidrive.com/easy/0005'>privacy policy</a>. - + This application uses tracking technologies. By clicking on Agree, you accept the processing of your anonymized data. You can adjust your choices at any time via the settings. <br/> <br/>Information on data processing and more can be found in our <a href='https://wl.hidrive.com/easy/0005'>privacy policy</a>. OCC::DataProtectionSettingsPage Back - + Back Form @@ -1440,27 +1498,27 @@ Wait for the new sync, then encrypt it. Necessary data - + Necessary data Required to ensure that the software can be used as expected - + Required to ensure that the software can be used as expected Save Settings - + Save Settings Send anonymous use - + Send anonymous use This helps us to optimize the software and to better identify system crashes and unexpected errors. - + This helps us to optimize the software and to better identify system crashes and unexpected errors. We collect anonymized data to optimize our app. We use software solutions from various partners for this purpose. We want to give you full transparency and freedom of choice regarding the collection and processing of your anonymized usage. You can change your settings at any time under the menu item Data Protection. - + We collect anonymized data to optimize our app. We use software solutions from various partners for this purpose. We want to give you full transparency and freedom of choice regarding the collection and processing of your anonymized usage. You can change your settings at any time under the menu item Data Protection. @@ -2129,7 +2187,7 @@ For advanced users: this issue might be related to multiple sync database files OCC::FolderStatusDelegate Add Folder Sync - + Add Folder Sync File @@ -2298,7 +2356,7 @@ For advanced users: this issue might be related to multiple sync database files OCC::FolderWizardLocalPath Add Folder Sync - + Add Folder Sync Choose @@ -2314,7 +2372,7 @@ For advanced users: this issue might be related to multiple sync database files Select a folder on your hard drive that should be permanetly connected to your %1. All files and subfolders are automatically uploaded and synchronized - + Select a folder on your hard drive that should be permanetly connected to your %1. All files and subfolders are automatically uploaded and synchronized Select the source folder @@ -2322,14 +2380,14 @@ For advanced users: this issue might be related to multiple sync database files Step 1 of 3: Select local folder - + Step 1 of 3: Select local folder OCC::FolderWizardRemotePath Add Folder Sync - + Add Folder Sync Authentication failed accessing %1 @@ -2337,7 +2395,7 @@ For advanced users: this issue might be related to multiple sync database files Both folders are permanently linked and the respective contents are automatically synchronized and updated. - + Both folders are permanently linked and the respective contents are automatically synchronized and updated. Choose this to sync the entire account @@ -2373,7 +2431,7 @@ For advanced users: this issue might be related to multiple sync database files Please now select or create a target folder in your %1 where the content should be uploaded and synchronized. - + Please now select or create a target folder in your %1 where the content should be uploaded and synchronized. Refresh @@ -2381,7 +2439,7 @@ For advanced users: this issue might be related to multiple sync database files Step 2 of 3: Directory in your %1 - + Step 2 of 3: Directory in your %1 @@ -2392,11 +2450,11 @@ For advanced users: this issue might be related to multiple sync database files Add Folder Sync - + Add Folder Sync Step 3 of 3: Selektive Synchronisation - + Step 3 of 3: Selective Synchronisation Use virtual files instead of downloading content immediately %1 @@ -2413,7 +2471,11 @@ For advanced users: this issue might be related to multiple sync database files OCC::GeneralSettings - &Analysis data collection for needs-based design&Analysis data collection for needs-based design + + &Analysis data collection for needs-based design + &Analysis data collection for needs-based design + + &Automatically check for updates &Automatically check for updates @@ -2528,7 +2590,7 @@ Downgrading versions is not possible immediately: changing from stable to enterp Necessary data - + Necessary data Notify when synchronised folders grow larger than specified limit @@ -2544,7 +2606,7 @@ Downgrading versions is not possible immediately: changing from stable to enterp Required to ensure that the software can be used as expected - + Required to ensure that the software can be used as expected S&how crash reporter @@ -2552,7 +2614,7 @@ Downgrading versions is not possible immediately: changing from stable to enterp Send anonymous use - + Send anonymous use Server notifications that require attention. @@ -2585,7 +2647,7 @@ Downgrading versions is not possible immediately: changing from stable to enterp This helps us to optimize the software and to better identify system crashes and unexpected errors. - + This helps us to optimize the software and to better identify system crashes and unexpected errors. Update channel @@ -4753,7 +4815,11 @@ Server replied with error: %2 OCC::User - %1 notifications%1 notifications + + %1 notifications + %1 notifications + + %n notification(s) %n notification(s) @@ -5169,7 +5235,11 @@ Server replied with error: %2 Virtual file created Virtual file created -updating local virtual files metadataUpdating local virtual files metadata + + updating local virtual files metadata + Updating local virtual files metadata + + QObject @@ -5535,7 +5605,14 @@ Server replied with error: %2 Waiting to start syncing -TrayFoldersMenuButtonFilesFiles + + TrayFoldersMenuButton + + Files + Files + + + TrayWindowAccountMenu Account switcher and settings menu @@ -5609,7 +5686,7 @@ Server replied with error: %2 Open Nextcloud in browser - + Open HiDrive Next in browser Open local or group folders @@ -5617,7 +5694,7 @@ Server replied with error: %2 Website - + Website diff --git a/translations/client_es.ts b/translations/client_es.ts index 6803b98a6e077..d3872dc6db0d0 100644 --- a/translations/client_es.ts +++ b/translations/client_es.ts @@ -1,7 +1,50 @@ -AgreeAceptarBackVolverNecessary dataDatos necesariosRequired to ensure that the software can be used as expectedNecesario para garantizar que el software puede utilizarse según lo previstoSave SettingsGuardar ajustesSend anonymous useEnviar uso anónimoSettingsAjustesThis application uses tracking technologies. By clicking on Agree, you accept the processing of your anonymized data. You can adjust your choices at any time via the settings. <br/> <br/>Information on data processing and more can be found in our <a href='https://wl.hidrive.com/easy/0005'>privacy policy</a>.Esta aplicación utiliza tecnologías de seguimiento. Al hacer clic en Aceptar, usted acepta el tratamiento de sus datos anónimos. Puede ajustar sus opciones en cualquier momento a través de la configuración. <br/> <br/>Puede encontrar información sobre el procesamiento de datos y más en nuestra <a href='https://wl.hidrive.com/easy/0015'>política de privacidad</a>.This helps us to optimize the software and to better identify system crashes and unexpected errors.Esto nos ayuda a optimizar el software y a identificar mejor las caídas del sistema y los errores inesperados.We collect anonymized data to optimize our app. We use software solutions from various partners for this purpose. We want to give you full transparency and freedom of choice regarding the collection and processing of your anonymized usage. You can change your settings at any time under the menu item Data Protection.Recopilamos datos de carácter anónimo para la optimización de nuestra aplicación. -Para ello, utilizamos soluciones de software de distintos socios. Deseamos transmitirte total transparencia y libertad de decisión acerca de la recopilación y el tratamiento de tu uso anónimo. Puedes modificar tu configuración en la opción del menú «Protección de datos» en cualquier momento. + + + + Agree + Aceptar + + + Back + Volver + + + Necessary data + Datos necesarios + + + Required to ensure that the software can be used as expected + Necesario para garantizar que el software puede utilizarse según lo previsto + + + Save Settings + Guardar ajustes + + + Send anonymous use + Enviar uso anónimo + + + Settings + Ajustes + + + This application uses tracking technologies. By clicking on Agree, you accept the processing of your anonymized data. You can adjust your choices at any time via the settings. <br/> <br/>Information on data processing and more can be found in our <a href='https://wl.hidrive.com/easy/0005'>privacy policy</a>. + Esta aplicación utiliza tecnologías de seguimiento. Al hacer clic en Aceptar, usted acepta el tratamiento de sus datos anónimos. Puede ajustar sus opciones en cualquier momento a través de la configuración. <br/> <br/>Puede encontrar información sobre el procesamiento de datos y más en nuestra <a href='https://wl.hidrive.com/easy/0015'>política de privacidad</a>. + + + This helps us to optimize the software and to better identify system crashes and unexpected errors. + Esto nos ayuda a optimizar el software y a identificar mejor las caídas del sistema y los errores inesperados. + + + We collect anonymized data to optimize our app. We use software solutions from various partners for this purpose. We want to give you full transparency and freedom of choice regarding the collection and processing of your anonymized usage. You can change your settings at any time under the menu item Data Protection. + Recopilamos datos de carácter anónimo para la optimización de nuestra aplicación. +Para ello, utilizamos soluciones de software de distintos socios. Deseamos transmitirte total transparencia y libertad de decisión acerca de la recopilación y el tratamiento de tu uso anónimo. Puedes modificar tu configuración en la opción del menú «Protección de datos» en cualquier momento. + + + ActivityItem In %1 @@ -38,7 +81,14 @@ Para ello, utilizamos soluciones de software de distintos socios. Deseamos trans Desplazarse hasta la parte superior -BasicComboBoxClear status message menuBorrar el menú de mensajes de estado + + BasicComboBox + + Clear status message menu + Borrar el menú de mensajes de estado + + + CallNotificationDialog Answer Talk call notification @@ -286,7 +336,11 @@ Para ello, utilizamos soluciones de software de distintos socios. Deseamos trans General settings Configuración general - Signal file provider domainDominio del proveedor de archivos de firmas + + Signal file provider domain + Dominio del proveedor de archivos de firmas + + Virtual files settings Configuración de archivos virtuales @@ -301,7 +355,11 @@ Para ello, utilizamos soluciones de software de distintos socios. Deseamos trans Evict local copies … Quitar copias locales … - Evict local copies...Desalojar las copias locales... + + Evict local copies... + Desalojar las copias locales... + + Local storage use Uso de almacenamiento local @@ -384,7 +442,7 @@ macOS podría ignorar o demorar esta solicitud. Add Folder Sync - + Añadir sincronización de carpetas Select a folder on your hard drive that should be permanetly connected to your %1. All files and subfolders are automatically uploaded and synchronized @@ -399,7 +457,7 @@ macOS podría ignorar o demorar esta solicitud. FolderWizardTargetPage Add Folder Sync - + Añadir sincronización de carpetas Both folders are permanently linked and the respective contents are automatically synchronized and updated. @@ -1414,7 +1472,7 @@ Espere a una nueva sincronización, luego cifrala. OCC::DataProtectionPage Agree - + Aceptar Form @@ -1426,14 +1484,14 @@ Espere a una nueva sincronización, luego cifrala. This application uses tracking technologies. By clicking on Agree, you accept the processing of your anonymized data. You can adjust your choices at any time via the settings. <br/> <br/>Information on data processing and more can be found in our <a href='https://wl.hidrive.com/easy/0005'>privacy policy</a>. - + Esta aplicación utiliza tecnologías de seguimiento. Al hacer clic en Aceptar, usted acepta el tratamiento de sus datos anónimos. Puede ajustar sus opciones en cualquier momento a través de la configuración. <br/> <br/>Puede encontrar información sobre el procesamiento de datos y más en nuestra <a href='https://wl.hidrive.com/easy/0015'>política de privacidad</a>. OCC::DataProtectionSettingsPage Back - + Volver Form @@ -1441,27 +1499,28 @@ Espere a una nueva sincronización, luego cifrala. Necessary data - + Datos necesarios Required to ensure that the software can be used as expected - + Necesario para garantizar que el software puede utilizarse según lo previsto Save Settings - + Guardar ajustes Send anonymous use - + Enviar uso anónimo This helps us to optimize the software and to better identify system crashes and unexpected errors. - + Esto nos ayuda a optimizar el software y a identificar mejor las caídas del sistema y los errores inesperados. We collect anonymized data to optimize our app. We use software solutions from various partners for this purpose. We want to give you full transparency and freedom of choice regarding the collection and processing of your anonymized usage. You can change your settings at any time under the menu item Data Protection. - + Recopilamos datos de carácter anónimo para la optimización de nuestra aplicación. +Para ello, utilizamos soluciones de software de distintos socios. Deseamos transmitirte total transparencia y libertad de decisión acerca de la recopilación y el tratamiento de tu uso anónimo. Puedes modificar tu configuración en la opción del menú «Protección de datos» en cualquier momento. @@ -2130,7 +2189,7 @@ Para usuarios avanzados: Este problema puede estar relacionado a múltiples arch OCC::FolderStatusDelegate Add Folder Sync - + Añadir sincronización de carpetas File @@ -2299,7 +2358,7 @@ Para usuarios avanzados: Este problema puede estar relacionado a múltiples arch OCC::FolderWizardLocalPath Add Folder Sync - + Añadir sincronización de carpetas Choose @@ -2315,7 +2374,7 @@ Para usuarios avanzados: Este problema puede estar relacionado a múltiples arch Select a folder on your hard drive that should be permanetly connected to your %1. All files and subfolders are automatically uploaded and synchronized - + Selecciona una carpeta de tu disco duro que deba estar permanentemente conectada a tu %1. Todos los archivos y subcarpetas se cargan y sincronizan automáticamente. Select the source folder @@ -2323,14 +2382,14 @@ Para usuarios avanzados: Este problema puede estar relacionado a múltiples arch Step 1 of 3: Select local folder - + Paso 1 de 3: Seleccionar carpeta local OCC::FolderWizardRemotePath Add Folder Sync - + Añadir sincronización de carpetas Authentication failed accessing %1 @@ -2338,7 +2397,7 @@ Para usuarios avanzados: Este problema puede estar relacionado a múltiples arch Both folders are permanently linked and the respective contents are automatically synchronized and updated. - + Ambas carpetas están permanentemente vinculadas y sus respectivos contenidos se sincronizan y actualizan automáticamente. Choose this to sync the entire account @@ -2374,7 +2433,7 @@ Para usuarios avanzados: Este problema puede estar relacionado a múltiples arch Please now select or create a target folder in your %1 where the content should be uploaded and synchronized. - + Por favor, ahora seleccione o cree una carpeta de destino en su %1 donde el contenido debe ser cargado y sincronizado. Refresh @@ -2382,7 +2441,7 @@ Para usuarios avanzados: Este problema puede estar relacionado a múltiples arch Step 2 of 3: Directory in your %1 - + Paso 2 de 3: Directorio en su %1 @@ -2393,11 +2452,11 @@ Para usuarios avanzados: Este problema puede estar relacionado a múltiples arch Add Folder Sync - + Añadir sincronización de carpetas Step 3 of 3: Selektive Synchronisation - + Paso 3 de 3: Sincronización selectiva Use virtual files instead of downloading content immediately %1 @@ -2414,7 +2473,11 @@ Para usuarios avanzados: Este problema puede estar relacionado a múltiples arch OCC::GeneralSettings - &Analysis data collection for needs-based design&Recogida de datos de análisis para un diseño basado en las necesidades + + &Analysis data collection for needs-based design + &Recogida de datos de análisis para un diseño basado en las necesidades + + &Automatically check for updates Comprobar &actualizaciones automáticamente @@ -2529,7 +2592,7 @@ Cambiar a una versión anterior no es inmediatamente posible: cambiar de estable Necessary data - + Datos necesarios Notify when synchronised folders grow larger than specified limit @@ -2545,7 +2608,7 @@ Cambiar a una versión anterior no es inmediatamente posible: cambiar de estable Required to ensure that the software can be used as expected - + Necesario para garantizar que el software puede utilizarse según lo previsto S&how crash reporter @@ -2553,7 +2616,7 @@ Cambiar a una versión anterior no es inmediatamente posible: cambiar de estable Send anonymous use - + Enviar uso anónimo Server notifications that require attention. @@ -2586,7 +2649,7 @@ Cambiar a una versión anterior no es inmediatamente posible: cambiar de estable This helps us to optimize the software and to better identify system crashes and unexpected errors. - + Esto nos ayuda a optimizar el software y a identificar mejor las caídas del sistema y los errores inesperados. Update channel @@ -4754,7 +4817,11 @@ El servidor respondió con el error: %2 OCC::User - %1 notifications%1 notificaciones + + %1 notifications + %1 notificaciones + + %n notification(s) %n notificación @@ -5170,7 +5237,11 @@ El servidor respondió con el error: %2 Virtual file created Archivo virtual creado -updating local virtual files metadataActualización de los metadatos de los archivos virtuales locales + + updating local virtual files metadata + Actualización de los metadatos de los archivos virtuales locales + + QObject @@ -5536,7 +5607,14 @@ El servidor respondió con el error: %2 Esperando para empezar la sincronización -TrayFoldersMenuButtonFilesArchivos + + TrayFoldersMenuButton + + Files + Archivos + + + TrayWindowAccountMenu Account switcher and settings menu @@ -5610,7 +5688,7 @@ El servidor respondió con el error: %2 Open Nextcloud in browser - + Abrir HiDrive Next en el navegador Open local or group folders @@ -5618,7 +5696,7 @@ El servidor respondió con el error: %2 Website - + Sitio web diff --git a/translations/client_fr.ts b/translations/client_fr.ts index f6e2b9e49063d..3d55530845f11 100644 --- a/translations/client_fr.ts +++ b/translations/client_fr.ts @@ -1,6 +1,49 @@ -AgreeAccepterBackRetourNecessary dataDonnées indispensablesRequired to ensure that the software can be used as expectedNécessaire pour s'assurer que le logiciel peut être utilisé comme prévuSave SettingsSauvegarder les paramètresSend anonymous useEnvoyer utilisation anonymeSettingsParamètresThis application uses tracking technologies. By clicking on Agree, you accept the processing of your anonymized data. You can adjust your choices at any time via the settings. <br/> <br/>Information on data processing and more can be found in our <a href='https://wl.hidrive.com/easy/0005'>privacy policy</a>.Cette application utilise des technologies de suivi. En cliquant sur Accepter, vous acceptez le traitement de vos données anonymes. Vous pouvez modifier vos choix à tout moment via les paramètres. <br/> <br/>Des informations sur le traitement des données et autres peuvent être trouvées dans notre <a href='https://wl.hidrive.com/easy/0025'>politique de confidentialité</a>.This helps us to optimize the software and to better identify system crashes and unexpected errors.Cela nous aide à optimiser le logiciel et à mieux identifier les pannes de système et les erreurs inattendues.We collect anonymized data to optimize our app. We use software solutions from various partners for this purpose. We want to give you full transparency and freedom of choice regarding the collection and processing of your anonymized usage. You can change your settings at any time under the menu item Data Protection.Nous collectons des données anonymes pour optimiser notre application. Nous utilisons à cet effet des solutions logicielles de différents partenaires. Nous souhaitons vous offrir une transparence totale et une liberté de choix en ce qui concerne la collecte et le traitement de votre utilisation anonyme. Vous pouvez modifier vos paramètres à tout moment dans le menu Protection des données. + + + + Agree + Accepter + + + Back + Retour + + + Necessary data + Données indispensables + + + Required to ensure that the software can be used as expected + Nécessaire pour s'assurer que le logiciel peut être utilisé comme prévu + + + Save Settings + Sauvegarder les paramètres + + + Send anonymous use + Envoyer utilisation anonyme + + + Settings + Paramètres + + + This application uses tracking technologies. By clicking on Agree, you accept the processing of your anonymized data. You can adjust your choices at any time via the settings. <br/> <br/>Information on data processing and more can be found in our <a href='https://wl.hidrive.com/easy/0005'>privacy policy</a>. + Cette application utilise des technologies de suivi. En cliquant sur Accepter, vous acceptez le traitement de vos données anonymes. Vous pouvez modifier vos choix à tout moment via les paramètres. <br/> <br/>Des informations sur le traitement des données et autres peuvent être trouvées dans notre <a href='https://wl.hidrive.com/easy/0025'>politique de confidentialité</a>. + + + This helps us to optimize the software and to better identify system crashes and unexpected errors. + Cela nous aide à optimiser le logiciel et à mieux identifier les pannes de système et les erreurs inattendues. + + + We collect anonymized data to optimize our app. We use software solutions from various partners for this purpose. We want to give you full transparency and freedom of choice regarding the collection and processing of your anonymized usage. You can change your settings at any time under the menu item Data Protection. + Nous collectons des données anonymes pour optimiser notre application. Nous utilisons à cet effet des solutions logicielles de différents partenaires. Nous souhaitons vous offrir une transparence totale et une liberté de choix en ce qui concerne la collecte et le traitement de votre utilisation anonyme. Vous pouvez modifier vos paramètres à tout moment dans le menu Protection des données. + + + ActivityItem In %1 @@ -37,7 +80,14 @@ Défiler vers le haut -BasicComboBoxClear status message menuMenu d'effacement du message de statut + + BasicComboBox + + Clear status message menu + Menu d'effacement du message de statut + + + CallNotificationDialog Answer Talk call notification @@ -285,7 +335,11 @@ General settings Paramètres généraux - Signal file provider domainIndiquer le domaine du fournisseur de fichiers + + Signal file provider domain + Indiquer le domaine du fournisseur de fichiers + + Virtual files settings Paramètres des fichiers virtuels @@ -300,7 +354,11 @@ Evict local copies … Évincer les copies locales… - Evict local copies...Supprimer les copies locales + + Evict local copies... + Supprimer les copies locales + + Local storage use Utilisation du stockage local @@ -383,7 +441,7 @@ macOS may ignore or delay this request. Add Folder Sync - + Ajouter une synchronisation de dossiers Select a folder on your hard drive that should be permanetly connected to your %1. All files and subfolders are automatically uploaded and synchronized @@ -398,7 +456,7 @@ macOS may ignore or delay this request. FolderWizardTargetPage Add Folder Sync - + Ajouter une synchronisation de dossiers Both folders are permanently linked and the respective contents are automatically synchronized and updated. @@ -1411,7 +1469,7 @@ Wait for the new sync, then encrypt it. OCC::DataProtectionPage Agree - + Accepter Form @@ -1423,14 +1481,14 @@ Wait for the new sync, then encrypt it. This application uses tracking technologies. By clicking on Agree, you accept the processing of your anonymized data. You can adjust your choices at any time via the settings. <br/> <br/>Information on data processing and more can be found in our <a href='https://wl.hidrive.com/easy/0005'>privacy policy</a>. - + Cette application utilise des technologies de suivi. En cliquant sur Accepter, vous acceptez le traitement de vos données anonymes. Vous pouvez modifier vos choix à tout moment via les paramètres. <br/> <br/>Des informations sur le traitement des données et autres peuvent être trouvées dans notre <a href='https://wl.hidrive.com/easy/0025'>politique de confidentialité</a>. OCC::DataProtectionSettingsPage Back - + Retour Form @@ -1438,27 +1496,27 @@ Wait for the new sync, then encrypt it. Necessary data - + Données indispensables Required to ensure that the software can be used as expected - + Nécessaire pour s'assurer que le logiciel peut être utilisé comme prévu Save Settings - + Sauvegarder les paramètres Send anonymous use - + Envoyer utilisation anonyme This helps us to optimize the software and to better identify system crashes and unexpected errors. - + Cela nous aide à optimiser le logiciel et à mieux identifier les pannes de système et les erreurs inattendues. We collect anonymized data to optimize our app. We use software solutions from various partners for this purpose. We want to give you full transparency and freedom of choice regarding the collection and processing of your anonymized usage. You can change your settings at any time under the menu item Data Protection. - + Nous collectons des données anonymes pour optimiser notre application. Nous utilisons à cet effet des solutions logicielles de différents partenaires. Nous souhaitons vous offrir une transparence totale et une liberté de choix en ce qui concerne la collecte et le traitement de votre utilisation anonyme. Vous pouvez modifier vos paramètres à tout moment dans le menu Protection des données. @@ -2127,7 +2185,7 @@ Pour les utilisateurs avancés: ce problème peut aussi venir de plusieurs fichi OCC::FolderStatusDelegate Add Folder Sync - + Ajouter une synchronisation de dossiers File @@ -2296,7 +2354,7 @@ Pour les utilisateurs avancés: ce problème peut aussi venir de plusieurs fichi OCC::FolderWizardLocalPath Add Folder Sync - + Ajouter une synchronisation de dossiers Choose @@ -2312,7 +2370,7 @@ Pour les utilisateurs avancés: ce problème peut aussi venir de plusieurs fichi Select a folder on your hard drive that should be permanetly connected to your %1. All files and subfolders are automatically uploaded and synchronized - + Sélectionnez sur votre disque dur un dossier qui doit être en permanence rattaché à votre %1. Tous les fichiers et sous-dossiers sont automatiquement importés et synchronisés. Select the source folder @@ -2320,14 +2378,14 @@ Pour les utilisateurs avancés: ce problème peut aussi venir de plusieurs fichi Step 1 of 3: Select local folder - + Étape 1 sur 3 : sélectionner un dossier local OCC::FolderWizardRemotePath Add Folder Sync - + Ajouter une synchronisation de dossiers Authentication failed accessing %1 @@ -2335,7 +2393,7 @@ Pour les utilisateurs avancés: ce problème peut aussi venir de plusieurs fichi Both folders are permanently linked and the respective contents are automatically synchronized and updated. - + Les deux dossiers sont en permanence rattachés et leur contenu respectif est automatiquement synchronisé et importé. Choose this to sync the entire account @@ -2371,7 +2429,7 @@ Pour les utilisateurs avancés: ce problème peut aussi venir de plusieurs fichi Please now select or create a target folder in your %1 where the content should be uploaded and synchronized. - + À présent, sélectionnez ou créez dans votre %1 un dossier cible dans lequel le contenu doit être importé et synchronisé. Refresh @@ -2379,7 +2437,7 @@ Pour les utilisateurs avancés: ce problème peut aussi venir de plusieurs fichi Step 2 of 3: Directory in your %1 - + Étape 2 sur 3 : répertoire dans votre %1 @@ -2390,11 +2448,11 @@ Pour les utilisateurs avancés: ce problème peut aussi venir de plusieurs fichi Add Folder Sync - + Ajouter une synchronisation de dossiers Step 3 of 3: Selektive Synchronisation - + Étape 3 sur 3 : synchronisation sélective Use virtual files instead of downloading content immediately %1 @@ -2411,7 +2469,11 @@ Pour les utilisateurs avancés: ce problème peut aussi venir de plusieurs fichi OCC::GeneralSettings - &Analysis data collection for needs-based design&Collecte des données d’analyse pour une conception basée sur les besoins + + &Analysis data collection for needs-based design + &Collecte des données d’analyse pour une conception basée sur les besoins + + &Automatically check for updates &Vérifier automatiquement les mises à jour @@ -2526,7 +2588,7 @@ La rétrogradation des versions n'est pas possible immédiatement: passer d Necessary data - + Données indispensables Notify when synchronised folders grow larger than specified limit @@ -2542,7 +2604,7 @@ La rétrogradation des versions n'est pas possible immédiatement: passer d Required to ensure that the software can be used as expected - + Nécessaire pour s'assurer que le logiciel peut être utilisé comme prévu S&how crash reporter @@ -2550,7 +2612,7 @@ La rétrogradation des versions n'est pas possible immédiatement: passer d Send anonymous use - + Envoyer utilisation anonyme Server notifications that require attention. @@ -2583,7 +2645,7 @@ La rétrogradation des versions n'est pas possible immédiatement: passer d This helps us to optimize the software and to better identify system crashes and unexpected errors. - + Cela nous aide à optimiser le logiciel et à mieux identifier les pannes de système et les erreurs inattendues. Update channel @@ -4751,7 +4813,11 @@ Le serveur a répondu avec l'erreur : %2 OCC::User - %1 notifications%1 notifications + + %1 notifications + %1 notifications + + %n notification(s) %n notification @@ -5167,7 +5233,11 @@ Le serveur a répondu avec l'erreur : %2 Virtual file created Fichier virtuel créé -updating local virtual files metadataMise à jour des métadonnées des fichiers virtuels locaux + + updating local virtual files metadata + Mise à jour des métadonnées des fichiers virtuels locaux + + QObject @@ -5533,7 +5603,14 @@ Le serveur a répondu avec l'erreur : %2 En attente du démarrage de la synchronisation -TrayFoldersMenuButtonFilesFichiers + + TrayFoldersMenuButton + + Files + Fichiers + + + TrayWindowAccountMenu Account switcher and settings menu @@ -5553,11 +5630,11 @@ Le serveur a répondu avec l'erreur : %2 Current account status is do not disturb - + Le statuts de compte actuel est ne pas déranger Current account status is online - + Le statuts de compte actuel est en ligne Exit @@ -5607,7 +5684,7 @@ Le serveur a répondu avec l'erreur : %2 Open Nextcloud in browser - + Ouvrir HiDrive Next dans le navigateur Open local or group folders @@ -5615,7 +5692,7 @@ Le serveur a répondu avec l'erreur : %2 Website - + Site Web diff --git a/translations/client_nl.ts b/translations/client_nl.ts index 15b99c79fc744..9e49332bcd315 100644 --- a/translations/client_nl.ts +++ b/translations/client_nl.ts @@ -1,6 +1,49 @@ -AgreeAkkoordBackTerugNecessary dataNoodzakelijke gegevensRequired to ensure that the software can be used as expectedVereist om ervoor te zorgen dat de software kan worden gebruikt zoals verwachtSave SettingsInstellingen opslaanSend anonymous useAnoniem gebruik verzendenSettingsInstellingenThis application uses tracking technologies. By clicking on Agree, you accept the processing of your anonymized data. You can adjust your choices at any time via the settings. <br/> <br/>Information on data processing and more can be found in our <a href='https://wl.hidrive.com/easy/0005'>privacy policy</a>.Deze applicatie maakt gebruik van traceertechnologieën. Door op Akkoord te klikken, accepteert u de verwerking van uw geanonimiseerde gegevens. U kunt uw keuzes op elk gewenst moment aanpassen via de instellingen. <br/> <br/>Informatie over gegevensverwerking en meer kunt u vinden in ons <a href='https://wl.hidrive.com/easy/0045'>privacybeleid</a>.This helps us to optimize the software and to better identify system crashes and unexpected errors.Dit helpt ons om de software te optimaliseren en om systeemcrashes en onverwachte fouten beter te identificeren.We collect anonymized data to optimize our app. We use software solutions from various partners for this purpose. We want to give you full transparency and freedom of choice regarding the collection and processing of your anonymized usage. You can change your settings at any time under the menu item Data Protection.We verzamelen geanonimiseerde gegevens om onze app te optimaliseren. Hiervoor gebruiken we softwareoplossingen van verschillende partners. We willen je volledige transparantie en keuzevrijheid geven met betrekking tot het verzamelen en verwerken van je geanonimiseerde gebruik. Je kunt je instellingen op elk gewenst moment wijzigen onder het menu-item Gegevensbescherming. + + + + Agree + Akkoord + + + Back + Terug + + + Necessary data + Noodzakelijke gegevens + + + Required to ensure that the software can be used as expected + Vereist om ervoor te zorgen dat de software kan worden gebruikt zoals verwacht + + + Save Settings + Instellingen opslaan + + + Send anonymous use + Anoniem gebruik verzenden + + + Settings + Instellingen + + + This application uses tracking technologies. By clicking on Agree, you accept the processing of your anonymized data. You can adjust your choices at any time via the settings. <br/> <br/>Information on data processing and more can be found in our <a href='https://wl.hidrive.com/easy/0005'>privacy policy</a>. + Deze applicatie maakt gebruik van traceertechnologieën. Door op Akkoord te klikken, accepteert u de verwerking van uw geanonimiseerde gegevens. U kunt uw keuzes op elk gewenst moment aanpassen via de instellingen. <br/> <br/>Informatie over gegevensverwerking en meer kunt u vinden in ons <a href='https://wl.hidrive.com/easy/0045'>privacybeleid</a>. + + + This helps us to optimize the software and to better identify system crashes and unexpected errors. + Dit helpt ons om de software te optimaliseren en om systeemcrashes en onverwachte fouten beter te identificeren. + + + We collect anonymized data to optimize our app. We use software solutions from various partners for this purpose. We want to give you full transparency and freedom of choice regarding the collection and processing of your anonymized usage. You can change your settings at any time under the menu item Data Protection. + We verzamelen geanonimiseerde gegevens om onze app te optimaliseren. Hiervoor gebruiken we softwareoplossingen van verschillende partners. We willen je volledige transparantie en keuzevrijheid geven met betrekking tot het verzamelen en verwerken van je geanonimiseerde gebruik. Je kunt je instellingen op elk gewenst moment wijzigen onder het menu-item Gegevensbescherming. + + + ActivityItem In %1 @@ -37,7 +80,14 @@ Naar boven schuiven -BasicComboBoxClear status message menuStatusbericht wissen + + BasicComboBox + + Clear status message menu + Statusbericht wissen + + + CallNotificationDialog Answer Talk call notification @@ -285,7 +335,11 @@ General settings Algemene instellingen - Signal file provider domainSignal file provider domain + + Signal file provider domain + Signal file provider domain + + Virtual files settings Virtuele bestandsinstellingen @@ -300,7 +354,11 @@ Evict local copies … Lokale kopieën verwijderen … - Evict local copies...Lokale kopieën verwijderen... + + Evict local copies... + Lokale kopieën verwijderen... + + Local storage use Gebruik lokale opslag @@ -383,7 +441,7 @@ macOS kan dit verzoek negeren of uitstellen. Add Folder Sync - + Mapsynchronisatie toevoegen Select a folder on your hard drive that should be permanetly connected to your %1. All files and subfolders are automatically uploaded and synchronized @@ -398,7 +456,7 @@ macOS kan dit verzoek negeren of uitstellen. FolderWizardTargetPage Add Folder Sync - + Mapsynchronisatie toevoegen Both folders are permanently linked and the respective contents are automatically synchronized and updated. @@ -1411,7 +1469,7 @@ Wait for the new sync, then encrypt it. OCC::DataProtectionPage Agree - + Akkoord Form @@ -1423,14 +1481,14 @@ Wait for the new sync, then encrypt it. This application uses tracking technologies. By clicking on Agree, you accept the processing of your anonymized data. You can adjust your choices at any time via the settings. <br/> <br/>Information on data processing and more can be found in our <a href='https://wl.hidrive.com/easy/0005'>privacy policy</a>. - + Deze applicatie maakt gebruik van traceertechnologieën. Door op Akkoord te klikken, accepteert u de verwerking van uw geanonimiseerde gegevens. U kunt uw keuzes op elk gewenst moment aanpassen via de instellingen. <br/> <br/>Informatie over gegevensverwerking en meer kunt u vinden in ons <a href='https://wl.hidrive.com/easy/0045'>privacybeleid</a>. OCC::DataProtectionSettingsPage Back - + Terug Form @@ -1438,27 +1496,27 @@ Wait for the new sync, then encrypt it. Necessary data - + Noodzakelijke gegevens Required to ensure that the software can be used as expected - + Vereist om ervoor te zorgen dat de software kan worden gebruikt zoals verwacht Save Settings - + Instellingen opslaan Send anonymous use - + Anoniem gebruik verzenden This helps us to optimize the software and to better identify system crashes and unexpected errors. - + Dit helpt ons om de software te optimaliseren en om systeemcrashes en onverwachte fouten beter te identificeren. We collect anonymized data to optimize our app. We use software solutions from various partners for this purpose. We want to give you full transparency and freedom of choice regarding the collection and processing of your anonymized usage. You can change your settings at any time under the menu item Data Protection. - + We verzamelen geanonimiseerde gegevens om onze app te optimaliseren. Hiervoor gebruiken we softwareoplossingen van verschillende partners. We willen je volledige transparantie en keuzevrijheid geven met betrekking tot het verzamelen en verwerken van je geanonimiseerde gebruik. Je kunt je instellingen op elk gewenst moment wijzigen onder het menu-item Gegevensbescherming. @@ -2124,7 +2182,7 @@ For advanced users: this issue might be related to multiple sync database files OCC::FolderStatusDelegate Add Folder Sync - + Mapsynchronisatie toevoegen File @@ -2294,7 +2352,7 @@ For advanced users: this issue might be related to multiple sync database files OCC::FolderWizardLocalPath Add Folder Sync - + Mapsynchronisatie toevoegen Choose @@ -2310,7 +2368,7 @@ For advanced users: this issue might be related to multiple sync database files Select a folder on your hard drive that should be permanetly connected to your %1. All files and subfolders are automatically uploaded and synchronized - + Selecteer een map op je harde schijf die permanent verbonden moet zijn met je %1. Alle bestanden en submappen worden automatisch geüpload en gesynchroniseerd. Select the source folder @@ -2318,14 +2376,14 @@ For advanced users: this issue might be related to multiple sync database files Step 1 of 3: Select local folder - + Stap 1 van 3: Selecteer lokale map OCC::FolderWizardRemotePath Add Folder Sync - + Mapsynchronisatie toevoegen Authentication failed accessing %1 @@ -2333,7 +2391,7 @@ For advanced users: this issue might be related to multiple sync database files Both folders are permanently linked and the respective contents are automatically synchronized and updated. - + Beide mappen zijn permanent gekoppeld en de respectieve inhoud wordt automatisch gesynchroniseerd en bijgewerkt. Choose this to sync the entire account @@ -2369,7 +2427,7 @@ For advanced users: this issue might be related to multiple sync database files Please now select or create a target folder in your %1 where the content should be uploaded and synchronized. - + Selecteer of maak nu een doelmap in uw %1 waar de inhoud moet worden geüpload en gesynchroniseerd. Refresh @@ -2377,7 +2435,7 @@ For advanced users: this issue might be related to multiple sync database files Step 2 of 3: Directory in your %1 - + Stap 2 van 3: Directory in uw %1 @@ -2388,11 +2446,11 @@ For advanced users: this issue might be related to multiple sync database files Add Folder Sync - + Mapsynchronisatie toevoegen Step 3 of 3: Selektive Synchronisation - + Stap 3 van 3: Selektieve synchronisatie Use virtual files instead of downloading content immediately %1 @@ -2409,7 +2467,11 @@ For advanced users: this issue might be related to multiple sync database files OCC::GeneralSettings - &Analysis data collection for needs-based design&Analyse van gegevensverzameling voor een op behoeften gebaseerd ontwerp + + &Analysis data collection for needs-based design + &Analyse van gegevensverzameling voor een op behoeften gebaseerd ontwerp + + &Automatically check for updates &Controleer automatisch op updates @@ -2519,7 +2581,7 @@ Downgrading versions is not possible immediately: changing from stable to enterp Necessary data - + Noodzakelijke gegevens Notify when synchronised folders grow larger than specified limit @@ -2535,7 +2597,7 @@ Downgrading versions is not possible immediately: changing from stable to enterp Required to ensure that the software can be used as expected - + Vereist om ervoor te zorgen dat de software kan worden gebruikt zoals verwacht S&how crash reporter @@ -2543,7 +2605,7 @@ Downgrading versions is not possible immediately: changing from stable to enterp Send anonymous use - + Anoniem gebruik verzenden Server notifications that require attention. @@ -2574,7 +2636,7 @@ Downgrading versions is not possible immediately: changing from stable to enterp This helps us to optimize the software and to better identify system crashes and unexpected errors. - + Dit helpt ons om de software te optimaliseren en om systeemcrashes en onverwachte fouten beter te identificeren. Update channel @@ -4652,7 +4714,7 @@ Server antwoordde met fout: %2 Open Browser - + Browser openen Polling @@ -4742,7 +4804,11 @@ Server antwoordde met fout: %2 OCC::User - %1 notifications%1 kennisgevingen + + %1 notifications + %1 kennisgevingen + + %n notification(s) @@ -5158,7 +5224,11 @@ Server antwoordde met fout: %2 Virtual file created Virtueel bestand gecreëerd -updating local virtual files metadataMetagegevens van lokale virtuele bestanden bijwerken + + updating local virtual files metadata + Metagegevens van lokale virtuele bestanden bijwerken + + QObject @@ -5524,7 +5594,14 @@ Server antwoordde met fout: %2 In afwachting van synchronisatie -TrayFoldersMenuButtonFilesBestanden + + TrayFoldersMenuButton + + Files + Bestanden + + + TrayWindowAccountMenu Account switcher and settings menu @@ -5544,11 +5621,11 @@ Server antwoordde met fout: %2 Current account status is do not disturb - + Huidige gebruikersstatus is Niet Storen Current account status is online - + Huidige gebruikersstatus is Online Exit @@ -5598,7 +5675,7 @@ Server antwoordde met fout: %2 Open Nextcloud in browser - + HiDrive Next in browser openen Open local or group folders @@ -5606,7 +5683,7 @@ Server antwoordde met fout: %2 Website - + Website From 981d182f03d4d2eeb87d71fa23ca91f787440412 Mon Sep 17 00:00:00 2001 From: Kevin Beraz Date: Thu, 16 Oct 2025 10:54:12 +0200 Subject: [PATCH 371/371] merge step 5 --- translations/client_de.ts | 2097 +++++++++++++++++++++++++++------ translations/client_en.ts | 2047 +++++++++++++++++++++++++++------ translations/client_en_GB.ts | 2099 +++++++++++++++++++++++++++------ translations/client_es.ts | 2102 ++++++++++++++++++++++++++++------ translations/client_fr.ts | 2099 +++++++++++++++++++++++++++------ translations/client_nl.ts | 2099 +++++++++++++++++++++++++++------ 6 files changed, 10330 insertions(+), 2213 deletions(-) diff --git a/translations/client_de.ts b/translations/client_de.ts index 78c40c0a65118..836f51d82ff5b 100644 --- a/translations/client_de.ts +++ b/translations/client_de.ts @@ -1,55 +1,14 @@ - - - - Agree - Zustimmen - - - Back - Zurück - - - Necessary data - Erforderliche Daten - - - Required to ensure that the software can be used as expected - Erforderlich, um sicherzustellen, dass die Software wie erwartet verwendet werden kann. - - - Save Settings - Einstellungen speichern - - - Send anonymous use - Anonyme Nutzungsdaten senden - - - Settings - Einstellungen - - - This application uses tracking technologies. By clicking on Agree, you accept the processing of your anonymized data. You can adjust your choices at any time via the settings. <br/> <br/>Information on data processing and more can be found in our <a href='https://wl.hidrive.com/easy/0005'>privacy policy</a>. - Diese Anwendung verwendet Tracking-Technologien. Wenn Sie auf Zustimmen klicken, akzeptieren Sie die Verarbeitung Ihrer anonymisierten Daten. Sie können Ihre Auswahl jederzeit über die Einstellungen anpassen. <br/> <br/>Informationen zur Datenverarbeitung und mehr finden Sie in unserer <a href='https://wl.hidrive.com/easy/0045'>Datenschutzrichtlinie</a>. - - - This helps us to optimize the software and to better identify system crashes and unexpected errors. - Dies hilft uns, die Software zu optimieren und Systemabstürze und unerwartete Fehler besser zu erkennen. - - - We collect anonymized data to optimize our app. We use software solutions from various partners for this purpose. We want to give you full transparency and freedom of choice regarding the collection and processing of your anonymized usage. You can change your settings at any time under the menu item Data Protection. - Wir sammeln anonymisierte Daten, um unsere App zu optimieren. Dazu nutzen wir Softwarelösungen von verschiedenen Partnern. Wir möchten Ihnen volle Transparenz und Wahlfreiheit bezüglich der Erhebung und Verarbeitung Ihrer anonymisierten Nutzung geben. Sie können Ihre Einstellungen jederzeit unter dem Menüpunkt Datenschutz ändern. - - ActivityItem + In %1 In %1 + Open %1 locally %1 lokal öffnen @@ -57,10 +16,12 @@ ActivityItemContent + Dismiss Ablehnen + Open file details Dateidetails öffnen @@ -68,40 +29,40 @@ ActivityList + Activity list Aktivitätenliste + No activities yet Noch keine Aktivitäten vorhanden + Scroll to top Nach unten blättern - - BasicComboBox - - Clear status message menu - Statusmeldungs-Menü löschen - - CallNotificationDialog + Answer Talk call notification Benachrichtigung zu Talk-Anruf beantworten + Decline Ablehnen + Decline Talk call notification Benachrichtigung zu Talk-Anruf ablehnen + Talk notification caller avatar Avatar zu Benachrichtigung über Talk-Anrufer @@ -109,66 +70,83 @@ CloudProviderWrapper + %1 (%2, %3) %1 (%2, %3) + Checking for changes in "%1" Nach Änderungen suchen in "%1" + Help Hilfe + Log out Abmelden + + No recently changed files Keine kürzlich geänderten Dateien + Open website Webseite öffnen + Pause synchronization Synchronisierung pausieren + Quit sync client Sync-Client beenden + Recently changed Zuletzt geändert + Settings Einstellungen + Sync paused Synchronisierung pausiert + Syncing Synchronisiere + Syncing %1 Synchronisiere %1 + Syncing %1 (%2 left) Synchronisiere %1 (%2 übrig) + Syncing %1 of %2 Synchronisiere %1 von %2 + Syncing %1 of %2 (%3 left) Synchronisiere %1 von %2 (%3 übrig) @@ -176,10 +154,12 @@ ConflictDelegate + Local version Lokale Version + Server version Serverversion @@ -187,46 +167,59 @@ CurrentAccountHeaderButton + Account switcher and settings menu Konto-Umschalter und Einstellungsmenü + Add account Konto hinzufügen + Add new account Neues Konto hinzufügen + Current account Aktuelles Konto + Current account avatar Avatar des aktuellen Kontos + Current account status is do not disturb Aktueller Kontostatus ist "Nicht stören" + Current account status is online Aktueller Kontostatus ist "Online" + Exit Beenden + + Pause sync for all Synchronisierung für alle pausieren + + Resume sync for all Synchronisierung für alle fortsetzen + Settings Einstellungen @@ -234,6 +227,7 @@ EditFileLocallyLoadingDialog + Opening file for local editing Datei wird für die lokale Bearbeitung geöffnet @@ -241,6 +235,7 @@ EmojiPicker + No recent emojis Keine aktuellen Emojis @@ -248,6 +243,7 @@ EncryptionTokenDiscoveryDialog + Discovering the certificates stored on your USB token Erkennen der auf Ihrem USB-Token gespeicherten Zertifikate @@ -255,18 +251,22 @@ EncryptionTokenSelectionWindow + Available Keys for end-to-end Encryption: Verfügbare Schlüssel für Ende-zu-Ende-Verschlüsselung: + Cancel Abbrechen + Choose Auswählen + Token Encryption Key Chooser Auswahl des Token-Schlüssels @@ -274,6 +274,7 @@ ErrorBox + Error Fehler @@ -281,6 +282,7 @@ FileDetailsPage + Dismiss Ablehnen @@ -288,6 +290,7 @@ FileDetailsWindow + File details of %1 · %2 Dateidetails von %1 · %2 @@ -295,14 +298,17 @@ FileProviderEvictionDialog + Evict materialised files Materialisierte Dateien löschen + Materialised items Materialisierte Elemente + Reload Neu laden @@ -310,10 +316,12 @@ FileProviderFastEnumerationSettings + Enable fast sync Schnelle Synchronisierung aktivieren + Fast sync will only sync changes in files and folders within folders that have been explored. This can significantly increase responsiveness on initial configuration of virtual files. However, it will cause redundant downloads of files moved to an unexplored folder. Bei der schnellen Synchronisierung werden nur Änderungen an Dateien und Ordnern innerhalb der Ordner synchronisiert, die bereits untersucht wurden. Dies kann die Reaktionsfähigkeit bei der Ersteinrichtung virtueller Dateien erheblich erhöhen. Allerdings führt dies zu redundanten Downloads von Dateien, die in einen noch nicht erfassten Ordner verschoben wurden. @@ -321,6 +329,7 @@ FileProviderFileDelegate + Delete Löschen @@ -328,18 +337,17 @@ FileProviderSettings + Enable virtual files Virtuelle Dateien aktivieren + General settings Allgemeine Einstellungen - Signal file provider domain - Domain des Signaldateianbieters - - + Virtual files settings Einstellungen für virtuelle Dateien @@ -347,18 +355,17 @@ FileProviderStorageInfo + %1 GB of %2 GB remote files synced %1 GB von %2 GB der entfernten Dateien synchronisiert + Evict local copies … Lokale Kopien entfernen … - Evict local copies... - Lokale Kopien entfernen... - - + Local storage use Lokaler Speicher verwenden @@ -366,20 +373,24 @@ FileProviderSyncStatus + All synced! Alles synchronisiert! + Request a sync of changes for the VFS environment. macOS may ignore or delay this request. Eine Synchronisierung der Änderungen für die VFS-Umgebung anfordern. macOS kann diese Anforderung ignorieren oder verzögern. + Request sync Synchronisierung anfordern + Syncing Synchronisiere @@ -387,10 +398,12 @@ macOS kann diese Anforderung ignorieren oder verzögern. FileSystem + Could not remove folder "%1" Der Ordner "%1" konnte nicht entfernt werden + Error removing "%1": %2 Fehler beim Entfernen von "%1": %2 @@ -398,26 +411,32 @@ macOS kann diese Anforderung ignorieren oder verzögern. Flow2AuthWidget + An error occurred while connecting. Please try again. Es ist ein Fehler beim Herstellen der Verbindung aufgetreten. Bitte erneut versuchen. + Browser Authentication Browser-Authentifizierung + Copy Link Link kopieren + Logo Logo + Reopen Browser + Switch to your browser to connect your account Wechseln Sie zu Ihrem Browser, um Ihr Konto zu verbinden @@ -425,10 +444,12 @@ macOS kann diese Anforderung ignorieren oder verzögern. FolderWizardSelectiveSync + Add Folder Sync Ordner Sync hinzufügen + Step 3 of 3: Selektive Synchronisation Schritt 3 von 3: Selektive Synchronisierung @@ -436,18 +457,22 @@ macOS kann diese Anforderung ignorieren oder verzögern. FolderWizardSourcePage + &Choose &Wählen + Add Folder Sync Ordner Sync hinzufügen + Select a folder on your hard drive that should be permanetly connected to your %1. All files and subfolders are automatically uploaded and synchronized Wählen Sie einen Ordner auf Ihrer Festplatte, der dauerhaft mit Ihrem %1 verbunden sein soll. Alle Dateien und Unterordner werden automatisch hochgeladen und synchronisiert. + Step 1 of 3: Select local folder Schritt 1 von 3: Lokalen Ordner auswählen @@ -455,30 +480,37 @@ macOS kann diese Anforderung ignorieren oder verzögern. FolderWizardTargetPage + Add Folder Sync Ordner Sync hinzufügen + Both folders are permanently linked and the respective contents are automatically synchronized and updated. Beide Ordner sind dauerhaft miteinander verknüpft und die jeweiligen Inhalte werden automatisch synchronisiert und aktualisiert. + Create folder Ordner erstellen + Folders Ordner + Please now select or create a target folder in your %1 where the content should be uploaded and synchronized. Bitte wählen oder erstellen Sie nun einen Zielordner in Ihrem %1, in den der Inhalt hochgeladen und synchronisiert werden soll. + Refresh Aktualisieren + Step 2 of 3: Directory in your %1 Schritt 2 von 3: Verzeichnis in Ihrem %1 @@ -486,10 +518,12 @@ macOS kann diese Anforderung ignorieren oder verzögern. main.cpp + %1 requires on a working system tray. If you are running XFCE, please follow <a href="http://docs.xfce.org/xfce/xfce4-panel/systray">these instructions</a>. Otherwise, please install a system tray application such as "trayer" and try again. %1 benötigt ein funktionierendes Benachrichtigungsfeld. Falls Sie XFCE einsetzen, dann folgen Sie bitte <a href="http://docs.xfce.org/xfce/xfce4-panel/systray">diesen Anweisungen</a>. Andernfalls installieren Sie bitte ein Benachrichtigungsfeld wie zum Beispiel "Trayer" und versuchen es nochmal. + System Tray not available Benachrichtigungsfeld (Taskleiste) ist nicht verfügbar. @@ -497,14 +531,17 @@ macOS kann diese Anforderung ignorieren oder verzögern. MainWindow + New activities Neue Aktivitäten + Nextcloud desktop main dialog Nextcloud Desktop-Hauptdialog + Unified search results list Einheitliche Suchergebnisliste @@ -512,6 +549,7 @@ macOS kann diese Anforderung ignorieren oder verzögern. nextcloudTheme::aboutInfo() + <p><small>Built from Git revision <a href="%1">%2</a> on %3, %4 using Qt %5, %6</small></p> <p><small>Erstellt aus der Git-Revision <a href="%1">%2</a> auf %3, %4 unter Verwendung von Qt %5, %6</small></p> @@ -519,14 +557,17 @@ macOS kann diese Anforderung ignorieren oder verzögern. OCC::AbstractNetworkJob + Connection timed out Zeitüberschreitung bei der Verbindung + Server replied "%1 %2" to "%3 %4" Server hat "%1 %2" auf "%3 %4" geantwortet + Unknown error: network reply was deleted Unbekannter Fehler: Netzwerk-Antwort wurde gelöscht @@ -534,14 +575,17 @@ macOS kann diese Anforderung ignorieren oder verzögern. OCC::Account + File %1 is already locked by %2. Datei %1 ist bereits von %2 gesperrt. + Lock operation on %1 failed with error %2 Das Sperren von %1 ist mit Fehler %2 fehlgeschlagen + Unlock operation on %1 failed with error %2 Das Entsperren von %1 ist mit Fehler %2 fehlgeschlagen @@ -549,30 +593,37 @@ macOS kann diese Anforderung ignorieren oder verzögern. OCC::AccountManager + %1 accounts were detected from a legacy desktop client. Should the accounts be imported? %1 Konten wurden von einem älteren Desktop-Client erkannt. Sollen die Konten importiert werden? + 1 account was detected from a legacy desktop client. Should the account be imported? 1 Konto wurde von einem älteren Desktop-Client erkannt. Soll das Konto importiert werden? + Could not import accounts from legacy client configuration. Konten von älterer Client-Konfiguration konnten nicht importiert werden. + Import Importieren + + Legacy import Import früherer Konfiguration + Skip Überspringen @@ -580,303 +631,334 @@ Soll das Konto importiert werden? OCC::AccountSettings + %1 (%3%) of %2 in use. Some folders, including network mounted or shared folders, might have different limits. %1 (%3%) von %2 Serverkapazität verwendet. Einige Ordner, einschließlich über das Netzwerk verbundene oder geteilte Ordner, können unterschiedliche Beschränkungen aufweisen. + %1 as %2 %1 als %2 + %1 in use %1 wird verwendet + %1 of %2 in use %1 von %2 Serverkapazität verwendet + (experimental) (experimentell) + <p>Could not create local folder <i>%1</i>.</p> <p>Konnte lokalen Ordner <i>%1</i> nicht anle‏gen.‎</p> + <p>Do you really want to stop syncing the folder <i>%1</i>?</p><p><b>Note:</b> This will <b>not</b> delete any files.</p> <p>Möchten Sie den Ordner <i>%1</i> nicht mehr synchronisieren?</p><p><b>Anmerkung:</b> Dies wird <b>keine</b> Dateien löschen.</p> - Apply - Anwenden - - - Apply manual changes - Manuelle Änderungen anwenden - - + + Availability Verfügbarkeit - Cancel - Abbrechen - - + Choose what to sync Zu synchronisierende Elemente auswählen + Confirm Folder Sync Connection Removal Bestätigen Sie die Löschung der Ordner-Synchronisierung + Connected to %1. Verbunden mit %1. - Connected with <server> as <user> - Verbunden mit <server> als <user> - - + Connecting to %1 … Verbinde zu %1 … - Connection settings - Verbindungseinstellungen - - + Could not encrypt folder because the folder does not exist anymore Der Ordner konnte nicht verschlüsselt werden, da er nicht mehr existiert + + Create new folder Neuen Ordner erstellen + Currently there is no storage usage information available. Derzeit sind keine Speichernutzungsinformationen verfügbar. + Disable encryption Verschlüsselung deaktivieren + Disable end-to-end encryption Ende-zu-Ende-Verschlüsselung deaktivieren + Disable end-to-end encryption for %1? Ende-zu-Ende-Verschlüsselung für %1 deaktivieren? + Disable support Unterstützung deaktivieren + Disable virtual file support … Unterstützung für virtuelle Dateien deaktivieren + Disable virtual file support? Unterstützung für virtuelle Dateien deaktivieren? + Display mnemonic Gedächtnisstütze anzeigen + + Do not encrypt folder Ordner nicht verschlüsseln + + Edit Ignored Files Ignorierte Dateien bearbeiten + Enable virtual file support %1 … Unterstützung für virtuelle Dateien aktivieren %1 … + Encrypt Verschlüsseln + + Encrypt folder Ordner verschlüsseln + Encryption failed Verschlüsselung fehlgeschlagen + End-to-end Encryption Ende-zu-Ende-Verschlüsselung + End-to-end Encryption with Virtual Files Ende-zu-Ende-Verschlüsselung mit virtuellen Dateien + End-to-end encryption has been enabled for this account Für dieses Konto wurde die Ende-zu-Ende-Verschlüsselung aktiviert + End-to-end encryption has been enabled on this account with another device.<br>It can be enabled on this device by entering your mnemonic.<br>This will enable synchronisation of existing encrypted folders. Die Ende-zu-Ende-Verschlüsselung wurde auf diesem Konto mit einem anderen Gerät aktiviert.<br>Sie kann auf diesem Gerät durch Eingabe Ihrer Gedächtnisstütze aktiviert werden.<br>Dadurch wird die Synchronisierung vorhandener verschlüsselter Ordner aktiviert. + End-to-end encryption is not configured on this device. Once it is configured, you will be able to encrypt this folder. Would you like to set up end-to-end encryption? Auf diesem Gerät ist keine Ende-zu-Ende-Verschlüsselung konfiguriert. Sobald sie konfiguriert ist, kann dieser Ordner verschlüsselt werden. Soll die Ende-zu-Ende-Verschlüsselung eingerichtet werden? + End-to-end encryption mnemonic Gedächtnisstütze für die Ende-zu-Ende-Verschlüsselung - Expand Memory - Speicher erweitern - - + Folder creation failed Anlegen des Ordners fehlgeschlagen + Force sync now Synchronisierung jetzt erzwingen + Migrate certificate to a new one Zertifikat auf ein neues migrieren + No %1 connection configured. Keine %1-Verbindung konfiguriert. + No account configured. Kein Konto konfiguriert. + + Open folder Ordner öffnen + Pause sync Synchronisierung pausieren + Please wait for the folder to sync before trying to encrypt it. Bitte warten Sie, bis der Ordner synchronisiert ist, bevor Sie versuchen, ihn zu verschlüsseln. + Remove Folder Sync Connection Ordner-Synchronisierung entfernen + Remove folder sync connection Ordner-Synchronisierung entfernen + Removing end-to-end encryption will remove locally-synced files that are encrypted.<br>Encrypted files will remain on the server. Durch das Entfernen der Ende-zu-Ende-Verschlüsselung werden lokal synchronisierte Dateien entfernt, die verschlüsselt sind.<br>Verschlüsselte Dateien verbleiben auf dem Server. + Restart sync Synchronisierung neustarten + Resume sync Synchronisierung fortsetzen + Server %1 is currently being redirected, or your connection is behind a captive portal. Server %1 wird derzeit umgeleitet oder Ihre Verbindung befindet sich hinter einem Captive-Portal. + Server %1 is currently in maintenance mode. Server %1 befindet sich im Wartungsmodus. + Server %1 is temporarily unavailable. Server %1 ist derzeit nicht verfügbar. + Server configuration error: %1 at %2. Konfigurationsfehler des Servers: %1 auf %2. + Set up encryption Verschlüsselung einrichten + Signed out from %1. Abgemeldet von %1. - Standard file sync - Standard Dateisynchronisierung - - + Storage space %1% occupied Speicherplatz %1% belegt - Storage space: … - Speicherplatz: … - - + Sync Running Synchronisierung läuft - Synchronize all - Alles synchronisieren - - - Synchronize none - Nichts synchronisieren - - + The folder has a minor sync problem. Encryption of this folder will be possible once it has synced successfully Der Ordner weist ein geringfügiges Synchronisierungsproblem auf. Die Verschlüsselung dieses Ordners ist möglich, sobald er synchronisiert wurde + The folder has a sync error. Encryption of this folder will be possible once it has synced successfully Der Ordner weist einen Synchronisierungsfehler auf. Die Verschlüsselung dieses Ordners ist möglich, sobald er synchronisiert wurde + The server version %1 is unsupported! Proceed at your own risk. Die Serverversion %1 wird nicht unterstützt! Fortfahren auf eigenes Risiko. + The syncing operation is running.<br/>Do you want to terminate it? Die Synchronisierung läuft gerade.<br/>Wollen Sie diese beenden? + There are folders that have grown in size beyond %1MB: %2 Es gibt Ordner, deren Größe über %1 MB hinaus gewachsen ist: %2 + There are folders that were not synchronized because they are external storages: Es gibt Ordner, die nicht synchronisiert werden konnten, da sie externe Speicher sind: + There are folders that were not synchronized because they are too big or external storages: Es gibt Ordner, die nicht synchronisiert werden konnten, da sie zu groß oder externe Speicher sind: + There are folders that were not synchronized because they are too big: Einige Ordner konnten nicht synchronisiert werden, da sie zu groß sind: + This account supports end-to-end encryption Dieses Konto unterstützt Ende-zu-Ende-Verschlüsselung + This action will disable virtual file support. As a consequence contents of folders that are currently marked as "available online only" will be downloaded. The only advantage of disabling virtual file support is that the selective sync feature will become available again. @@ -889,61 +971,127 @@ Der einzige Vorteil der Deaktivierung der Unterstützung für virtuelle Dateien Diese Aktion bricht jede derzeit laufende Synchronisierung ab. + This will encrypt your folder and all files within it. These files will no longer be accessible without your encryption mnemonic key. <b>This process is not reversible. Are you sure you want to proceed?</b> Dadurch werden Ihr Ordner und alle darin enthaltenen Dateien verschlüsselt. Auf diese Dateien kann ohne Ihren mnemonischen Verschlüsselungsschlüssel nicht mehr zugegriffen werden. <b>Dies kann nicht rückgängig gemacht werden. Sind Sie sicher, dass Sie fortfahren möchten?</b> + To protect your Cryptographic Identity, we encrypt it with a mnemonic of 12 dictionary words. Please note these down and keep them safe. They will be needed to add other devices to your account (like your mobile phone or laptop). Um Ihre kryptografische Identität zu schützen, verschlüsseln wir sie mit einer Gedächtnisstütze von 12 Wörterbuchwörtern. Bitte notieren Sie sich diese und bewahren Sie sie auf. Sie werden benötigt, um Ihrem Konto weitere Geräte hinzuzufügen (z. B. Ihr Mobiltelefon oder Laptop). + Unable to connect to %1. Verbindung zu %1 kann nicht hergestellt werden. - Unchecked folders will be <b>removed</b> from your local file system and will not be synchronized to this computer anymore - Nicht markierte Ordner werden von Ihrem lokalen Dateisystem <b>entfernt</b> und werden auch nicht mehr auf diesem Rechner synchronisiert - - - Virtual file sync - Virtuelle Dateisynchronisierung - - + Warning Warnung + You cannot encrypt a folder with contents, please remove the files. Wait for the new sync, then encrypt it. Sie können einen Ordner nicht mit Inhalten verschlüsseln, bitte Dateien entfernen. Warten Sie auf die neue Synchronisierung und verschlüsseln Sie sie dann. + You need to accept the terms of service at %1. Die Nutzungsbedingungen unter %1 müssen bestätigt werden. + You seem to have the Virtual Files feature enabled on this folder. At the moment, it is not possible to implicitly download virtual files that are end-to-end encrypted. To get the best experience with virtual files and end-to-end encryption, make sure the encrypted folder is marked with "Make always available locally". Sie scheinen die Funktion "Virtuelle Dateien" für diesen Ordner aktiviert zu haben. Im Moment ist es nicht möglich, virtuelle Dateien, die Ende-zu-Ende-verschlüsselt sind, implizit herunterzuladen. Um die beste Erfahrung mit virtuellen Dateien und Ende-zu-Ende-Verschlüsselung zu machen, stellen Sie sicher, dass der verschlüsselte Ordner mit "Immer lokal verfügbar machen" markiert ist. + https://wl.hidrive.com/easy/0057 https://wl.hidrive.com/easy/0067 - + + + Apply + Anwenden + + + + Apply manual changes + Manuelle Änderungen anwenden + + + + + + Cancel + Abbrechen + + + + Connected with <server> as <user> + Verbunden mit <server> als <user> + + + + Connection settings + Verbindungseinstellungen + + + + Expand Memory + Speicher erweitern + + + + Standard file sync + Standard Dateisynchronisierung + + + + + Storage space: … + Speicherplatz: … + + + + Synchronize all + Alles synchronisieren + + + + Synchronize none + Nichts synchronisieren + + + + Unchecked folders will be <b>removed</b> from your local file system and will not be synchronized to this computer anymore + Nicht markierte Ordner werden von Ihrem lokalen Dateisystem <b>entfernt</b> und werden auch nicht mehr auf diesem Rechner synchronisiert + + + + Virtual file sync + Virtuelle Dateisynchronisierung + + OCC::AccountSetupFromCommandLineJob + Access forbidden by server. To verify that you have proper access, <a href="%1">click here</a> to access the service with your browser. Zugriff durch Server verboten. Um zu überprüfen, ob Sie über den richtigen Zugriff verfügen, <a href="%1">klicken Sie hier</a>, um mit Ihrem Browser auf den Dienst zuzugreifen. + The authenticated request to the server was redirected to "%1". The URL is bad, the server is misconfigured. Die genehmigte Anfrage an den Server wurde an "%1" umgeleitet. Die URL ist fehlerhaft, der Server ist falsch konfiguriert. + There was an invalid response to an authenticated WebDAV request Es gab eine ungültige Antwort auf eine authentifizierte WebDAV-Anfrage @@ -951,46 +1099,57 @@ Warten Sie auf die neue Synchronisierung und verschlüsseln Sie sie dann. OCC::AccountState + Asking Credentials Zugangsdaten werden abgefragt + Configuration error Konfigurationsfehler + Connected Verbunden + Disconnected Getrennt + Maintenance mode Wartungsmodus + Need the user to accept the terms of service Der Benutzer muss die Nutzungsbedingungen akzeptieren + Network error Netzwerkfehler + Redirect detected Umleitung erkannt + Service unavailable Dienst nicht verfügbar + Signed out Abgemeldet + Unknown account state Unbekannter Konto-Zustand @@ -998,14 +1157,17 @@ Warten Sie auf die neue Synchronisierung und verschlüsseln Sie sie dann. OCC::ActivityListModel + Fetching activities … Aktivitäten abrufen… + For more activities please open the Activity app. Um weitere Aktivitäten anzusehen, bitte die Activity-App öffnen. + Network error occurred: client will retry syncing. Netzwerkfehler aufgetreten: Client startet die Synchronisation neu @@ -1013,34 +1175,42 @@ Warten Sie auf die neue Synchronisierung und verschlüsseln Sie sie dann. OCC::AddCertificateDialog + + Certificate files (*.p12 *.pfx) + Zertifikatsdateien (*.p12 *.pfx) + + + + Select a certificate + Zertifikat auswählen + + + An encrypted pkcs12 bundle is strongly recommended as a copy will be stored in the configuration file. Ein verschlüsseltes pkcs12-Bundle wird dringend empfohlen, da eine Kopie in der Konfigurationsdatei gespeichert wird. + Browse … Durchsuchen … + Certificate & Key (pkcs12): Zertifikat & Schlüssel (pkcs12): - Certificate files (*.p12 *.pfx) - Zertifikatsdateien (*.p12 *.pfx) - - + Certificate password: Zertifikatspasswort: + SSL client certificate authentication SSL-Client-Zertifikat-Authentifizierung - Select a certificate - Zertifikat auswählen - - + This server probably requires a SSL client certificate. Der Server benötigt vermutlich ein SSL-Client-Zertifikat @@ -1048,32 +1218,39 @@ Warten Sie auf die neue Synchronisierung und verschlüsseln Sie sie dann. OCC::Application + %1 accounts number of accounts imported %1 Konten + %1 folders number of folders imported %1 Ordner + 1 account 1 Konto + 1 folder 1 Ordner + Continue Fortsetzen + Error accessing the configuration file Fehler beim Zugriff auf die Konfigurationsdatei + Imported %1 and %2 from a legacy desktop client. %3 number of accounts and folders imported. list of users. @@ -1081,35 +1258,43 @@ Warten Sie auf die neue Synchronisierung und verschlüsseln Sie sie dann. + Legacy import Import früherer Konfiguration + Quit Beenden + Some settings were configured in %1 versions of this client and use features that are not available in this version.<br><br>Continuing will mean <b>%2 these settings</b>.<br><br>The current configuration file was already backed up to <i>%3</i>. Einige Einstellungen wurden in %1-Versionen dieses Clients konfiguriert und verwenden Funktionen, die in dieser Version nicht verfügbar sind.<br><br>Fortfahren bedeutet <b>%2 dieser Einstellungen</b>.<br><br>Die aktuelle Konfigurationsdatei wurde bereits auf <i>%3</i> gesichert. + There was an error while accessing the configuration file at %1. Please make sure the file can be accessed by your system account. Beim Zugriff auf die Konfigurationsdatei unter %1 ist ein Fehler aufgetreten. Stellen Sie sicher, dass Ihr Systemkonto auf die Datei zugreifen kann. + deleting Lösche + ignoring Ignoriere + newer newer software version Neuer + older older software version Älter @@ -1118,18 +1303,22 @@ Warten Sie auf die neue Synchronisierung und verschlüsseln Sie sie dann. OCC::AuthenticationDialog + &Password: &Passwort: + &Username: &Benutzername: + Authentication Required Authentifizierung erforderlich + Enter username and password for "%1" at %2. Benutzername und Passwort für "%1" auf %2 eingeben. @@ -1137,10 +1326,12 @@ Warten Sie auf die neue Synchronisierung und verschlüsseln Sie sie dann. OCC::BasePropagateRemoteDeleteEncrypted + "%1 Failed to unlock encrypted folder %2". "%1 Der verschlüsselte Ordner %2 konnte nicht entsperrt werden". + Wrong HTTP code returned by server. Expected 204, but received "%1 %2". Falscher HTTP-Code vom Server zurückgegeben. Erwartet wird 204, jedoch "%1 %2" erhalten. @@ -1148,46 +1339,58 @@ Warten Sie auf die neue Synchronisierung und verschlüsseln Sie sie dann. OCC::BulkPropagatorJob + Error updating metadata: %1 Fehler beim Aktualisieren der Metadaten: %1 + File %1 cannot be uploaded because another file with the same name, differing only in case, exists Die Datei %1 kann nicht hochgeladen werden, da eine andere Datei mit demselben Namen, nur unterschiedlicher Groß-/Kleinschreibung, existiert + File %1 has invalid modification time. Do not upload to the server. Die Datei %1 hat eine ungültige Änderungszeit. Nicht auf den Server hochladen. + File %1 has invalid modified time. Do not upload to the server. Die Datei %1 hat eine ungültige Änderungszeit. Nicht auf den Server hochladen. + File Removed (start upload) %1 Datei entfernt (starte das Hochladen) %1 + + Local file changed during sync. Lokale Datei wurde während der Synchronisierung geändert. + Local file changed during syncing. It will be resumed. Lokale Datei hat sich während der Synchronisierung geändert. Die Synchronisierung wird wieder aufgenommen. + Network error: %1 Netzwerkfehler: %1 + Restoration failed: %1 Wiederherstellung fehlgeschlagen: %1 + The file %1 is currently in use Die Datei %1 wird aktuell verwendet + The local file was removed during sync. Die lokale Datei wurde während der Synchronisierung entfernt. @@ -1195,30 +1398,37 @@ Warten Sie auf die neue Synchronisierung und verschlüsseln Sie sie dann. OCC::CaseClashConflictSolver + Cannot rename file because a file with the same name already exists on the server. Please pick another name. Die Datei kann nicht umbenannt werden, da eine Datei mit demselben Namen bereits auf dem Server existiert. Bitte einen anderen Namen wählen. + Could not rename file. Please make sure you are connected to the server. Datei konnte nicht umbenannt werden. Bitte stellen Sie sicher, dass Sie mit dem Server verbunden sind. + Failed to fetch permissions with error %1 Berechtigungen konnten nicht abgerufen werden. Fehler: %1 + Filename contains leading and trailing spaces. Dateiname enthält Leerzeichen am Anfang und am Ende. + Filename contains leading spaces. Dateiname enthält Leerzeichen am Anfang. + Filename contains trailing spaces. Dateiname enthält Leerzeichen am Ende. + You don't have the permission to rename this file. Please ask the author of the file to rename it. Sie haben nicht die Berechtigung, diese Datei umzubenennen. Bitte wenden Sie sich zum Umbenennen der Datei an deren Ersteller. @@ -1226,86 +1436,111 @@ Warten Sie auf die neue Synchronisierung und verschlüsseln Sie sie dann. OCC::CaseClashFilenameDialog + %1 does not support equal file names with only letter casing differences. %1 unterstützt keine gleichen Dateinamen mit Unterschieden nur in der Groß- und Kleinschreibung. + + Filename contains illegal characters: %1 + Dateiname enthält unzulässige Zeichen: %1 + + + + Filename contains leading and trailing spaces. + Dateiname enthält Leerzeichen am Anfang und am Ende. + + + + Filename contains leading spaces. + Dateiname enthält Leerzeichen am Anfang. + + + + Filename contains trailing spaces. + Dateiname enthält Leerzeichen am Ende. + + + + Rename file + Datei umbenennen + + + + The file "%1" could not be synced because of a case clash conflict with an existing file on this system. + Die Datei "%1" konnte aufgrund eines Konflikts (Groß- / Kleinschreibung) mit einer vorhandenen Datei auf diesem System nicht synchronisiert werden. + + + + Use invalid name + Ungültigen Namen verwenden + + + + 0 byte 0 Byte + Case Clash Conflict Konflikt mit der Groß- und Kleinschreibung + Case clashing file Datei mit dem Problem der Groß- und Kleinschreibung + Error Fehler + Existing file Vorhandene Datei - Filename contains illegal characters: %1 - Dateiname enthält unzulässige Zeichen: %1 - - - Filename contains leading and trailing spaces. - Dateiname enthält Leerzeichen am Anfang und am Ende. - - - Filename contains leading spaces. - Dateiname enthält Leerzeichen am Anfang. - - - Filename contains trailing spaces. - Dateiname enthält Leerzeichen am Ende. - - + New filename Neuer Dateiname + + Open clashing file Datei mit dem Problem der Groß- und Kleinschreibung öffnen + + Open existing file Existierende Datei öffnen + Please enter a new name for the clashing file: Bitte einen neuen Namen für die Datei mit dem Problem der Groß- und Kleinschreibung eingeben: - Rename file - Datei umbenennen - - - The file "%1" could not be synced because of a case clash conflict with an existing file on this system. - Die Datei "%1" konnte aufgrund eines Konflikts (Groß- / Kleinschreibung) mit einer vorhandenen Datei auf diesem System nicht synchronisiert werden. - - + The file could not be synced because it generates a case clash conflict with an existing file on this system. Die Datei konnte nicht synchronisiert werden, da diese einen Konflikt bezüglich Groß- und Kleinschreibung mit einer vorhandenen Datei auf diesem System erzeugt. - Use invalid name - Ungültigen Namen verwenden - - + file A Datei A + file B Datei B + + today Heute @@ -1313,6 +1548,7 @@ Warten Sie auf die neue Synchronisierung und verschlüsseln Sie sie dann. OCC::CleanupPollsJob + Error writing metadata to the database Fehler beim Schreiben der Metadaten in die Datenbank @@ -1320,27 +1556,33 @@ Warten Sie auf die neue Synchronisierung und verschlüsseln Sie sie dann. OCC::ClientSideEncryption + Enter Certificate USB Token PIN: PIN des USB-Token-Zertifikats eingeben: + Enter E2E passphrase E2E-Passphrase eingeben + Input PIN code Please keep it short and shorter than "Enter Certificate USB Token PIN:" PIN-Code eingeben + Invalid PIN. Login failed Ungültige PIN. Anmeldung fehlgeschlagen + Login to the token failed after providing the user PIN. It may be invalid or wrong. Please try again! Die Anmeldung am Token ist nach Eingabe der Benutzer-PIN fehlgeschlagen. Sie kann ungültig oder falsch sein. Bitte erneut versuchen! + Please enter your end-to-end encryption passphrase:<br><br>Username: %2<br>Account: %3<br> Geben Sie Ihre Passphrase für Ende-zu-Ende-Verschlüsselung ein:<br><br>Benutzername: %2<br>Konto: %3<br> @@ -1348,66 +1590,87 @@ Warten Sie auf die neue Synchronisierung und verschlüsseln Sie sie dann. OCC::ConflictDialog - 0 byte - 0 Byte - - - <a href="%1">Open local version</a> - <a href="%1">Lokale Version öffnen</a> - - - <a href="%1">Open server version</a> - <a href="%1">Serverversion öffnen</a> - - - Click to open the file - Klicken, um die Datei zu öffnen - - - Conflicting versions of %1. - Konflikt-Versionen von %1. - - + Keep both versions Beide Versionen behalten + Keep local version Lokale Version behalten + + Keep selected version Ausgewählte Version behalten + Keep server version Serverversion behalten - Local version - Lokale Version - - + Open local version Lokale Version öffnen + Open server version Serverversion öffnen + + + 0 byte + 0 Byte + + + + <a href="%1">Open local version</a> + <a href="%1">Lokale Version öffnen</a> + + + + <a href="%1">Open server version</a> + <a href="%1">Serverversion öffnen</a> + + + + + Click to open the file + Klicken, um die Datei zu öffnen + + + + + Conflicting versions of %1. + Konflikt-Versionen von %1. + + + + Local version + Lokale Version + + + Server version Serverversion + Sync Conflict Synchronisations-Konflikt + Which version of the file do you want to keep?<br/>If you select both versions, the local file will have a number added to its name. Welche Version der Datei soll behalten werden?<br/>Wenn Sie beide Versionen wählen, wird der lokalen Datei eine Zahl am Ende des Dateinamens angefügt. + + today Heute @@ -1415,22 +1678,29 @@ Warten Sie auf die neue Synchronisierung und verschlüsseln Sie sie dann. OCC::ConflictSolver + Confirm deletion Löschen bestätigen + Do you want to delete the directory <i>%1</i> and all its contents permanently? Möchten Sie den Ordner <i>%1</i> und dessen Inhalte dauerhaft löschen? + Do you want to delete the file <i>%1</i> permanently? Möchten Sie die Datei <i>%1</i> dauerhaft löschen? + + Error Fehler + + Moving file failed: %1 @@ -1442,26 +1712,32 @@ Warten Sie auf die neue Synchronisierung und verschlüsseln Sie sie dann. OCC::ConnectionValidator + Authentication error: Either username or password are wrong. Authentifizierungsfehler: Benutzername oder Passwort ist falsch. + No Nextcloud account configured Kein Nextcloud-Konto konfiguriert + Please update to the latest server and restart the client. Aktualisieren Sie auf die neueste Serverversion und starten Sie den Client neu. + The configured server for this client is too old Der konfigurierte Server ist für diesen Client zu alt + The provided credentials are not correct Die zur Verfügung gestellten Anmeldeinformationen sind nicht korrekt + Timeout Zeitüberschreitung @@ -1469,64 +1745,78 @@ Warten Sie auf die neue Synchronisierung und verschlüsseln Sie sie dann. OCC::DataProtectionPage + + This application uses tracking technologies. By clicking on Agree, you accept the processing of your anonymized data. You can adjust your choices at any time via the settings. <br/> <br/>Information on data processing and more can be found in our <a href='https://wl.hidrive.com/easy/0005'>privacy policy</a>. + Diese Anwendung verwendet Tracking-Technologien. Wenn Sie auf Zustimmen klicken, akzeptieren Sie die Verarbeitung Ihrer anonymisierten Daten. Sie können Ihre Auswahl jederzeit über die Einstellungen anpassen. <br/> <br/>Informationen zur Datenverarbeitung und mehr finden Sie in unserer <a href='https://wl.hidrive.com/easy/0045'>Datenschutzrichtlinie</a>. + + + Agree Zustimmen + Form Formular + Settings Einstellungen - - This application uses tracking technologies. By clicking on Agree, you accept the processing of your anonymized data. You can adjust your choices at any time via the settings. <br/> <br/>Information on data processing and more can be found in our <a href='https://wl.hidrive.com/easy/0005'>privacy policy</a>. - Diese Anwendung verwendet Tracking-Technologien. Wenn Sie auf Zustimmen klicken, akzeptieren Sie die Verarbeitung Ihrer anonymisierten Daten. Sie können Ihre Auswahl jederzeit über die Einstellungen anpassen. <br/> <br/>Informationen zur Datenverarbeitung und mehr finden Sie in unserer <a href='https://wl.hidrive.com/easy/0045'>Datenschutzrichtlinie</a>. - - + OCC::DataProtectionSettingsPage + + We collect anonymized data to optimize our app. We use software solutions from various partners for this purpose. We want to give you full transparency and freedom of choice regarding the collection and processing of your anonymized usage. You can change your settings at any time under the menu item Data Protection. + Wir sammeln anonymisierte Daten, um unsere App zu optimieren. Dazu nutzen wir Softwarelösungen von verschiedenen Partnern. Wir möchten Ihnen volle Transparenz und Wahlfreiheit bezüglich der Erhebung und Verarbeitung Ihrer anonymisierten Nutzung geben. Sie können Ihre Einstellungen jederzeit unter dem Menüpunkt Datenschutz ändern. + + + Back Zurück + Form Formular + Necessary data Erforderliche Daten + Required to ensure that the software can be used as expected Erforderlich, um sicherzustellen, dass die Software wie erwartet verwendet werden kann. + Save Settings Einstellungen speichern + Send anonymous use Anonyme Nutzungsdaten senden + This helps us to optimize the software and to better identify system crashes and unexpected errors. Dies hilft uns, die Software zu optimieren und Systemabstürze und unerwartete Fehler besser zu erkennen. - - We collect anonymized data to optimize our app. We use software solutions from various partners for this purpose. We want to give you full transparency and freedom of choice regarding the collection and processing of your anonymized usage. You can change your settings at any time under the menu item Data Protection. - Wir sammeln anonymisierte Daten, um unsere App zu optimieren. Dazu nutzen wir Softwarelösungen von verschiedenen Partnern. Wir möchten Ihnen volle Transparenz und Wahlfreiheit bezüglich der Erhebung und Verarbeitung Ihrer anonymisierten Nutzung geben. Sie können Ihre Einstellungen jederzeit unter dem Menüpunkt Datenschutz ändern. - - + OCC::DiscoveryPhase + Error while canceling deletion of %1 Fehler beim Abbrechen des Löschens von %1 + Error while canceling deletion of a file Fehler beim Abbrechen des Löschens einer Datei @@ -1534,14 +1824,19 @@ Warten Sie auf die neue Synchronisierung und verschlüsseln Sie sie dann. OCC::DiscoverySingleDirectoryJob + + Encrypted metadata setup error! Einrichtungsfehler für verschlüsselte Metadaten! + Encrypted metadata setup error: initial signature from server is empty. Fehler bei der Einrichtung der verschlüsselten Metadaten: Die ursprüngliche Signatur vom Server ist leer. + + Server error: PROPFIND reply is not XML formatted! Serverantwort: PROPFIND-Antwort ist nicht im XML-Format! @@ -1549,22 +1844,27 @@ Warten Sie auf die neue Synchronisierung und verschlüsseln Sie sie dann. OCC::DiscoverySingleLocalDirectoryJob + Directory not accessible on client, permission denied Verzeichnis auf dem Client nicht zugreifbar, Berechtigung verweigert + Directory not found: %1 Ordner nicht gefunden: %1 + Error while opening directory %1 Fehler beim Öffnen des Ordners %1 + Error while reading directory %1 Fehler beim Lesen des Ordners %1 + Filename encoding is not valid Dateinamenkodierung ist ungültig @@ -1572,62 +1872,93 @@ Warten Sie auf die neue Synchronisierung und verschlüsseln Sie sie dann. OCC::EditLocallyJob + + + An error occurred during data retrieval. Es ist ein Fehler beim Datenabruf aufgetreten. + + An error occurred during setup. Es ist ein Fehler während der Einrichtung aufgetreten. + + An error occurred trying to synchronise the file to edit locally. Es ist ein Fehler beim Versuch, die Datei zu synchronisieren, um sie lokal zu bearbeiten, aufgetreten. + + + + Could not find a file for local editing. Make sure it is not excluded via selective sync. Datei zur lokalen Bearbeitung konnte nicht gefunden werden. Stellen Sie sicher, dass sie nicht durch die selektive Synchronisierung ausgeschlossen wird. + + Could not find a file for local editing. Make sure its path is valid and it is synced locally. Datei zur lokalen Bearbeitung konnte nicht gefunden werden. Stellen Sie sicher, dass der Pfad gültig ist und lokal synchronisiert wird. + Could not find a remote file info for local editing. Make sure its path is valid. Remote-Dateiinformationen für die lokale Bearbeitung konnten nicht gefunden werden. Stellen Sie sicher, dass der Pfad gültig ist. + Could not open %1 %1 konnte nicht geöffnet werden + + + + + + + + Could not start editing locally. Lokale Bearbeitung konnte nicht gestartet werden. + File %1 already locked. Datei %1 bereits gesperrt. + File %1 could not be locked. Datei %1 konnte nicht gesperrt werden. + File %1 now locked. Datei %1 ist jetzt gesperrt. + Invalid local file path. Ungültiger lokaler Dateipfad. + + Lock will last for %1 minutes. You can also unlock this file manually once you are finished editing. Die Sperre dauert noch %1 Minuten. Sie können diese Datei auch manuell entsperren, sobald Sie mit der Bearbeitung fertig sind. + Please try again. Bitte erneut versuchen. + Server error: PROPFIND reply is not XML formatted! Serverantwort: PROPFIND-Antwort ist nicht im XML-Format! @@ -1635,10 +1966,12 @@ Warten Sie auf die neue Synchronisierung und verschlüsseln Sie sie dann. OCC::EditLocallyManager + Could not validate the request to open a file from server. Die Anforderung zum Öffnen einer Datei vom Server konnte nicht validiert werden. + Please try again. Bitte erneut versuchen. @@ -1646,26 +1979,34 @@ Warten Sie auf die neue Synchronisierung und verschlüsseln Sie sie dann. OCC::EditLocallyVerificationJob + An error occurred trying to verify the request to edit locally. Es ist ein Fehler beim Versuch, die Anfrage zur lokalen Bearbeitung zu überprüfen, aufgetreten. + Could not find an account for local editing. Es konnte kein Konto für die lokale Bearbeitung gefunden werden. + Could not start editing locally. Lokale Bearbeitung konnte nicht gestartet werden. + Invalid file path was provided. Ungültiger Dateipfad wurde angegeben. + Invalid token received. Ungültiges Token empfangen. + + + Please try again. Bitte erneut versuchen. @@ -1673,22 +2014,34 @@ Warten Sie auf die neue Synchronisierung und verschlüsseln Sie sie dann. OCC::EncryptedFolderMetadataHandler + Error fetching encrypted folder ID. Fehler beim Abrufen der verschlüsselten Ordner-ID. + + + + + + Error fetching metadata. Fehler beim Abrufen der Metadaten. + + + Error locking folder. Fehler beim Sperren des Ordners. + Error parsing or decrypting metadata. Fehler beim Lesen oder Entschlüsseln von Metadaten. + Failed to upload metadata Metadaten konnten nicht hochgeladen werden @@ -1696,6 +2049,7 @@ Warten Sie auf die neue Synchronisierung und verschlüsseln Sie sie dann. OCC::EncryptFolderJob + Could not generate the metadata for encryption, Unlocking the folder. This can be an issue with your OpenSSL libraries. Die Metadaten für die Verschlüsselung konnten nicht generiert werden. Entsperren des Ordners. @@ -1705,6 +2059,7 @@ Dies kann ein Problem mit Ihren OpenSSL-Bibliotheken sein. OCC::FileDetails + %1 day(s) ago days elapsed since file last modified @@ -1713,6 +2068,7 @@ Dies kann ein Problem mit Ihren OpenSSL-Bibliotheken sein. + %1 hour(s) ago hours elapsed since file last modified @@ -1721,6 +2077,7 @@ Dies kann ein Problem mit Ihren OpenSSL-Bibliotheken sein. + %1 minute(s) ago minutes elapsed since file last modified @@ -1729,6 +2086,7 @@ Dies kann ein Problem mit Ihren OpenSSL-Bibliotheken sein. + %1 month(s) ago months elapsed since file last modified @@ -1737,6 +2095,7 @@ Dies kann ein Problem mit Ihren OpenSSL-Bibliotheken sein. + %1 second(s) ago seconds elapsed since file last modified @@ -1745,6 +2104,7 @@ Dies kann ein Problem mit Ihren OpenSSL-Bibliotheken sein. + %1 year(s) ago years elapsed since file last modified @@ -1753,6 +2113,7 @@ Dies kann ein Problem mit Ihren OpenSSL-Bibliotheken sein. + Locked by %1 - Expires in %2 minute(s) remaining time before lock expires @@ -1764,26 +2125,36 @@ Dies kann ein Problem mit Ihren OpenSSL-Bibliotheken sein. OCC::Flow2Auth + + Could not parse the JSON returned from the server: <br><em>%1</em> Der vom Server zurückgegebene JSON-Code konnte nicht verarbeitet werden: <br><em>%1</em> + + Error returned from the server: <em>%1</em> Vom Server zurückgegebener Fehler: <em>%1</em> + The polling URL does not start with HTTPS despite the login URL started with HTTPS. Login will not be possible because this might be a security issue. Please contact your administrator. Die Polling-URL beginnt nicht mit HTTPS, obwohl die Anmelde-URL mit HTTPS beginnt. Die Anmeldung ist nicht möglich, da dies ein Sicherheitsproblem darstellen könnte. Bitte wenden Sie sich an Ihre Administration. + + The reply from the server did not contain all expected fields Die Antwort des Servers enthielt nicht alle erwarteten Felder + The returned server URL does not start with HTTPS despite the login URL started with HTTPS. Login will not be possible because this might be a security issue. Please contact your administrator. Die zurückgegebene Server-URL beginnt nicht mit HTTPS, obwohl die Anmelde-URL mit HTTPS beginnt. Die Anmeldung ist nicht möglich, da dies ein Sicherheitsproblem darstellen könnte. Bitte wenden Sie sich an Ihre Administration. + + There was an error accessing the "token" endpoint: <br><em>%1</em> Fehler beim Zugriff auf den "Token"-Endpunkt: <br><em>%1</em> @@ -1791,38 +2162,48 @@ Dies kann ein Problem mit Ihren OpenSSL-Bibliotheken sein. OCC::Flow2AuthWidget + Copy Link Link kopieren + + Error Fehler + Link copied to clipboard. Link in die Zwischenablage kopiert. + Open Browser Im Browser öffnen + Polling for authorization Abruf der Autorisierung + Starting authorization Starte Autorisierung + Switch to your browser to connect your account Wechseln Sie zu Ihrem Browser, um Ihr Konto zu verbinden + Unable to open the Browser, please copy the link to your Browser. Der Browser kann nicht geöffnet werden. Bitte kopieren Sie den Link in Ihren Browser. + Waiting for authorization Warte auf Autorisierung @@ -1830,6 +2211,7 @@ Dies kann ein Problem mit Ihren OpenSSL-Bibliotheken sein. OCC::Folder + %1 and %n other file(s) are currently locked. %1 und %n andere Datei sind aktuell gesperrt. @@ -1837,6 +2219,7 @@ Dies kann ein Problem mit Ihren OpenSSL-Bibliotheken sein. + %1 and %n other file(s) could not be synced due to errors. See the log for details. %1 und %n weitere Datei konnten aufgrund von Fehlern nicht synchronisiert werden. Schauen Sie in das Protokoll für Details. @@ -1844,6 +2227,7 @@ Dies kann ein Problem mit Ihren OpenSSL-Bibliotheken sein. + %1 and %n other file(s) have been added. %1 und %n andere Datei wurden hinzugefügt. @@ -1851,6 +2235,7 @@ Dies kann ein Problem mit Ihren OpenSSL-Bibliotheken sein. + %1 and %n other file(s) have been removed. %1 und %n andere Datei wurden gelöscht. @@ -1858,6 +2243,7 @@ Dies kann ein Problem mit Ihren OpenSSL-Bibliotheken sein. + %1 and %n other file(s) have been updated. %1 und %n andere Datei wurde aktualisiert. @@ -1865,14 +2251,17 @@ Dies kann ein Problem mit Ihren OpenSSL-Bibliotheken sein. + %1 could not be synced due to an error. See the log for details. %1 konnte aufgrund eines Fehlers nicht synchronisiert werden. Details finden Sie im Protokoll. + %1 has a sync conflict. Please check the conflict file! Es gab einen Konflikt bei der Synchronisierung von %1. Bitte prüfen Sie die Konfliktdatei! + %1 has and %n other file(s) have sync conflicts. %1 und %n andere Datei haben Konflikte beim Abgleichen. @@ -1880,11 +2269,13 @@ Dies kann ein Problem mit Ihren OpenSSL-Bibliotheken sein. + %1 has been added. %1 names a file. %1 wurde hinzugefügt. + %1 has been moved to %2 and %n other file(s) have been moved. %1 wurde in %2 verschoben und %n andere Datei wurde verschoben. @@ -1892,15 +2283,18 @@ Dies kann ein Problem mit Ihren OpenSSL-Bibliotheken sein. + %1 has been moved to %2. %1 wurde in %2 verschoben. + %1 has been removed. %1 names a file. %1 wurde entfernt. + %1 has been renamed to %2 and %n other file(s) have been renamed. %1 wurde in %2 umbenannt und %n andere Datei wurde umbenannt. @@ -1908,30 +2302,36 @@ Dies kann ein Problem mit Ihren OpenSSL-Bibliotheken sein. + %1 has been renamed to %2. %1 and %2 name files. %1 wurde in %2 umbenannt. + %1 has been updated. %1 names a file. %1 wurde aktualisiert. + %1 is currently locked. %1 ist aktuell gesperrt. + A folder from an external storage has been added. Ein Ordner von einem externen Speicher wurde hinzugefügt. + A folder has surpassed the set folder size limit of %1MB: %2. %3 Ein Ordner hat die festgelegte Ordnergrößenbeschränkung von %1 MB überschritten: %2. %3 + A large number of files in the server have been deleted. Please confirm if you'd like to proceed with these deletions. Alternatively, you can restore all deleted files by uploading from '%1' folder to the server. @@ -1940,6 +2340,7 @@ Bitte bestätigen Sie, ob Sie mit diesen Löschungen fortfahren möchten. Alternativ können Sie alle gelöschten Dateien wiederherstellen, indem Sie sie aus dem Ordner "%1" auf den Server hochladen. + A large number of files in your local '%1' folder have been deleted. Please confirm if you'd like to proceed with these deletions. Alternatively, you can restore all deleted files by downloading them from the server. @@ -1948,10 +2349,12 @@ Bitte bestätigen Sie, ob Sie mit diesen Löschungen fortfahren möchten. Alternativ können Sie alle gelöschten Dateien wiederherstellen, indem Sie sie vom Server herunterladen. + A new folder larger than %1 MB has been added: %2. Ein neuer Ordner größer als %1 MB wurde hinzugefügt: %2. + Changes in synchronized folders could not be tracked reliably. This means that the synchronization client might not upload local changes immediately and will instead only scan for local changes and upload them occasionally (every two hours by default). @@ -1964,70 +2367,87 @@ Dies bedeutet, dass der Synchronisierungs-Client lokale Änderungen möglicherwe %1 + Could not read system exclude file Systemeigene Ausschlussdatei kann nicht gelesen werden + Keep syncing Weiterhin synchronisieren + Please choose a different location. %1 isn't a readable folder. Bitte wählen Sie einen anderen Speicherort. %1 ist kein lesbarer Ordner. + Please choose a different location. %1 isn't a valid folder. Bitte wählen Sie einen anderen Speicherort. %1 ist kein gültiger Ordner. + Please choose a different location. The folder %1 doesn't exist. Bitte wählen Sie einen anderen Speicherort. Der Ordner %1 ist nicht vorhanden. + Please go in the settings to select it if you wish to download it. Bitte wechseln Sie zu den Einstellungen, falls Sie den Ordner herunterladen möchten. + Proceed with Deletion Mit der Löschung fortfahren + Remove all files? Alle Dateien entfernen? + Restore Files from Server Dateien vom Server wiederherstellen + Restore Files to Server Dateien auf dem Server wiederherstellen + Stop syncing Synchronisation stoppen + Sync Activity Synchronisierungsaktivität + The file %1 was created but was excluded from synchronization previously. It will not be synchronized. Die Datei % 1 wurde erstellt, jedoch bereits zuvor von der Synchronisierung ausgeschlossen. Sie wird nicht synchronisiert werden. + The folder %1 has surpassed the set folder size limit of %2MB. Der Ordner %1 hat die festgelegte Größenbeschränkung von %2 MB überschritten. + The folder %1 was created but was excluded from synchronization previously. Data inside it will not be synchronized. Der Ordner %1 wurde erstellt, wurde jedoch zuvor von der Synchronisierung ausgeschlossen. Die darin enthaltenen Daten werden nicht synchronisiert. + Virtual file download failed with code "%1", status "%2" and error message "%3" Der Download der virtuellen Datei ist mit dem Code "%1", dem Status "%2" und der Fehlermeldung "%3" fehlgeschlagen. + Would you like to stop syncing this folder? Möchten Sie die Synchronisierung dieses Ordners stoppen? @@ -2035,26 +2455,32 @@ Dies bedeutet, dass der Synchronisierungs-Client lokale Änderungen möglicherwe OCC::FolderCreationDialog + %1 Create new folder %1 Neuen Ordner erstellen + Could not create a folder! Check your write permissions. Ordner konnte nicht erstellt werden! Prüfen Sie die Schreibberechtigungen. + + Error + Fehler + + + Create new folder Neuen Ordner erstellen + Enter folder name Ordnernamen eingeben - Error - Fehler - - + Folder already exists Ordner existiert bereits @@ -2062,108 +2488,136 @@ Dies bedeutet, dass der Synchronisierungs-Client lokale Änderungen möglicherwe OCC::FolderMan + %1 (Sync is paused) %1 (Synchronisierung ist pausiert) + (backup %1) (Sicherung %1) + (backup) (Sicherung) + An old sync journal "%1" was found, but could not be removed. Please make sure that no application is currently using it. Ein altes Synchronisierungsprotokoll "%1" wurde gefunden, konnte jedoch nicht entfernt werden. Bitte stellen Sie sicher, dass keine Anwendung es verwendet. + Could not reset folder state Konnte Ordner-Zustand nicht zurücksetzen + Last sync was successful. Die letzte Synchronisierung war erfolgreich. + Please choose a different location. %1 is already being used as a sync folder for %2. folder location, server url Bitte wählen Sie einen anderen Speicherort. %1 wird bereits als Synchronisierungsordner für %2 verwendet. + + Please choose a different location. %1 is already being used as a sync folder. Bitte wählen Sie einen anderen Speicherort. %1 wird bereits als Synchronisationsordner verwendet. + Please choose a different location. %1 is already contained in a folder used as a sync folder. Bitte wählen Sie einen anderen Speicherort. %1 ist bereits in einem Ordner enthalten, der als Synchronisierungsordner verwendet wird. + Please choose a different location. The path %1 doesn't exist. Bitte wählen Sie einen anderen Speicherort. Der Pfad %1 existiert nicht. + Please choose a different location. The path %1 isn't a folder. Bitte wählen Sie einen anderen Speicherort. Der Pfad %1 ist kein Ordner. + Please choose a different location. The selected folder isn't valid. Bitte wählen Sie einen anderen Speicherort. Der ausgewählte Ordner ist ungültig. + + Please choose a different location. You don't have enough permissions to write to %1. folder location Bitte wählen Sie einen anderen Speicherort. Sie haben nicht genügend Berechtigungen, um in %1 zu schreiben. + Preparing for sync. Synchronisierung wird vorbereitet. + Setup error. Einrichtungsfehler. + Sync finished with unresolved conflicts. Synchronisierung mit ungelösten Konflikten beendet. + Sync is paused. Synchronisierung ist pausiert. + Sync is running. Synchronisierung läuft. + Sync request was cancelled. Synchronisierungsanfrage wurde abgebrochen. + Syncing %1 Synchronisiere %1 + Syncing %1 (%2 left) Synchronisiere %1 (%2 übrig) + Syncing %1 (A few seconds left) Synchronisiere %1 (ein paar Sekunden übrig) + Syncing %1 of %2 Synchronisiere %1 von %2 + Syncing %1 of %2 (%3 left) Synchronisiere %1 von %2 (%3 übrig) + Syncing %1 of %2 (A few seconds left) Synchronisiere %1 von %2 (ein paar Sekunden übrig) + The folder %1 is linked to multiple accounts. This setup can cause data loss and it is no longer supported. To resolve this issue: please remove %1 from one of the accounts and create a new sync folder. @@ -2174,10 +2628,12 @@ So beheben Sie dieses Problem: Entfernen Sie %1 von einem der Konten und erstell Für fortgeschrittene Benutzer: Dieses Problem kann damit zusammenhängen, dass sich mehrere Synchronisierungsdatenbankdateien in einem Ordner befinden. Suchen Sie in %1 nach veralteten und nicht verwendeten .sync_*.db-Dateien und entfernen Sie diese. + Undefined state. Undefinierter Zustand. + Waiting to start syncing. Wartet auf Beginn der Synchronisierung. @@ -2185,14 +2641,17 @@ Für fortgeschrittene Benutzer: Dieses Problem kann damit zusammenhängen, dass OCC::FolderStatusDelegate + Add Folder Sync Ordner Sync hinzufügen + File Datei + Synchronize any other local folder with your %1 Synchronisieren Sie jeden anderen lokalen Ordner mit Ihrem %1 @@ -2200,113 +2659,141 @@ Für fortgeschrittene Benutzer: Dieses Problem kann damit zusammenhängen, dass OCC::FolderStatusModel + %1 %2 Example text: "Uploading foobar.png" %1 %2 + %1 %2 (%3 of %4) Example text: "Uploading foobar.png (2MB of 2MB)" %1 %2 (%3 von %4) + %1 %2 … Example text: "Uploading foobar.png (1MB of 2MB) time left 2 minutes at a rate of 24Kb/s" Example text: "Syncing 'foo.txt', 'bar.txt'" %1 %2 … + + %1 (%2) %1 (%2) + %1 of %2, file %3 of %4 Example text: "12 MB of 345 MB, file 6 of 7" %1 of %2, Datei %3 von %4 + %5 left, %1 of %2, file %3 of %4 %5 übrig, %1 von %2, Datei %3 von %4 + + , , + A few seconds left, %1 of %2, file %3 of %4 Example text: "5 minutes left, 12 MB of 345 MB, file 6 of 7" Noch ein paar Sekunden, %1 von %2, Datei %3 von %4 + About to start syncing Die Synchronisierung beginnt + Checking for changes in local "%1" Nach Änderungen in lokalem "%1" suchen + Checking for changes in remote "%1" Nach Änderungen in entfernten "%1" suchen + Click this button to add a folder to synchronize. Wählen Sie diese Schaltfläche, um einen zu synchronisierenden Ordner hinzuzufügen. + Could not decrypt! Konnte nicht entschlüsseln! + Download %1/s Example text: "Download 24Kb/s" (%1 is replaced by 24Kb (translated)) %1/s herunterladen + Error while loading the list of folders from the server. Fehler beim Empfang der Ordnerliste vom Server. + Fetching folder list from server … Rufe Ordnerliste vom Server ab … + File %1 of %2 Datei %1 von %2 + Preparing to sync … Synchronisierung wird vorbereitet … + Signed out Abgemeldet + Synchronizing files in local folder Dateien im lokalen Ordner synchronisieren + Synchronizing virtual files in local folder Virtuelle Dateien im lokalen Ordner synchronisieren + Syncing local and remote changes Synchronisieren von lokalen und Remote-Änderungen + There are unresolved conflicts. Click for details. Es existieren ungelöste Konflikte. Für Details klicken. + Upload %1/s Example text: "Upload 24Kb/s" (%1 is replaced by 24Kb (translated)) %1/s hochladen + Virtual file support is enabled. Unterstützung für virtuelle Dateien ist aktiviert. + Waiting for %n other folder(s) … Warte auf %n anderen Ordner … @@ -2314,14 +2801,17 @@ Für fortgeschrittene Benutzer: Dieses Problem kann damit zusammenhängen, dass + You need to be connected to add a folder Sie müssen verbunden sein, um einen Ordner hinzuzufügen + ↑ %1/s ↑ %1/s + ↓ %1/s ↓ %1/s @@ -2329,6 +2819,7 @@ Für fortgeschrittene Benutzer: Dieses Problem kann damit zusammenhängen, dass OCC::FolderWatcher + The watcher did not receive a test notification. Der Beobachter hat keine Testbenachrichtigung erhalten. @@ -2336,6 +2827,7 @@ Für fortgeschrittene Benutzer: Dieses Problem kann damit zusammenhängen, dass OCC::FolderWatcherPrivate + This problem usually happens when the inotify watches are exhausted. Check the FAQ for details. Dieses Problem tritt zumeist auf, wenn die Inotify-Zähler voll sind. Details finden Sie im FAQ. @@ -2343,10 +2835,12 @@ Für fortgeschrittene Benutzer: Dieses Problem kann damit zusammenhängen, dass OCC::FolderWizard + Add Folder Sync Connection Ordner-Synchronisierung hinzufügen + Add Sync Connection Synchronisierung hinzufügen @@ -2354,30 +2848,37 @@ Für fortgeschrittene Benutzer: Dieses Problem kann damit zusammenhängen, dass OCC::FolderWizardLocalPath + Add Folder Sync Ordner Sync hinzufügen + Choose Wählen Sie + Click to select a local folder to sync. Hier klicken, um einen lokalen Ordner zum Synchronisieren auszuwählen. + Enter the path to the local folder. Pfad zum lokalen Ordner eingeben + Select a folder on your hard drive that should be permanetly connected to your %1. All files and subfolders are automatically uploaded and synchronized Wählen Sie einen Ordner auf Ihrer Festplatte, der dauerhaft mit Ihrem %1 verbunden sein soll. Alle Dateien und Unterordner werden automatisch hochgeladen und synchronisiert. + Select the source folder Quellordner auswählen + Step 1 of 3: Select local folder Schritt 1 von 3: Lokalen Ordner auswählen @@ -2385,58 +2886,74 @@ Für fortgeschrittene Benutzer: Dieses Problem kann damit zusammenhängen, dass OCC::FolderWizardRemotePath + Add Folder Sync Ordner Sync hinzufügen + Authentication failed accessing %1 Beim Zugriff auf %1 ist die Authentifizierung fehlgeschlagen + Both folders are permanently linked and the respective contents are automatically synchronized and updated. Beide Ordner sind dauerhaft miteinander verknüpft und die jeweiligen Inhalte werden automatisch synchronisiert und aktualisiert. + Choose this to sync the entire account Wählen Sie dies, um das gesamte Konto zu synchronisieren + Create Remote Folder Entfernten Ordner erstellen + Create folder Ordner erstellen + Enter the name of the new folder to be created below "%1": Geben Sie den Namen des neuen, unter "%1" zu erstellenden Ordners ein: + Failed to create the folder on %1. Please check manually. Der Ordner konnte nicht auf %1 erstellt werden. Bitte prüfen Sie dies manuell. + Failed to list a folder. Error: %1 Ordner konnte nicht gelistet werden. Fehler: %1 + Folder was successfully created on %1. Ordner auf %1 erstellt. + + + Please choose a different location. %1 is already being synced to %2. Bitte wählen Sie einen anderen Speicherort. %1 wird bereits mit %2 synchronisiert. + Please now select or create a target folder in your %1 where the content should be uploaded and synchronized. Bitte wählen oder erstellen Sie nun einen Zielordner in Ihrem %1, in den der Inhalt hochgeladen und synchronisiert werden soll. + Refresh Aktualisieren + Step 2 of 3: Directory in your %1 Schritt 2 von 3: Verzeichnis in Ihrem %1 @@ -2444,26 +2961,36 @@ Für fortgeschrittene Benutzer: Dieses Problem kann damit zusammenhängen, dass OCC::FolderWizardSelectiveSync + + + (experimental) (experimentell) + Add Folder Sync Ordner Sync hinzufügen + Step 3 of 3: Selektive Synchronisation Schritt 3 von 3: Selektive Synchronisierung + + + Use virtual files instead of downloading content immediately %1 Virtuelle Dateien verwenden, anstatt den Inhalt sofort herunterzuladen %1 + Virtual files are not supported at the selected location Virtuelle Dateien werden an dem ausgewählten Speicherort nicht unterstützt + Virtual files are not supported for Windows partition roots as local folder. Please choose a valid subfolder under drive letter. Virtuelle Dateien werden für die Wurzel von Windows-Partitionen als lokaler Ordner nicht unterstützt. Bitte wählen Sie einen gültigen Unterordner unter dem Laufwerksbuchstaben. @@ -2471,22 +2998,7 @@ Für fortgeschrittene Benutzer: Dieses Problem kann damit zusammenhängen, dass OCC::GeneralSettings - &Analysis data collection for needs-based design - &Analyse der Datenerhebung für bedarfsgerechte Gestaltung - - - &Automatically check for updates - &Automatisch auf Aktualisierungen prüfen - - - &Launch on System Startup - Beim &Systemstart starten - - - &Restart && Update - &Neustarten && aktualisieren - - + - beta: contains versions with new features that may not be tested thoroughly - daily: contains versions created daily only for testing and development @@ -2498,6 +3010,7 @@ Downgrading versions is not possible immediately: changing from beta to stable m Ein Downgrade von Versionen ist nicht sofort möglich: Der Wechsel von Beta auf Stabil bedeutet, dass man auf die neue stabile Version warten muss. + - enterprise: contains stable versions for customers. Downgrading versions is not possible immediately: changing from stable to enterprise means waiting for the new enterprise version. @@ -2507,199 +3020,265 @@ Downgrading versions is not possible immediately: changing from stable to enterp Ein Downgrade von Versionen ist nicht sofort möglich: Der Wechsel von Beta auf Stabil bedeutet, dass man auf die neue stabile Version warten muss. + + Cancel + Abbrechen + + + + Change update channel + Update-Kanal ändern + + + + Changing update channel? + Update-Kanal ändern? + + + + Debug Archive Created + Debug-Archiv erstellt + + + + Debug archive is created at %1 + Debug-Archiv erstellt in %1 + + + + Server notifications that require attention. + Server-Benachrichtigungen, die Aufmerksamkeit erfordern. + + + + Show call notification dialogs. + Dialog zu Anrufbenachrichtigungen anzeigen + + + + The channel determines which upgrades will be offered to install: +- stable: contains tested versions considered reliable + + starts list of available update channels, stable is always available + Der Kanal bestimmt, welche Aktualisierungen zur Installation angeboten werden: +- Stabil: enthält getestete Versionen, die als zuverlässig gelten + + + + You cannot disable autostart because system-wide autostart is enabled. + Sie können den Autostart nicht deaktivieren, da der systemweite Autostart aktiviert ist. + + + + Zip Archives + Zip-Archive + + + + daily + Täglich + + + + enterprise + Unternehmensversion + + + + https://wl.hidrive.com/easy/0004 + https://wl.hidrive.com/easy/0044 + + + + https://wl.hidrive.com/easy/0005 + https://wl.hidrive.com/easy/0045 + + + + https://wl.hidrive.com/easy/0006 + https://wl.hidrive.com/easy/0006 + + + + https://wl.hidrive.com/easy/0007 + https://wl.hidrive.com/easy/0047 + + + + &Automatically check for updates + &Automatisch auf Aktualisierungen prüfen + + + + &Launch on System Startup + Beim &Systemstart starten + + + + &Restart && Update + &Neustarten && aktualisieren + + + Advanced Erweitert + Ask for confirmation before synchronizing external storages Bestätigung erfragen, bevor externe Speicher synchronisiert werden + Ask for confirmation before synchronizing new folders larger than Um eine Bestätigung bitten, bevor Sie neue Ordner synchronisieren, die größer sind als + Automatically disable synchronisation of folders that overcome limit Automatisch die Synchronisierung von Ordnern beenden, die das Limit überschreiten - Cancel - Abbrechen - - - Change update channel - Update-Kanal ändern - - - Changing update channel? - Update-Kanal ändern? - - + Check Now Jetzt prüfen + + Create Debug Archive Debug-Archiv erstellen + Data Protection Datenschutzbestimmungen - Debug Archive Created - Debug-Archiv erstellt - - - Debug archive is created at %1 - Debug-Archiv erstellt in %1 - - + Desktop client x.x.x Desktop-Client x.x.x + Edit &Ignored Files I&gnorierte Dateien bearbeiten + For System Tray Für das Systembenachrichtungsfeld + General Settings Allgemeine Einstellungen + Legal Notice Impressum + MB Trailing part of "Ask confirmation before syncing folder larger than" MB + More Information Mehr Informationen + Move removed files to trash Entfernte Dateien in den Papierkorb verschieben + Necessary data Erforderliche Daten + Notify when synchronised folders grow larger than specified limit Benachrichtigen, wenn synchronisierte Ordner größer werden als das angegebene Limit + Open Source Software Open-Source-Software + Privacy Policy Datenschutzerklärung + Required to ensure that the software can be used as expected Erforderlich, um sicherzustellen, dass die Software wie erwartet verwendet werden kann. + S&how crash reporter &Crash-Reporter anzeigen + Send anonymous use Anonyme Nutzungsdaten senden - Server notifications that require attention. - Server-Benachrichtigungen, die Aufmerksamkeit erfordern. - - + Show Server &Notifications Server&benachrichtigungen anzeigen - Show call notification dialogs. - Dialog zu Anrufbenachrichtigungen anzeigen - - + Show call notifications + Show sync folders in &Explorer's navigation pane Synchronisierungsordner im Navigationsbereich des &Explorers anzeigen - The channel determines which upgrades will be offered to install: -- stable: contains tested versions considered reliable - - starts list of available update channels, stable is always available - Der Kanal bestimmt, welche Aktualisierungen zur Installation angeboten werden: -- Stabil: enthält getestete Versionen, die als zuverlässig gelten - - + This helps us to optimize the software and to better identify system crashes and unexpected errors. Dies hilft uns, die Software zu optimieren und Systemabstürze und unerwartete Fehler besser zu erkennen. + Update channel Update-Kanal + Updates Aktualisierungen + Usage Documentation Nutzungsdokumentation + Use &monochrome icons - You cannot disable autostart because system-wide autostart is enabled. - Sie können den Autostart nicht deaktivieren, da der systemweite Autostart aktiviert ist. - - - Zip Archives - Zip-Archive - - + + beta Beta - daily - Täglich - - - enterprise - Unternehmensversion - - - https://wl.hidrive.com/easy/0004 - https://wl.hidrive.com/easy/0044 - - - https://wl.hidrive.com/easy/0005 - https://wl.hidrive.com/easy/0045 - - - https://wl.hidrive.com/easy/0006 - https://wl.hidrive.com/easy/0006 - - - https://wl.hidrive.com/easy/0007 - https://wl.hidrive.com/easy/0047 - - + + stable Stabil @@ -2707,22 +3286,27 @@ Ein Downgrade von Versionen ist nicht sofort möglich: Der Wechsel von Beta auf OCC::GETFileJob + Connection Timeout Zeitüberschreitung der Verbindung + No E-Tag received from server, check Proxy/Gateway Kein E-Tag vom Server empfangen, bitte Proxy/Gateway überprüfen + Server returned wrong content-range Server hat falschen Bereich für den Inhalt zurückgegeben + We received a different E-Tag for resuming. Retrying next time. Es wurde ein unterschiedliches E-Tag zum Fortfahren empfangen. Bitte beim nächsten mal nochmal versuchen. + We received an unexpected download Content-Length. Wir haben eine unerwartete Download-Content-Länge erhalten. @@ -2730,6 +3314,7 @@ Ein Downgrade von Versionen ist nicht sofort möglich: Der Wechsel von Beta auf OCC::GetOrCreatePublicLinkShare + Could not retrieve or create the public link share. Error: %1 @@ -2738,14 +3323,17 @@ Ein Downgrade von Versionen ist nicht sofort möglich: Der Wechsel von Beta auf %1 + Password for share required Passwort für die Freigabe erforderlich + Please enter a password for your link share: Bitte Passwort für die Link-Freigabe eingeben: + Sharing error Fehler beim Teilen @@ -2753,18 +3341,22 @@ Ein Downgrade von Versionen ist nicht sofort möglich: Der Wechsel von Beta auf OCC::HttpCredentialsGui + <a href="%1">Click here</a> to request an app password from the web interface. <a href="%1">Hier klicken</a>, um von der Web-Oberfläche ein App-Passwort zu erhalten. + Enter Password Passwort eingeben + Please enter %1 password:<br><br>Username: %2<br>Account: %3<br> Bitte %1 Passwort:<br><br>Benutzername: %2<br>Konto: %3<br>eingeben + Reading from keychain failed with error: "%1" Lesen vom Schlüsselbund fehlgeschlagen mit Fehler: "%1" @@ -2772,49 +3364,50 @@ Ein Downgrade von Versionen ist nicht sofort möglich: Der Wechsel von Beta auf OCC::IgnoreListEditor + + This entry is provided by the system at "%1" and cannot be modified in this view. + Dieser Eintrag wird vom System auf "%1" bereitgestellt und kann in dieser Ansicht nicht geändert werden. + + + Files Ignored by Patterns Nach Muster ignorierte Dateien + Global Ignore Settings Globale Ignorier-Einstellungen + Ignored Files Editor Editor für ignorierte Dateien + Sync hidden files Synchronisiere versteckte Dateien - - This entry is provided by the system at "%1" and cannot be modified in this view. - Dieser Eintrag wird vom System auf "%1" bereitgestellt und kann in dieser Ansicht nicht geändert werden. - - + OCC::IgnoreListTableWidget - Add - Hinzufügen - - + Add a new ignore pattern: Neues Ignoriermuster hinzufügen - Allow Deletion - Löschen erlauben - - + Cannot write changes to "%1". Konnte Änderungen nicht in "%1" schreiben. + Could not open file Datei konnte nicht geöffnet werden + Files or folders matching a pattern will not be synchronized. Items where deletion is allowed will be deleted if they prevent a directory from being removed. This is useful for meta data. @@ -2823,18 +3416,32 @@ Items where deletion is allowed will be deleted if they prevent a directory from Objekte, die gelöscht werden dürfen, werden gelöscht, wenn sie das Löschen eines Ordners verhindern würden. Dies ist nützlich für Metadaten. + Ignore Pattern Muster ignorieren + + Add + Hinzufügen + + + + Allow Deletion + Löschen erlauben + + + Pattern Muster + Remove Entfernen + Remove all Alle entfernen @@ -2842,117 +3449,146 @@ Objekte, die gelöscht werden dürfen, werden gelöscht, wenn sie das Löschen e OCC::InvalidFilenameDialog + Cannot rename file because a file with the same name does already exist on the server. Please pick another name. Die Datei kann nicht umbenannt werden, da eine Datei mit demselben Namen bereits auf dem Server existiert. Bitte wählen Sie einen anderen Namen. + Checking rename permissions … Prüfe Umbenennungs-Rechte … + Could not rename file. Please make sure you are connected to the server. Datei konnte nicht umbenannt werden. Bitte stellen Sie sicher, dass Sie mit dem Server verbunden sind. + Could not rename local file. %1 Lokale Datei konnte nicht umbenannt werden. %1 - Error - Fehler - - + Failed to fetch permissions with error %1 Rechte konnten nicht abgerufen werden. Fehler: %1 + Filename contains illegal characters: %1 Dateiname enthält unzulässige Zeichen: %1 + Filename contains leading and trailing spaces. Dateiname enthält Leerzeichen am Anfang und am Ende. + Filename contains leading spaces. Dateiname enthält Leerzeichen am Anfang. + Filename contains trailing spaces. Dateiname enthält Leerzeichen am Ende. - Invalid filename - Ungültiger Dateiname - - - New filename - Neuer Dateiname - - - Please enter a new name for the file: - Bitte geben Sie einen neuen Namen für die Datei ein: - - + Rename file Datei umbenennen + The file "%1" could not be synced because the name contains characters which are not allowed on the server. Die Datei "%1" konnte nicht synchronisiert werden, da der Name Zeichen enthält, die auf dem Server unzulässig sind. + The file "%1" could not be synced because the name contains characters which are not allowed on this system. Die Datei "%1" konnte nicht synchronisiert werden, da der Name Zeichen enthält, die auf diesem System nicht zulässig sind. - The file could not be synced because it contains characters which are not allowed on this system. - Die Datei konnte nicht synchronisiert werden, da der Name Zeichen enthält, die auf diesem System nicht zulässig sind. - - + The following basenames are not allowed: %1 Die folgenden Basisnamen sind nicht erlaubt: %1 + The following characters are not allowed on the system: \ / : ? * " < > | leading/trailing spaces Die folgenden Zeichen sind auf dem System nicht zulässig: \ / : ? * " < > | führende/nachgestellte Leerzeichen + The following characters are not allowed: %1 Die folgenden Zeichen sind nicht erlaubt: %1 + The following file extensions are not allowed: %1 Die folgenden Dateierweiterungen sind nicht erlaubt: %1 + The following filenames are not allowed: %1 Die folgenden Dateinamen sind nicht erlaubt: %1 + Use invalid name Ungültigen Namen verwenden + You don't have the permission to rename this file. Please ask the author of the file to rename it. Sie haben nicht die Berechtigung, diese Datei umzubenennen. Bitte wenden Sie sich an den Autor der Datei, um sie umzubenennen. - + + + Error + Fehler + + + + Invalid filename + Ungültiger Dateiname + + + + New filename + Neuer Dateiname + + + + Please enter a new name for the file: + Bitte geben Sie einen neuen Namen für die Datei ein: + + + + The file could not be synced because it contains characters which are not allowed on this system. + Die Datei konnte nicht synchronisiert werden, da der Name Zeichen enthält, die auf diesem System nicht zulässig sind. + + OCC::LegalNotice + <p>Copyright 2017-2025 Nextcloud GmbH<br />Copyright 2012-2023 ownCloud GmbH</p> <p>Copyright 2017-2025 Nextcloud GmbH<br />Copyright 2012-2023 ownCloud GmbH</p> + <p>Licensed under the GNU General Public License (GPL) Version 2.0 or any later version.</p> <p>Lizensiert unter der GNU General Public License (GPL) Version 2.0 oder jeder neueren Version.</p> + Close Schliessen + + Legal notice Impressum @@ -2960,18 +3596,22 @@ Objekte, die gelöscht werden dürfen, werden gelöscht, wenn sie das Löschen e OCC::LogBrowser + Enable logging to temporary folder Protokollierung in temporären Ordner aktivieren + Log Output Protokoll-Ausgabe + Open folder Ordner öffnen + The client can write debug logs to a temporary folder. These logs are very helpful for diagnosing problems. Since log files can get large, the client will start a new one for each sync run and compress older ones. It will also delete log files after a couple of hours to avoid consuming too much disk space. If enabled, logs will be written to %1 @@ -2980,6 +3620,7 @@ Da die Protokolldateien sehr groß werden können, erstellt der Client für jede Wenn aktiviert, werden die Protokolle nach %1 geschrieben. + This setting persists across client restarts. Note that using any logging command line options will override this setting. Diese Einstellung bleibt über Client-Neustarts hinweg bestehen. @@ -2989,10 +3630,14 @@ Beachten Sie, dass die Verwendung von Befehlszeilenoptionen für die Protokollie OCC::Logger + + <nobr>File "%1"<br/>cannot be opened for writing.<br/><br/>The log output <b>cannot</b> be saved!</nobr> <nobr>Datei "%1"<br/>kann nicht zum Schreiben geöffnet werden.<br/><br/>Die Protokolldatei kann <b>nicht</b> gespeichert werden!</nobr> + + Error Fehler @@ -3000,26 +3645,32 @@ Beachten Sie, dass die Verwendung von Befehlszeilenoptionen für die Protokollie OCC::Mac::FileProviderEditLocallyJob + An error occurred during setup. Es ist ein Fehler während der Einrichtung aufgetreten. + Could not find a file for local editing. Make sure its path is valid and it is synced locally. Eine Datei für die lokale Bearbeitung konnte nicht gefunden werden. Stellen Sie sicher, dass der Pfad gültig ist und die Datei lokal synchronisiert wird. + Could not get file ID. Datei-ID konnte nicht abgerufen werden. + Could not get file identifier. Dateikennung konnte nicht abgerufen werden. + Could not start editing locally. Lokale Bearbeitung konnte nicht gestartet werden. + The file identifier is empty. Dateikennung ist leer @@ -3027,121 +3678,157 @@ Beachten Sie, dass die Verwendung von Befehlszeilenoptionen für die Protokollie OCC::NetworkSettings - Download Bandwidth - Download-Bandbreite - - + HTTP(S) proxy HTTP(S)-Proxy - Host - Host - - + Hostname of proxy server Hostname des Proxy-Servers + + Password for proxy server + Passwort für den Proxy-Server + + + + SOCKS5 proxy + SOCKS5-Proxy + + + + Username for proxy server + Benutzername für den Proxy-Server + + + + Download Bandwidth + Download-Bandbreite + + + + Host + Host + + + + KBytes/s KBytes/s + + Limit automatically Automatisch begrenzen + + Limit to Begrenzen auf + + Limit to 3/4 of estimated bandwidth Auf 3/4 der geschätzten Bandbreite begrenzen + Manually specify proxy Proxy manuell festlegen + + No limit Keine Begrenzung + No proxy Kein Proxy + Note: proxy settings have no effects for accounts on localhost Hinweis: Proxy-Einstellungen haben keine Auswirkungen für Konten auf localhost - Password for proxy server - Passwort für den Proxy-Server - - + Proxy Settings Proxy-Einstellungen + Proxy server requires authentication Proxy-Server erfordert eine Authentifizierung - SOCKS5 proxy - SOCKS5-Proxy - - + Upload Bandwidth Upload-Bandbreite + + + Use global settings Globale Einstellungen verwenden + Use system proxy System-Proxy verwenden - - Username for proxy server - Benutzername für den Proxy-Server - - + OCC::NSISUpdater + <p>A new version of the %1 Client is available but the updating process failed.</p><p><b>%2</b> has been downloaded. The installed version is %3. If you confirm restart and update, your computer may reboot to complete the installation.</p> <p>Eine neue Version des %1 - Clients ist verfügbar, aber die Aktualisierung ist fehlgeschlagen.</p><p><b>%2</b> wurde heruntergeladen. Die installierte Version ist %3. Wenn Sie Neustart und Aktualisieren bestätigen, wird Ihr Computer möglicherweise neu gestartet, um die Installation abzuschließen.</p> + <p>A new version of the %1 Client is available.</p><p><b>%2</b> is available for download. The installed version is %3.</p> <p>Eine neue Version des %1 - Clients ist verfügbar.</p><p><b>%2</b> steht zum Herunterladen bereit. Die installierte Version ist %3.</p> + Ask again later Versuchen Sie es später erneut + Get update Aktualisierung durchführen + New Version Available Eine neue Version ist verfügbar + Restart and update Neu starten und aktualisieren + Skip this time Dieses Mal überspringen + Update Failed Aktualisierung fehlgeschlagen + Update manually Manuell aktualisieren @@ -3149,54 +3836,67 @@ Beachten Sie, dass die Verwendung von Befehlszeilenoptionen für die Protokollie OCC::OCUpdater + %1 available. Restart application to start the update. %1-Version verfügbar. Anwendung zum Start der Aktualisierung neustarten. + A new update for %1 is about to be installed. The updater may ask for additional privileges during the process. Your computer may reboot to complete the installation. Eine neue Aktualisierung für %1 wird installiert. Während des Aktualisierungsvorgangs werden Sie eventuell aufgefordert, zusätzliche Berechtigungen zu gewähren. Ihr Computer wird möglicherweise neu gestartet, um die Installation abzuschließen. + Checking update server … Aktualisierungsserver wird überprüft … + Could not check for new updates. Auf neue Aktualisierungen kann nicht geprüft werden. + Could not download update. Please open %1 to download the update manually. Aktualisierung kann nicht heruntergeladen werden. Bitte öffnen Sie %1, um die Aktualisierung manuell herunterzuladen. + Could not download update. Please open <a href='%1'>%1</a> to download the update manually. Aktualisierung kann nicht heruntergeladen werden. Bitte öffnen Sie <a href='%1'>%1</a>, um die Aktualisierung manuell herunterzuladen. + Downloading %1 … Lade %1 herunter … + New %1 is available. Please open %2 to download the update. Neue Version von %1 vorhanden. Bitte öffnen Sie %2, um die Aktualisierung herunterzuladen. + New %1 is available. Please open <a href='%2'>%2</a> to download the update. Neue Version von %1 vorhanden. Bitte öffnen Sie <a href='%2'>%2</a>, um die Aktualisierung herunterzuladen. + New %1 update ready Neue %1 Aktualisierung verfügbar + No updates available. Your installation is at the latest version. Keine Aktualisierungen verfügbar. Ihre Installation ist auf dem neuesten Stand. + Update Check Aktualitätsprüfung + Update status is unknown: Did not check for new updates. Aktualisierungsstatus unbekannt: Auf neue Aktualisierungen wurde nicht geprüft. @@ -3204,55 +3904,72 @@ Beachten Sie, dass die Verwendung von Befehlszeilenoptionen für die Protokollie OCC::OwncloudAdvancedSetupPage + %1 folder "%2" is synced to local folder "%3" %1 Ordner "%2" wird mit dem lokalen Ordner "%3" synchronisiert + + %1 free space %1 gets replaced with the size and a matching unit. Example: 3 MB or 5 GB %1 freier Platz + + (%1) (%1) + + (experimental) (experimentell) + Connect Verbinden + In Finder's "Locations" sidebar section In der Finder-Seitenleiste unter "Orte" + Local Sync Folder Lokaler Ordner für die Synchronisierung + Sync the folder "%1" Ordner "%1" synchronisieren + There isn't enough free space in the local folder! Nicht genug freier Platz im lokalen Ordner vorhanden! + + Use &virtual files instead of downloading content immediately %1 &Virtuelle Dateien verwenden, anstatt den Inhalt sofort herunterzuladen %1 + Virtual files are not supported at the selected location Virtuelle Dateien werden an dem ausgewählten Speicherort nicht unterstützt + Virtual files are not supported for Windows partition roots as local folder. Please choose a valid subfolder under drive letter. Virtuelle Dateien werden für die Wurzel von Windows-Partitionen als lokaler Ordner nicht unterstützt. Bitte wählen Sie einen gültigen Unterordner unter dem Laufwerksbuchstaben. + Warning: The local folder is not empty. Pick a resolution! Achtung: Der lokale Ordner ist nicht leer. Bitte wählen Sie eine entsprechende Lösung! @@ -3260,26 +3977,32 @@ Beachten Sie, dass die Verwendung von Befehlszeilenoptionen für die Protokollie OCC::OwncloudConnectionMethodDialog + <html><head/><body><p>Failed to connect to the secure server address <em>%1</em>. How do you wish to proceed?</p></body></html> <html><head/><body><p>Sichere Verbindung zur Serveradresse <em>%1</em> fehlgeschlagen. Wie wollen Sie fortfahren?</p></body></html> + <html><head/><body><p>Failed to connect to the secure server address specified. How do you wish to proceed?</p></body></html> <html><head/><body><p>Verbindung mit der angegebenen sicheren Serveradresse fehlgeschlagen. Wie möchten Sie fortfahren?</p></body></html> + Configure client-side TLS certificate Clientseitiges TLS-Zertifikat konfigurieren. + Connection failed Verbindung fehlgeschlagen + Retry unencrypted over HTTP (insecure) Unverschlüsselt über HTTP versuchen (unsicher) + Select a different URL Andere URL wählen @@ -3287,71 +4010,88 @@ Beachten Sie, dass die Verwendung von Befehlszeilenoptionen für die Protokollie OCC::ownCloudGui + %1 (%2, %3) %1 (%2, %3) + %1: %2 Example text: "Nextcloud: Syncing 25MB (3 minutes left)" (%1 is the folder name to be synced, %2 a status message for that folder) %1: %2 + Account %1: %2 Konto %1: %2 + Account synchronization is disabled Konto-Synchronisierung ist deaktiviert + Checking for changes in local "%1" Nach Änderungen in lokalem "%1" suchen + Checking for changes in remote "%1" Nach Änderungen in entfernten "%1" suchen + Disconnected from %1 Von %1 getrennt + Disconnected from accounts: Verbindungen zu Konten getrennt: + Please sign in Bitte melden Sie sich an + Terms of service Nutzungsbedingungen + The server on account %1 runs an unsupported version %2. Using this client with unsupported server versions is untested and potentially dangerous. Proceed at your own risk. Der Server auf Konto %1 verwendet die nicht unterstützte Version %2. Die Verwendung dieses Clients mit nicht unterstützten Serverversionen ist ungetestet und potenziell gefährlich. Die Verwendung erfolgt auf eigene Gefahr. + There are no sync folders configured. Es wurden keine Synchronisierungsordner konfiguriert. + Unsupported Server Version Nicht unterstütze Serverversion + Your account %1 requires you to accept the terms of service of your server. You will be redirected to %2 to acknowledge that you have read it and agrees with it. Für Ihr Konto %1 müssen Sie die Nutzungsbedingungen Ihres Servers akzeptieren. Sie werden weitergeleitet an %2, um zu bestätigen, dass Sie die Nutzungsbedingungen gelesen haben und damit einverstanden sind. + macOS VFS for %1: A problem was encountered. macOS VFS für %1: Es ist ein Problem aufgetreten. + macOS VFS for %1: Last sync was successful. macOS VFS für %1: Letzte Synchronisierung war erfolgreich. + macOS VFS for %1: Sync is running. macOS VFS für %1: Synchronisierung läuft. @@ -3359,14 +4099,17 @@ Beachten Sie, dass die Verwendung von Befehlszeilenoptionen für die Protokollie OCC::OwncloudHttpCredsPage + &Email &E-Mail + Connect to %1 Verbinden mit %1 + Enter user credentials Geben Sie Ihre Benutzer-Anmeldeinformationen ein @@ -3374,6 +4117,8 @@ Beachten Sie, dass die Verwendung von Befehlszeilenoptionen für die Protokollie OCC::OwncloudPropagator + + Impossible to get modification time for file in conflict %1 Es ist nicht möglich, die Änderungszeit für die in Konflikt stehende Datei abzurufen %1 @@ -3381,18 +4126,22 @@ Beachten Sie, dass die Verwendung von Befehlszeilenoptionen für die Protokollie OCC::OwncloudSetupPage + &Next > &Weiter > + Could not load certificate. Maybe wrong password? Das Zertifikat konnte nicht geladen werden. Vielleicht ein falsches Passwort? + Server address does not seem to be valid Serveradresse scheint nicht gültig zu sein + The link to your %1 web interface when you open it in the browser. %1 will be replaced with the application name Der Link zu Ihrer %1 Webseite, wenn Sie diese im Browser öffnen. @@ -3401,118 +4150,149 @@ Beachten Sie, dass die Verwendung von Befehlszeilenoptionen für die Protokollie OCC::OwncloudSetupWizard + <font color="green"><b>File Provider-based account %1 successfully created!</b></font> <font color="green"><b>Dateianbieter-basiertes Konto %1 erstellt!</b></font> + <font color="green"><b>Local sync folder %1 successfully created!</b></font> <font color="green"><b>Lokaler Sync-Ordner %1 erstellt!</b></font> + <font color="green">Successfully connected to %1: %2 version %3 (%4)</font><br/><br/> <font color="green">Erfolgreich mit %1 verbunden: %2 Version %3 (%4)</font><br/><br/> + <p><font color="red">Remote folder creation failed probably because the provided credentials are wrong.</font><br/>Please go back and check your credentials.</p> <p><font color="red">Die Erstellung des entfernten Ordners ist fehlgeschlagen, vermutlich sind die angegebenen Zugangsdaten falsch.</font><br/>Bitte gehen Sie zurück und überprüfen Sie Ihre Zugangsdaten.</p> + A sync connection from %1 to remote directory %2 was set up. Eine Synchronisierungsverbindung für Ordner %1 zum entfernten Ordner %2 wurde eingerichtet. + Access forbidden by server. To verify that you have proper access, <a href="%1">click here</a> to access the service with your browser. Zugang vom Server nicht erlaubt. <a href="%1">Klicken Sie hier</a> zum Zugriff auf den Dienst mithilfe Ihres Browsers, so dass Sie sicherstellen können, dass Ihr Zugang ordnungsgemäß funktioniert. + Cannot remove and back up the folder because the folder or a file in it is open in another program. Please close the folder or file and hit retry or cancel the setup. Der Ordner kann nicht entfernt und gesichert werden, da der Ordner oder einer seiner Dateien in einem anderen Programm geöffnet ist. Bitte schließen Sie den Ordner oder die Datei und versuchen Sie es erneut oder beenden Sie die Installation. + Connection to %1 could not be established. Please check again. Die Verbindung zu %1 konnte nicht hergestellt werden. Bitte prüfen Sie die Einstellungen erneut. + Could not create local folder %1 Der lokale Ordner %1 konnte nicht erstellt werden + Creating local sync folder %1 … Lokaler Ordner %1 für die Synchronisierung wird erstellt … + Error: %1 Fehler: %1 + Failed to connect to %1 at %2:<br/>%3 Die Verbindung zu %1 auf %2 konnte nicht hergestellt werden: <br/>%3 + Folder rename failed Ordner umbenennen fehlgeschlagen. + Invalid URL Ungültige URL + Local sync folder %1 already exists, setting it up for sync.<br/><br/> Lokaler Sync-Ordner %1 existiert bereits, aktiviere Synchronistation.<br/><br/> + No remote folder specified! Kein entfernter Ordner angegeben! + OK OK + Remote folder %1 created successfully. Entfernter Ordner %1 erstellt. + + Remote folder %1 creation failed with error <tt>%2</tt>. Entfernter Ordner %1 konnte mit folgendem Fehler nicht erstellt werden: <tt>%2</tt>. + Successfully connected to %1! Erfolgreich mit %1 verbunden! + The authenticated request to the server was redirected to "%1". The URL is bad, the server is misconfigured. Die Authentifizierungs-Anfrage an den Server wurde weitergeleitet an "%1". Diese Adresse ist ungültig, der Server ist falsch konfiguriert. + + The folder creation resulted in HTTP error code %1 Das Erstellen des Ordners erzeugte den HTTP-Fehler-Code %1 + The remote folder %1 already exists. Connecting it for syncing. Der Ordner %1 ist auf dem Server bereits vorhanden. Verbinde zur Synchronisierung. + The remote folder creation failed because the provided credentials are wrong!<br/>Please go back and check your credentials.</p> Die Erstellung des entfernten Ordners ist fehlgeschlagen, weil die angegebenen Zugangsdaten falsch sind. <br/>Bitte gehen Sie zurück und überprüfen Sie die Zugangsdaten.</p> + There was an invalid response to an authenticated WebDAV request Ungültige Antwort auf eine WebDAV-Authentifizierungs-Anfrage + Timeout while trying to connect to %1 at %2. Zeitüberschreitung beim Verbindungsversuch mit %1 unter %2. + Trying to connect to %1 at %2 … Verbindungsversuch mit %1 unter %2 … + creating folder on Nextcloud: %1 Erstelle Ordner auf Nextcloud: %1 + failed. fehlgeschlagen. @@ -3520,30 +4300,37 @@ Beachten Sie, dass die Verwendung von Befehlszeilenoptionen für die Protokollie OCC::OwncloudWizard + Add %1 account %1 Konto hinzufügen + Cancel Abbrechen + Enable experimental feature? Experimentelle Funktion aktivieren? + Enable experimental placeholder mode Experimentellen Platzhaltermodus aktivieren + Skip folders configuration Ordner-Konfiguration überspringen + Stay safe Bleiben Sie sicher + When the "virtual files" mode is enabled no files will be downloaded initially. Instead, a tiny "%1" file will be created for each file that exists on the server. The contents can be downloaded by running these files or by using their context menu. The virtual files mode is mutually exclusive with selective sync. Currently unselected folders will be translated to online-only folders and your selective sync settings will be reset. @@ -3563,10 +4350,12 @@ Dies ist ein neuer, experimenteller Modus. Wenn Sie sich entscheiden, ihn zu ver OCC::PasswordInputDialog + Password for share required Passwort für die Freigabe erforderlich + Please enter a password for your share: Bitte vergeben sie für die Freigabe ein Passwort: @@ -3574,6 +4363,7 @@ Dies ist ein neuer, experimenteller Modus. Wenn Sie sich entscheiden, ihn zu ver OCC::PollJob + Invalid JSON reply from the poll URL Ungültige JSON-Antwort von der Poll-URL @@ -3581,165 +4371,210 @@ Dies ist ein neuer, experimenteller Modus. Wenn Sie sich entscheiden, ihn zu ver OCC::ProcessDirectoryJob + %1 name containing the character "%2" is not supported on this file system. folder or file impossible to sync due to an invalid name, placeholders will be file or folder and the invalid character %1 Namen, die das Zeichen "%2" enthalten, werden von diesem Dateisystem nicht unterstützt. + %1 name contains at least one invalid character %1 Der Name enthält mindestens ein ungültiges Zeichen + %1 name is a reserved name on this file system. %1 Der Name ist in diesem Dateisystem ein reservierter Name. + + + + Cannot be renamed or uploaded. Kann nicht umbenannt oder hochgeladen werden. + Cannot modify encrypted item because the selected certificate is not valid. Das verschlüsselte Element kann nicht geändert werden, da das ausgewählte Zertifikat nicht gültig ist. + Cannot sync due to invalid modification time Synchronisierung wegen ungültiger Änderungszeit nicht möglich + Case Clash Conflict: Server file downloaded and renamed to avoid clash. Problem der Groß- und Kleinschreibung: Serverdatei heruntergeladen und umbenannt, um Konflikte zu vermeiden. + Conflict: Server version downloaded, local copy renamed and not uploaded. Konflikt: Serverversion heruntergeladen, lokale Kopie umbenannt und nicht hochgeladen. + Could not upload file, because it is open in "%1". Datei konnte nicht hochgeladen werden, da sie in "%1" geöffnet ist. + Error while deleting file record %1 from the database Fehler beim Löschen des Dateidatensatzes %1 aus der Datenbank + Error while reading the database Fehler beim Lesen der Datenbank + File name of folder entity to use when warning about invalid name Datei + File has extension reserved for virtual files. Die Endung der Datei ist für virtuelle Dateien reserviert. + File is listed on the ignore list. Die Datei ist in der Ignorierliste aufgeführt. + File names ending with a period are not supported on this file system. Dateinamen, die mit einem Punkt enden, werden von diesem Dateisystem nicht unterstützt. + File/Folder is ignored because it's hidden. Datei/Ordner wird ignoriert, weil sie unsichtbar ist. + Filename contains leading and trailing spaces. Dateiname enthält Leerzeichen am Anfang und am Ende. + Filename contains leading spaces. Dateiname enthält Leerzeichen am Anfang. + Filename contains trailing spaces. Dateiname enthält Leerzeichen am Ende. + Filename is too long. Der Dateiname ist zu lang. + Folder name of folder entity to use when warning about invalid name Ordner + Ignored because of the "choose what to sync" blacklist Ignoriert wegen der "Choose what to sync"-Blacklist + + Moved to invalid target, restoring Auf ungültiges Ziel verschoben, wiederherstellen. + Not allowed because you don't have permission to add files in that folder Nicht erlaubt, da Sie keine Berechtigung zum Hinzufügen von Dateien in diesen Ordner haben. + + Not allowed because you don't have permission to add subfolders to that folder Nicht erlaubt, da Sie nicht die Berechtigung haben, Unterordner zu diesem Ordner hinzuzufügen. + Not allowed to remove, restoring Entfernen nicht erlaubt, wiederherstellen. + Not allowed to upload this file because it is read-only on the server, restoring Das Hochladen dieser Datei ist nicht erlaubt, da die Datei auf dem Server schreibgeschützt ist. Wiederherstellen. + Reason: the entire filename is forbidden. Grund: Der gesamte Dateiname ist unzulässig. + Reason: the file has a forbidden extension (.%1). Grund: Die Datei hat eine unzulässige Erweiterung (.%1). + Reason: the filename contains a forbidden character (%1). Grund: Der Dateiname enthält ein unzulässiges Zeichen (%1). + Reason: the filename has a forbidden base name (filename start). Grund: Der Dateiname hat einen unzulässigen Basisnamen (Beginn des Dateinamens). + Server replied with an error while reading directory "%1" : %2 Der Server hat während des Lesens des Verzeichnisses "%1" mit einem Fehler geantwortet: %2 + Server reported no %1 Server meldet keine %1 + Stat failed. Stat fehlgeschlagen. + Symbolic links are not supported in syncing. Symbolische Verknüpfungen werden bei der Synchronisierung nicht unterstützt. + The filename cannot be encoded on your file system. Der Dateiname kann auf Ihrem Dateisystem nicht entschlüsselt werden. + The filename is blacklisted on the server. Der Dateiname steht auf dem Server auf einer schwarzen Liste. + file id Datei-ID + permission Berechtigung + size Größe @@ -3747,26 +4582,38 @@ Dies ist ein neuer, experimenteller Modus. Wenn Sie sich entscheiden, ihn zu ver OCC::PropagateDirectory + Could not delete file %1 from local DB Datei %1 konnte nicht aus der lokalen Datenbank gelöscht werden + Error updating metadata due to invalid modification time Fehler beim Aktualisieren der Metadaten aufgrund einer ungültigen Änderungszeit + Error updating metadata: %1 Fehler beim Aktualisieren der Metadaten: %1 + File is currently in use Datei ist aktuell in Benutzung + + + + + + The folder %1 cannot be made read-only: %2 Der Ordner %1 kann nicht schreibgeschützt werden: %2 + + unknown exception Unbekannter Ausnahmefehler @@ -3774,58 +4621,75 @@ Dies ist ein neuer, experimenteller Modus. Wenn Sie sich entscheiden, ihn zu ver OCC::PropagateDownloadFile + + Could not delete file record %1 from local DB Der Dateidatensatz %1 konnte nicht aus der lokalen Datenbank gelöscht werden + Could not get file %1 from local DB Datei %1 konnte nicht aus der lokalen Datenbank abgerufen werden + Error updating metadata: %1 Fehler beim Aktualisieren der Metadaten: %1 + File %1 can not be downloaded because of a local file name clash! Die Datei %1 kann aufgrund eines Konfliktes mit dem lokalen Dateinamen nicht herunter geladen werden! + File %1 cannot be downloaded because encryption information is missing. Die Datei %1 kann nicht heruntergeladen werden, da die Verschlüsselungsinformationen fehlen. + File %1 downloaded but it resulted in a local file name clash! Datei %1 heruntergeladen, aber dies führte zu einem lokalen Dateinamenskonflikt! + + File %1 has invalid modified time reported by server. Do not save it. Datei %1 hat eine ungültige Änderungszeit, die vom Server gemeldet wurde. Speichern Sie sie nicht. + + File has changed since discovery Datei ist seit der Entdeckung geändert worden + File was deleted from server Die Datei wurde vom Server gelöscht + Free space on disk is less than %1 Der freie Speicher auf der Festplatte ist weniger als %1 + The download would reduce free local disk space below the limit Das Herunterladen würde den lokalen freien Speicherplatz unter die Grenze reduzieren + The downloaded file is empty, but the server said it should have been %1. Die heruntergeladene Datei ist leer, obwohl der Server %1 als Größe übermittelt hat. + The file %1 is currently in use Die Datei %1 ist aktuell in Benutzung + The file could not be downloaded completely. Die Datei konnte nicht vollständig heruntergeladen werden. @@ -3833,10 +4697,12 @@ Dies ist ein neuer, experimenteller Modus. Wenn Sie sich entscheiden, ihn zu ver OCC::PropagateItemJob + ; Restoration Failed: %1 ; Wiederherstellung fehlgeschlagen: %1 + A file or folder was removed from a read only share, but restoring failed: %1 Eine Datei oder ein Ordner wurde von einer Nur-Lese-Freigabe wiederhergestellt, aber die Wiederherstellung ist mit folgendem Fehler fehlgeschlagen: %1 @@ -3844,30 +4710,39 @@ Dies ist ein neuer, experimenteller Modus. Wenn Sie sich entscheiden, ihn zu ver OCC::PropagateLocalMkdir + Could not create folder %1 Ordner %1 konnte nicht erstellt werden + Error updating metadata: %1 Fehler beim Aktualisieren der Metadaten: %1 + Folder %1 cannot be created because of a local file or folder name clash! Ordner %1 kann aufgrund einer lokalen Datei- oder Ordnernamenskollision nicht erstellt werden! + The file %1 is currently in use Die Datei %1 ist aktuell in Benutzung + + + The folder %1 cannot be made read-only: %2 Der Ordner %1 kann nicht schreibgeschützt werden: %2 + could not delete file %1, error: %2 Konnte Datei %1 nicht löschen. Fehler: %2 + unknown exception Unbekannter Ausnahmefehler @@ -3875,14 +4750,19 @@ Dies ist ein neuer, experimenteller Modus. Wenn Sie sich entscheiden, ihn zu ver OCC::PropagateLocalRemove + Could not delete file record %1 from local DB Der Dateidatensatz %1 konnte nicht aus der lokalen Datenbank gelöscht werden + Could not remove %1 because of a local file name clash %1 kann aufgrund eines Konfliktes mit dem lokalen Dateinamen nicht entfernt werden + + + Temporary error when removing local item removed from server. Vorübergehender Fehler beim Entfernen eines vom Server entfernten lokalen Objekts. @@ -3890,38 +4770,49 @@ Dies ist ein neuer, experimenteller Modus. Wenn Sie sich entscheiden, ihn zu ver OCC::PropagateLocalRename + Could not delete file record %1 from local DB Der Dateidatensatz %1 konnte nicht aus der lokalen Datenbank gelöscht werden + + Could not get file %1 from local DB Datei %1 konnte nicht aus der lokalen Datenbank abgerufen werden + + Error setting pin state Fehler beim Setzen des PIN-Status + Error updating metadata: %1 Fehler beim Aktualisieren der Metadaten: %1 + Failed to propagate directory rename in hierarchy Die Umbenennung des Verzeichnisses in der Hierarchie konnte nicht weitergegeben werden + Failed to rename file Datei konnte nicht umbenannt werden + File %1 downloaded but it resulted in a local file name clash! Datei %1 heruntergeladen, aber dies führte zu einem lokalen Dateinamenskonflikt! + Folder %1 cannot be renamed because of a local file or folder name clash! Ordner %1 kann nicht umbenannt werden, da ein Konflikt zwischen lokalen Datei- oder Ordnernamen besteht! + The file %1 is currently in use Die Datei %1 ist aktuell in Benutzung @@ -3929,10 +4820,12 @@ Dies ist ein neuer, experimenteller Modus. Wenn Sie sich entscheiden, ihn zu ver OCC::PropagateRemoteDelete + Could not delete file record %1 from local DB Der Dateidatensatz %1 konnte nicht aus der lokalen Datenbank gelöscht werden + Wrong HTTP code returned by server. Expected 204, but received "%1 %2". Es wurde ein falscher HTTP-Status-Code vom Server gesendet. Erwartet wurde 204, aber gesendet wurde "%1 %2". @@ -3940,6 +4833,7 @@ Dies ist ein neuer, experimenteller Modus. Wenn Sie sich entscheiden, ihn zu ver OCC::PropagateRemoteDeleteEncryptedRootFolder + Wrong HTTP code returned by server. Expected 204, but received "%1 %2". Falscher HTTP-Code vom Server zurückgegeben. 204 erwartet, aber "%1 %2" erhalten. @@ -3947,18 +4841,22 @@ Dies ist ein neuer, experimenteller Modus. Wenn Sie sich entscheiden, ihn zu ver OCC::PropagateRemoteMkdir + Error writing metadata to the database: %1 Fehler beim Schreiben der Metadaten in die Datenbank: %1 + Failed to encrypt a folder %1 Ordner konnte nicht verschlüsselt werden %1 + The file %1 is currently in use Die Datei %1 ist aktuell in Benutzung + Wrong HTTP code returned by server. Expected 201, but received "%1 %2". Es wurde ein falscher HTTP-Status-Code vom Server gesendet. Erwartet wurde 201, aber gesendet wurde "%1 %2". @@ -3966,34 +4864,44 @@ Dies ist ein neuer, experimenteller Modus. Wenn Sie sich entscheiden, ihn zu ver OCC::PropagateRemoteMove + Could not delete file record %1 from local DB Der Dateidatensatz %1 konnte nicht aus der lokalen Datenbank gelöscht werden + Could not get file %1 from local DB Datei %1 konnte nicht aus der lokalen Datenbank abgerufen werden + Could not rename %1 to %2, error: %3 Konnte %1 nicht nach %2 umbenennen. Fehler: %3 + Error setting pin state Fehler beim Setzen des PIN-Status + + Error updating metadata: %1 Fehler beim Aktualisieren der Metadaten: %1 + Error writing metadata to the database Fehler beim Schreiben der Metadaten in die Datenbank + + The file %1 is currently in use Die Datei %1 ist aktuell in Benutzung + Wrong HTTP code returned by server. Expected 201, but received "%1 %2". Es wurde ein falscher HTTP-Status-Code vom Server gesendet. Erwartet wurde 201, aber gesendet wurde "%1 %2". @@ -4001,46 +4909,60 @@ Dies ist ein neuer, experimenteller Modus. Wenn Sie sich entscheiden, ihn zu ver OCC::PropagateUploadFileCommon + Error updating metadata: %1 Fehler beim Aktualisieren der Metadaten: %1 + Failed to unlock encrypted folder. Verschlüsselter Ordner konnte nicht entsperrt werden. + Failed to upload encrypted file. Verschlüsselte Datei konnte nicht hochgeladen werden. + File %1 cannot be uploaded because another file with the same name, differing only in case, exists Die Datei %1 kann nicht hochgeladen werden, da eine andere Datei mit dem selben Namen, nur unterschiedlicher Groß-/Kleinschreibung, existiert + + + File %1 has invalid modification time. Do not upload to the server. Die Datei %1 hat eine ungültige Änderungszeit. Nicht auf den Server hochladen. + File Removed (start upload) %1 Datei entfernt (starte Hochladen) %1 + Local file changed during sync. Eine lokale Datei wurde während der Synchronisierung geändert. + Local file changed during syncing. It will be resumed. Lokale Datei hat sich während der Synchronisierung geändert. Die Synchronisierung wird wiederaufgenommen. + The file %1 is currently in use Die Datei %1 ist aktuell in Benutzung + Unable to upload an item with invalid characters Ein Element mit ungültigen Zeichen kann nicht hochgeladen werden + + Upload of %1 exceeds the quota for the folder Das Hochladen von %1 überschreitet das Speicherkontingent des Ordners @@ -4048,26 +4970,32 @@ Dies ist ein neuer, experimenteller Modus. Wenn Sie sich entscheiden, ihn zu ver OCC::PropagateUploadFileNG + Local file changed during sync. Eine lokale Datei wurde während der Synchronisierung geändert. + Missing ETag from server Fehlender ETag vom Server + Missing File ID from server Fehlende Datei-ID vom Server + Poll URL missing Poll-URL fehlt + The local file was removed during sync. Die lokale Datei wurde während der Synchronisierung entfernt. + Unexpected return code from server (%1) Unerwarteter Rückgabe-Code Antwort vom Server (%1) @@ -4075,18 +5003,22 @@ Dies ist ein neuer, experimenteller Modus. Wenn Sie sich entscheiden, ihn zu ver OCC::PropagateUploadFileV1 + Local file changed during sync. Eine lokale Datei wurde während der Synchronisierung geändert. + Poll URL missing Poll-URL fehlt + The local file was removed during sync. Die lokale Datei wurde während der Synchronisierung entfernt. + The server did not acknowledge the last chunk. (No e-tag was present) Der Server hat den letzten Block nicht bestätigt. (Kein E-Tag vorhanden) @@ -4094,22 +5026,27 @@ Dies ist ein neuer, experimenteller Modus. Wenn Sie sich entscheiden, ihn zu ver OCC::ProxyAuthDialog + Password: Passwort: + Proxy authentication required Proxy-Authentifzierung erforderlich + Proxy: Proxy: + The proxy server needs a username and password. Der Proxy-Server benötigt Benutzername und Passwort + Username: Benutzername: @@ -4117,6 +5054,7 @@ Dies ist ein neuer, experimenteller Modus. Wenn Sie sich entscheiden, ihn zu ver OCC::SelectiveSyncDialog + Choose What to Sync Zu synchronisierende Elemente auswählen @@ -4124,26 +5062,33 @@ Dies ist ein neuer, experimenteller Modus. Wenn Sie sich entscheiden, ihn zu ver OCC::SelectiveSyncWidget + An error occurred while loading the list of sub folders. Es ist ein Fehler während des Ladens der Liste der Unterordner aufgetreten. + Deselect remote folders you do not wish to synchronize. Entfernte Ordner abwählen, die nicht synchronisiert werden sollen. + Loading … Lade … + Name Name + + No subfolders currently on the server. Aktuell befinden sich keine Unterordner auf dem Server. + Size Größe @@ -4151,6 +5096,7 @@ Dies ist ein neuer, experimenteller Modus. Wenn Sie sich entscheiden, ihn zu ver OCC::ServerNotificationHandler + Reply Antworten @@ -4158,14 +5104,17 @@ Dies ist ein neuer, experimenteller Modus. Wenn Sie sich entscheiden, ihn zu ver OCC::sesSnackBar + Error Fehler + Success Erfolg + Warning Warnung @@ -4173,27 +5122,33 @@ Dies ist ein neuer, experimenteller Modus. Wenn Sie sich entscheiden, ihn zu ver OCC::SettingsDialog + %1 Settings This name refers to the application name e.g Nextcloud %1-Einstellungen + Account Konto + General Allgemein + Network Netzwerk + New account Neues Konto + Settings Einstellungen @@ -4201,19 +5156,24 @@ Dies ist ein neuer, experimenteller Modus. Wenn Sie sich entscheiden, ihn zu ver OCC::ShareeModel + %1 (%2) sharee (shareWithAdditionalInfo) %1 (%2) + Global search results Globale Suchergebnisse + No results found Keine Ergebnisse gefunden + + Search globally Global suchen @@ -4221,6 +5181,7 @@ Dies ist ein neuer, experimenteller Modus. Wenn Sie sich entscheiden, ihn zu ver OCC::ShareManager + Error Fehler @@ -4228,38 +5189,47 @@ Dies ist ein neuer, experimenteller Modus. Wenn Sie sich entscheiden, ihn zu ver OCC::ShareModel + %1 days %1 Tage + 1 day 1 Tag + Could not find local folder for %1 Lokaler Ordner für %1 nicht gefunden + Internal link Interner Link + Link share Link teilen + Secure file drop Sichere Dateiablage + Secure file drop link Sicherer Link zur Dateiablage + Share link Freigabe-Link + Today Heute @@ -4267,22 +5237,28 @@ Dies ist ein neuer, experimenteller Modus. Wenn Sie sich entscheiden, ihn zu ver OCC::SocketApi + + Activity Aktivität + Context menu share Kontextmenü Freigabe + Copy internal link Internen Link kopieren + Copy private link to clipboard Privater Link in die Zwischenablage kopiert + Could not encrypt the following folder: "%1". Server replied with error: %2 @@ -4291,18 +5267,22 @@ Server replied with error: %2 Server antwortete mit Fehler: %2 + Delete Löschen + Delete local changes Lokale Änderungen löschen + Encrypt Verschlüsseln + Expires in %1 minutes remaining time before lock expires @@ -4311,82 +5291,104 @@ Server antwortete mit Fehler: %2 + Failed to encrypt folder Ordner konnte nicht verschlüsselt werden + Failed to encrypt folder at "%1" Ordner unter "%1" konnte nicht verschlüsselt werden + Folder encrypted successfully Ordner verschlüsselt + I shared something with you Ich habe etwas mit Ihnen geteilt + Leave this share Freigabe verlassen + Lock file Datei sperren + Locked by %1 Gesperrt von %1 + Move and rename … Verschieben und umbenennen … + Move and upload … Verschieben und hochladen … + Move, rename and upload … Verschieben, umbenennen und hochladen … + + Open in browser Im Browser öffnen + Resharing this file is not allowed Weiterteilen dieser Datei ist nicht erlaubt + Resharing this folder is not allowed Weiterteilen dieses Ordners ist nicht erlaubt + Resolve conflict … Konflikt lösen… + Select new location … Neuen Ort auswählen … + Send private link by email … Privaten Link als E-Mail verschicken … + + Share options Freigabeoptionen + The account %1 does not have end-to-end encryption configured. Please configure this in your account settings to enable folder encryption. Für das Konto %1 ist keine Ende-zu-Ende-Verschlüsselung konfiguriert. Bitte konfigurieren Sie diese in Ihren Kontoeinstellungen, um die Ordnerverschlüsselung zu aktivieren. + The following folder was encrypted successfully: "%1" Der folgende Ordner wurde verschlüsselt: "%1" + Unlock file Datei entsperren @@ -4394,98 +5396,122 @@ Server antwortete mit Fehler: %2 OCC::SslButton + %1 %1 + %1 (self-signed) %1 (selbst signiert) + <h3>Certificate Details</h3> <h3>Zertifikatdetails</h3> + <h3>Fingerprints</h3> <h3>Fingerabdrücke</h3> + <h3>Issuer</h3> <h3>Aussteller</h3> + <p><b>Note:</b> This certificate was manually approved</p> <p><b>Hinweis:</b> Dieses Zertifikat wurde manuell bestätigt</p> + Certificate information: Zertifikatsinformation: + Common Name (CN): Gemeinsamer Name (CN): + Country: Land: + Expires on: Ablaufdatum: + Issued on: Ausgestellt am: + Issuer: Aussteller: + No support for SSL session tickets/identifiers Keine Unterstützung für SSL session tickets + Organization (O): Organisation (O): + Organizational Unit (OU): Organisationseinheit (OU): + SHA-1: SHA-1: + SHA-256: SHA-256: + Serial: Seriennummer: + Server version: %1 Serverversion: %1 + State/Province: Staat/Provinz: + Subject Alternative Names: Subject Alternative Names: + The connection is not secure Die Verbindung ist nicht sicher + This connection is NOT secure as it is not encrypted. Diese Verbindung ist NICHT sicher, da diese nicht verschlüsselt ist. + This connection is encrypted using %1 bit %2. Diese Verbindung ist verschlüsselt mit %1 Bit %2. @@ -4493,122 +5519,156 @@ Server antwortete mit Fehler: %2 OCC::SslErrorDialog + + + &lt;not specified&gt; &lt;nicht angegeben&gt; + Additional errors: Zusätzliche Fehler: + Cannot connect securely to <i>%1</i>: Kann keine sichere Verbindung zu <i>%1</i> herstellen: + + Country: %1 Land: %1 + Effective Date: %1 Datum des Inkrafttretens: %1 + Expiration Date: %1 Ablaufdatum: %1 + Fingerprint (SHA-256): <tt>%1</tt> Fingerabdruck (SHA-256): <tt>%1</tt> + Fingerprint (SHA-512): <tt>%1</tt> Fingerabdruck (SHA-512): <tt>%1</tt> + Fingerprint (SHA1): <tt>%1</tt> Fingerabdruck (SHA1): <tt>%1</tt> + Issuer: %1 Aussteller: %1 + + Organization: %1 Organisation: %1 - Trust this certificate anyway - Diesem Zertifikat trotzdem vertrauen - - + + Unit: %1 Einheit: %1 + Untrusted Certificate Nicht vertrauenswürdiges Zertifikat + with Certificate %1 mit Zertifikat %1 - + + + Trust this certificate anyway + Diesem Zertifikat trotzdem vertrauen + + OCC::SyncEngine + %1 (skipped due to earlier error, trying again in %2) %1 (übersprungen aufgrund des früheren Fehlers, erneuter Versuch in %2) + Cannot open the sync journal Synchronisierungsprotokoll kann nicht geöffnet werden + Could not set file record to local DB: %1 Der Dateidatensatz konnte nicht in die lokale Datenbank eingestellt werden: %1 + Could not update file metadata: %1 Die Metadaten der Datei konnten nicht aktualisiert werden: %1 + Could not update file: %1 Datei konnte nicht aktualisiert werden: %1 + Could not update virtual file metadata: %1 Metadaten der virtuellen Datei konnten nicht aktualisiert werden: %1 + Disk space is low: Downloads that would reduce free space below %1 were skipped. Der freie Speicherplatz wird knapp: Downloads, die den freien Speicher unter %1 reduzieren, wurden ausgelassen. + Only %1 are available, need at least %2 to start Placeholders are postfixed with file sizes using Utility::octetsToString() Nur %1 sind verfügbar. Zum Beginnen werden mindestens %2 benötigt. + There is insufficient space available on the server for some uploads. Auf dem Server ist für einige Dateien zum Hochladen nicht genug Platz. + Unable to open or create the local sync database. Make sure you have write access in the sync folder. Öffnen oder erstellen der Sync-Datenbank nicht möglich. Bitte sicherstellen, dass Schreibrechte für den zu synchronisierenden Ordner existieren. + Unable to read from the sync journal. Fehler beim Einlesen des Synchronisierungsprotokolls. + Unable to read the blacklist from the local database Fehler beim Einlesen der Blacklist aus der lokalen Datenbank + Unresolved conflict. Ungelöster Konflikt. + Using virtual files with suffix, but suffix is not set Virtuelle Dateien mit Endung verwenden, aber Endung ist nicht gesetzt. @@ -4616,54 +5676,70 @@ Server antwortete mit Fehler: %2 OCC::SyncStatusSummary + %1 of %2 %1 von %2 + %1 of %2 · %3 left %1 von %2 · %3 verbleiben + + + All synced! Alles synchronisiert! + Checking folder changes Prüfe Ordneränderungen + + Offline Offline + See below for errors Warnungen siehe unten + See below for warnings Warnungen siehe unten + Some files could not be synced! Einige Dateien konnten nicht synchronisiert werden! + Some files couldn't be synced! Einige Dateien konnten nicht synchronisiert werden! + Sync paused Synchronisierung pausiert + Syncing Synchronisiere + Syncing changes Synchronisiere Änderungen + Syncing file %1 of %2 Synchronisiere Datei %1 von %2 @@ -4671,42 +5747,54 @@ Server antwortete mit Fehler: %2 OCC::Systray + Add account Konto hinzufügen + Download Herunterladen + Exit %1 %1 beenden + Help Hilfe + Open main dialog Hauptfenster öffnen + + Pause sync Synchronisierung pausieren + Pause sync for all Synchronisierung für alle pausieren + + Resume sync Synchronisierung fortsetzen + Resume sync for all Synchronisierung für alle fortsetzen + Settings Einstellungen @@ -4714,22 +5802,27 @@ Server antwortete mit Fehler: %2 OCC::TermsOfServiceCheckWidget + Copy Link Link kopieren + Link copied to clipboard. Link in die Zwischenablage kopiert. + Open Browser Browser öffnen + Polling Abfrage + Waiting for terms to be accepted Es wird auf die Bestätigung der Nutzungsbedingungen gewartet @@ -4737,19 +5830,23 @@ Server antwortete mit Fehler: %2 OCC::Theme + %1 Desktop Client Version %2 (%3) %1 is application name. %2 is the human version string. %3 is the operating system name. %1 Desktop-Client Version %2 (%3) + <p><small>Using virtual files plugin: %1</small></p> <p><small>Plugin für virtuelle Dateien: %1</small></p> + <p>This release was supplied by %1.</p> <p>Diese Version wird von %1 bereitgestellt</p>. + easy/0118 easy/0148 @@ -4757,18 +5854,22 @@ Server antwortete mit Fehler: %2 OCC::UnifiedSearchResultsListModel + Failed to fetch providers. Anbieter konnten nicht abgerufen werden. + Failed to fetch search providers for '%1'. Error: %2 Suchanbieter für '%1' konnte nicht abgerufen werden. Fehler: %2 + Search has failed for '%1'. Error: %2 Suche nach '%1' fehlgeschlagen. Fehler: %2 + Search has failed for '%2'. Suche nach '%2' fehlgeschlagen. @@ -4776,14 +5877,17 @@ Server antwortete mit Fehler: %2 OCC::UpdateE2eeFolderMetadataJob + Failed to finalize item. Fehler beim Fertigstellen des Elements. + Failed to unlock encrypted folder. Verschlüsselter Ordner konnte nicht entsperrt werden. + Failed to update folder metadata. Ordner-Metadaten konnten nicht aktualisiert werden @@ -4791,33 +5895,43 @@ Server antwortete mit Fehler: %2 OCC::UpdateE2eeFolderUsersMetadataJob + Could not add or remove user %1 to access folder %2 Benutzer %1 konnte nicht zum Zugriffsordner %2 hinzugefügt oder entfernt werden + Could not fetch public key for user %1 Öffentlicher Schlüssel für den Benutzer %1 konnte nicht abgerufen werden + Could not find root encrypted folder for folder %1 Verschlüsselter Stammordner für den Ordner %1 nicht gefunden + + + + + + + + + Error updating metadata for a folder %1 Fehler beim Aktualisieren der Metadaten für einen Ordner %1 + Failed to unlock a folder. Ordner konnte nicht entsperrt werden OCC::User - - %1 notifications - %1 Benachrichtigungen - + %n notification(s) %n Benachrichtigung @@ -4825,30 +5939,38 @@ Server antwortete mit Fehler: %2 + End-to-end certificate needs to be migrated to a new one Das Ende-zu-Ende-Zertifikat muss auf ein neues migriert werden + Open Nextcloud Assistant in browser Nextcloud Assistant im Browser öffnen + Open Nextcloud Talk in browser Nextcloud-Talk im Browser öffnen + Rename file Datei umbenennen + + Resolve conflict Konflikt lösen + Retry all uploads Alle Uploads neu starten + Trigger the migration Starten der Migration @@ -4856,18 +5978,22 @@ Server antwortete mit Fehler: %2 OCC::UserModel + <p>Do you really want to remove the connection to the account <i>%1</i>?</p><p><b>Note:</b> This will <b>not</b> delete any files.</p> <p>Möchten Sie wirklich die Verbindung zum Konto <i>%1</i> entfernen?</p><p><b>Hinweis:</b> Es werden <b>keine</b> Dateien gelöscht.</p> + Cancel Abbrechen + Confirm Account Removal Kontenentfernung bestätigen + Remove connection Verbindung entfernen @@ -4875,6 +6001,7 @@ Server antwortete mit Fehler: %2 OCC::UserStatusSelectorModel + %1 days %1 Tag @@ -4882,6 +6009,7 @@ Server antwortete mit Fehler: %2 + %1 hours %1 Stunde @@ -4889,6 +6017,7 @@ Server antwortete mit Fehler: %2 + %1 minutes %1 Minute @@ -4896,62 +6025,81 @@ Server antwortete mit Fehler: %2 + 1 day 1 Tag + + 1 hour 1 Stunde + 1 minute 1 Minute + 30 minutes 30 Minuten + 4 hours 4 Stunden + Could not clear status message. Make sure you are connected to the server. Statusnachricht konnte nicht gelöscht werden. Bitte sicherstellen, dass eine Verbindung mit dem Server besteht. + Could not fetch predefined statuses. Make sure you are connected to the server. Vordefinierte Status konnten nicht abgerufen werden. Stellen Sie bitte sicher, dass Sie mit dem Server verbunden sind. + Could not fetch status. Make sure you are connected to the server. Benutzerstatus konnte nicht abgerufen werden. Bitte sicherstellen, dass Sie mit dem Server verbunden sind. + Could not set status. Make sure you are connected to the server. Benutzerstatus konnte nicht gesetzt werden. Bitte sicherstellen, dass eine Verbindung mit dem Server besteht. + + Don't clear Nicht löschen + Emojis are not supported. Some status functionality may not work. Emoji-Funktion wird nicht unterstützt. Einige Benutzerstatus-Funktionen funktionieren unter Umständen nicht. + Less than a minute Weniger als eine Minute + Status feature is not supported. You will not be able to set your status. Benutzerstatus-Funktion wird nicht unterstützt. Benutzerstatus kann nicht gesetzt werden. + + This week Diese Woche + + Today Heute @@ -4959,14 +6107,17 @@ Server antwortete mit Fehler: %2 OCC::Vfs + Please choose a different location. %1 is a drive. It doesn't support virtual files. Bitte wählen Sie einen anderen Speicherort. %1 ist ein Laufwerk. Es unterstützt keine virtuellen Dateien. + Please choose a different location. %1 is a network drive. It doesn't support virtual files. Bitte wählen Sie einen anderen Speicherort. %1 ist ein Netzlaufwerk. Es unterstützt keine virtuellen Dateien. + Please choose a different location. %1 isn't a NTFS file system. It doesn't support virtual files. Bitte wählen Sie einen anderen Speicherort. %1 ist kein NTFS-Dateisystem. Es unterstützt keine virtuellen Dateien. @@ -4974,30 +6125,37 @@ Server antwortete mit Fehler: %2 OCC::VfsDownloadErrorDialog + %1 could not be downloaded. %1 konnte nicht heruntergeladen werden. + + Error downloading %1 + Fehler beim Herunterladen von %1 + + + > More details > Weitere Details + Download error Fehler beim Herunterladen + Error downloading Fehler beim Herunterladen - Error downloading %1 - Fehler beim Herunterladen von %1 - - + More details Weitere Details + could not be downloaded Konnte nicht heruntergeladen werden @@ -5005,6 +6163,8 @@ Server antwortete mit Fehler: %2 OCC::VfsSuffix + + Error updating metadata due to invalid modification time Fehler beim Aktualisieren der Metadaten aufgrund einer ungültigen Änderungszeit @@ -5012,6 +6172,8 @@ Server antwortete mit Fehler: %2 OCC::VfsXAttr + + Error updating metadata due to invalid modification time Fehler beim Aktualisieren der Metadaten aufgrund einer ungültigen Änderungszeit @@ -5019,10 +6181,12 @@ Server antwortete mit Fehler: %2 OCC::WebEnginePage + Invalid certificate detected Ungültiges Zertifikat gefunden + The host "%1" provided an invalid certificate. Continue? Der Server "%1" hat ein ungültiges Zertifikat. Fortsetzen? @@ -5030,6 +6194,7 @@ Server antwortete mit Fehler: %2 OCC::WebFlowCredentials + <b>You have been logged out of your account %1 at %2. Please login again.</b> <b>Sie wurden von Ihrem Konto %1 bei %2 abgemeldet. Bitte melden Sie sich erneut an.</b> @@ -5037,22 +6202,27 @@ Server antwortete mit Fehler: %2 OCC::WelcomePage - Form - Formular - - + Host your own server Eigenen Server betreiben + Keep your data secure and under your control Halten Sie Ihre Daten sicher und unter Ihrer Kontrolle + + Form + Formular + + + Log in Anmelden + Sign up with provider Mit Provider anmelden @@ -5060,55 +6230,68 @@ Server antwortete mit Fehler: %2 OwncloudAdvancedSetupPage + &Local Folder &Lokaler Ordner + <html><head/><body><p>If this box is checked, existing content in the local folder will be erased to start a clean sync from the server.</p><p>Do not check this if the local content should be uploaded to the servers folder.</p></body></html> <html><head/><body><p>Wenn diese Option gesetzt ist, werden bestehende Inhalte im lokalen Ordner gelöscht, um eine saubere Synchronisierung nur der Serverdaten zu ermöglichen.</p><p>Wählen Sie diese Option nicht, wenn die lokalen Inhalte auf den Server übertragen werden sollen.</p></body></html> + Ask before syncing folders larger than Fragen, bevor Ordner synchronisiert werden. Grenze: + Choose different folder Anderen Ordner wählen + Choose what to sync Zu synchronisierende Elemente auswählen + Erase local folder and start a clean sync Lokalen Ordner löschen und eine saubere Synchronisierung starten + Keep local data Lokale Daten behalten + Local Folder Lokaler Ordner + MB Trailing part of "Ask confirmation before syncing folder larger than" MB + Server address Serveradresse + Sync Logo Sync-Logo + Synchronize everything from server Alle Daten vom Server synchronisieren + Username Benutzername @@ -5116,10 +6299,12 @@ Server antwortete mit Fehler: %2 OwncloudHttpCredsPage + &Password &Passwort + &Username &Benutzername @@ -5127,14 +6312,18 @@ Server antwortete mit Fehler: %2 OwncloudSetupPage + Server address Serveradresse + + TextLabel TextLabel + This is the link to your %1 web interface when you open it in the browser. Dies ist der Link zu Ihrer %1 Webseite, wenn Sie diese im Browser öffnen. @@ -5142,110 +6331,127 @@ Server antwortete mit Fehler: %2 progress + Deleted Gelöscht + Deleting Lösche + Downloaded Heruntergeladen + Downloading Lade herunter + + Error Fehler + Filesystem access error Zugriffsfehler im Dateisystem + Ignored Ignoriert + Ignoring ignoriere + Moved to %1 Verschoben nach %1 + Moving Verschiebe + Replaced by virtual file Ersetzt durch virtuelle Datei + Server version downloaded, copied changed local file into case conflict conflict file Serverversion heruntergeladen, geänderte lokale Datei in Fallkonflikt-Konfliktdatei kopiert + Server version downloaded, copied changed local file into conflict file Serverversion heruntergeladen. Die bearbeitete lokale Datei wurde in eine Konfliktdatei kopiert. + + Unknown Unbekannt + Updated end-to-end encryption metadata Metadaten für die Ende-zu-Ende-Verschlüsselung aktualisiert + Updated local metadata Lokale Metadaten aktualisiert + Updated local virtual files metadata Aktualisierte Metadaten für lokale virtuelle Dateien + Updating end-to-end encryption metadata Aktualisieren der Metadaten für die Ende-zu-Ende-Verschlüsselung + Updating local metadata Aktualisiere lokale Metadaten + Updating local virtual files metadata Aktualisiere Metadaten für lokale virtuelle Dateien + Uploaded Hochgeladen + Uploading Lade hoch + Virtual file created Virtuelle Datei erstellt - - updating local virtual files metadata - Aktualisierung der Metadaten lokaler virtueller Dateien - QObject - - %1: %2 - this displays an error string (%2) for a file %1 - %1: %2 - + %nd delay in days after an activity @@ -5254,6 +6460,7 @@ Server antwortete mit Fehler: %2 + %nh delay in hours after an activity @@ -5262,6 +6469,7 @@ Server antwortete mit Fehler: %2 + %nm delay in minutes after an activity @@ -5270,70 +6478,92 @@ Server antwortete mit Fehler: %2 + 1m one minute after activity date and time 1m - Could not create debug archive in selected location! - Es konnte kein Debug-Archiv am ausgewählten Ort erstellt werden! + + Some time ago + Vor einiger Zeit - Error deleting the file - Fehler beim Löschen der Datei + + in the future + in der Zukunft - Failed to create debug archive - Fehler beim Erstellen des Debug-Archivs + + now + jetzt + + + + The directory %1 cannot be part of your sync directory. Please choose another folder. + Das Verzeichnis %1 kann nicht Teil Ihres Synchronisationsverzeichnisses sein. Bitte wählen Sie einen anderen Ordner. + New folder Neuer Ordner - Paths beginning with '#' character are not supported in VFS mode. - Pfade, die mit dem Zeichen '#' beginnen, werden im VFS-Modus nicht unterstützt. + + Could not create debug archive in selected location! + Es konnte kein Debug-Archiv am ausgewählten Ort erstellt werden! - Some time ago - Vor einiger Zeit + + Failed to create debug archive + Fehler beim Erstellen des Debug-Archivs + Synced %1 %1 synchronisiert - The directory %1 cannot be part of your sync directory. Please choose another folder. - Das Verzeichnis %1 kann nicht Teil Ihres Synchronisationsverzeichnisses sein. Bitte wählen Sie einen anderen Ordner. - - + You changed %1 Sie haben %1 geändert + You created %1 Sie haben %1 erstellt + You deleted %1 Sie haben %1 gelöscht + You renamed %1 Sie haben %1 umbenannt - in the future - in der Zukunft + + Error deleting the file + Fehler beim Löschen der Datei - now - jetzt + + %1: %2 + this displays an error string (%2) for a file %1 + %1: %2 - + + + Paths beginning with '#' character are not supported in VFS mode. + Pfade, die mit dem Zeichen '#' beginnen, werden im VFS-Modus nicht unterstützt. + + ResolveConflictsDialog + %1 files in conflict indicate the number of conflicts to resolve @@ -5342,26 +6572,32 @@ Server antwortete mit Fehler: %2 + All local versions Alle lokalen Versionen + All server versions Alle Serverversionen + Cancel Abbrechen + Choose if you want to keep the local version, server version, or both. If you choose both, the local file will have a number added to its name. Wählen Sie, ob Sie die lokale Version, die Serverversion oder beide behalten möchten. Wenn Sie beide auswählen, wird dem Namen der lokalen Datei eine Nummer hinzugefügt. + Resolve conflicts Konflikte lösen + Solve sync conflicts Synchronisationskonflikte lösen @@ -5369,6 +6605,7 @@ Server antwortete mit Fehler: %2 SesErrorBox + Error Fehler @@ -5376,14 +6613,17 @@ Server antwortete mit Fehler: %2 SesTrayHeader + Open Nextcloud in browser HiDrive Next im Browser öffnen + Open local or group folders Lokalen oder Gruppenordner öffnen + Website Website @@ -5391,18 +6631,22 @@ Server antwortete mit Fehler: %2 ShareDelegate + Copied! Kopiert! + Copy share link location + Create a new share link + Share options Freigabeoptionen @@ -5410,62 +6654,78 @@ Server antwortete mit Fehler: %2 ShareDetailsPage + Add another link Weiteren Link hinzufügen + Allow resharing Weiterteilen erlauben + + Allow upload and editing Hochladen und Bearbeiten erlauben + An error occurred setting the share password. Es ist ein Fehler beim Festlegen des Freigabekennworts aufgetreten. + Copy share link Freigabe-Link kopieren + Custom Permissions Benutzerdefinierte Berechtigungen + Enter the note to recipient Geben Sie eine Notiz an den Empfänger ein + File drop (upload only) Dateien ablegen (nur Hochladen) + Hide download Download verbergen + Note to recipient Notiz an Empfänger + Password protection Passwortschutz + Set expiration date Ablaufdatum setzen + Share link copied! Freigabelink kopiert! + Unshare Freigabe aufheben + View only Nur anzeigen @@ -5473,10 +6733,12 @@ Server antwortete mit Fehler: %2 ShareeSearchField + Search for users or groups… Suche nach Benutzern oder Gruppen… + Sharing is not available for this folder Teilen ist für diesen Ordner nicht verfügbar @@ -5484,30 +6746,37 @@ Server antwortete mit Fehler: %2 ShareView + Expires in %1 Läuft ab in %1 + Password required for new share Passwort für neue Freigabe erforderlich + Share password Freigabe-Passwort + Shared with you by %1 Geteilt mit Ihnen von %1 + Sharing is disabled Teilen ist deaktiviert + Sharing is disabled. Teilen ist deaktiviert. + This item cannot be shared. Dieses Element kann nicht geteilt werden @@ -5515,6 +6784,7 @@ Server antwortete mit Fehler: %2 SyncJournalDb + Failed to connect database. Verbindung zur Datenbank fehlgeschlagen @@ -5522,14 +6792,17 @@ Server antwortete mit Fehler: %2 SyncStatus + Open browser Browser öffnen + Resolve conflicts Konflikte lösen + Sync now Jetzt synchronisieren @@ -5537,10 +6810,12 @@ Server antwortete mit Fehler: %2 TalkReplyTextField + Reply to … Antworten an … + Send reply to chat message Antwort auf Chatnachricht senden @@ -5548,14 +6823,17 @@ Server antwortete mit Fehler: %2 TermsOfServiceCheckWidget + Logo Logo + Switch to your browser to accept the terms of service Zum Browser wechseln, um die Nutzungsbedingungen zu bestätigen + Terms of Service Nutzungsbedingungen @@ -5563,92 +6841,105 @@ Server antwortete mit Fehler: %2 theme + Error occurred during setup Fehler bei der Einrichtung aufgetreten + Error occurred during sync Fehler beim Synchronisieren aufgetreten + Preparing to sync Synchronisierung wird vorbereitet + Stopping sync Beende Synchronisierung + Sync is paused Synchronisierung ist angehalten. + Sync is running Synchronisierung läuft + Sync status is unknown Synchronisierungsstatus ist unbekannt + Sync was successful Synchronisierung war erfolgreich + Sync was successful but some files were ignored Synchronisierung war erfolgreich, aber einige Dateien wurden ignoriert + Waiting to start syncing Warte auf Beginn der Synchronisierung. - - TrayFoldersMenuButton - - Files - Dateien - - TrayWindowAccountMenu + Account switcher and settings menu Konto-Umschalter und Einstellungsmenü + Add account Konto hinzufügen + Current account Aktuelles Konto + Current account avatar Avatar des aktuellen Kontos + Current account status is do not disturb Aktueller Kontostatus ist "Nicht stören" + Current account status is online Aktueller Kontostatus ist "Online" + Exit Beenden + Pause sync for all Synchronisierung für alle pausieren + Resume sync for all Synchronisierung für alle fortsetzen + Settings Einstellungen @@ -5656,14 +6947,17 @@ Server antwortete mit Fehler: %2 TrayWindowHeader + More apps Weitere Apps + Open %1 in browser %1 im Browser öffnen + Open local or group folders Lokalen oder Gruppenordner öffnen @@ -5671,26 +6965,32 @@ Server antwortete mit Fehler: %2 TrayWindowHeaderBar + More apps Weitere Apps + Open %1 in browser %1 im Browser öffnen + Open Nextcloud Talk in browser Nextcloud-Talk im Browser öffnen + Open Nextcloud in browser HiDrive Next im Browser öffnen + Open local or group folders Lokalen oder Gruppenordner öffnen + Website Website @@ -5698,6 +6998,7 @@ Server antwortete mit Fehler: %2 UnifiedSearchInputContainer + Search files, messages, events … Suche Dateien, Nachrichten und Termine … @@ -5705,6 +7006,7 @@ Server antwortete mit Fehler: %2 UnifiedSearchPlaceholderView + Start typing to search Beginnen Sie mit der Eingabe, um zu suchen @@ -5712,6 +7014,7 @@ Server antwortete mit Fehler: %2 UnifiedSearchResultFetchMoreTrigger + Load more results Weitere Ergebnisse laden @@ -5719,6 +7022,7 @@ Server antwortete mit Fehler: %2 UnifiedSearchResultItemSkeleton + Search result skeleton. Suchergebnis-Skelett. @@ -5726,6 +7030,7 @@ Server antwortete mit Fehler: %2 UnifiedSearchResultListItem + Load more results Weitere Ergebnisse laden @@ -5733,6 +7038,7 @@ Server antwortete mit Fehler: %2 UnifiedSearchResultNothingFound + No results for Keine Ergebnisse für @@ -5740,6 +7046,7 @@ Server antwortete mit Fehler: %2 UnifiedSearchResultSectionItem + Search results section %1 Suchergebnisse Abschnitt %1 @@ -5747,26 +7054,34 @@ Server antwortete mit Fehler: %2 UserLine + Account actions Konto-Aktionen + + Log in Anmelden + + Log out Abmelden + Remove account Konto entfernen + Set status Status setzen + Switch to account Zu Konto wechseln @@ -5774,54 +7089,67 @@ Server antwortete mit Fehler: %2 UserStatusSelector + Appear offline Offline erscheinen + Apply Anwenden + Away Abwesend + Cancel Abbrechen + Clear Leeren + Clear status message after Statusnachricht löschen nach + Do not disturb Nicht stören + Invisible Unsichtbar + Mute all notifications Alle Benachrichtigungen stummschalten + Online Online + Online status Online-Status + Status message Statusnachricht + What is your status? Wie ist Ihr Status? @@ -5829,30 +7157,37 @@ Server antwortete mit Fehler: %2 Utility + %1 %2 %1 %2 + %L1 B %L1 B + %L1 GB %L1 GB + %L1 KB %L1 KB + %L1 MB %L1 MB + %L1 TB %L1 TB + %n day(s) %n Tag @@ -5860,6 +7195,7 @@ Server antwortete mit Fehler: %2 + %n hour(s) %n Stunde @@ -5867,6 +7203,7 @@ Server antwortete mit Fehler: %2 + %n minute(s) %n Minute @@ -5874,6 +7211,7 @@ Server antwortete mit Fehler: %2 + %n month(s) %n Monat @@ -5881,6 +7219,7 @@ Server antwortete mit Fehler: %2 + %n second(s) %n Sekunde @@ -5888,6 +7227,7 @@ Server antwortete mit Fehler: %2 + %n year(s) %n Jahr @@ -5898,42 +7238,52 @@ Server antwortete mit Fehler: %2 utility + Always available locally Immer lokal verfügbar + Available online only Nur online verfügbar + Could not open browser Konnte Browser nicht öffnen + Could not open email client Die E-Mail-Anwendung konnte nicht geöffnet werden + Currently available locally Derzeit lokal verfügbar + Free up local space Lokalen Speicherplatz freigeben + Make always available locally Immer lokal verfügbar machen + Some available online only Einige sind nur online abrufbar + There was an error when launching the browser to go to URL %1. Maybe no default browser is configured? Die URL %1 konnte aufgrund eines Fehlers beim Start des Browsers nicht aufgerufen werden. Ist vielleicht kein Standardbrowser konfiguriert? + There was an error when launching the email client to create a new message. Maybe no default email client is configured? Fehler beim Öffnen der E-Mail-Anwendung zum Erstellen einer neuen Nachricht. Vielleicht ist keine Standard-E-Mail Anwendung eingerichtet? @@ -5941,14 +7291,17 @@ Server antwortete mit Fehler: %2 ValidateChecksumHeader + The checksum header contained an unknown checksum type "%1" Der Prüfsummen-Header enthielt einen unbekannten Prüfsummentyp "%1" + The checksum header is malformed. Der Prüfsummen-Header hat ein fehlerhaftes Format. + The downloaded file does not match the checksum, it will be resumed. "%1" != "%2" Die heruntergeladene Datei stimmt nicht mit der Prüfsumme überein, sie wird fortgesetzt. "%1" != "%2" diff --git a/translations/client_en.ts b/translations/client_en.ts index aba2f8417bb11..a4f6ac280c630 100644 --- a/translations/client_en.ts +++ b/translations/client_en.ts @@ -1,55 +1,14 @@ - - - - Agree - Agree - - - Back - Back - - - Necessary data - Necessary data - - - Required to ensure that the software can be used as expected - Required to ensure that the software can be used as expected - - - Save Settings - Save Settings - - - Send anonymous use - Send anonymous use - - - Settings - Settings - - - This application uses tracking technologies. By clicking on Agree, you accept the processing of your anonymized data. You can adjust your choices at any time via the settings. <br/> <br/>Information on data processing and more can be found in our <a href='https://wl.hidrive.com/easy/0005'>privacy policy</a>. - This application uses tracking technologies. By clicking on Agree, you accept the processing of your anonymized data. You can adjust your choices at any time via the settings. <br/> <br/>Information on data processing and more can be found in our <a href='https://wl.hidrive.com/easy/0005'>privacy policy</a>. - - - This helps us to optimize the software and to better identify system crashes and unexpected errors. - This helps us to optimize the software and to better identify system crashes and unexpected errors. - - - We collect anonymized data to optimize our app. We use software solutions from various partners for this purpose. We want to give you full transparency and freedom of choice regarding the collection and processing of your anonymized usage. You can change your settings at any time under the menu item Data Protection. - We collect anonymized data to optimize our app. We use software solutions from various partners for this purpose. We want to give you full transparency and freedom of choice regarding the collection and processing of your anonymized usage. You can change your settings at any time under the menu item Data Protection. - - ActivityItem + In %1 + Open %1 locally @@ -57,10 +16,12 @@ ActivityItemContent + Dismiss + Open file details @@ -68,40 +29,40 @@ ActivityList + Activity list + No activities yet + Scroll to top - - BasicComboBox - - Clear status message menu - Delete status message menu - - CallNotificationDialog + Answer Talk call notification Answer Talk call notification + Decline + Decline Talk call notification Decline Talk call notification + Talk notification caller avatar Talk notification caller avatar @@ -109,66 +70,83 @@ CloudProviderWrapper + %1 (%2, %3) + Checking for changes in "%1" + Help + Log out + + No recently changed files + Open website + Pause synchronization + Quit sync client Quit sync client + Recently changed + Settings Settings + Sync paused + Syncing + Syncing %1 + Syncing %1 (%2 left) + Syncing %1 of %2 + Syncing %1 of %2 (%3 left) @@ -176,10 +154,12 @@ ConflictDelegate + Local version Local version + Server version Server version @@ -187,46 +167,59 @@ CurrentAccountHeaderButton + Account switcher and settings menu + Add account + Add new account + Current account + Current account avatar + Current account status is do not disturb + Current account status is online + Exit + + Pause sync for all + + Resume sync for all + Settings Settings @@ -234,6 +227,7 @@ EditFileLocallyLoadingDialog + Opening file for local editing @@ -241,6 +235,7 @@ EmojiPicker + No recent emojis @@ -248,6 +243,7 @@ EncryptionTokenDiscoveryDialog + Discovering the certificates stored on your USB token @@ -255,18 +251,22 @@ EncryptionTokenSelectionWindow + Available Keys for end-to-end Encryption: + Cancel + Choose Choose + Token Encryption Key Chooser @@ -274,6 +274,7 @@ ErrorBox + Error @@ -281,6 +282,7 @@ FileDetailsPage + Dismiss @@ -288,6 +290,7 @@ FileDetailsWindow + File details of %1 · %2 @@ -295,14 +298,17 @@ FileProviderEvictionDialog + Evict materialised files + Materialised items + Reload @@ -310,10 +316,12 @@ FileProviderFastEnumerationSettings + Enable fast sync + Fast sync will only sync changes in files and folders within folders that have been explored. This can significantly increase responsiveness on initial configuration of virtual files. However, it will cause redundant downloads of files moved to an unexplored folder. Fast sync will only sync changes in files and folders within folders that have been explored. This can significantly increase responsiveness on initial configuration of virtual files. However, it will cause redundant downloads of files moved to an unexplored folder. @@ -321,6 +329,7 @@ FileProviderFileDelegate + Delete Delete @@ -328,18 +337,17 @@ FileProviderSettings + Enable virtual files + General settings - Signal file provider domain - Signal file provider domain - - + Virtual files settings @@ -347,18 +355,17 @@ FileProviderStorageInfo + %1 GB of %2 GB remote files synced + Evict local copies … - Evict local copies... - Evict local copies... - - + Local storage use @@ -366,19 +373,23 @@ FileProviderSyncStatus + All synced! All synced! + Request a sync of changes for the VFS environment. macOS may ignore or delay this request. + Request sync + Syncing @@ -386,10 +397,12 @@ macOS may ignore or delay this request. FileSystem + Could not remove folder "%1" + Error removing "%1": %2 @@ -397,26 +410,32 @@ macOS may ignore or delay this request. Flow2AuthWidget + An error occurred while connecting. Please try again. + Browser Authentication + Copy Link + Logo + Reopen Browser + Switch to your browser to connect your account @@ -424,10 +443,12 @@ macOS may ignore or delay this request. FolderWizardSelectiveSync + Add Folder Sync Add Folder Sync + Step 3 of 3: Selektive Synchronisation Step 3 of 3: Selective Synchronisation @@ -435,18 +456,22 @@ macOS may ignore or delay this request. FolderWizardSourcePage + &Choose &Choose + Add Folder Sync Add Folder Sync + Select a folder on your hard drive that should be permanetly connected to your %1. All files and subfolders are automatically uploaded and synchronized Select a folder on your hard drive that should be permanetly connected to your %1. All files and subfolders are automatically uploaded and synchronized. + Step 1 of 3: Select local folder Step 1 of 3: Select local folder @@ -454,30 +479,37 @@ macOS may ignore or delay this request. FolderWizardTargetPage + Add Folder Sync Add Folder Sync + Both folders are permanently linked and the respective contents are automatically synchronized and updated. Both folders are permanently linked and the respective contents are automatically synchronized and updated. + Create folder Create folder + Folders + Please now select or create a target folder in your %1 where the content should be uploaded and synchronized. Please now select or create a target folder in your %1 where the content should be uploaded and synchronized. + Refresh + Step 2 of 3: Directory in your %1 Step 2 of 3: Directory in your %1 @@ -485,10 +517,12 @@ macOS may ignore or delay this request. main.cpp + %1 requires on a working system tray. If you are running XFCE, please follow <a href="http://docs.xfce.org/xfce/xfce4-panel/systray">these instructions</a>. Otherwise, please install a system tray application such as "trayer" and try again. + System Tray not available @@ -496,14 +530,17 @@ macOS may ignore or delay this request. MainWindow + New activities + Nextcloud desktop main dialog + Unified search results list @@ -511,6 +548,7 @@ macOS may ignore or delay this request. nextcloudTheme::aboutInfo() + <p><small>Built from Git revision <a href="%1">%2</a> on %3, %4 using Qt %5, %6</small></p> @@ -518,14 +556,17 @@ macOS may ignore or delay this request. OCC::AbstractNetworkJob + Connection timed out + Server replied "%1 %2" to "%3 %4" + Unknown error: network reply was deleted @@ -533,14 +574,17 @@ macOS may ignore or delay this request. OCC::Account + File %1 is already locked by %2. + Lock operation on %1 failed with error %2 + Unlock operation on %1 failed with error %2 @@ -548,29 +592,36 @@ macOS may ignore or delay this request. OCC::AccountManager + %1 accounts were detected from a legacy desktop client. Should the accounts be imported? %1 accounts were detected from a legacy desktop client. Should the accounts be imported? + 1 account was detected from a legacy desktop client. Should the account be imported? + Could not import accounts from legacy client configuration. + Import + + Legacy import + Skip @@ -578,303 +629,334 @@ Should the account be imported? OCC::AccountSettings + %1 (%3%) of %2 in use. Some folders, including network mounted or shared folders, might have different limits. %1 (%3%) of %2 in use. Some folders, including network mounted or shared folders, might have different limits. + %1 as %2 + %1 in use + %1 of %2 in use + (experimental) + <p>Could not create local folder <i>%1</i>.</p> + <p>Do you really want to stop syncing the folder <i>%1</i>?</p><p><b>Note:</b> This will <b>not</b> delete any files.</p> - Apply - - - - Apply manual changes - - - + + Availability - Cancel - - - + Choose what to sync + Confirm Folder Sync Connection Removal + Connected to %1. - Connected with <server> as <user> - - - + Connecting to %1 … - Connection settings - - - + Could not encrypt folder because the folder does not exist anymore + + Create new folder + Currently there is no storage usage information available. + Disable encryption + Disable end-to-end encryption + Disable end-to-end encryption for %1? + Disable support + Disable virtual file support … + Disable virtual file support? + Display mnemonic + + Do not encrypt folder + + Edit Ignored Files + Enable virtual file support %1 … + Encrypt + + Encrypt folder + Encryption failed + End-to-end Encryption + End-to-end Encryption with Virtual Files + End-to-end encryption has been enabled for this account + End-to-end encryption has been enabled on this account with another device.<br>It can be enabled on this device by entering your mnemonic.<br>This will enable synchronisation of existing encrypted folders. + End-to-end encryption is not configured on this device. Once it is configured, you will be able to encrypt this folder. Would you like to set up end-to-end encryption? + End-to-end encryption mnemonic - Expand Memory - Expand Memory - - + Folder creation failed + Force sync now Force sync now + Migrate certificate to a new one + No %1 connection configured. + No account configured. + + Open folder + Pause sync + Please wait for the folder to sync before trying to encrypt it. + Remove Folder Sync Connection + Remove folder sync connection + Removing end-to-end encryption will remove locally-synced files that are encrypted.<br>Encrypted files will remain on the server. + Restart sync + Resume sync + Server %1 is currently being redirected, or your connection is behind a captive portal. + Server %1 is currently in maintenance mode. + Server %1 is temporarily unavailable. + Server configuration error: %1 at %2. + Set up encryption + Signed out from %1. - Standard file sync - - - + Storage space %1% occupied Storage space %1% occupied - Storage space: … - - - + Sync Running - Synchronize all - - - - Synchronize none - - - + The folder has a minor sync problem. Encryption of this folder will be possible once it has synced successfully + The folder has a sync error. Encryption of this folder will be possible once it has synced successfully + The server version %1 is unsupported! Proceed at your own risk. + The syncing operation is running.<br/>Do you want to terminate it? + There are folders that have grown in size beyond %1MB: %2 + There are folders that were not synchronized because they are external storages: There are folders that were not synchronised because they are external storages: + There are folders that were not synchronized because they are too big or external storages: There are folders that were not synchronised because they are too big or external storages: + There are folders that were not synchronized because they are too big: There are folders that were not synchronised because they are too big: + This account supports end-to-end encryption + This action will disable virtual file support. As a consequence contents of folders that are currently marked as "available online only" will be downloaded. The only advantage of disabling virtual file support is that the selective sync feature will become available again. @@ -883,60 +965,126 @@ This action will abort any currently running synchronization. + This will encrypt your folder and all files within it. These files will no longer be accessible without your encryption mnemonic key. <b>This process is not reversible. Are you sure you want to proceed?</b> This will encrypt your folder and all files within it. These files will no longer be accessible without your encryption mnemonic key. <b>This process is not reversible. Are you sure you want to proceed?</b> + To protect your Cryptographic Identity, we encrypt it with a mnemonic of 12 dictionary words. Please note these down and keep them safe. They will be needed to add other devices to your account (like your mobile phone or laptop). To protect your Cryptographic Identity, we encrypt it with a mnemonic of 12 dictionary words. Please note these down and keep them safe. They will be needed to add other devices to your account (like your mobile phone or laptop). + Unable to connect to %1. - Unchecked folders will be <b>removed</b> from your local file system and will not be synchronized to this computer anymore - - - - Virtual file sync - - - + Warning + You cannot encrypt a folder with contents, please remove the files. Wait for the new sync, then encrypt it. + You need to accept the terms of service at %1. + You seem to have the Virtual Files feature enabled on this folder. At the moment, it is not possible to implicitly download virtual files that are end-to-end encrypted. To get the best experience with virtual files and end-to-end encryption, make sure the encrypted folder is marked with "Make always available locally". + https://wl.hidrive.com/easy/0057 https://wl.hidrive.com/easy/0077 - + + + Apply + + + + + Apply manual changes + + + + + + + Cancel + + + + + Connected with <server> as <user> + + + + + Connection settings + + + + + Expand Memory + Expand Memory + + + + Standard file sync + + + + + + Storage space: … + + + + + Synchronize all + + + + + Synchronize none + + + + + Unchecked folders will be <b>removed</b> from your local file system and will not be synchronized to this computer anymore + + + + + Virtual file sync + + + OCC::AccountSetupFromCommandLineJob + Access forbidden by server. To verify that you have proper access, <a href="%1">click here</a> to access the service with your browser. + The authenticated request to the server was redirected to "%1". The URL is bad, the server is misconfigured. + There was an invalid response to an authenticated WebDAV request @@ -944,46 +1092,57 @@ Wait for the new sync, then encrypt it. OCC::AccountState + Asking Credentials + Configuration error + Connected + Disconnected + Maintenance mode + Need the user to accept the terms of service + Network error + Redirect detected + Service unavailable + Signed out + Unknown account state @@ -991,14 +1150,17 @@ Wait for the new sync, then encrypt it. OCC::ActivityListModel + Fetching activities … + For more activities please open the Activity app. + Network error occurred: client will retry syncing. @@ -1006,34 +1168,42 @@ Wait for the new sync, then encrypt it. OCC::AddCertificateDialog - An encrypted pkcs12 bundle is strongly recommended as a copy will be stored in the configuration file. + + Certificate files (*.p12 *.pfx) - Browse … + + Select a certificate - Certificate & Key (pkcs12): + + An encrypted pkcs12 bundle is strongly recommended as a copy will be stored in the configuration file. - Certificate files (*.p12 *.pfx) + + Browse … - Certificate password: + + Certificate & Key (pkcs12): - SSL client certificate authentication + + Certificate password: - Select a certificate + + SSL client certificate authentication + This server probably requires a SSL client certificate. @@ -1041,67 +1211,82 @@ Wait for the new sync, then encrypt it. OCC::Application + %1 accounts number of accounts imported + %1 folders number of folders imported + 1 account + 1 folder + Continue + Error accessing the configuration file + Imported %1 and %2 from a legacy desktop client. %3 number of accounts and folders imported. list of users. + Legacy import + Quit + Some settings were configured in %1 versions of this client and use features that are not available in this version.<br><br>Continuing will mean <b>%2 these settings</b>.<br><br>The current configuration file was already backed up to <i>%3</i>. + There was an error while accessing the configuration file at %1. Please make sure the file can be accessed by your system account. + deleting + ignoring + newer newer software version + older older software version @@ -1110,18 +1295,22 @@ Wait for the new sync, then encrypt it. OCC::AuthenticationDialog + &Password: + &Username: + Authentication Required + Enter username and password for "%1" at %2. @@ -1129,10 +1318,12 @@ Wait for the new sync, then encrypt it. OCC::BasePropagateRemoteDeleteEncrypted + "%1 Failed to unlock encrypted folder %2". + Wrong HTTP code returned by server. Expected 204, but received "%1 %2". @@ -1140,46 +1331,58 @@ Wait for the new sync, then encrypt it. OCC::BulkPropagatorJob + Error updating metadata: %1 + File %1 cannot be uploaded because another file with the same name, differing only in case, exists + File %1 has invalid modification time. Do not upload to the server. + File %1 has invalid modified time. Do not upload to the server. + File Removed (start upload) %1 + + Local file changed during sync. + Local file changed during syncing. It will be resumed. + Network error: %1 + Restoration failed: %1 + The file %1 is currently in use + The local file was removed during sync. @@ -1187,30 +1390,37 @@ Wait for the new sync, then encrypt it. OCC::CaseClashConflictSolver + Cannot rename file because a file with the same name already exists on the server. Please pick another name. + Could not rename file. Please make sure you are connected to the server. + Failed to fetch permissions with error %1 + Filename contains leading and trailing spaces. + Filename contains leading spaces. + Filename contains trailing spaces. + You don't have the permission to rename this file. Please ask the author of the file to rename it. @@ -1218,86 +1428,111 @@ Wait for the new sync, then encrypt it. OCC::CaseClashFilenameDialog + %1 does not support equal file names with only letter casing differences. - 0 byte + + Filename contains illegal characters: %1 - Case Clash Conflict + + Filename contains leading and trailing spaces. - Case clashing file + + Filename contains leading spaces. - Error + + Filename contains trailing spaces. - Existing file - Existing file + + Rename file + - Filename contains illegal characters: %1 + + The file "%1" could not be synced because of a case clash conflict with an existing file on this system. - Filename contains leading and trailing spaces. + + Use invalid name - Filename contains leading spaces. + + + 0 byte - Filename contains trailing spaces. + + Case Clash Conflict - New filename + + Case clashing file - Open clashing file + + Error - Open existing file + + Existing file + Existing file + + + + New filename - Please enter a new name for the clashing file: + + + Open clashing file - Rename file + + + Open existing file - The file "%1" could not be synced because of a case clash conflict with an existing file on this system. + + Please enter a new name for the clashing file: + The file could not be synced because it generates a case clash conflict with an existing file on this system. The file could not be synced because it generates a case clash conflict with an existing file on this system. - Use invalid name - - - + file A + file B + + today @@ -1305,6 +1540,7 @@ Wait for the new sync, then encrypt it. OCC::CleanupPollsJob + Error writing metadata to the database @@ -1312,27 +1548,33 @@ Wait for the new sync, then encrypt it. OCC::ClientSideEncryption + Enter Certificate USB Token PIN: + Enter E2E passphrase + Input PIN code Please keep it short and shorter than "Enter Certificate USB Token PIN:" + Invalid PIN. Login failed + Login to the token failed after providing the user PIN. It may be invalid or wrong. Please try again! + Please enter your end-to-end encryption passphrase:<br><br>Username: %2<br>Account: %3<br> @@ -1340,66 +1582,87 @@ Wait for the new sync, then encrypt it. OCC::ConflictDialog - 0 byte + + Keep both versions - <a href="%1">Open local version</a> + + Keep local version - <a href="%1">Open server version</a> + + + Keep selected version - Click to open the file + + Keep server version - Conflicting versions of %1. + + Open local version - Keep both versions + + Open server version - Keep local version + + + 0 byte - Keep selected version + + <a href="%1">Open local version</a> - Keep server version + + <a href="%1">Open server version</a> - Local version - Local version + + + Click to open the file + - Open local version + + + Conflicting versions of %1. - Open server version - + + Local version + Local version + Server version Server version + Sync Conflict + Which version of the file do you want to keep?<br/>If you select both versions, the local file will have a number added to its name. + + today @@ -1407,22 +1670,29 @@ Wait for the new sync, then encrypt it. OCC::ConflictSolver + Confirm deletion + Do you want to delete the directory <i>%1</i> and all its contents permanently? + Do you want to delete the file <i>%1</i> permanently? + + Error + + Moving file failed: %1 @@ -1432,26 +1702,32 @@ Wait for the new sync, then encrypt it. OCC::ConnectionValidator + Authentication error: Either username or password are wrong. + No Nextcloud account configured + Please update to the latest server and restart the client. + The configured server for this client is too old + The provided credentials are not correct + Timeout @@ -1459,64 +1735,78 @@ Wait for the new sync, then encrypt it. OCC::DataProtectionPage + + This application uses tracking technologies. By clicking on Agree, you accept the processing of your anonymized data. You can adjust your choices at any time via the settings. <br/> <br/>Information on data processing and more can be found in our <a href='https://wl.hidrive.com/easy/0005'>privacy policy</a>. + This application uses tracking technologies. By clicking on Agree, you accept the processing of your anonymized data. You can adjust your choices at any time via the settings. <br/> <br/>Information on data processing and more can be found in our <a href='https://wl.hidrive.com/easy/0005'>privacy policy</a>. + + + Agree Agree + Form + Settings Settings - - This application uses tracking technologies. By clicking on Agree, you accept the processing of your anonymized data. You can adjust your choices at any time via the settings. <br/> <br/>Information on data processing and more can be found in our <a href='https://wl.hidrive.com/easy/0005'>privacy policy</a>. - This application uses tracking technologies. By clicking on Agree, you accept the processing of your anonymized data. You can adjust your choices at any time via the settings. <br/> <br/>Information on data processing and more can be found in our <a href='https://wl.hidrive.com/easy/0005'>privacy policy</a>. - - + OCC::DataProtectionSettingsPage + + We collect anonymized data to optimize our app. We use software solutions from various partners for this purpose. We want to give you full transparency and freedom of choice regarding the collection and processing of your anonymized usage. You can change your settings at any time under the menu item Data Protection. + We collect anonymized data to optimize our app. We use software solutions from various partners for this purpose. We want to give you full transparency and freedom of choice regarding the collection and processing of your anonymized usage. You can change your settings at any time under the menu item Data Protection. + + + Back Back + Form + Necessary data Necessary data + Required to ensure that the software can be used as expected Required to ensure that the software can be used as expected + Save Settings Save Settings + Send anonymous use Send anonymous use + This helps us to optimize the software and to better identify system crashes and unexpected errors. This helps us to optimize the software and to better identify system crashes and unexpected errors. - - We collect anonymized data to optimize our app. We use software solutions from various partners for this purpose. We want to give you full transparency and freedom of choice regarding the collection and processing of your anonymized usage. You can change your settings at any time under the menu item Data Protection. - We collect anonymized data to optimize our app. We use software solutions from various partners for this purpose. We want to give you full transparency and freedom of choice regarding the collection and processing of your anonymized usage. You can change your settings at any time under the menu item Data Protection. - - + OCC::DiscoveryPhase + Error while canceling deletion of %1 + Error while canceling deletion of a file @@ -1524,14 +1814,19 @@ Wait for the new sync, then encrypt it. OCC::DiscoverySingleDirectoryJob + + Encrypted metadata setup error! Encrypted metadata setup error! + Encrypted metadata setup error: initial signature from server is empty. Encrypted metadata setup error: initial signature from server is empty. + + Server error: PROPFIND reply is not XML formatted! @@ -1539,22 +1834,27 @@ Wait for the new sync, then encrypt it. OCC::DiscoverySingleLocalDirectoryJob + Directory not accessible on client, permission denied + Directory not found: %1 + Error while opening directory %1 + Error while reading directory %1 + Filename encoding is not valid @@ -1562,62 +1862,93 @@ Wait for the new sync, then encrypt it. OCC::EditLocallyJob + + + An error occurred during data retrieval. + + An error occurred during setup. + + An error occurred trying to synchronise the file to edit locally. + + + + Could not find a file for local editing. Make sure it is not excluded via selective sync. + + Could not find a file for local editing. Make sure its path is valid and it is synced locally. + Could not find a remote file info for local editing. Make sure its path is valid. + Could not open %1 + + + + + + + + Could not start editing locally. + File %1 already locked. + File %1 could not be locked. + File %1 now locked. + Invalid local file path. + + Lock will last for %1 minutes. You can also unlock this file manually once you are finished editing. + Please try again. + Server error: PROPFIND reply is not XML formatted! @@ -1625,10 +1956,12 @@ Wait for the new sync, then encrypt it. OCC::EditLocallyManager + Could not validate the request to open a file from server. + Please try again. @@ -1636,26 +1969,34 @@ Wait for the new sync, then encrypt it. OCC::EditLocallyVerificationJob + An error occurred trying to verify the request to edit locally. + Could not find an account for local editing. + Could not start editing locally. + Invalid file path was provided. + Invalid token received. + + + Please try again. @@ -1663,22 +2004,34 @@ Wait for the new sync, then encrypt it. OCC::EncryptedFolderMetadataHandler + Error fetching encrypted folder ID. + + + + + + Error fetching metadata. + + + Error locking folder. + Error parsing or decrypting metadata. + Failed to upload metadata @@ -1686,6 +2039,7 @@ Wait for the new sync, then encrypt it. OCC::EncryptFolderJob + Could not generate the metadata for encryption, Unlocking the folder. This can be an issue with your OpenSSL libraries. @@ -1694,6 +2048,7 @@ This can be an issue with your OpenSSL libraries. OCC::FileDetails + %1 day(s) ago days elapsed since file last modified @@ -1702,6 +2057,7 @@ This can be an issue with your OpenSSL libraries. + %1 hour(s) ago hours elapsed since file last modified @@ -1710,6 +2066,7 @@ This can be an issue with your OpenSSL libraries. + %1 minute(s) ago minutes elapsed since file last modified @@ -1718,6 +2075,7 @@ This can be an issue with your OpenSSL libraries. + %1 month(s) ago months elapsed since file last modified @@ -1726,6 +2084,7 @@ This can be an issue with your OpenSSL libraries. + %1 second(s) ago seconds elapsed since file last modified @@ -1734,6 +2093,7 @@ This can be an issue with your OpenSSL libraries. + %1 year(s) ago years elapsed since file last modified @@ -1742,6 +2102,7 @@ This can be an issue with your OpenSSL libraries. + Locked by %1 - Expires in %2 minute(s) remaining time before lock expires @@ -1753,26 +2114,36 @@ This can be an issue with your OpenSSL libraries. OCC::Flow2Auth + + Could not parse the JSON returned from the server: <br><em>%1</em> + + Error returned from the server: <em>%1</em> + The polling URL does not start with HTTPS despite the login URL started with HTTPS. Login will not be possible because this might be a security issue. Please contact your administrator. + + The reply from the server did not contain all expected fields + The returned server URL does not start with HTTPS despite the login URL started with HTTPS. Login will not be possible because this might be a security issue. Please contact your administrator. + + There was an error accessing the "token" endpoint: <br><em>%1</em> @@ -1780,38 +2151,48 @@ This can be an issue with your OpenSSL libraries. OCC::Flow2AuthWidget + Copy Link + + Error + Link copied to clipboard. + Open Browser Open Browser + Polling for authorization + Starting authorization + Switch to your browser to connect your account + Unable to open the Browser, please copy the link to your Browser. + Waiting for authorization @@ -1819,6 +2200,7 @@ This can be an issue with your OpenSSL libraries. OCC::Folder + %1 and %n other file(s) are currently locked. @@ -1826,6 +2208,7 @@ This can be an issue with your OpenSSL libraries. + %1 and %n other file(s) could not be synced due to errors. See the log for details. @@ -1833,6 +2216,7 @@ This can be an issue with your OpenSSL libraries. + %1 and %n other file(s) have been added. @@ -1840,6 +2224,7 @@ This can be an issue with your OpenSSL libraries. + %1 and %n other file(s) have been removed. @@ -1847,6 +2232,7 @@ This can be an issue with your OpenSSL libraries. + %1 and %n other file(s) have been updated. @@ -1854,14 +2240,17 @@ This can be an issue with your OpenSSL libraries. + %1 could not be synced due to an error. See the log for details. + %1 has a sync conflict. Please check the conflict file! + %1 has and %n other file(s) have sync conflicts. @@ -1869,11 +2258,13 @@ This can be an issue with your OpenSSL libraries. + %1 has been added. %1 names a file. + %1 has been moved to %2 and %n other file(s) have been moved. @@ -1881,15 +2272,18 @@ This can be an issue with your OpenSSL libraries. + %1 has been moved to %2. + %1 has been removed. %1 names a file. + %1 has been renamed to %2 and %n other file(s) have been renamed. @@ -1897,29 +2291,35 @@ This can be an issue with your OpenSSL libraries. + %1 has been renamed to %2. %1 and %2 name files. + %1 has been updated. %1 names a file. + %1 is currently locked. + A folder from an external storage has been added. A folder from an external storage has been added. + A folder has surpassed the set folder size limit of %1MB: %2. %3 + A large number of files in the server have been deleted. Please confirm if you'd like to proceed with these deletions. Alternatively, you can restore all deleted files by uploading from '%1' folder to the server. @@ -1928,6 +2328,7 @@ Bitte bestätigen Sie, ob Sie mit diesen Löschungen fortfahren möchten. Alternativ können Sie alle gelöschten Dateien wiederherstellen, indem Sie sie aus dem Ordner "%1" auf den Server hochladen. + A large number of files in your local '%1' folder have been deleted. Please confirm if you'd like to proceed with these deletions. Alternatively, you can restore all deleted files by downloading them from the server. @@ -1936,10 +2337,12 @@ Bitte bestätigen Sie, ob Sie mit diesen Löschungen fortfahren möchten. Alternativ können Sie alle gelöschten Dateien wiederherstellen, indem Sie sie vom Server herunterladen. + A new folder larger than %1 MB has been added: %2. A new folder larger than %1 MB has been added: %2. + Changes in synchronized folders could not be tracked reliably. This means that the synchronization client might not upload local changes immediately and will instead only scan for local changes and upload them occasionally (every two hours by default). @@ -1948,70 +2351,87 @@ This means that the synchronization client might not upload local changes immedi + Could not read system exclude file + Keep syncing + Please choose a different location. %1 isn't a readable folder. + Please choose a different location. %1 isn't a valid folder. + Please choose a different location. The folder %1 doesn't exist. + Please go in the settings to select it if you wish to download it. + Proceed with Deletion Proceed with deletion + Remove all files? Remove all files? + Restore Files from Server Restore files from server + Restore Files to Server Restore files to server + Stop syncing + Sync Activity + The file %1 was created but was excluded from synchronization previously. It will not be synchronized. + The folder %1 has surpassed the set folder size limit of %2MB. + The folder %1 was created but was excluded from synchronization previously. Data inside it will not be synchronized. + Virtual file download failed with code "%1", status "%2" and error message "%3" + Would you like to stop syncing this folder? @@ -2019,26 +2439,32 @@ This means that the synchronization client might not upload local changes immedi OCC::FolderCreationDialog + %1 Create new folder %1 Create new folder + Could not create a folder! Check your write permissions. - Create new folder + + Error - Enter folder name + + Create new folder - Error + + Enter folder name + Folder already exists @@ -2046,108 +2472,136 @@ This means that the synchronization client might not upload local changes immedi OCC::FolderMan + %1 (Sync is paused) + (backup %1) (backup %1) + (backup) (backup) + An old sync journal "%1" was found, but could not be removed. Please make sure that no application is currently using it. + Could not reset folder state + Last sync was successful. + Please choose a different location. %1 is already being used as a sync folder for %2. folder location, server url + + Please choose a different location. %1 is already being used as a sync folder. + Please choose a different location. %1 is already contained in a folder used as a sync folder. + Please choose a different location. The path %1 doesn't exist. + Please choose a different location. The path %1 isn't a folder. + Please choose a different location. The selected folder isn't valid. + + Please choose a different location. You don't have enough permissions to write to %1. folder location + Preparing for sync. + Setup error. + Sync finished with unresolved conflicts. + Sync is paused. + Sync is running. + Sync request was cancelled. + Syncing %1 + Syncing %1 (%2 left) + Syncing %1 (A few seconds left) + Syncing %1 of %2 + Syncing %1 of %2 (%3 left) + Syncing %1 of %2 (A few seconds left) + The folder %1 is linked to multiple accounts. This setup can cause data loss and it is no longer supported. To resolve this issue: please remove %1 from one of the accounts and create a new sync folder. @@ -2155,10 +2609,12 @@ For advanced users: this issue might be related to multiple sync database files + Undefined state. + Waiting to start syncing. @@ -2166,14 +2622,17 @@ For advanced users: this issue might be related to multiple sync database files OCC::FolderStatusDelegate + Add Folder Sync Add Folder Sync + File + Synchronize any other local folder with your %1 Synchronize any other local folder with your %1 @@ -2181,113 +2640,141 @@ For advanced users: this issue might be related to multiple sync database files OCC::FolderStatusModel + %1 %2 Example text: "Uploading foobar.png" + %1 %2 (%3 of %4) Example text: "Uploading foobar.png (2MB of 2MB)" + %1 %2 … Example text: "Uploading foobar.png (1MB of 2MB) time left 2 minutes at a rate of 24Kb/s" Example text: "Syncing 'foo.txt', 'bar.txt'" + + %1 (%2) + %1 of %2, file %3 of %4 Example text: "12 MB of 345 MB, file 6 of 7" + %5 left, %1 of %2, file %3 of %4 + + , + A few seconds left, %1 of %2, file %3 of %4 Example text: "5 minutes left, 12 MB of 345 MB, file 6 of 7" + About to start syncing + Checking for changes in local "%1" + Checking for changes in remote "%1" + Click this button to add a folder to synchronize. + Could not decrypt! + Download %1/s Example text: "Download 24Kb/s" (%1 is replaced by 24Kb (translated)) + Error while loading the list of folders from the server. + Fetching folder list from server … + File %1 of %2 + Preparing to sync … + Signed out + Synchronizing files in local folder + Synchronizing virtual files in local folder + Syncing local and remote changes + There are unresolved conflicts. Click for details. + Upload %1/s Example text: "Upload 24Kb/s" (%1 is replaced by 24Kb (translated)) + Virtual file support is enabled. + Waiting for %n other folder(s) … @@ -2295,14 +2782,17 @@ For advanced users: this issue might be related to multiple sync database files + You need to be connected to add a folder + ↑ %1/s + ↓ %1/s @@ -2310,6 +2800,7 @@ For advanced users: this issue might be related to multiple sync database files OCC::FolderWatcher + The watcher did not receive a test notification. @@ -2317,6 +2808,7 @@ For advanced users: this issue might be related to multiple sync database files OCC::FolderWatcherPrivate + This problem usually happens when the inotify watches are exhausted. Check the FAQ for details. @@ -2324,10 +2816,12 @@ For advanced users: this issue might be related to multiple sync database files OCC::FolderWizard + Add Folder Sync Connection + Add Sync Connection @@ -2335,30 +2829,37 @@ For advanced users: this issue might be related to multiple sync database files OCC::FolderWizardLocalPath + Add Folder Sync Add Folder Sync + Choose Choose + Click to select a local folder to sync. + Enter the path to the local folder. + Select a folder on your hard drive that should be permanetly connected to your %1. All files and subfolders are automatically uploaded and synchronized Select a folder on your hard drive that should be permanetly connected to your %1. All files and subfolders are automatically uploaded and synchronized. + Select the source folder + Step 1 of 3: Select local folder Step 1 of 3: Select local folder @@ -2366,58 +2867,74 @@ For advanced users: this issue might be related to multiple sync database files OCC::FolderWizardRemotePath + Add Folder Sync Add Folder Sync + Authentication failed accessing %1 + Both folders are permanently linked and the respective contents are automatically synchronized and updated. Both folders are permanently linked and the respective contents are automatically synchronized and updated. + Choose this to sync the entire account + Create Remote Folder + Create folder Create folder + Enter the name of the new folder to be created below "%1": Enter the name of the new folder to be created below "%1": + Failed to create the folder on %1. Please check manually. + Failed to list a folder. Error: %1 + Folder was successfully created on %1. + + + Please choose a different location. %1 is already being synced to %2. + Please now select or create a target folder in your %1 where the content should be uploaded and synchronized. Please now select or create a target folder in your %1 where the content should be uploaded and synchronized. + Refresh + Step 2 of 3: Directory in your %1 Step 2 of 3: Directory in your %1 @@ -2425,256 +2942,318 @@ For advanced users: this issue might be related to multiple sync database files OCC::FolderWizardSelectiveSync + + + (experimental) + Add Folder Sync Add Folder Sync + Step 3 of 3: Selektive Synchronisation Step 3 of 3: Selective Synchronisation + + + Use virtual files instead of downloading content immediately %1 Use virtual files instead of downloading content immediately %1 + Virtual files are not supported at the selected location - Virtual files are not supported for Windows partition roots as local folder. Please choose a valid subfolder under drive letter. - + + Virtual files are not supported for Windows partition roots as local folder. Please choose a valid subfolder under drive letter. + + + + + OCC::GeneralSettings + + + - beta: contains versions with new features that may not be tested thoroughly +- daily: contains versions created daily only for testing and development + +Downgrading versions is not possible immediately: changing from beta to stable means waiting for the new stable version. + list of available update channels to non enterprise users and downgrading warning + + + + + - enterprise: contains stable versions for customers. + +Downgrading versions is not possible immediately: changing from stable to enterprise means waiting for the new enterprise version. + list of available update channels to enterprise users and downgrading warning + + + + + Cancel + + + + + Change update channel + + + + + Changing update channel? + + + + + Debug Archive Created + + + + + Debug archive is created at %1 + + + + + Server notifications that require attention. + + + + + Show call notification dialogs. + + + + + The channel determines which upgrades will be offered to install: +- stable: contains tested versions considered reliable + + starts list of available update channels, stable is always available + + + + + You cannot disable autostart because system-wide autostart is enabled. + + + + + Zip Archives + + + + + daily + + + + + enterprise + + + + + https://wl.hidrive.com/easy/0004 + https://wl.hidrive.com/easy/0004 + + + + https://wl.hidrive.com/easy/0005 + https://wl.hidrive.com/easy/0005 + + + + https://wl.hidrive.com/easy/0006 + https://wl.hidrive.com/easy/0006 - - - OCC::GeneralSettings - &Analysis data collection for needs-based design - &Analysis data collection for needs-based design + + https://wl.hidrive.com/easy/0007 + https://wl.hidrive.com/easy/0007 + &Automatically check for updates + &Launch on System Startup + &Restart && Update - - beta: contains versions with new features that may not be tested thoroughly -- daily: contains versions created daily only for testing and development - -Downgrading versions is not possible immediately: changing from beta to stable means waiting for the new stable version. - list of available update channels to non enterprise users and downgrading warning - - - - - enterprise: contains stable versions for customers. - -Downgrading versions is not possible immediately: changing from stable to enterprise means waiting for the new enterprise version. - list of available update channels to enterprise users and downgrading warning - - - + Advanced + Ask for confirmation before synchronizing external storages Ask for confirmation before synchronizing external storages + Ask for confirmation before synchronizing new folders larger than Ask for confirmation before synchronizing new folders larger than + Automatically disable synchronisation of folders that overcome limit Automatically disable synchronisation of folders that overcome limit - Cancel - - - - Change update channel - - - - Changing update channel? - - - + Check Now + + Create Debug Archive + Data Protection Data Protection - Debug Archive Created - - - - Debug archive is created at %1 - - - + Desktop client x.x.x + Edit &Ignored Files + For System Tray + General Settings + Legal Notice + MB Trailing part of "Ask confirmation before syncing folder larger than" + More Information More Information + Move removed files to trash + Necessary data Necessary data + Notify when synchronised folders grow larger than specified limit + Open Source Software Open Source Software + Privacy Policy Privacy Policy + Required to ensure that the software can be used as expected Required to ensure that the software can be used as expected + S&how crash reporter + Send anonymous use Send anonymous use - Server notifications that require attention. - - - + Show Server &Notifications - Show call notification dialogs. - - - + Show call notifications + Show sync folders in &Explorer's navigation pane Show sync folders in &Explorer's navigation pane - The channel determines which upgrades will be offered to install: -- stable: contains tested versions considered reliable - - starts list of available update channels, stable is always available - - - + This helps us to optimize the software and to better identify system crashes and unexpected errors. This helps us to optimize the software and to better identify system crashes and unexpected errors. + Update channel + Updates Updates + Usage Documentation + Use &monochrome icons - You cannot disable autostart because system-wide autostart is enabled. - - - - Zip Archives - - - + + beta - daily - - - - enterprise - - - - https://wl.hidrive.com/easy/0004 - https://wl.hidrive.com/easy/0004 - - - https://wl.hidrive.com/easy/0005 - https://wl.hidrive.com/easy/0005 - - - https://wl.hidrive.com/easy/0006 - https://wl.hidrive.com/easy/0006 - - - https://wl.hidrive.com/easy/0007 - https://wl.hidrive.com/easy/0007 - - + + stable @@ -2682,22 +3261,27 @@ Downgrading versions is not possible immediately: changing from stable to enterp OCC::GETFileJob + Connection Timeout + No E-Tag received from server, check Proxy/Gateway + Server returned wrong content-range + We received a different E-Tag for resuming. Retrying next time. + We received an unexpected download Content-Length. @@ -2705,20 +3289,24 @@ Downgrading versions is not possible immediately: changing from stable to enterp OCC::GetOrCreatePublicLinkShare + Could not retrieve or create the public link share. Error: %1 + Password for share required + Please enter a password for your link share: + Sharing error @@ -2726,18 +3314,22 @@ Downgrading versions is not possible immediately: changing from stable to enterp OCC::HttpCredentialsGui + <a href="%1">Click here</a> to request an app password from the web interface. + Enter Password + Please enter %1 password:<br><br>Username: %2<br>Account: %3<br> + Reading from keychain failed with error: "%1" @@ -2745,49 +3337,50 @@ Downgrading versions is not possible immediately: changing from stable to enterp OCC::IgnoreListEditor + + This entry is provided by the system at "%1" and cannot be modified in this view. + + + + Files Ignored by Patterns + Global Ignore Settings + Ignored Files Editor + Sync hidden files - - This entry is provided by the system at "%1" and cannot be modified in this view. - - - + OCC::IgnoreListTableWidget - Add - - - + Add a new ignore pattern: Add a new ignore pattern: - Allow Deletion - - - + Cannot write changes to "%1". + Could not open file + Files or folders matching a pattern will not be synchronized. Items where deletion is allowed will be deleted if they prevent a directory from being removed. This is useful for meta data. @@ -2796,18 +3389,32 @@ Items where deletion is allowed will be deleted if they prevent a directory from Items where deletion is allowed will be deleted if they prevent a directory from being removed. This is useful for meta data. + Ignore Pattern Ignore Pattern + + Add + + + + + Allow Deletion + + + + Pattern + Remove + Remove all @@ -2815,117 +3422,146 @@ Items where deletion is allowed will be deleted if they prevent a directory from OCC::InvalidFilenameDialog + Cannot rename file because a file with the same name does already exist on the server. Please pick another name. + Checking rename permissions … + Could not rename file. Please make sure you are connected to the server. + Could not rename local file. %1 - Error - - - + Failed to fetch permissions with error %1 + Filename contains illegal characters: %1 + Filename contains leading and trailing spaces. + Filename contains leading spaces. + Filename contains trailing spaces. - Invalid filename + + Rename file - New filename + + The file "%1" could not be synced because the name contains characters which are not allowed on the server. - Please enter a new name for the file: + + The file "%1" could not be synced because the name contains characters which are not allowed on this system. - Rename file + + The following basenames are not allowed: %1 - The file "%1" could not be synced because the name contains characters which are not allowed on the server. + + The following characters are not allowed on the system: \ / : ? * " < > | leading/trailing spaces - The file "%1" could not be synced because the name contains characters which are not allowed on this system. + + The following characters are not allowed: %1 - The file could not be synced because it contains characters which are not allowed on this system. + + The following file extensions are not allowed: %1 - The following basenames are not allowed: %1 + + The following filenames are not allowed: %1 - The following characters are not allowed on the system: \ / : ? * " < > | leading/trailing spaces + + Use invalid name - The following characters are not allowed: %1 + + You don't have the permission to rename this file. Please ask the author of the file to rename it. + + + + + Error - The following file extensions are not allowed: %1 + + Invalid filename - The following filenames are not allowed: %1 + + New filename - Use invalid name + + Please enter a new name for the file: - You don't have the permission to rename this file. Please ask the author of the file to rename it. + + The file could not be synced because it contains characters which are not allowed on this system. - + OCC::LegalNotice + <p>Copyright 2017-2025 Nextcloud GmbH<br />Copyright 2012-2023 ownCloud GmbH</p> + <p>Licensed under the GNU General Public License (GPL) Version 2.0 or any later version.</p> + Close + + Legal notice @@ -2933,24 +3569,29 @@ Items where deletion is allowed will be deleted if they prevent a directory from OCC::LogBrowser + Enable logging to temporary folder + Log Output + Open folder + The client can write debug logs to a temporary folder. These logs are very helpful for diagnosing problems. Since log files can get large, the client will start a new one for each sync run and compress older ones. It will also delete log files after a couple of hours to avoid consuming too much disk space. If enabled, logs will be written to %1 + This setting persists across client restarts. Note that using any logging command line options will override this setting. @@ -2959,10 +3600,14 @@ Note that using any logging command line options will override this setting. OCC::Logger + + <nobr>File "%1"<br/>cannot be opened for writing.<br/><br/>The log output <b>cannot</b> be saved!</nobr> + + Error @@ -2970,26 +3615,32 @@ Note that using any logging command line options will override this setting. OCC::Mac::FileProviderEditLocallyJob + An error occurred during setup. + Could not find a file for local editing. Make sure its path is valid and it is synced locally. + Could not get file ID. + Could not get file identifier. + Could not start editing locally. + The file identifier is empty. @@ -2997,121 +3648,157 @@ Note that using any logging command line options will override this setting. OCC::NetworkSettings - Download Bandwidth + + HTTP(S) proxy - HTTP(S) proxy + + Hostname of proxy server - Host + + Password for proxy server - Hostname of proxy server + + SOCKS5 proxy + + + + + Username for proxy server + + + + + Download Bandwidth + + + + + Host + + KBytes/s + + Limit automatically + + Limit to + + Limit to 3/4 of estimated bandwidth + Manually specify proxy + + No limit + No proxy No proxy + Note: proxy settings have no effects for accounts on localhost - Password for proxy server - - - + Proxy Settings + Proxy server requires authentication - SOCKS5 proxy - - - + Upload Bandwidth + + + Use global settings + Use system proxy - - Username for proxy server - - - + OCC::NSISUpdater + <p>A new version of the %1 Client is available but the updating process failed.</p><p><b>%2</b> has been downloaded. The installed version is %3. If you confirm restart and update, your computer may reboot to complete the installation.</p> + <p>A new version of the %1 Client is available.</p><p><b>%2</b> is available for download. The installed version is %3.</p> + Ask again later + Get update + New Version Available + Restart and update + Skip this time + Update Failed + Update manually @@ -3119,54 +3806,67 @@ Note that using any logging command line options will override this setting. OCC::OCUpdater + %1 available. Restart application to start the update. + A new update for %1 is about to be installed. The updater may ask for additional privileges during the process. Your computer may reboot to complete the installation. + Checking update server … + Could not check for new updates. + Could not download update. Please open %1 to download the update manually. + Could not download update. Please open <a href='%1'>%1</a> to download the update manually. + Downloading %1 … + New %1 is available. Please open %2 to download the update. + New %1 is available. Please open <a href='%2'>%2</a> to download the update. + New %1 update ready + No updates available. Your installation is at the latest version. + Update Check + Update status is unknown: Did not check for new updates. @@ -3174,55 +3874,72 @@ Note that using any logging command line options will override this setting. OCC::OwncloudAdvancedSetupPage + %1 folder "%2" is synced to local folder "%3" + + %1 free space %1 gets replaced with the size and a matching unit. Example: 3 MB or 5 GB + + (%1) + + (experimental) + Connect + In Finder's "Locations" sidebar section + Local Sync Folder + Sync the folder "%1" + There isn't enough free space in the local folder! + + Use &virtual files instead of downloading content immediately %1 + Virtual files are not supported at the selected location + Virtual files are not supported for Windows partition roots as local folder. Please choose a valid subfolder under drive letter. + Warning: The local folder is not empty. Pick a resolution! @@ -3230,26 +3947,32 @@ Note that using any logging command line options will override this setting. OCC::OwncloudConnectionMethodDialog + <html><head/><body><p>Failed to connect to the secure server address <em>%1</em>. How do you wish to proceed?</p></body></html> + <html><head/><body><p>Failed to connect to the secure server address specified. How do you wish to proceed?</p></body></html> + Configure client-side TLS certificate + Connection failed + Retry unencrypted over HTTP (insecure) + Select a different URL @@ -3257,71 +3980,88 @@ Note that using any logging command line options will override this setting. OCC::ownCloudGui + %1 (%2, %3) + %1: %2 Example text: "Nextcloud: Syncing 25MB (3 minutes left)" (%1 is the folder name to be synced, %2 a status message for that folder) + Account %1: %2 + Account synchronization is disabled + Checking for changes in local "%1" + Checking for changes in remote "%1" + Disconnected from %1 + Disconnected from accounts: + Please sign in + Terms of service + The server on account %1 runs an unsupported version %2. Using this client with unsupported server versions is untested and potentially dangerous. Proceed at your own risk. + There are no sync folders configured. + Unsupported Server Version + Your account %1 requires you to accept the terms of service of your server. You will be redirected to %2 to acknowledge that you have read it and agrees with it. + macOS VFS for %1: A problem was encountered. + macOS VFS for %1: Last sync was successful. + macOS VFS for %1: Sync is running. @@ -3329,14 +4069,17 @@ Note that using any logging command line options will override this setting. OCC::OwncloudHttpCredsPage + &Email + Connect to %1 + Enter user credentials @@ -3344,6 +4087,8 @@ Note that using any logging command line options will override this setting. OCC::OwncloudPropagator + + Impossible to get modification time for file in conflict %1 @@ -3351,18 +4096,22 @@ Note that using any logging command line options will override this setting. OCC::OwncloudSetupPage + &Next > + Could not load certificate. Maybe wrong password? + Server address does not seem to be valid + The link to your %1 web interface when you open it in the browser. %1 will be replaced with the application name @@ -3371,118 +4120,149 @@ Note that using any logging command line options will override this setting. OCC::OwncloudSetupWizard + <font color="green"><b>File Provider-based account %1 successfully created!</b></font> + <font color="green"><b>Local sync folder %1 successfully created!</b></font> + <font color="green">Successfully connected to %1: %2 version %3 (%4)</font><br/><br/> + <p><font color="red">Remote folder creation failed probably because the provided credentials are wrong.</font><br/>Please go back and check your credentials.</p> + A sync connection from %1 to remote directory %2 was set up. + Access forbidden by server. To verify that you have proper access, <a href="%1">click here</a> to access the service with your browser. + Cannot remove and back up the folder because the folder or a file in it is open in another program. Please close the folder or file and hit retry or cancel the setup. + Connection to %1 could not be established. Please check again. + Could not create local folder %1 + Creating local sync folder %1 … + Error: %1 + Failed to connect to %1 at %2:<br/>%3 + Folder rename failed + Invalid URL + Local sync folder %1 already exists, setting it up for sync.<br/><br/> + No remote folder specified! + OK + Remote folder %1 created successfully. + + Remote folder %1 creation failed with error <tt>%2</tt>. + Successfully connected to %1! + The authenticated request to the server was redirected to "%1". The URL is bad, the server is misconfigured. + + The folder creation resulted in HTTP error code %1 + The remote folder %1 already exists. Connecting it for syncing. + The remote folder creation failed because the provided credentials are wrong!<br/>Please go back and check your credentials.</p> + There was an invalid response to an authenticated WebDAV request + Timeout while trying to connect to %1 at %2. + Trying to connect to %1 at %2 … + creating folder on Nextcloud: %1 + failed. @@ -3490,30 +4270,37 @@ Note that using any logging command line options will override this setting. OCC::OwncloudWizard + Add %1 account + Cancel + Enable experimental feature? + Enable experimental placeholder mode + Skip folders configuration + Stay safe + When the "virtual files" mode is enabled no files will be downloaded initially. Instead, a tiny "%1" file will be created for each file that exists on the server. The contents can be downloaded by running these files or by using their context menu. The virtual files mode is mutually exclusive with selective sync. Currently unselected folders will be translated to online-only folders and your selective sync settings will be reset. @@ -3527,10 +4314,12 @@ This is a new, experimental mode. If you decide to use it, please report any iss OCC::PasswordInputDialog + Password for share required + Please enter a password for your share: @@ -3538,6 +4327,7 @@ This is a new, experimental mode. If you decide to use it, please report any iss OCC::PollJob + Invalid JSON reply from the poll URL @@ -3545,165 +4335,210 @@ This is a new, experimental mode. If you decide to use it, please report any iss OCC::ProcessDirectoryJob + %1 name containing the character "%2" is not supported on this file system. folder or file impossible to sync due to an invalid name, placeholders will be file or folder and the invalid character + %1 name contains at least one invalid character + %1 name is a reserved name on this file system. + + + + Cannot be renamed or uploaded. + Cannot modify encrypted item because the selected certificate is not valid. + Cannot sync due to invalid modification time + Case Clash Conflict: Server file downloaded and renamed to avoid clash. + Conflict: Server version downloaded, local copy renamed and not uploaded. + Could not upload file, because it is open in "%1". + Error while deleting file record %1 from the database + Error while reading the database + File name of folder entity to use when warning about invalid name + File has extension reserved for virtual files. + File is listed on the ignore list. + File names ending with a period are not supported on this file system. + File/Folder is ignored because it's hidden. + Filename contains leading and trailing spaces. + Filename contains leading spaces. + Filename contains trailing spaces. + Filename is too long. + Folder name of folder entity to use when warning about invalid name + Ignored because of the "choose what to sync" blacklist + + Moved to invalid target, restoring + Not allowed because you don't have permission to add files in that folder + + Not allowed because you don't have permission to add subfolders to that folder + Not allowed to remove, restoring + Not allowed to upload this file because it is read-only on the server, restoring + Reason: the entire filename is forbidden. + Reason: the file has a forbidden extension (.%1). + Reason: the filename contains a forbidden character (%1). + Reason: the filename has a forbidden base name (filename start). + Server replied with an error while reading directory "%1" : %2 + Server reported no %1 + Stat failed. + Symbolic links are not supported in syncing. + The filename cannot be encoded on your file system. + The filename is blacklisted on the server. + file id + permission + size @@ -3711,26 +4546,38 @@ This is a new, experimental mode. If you decide to use it, please report any iss OCC::PropagateDirectory + Could not delete file %1 from local DB + Error updating metadata due to invalid modification time + Error updating metadata: %1 + File is currently in use + + + + + + The folder %1 cannot be made read-only: %2 + + unknown exception @@ -3738,58 +4585,75 @@ This is a new, experimental mode. If you decide to use it, please report any iss OCC::PropagateDownloadFile + + Could not delete file record %1 from local DB + Could not get file %1 from local DB + Error updating metadata: %1 + File %1 can not be downloaded because of a local file name clash! + File %1 cannot be downloaded because encryption information is missing. + File %1 downloaded but it resulted in a local file name clash! + + File %1 has invalid modified time reported by server. Do not save it. + + File has changed since discovery + File was deleted from server + Free space on disk is less than %1 + The download would reduce free local disk space below the limit + The downloaded file is empty, but the server said it should have been %1. + The file %1 is currently in use + The file could not be downloaded completely. @@ -3797,10 +4661,12 @@ This is a new, experimental mode. If you decide to use it, please report any iss OCC::PropagateItemJob + ; Restoration Failed: %1 + A file or folder was removed from a read only share, but restoring failed: %1 @@ -3808,30 +4674,39 @@ This is a new, experimental mode. If you decide to use it, please report any iss OCC::PropagateLocalMkdir + Could not create folder %1 Could not create folder %1 + Error updating metadata: %1 + Folder %1 cannot be created because of a local file or folder name clash! + The file %1 is currently in use + + + The folder %1 cannot be made read-only: %2 + could not delete file %1, error: %2 + unknown exception @@ -3839,14 +4714,19 @@ This is a new, experimental mode. If you decide to use it, please report any iss OCC::PropagateLocalRemove + Could not delete file record %1 from local DB + Could not remove %1 because of a local file name clash + + + Temporary error when removing local item removed from server. @@ -3854,38 +4734,49 @@ This is a new, experimental mode. If you decide to use it, please report any iss OCC::PropagateLocalRename + Could not delete file record %1 from local DB + + Could not get file %1 from local DB + + Error setting pin state + Error updating metadata: %1 + Failed to propagate directory rename in hierarchy + Failed to rename file + File %1 downloaded but it resulted in a local file name clash! + Folder %1 cannot be renamed because of a local file or folder name clash! Folder %1 cannot be renamed because of a local file or folder name clash! + The file %1 is currently in use @@ -3893,10 +4784,12 @@ This is a new, experimental mode. If you decide to use it, please report any iss OCC::PropagateRemoteDelete + Could not delete file record %1 from local DB + Wrong HTTP code returned by server. Expected 204, but received "%1 %2". @@ -3904,6 +4797,7 @@ This is a new, experimental mode. If you decide to use it, please report any iss OCC::PropagateRemoteDeleteEncryptedRootFolder + Wrong HTTP code returned by server. Expected 204, but received "%1 %2". @@ -3911,18 +4805,22 @@ This is a new, experimental mode. If you decide to use it, please report any iss OCC::PropagateRemoteMkdir + Error writing metadata to the database: %1 + Failed to encrypt a folder %1 + The file %1 is currently in use + Wrong HTTP code returned by server. Expected 201, but received "%1 %2". @@ -3930,34 +4828,44 @@ This is a new, experimental mode. If you decide to use it, please report any iss OCC::PropagateRemoteMove + Could not delete file record %1 from local DB + Could not get file %1 from local DB + Could not rename %1 to %2, error: %3 + Error setting pin state + + Error updating metadata: %1 + Error writing metadata to the database + + The file %1 is currently in use + Wrong HTTP code returned by server. Expected 201, but received "%1 %2". @@ -3965,46 +4873,60 @@ This is a new, experimental mode. If you decide to use it, please report any iss OCC::PropagateUploadFileCommon + Error updating metadata: %1 + Failed to unlock encrypted folder. Failed to unlock encrypted folder. + Failed to upload encrypted file. + File %1 cannot be uploaded because another file with the same name, differing only in case, exists + + + File %1 has invalid modification time. Do not upload to the server. + File Removed (start upload) %1 + Local file changed during sync. + Local file changed during syncing. It will be resumed. + The file %1 is currently in use + Unable to upload an item with invalid characters + + Upload of %1 exceeds the quota for the folder Upload of %1 exceeds the quota for the folder @@ -4012,26 +4934,32 @@ This is a new, experimental mode. If you decide to use it, please report any iss OCC::PropagateUploadFileNG + Local file changed during sync. + Missing ETag from server + Missing File ID from server + Poll URL missing + The local file was removed during sync. + Unexpected return code from server (%1) @@ -4039,18 +4967,22 @@ This is a new, experimental mode. If you decide to use it, please report any iss OCC::PropagateUploadFileV1 + Local file changed during sync. + Poll URL missing + The local file was removed during sync. + The server did not acknowledge the last chunk. (No e-tag was present) @@ -4058,22 +4990,27 @@ This is a new, experimental mode. If you decide to use it, please report any iss OCC::ProxyAuthDialog + Password: + Proxy authentication required + Proxy: + The proxy server needs a username and password. + Username: @@ -4081,6 +5018,7 @@ This is a new, experimental mode. If you decide to use it, please report any iss OCC::SelectiveSyncDialog + Choose What to Sync @@ -4088,26 +5026,33 @@ This is a new, experimental mode. If you decide to use it, please report any iss OCC::SelectiveSyncWidget + An error occurred while loading the list of sub folders. + Deselect remote folders you do not wish to synchronize. + Loading … + Name + + No subfolders currently on the server. + Size @@ -4115,6 +5060,7 @@ This is a new, experimental mode. If you decide to use it, please report any iss OCC::ServerNotificationHandler + Reply @@ -4122,14 +5068,17 @@ This is a new, experimental mode. If you decide to use it, please report any iss OCC::sesSnackBar + Error + Success Success + Warning @@ -4137,27 +5086,33 @@ This is a new, experimental mode. If you decide to use it, please report any iss OCC::SettingsDialog + %1 Settings This name refers to the application name e.g Nextcloud + Account + General + Network + New account New Account + Settings Settings @@ -4165,19 +5120,24 @@ This is a new, experimental mode. If you decide to use it, please report any iss OCC::ShareeModel + %1 (%2) sharee (shareWithAdditionalInfo) + Global search results + No results found + + Search globally @@ -4185,6 +5145,7 @@ This is a new, experimental mode. If you decide to use it, please report any iss OCC::ShareManager + Error @@ -4192,38 +5153,47 @@ This is a new, experimental mode. If you decide to use it, please report any iss OCC::ShareModel + %1 days + 1 day + Could not find local folder for %1 + Internal link + Link share + Secure file drop + Secure file drop link + Share link + Today @@ -4231,40 +5201,50 @@ This is a new, experimental mode. If you decide to use it, please report any iss OCC::SocketApi + + Activity + Context menu share + Copy internal link + Copy private link to clipboard + Could not encrypt the following folder: "%1". Server replied with error: %2 + Delete Delete + Delete local changes + Encrypt + Expires in %1 minutes remaining time before lock expires @@ -4273,82 +5253,104 @@ Server replied with error: %2 + Failed to encrypt folder + Failed to encrypt folder at "%1" + Folder encrypted successfully + I shared something with you + Leave this share + Lock file + Locked by %1 + Move and rename … + Move and upload … + Move, rename and upload … + + Open in browser + Resharing this file is not allowed + Resharing this folder is not allowed + Resolve conflict … + Select new location … + Send private link by email … + + Share options + The account %1 does not have end-to-end encryption configured. Please configure this in your account settings to enable folder encryption. + The following folder was encrypted successfully: "%1" + Unlock file @@ -4356,98 +5358,122 @@ Server replied with error: %2 OCC::SslButton + %1 + %1 (self-signed) + <h3>Certificate Details</h3> + <h3>Fingerprints</h3> + <h3>Issuer</h3> + <p><b>Note:</b> This certificate was manually approved</p> + Certificate information: + Common Name (CN): + Country: + Expires on: + Issued on: + Issuer: + No support for SSL session tickets/identifiers + Organization (O): + Organizational Unit (OU): + SHA-1: + SHA-256: + Serial: + Server version: %1 + State/Province: + Subject Alternative Names: + The connection is not secure + This connection is NOT secure as it is not encrypted. This connection is NOT secure as it is not encrypted. + This connection is encrypted using %1 bit %2. This connection is encrypted using %1 bit %2. @@ -4455,122 +5481,156 @@ Server replied with error: %2 OCC::SslErrorDialog + + + &lt;not specified&gt; + Additional errors: + Cannot connect securely to <i>%1</i>: + + Country: %1 + Effective Date: %1 + Expiration Date: %1 + Fingerprint (SHA-256): <tt>%1</tt> + Fingerprint (SHA-512): <tt>%1</tt> + Fingerprint (SHA1): <tt>%1</tt> + Issuer: %1 + + Organization: %1 - Trust this certificate anyway - - - + + Unit: %1 + Untrusted Certificate + with Certificate %1 - + + + Trust this certificate anyway + + + OCC::SyncEngine + %1 (skipped due to earlier error, trying again in %2) + Cannot open the sync journal + Could not set file record to local DB: %1 + Could not update file metadata: %1 + Could not update file: %1 + Could not update virtual file metadata: %1 + Disk space is low: Downloads that would reduce free space below %1 were skipped. + Only %1 are available, need at least %2 to start Placeholders are postfixed with file sizes using Utility::octetsToString() + There is insufficient space available on the server for some uploads. + Unable to open or create the local sync database. Make sure you have write access in the sync folder. + Unable to read from the sync journal. + Unable to read the blacklist from the local database + Unresolved conflict. + Using virtual files with suffix, but suffix is not set @@ -4578,54 +5638,70 @@ Server replied with error: %2 OCC::SyncStatusSummary + %1 of %2 + %1 of %2 · %3 left + + + All synced! All synced! + Checking folder changes + + Offline + See below for errors + See below for warnings + Some files could not be synced! + Some files couldn't be synced! + Sync paused + Syncing + Syncing changes + Syncing file %1 of %2 @@ -4633,42 +5709,54 @@ Server replied with error: %2 OCC::Systray + Add account + Download + Exit %1 + Help + Open main dialog + + Pause sync + Pause sync for all + + Resume sync + Resume sync for all + Settings Settings @@ -4676,22 +5764,27 @@ Server replied with error: %2 OCC::TermsOfServiceCheckWidget + Copy Link + Link copied to clipboard. + Open Browser Open Browser + Polling + Waiting for terms to be accepted @@ -4699,19 +5792,23 @@ Server replied with error: %2 OCC::Theme + %1 Desktop Client Version %2 (%3) %1 is application name. %2 is the human version string. %3 is the operating system name. + <p><small>Using virtual files plugin: %1</small></p> + <p>This release was supplied by %1.</p> + easy/0118 easy/0108 @@ -4719,18 +5816,22 @@ Server replied with error: %2 OCC::UnifiedSearchResultsListModel + Failed to fetch providers. + Failed to fetch search providers for '%1'. Error: %2 + Search has failed for '%1'. Error: %2 + Search has failed for '%2'. @@ -4738,14 +5839,17 @@ Server replied with error: %2 OCC::UpdateE2eeFolderMetadataJob + Failed to finalize item. Failed to finalize item. + Failed to unlock encrypted folder. Failed to unlock encrypted folder. + Failed to update folder metadata. @@ -4753,33 +5857,43 @@ Server replied with error: %2 OCC::UpdateE2eeFolderUsersMetadataJob + Could not add or remove user %1 to access folder %2 Could not add or remove user %1 to access folder %2 + Could not fetch public key for user %1 + Could not find root encrypted folder for folder %1 + + + + + + + + + Error updating metadata for a folder %1 + Failed to unlock a folder. OCC::User - - %1 notifications - %1 notifications - + %n notification(s) @@ -4787,30 +5901,38 @@ Server replied with error: %2 + End-to-end certificate needs to be migrated to a new one + Open Nextcloud Assistant in browser + Open Nextcloud Talk in browser + Rename file + + Resolve conflict + Retry all uploads + Trigger the migration @@ -4818,18 +5940,22 @@ Server replied with error: %2 OCC::UserModel + <p>Do you really want to remove the connection to the account <i>%1</i>?</p><p><b>Note:</b> This will <b>not</b> delete any files.</p> + Cancel + Confirm Account Removal + Remove connection @@ -4837,6 +5963,7 @@ Server replied with error: %2 OCC::UserStatusSelectorModel + %1 days @@ -4844,6 +5971,7 @@ Server replied with error: %2 + %1 hours @@ -4851,6 +5979,7 @@ Server replied with error: %2 + %1 minutes @@ -4858,62 +5987,81 @@ Server replied with error: %2 + 1 day + + 1 hour + 1 minute + 30 minutes + 4 hours + Could not clear status message. Make sure you are connected to the server. + Could not fetch predefined statuses. Make sure you are connected to the server. + Could not fetch status. Make sure you are connected to the server. + Could not set status. Make sure you are connected to the server. + + Don't clear + Emojis are not supported. Some status functionality may not work. + Less than a minute + Status feature is not supported. You will not be able to set your status. + + This week + + Today @@ -4921,14 +6069,17 @@ Server replied with error: %2 OCC::Vfs + Please choose a different location. %1 is a drive. It doesn't support virtual files. + Please choose a different location. %1 is a network drive. It doesn't support virtual files. + Please choose a different location. %1 isn't a NTFS file system. It doesn't support virtual files. @@ -4936,30 +6087,37 @@ Server replied with error: %2 OCC::VfsDownloadErrorDialog + %1 could not be downloaded. - > More details + + Error downloading %1 - Download error + + > More details - Error downloading + + Download error - Error downloading %1 + + Error downloading + More details + could not be downloaded @@ -4967,6 +6125,8 @@ Server replied with error: %2 OCC::VfsSuffix + + Error updating metadata due to invalid modification time @@ -4974,6 +6134,8 @@ Server replied with error: %2 OCC::VfsXAttr + + Error updating metadata due to invalid modification time @@ -4981,10 +6143,12 @@ Server replied with error: %2 OCC::WebEnginePage + Invalid certificate detected + The host "%1" provided an invalid certificate. Continue? @@ -4992,6 +6156,7 @@ Server replied with error: %2 OCC::WebFlowCredentials + <b>You have been logged out of your account %1 at %2. Please login again.</b> <b>You have been logged out of your account %1 at %2. Please login again.</b> @@ -4999,22 +6164,27 @@ Server replied with error: %2 OCC::WelcomePage - Form + + Host your own server - Host your own server + + Keep your data secure and under your control - Keep your data secure and under your control + + Form + Log in + Sign up with provider @@ -5022,55 +6192,68 @@ Server replied with error: %2 OwncloudAdvancedSetupPage + &Local Folder + <html><head/><body><p>If this box is checked, existing content in the local folder will be erased to start a clean sync from the server.</p><p>Do not check this if the local content should be uploaded to the servers folder.</p></body></html> <html><head/><body><p>If this box is checked, existing content in the local folder will be erased to start a clean sync from the server.</p><p>Do not check this if the local content should be uploaded to the servers folder.</p></body></html> + Ask before syncing folders larger than + Choose different folder + Choose what to sync + Erase local folder and start a clean sync + Keep local data + Local Folder + MB Trailing part of "Ask confirmation before syncing folder larger than" + Server address + Sync Logo + Synchronize everything from server + Username @@ -5078,10 +6261,12 @@ Server replied with error: %2 OwncloudHttpCredsPage + &Password + &Username @@ -5089,14 +6274,18 @@ Server replied with error: %2 OwncloudSetupPage + Server address + + TextLabel + This is the link to your %1 web interface when you open it in the browser. @@ -5104,110 +6293,127 @@ Server replied with error: %2 progress + Deleted + Deleting + Downloaded + Downloading + + Error + Filesystem access error + Ignored + Ignoring + Moved to %1 + Moving + Replaced by virtual file + Server version downloaded, copied changed local file into case conflict conflict file + Server version downloaded, copied changed local file into conflict file + + Unknown + Updated end-to-end encryption metadata + Updated local metadata + Updated local virtual files metadata Updated local virtual files metadata + Updating end-to-end encryption metadata + Updating local metadata + Updating local virtual files metadata + Uploaded + Uploading + Virtual file created - - updating local virtual files metadata - Updating local virtual files metadata - QObject - - %1: %2 - this displays an error string (%2) for a file %1 - - + %nd delay in days after an activity @@ -5216,6 +6422,7 @@ Server replied with error: %2 + %nh delay in hours after an activity @@ -5224,6 +6431,7 @@ Server replied with error: %2 + %nm delay in minutes after an activity @@ -5232,70 +6440,92 @@ Server replied with error: %2 + 1m one minute after activity date and time - Could not create debug archive in selected location! - Could not create debug archive in selected location! + + Some time ago + - Error deleting the file + + in the future - Failed to create debug archive - Failed to create debug archive + + now + + + + + The directory %1 cannot be part of your sync directory. Please choose another folder. + The directory %1 cannot be part of your sync directory. Please choose another folder. + New folder - Paths beginning with '#' character are not supported in VFS mode. - + + Could not create debug archive in selected location! + Could not create debug archive in selected location! - Some time ago - + + Failed to create debug archive + Failed to create debug archive + Synced %1 - The directory %1 cannot be part of your sync directory. Please choose another folder. - The directory %1 cannot be part of your sync directory. Please choose another folder. - - + You changed %1 + You created %1 + You deleted %1 + You renamed %1 - in the future + + Error deleting the file - now + + %1: %2 + this displays an error string (%2) for a file %1 - + + + Paths beginning with '#' character are not supported in VFS mode. + + + ResolveConflictsDialog + %1 files in conflict indicate the number of conflicts to resolve @@ -5304,26 +6534,32 @@ Server replied with error: %2 + All local versions + All server versions + Cancel + Choose if you want to keep the local version, server version, or both. If you choose both, the local file will have a number added to its name. + Resolve conflicts + Solve sync conflicts @@ -5331,6 +6567,7 @@ Server replied with error: %2 SesErrorBox + Error @@ -5338,14 +6575,17 @@ Server replied with error: %2 SesTrayHeader + Open Nextcloud in browser Open HiDrive Next in browser + Open local or group folders + Website Website @@ -5353,18 +6593,22 @@ Server replied with error: %2 ShareDelegate + Copied! + Copy share link location + Create a new share link + Share options @@ -5372,62 +6616,78 @@ Server replied with error: %2 ShareDetailsPage + Add another link + Allow resharing + + Allow upload and editing + An error occurred setting the share password. + Copy share link Copy share link + Custom Permissions Custom Permissions + Enter the note to recipient Enter the note to recipient + File drop (upload only) + Hide download + Note to recipient + Password protection + Set expiration date + Share link copied! Share link copied! + Unshare + View only @@ -5435,10 +6695,12 @@ Server replied with error: %2 ShareeSearchField + Search for users or groups… + Sharing is not available for this folder @@ -5446,30 +6708,37 @@ Server replied with error: %2 ShareView + Expires in %1 + Password required for new share + Share password + Shared with you by %1 + Sharing is disabled + Sharing is disabled. + This item cannot be shared. @@ -5477,6 +6746,7 @@ Server replied with error: %2 SyncJournalDb + Failed to connect database. @@ -5484,14 +6754,17 @@ Server replied with error: %2 SyncStatus + Open browser + Resolve conflicts + Sync now @@ -5499,10 +6772,12 @@ Server replied with error: %2 TalkReplyTextField + Reply to … + Send reply to chat message @@ -5510,14 +6785,17 @@ Server replied with error: %2 TermsOfServiceCheckWidget + Logo + Switch to your browser to accept the terms of service + Terms of Service @@ -5525,92 +6803,105 @@ Server replied with error: %2 theme + Error occurred during setup + Error occurred during sync + Preparing to sync + Stopping sync + Sync is paused + Sync is running + Sync status is unknown + Sync was successful + Sync was successful but some files were ignored + Waiting to start syncing - - TrayFoldersMenuButton - - Files - Files - - TrayWindowAccountMenu + Account switcher and settings menu + Add account + Current account + Current account avatar + Current account status is do not disturb + Current account status is online + Exit + Pause sync for all + Resume sync for all + Settings Settings @@ -5618,14 +6909,17 @@ Server replied with error: %2 TrayWindowHeader + More apps + Open %1 in browser + Open local or group folders @@ -5633,26 +6927,32 @@ Server replied with error: %2 TrayWindowHeaderBar + More apps + Open %1 in browser + Open Nextcloud Talk in browser + Open Nextcloud in browser Open HiDrive Next in browser + Open local or group folders + Website Website @@ -5660,6 +6960,7 @@ Server replied with error: %2 UnifiedSearchInputContainer + Search files, messages, events … @@ -5667,6 +6968,7 @@ Server replied with error: %2 UnifiedSearchPlaceholderView + Start typing to search @@ -5674,6 +6976,7 @@ Server replied with error: %2 UnifiedSearchResultFetchMoreTrigger + Load more results @@ -5681,6 +6984,7 @@ Server replied with error: %2 UnifiedSearchResultItemSkeleton + Search result skeleton. @@ -5688,6 +6992,7 @@ Server replied with error: %2 UnifiedSearchResultListItem + Load more results @@ -5695,6 +7000,7 @@ Server replied with error: %2 UnifiedSearchResultNothingFound + No results for @@ -5702,6 +7008,7 @@ Server replied with error: %2 UnifiedSearchResultSectionItem + Search results section %1 @@ -5709,26 +7016,34 @@ Server replied with error: %2 UserLine + Account actions + + Log in + + Log out + Remove account + Set status + Switch to account @@ -5736,54 +7051,67 @@ Server replied with error: %2 UserStatusSelector + Appear offline + Apply + Away + Cancel + Clear + Clear status message after + Do not disturb + Invisible + Mute all notifications + Online + Online status + Status message + What is your status? @@ -5791,30 +7119,37 @@ Server replied with error: %2 Utility + %1 %2 + %L1 B + %L1 GB + %L1 KB + %L1 MB + %L1 TB + %n day(s) @@ -5822,6 +7157,7 @@ Server replied with error: %2 + %n hour(s) @@ -5829,6 +7165,7 @@ Server replied with error: %2 + %n minute(s) @@ -5836,6 +7173,7 @@ Server replied with error: %2 + %n month(s) @@ -5843,6 +7181,7 @@ Server replied with error: %2 + %n second(s) @@ -5850,6 +7189,7 @@ Server replied with error: %2 + %n year(s) @@ -5860,42 +7200,52 @@ Server replied with error: %2 utility + Always available locally + Available online only + Could not open browser + Could not open email client + Currently available locally + Free up local space + Make always available locally + Some available online only + There was an error when launching the browser to go to URL %1. Maybe no default browser is configured? + There was an error when launching the email client to create a new message. Maybe no default email client is configured? @@ -5903,14 +7253,17 @@ Server replied with error: %2 ValidateChecksumHeader + The checksum header contained an unknown checksum type "%1" + The checksum header is malformed. + The downloaded file does not match the checksum, it will be resumed. "%1" != "%2" diff --git a/translations/client_en_GB.ts b/translations/client_en_GB.ts index 652357e8a56fb..22c49a463575f 100644 --- a/translations/client_en_GB.ts +++ b/translations/client_en_GB.ts @@ -1,55 +1,14 @@ - - - - Agree - Agree - - - Back - Back - - - Necessary data - Necessary data - - - Required to ensure that the software can be used as expected - Required to ensure that the software can be used as expected - - - Save Settings - Save Settings - - - Send anonymous use - Send anonymous use - - - Settings - Settings - - - This application uses tracking technologies. By clicking on Agree, you accept the processing of your anonymized data. You can adjust your choices at any time via the settings. <br/> <br/>Information on data processing and more can be found in our <a href='https://wl.hidrive.com/easy/0005'>privacy policy</a>. - This application uses tracking technologies. By clicking on Agree, you accept the processing of your anonymized data. You can adjust your choices at any time via the settings. <br/> <br/>Information on data processing and more can be found in our <a href='https://wl.hidrive.com/easy/0005'>privacy policy</a>. - - - This helps us to optimize the software and to better identify system crashes and unexpected errors. - This helps us to optimize the software and to better identify system crashes and unexpected errors. - - - We collect anonymized data to optimize our app. We use software solutions from various partners for this purpose. We want to give you full transparency and freedom of choice regarding the collection and processing of your anonymized usage. You can change your settings at any time under the menu item Data Protection. - We collect anonymized data to optimize our app. We use software solutions from various partners for this purpose. We want to give you full transparency and freedom of choice regarding the collection and processing of your anonymized usage. You can change your settings at any time under the menu item Data Protection. - - ActivityItem + In %1 In %1 + Open %1 locally Open %1 locally @@ -57,10 +16,12 @@ ActivityItemContent + Dismiss Dismiss + Open file details Open file details @@ -68,40 +29,40 @@ ActivityList + Activity list Activity list + No activities yet No activities yet + Scroll to top Scroll to top - - BasicComboBox - - Clear status message menu - Delete status message menu - - CallNotificationDialog + Answer Talk call notification Answer Talk call notification + Decline Decline + Decline Talk call notification Decline Talk call notification + Talk notification caller avatar Talk notification caller avatar @@ -109,66 +70,83 @@ CloudProviderWrapper + %1 (%2, %3) %1 (%2, %3) + Checking for changes in "%1" Checking for changes in "%1" + Help Help + Log out Log out + + No recently changed files No recently changed files + Open website Open website + Pause synchronization Pause synchronization + Quit sync client Quit sync client + Recently changed Recently changed + Settings Settings + Sync paused Sync paused + Syncing Syncing + Syncing %1 Syncing %1 + Syncing %1 (%2 left) Syncing %1 (%2 left) + Syncing %1 of %2 Syncing %1 of %2 + Syncing %1 of %2 (%3 left) Syncing %1 of %2 (%3 left) @@ -176,10 +154,12 @@ ConflictDelegate + Local version Local version + Server version Server version @@ -187,46 +167,59 @@ CurrentAccountHeaderButton + Account switcher and settings menu Account switcher and settings menu + Add account Add account + Add new account Add new account + Current account Current account + Current account avatar Current account avatar + Current account status is do not disturb Current account status is do not disturb + Current account status is online Current account status is online + Exit Exit + + Pause sync for all Pause sync for all + + Resume sync for all Resume sync for all + Settings Settings @@ -234,6 +227,7 @@ EditFileLocallyLoadingDialog + Opening file for local editing Opening file for local editing @@ -241,6 +235,7 @@ EmojiPicker + No recent emojis No recent emojis @@ -248,6 +243,7 @@ EncryptionTokenDiscoveryDialog + Discovering the certificates stored on your USB token Discovering the certificates stored on your USB token @@ -255,18 +251,22 @@ EncryptionTokenSelectionWindow + Available Keys for end-to-end Encryption: Available Keys for end-to-end Encryption: + Cancel Cancel + Choose Choose + Token Encryption Key Chooser Token Encryption Key Chooser @@ -274,6 +274,7 @@ ErrorBox + Error Error @@ -281,6 +282,7 @@ FileDetailsPage + Dismiss Dismiss @@ -288,6 +290,7 @@ FileDetailsWindow + File details of %1 · %2 File details of %1 · %2 @@ -295,14 +298,17 @@ FileProviderEvictionDialog + Evict materialised files Evict materialised files + Materialised items Materialised items + Reload Reload @@ -310,10 +316,12 @@ FileProviderFastEnumerationSettings + Enable fast sync Enable fast sync + Fast sync will only sync changes in files and folders within folders that have been explored. This can significantly increase responsiveness on initial configuration of virtual files. However, it will cause redundant downloads of files moved to an unexplored folder. Fast sync will only sync changes in files and folders within folders that have been explored. This can significantly increase responsiveness on initial configuration of virtual files. However, it will cause redundant downloads of files moved to an unexplored folder. @@ -321,6 +329,7 @@ FileProviderFileDelegate + Delete Delete @@ -328,18 +337,17 @@ FileProviderSettings + Enable virtual files Enable virtual files + General settings General settings - Signal file provider domain - Signal file provider domain - - + Virtual files settings Virtual files settings @@ -347,18 +355,17 @@ FileProviderStorageInfo + %1 GB of %2 GB remote files synced %1 GB of %2 GB remote files synced + Evict local copies … Evict local copies … - Evict local copies... - Evict local copies... - - + Local storage use Local storage use @@ -366,20 +373,24 @@ FileProviderSyncStatus + All synced! All synced! + Request a sync of changes for the VFS environment. macOS may ignore or delay this request. Request a sync of changes for the VFS environment. macOS may ignore or delay this request. + Request sync Request sync + Syncing Syncing @@ -387,10 +398,12 @@ macOS may ignore or delay this request. FileSystem + Could not remove folder "%1" Could not remove folder "%1" + Error removing "%1": %2 Error removing "%1": %2 @@ -398,26 +411,32 @@ macOS may ignore or delay this request. Flow2AuthWidget + An error occurred while connecting. Please try again. An error occurred while connecting. Please try again. + Browser Authentication Browser Authentication + Copy Link Copy Link + Logo Logo + Reopen Browser + Switch to your browser to connect your account Switch to your browser to connect your account @@ -425,10 +444,12 @@ macOS may ignore or delay this request. FolderWizardSelectiveSync + Add Folder Sync Add Folder Sync + Step 3 of 3: Selektive Synchronisation Step 3 of 3: Selective Synchronisation @@ -436,18 +457,22 @@ macOS may ignore or delay this request. FolderWizardSourcePage + &Choose &Choose + Add Folder Sync Add Folder Sync + Select a folder on your hard drive that should be permanetly connected to your %1. All files and subfolders are automatically uploaded and synchronized Select a folder on your hard drive that should be permanetly connected to your %1. All files and subfolders are automatically uploaded and synchronized + Step 1 of 3: Select local folder Step 1 of 3: Select local folder @@ -455,30 +480,37 @@ macOS may ignore or delay this request. FolderWizardTargetPage + Add Folder Sync Add Folder Sync + Both folders are permanently linked and the respective contents are automatically synchronized and updated. Both folders are permanently linked and the respective contents are automatically synchronized and updated. + Create folder Create folder + Folders Folders + Please now select or create a target folder in your %1 where the content should be uploaded and synchronized. Please now select or create a target folder in your %1 where the content should be uploaded and synchronized. + Refresh Refresh + Step 2 of 3: Directory in your %1 Step 2 of 3: Directory in your %1 @@ -486,10 +518,12 @@ macOS may ignore or delay this request. main.cpp + %1 requires on a working system tray. If you are running XFCE, please follow <a href="http://docs.xfce.org/xfce/xfce4-panel/systray">these instructions</a>. Otherwise, please install a system tray application such as "trayer" and try again. %1 requires on a working system tray. If you are running XFCE, please follow <a href="http://docs.xfce.org/xfce/xfce4-panel/systray">these instructions</a>. Otherwise, please install a system tray application such as "trayer" and try again. + System Tray not available System Tray not available @@ -497,14 +531,17 @@ macOS may ignore or delay this request. MainWindow + New activities New activities + Nextcloud desktop main dialog Nextcloud desktop main dialogue + Unified search results list Unified search results list @@ -512,6 +549,7 @@ macOS may ignore or delay this request. nextcloudTheme::aboutInfo() + <p><small>Built from Git revision <a href="%1">%2</a> on %3, %4 using Qt %5, %6</small></p> <p><small>Built from Git revision <a href="%1">%2</a> on %3, %4 using Qt %5, %6</small></p> @@ -519,14 +557,17 @@ macOS may ignore or delay this request. OCC::AbstractNetworkJob + Connection timed out Connection timed out + Server replied "%1 %2" to "%3 %4" Server replied "%1 %2" to "%3 %4" + Unknown error: network reply was deleted Unknown error: network reply was deleted @@ -534,14 +575,17 @@ macOS may ignore or delay this request. OCC::Account + File %1 is already locked by %2. File %1 is already locked by %2. + Lock operation on %1 failed with error %2 Lock operation on %1 failed with error %2 + Unlock operation on %1 failed with error %2 Unlock operation on %1 failed with error %2 @@ -549,30 +593,37 @@ macOS may ignore or delay this request. OCC::AccountManager + %1 accounts were detected from a legacy desktop client. Should the accounts be imported? %1 accounts were detected from a legacy desktop client. Should the accounts be imported? + 1 account was detected from a legacy desktop client. Should the account be imported? 1 account was detected from a legacy desktop client. Should the account be imported? + Could not import accounts from legacy client configuration. Could not import accounts from legacy client configuration. + Import Import + + Legacy import Legacy import + Skip Skip @@ -580,304 +631,335 @@ Should the account be imported? OCC::AccountSettings + %1 (%3%) of %2 in use. Some folders, including network mounted or shared folders, might have different limits. %1 (%3%) of %2 in use. Some folders, including network mounted or shared folders, might have different limits. + %1 as %2 %1 as %2 + %1 in use %1 in use + %1 of %2 in use %1 of %2 in use + (experimental) (experimental) + <p>Could not create local folder <i>%1</i>.</p> <p>Could not create local folder <i>%1</i>.</p> + <p>Do you really want to stop syncing the folder <i>%1</i>?</p><p><b>Note:</b> This will <b>not</b> delete any files.</p> <p>Do you really want to stop syncing the folder <i>%1</i>?</p><p><b>Note:</b> This will <b>not</b> delete any files.</p> - Apply - Apply - - - Apply manual changes - Apply manual changes - - + + Availability Availability - Cancel - Cancel - - + Choose what to sync Choose what to sync + Confirm Folder Sync Connection Removal Confirm Folder Sync Connection Removal + Connected to %1. Connected to %1. - Connected with <server> as <user> - Connected with <server> as <user> - - + Connecting to %1 … Connecting to %1 … - Connection settings - Connection settings - - + Could not encrypt folder because the folder does not exist anymore Could not encrypt folder because the folder does not exist anymore + + Create new folder Create new folder + Currently there is no storage usage information available. Currently there is no storage usage information available. + Disable encryption Disable encryption + Disable end-to-end encryption Disable end-to-end encryption + Disable end-to-end encryption for %1? Disable end-to-end encryption for %1? + Disable support Disable support + Disable virtual file support … Disable virtual file support … + Disable virtual file support? Disable virtual file support? + Display mnemonic Display mnemonic + + Do not encrypt folder Do not encrypt folder + + Edit Ignored Files Edit Ignored Files + Enable virtual file support %1 … Enable virtual file support %1 … + Encrypt Encrypt + + Encrypt folder Encrypt folder + Encryption failed Encryption failed + End-to-end Encryption End-to-end Encryption + End-to-end Encryption with Virtual Files End-to-end Encryption with Virtual Files + End-to-end encryption has been enabled for this account End-to-end encryption has been enabled for this account + End-to-end encryption has been enabled on this account with another device.<br>It can be enabled on this device by entering your mnemonic.<br>This will enable synchronisation of existing encrypted folders. End-to-end encryption has been enabled on this account with another device.<br>It can be enabled on this device by entering your mnemonic.<br>This will enable synchronisation of existing encrypted folders. + End-to-end encryption is not configured on this device. Once it is configured, you will be able to encrypt this folder. Would you like to set up end-to-end encryption? End-to-end encryption is not configured on this device. Once it is configured, you will be able to encrypt this folder. Would you like to set up end-to-end encryption? + End-to-end encryption mnemonic End-to-end encryption mnemonic - Expand Memory - Expand Memory - - + Folder creation failed Folder creation failed + Force sync now Force sync now + Migrate certificate to a new one Migrate certificate to a new one + No %1 connection configured. No %1 connection configured. + No account configured. No account configured. + + Open folder Open folder + Pause sync Pause sync + Please wait for the folder to sync before trying to encrypt it. Please wait for the folder to sync before trying to encrypt it. + Remove Folder Sync Connection Remove Folder Sync Connection + Remove folder sync connection Remove folder sync connection + Removing end-to-end encryption will remove locally-synced files that are encrypted.<br>Encrypted files will remain on the server. Removing end-to-end encryption will remove locally-synced files that are encrypted.<br>Encrypted files will remain on the server. + Restart sync Restart sync + Resume sync Resume sync + Server %1 is currently being redirected, or your connection is behind a captive portal. Server %1 is currently being redirected, or your connection is behind a captive portal. + Server %1 is currently in maintenance mode. Server %1 is currently in maintenance mode. + Server %1 is temporarily unavailable. Server %1 is temporarily unavailable. + Server configuration error: %1 at %2. Server configuration error: %1 at %2. + Set up encryption Set up encryption + Signed out from %1. Signed out from %1. - Standard file sync - Standard file sync - - + Storage space %1% occupied Storage space %1% occupied - Storage space: … - Storage space: … - - + Sync Running Sync Running - Synchronize all - Synchronise all - - - Synchronize none - Synchronize none - - + The folder has a minor sync problem. Encryption of this folder will be possible once it has synced successfully The folder has a minor sync problem. Encryption of this folder will be possible once it has synced successfully + The folder has a sync error. Encryption of this folder will be possible once it has synced successfully The folder has a sync error. Encryption of this folder will be possible once it has synced successfully + The server version %1 is unsupported! Proceed at your own risk. The server version %1 is unsupported! Proceed at your own risk. + The syncing operation is running.<br/>Do you want to terminate it? The syncing operation is running.<br/>Do you want to terminate it? + There are folders that have grown in size beyond %1MB: %2 There are folders that have grown in size beyond %1MB: %2 + There are folders that were not synchronized because they are external storages: There are folders that were not synchronised because they are external storages: + There are folders that were not synchronized because they are too big or external storages: There are folders that were not synchronised because they are too big or external storages: + There are folders that were not synchronized because they are too big: There are folders that were not synchronised because they are too big: + This account supports end-to-end encryption This account supports end-to-end encryption + This action will disable virtual file support. As a consequence contents of folders that are currently marked as "available online only" will be downloaded. The only advantage of disabling virtual file support is that the selective sync feature will become available again. @@ -890,61 +972,127 @@ The only advantage of disabling virtual file support is that the selective sync This action will abort any currently running synchronization. + This will encrypt your folder and all files within it. These files will no longer be accessible without your encryption mnemonic key. <b>This process is not reversible. Are you sure you want to proceed?</b> This will encrypt your folder and all files within it. These files will no longer be accessible without your encryption mnemonic key. <b>This process is not reversible. Are you sure you want to proceed?</b> + To protect your Cryptographic Identity, we encrypt it with a mnemonic of 12 dictionary words. Please note these down and keep them safe. They will be needed to add other devices to your account (like your mobile phone or laptop). To protect your Cryptographic Identity, we encrypt it with a mnemonic of 12 dictionary words. Please note these down and keep them safe. They will be needed to add other devices to your account (like your mobile phone or laptop). + Unable to connect to %1. Unable to connect to %1. - Unchecked folders will be <b>removed</b> from your local file system and will not be synchronized to this computer anymore - Unchecked folders will be <b>removed</b> from your local file system and will not be synchronised to this computer any more - - - Virtual file sync - Virtual file sync - - + Warning Warning + You cannot encrypt a folder with contents, please remove the files. Wait for the new sync, then encrypt it. You cannot encrypt a folder with contents, please remove the files. Wait for the new sync, then encrypt it. + You need to accept the terms of service at %1. You need to accept the terms of service at %1. + You seem to have the Virtual Files feature enabled on this folder. At the moment, it is not possible to implicitly download virtual files that are end-to-end encrypted. To get the best experience with virtual files and end-to-end encryption, make sure the encrypted folder is marked with "Make always available locally". You seem to have the Virtual Files feature enabled on this folder. At the moment, it is not possible to implicitly download virtual files that are end-to-end encrypted. To get the best experience with virtual files and end-to-end encryption, make sure the encrypted folder is marked with "Make always available locally". + https://wl.hidrive.com/easy/0057 https://wl.hidrive.com/easy/0057 - + + + Apply + Apply + + + + Apply manual changes + Apply manual changes + + + + + + Cancel + Cancel + + + + Connected with <server> as <user> + Connected with <server> as <user> + + + + Connection settings + Connection settings + + + + Expand Memory + Expand Memory + + + + Standard file sync + Standard file sync + + + + + Storage space: … + Storage space: … + + + + Synchronize all + Synchronise all + + + + Synchronize none + Synchronize none + + + + Unchecked folders will be <b>removed</b> from your local file system and will not be synchronized to this computer anymore + Unchecked folders will be <b>removed</b> from your local file system and will not be synchronised to this computer any more + + + + Virtual file sync + Virtual file sync + + OCC::AccountSetupFromCommandLineJob + Access forbidden by server. To verify that you have proper access, <a href="%1">click here</a> to access the service with your browser. Access forbidden by server. To verify that you have proper access, <a href="%1">click here</a> to access the service with your browser. + The authenticated request to the server was redirected to "%1". The URL is bad, the server is misconfigured. The authenticated request to the server was redirected to "%1". The URL is bad, the server is misconfigured. + There was an invalid response to an authenticated WebDAV request There was an invalid response to an authenticated WebDAV request @@ -952,46 +1100,57 @@ Wait for the new sync, then encrypt it. OCC::AccountState + Asking Credentials Asking Credentials + Configuration error Configuration error + Connected Connected + Disconnected Disconnected + Maintenance mode Maintenance mode + Need the user to accept the terms of service Need the user to accept the terms of service + Network error Network error + Redirect detected Redirect detected + Service unavailable Service unavailable + Signed out Signed out + Unknown account state Unknown account state @@ -999,14 +1158,17 @@ Wait for the new sync, then encrypt it. OCC::ActivityListModel + Fetching activities … Fetching activities … + For more activities please open the Activity app. For more activities please open the Activity app. + Network error occurred: client will retry syncing. Network error occurred: client will retry syncing. @@ -1014,34 +1176,42 @@ Wait for the new sync, then encrypt it. OCC::AddCertificateDialog + + Certificate files (*.p12 *.pfx) + Certificate files (*.p12 *.pfx) + + + + Select a certificate + Select a certificate + + + An encrypted pkcs12 bundle is strongly recommended as a copy will be stored in the configuration file. An encrypted pkcs12 bundle is strongly recommended as a copy will be stored in the configuration file. + Browse … Browse … + Certificate & Key (pkcs12): Certificate & Key (pkcs12): - Certificate files (*.p12 *.pfx) - Certificate files (*.p12 *.pfx) - - + Certificate password: Certificate password: + SSL client certificate authentication SSL client certificate authentication - Select a certificate - Select a certificate - - + This server probably requires a SSL client certificate. This server probably requires a SSL client certificate. @@ -1049,32 +1219,39 @@ Wait for the new sync, then encrypt it. OCC::Application + %1 accounts number of accounts imported %1 accounts + %1 folders number of folders imported %1 folders + 1 account 1 account + 1 folder 1 folder + Continue Continue + Error accessing the configuration file Error accessing the configuration file + Imported %1 and %2 from a legacy desktop client. %3 number of accounts and folders imported. list of users. @@ -1082,35 +1259,43 @@ Wait for the new sync, then encrypt it. %3 + Legacy import Legacy import + Quit Quit + Some settings were configured in %1 versions of this client and use features that are not available in this version.<br><br>Continuing will mean <b>%2 these settings</b>.<br><br>The current configuration file was already backed up to <i>%3</i>. Some settings were configured in %1 versions of this client and use features that are not available in this version.<br><br>Continuing will mean <b>%2 these settings</b>.<br><br>The current configuration file was already backed up to <i>%3</i>. + There was an error while accessing the configuration file at %1. Please make sure the file can be accessed by your system account. There was an error while accessing the configuration file at %1. Please make sure the file can be accessed by your system account. + deleting deleting + ignoring ignoring + newer newer software version newer + older older software version older @@ -1119,18 +1304,22 @@ Wait for the new sync, then encrypt it. OCC::AuthenticationDialog + &Password: &Password: + &Username: &Username: + Authentication Required Authentication Required + Enter username and password for "%1" at %2. Enter username and password for "%1" at %2. @@ -1138,10 +1327,12 @@ Wait for the new sync, then encrypt it. OCC::BasePropagateRemoteDeleteEncrypted + "%1 Failed to unlock encrypted folder %2". "%1 Failed to unlock encrypted folder %2". + Wrong HTTP code returned by server. Expected 204, but received "%1 %2". Wrong HTTP code returned by server. Expected 204, but received "%1 %2". @@ -1149,46 +1340,58 @@ Wait for the new sync, then encrypt it. OCC::BulkPropagatorJob + Error updating metadata: %1 Error updating metadata: %1 + File %1 cannot be uploaded because another file with the same name, differing only in case, exists File %1 cannot be uploaded because another file with the same name, differing only in case, exists + File %1 has invalid modification time. Do not upload to the server. File %1 has invalid modification time. Do not upload to the server. + File %1 has invalid modified time. Do not upload to the server. File %1 has invalid modified time. Do not upload to the server. + File Removed (start upload) %1 File Removed (start upload) %1 + + Local file changed during sync. Local file changed during sync. + Local file changed during syncing. It will be resumed. Local file changed during syncing. It will be resumed. + Network error: %1 Network error: %1 + Restoration failed: %1 Restoration failed: %1 + The file %1 is currently in use The file %1 is currently in use + The local file was removed during sync. The local file was removed during sync. @@ -1196,30 +1399,37 @@ Wait for the new sync, then encrypt it. OCC::CaseClashConflictSolver + Cannot rename file because a file with the same name already exists on the server. Please pick another name. Cannot rename file because a file with the same name already exists on the server. Please pick another name. + Could not rename file. Please make sure you are connected to the server. Could not rename file. Please make sure you are connected to the server. + Failed to fetch permissions with error %1 Failed to fetch permissions with error %1 + Filename contains leading and trailing spaces. Filename contains leading and trailing spaces. + Filename contains leading spaces. Filename contains leading spaces. + Filename contains trailing spaces. Filename contains trailing spaces. + You don't have the permission to rename this file. Please ask the author of the file to rename it. You don't have the permission to rename this file. Please ask the author of the file to rename it. @@ -1227,86 +1437,111 @@ Wait for the new sync, then encrypt it. OCC::CaseClashFilenameDialog + %1 does not support equal file names with only letter casing differences. %1 does not support equal file names with only letter casing differences. + + Filename contains illegal characters: %1 + Filename contains illegal characters: %1 + + + + Filename contains leading and trailing spaces. + Filename contains leading and trailing spaces. + + + + Filename contains leading spaces. + Filename contains leading spaces. + + + + Filename contains trailing spaces. + Filename contains trailing spaces. + + + + Rename file + Rename file + + + + The file "%1" could not be synced because of a case clash conflict with an existing file on this system. + The file "%1" could not be synced because of a case clash conflict with an existing file on this system. + + + + Use invalid name + Use invalid name + + + + 0 byte 0 byte + Case Clash Conflict Case Clash Conflict + Case clashing file Case clashing file + Error Error + Existing file Existing file - Filename contains illegal characters: %1 - Filename contains illegal characters: %1 - - - Filename contains leading and trailing spaces. - Filename contains leading and trailing spaces. - - - Filename contains leading spaces. - Filename contains leading spaces. - - - Filename contains trailing spaces. - Filename contains trailing spaces. - - + New filename New filename + + Open clashing file Open clashing file + + Open existing file Open existing file + Please enter a new name for the clashing file: Please enter a new name for the clashing file: - Rename file - Rename file - - - The file "%1" could not be synced because of a case clash conflict with an existing file on this system. - The file "%1" could not be synced because of a case clash conflict with an existing file on this system. - - + The file could not be synced because it generates a case clash conflict with an existing file on this system. The file could not be synced because it generates a case clash conflict with an existing file on this system. - Use invalid name - Use invalid name - - + file A file A + file B file B + + today today @@ -1314,6 +1549,7 @@ Wait for the new sync, then encrypt it. OCC::CleanupPollsJob + Error writing metadata to the database Error writing metadata to the database @@ -1321,27 +1557,33 @@ Wait for the new sync, then encrypt it. OCC::ClientSideEncryption + Enter Certificate USB Token PIN: Enter Certificate USB Token PIN: + Enter E2E passphrase Enter E2E passphrase + Input PIN code Please keep it short and shorter than "Enter Certificate USB Token PIN:" Input PIN code + Invalid PIN. Login failed Invalid PIN. Login failed + Login to the token failed after providing the user PIN. It may be invalid or wrong. Please try again! Login to the token failed after providing the user PIN. It may be invalid or wrong. Please try again! + Please enter your end-to-end encryption passphrase:<br><br>Username: %2<br>Account: %3<br> Please enter your end-to-end encryption passphrase:<br><br>Username: %2<br>Account: %3<br> @@ -1349,66 +1591,87 @@ Wait for the new sync, then encrypt it. OCC::ConflictDialog - 0 byte - 0 byte - - - <a href="%1">Open local version</a> - <a href="%1">Open local version</a> - - - <a href="%1">Open server version</a> - <a href="%1">Open server version</a> - - - Click to open the file - Click to open the file - - - Conflicting versions of %1. - Conflicting versions of %1. - - + Keep both versions Keep both versions + Keep local version Keep local version + + Keep selected version Keep selected version + Keep server version Keep server version - Local version - Local version - - + Open local version Open local version + Open server version Open server version + + + 0 byte + 0 byte + + + + <a href="%1">Open local version</a> + <a href="%1">Open local version</a> + + + + <a href="%1">Open server version</a> + <a href="%1">Open server version</a> + + + + + Click to open the file + Click to open the file + + + + + Conflicting versions of %1. + Conflicting versions of %1. + + + + Local version + Local version + + + Server version Server version + Sync Conflict Sync Conflict + Which version of the file do you want to keep?<br/>If you select both versions, the local file will have a number added to its name. Which version of the file do you want to keep?<br/>If you select both versions, the local file will have a number added to its name. + + today today @@ -1416,22 +1679,29 @@ Wait for the new sync, then encrypt it. OCC::ConflictSolver + Confirm deletion Confirm deletion + Do you want to delete the directory <i>%1</i> and all its contents permanently? Do you want to delete the directory <i>%1</i> and all its contents permanently? + Do you want to delete the file <i>%1</i> permanently? Do you want to delete the file <i>%1</i> permanently? + + Error Error + + Moving file failed: %1 @@ -1443,26 +1713,32 @@ Wait for the new sync, then encrypt it. OCC::ConnectionValidator + Authentication error: Either username or password are wrong. Authentication error: Either username or password are wrong. + No Nextcloud account configured No Nextcloud account configured + Please update to the latest server and restart the client. Please update to the latest server and restart the client. + The configured server for this client is too old The configured server for this client is too old + The provided credentials are not correct The provided credentials are not correct + Timeout Timeout @@ -1470,64 +1746,78 @@ Wait for the new sync, then encrypt it. OCC::DataProtectionPage + + This application uses tracking technologies. By clicking on Agree, you accept the processing of your anonymized data. You can adjust your choices at any time via the settings. <br/> <br/>Information on data processing and more can be found in our <a href='https://wl.hidrive.com/easy/0005'>privacy policy</a>. + This application uses tracking technologies. By clicking on Agree, you accept the processing of your anonymized data. You can adjust your choices at any time via the settings. <br/> <br/>Information on data processing and more can be found in our <a href='https://wl.hidrive.com/easy/0005'>privacy policy</a>. + + + Agree Agree + Form Form + Settings Settings - - This application uses tracking technologies. By clicking on Agree, you accept the processing of your anonymized data. You can adjust your choices at any time via the settings. <br/> <br/>Information on data processing and more can be found in our <a href='https://wl.hidrive.com/easy/0005'>privacy policy</a>. - This application uses tracking technologies. By clicking on Agree, you accept the processing of your anonymized data. You can adjust your choices at any time via the settings. <br/> <br/>Information on data processing and more can be found in our <a href='https://wl.hidrive.com/easy/0005'>privacy policy</a>. - - + OCC::DataProtectionSettingsPage + + We collect anonymized data to optimize our app. We use software solutions from various partners for this purpose. We want to give you full transparency and freedom of choice regarding the collection and processing of your anonymized usage. You can change your settings at any time under the menu item Data Protection. + We collect anonymized data to optimize our app. We use software solutions from various partners for this purpose. We want to give you full transparency and freedom of choice regarding the collection and processing of your anonymized usage. You can change your settings at any time under the menu item Data Protection. + + + Back Back + Form Form + Necessary data Necessary data + Required to ensure that the software can be used as expected Required to ensure that the software can be used as expected + Save Settings Save Settings + Send anonymous use Send anonymous use + This helps us to optimize the software and to better identify system crashes and unexpected errors. This helps us to optimize the software and to better identify system crashes and unexpected errors. - - We collect anonymized data to optimize our app. We use software solutions from various partners for this purpose. We want to give you full transparency and freedom of choice regarding the collection and processing of your anonymized usage. You can change your settings at any time under the menu item Data Protection. - We collect anonymized data to optimize our app. We use software solutions from various partners for this purpose. We want to give you full transparency and freedom of choice regarding the collection and processing of your anonymized usage. You can change your settings at any time under the menu item Data Protection. - - + OCC::DiscoveryPhase + Error while canceling deletion of %1 Error while canceling deletion of %1 + Error while canceling deletion of a file Error while canceling deletion of a file @@ -1535,14 +1825,19 @@ Wait for the new sync, then encrypt it. OCC::DiscoverySingleDirectoryJob + + Encrypted metadata setup error! Encrypted metadata setup error! + Encrypted metadata setup error: initial signature from server is empty. Encrypted metadata setup error: initial signature from server is empty. + + Server error: PROPFIND reply is not XML formatted! Server error: PROPFIND reply is not XML formatted! @@ -1550,22 +1845,27 @@ Wait for the new sync, then encrypt it. OCC::DiscoverySingleLocalDirectoryJob + Directory not accessible on client, permission denied Directory not accessible on client, permission denied + Directory not found: %1 Directory not found: %1 + Error while opening directory %1 Error while opening directory %1 + Error while reading directory %1 Error while reading directory %1 + Filename encoding is not valid Filename encoding is not valid @@ -1573,62 +1873,93 @@ Wait for the new sync, then encrypt it. OCC::EditLocallyJob + + + An error occurred during data retrieval. An error occurred during data retrieval. + + An error occurred during setup. An error occurred during setup. + + An error occurred trying to synchronise the file to edit locally. An error occurred trying to synchronise the file to edit locally. + + + + Could not find a file for local editing. Make sure it is not excluded via selective sync. Could not find a file for local editing. Make sure it is not excluded via selective sync. + + Could not find a file for local editing. Make sure its path is valid and it is synced locally. Could not find a file for local editing. Make sure its path is valid and it is synced locally. + Could not find a remote file info for local editing. Make sure its path is valid. Could not find a remote file info for local editing. Make sure its path is valid. + Could not open %1 Could not open %1 + + + + + + + + Could not start editing locally. Could not start editing locally. + File %1 already locked. File %1 already locked. + File %1 could not be locked. File %1 could not be locked. + File %1 now locked. File %1 now locked. + Invalid local file path. Invalid local file path. + + Lock will last for %1 minutes. You can also unlock this file manually once you are finished editing. Lock will last for %1 minutes. You can also unlock this file manually once you are finished editing. + Please try again. Please try again. + Server error: PROPFIND reply is not XML formatted! Server error: PROPFIND reply is not XML formatted! @@ -1636,10 +1967,12 @@ Wait for the new sync, then encrypt it. OCC::EditLocallyManager + Could not validate the request to open a file from server. Could not validate the request to open a file from server. + Please try again. Please try again. @@ -1647,26 +1980,34 @@ Wait for the new sync, then encrypt it. OCC::EditLocallyVerificationJob + An error occurred trying to verify the request to edit locally. An error occurred trying to verify the request to edit locally. + Could not find an account for local editing. Could not find an account for local editing. + Could not start editing locally. Could not start editing locally. + Invalid file path was provided. Invalid file path was provided. + Invalid token received. Invalid token received. + + + Please try again. Please try again. @@ -1674,22 +2015,34 @@ Wait for the new sync, then encrypt it. OCC::EncryptedFolderMetadataHandler + Error fetching encrypted folder ID. Error fetching encrypted folder ID. + + + + + + Error fetching metadata. Error fetching metadata. + + + Error locking folder. Error locking folder. + Error parsing or decrypting metadata. Error parsing or decrypting metadata. + Failed to upload metadata Failed to upload metadata @@ -1697,6 +2050,7 @@ Wait for the new sync, then encrypt it. OCC::EncryptFolderJob + Could not generate the metadata for encryption, Unlocking the folder. This can be an issue with your OpenSSL libraries. Could not generate the metadata for encryption, Unlocking the folder. @@ -1706,6 +2060,7 @@ This can be an issue with your OpenSSL libraries. OCC::FileDetails + %1 day(s) ago days elapsed since file last modified @@ -1714,6 +2069,7 @@ This can be an issue with your OpenSSL libraries. + %1 hour(s) ago hours elapsed since file last modified @@ -1722,6 +2078,7 @@ This can be an issue with your OpenSSL libraries. + %1 minute(s) ago minutes elapsed since file last modified @@ -1730,6 +2087,7 @@ This can be an issue with your OpenSSL libraries. + %1 month(s) ago months elapsed since file last modified @@ -1738,6 +2096,7 @@ This can be an issue with your OpenSSL libraries. + %1 second(s) ago seconds elapsed since file last modified @@ -1746,6 +2105,7 @@ This can be an issue with your OpenSSL libraries. + %1 year(s) ago years elapsed since file last modified @@ -1754,6 +2114,7 @@ This can be an issue with your OpenSSL libraries. + Locked by %1 - Expires in %2 minute(s) remaining time before lock expires @@ -1765,26 +2126,36 @@ This can be an issue with your OpenSSL libraries. OCC::Flow2Auth + + Could not parse the JSON returned from the server: <br><em>%1</em> Could not parse the JSON returned from the server: <br><em>%1</em> + + Error returned from the server: <em>%1</em> Error returned from the server: <em>%1</em> + The polling URL does not start with HTTPS despite the login URL started with HTTPS. Login will not be possible because this might be a security issue. Please contact your administrator. The polling URL does not start with HTTPS despite the login URL started with HTTPS. Login will not be possible because this might be a security issue. Please contact your administrator. + + The reply from the server did not contain all expected fields The reply from the server did not contain all expected fields + The returned server URL does not start with HTTPS despite the login URL started with HTTPS. Login will not be possible because this might be a security issue. Please contact your administrator. The returned server URL does not start with HTTPS despite the login URL started with HTTPS. Login will not be possible because this might be a security issue. Please contact your administrator. + + There was an error accessing the "token" endpoint: <br><em>%1</em> There was an error accessing the "token" endpoint: <br><em>%1</em> @@ -1792,38 +2163,48 @@ This can be an issue with your OpenSSL libraries. OCC::Flow2AuthWidget + Copy Link Copy Link + + Error Error + Link copied to clipboard. Link copied to clipboard. + Open Browser Open Browser + Polling for authorization Polling for authorization + Starting authorization Starting authorization + Switch to your browser to connect your account Switch to your browser to connect your account + Unable to open the Browser, please copy the link to your Browser. Unable to open the Browser, please copy the link to your Browser. + Waiting for authorization Waiting for authorization @@ -1831,6 +2212,7 @@ This can be an issue with your OpenSSL libraries. OCC::Folder + %1 and %n other file(s) are currently locked. %1 and %n other file(s) are currently locked. @@ -1838,6 +2220,7 @@ This can be an issue with your OpenSSL libraries. + %1 and %n other file(s) could not be synced due to errors. See the log for details. %1 and %n other file could not be synced due to errors. See the log for details. @@ -1845,6 +2228,7 @@ This can be an issue with your OpenSSL libraries. + %1 and %n other file(s) have been added. %1 and %n other file(s) have been added. @@ -1852,6 +2236,7 @@ This can be an issue with your OpenSSL libraries. + %1 and %n other file(s) have been removed. %1 and %n other file have been removed. @@ -1859,6 +2244,7 @@ This can be an issue with your OpenSSL libraries. + %1 and %n other file(s) have been updated. %1 and %n other file have been updated. @@ -1866,14 +2252,17 @@ This can be an issue with your OpenSSL libraries. + %1 could not be synced due to an error. See the log for details. %1 could not be synced due to an error. See the log for details. + %1 has a sync conflict. Please check the conflict file! %1 has a sync conflict. Please check the conflict file! + %1 has and %n other file(s) have sync conflicts. %1 has and %n other file have sync conflicts. @@ -1881,11 +2270,13 @@ This can be an issue with your OpenSSL libraries. + %1 has been added. %1 names a file. %1 has been added. + %1 has been moved to %2 and %n other file(s) have been moved. %1 has been moved to %2 and %n other file have been moved. @@ -1893,15 +2284,18 @@ This can be an issue with your OpenSSL libraries. + %1 has been moved to %2. %1 has been moved to %2. + %1 has been removed. %1 names a file. %1 has been removed. + %1 has been renamed to %2 and %n other file(s) have been renamed. %1 has been renamed to %2 and %n other file have been renamed. @@ -1909,30 +2303,36 @@ This can be an issue with your OpenSSL libraries. + %1 has been renamed to %2. %1 and %2 name files. %1 has been renamed to %2. + %1 has been updated. %1 names a file. %1 has been updated. + %1 is currently locked. %1 is currently locked. + A folder from an external storage has been added. A folder from an external storage has been added. + A folder has surpassed the set folder size limit of %1MB: %2. %3 A folder has surpassed the set folder size limit of %1MB: %2. %3 + A large number of files in the server have been deleted. Please confirm if you'd like to proceed with these deletions. Alternatively, you can restore all deleted files by uploading from '%1' folder to the server. @@ -1941,6 +2341,7 @@ Bitte bestätigen Sie, ob Sie mit diesen Löschungen fortfahren möchten. Alternativ können Sie alle gelöschten Dateien wiederherstellen, indem Sie sie aus dem Ordner "%1" auf den Server hochladen. + A large number of files in your local '%1' folder have been deleted. Please confirm if you'd like to proceed with these deletions. Alternatively, you can restore all deleted files by downloading them from the server. @@ -1949,10 +2350,12 @@ Bitte bestätigen Sie, ob Sie mit diesen Löschungen fortfahren möchten. Alternativ können Sie alle gelöschten Dateien wiederherstellen, indem Sie sie vom Server herunterladen. + A new folder larger than %1 MB has been added: %2. A new folder larger than %1 MB has been added: %2. + Changes in synchronized folders could not be tracked reliably. This means that the synchronization client might not upload local changes immediately and will instead only scan for local changes and upload them occasionally (every two hours by default). @@ -1965,70 +2368,87 @@ This means that the synchronization client might not upload local changes immedi %1 + Could not read system exclude file Could not read system exclude file + Keep syncing Keep syncing + Please choose a different location. %1 isn't a readable folder. Please choose a different location. %1 isn't a readable folder. + Please choose a different location. %1 isn't a valid folder. Please choose a different location. %1 isn't a valid folder. + Please choose a different location. The folder %1 doesn't exist. Please choose a different location. The folder %1 doesn't exist. + Please go in the settings to select it if you wish to download it. Please go in the settings to select it if you wish to download it. + Proceed with Deletion Proceed with Deletion + Remove all files? Remove all files? + Restore Files from Server Restore Files from Server + Restore Files to Server Restore Files to Server + Stop syncing Stop syncing + Sync Activity Sync Activity + The file %1 was created but was excluded from synchronization previously. It will not be synchronized. The file %1 was created but was excluded from synchronization previously. It will not be synchronized. + The folder %1 has surpassed the set folder size limit of %2MB. The folder %1 has surpassed the set folder size limit of %2MB. + The folder %1 was created but was excluded from synchronization previously. Data inside it will not be synchronized. The folder %1 was created but was excluded from synchronization previously. Data inside it will not be synchronized. + Virtual file download failed with code "%1", status "%2" and error message "%3" Virtual file download failed with code "%1", status "%2" and error message "%3" + Would you like to stop syncing this folder? Would you like to stop syncing this folder? @@ -2036,26 +2456,32 @@ This means that the synchronization client might not upload local changes immedi OCC::FolderCreationDialog + %1 Create new folder %1 Create new folder + Could not create a folder! Check your write permissions. Could not create a folder! Check your write permissions. + + Error + Error + + + Create new folder Create new folder + Enter folder name Enter folder name - Error - Error - - + Folder already exists Folder already exists @@ -2063,108 +2489,136 @@ This means that the synchronization client might not upload local changes immedi OCC::FolderMan + %1 (Sync is paused) %1 (Sync is paused) + (backup %1) (backup %1) + (backup) (backup) + An old sync journal "%1" was found, but could not be removed. Please make sure that no application is currently using it. An old sync journal "%1" was found, but could not be removed. Please make sure that no application is currently using it. + Could not reset folder state Could not reset folder state + Last sync was successful. Last sync was successful. + Please choose a different location. %1 is already being used as a sync folder for %2. folder location, server url Please choose a different location. %1 is already being used as a sync folder for %2. + + Please choose a different location. %1 is already being used as a sync folder. Please choose a different location. %1 is already being used as a sync folder. + Please choose a different location. %1 is already contained in a folder used as a sync folder. Please choose a different location. %1 is already contained in a folder used as a sync folder. + Please choose a different location. The path %1 doesn't exist. Please choose a different location. The path %1 doesn't exist. + Please choose a different location. The path %1 isn't a folder. Please choose a different location. The path %1 isn't a folder. + Please choose a different location. The selected folder isn't valid. Please choose a different location. The selected folder isn't valid. + + Please choose a different location. You don't have enough permissions to write to %1. folder location Please choose a different location. You don't have enough permissions to write to %1. + Preparing for sync. Preparing for sync. + Setup error. Setup error. + Sync finished with unresolved conflicts. Sync finished with unresolved conflicts. + Sync is paused. Sync is paused. + Sync is running. Sync is running. + Sync request was cancelled. Sync request was cancelled. + Syncing %1 Syncing %1 + Syncing %1 (%2 left) Syncing %1 (%2 left) + Syncing %1 (A few seconds left) Syncing %1 (A few seconds left) + Syncing %1 of %2 Syncing %1 of %2 + Syncing %1 of %2 (%3 left) Syncing %1 of %2 (%3 left) + Syncing %1 of %2 (A few seconds left) Syncing %1 of %2 (A few seconds left) + The folder %1 is linked to multiple accounts. This setup can cause data loss and it is no longer supported. To resolve this issue: please remove %1 from one of the accounts and create a new sync folder. @@ -2175,10 +2629,12 @@ To resolve this issue: please remove %1 from one of the accounts and create a ne For advanced users: this issue might be related to multiple sync database files found in one folder. Please check %1 for outdated and unused .sync_*.db files and remove them. + Undefined state. Undefined state. + Waiting to start syncing. Waiting to start syncing. @@ -2186,14 +2642,17 @@ For advanced users: this issue might be related to multiple sync database files OCC::FolderStatusDelegate + Add Folder Sync Add Folder Sync + File File + Synchronize any other local folder with your %1 Synchronize any other local folder with your %1 @@ -2201,113 +2660,141 @@ For advanced users: this issue might be related to multiple sync database files OCC::FolderStatusModel + %1 %2 Example text: "Uploading foobar.png" %1 %2 + %1 %2 (%3 of %4) Example text: "Uploading foobar.png (2MB of 2MB)" %1 %2 (%3 of %4) + %1 %2 … Example text: "Uploading foobar.png (1MB of 2MB) time left 2 minutes at a rate of 24Kb/s" Example text: "Syncing 'foo.txt', 'bar.txt'" %1 %2 … + + %1 (%2) %1 (%2) + %1 of %2, file %3 of %4 Example text: "12 MB of 345 MB, file 6 of 7" %1 of %2, file %3 of %4 + %5 left, %1 of %2, file %3 of %4 %5 left, %1 of %2, file %3 of %4 + + , , + A few seconds left, %1 of %2, file %3 of %4 Example text: "5 minutes left, 12 MB of 345 MB, file 6 of 7" A few seconds left, %1 of %2, file %3 of %4 + About to start syncing About to start syncing + Checking for changes in local "%1" Checking for changes in local "%1" + Checking for changes in remote "%1" Checking for changes in remote "%1" + Click this button to add a folder to synchronize. Click this button to add a folder to synchronise. + Could not decrypt! Could not decrypt! + Download %1/s Example text: "Download 24Kb/s" (%1 is replaced by 24Kb (translated)) Download %1/s + Error while loading the list of folders from the server. Error while loading the list of folders from the server. + Fetching folder list from server … Fetching folder list from server … + File %1 of %2 File %1 of %2 + Preparing to sync … Preparing to sync … + Signed out Signed out + Synchronizing files in local folder Synchronizing files in local folder + Synchronizing virtual files in local folder Synchronizing virtual files in local folder + Syncing local and remote changes Syncing local and remote changes + There are unresolved conflicts. Click for details. There are unresolved conflicts. Click for details. + Upload %1/s Example text: "Upload 24Kb/s" (%1 is replaced by 24Kb (translated)) Upload %1/s + Virtual file support is enabled. Virtual file support is enabled. + Waiting for %n other folder(s) … Waiting for %n other folder(s) … @@ -2315,14 +2802,17 @@ For advanced users: this issue might be related to multiple sync database files + You need to be connected to add a folder You need to be connected to add a folder + ↑ %1/s ↑ %1/s + ↓ %1/s ↓ %1/s @@ -2330,6 +2820,7 @@ For advanced users: this issue might be related to multiple sync database files OCC::FolderWatcher + The watcher did not receive a test notification. The watcher did not receive a test notification. @@ -2337,6 +2828,7 @@ For advanced users: this issue might be related to multiple sync database files OCC::FolderWatcherPrivate + This problem usually happens when the inotify watches are exhausted. Check the FAQ for details. This problem usually happens when the inotify watches are exhausted. Check the FAQ for details. @@ -2344,10 +2836,12 @@ For advanced users: this issue might be related to multiple sync database files OCC::FolderWizard + Add Folder Sync Connection Add Folder Sync Connection + Add Sync Connection Add Sync Connection @@ -2355,30 +2849,37 @@ For advanced users: this issue might be related to multiple sync database files OCC::FolderWizardLocalPath + Add Folder Sync Add Folder Sync + Choose Choose + Click to select a local folder to sync. Click to select a local folder to sync. + Enter the path to the local folder. Enter the path to the local folder. + Select a folder on your hard drive that should be permanetly connected to your %1. All files and subfolders are automatically uploaded and synchronized Select a folder on your hard drive that should be permanetly connected to your %1. All files and subfolders are automatically uploaded and synchronized + Select the source folder Select the source folder + Step 1 of 3: Select local folder Step 1 of 3: Select local folder @@ -2386,58 +2887,74 @@ For advanced users: this issue might be related to multiple sync database files OCC::FolderWizardRemotePath + Add Folder Sync Add Folder Sync + Authentication failed accessing %1 Authentication failed accessing %1 + Both folders are permanently linked and the respective contents are automatically synchronized and updated. Both folders are permanently linked and the respective contents are automatically synchronized and updated. + Choose this to sync the entire account Choose this to sync the entire account + Create Remote Folder Create Remote Folder + Create folder Create folder + Enter the name of the new folder to be created below "%1": Enter the name of the new folder to be created below "%1": + Failed to create the folder on %1. Please check manually. Failed to create the folder on %1. Please check manually. + Failed to list a folder. Error: %1 Failed to list a folder. Error: %1 + Folder was successfully created on %1. Folder was successfully created on %1. + + + Please choose a different location. %1 is already being synced to %2. Please choose a different location. %1 is already being synced to %2. + Please now select or create a target folder in your %1 where the content should be uploaded and synchronized. Please now select or create a target folder in your %1 where the content should be uploaded and synchronized. + Refresh Refresh + Step 2 of 3: Directory in your %1 Step 2 of 3: Directory in your %1 @@ -2445,26 +2962,36 @@ For advanced users: this issue might be related to multiple sync database files OCC::FolderWizardSelectiveSync + + + (experimental) (experimental) + Add Folder Sync Add Folder Sync + Step 3 of 3: Selektive Synchronisation Step 3 of 3: Selective Synchronisation + + + Use virtual files instead of downloading content immediately %1 Use virtual files instead of downloading content immediately %1 + Virtual files are not supported at the selected location Virtual files are not supported at the selected location + Virtual files are not supported for Windows partition roots as local folder. Please choose a valid subfolder under drive letter. Virtual files are not supported for Windows partition roots as local folder. Please choose a valid subfolder under drive letter. @@ -2472,22 +2999,7 @@ For advanced users: this issue might be related to multiple sync database files OCC::GeneralSettings - &Analysis data collection for needs-based design - &Analysis data collection for needs-based design - - - &Automatically check for updates - &Automatically check for updates - - - &Launch on System Startup - &Launch on System Startup - - - &Restart && Update - &Restart && Update - - + - beta: contains versions with new features that may not be tested thoroughly - daily: contains versions created daily only for testing and development @@ -2499,6 +3011,7 @@ Downgrading versions is not possible immediately: changing from beta to stable m Downgrading versions is not possible immediately: changing from beta to stable means waiting for the new stable version. + - enterprise: contains stable versions for customers. Downgrading versions is not possible immediately: changing from stable to enterprise means waiting for the new enterprise version. @@ -2508,200 +3021,266 @@ Downgrading versions is not possible immediately: changing from stable to enterp Downgrading versions is not possible immediately: changing from stable to enterprise means waiting for the new enterprise version. + + Cancel + Cancel + + + + Change update channel + Change update channel + + + + Changing update channel? + Changing update channel? + + + + Debug Archive Created + Debug Archive Created + + + + Debug archive is created at %1 + Debug archive is created at %1 + + + + Server notifications that require attention. + Server notifications that require attention. + + + + Show call notification dialogs. + Show call notification dialogues. + + + + The channel determines which upgrades will be offered to install: +- stable: contains tested versions considered reliable + + starts list of available update channels, stable is always available + The channel determines which upgrades will be offered to install: +- stable: contains tested versions considered reliable + + + + + You cannot disable autostart because system-wide autostart is enabled. + You cannot disable autostart because system-wide autostart is enabled. + + + + Zip Archives + Zip Archives + + + + daily + daily + + + + enterprise + enterprise + + + + https://wl.hidrive.com/easy/0004 + https://wl.hidrive.com/easy/0004 + + + + https://wl.hidrive.com/easy/0005 + https://wl.hidrive.com/easy/0005 + + + + https://wl.hidrive.com/easy/0006 + https://wl.hidrive.com/easy/0006 + + + + https://wl.hidrive.com/easy/0007 + https://wl.hidrive.com/easy/0007 + + + + &Automatically check for updates + &Automatically check for updates + + + + &Launch on System Startup + &Launch on System Startup + + + + &Restart && Update + &Restart && Update + + + Advanced Advanced + Ask for confirmation before synchronizing external storages Ask for confirmation before synchronising external storages + Ask for confirmation before synchronizing new folders larger than Ask for confirmation before synchronizing new folders larger than + Automatically disable synchronisation of folders that overcome limit Automatically disable synchronisation of folders that overcome limit - Cancel - Cancel - - - Change update channel - Change update channel - - - Changing update channel? - Changing update channel? - - + Check Now Check Now + + Create Debug Archive Create Debug Archive + Data Protection Data Protection - Debug Archive Created - Debug Archive Created - - - Debug archive is created at %1 - Debug archive is created at %1 - - + Desktop client x.x.x Desktop client x.x.x + Edit &Ignored Files Edit &Ignored Files + For System Tray For System Tray + General Settings General Settings + Legal Notice Legal Notice + MB Trailing part of "Ask confirmation before syncing folder larger than" MB + More Information More Information + Move removed files to trash Move removed files to trash + Necessary data Necessary data + Notify when synchronised folders grow larger than specified limit Notify when synchronised folders grow larger than specified limit + Open Source Software Open Source Software + Privacy Policy Privacy Policy + Required to ensure that the software can be used as expected Required to ensure that the software can be used as expected + S&how crash reporter S&how crash reporter + Send anonymous use Send anonymous use - Server notifications that require attention. - Server notifications that require attention. - - + Show Server &Notifications Show Server &Notifications - Show call notification dialogs. - Show call notification dialogues. - - + Show call notifications + Show sync folders in &Explorer's navigation pane Show sync folders in &Explorer's navigation pane - The channel determines which upgrades will be offered to install: -- stable: contains tested versions considered reliable - - starts list of available update channels, stable is always available - The channel determines which upgrades will be offered to install: -- stable: contains tested versions considered reliable - - - + This helps us to optimize the software and to better identify system crashes and unexpected errors. This helps us to optimize the software and to better identify system crashes and unexpected errors. + Update channel Update channel + Updates Updates + Usage Documentation Usage Documentation + Use &monochrome icons - You cannot disable autostart because system-wide autostart is enabled. - You cannot disable autostart because system-wide autostart is enabled. - - - Zip Archives - Zip Archives - - + + beta beta - daily - daily - - - enterprise - enterprise - - - https://wl.hidrive.com/easy/0004 - https://wl.hidrive.com/easy/0004 - - - https://wl.hidrive.com/easy/0005 - https://wl.hidrive.com/easy/0005 - - - https://wl.hidrive.com/easy/0006 - https://wl.hidrive.com/easy/0006 - - - https://wl.hidrive.com/easy/0007 - https://wl.hidrive.com/easy/0007 - - + + stable stable @@ -2709,22 +3288,27 @@ Downgrading versions is not possible immediately: changing from stable to enterp OCC::GETFileJob + Connection Timeout Connection Timeout + No E-Tag received from server, check Proxy/Gateway No E-Tag received from server, check Proxy/Gateway + Server returned wrong content-range Server returned wrong content-range + We received a different E-Tag for resuming. Retrying next time. We received a different E-Tag for resuming. Retrying next time. + We received an unexpected download Content-Length. We received an unexpected download Content-Length. @@ -2732,6 +3316,7 @@ Downgrading versions is not possible immediately: changing from stable to enterp OCC::GetOrCreatePublicLinkShare + Could not retrieve or create the public link share. Error: %1 @@ -2740,14 +3325,17 @@ Downgrading versions is not possible immediately: changing from stable to enterp %1 + Password for share required Password for share required + Please enter a password for your link share: Please enter a password for your link share: + Sharing error Sharing error @@ -2755,18 +3343,22 @@ Downgrading versions is not possible immediately: changing from stable to enterp OCC::HttpCredentialsGui + <a href="%1">Click here</a> to request an app password from the web interface. <a href="%1">Click here</a> to request an app password from the web interface. + Enter Password Enter Password + Please enter %1 password:<br><br>Username: %2<br>Account: %3<br> Please enter %1 password:<br><br>Username: %2<br>Account: %3<br> + Reading from keychain failed with error: "%1" Reading from keychain failed with error: "%1" @@ -2774,49 +3366,50 @@ Downgrading versions is not possible immediately: changing from stable to enterp OCC::IgnoreListEditor + + This entry is provided by the system at "%1" and cannot be modified in this view. + This entry is provided by the system at "%1" and cannot be modified in this view. + + + Files Ignored by Patterns Files Ignored by Patterns + Global Ignore Settings Global Ignore Settings + Ignored Files Editor Ignored Files Editor + Sync hidden files Sync hidden files - - This entry is provided by the system at "%1" and cannot be modified in this view. - This entry is provided by the system at "%1" and cannot be modified in this view. - - + OCC::IgnoreListTableWidget - Add - Add - - + Add a new ignore pattern: Add a new ignore pattern: - Allow Deletion - Allow Deletion - - + Cannot write changes to "%1". Cannot write changes to "%1". + Could not open file Could not open file + Files or folders matching a pattern will not be synchronized. Items where deletion is allowed will be deleted if they prevent a directory from being removed. This is useful for meta data. @@ -2825,18 +3418,32 @@ Items where deletion is allowed will be deleted if they prevent a directory from Items where deletion is allowed will be deleted if they prevent a directory from being removed. This is useful for meta data. + Ignore Pattern Ignore Pattern + + Add + Add + + + + Allow Deletion + Allow Deletion + + + Pattern Pattern + Remove Remove + Remove all Remove all @@ -2844,117 +3451,146 @@ Items where deletion is allowed will be deleted if they prevent a directory from OCC::InvalidFilenameDialog + Cannot rename file because a file with the same name does already exist on the server. Please pick another name. Cannot rename file because a file with the same name does already exist on the server. Please pick another name. + Checking rename permissions … Checking rename permissions … + Could not rename file. Please make sure you are connected to the server. Could not rename file. Please make sure you are connected to the server. + Could not rename local file. %1 Could not rename local file. %1 - Error - Error - - + Failed to fetch permissions with error %1 Failed to fetch permissions with error %1 + Filename contains illegal characters: %1 Filename contains illegal characters: %1 + Filename contains leading and trailing spaces. Filename contains leading and trailing spaces. + Filename contains leading spaces. Filename contains leading spaces. + Filename contains trailing spaces. Filename contains trailing spaces. - Invalid filename - Invalid filename - - - New filename - New filename - - - Please enter a new name for the file: - Please enter a new name for the file: - - + Rename file Rename file + The file "%1" could not be synced because the name contains characters which are not allowed on the server. The file "%1" could not be synced because the name contains characters which are not allowed on the server. + The file "%1" could not be synced because the name contains characters which are not allowed on this system. The file "%1" could not be synced because the name contains characters which are not allowed on this system. - The file could not be synced because it contains characters which are not allowed on this system. - The file could not be synced because its name contains characters which are not allowed on this system. - - + The following basenames are not allowed: %1 The following basenames are not allowed: %1 + The following characters are not allowed on the system: \ / : ? * " < > | leading/trailing spaces The following characters are not allowed on the system: \ / : ? * " < > | leading/trailing spaces + The following characters are not allowed: %1 The following characters are not allowed: %1 + The following file extensions are not allowed: %1 The following file extensions are not allowed: %1 + The following filenames are not allowed: %1 The following filenames are not allowed: %1 + Use invalid name Use invalid name + You don't have the permission to rename this file. Please ask the author of the file to rename it. You don't have the permission to rename this file. Please ask the author of the file to rename it. - + + + Error + Error + + + + Invalid filename + Invalid filename + + + + New filename + New filename + + + + Please enter a new name for the file: + Please enter a new name for the file: + + + + The file could not be synced because it contains characters which are not allowed on this system. + The file could not be synced because its name contains characters which are not allowed on this system. + + OCC::LegalNotice + <p>Copyright 2017-2025 Nextcloud GmbH<br />Copyright 2012-2023 ownCloud GmbH</p> <p>Copyright 2017-2025 Nextcloud GmbH<br />Copyright 2012-2023 ownCloud GmbH</p> + <p>Licensed under the GNU General Public License (GPL) Version 2.0 or any later version.</p> <p>Licensed under the GNU General Public License (GPL) Version 2.0 or any later version.</p> + Close Close + + Legal notice Legal notice @@ -2962,18 +3598,22 @@ Items where deletion is allowed will be deleted if they prevent a directory from OCC::LogBrowser + Enable logging to temporary folder Enable logging to temporary folder + Log Output Log Output + Open folder Open folder + The client can write debug logs to a temporary folder. These logs are very helpful for diagnosing problems. Since log files can get large, the client will start a new one for each sync run and compress older ones. It will also delete log files after a couple of hours to avoid consuming too much disk space. If enabled, logs will be written to %1 @@ -2982,6 +3622,7 @@ Since log files can get large, the client will start a new one for each sync run If enabled, logs will be written to %1 + This setting persists across client restarts. Note that using any logging command line options will override this setting. This setting persists across client restarts. @@ -2991,10 +3632,14 @@ Note that using any logging command line options will override this setting. OCC::Logger + + <nobr>File "%1"<br/>cannot be opened for writing.<br/><br/>The log output <b>cannot</b> be saved!</nobr> <nobr>File "%1"<br/>cannot be opened for writing.<br/><br/>The log output <b>cannot</b> be saved!</nobr> + + Error Error @@ -3002,26 +3647,32 @@ Note that using any logging command line options will override this setting. OCC::Mac::FileProviderEditLocallyJob + An error occurred during setup. An error occurred during setup. + Could not find a file for local editing. Make sure its path is valid and it is synced locally. Could not find a file for local editing. Make sure its path is valid and it is synced locally. + Could not get file ID. Could not get file ID. + Could not get file identifier. Could not get file identifier. + Could not start editing locally. Could not start editing locally. + The file identifier is empty. The file identifier is empty. @@ -3029,121 +3680,157 @@ Note that using any logging command line options will override this setting. OCC::NetworkSettings - Download Bandwidth - Download Bandwidth - - + HTTP(S) proxy HTTP(S) proxy - Host - Host - - + Hostname of proxy server Hostname of proxy server + + Password for proxy server + Password for proxy server + + + + SOCKS5 proxy + SOCKS5 proxy + + + + Username for proxy server + Username for proxy server + + + + Download Bandwidth + Download Bandwidth + + + + Host + Host + + + + KBytes/s KBytes/s + + Limit automatically Limit automatically + + Limit to Limit to + + Limit to 3/4 of estimated bandwidth Limit to 3/4 of estimated bandwidth + Manually specify proxy Manually specify proxy + + No limit No limit + No proxy No proxy + Note: proxy settings have no effects for accounts on localhost Note: proxy settings have no effects for accounts on localhost - Password for proxy server - Password for proxy server - - + Proxy Settings Proxy Settings + Proxy server requires authentication Proxy server requires authentication - SOCKS5 proxy - SOCKS5 proxy - - + Upload Bandwidth Upload Bandwidth + + + Use global settings Use global settings + Use system proxy Use system proxy - - Username for proxy server - Username for proxy server - - + OCC::NSISUpdater + <p>A new version of the %1 Client is available but the updating process failed.</p><p><b>%2</b> has been downloaded. The installed version is %3. If you confirm restart and update, your computer may reboot to complete the installation.</p> <p>A new version of the %1 Client is available but the updating process failed.</p><p><b>%2</b> has been downloaded. The installed version is %3. If you confirm restart and update, your computer may reboot to complete the installation.</p> + <p>A new version of the %1 Client is available.</p><p><b>%2</b> is available for download. The installed version is %3.</p> <p>A new version of the %1 Client is available.</p><p><b>%2</b> is available for download. The installed version is %3.</p> + Ask again later Ask again later + Get update Get update + New Version Available New Version Available + Restart and update Restart and update + Skip this time Skip this time + Update Failed Update Failed + Update manually Update manually @@ -3151,54 +3838,67 @@ Note that using any logging command line options will override this setting. OCC::OCUpdater + %1 available. Restart application to start the update. %1 available. Restart application to start the update. + A new update for %1 is about to be installed. The updater may ask for additional privileges during the process. Your computer may reboot to complete the installation. A new update for %1 is about to be installed. The updater may ask for additional privileges during the process. Your computer may reboot to complete the installation. + Checking update server … Checking update server … + Could not check for new updates. Could not check for new updates. + Could not download update. Please open %1 to download the update manually. Could not download update. Please open %1 to download the update manually. + Could not download update. Please open <a href='%1'>%1</a> to download the update manually. Could not download update. Please open <a href='%1'>%1</a> to download the update manually. + Downloading %1 … Downloading %1 … + New %1 is available. Please open %2 to download the update. New %1 is available. Please open %2 to download the update. + New %1 is available. Please open <a href='%2'>%2</a> to download the update. New %1 is available. Please open <a href='%2'>%2</a> to download the update. + New %1 update ready New %1 update ready + No updates available. Your installation is at the latest version. No updates available. Your installation is at the latest version. + Update Check Update Check + Update status is unknown: Did not check for new updates. Update status is unknown: Did not check for new updates. @@ -3206,55 +3906,72 @@ Note that using any logging command line options will override this setting. OCC::OwncloudAdvancedSetupPage + %1 folder "%2" is synced to local folder "%3" %1 folder "%2" is synced to local folder "%3" + + %1 free space %1 gets replaced with the size and a matching unit. Example: 3 MB or 5 GB %1 free space + + (%1) (%1) + + (experimental) (experimental) + Connect Connect + In Finder's "Locations" sidebar section In Finder's "Locations" sidebar section + Local Sync Folder Local Sync Folder + Sync the folder "%1" Sync the folder "%1" + There isn't enough free space in the local folder! There isn't enough free space in the local folder! + + Use &virtual files instead of downloading content immediately %1 Use &virtual files instead of downloading content immediately %1 + Virtual files are not supported at the selected location Virtual files are not supported at the selected location + Virtual files are not supported for Windows partition roots as local folder. Please choose a valid subfolder under drive letter. Virtual files are not supported for Windows partition roots as local folder. Please choose a valid subfolder under drive letter. + Warning: The local folder is not empty. Pick a resolution! Warning: The local folder is not empty. Pick a resolution! @@ -3262,26 +3979,32 @@ Note that using any logging command line options will override this setting. OCC::OwncloudConnectionMethodDialog + <html><head/><body><p>Failed to connect to the secure server address <em>%1</em>. How do you wish to proceed?</p></body></html> <html><head/><body><p>Failed to connect to the secure server address <em>%1</em>. How do you wish to proceed?</p></body></html> + <html><head/><body><p>Failed to connect to the secure server address specified. How do you wish to proceed?</p></body></html> <html><head/><body><p>Failed to connect to the secure server address specified. How do you wish to proceed?</p></body></html> + Configure client-side TLS certificate Configure client-side TLS certificate + Connection failed Connection failed + Retry unencrypted over HTTP (insecure) Retry unencrypted over HTTP (insecure) + Select a different URL Select a different URL @@ -3289,71 +4012,88 @@ Note that using any logging command line options will override this setting. OCC::ownCloudGui + %1 (%2, %3) %1 (%2, %3) + %1: %2 Example text: "Nextcloud: Syncing 25MB (3 minutes left)" (%1 is the folder name to be synced, %2 a status message for that folder) %1: %2 + Account %1: %2 Account %1: %2 + Account synchronization is disabled Account synchronisation is disabled + Checking for changes in local "%1" Checking for changes in local "%1" + Checking for changes in remote "%1" Checking for changes in remote "%1" + Disconnected from %1 Disconnected from %1 + Disconnected from accounts: Disconnected from accounts: + Please sign in Please sign in + Terms of service Terms of service + The server on account %1 runs an unsupported version %2. Using this client with unsupported server versions is untested and potentially dangerous. Proceed at your own risk. The server on account %1 runs an unsupported version %2. Using this client with unsupported server versions is untested and potentially dangerous. Proceed at your own risk. + There are no sync folders configured. There are no sync folders configured. + Unsupported Server Version Unsupported Server Version + Your account %1 requires you to accept the terms of service of your server. You will be redirected to %2 to acknowledge that you have read it and agrees with it. Your account %1 requires you to accept the terms of service of your server. You will be redirected to %2 to acknowledge that you have read it and agrees with it. + macOS VFS for %1: A problem was encountered. macOS VFS for %1: A problem was encountered. + macOS VFS for %1: Last sync was successful. macOS VFS for %1: Last sync was successful. + macOS VFS for %1: Sync is running. macOS VFS for %1: Sync is running. @@ -3361,14 +4101,17 @@ Note that using any logging command line options will override this setting. OCC::OwncloudHttpCredsPage + &Email &Email + Connect to %1 Connect to %1 + Enter user credentials Enter user credentials @@ -3376,6 +4119,8 @@ Note that using any logging command line options will override this setting. OCC::OwncloudPropagator + + Impossible to get modification time for file in conflict %1 Impossible to get modification time for file in conflict %1 @@ -3383,18 +4128,22 @@ Note that using any logging command line options will override this setting. OCC::OwncloudSetupPage + &Next > &Next > + Could not load certificate. Maybe wrong password? Could not load certificate. Maybe wrong password? + Server address does not seem to be valid Server address does not seem to be valid + The link to your %1 web interface when you open it in the browser. %1 will be replaced with the application name The link to your %1 web interface when you open it in the browser. @@ -3403,118 +4152,149 @@ Note that using any logging command line options will override this setting. OCC::OwncloudSetupWizard + <font color="green"><b>File Provider-based account %1 successfully created!</b></font> <font color="green"><b>File Provider-based account %1 successfully created!</b></font> + <font color="green"><b>Local sync folder %1 successfully created!</b></font> <font colour="green"><b>Local sync folder %1 successfully created!</b></font> + <font color="green">Successfully connected to %1: %2 version %3 (%4)</font><br/><br/> <font colour="green">Successfully connected to %1: %2 version %3 (%4)</font><br/><br/> + <p><font color="red">Remote folder creation failed probably because the provided credentials are wrong.</font><br/>Please go back and check your credentials.</p> <p><font colour="red">Remote folder creation failed probably because the provided credentials are wrong.</font><br/>Please go back and check your credentials.</p> + A sync connection from %1 to remote directory %2 was set up. A sync connection from %1 to remote directory %2 was set up. + Access forbidden by server. To verify that you have proper access, <a href="%1">click here</a> to access the service with your browser. Access forbidden by server. To verify that you have proper access, <a href="%1">click here</a> to access the service with your browser. + Cannot remove and back up the folder because the folder or a file in it is open in another program. Please close the folder or file and hit retry or cancel the setup. Cannot remove and back up the folder because the folder or a file in it is open in another program. Please close the folder or file and hit retry or cancel the setup. + Connection to %1 could not be established. Please check again. Connection to %1 could not be established. Please check again. + Could not create local folder %1 Could not create local folder %1 + Creating local sync folder %1 … Creating local sync folder %1 … + Error: %1 Error: %1 + Failed to connect to %1 at %2:<br/>%3 Failed to connect to %1 at %2:<br/>%3 + Folder rename failed Folder rename failed + Invalid URL Invalid URL + Local sync folder %1 already exists, setting it up for sync.<br/><br/> Local sync folder %1 already exists, setting it up for sync.<br/><br/> + No remote folder specified! No remote folder specified! + OK OK + Remote folder %1 created successfully. Remote folder %1 created successfully. + + Remote folder %1 creation failed with error <tt>%2</tt>. Remote folder %1 creation failed with error <tt>%2</tt>. + Successfully connected to %1! Successfully connected to %1! + The authenticated request to the server was redirected to "%1". The URL is bad, the server is misconfigured. The authenticated request to the server was redirected to "%1". The URL is bad, the server is misconfigured. + + The folder creation resulted in HTTP error code %1 The folder creation resulted in HTTP error code %1 + The remote folder %1 already exists. Connecting it for syncing. The remote folder %1 already exists. Connecting it for syncing. + The remote folder creation failed because the provided credentials are wrong!<br/>Please go back and check your credentials.</p> The remote folder creation failed because the provided credentials are wrong!<br/>Please go back and check your credentials.</p> + There was an invalid response to an authenticated WebDAV request There was an invalid response to an authenticated WebDAV request + Timeout while trying to connect to %1 at %2. Timeout while trying to connect to %1 at %2. + Trying to connect to %1 at %2 … Trying to connect to %1 at %2 … + creating folder on Nextcloud: %1 creating folder on Nextcloud: %1 + failed. failed. @@ -3522,30 +4302,37 @@ Note that using any logging command line options will override this setting. OCC::OwncloudWizard + Add %1 account Add %1 account + Cancel Cancel + Enable experimental feature? Enable experimental feature? + Enable experimental placeholder mode Enable experimental placeholder mode + Skip folders configuration Skip folders configuration + Stay safe Stay safe + When the "virtual files" mode is enabled no files will be downloaded initially. Instead, a tiny "%1" file will be created for each file that exists on the server. The contents can be downloaded by running these files or by using their context menu. The virtual files mode is mutually exclusive with selective sync. Currently unselected folders will be translated to online-only folders and your selective sync settings will be reset. @@ -3565,10 +4352,12 @@ This is a new, experimental mode. If you decide to use it, please report any iss OCC::PasswordInputDialog + Password for share required Password for share required + Please enter a password for your share: Please enter a password for your share: @@ -3576,6 +4365,7 @@ This is a new, experimental mode. If you decide to use it, please report any iss OCC::PollJob + Invalid JSON reply from the poll URL Invalid JSON reply from the poll URL @@ -3583,165 +4373,210 @@ This is a new, experimental mode. If you decide to use it, please report any iss OCC::ProcessDirectoryJob + %1 name containing the character "%2" is not supported on this file system. folder or file impossible to sync due to an invalid name, placeholders will be file or folder and the invalid character %1 name containing the character "%2" is not supported on this file system. + %1 name contains at least one invalid character %1 name contains at least one invalid character + %1 name is a reserved name on this file system. %1 name is a reserved name on this file system. + + + + Cannot be renamed or uploaded. Cannot be renamed or uploaded. + Cannot modify encrypted item because the selected certificate is not valid. Cannot modify encrypted item because the selected certificate is not valid. + Cannot sync due to invalid modification time Cannot sync due to invalid modification time + Case Clash Conflict: Server file downloaded and renamed to avoid clash. Case Clash Conflict: Server file downloaded and renamed to avoid clash. + Conflict: Server version downloaded, local copy renamed and not uploaded. Conflict: Server version downloaded, local copy renamed and not uploaded. + Could not upload file, because it is open in "%1". Could not upload file, because it is open in "%1". + Error while deleting file record %1 from the database Error while deleting file record %1 from the database + Error while reading the database Error while reading the database + File name of folder entity to use when warning about invalid name File + File has extension reserved for virtual files. File has extension reserved for virtual files. + File is listed on the ignore list. File is listed on the ignore list. + File names ending with a period are not supported on this file system. File names ending with a period are not supported on this file system. + File/Folder is ignored because it's hidden. File/Folder is ignored because it's hidden. + Filename contains leading and trailing spaces. Filename contains leading and trailing spaces. + Filename contains leading spaces. Filename contains leading spaces. + Filename contains trailing spaces. Filename contains trailing spaces. + Filename is too long. Filename is too long. + Folder name of folder entity to use when warning about invalid name Folder + Ignored because of the "choose what to sync" blacklist Ignored because of the "choose what to sync" blacklist + + Moved to invalid target, restoring Moved to invalid target, restoring + Not allowed because you don't have permission to add files in that folder Not allowed because you don't have permission to add files in that folder + + Not allowed because you don't have permission to add subfolders to that folder Not allowed because you don't have permission to add subfolders to that folder + Not allowed to remove, restoring Not allowed to remove, restoring + Not allowed to upload this file because it is read-only on the server, restoring Not allowed to upload this file because it is read-only on the server, restoring + Reason: the entire filename is forbidden. Reason: the entire filename is forbidden. + Reason: the file has a forbidden extension (.%1). Reason: the file has a forbidden extension (.%1). + Reason: the filename contains a forbidden character (%1). Reason: the filename contains a forbidden character (%1). + Reason: the filename has a forbidden base name (filename start). Reason: the filename has a forbidden base name (filename start). + Server replied with an error while reading directory "%1" : %2 Server replied with an error while reading directory "%1" : %2 + Server reported no %1 Server reported no %1 + Stat failed. Stat failed. + Symbolic links are not supported in syncing. Symbolic links are not supported in syncing. + The filename cannot be encoded on your file system. The filename cannot be encoded on your file system. + The filename is blacklisted on the server. The filename is blacklisted on the server. + file id file id + permission permission + size size @@ -3749,26 +4584,38 @@ This is a new, experimental mode. If you decide to use it, please report any iss OCC::PropagateDirectory + Could not delete file %1 from local DB Could not delete file %1 from local DB + Error updating metadata due to invalid modification time Error updating metadata due to invalid modification time + Error updating metadata: %1 Error updating metadata: %1 + File is currently in use File is currently in use + + + + + + The folder %1 cannot be made read-only: %2 The folder %1 cannot be made read-only: %2 + + unknown exception unknown exception @@ -3776,58 +4623,75 @@ This is a new, experimental mode. If you decide to use it, please report any iss OCC::PropagateDownloadFile + + Could not delete file record %1 from local DB Could not delete file record %1 from local DB + Could not get file %1 from local DB Could not get file %1 from local DB + Error updating metadata: %1 Error updating metadata: %1 + File %1 can not be downloaded because of a local file name clash! File %1 can not be downloaded because of a local file name clash! + File %1 cannot be downloaded because encryption information is missing. File %1 cannot be downloaded because encryption information is missing. + File %1 downloaded but it resulted in a local file name clash! File %1 downloaded but it resulted in a local file name clash! + + File %1 has invalid modified time reported by server. Do not save it. File %1 has invalid modified time reported by server. Do not save it. + + File has changed since discovery File has changed since discovery + File was deleted from server File was deleted from server + Free space on disk is less than %1 Free space on disk is less than %1 + The download would reduce free local disk space below the limit The download would reduce free local disk space below the limit + The downloaded file is empty, but the server said it should have been %1. The downloaded file is empty, but the server said it should have been %1. + The file %1 is currently in use The file %1 is currently in use + The file could not be downloaded completely. The file could not be downloaded completely. @@ -3835,10 +4699,12 @@ This is a new, experimental mode. If you decide to use it, please report any iss OCC::PropagateItemJob + ; Restoration Failed: %1 ; Restoration Failed: %1 + A file or folder was removed from a read only share, but restoring failed: %1 A file or folder was removed from a read only share, but restoring failed: %1 @@ -3846,30 +4712,39 @@ This is a new, experimental mode. If you decide to use it, please report any iss OCC::PropagateLocalMkdir + Could not create folder %1 Could not create folder %1 + Error updating metadata: %1 Error updating metadata: %1 + Folder %1 cannot be created because of a local file or folder name clash! Folder %1 cannot be created because of a local file or folder name clash! + The file %1 is currently in use The file %1 is currently in use + + + The folder %1 cannot be made read-only: %2 The folder %1 cannot be made read-only: %2 + could not delete file %1, error: %2 could not delete file %1, error: %2 + unknown exception unknown exception @@ -3877,14 +4752,19 @@ This is a new, experimental mode. If you decide to use it, please report any iss OCC::PropagateLocalRemove + Could not delete file record %1 from local DB Could not delete file record %1 from local DB + Could not remove %1 because of a local file name clash Could not remove %1 because of a local file name clash + + + Temporary error when removing local item removed from server. Temporary error when removing local item removed from server. @@ -3892,38 +4772,49 @@ This is a new, experimental mode. If you decide to use it, please report any iss OCC::PropagateLocalRename + Could not delete file record %1 from local DB Could not delete file record %1 from local DB + + Could not get file %1 from local DB Could not get file %1 from local DB + + Error setting pin state Error setting pin state + Error updating metadata: %1 Error updating metadata: %1 + Failed to propagate directory rename in hierarchy Failed to propagate directory rename in hierarchy + Failed to rename file Failed to rename file + File %1 downloaded but it resulted in a local file name clash! File %1 downloaded but it resulted in a local file name clash! + Folder %1 cannot be renamed because of a local file or folder name clash! Folder %1 cannot be renamed because of a local file or folder name clash! + The file %1 is currently in use The file %1 is currently in use @@ -3931,10 +4822,12 @@ This is a new, experimental mode. If you decide to use it, please report any iss OCC::PropagateRemoteDelete + Could not delete file record %1 from local DB Could not delete file record %1 from local DB + Wrong HTTP code returned by server. Expected 204, but received "%1 %2". Wrong HTTP code returned by server. Expected 204, but received "%1 %2". @@ -3942,6 +4835,7 @@ This is a new, experimental mode. If you decide to use it, please report any iss OCC::PropagateRemoteDeleteEncryptedRootFolder + Wrong HTTP code returned by server. Expected 204, but received "%1 %2". Wrong HTTP code returned by server. Expected 204, but received "%1 %2". @@ -3949,18 +4843,22 @@ This is a new, experimental mode. If you decide to use it, please report any iss OCC::PropagateRemoteMkdir + Error writing metadata to the database: %1 Error writing metadata to the database: %1 + Failed to encrypt a folder %1 Failed to encrypt a folder %1 + The file %1 is currently in use The file %1 is currently in use + Wrong HTTP code returned by server. Expected 201, but received "%1 %2". Wrong HTTP code returned by server. Expected 201, but received "%1 %2". @@ -3968,34 +4866,44 @@ This is a new, experimental mode. If you decide to use it, please report any iss OCC::PropagateRemoteMove + Could not delete file record %1 from local DB Could not delete file record %1 from local DB + Could not get file %1 from local DB Could not get file %1 from local DB + Could not rename %1 to %2, error: %3 Could not rename %1 to %2, error: %3 + Error setting pin state Error setting pin state + + Error updating metadata: %1 Error updating metadata: %1 + Error writing metadata to the database Error writing metadata to the database + + The file %1 is currently in use The file %1 is currently in use + Wrong HTTP code returned by server. Expected 201, but received "%1 %2". Wrong HTTP code returned by server. Expected 201, but received "%1 %2". @@ -4003,46 +4911,60 @@ This is a new, experimental mode. If you decide to use it, please report any iss OCC::PropagateUploadFileCommon + Error updating metadata: %1 Error updating metadata: %1 + Failed to unlock encrypted folder. Failed to unlock encrypted folder. + Failed to upload encrypted file. Failed to upload encrypted file. + File %1 cannot be uploaded because another file with the same name, differing only in case, exists File %1 cannot be uploaded because another file with the same name, differing only in case, exists + + + File %1 has invalid modification time. Do not upload to the server. File %1 has invalid modification time. Do not upload to the server. + File Removed (start upload) %1 File Removed (start upload) %1 + Local file changed during sync. Local file changed during sync. + Local file changed during syncing. It will be resumed. Local file changed during syncing. It will be resumed. + The file %1 is currently in use The file %1 is currently in use + Unable to upload an item with invalid characters Unable to upload an item with invalid characters + + Upload of %1 exceeds the quota for the folder Upload of %1 exceeds the quota for the folder @@ -4050,26 +4972,32 @@ This is a new, experimental mode. If you decide to use it, please report any iss OCC::PropagateUploadFileNG + Local file changed during sync. Local file changed during sync. + Missing ETag from server Missing ETag from server + Missing File ID from server Missing File ID from server + Poll URL missing Poll URL missing + The local file was removed during sync. The local file was removed during sync. + Unexpected return code from server (%1) Unexpected return code from server (%1) @@ -4077,18 +5005,22 @@ This is a new, experimental mode. If you decide to use it, please report any iss OCC::PropagateUploadFileV1 + Local file changed during sync. Local file changed during sync. + Poll URL missing Poll URL missing + The local file was removed during sync. The local file was removed during sync. + The server did not acknowledge the last chunk. (No e-tag was present) The server did not acknowledge the last chunk. (No e-tag was present) @@ -4096,22 +5028,27 @@ This is a new, experimental mode. If you decide to use it, please report any iss OCC::ProxyAuthDialog + Password: Password: + Proxy authentication required Proxy authentication required + Proxy: Proxy: + The proxy server needs a username and password. The proxy server needs a username and password. + Username: Username: @@ -4119,6 +5056,7 @@ This is a new, experimental mode. If you decide to use it, please report any iss OCC::SelectiveSyncDialog + Choose What to Sync Choose What to Sync @@ -4126,26 +5064,33 @@ This is a new, experimental mode. If you decide to use it, please report any iss OCC::SelectiveSyncWidget + An error occurred while loading the list of sub folders. An error occurred while loading the list of sub folders. + Deselect remote folders you do not wish to synchronize. Deselect remote folders you do not wish to synchronise. + Loading … Loading … + Name Name + + No subfolders currently on the server. No subfolders currently on the server. + Size Size @@ -4153,6 +5098,7 @@ This is a new, experimental mode. If you decide to use it, please report any iss OCC::ServerNotificationHandler + Reply Reply @@ -4160,14 +5106,17 @@ This is a new, experimental mode. If you decide to use it, please report any iss OCC::sesSnackBar + Error Error + Success Success + Warning Warning @@ -4175,27 +5124,33 @@ This is a new, experimental mode. If you decide to use it, please report any iss OCC::SettingsDialog + %1 Settings This name refers to the application name e.g Nextcloud %1 Settings + Account Account + General General + Network Network + New account New account + Settings Settings @@ -4203,19 +5158,24 @@ This is a new, experimental mode. If you decide to use it, please report any iss OCC::ShareeModel + %1 (%2) sharee (shareWithAdditionalInfo) %1 (%2) + Global search results Global search results + No results found No results found + + Search globally Search globally @@ -4223,6 +5183,7 @@ This is a new, experimental mode. If you decide to use it, please report any iss OCC::ShareManager + Error Error @@ -4230,38 +5191,47 @@ This is a new, experimental mode. If you decide to use it, please report any iss OCC::ShareModel + %1 days %1 days + 1 day 1 day + Could not find local folder for %1 Could not find local folder for %1 + Internal link Internal link + Link share Link share + Secure file drop Secure file drop + Secure file drop link Secure file drop link + Share link Share link + Today Today @@ -4269,22 +5239,28 @@ This is a new, experimental mode. If you decide to use it, please report any iss OCC::SocketApi + + Activity Activity + Context menu share Context menu share + Copy internal link Copy internal link + Copy private link to clipboard Copy private link to clipboard + Could not encrypt the following folder: "%1". Server replied with error: %2 @@ -4293,18 +5269,22 @@ Server replied with error: %2 Server replied with error: %2 + Delete Delete + Delete local changes Delete local changes + Encrypt Encrypt + Expires in %1 minutes remaining time before lock expires @@ -4313,82 +5293,104 @@ Server replied with error: %2 + Failed to encrypt folder Failed to encrypt folder + Failed to encrypt folder at "%1" Failed to encrypt folder at "%1" + Folder encrypted successfully Folder encrypted successfully + I shared something with you I shared something with you + Leave this share Leave this share + Lock file Lock file + Locked by %1 Locked by %1 + Move and rename … Move and rename … + Move and upload … Move and upload … + Move, rename and upload … Move, rename and upload … + + Open in browser Open in browser + Resharing this file is not allowed Resharing this file is not allowed + Resharing this folder is not allowed Resharing this folder is not allowed + Resolve conflict … Resolve conflict … + Select new location … Select new location … + Send private link by email … Send private link by email … + + Share options Share options + The account %1 does not have end-to-end encryption configured. Please configure this in your account settings to enable folder encryption. The account %1 does not have end-to-end encryption configured. Please configure this in your account settings to enable folder encryption. + The following folder was encrypted successfully: "%1" The following folder was encrypted successfully: "%1" + Unlock file Unlock file @@ -4396,98 +5398,122 @@ Server replied with error: %2 OCC::SslButton + %1 %1 + %1 (self-signed) %1 (self-signed) + <h3>Certificate Details</h3> <h3>Certificate Details</h3> + <h3>Fingerprints</h3> <h3>Fingerprints</h3> + <h3>Issuer</h3> <h3>Issuer</h3> + <p><b>Note:</b> This certificate was manually approved</p> <p><b>Note:</b> This certificate was manually approved</p> + Certificate information: Certificate information: + Common Name (CN): Common Name (CN): + Country: Country: + Expires on: Expires on: + Issued on: Issued on: + Issuer: Issuer: + No support for SSL session tickets/identifiers No support for SSL session tickets/identifiers + Organization (O): Organization (O): + Organizational Unit (OU): Organizational Unit (OU): + SHA-1: SHA-1: + SHA-256: SHA-256: + Serial: Serial: + Server version: %1 Server version: %1 + State/Province: State/Province: + Subject Alternative Names: Subject Alternative Names: + The connection is not secure The connection is not secure + This connection is NOT secure as it is not encrypted. This connection is NOT secure as it is not encrypted. + This connection is encrypted using %1 bit %2. This connection is encrypted using %1 bit %2. @@ -4495,122 +5521,156 @@ Server replied with error: %2 OCC::SslErrorDialog + + + &lt;not specified&gt; &lt;not specified&gt; + Additional errors: Additional errors: + Cannot connect securely to <i>%1</i>: Cannot connect securely to <i>%1</i>: + + Country: %1 Country: %1 + Effective Date: %1 Effective Date: %1 + Expiration Date: %1 Expiration Date: %1 + Fingerprint (SHA-256): <tt>%1</tt> Fingerprint (SHA-256): <tt>%1</tt> + Fingerprint (SHA-512): <tt>%1</tt> Fingerprint (SHA-512): <tt>%1</tt> + Fingerprint (SHA1): <tt>%1</tt> Fingerprint (SHA1): <tt>%1</tt> + Issuer: %1 Issuer: %1 + + Organization: %1 Organisation: %1 - Trust this certificate anyway - Trust this certificate anyway - - + + Unit: %1 Unit: %1 + Untrusted Certificate Untrusted Certificate + with Certificate %1 with Certificate %1 - + + + Trust this certificate anyway + Trust this certificate anyway + + OCC::SyncEngine + %1 (skipped due to earlier error, trying again in %2) %1 (skipped due to earlier error, trying again in %2) + Cannot open the sync journal Cannot open the sync journal + Could not set file record to local DB: %1 Could not set file record to local DB: %1 + Could not update file metadata: %1 Could not update file metadata: %1 + Could not update file: %1 Could not update file: %1 + Could not update virtual file metadata: %1 Could not update virtual file metadata: %1 + Disk space is low: Downloads that would reduce free space below %1 were skipped. Disk space is low: Downloads that would reduce free space below %1 were skipped. + Only %1 are available, need at least %2 to start Placeholders are postfixed with file sizes using Utility::octetsToString() Only %1 are available, need at least %2 to start + There is insufficient space available on the server for some uploads. There is insufficient space available on the server for some uploads. + Unable to open or create the local sync database. Make sure you have write access in the sync folder. Unable to open or create the local sync database. Make sure you have write access in the sync folder. + Unable to read from the sync journal. Unable to read from the sync journal. + Unable to read the blacklist from the local database Unable to read the blacklist from the local database + Unresolved conflict. Unresolved conflict. + Using virtual files with suffix, but suffix is not set Using virtual files with suffix, but suffix is not set @@ -4618,54 +5678,70 @@ Server replied with error: %2 OCC::SyncStatusSummary + %1 of %2 %1 of %2 + %1 of %2 · %3 left %1 of %2 · %3 left + + + All synced! All synced! + Checking folder changes Checking folder changes + + Offline Offline + See below for errors See below for errors + See below for warnings See below for warnings + Some files could not be synced! Some files could not be synced! + Some files couldn't be synced! Some files couldn't be synced! + Sync paused Sync paused + Syncing Syncing + Syncing changes Syncing changes + Syncing file %1 of %2 Syncing file %1 of %2 @@ -4673,42 +5749,54 @@ Server replied with error: %2 OCC::Systray + Add account Add account + Download Download + Exit %1 Exit %1 + Help Help + Open main dialog Open main dialogue + + Pause sync Pause sync + Pause sync for all Pause sync for all + + Resume sync Resume sync + Resume sync for all Resume sync for all + Settings Settings @@ -4716,22 +5804,27 @@ Server replied with error: %2 OCC::TermsOfServiceCheckWidget + Copy Link Copy Link + Link copied to clipboard. Link copied to clipboard. + Open Browser Open Browser + Polling Polling + Waiting for terms to be accepted Waiting for terms to be accepted @@ -4739,19 +5832,23 @@ Server replied with error: %2 OCC::Theme + %1 Desktop Client Version %2 (%3) %1 is application name. %2 is the human version string. %3 is the operating system name. %1 Desktop Client Version %2 (%3) + <p><small>Using virtual files plugin: %1</small></p> <p><small>Using virtual files plugin: %1</small></p> + <p>This release was supplied by %1.</p> <p>This release was supplied by %1.</p> + easy/0118 easy/0108 @@ -4759,18 +5856,22 @@ Server replied with error: %2 OCC::UnifiedSearchResultsListModel + Failed to fetch providers. Failed to fetch providers. + Failed to fetch search providers for '%1'. Error: %2 Failed to fetch search providers for '%1'. Error: %2 + Search has failed for '%1'. Error: %2 Search has failed for '%1'. Error: %2 + Search has failed for '%2'. Search has failed for '%2'. @@ -4778,14 +5879,17 @@ Server replied with error: %2 OCC::UpdateE2eeFolderMetadataJob + Failed to finalize item. Failed to finalize item. + Failed to unlock encrypted folder. Failed to unlock encrypted folder. + Failed to update folder metadata. Failed to update folder metadata. @@ -4793,33 +5897,43 @@ Server replied with error: %2 OCC::UpdateE2eeFolderUsersMetadataJob + Could not add or remove user %1 to access folder %2 Could not add or remove user %1 to access folder %2 + Could not fetch public key for user %1 Could not fetch public key for user %1 + Could not find root encrypted folder for folder %1 Could not find root encrypted folder for folder %1 + + + + + + + + + Error updating metadata for a folder %1 Error updating metadata for a folder %1 + Failed to unlock a folder. Failed to unlock a folder. OCC::User - - %1 notifications - %1 notifications - + %n notification(s) %n notification(s) @@ -4827,30 +5941,38 @@ Server replied with error: %2 + End-to-end certificate needs to be migrated to a new one End-to-end certificate needs to be migrated to a new one + Open Nextcloud Assistant in browser Open Nextcloud Assistant in browser + Open Nextcloud Talk in browser Open Nextcloud Talk in browser + Rename file Rename file + + Resolve conflict Resolve conflict + Retry all uploads Retry all uploads + Trigger the migration Trigger the migration @@ -4858,18 +5980,22 @@ Server replied with error: %2 OCC::UserModel + <p>Do you really want to remove the connection to the account <i>%1</i>?</p><p><b>Note:</b> This will <b>not</b> delete any files.</p> <p>Do you really want to remove the connection to the account <i>%1</i>?</p><p><b>Note:</b> This will <b>not</b> delete any files.</p> + Cancel Cancel + Confirm Account Removal Confirm Account Removal + Remove connection Remove connection @@ -4877,6 +6003,7 @@ Server replied with error: %2 OCC::UserStatusSelectorModel + %1 days %1 days @@ -4884,6 +6011,7 @@ Server replied with error: %2 + %1 hours %1 hours @@ -4891,6 +6019,7 @@ Server replied with error: %2 + %1 minutes %1 minutes @@ -4898,62 +6027,81 @@ Server replied with error: %2 + 1 day 1 day + + 1 hour 1 hour + 1 minute 1 minute + 30 minutes 30 minutes + 4 hours 4 hours + Could not clear status message. Make sure you are connected to the server. Could not clear status message. Make sure you are connected to the server. + Could not fetch predefined statuses. Make sure you are connected to the server. Could not fetch predefined statuses. Make sure you are connected to the server. + Could not fetch status. Make sure you are connected to the server. Could not fetch status. Make sure you are connected to the server. + Could not set status. Make sure you are connected to the server. Could not set status. Make sure you are connected to the server. + + Don't clear Don't clear + Emojis are not supported. Some status functionality may not work. Emojis are not supported. Some status functionality may not work. + Less than a minute Less than a minute + Status feature is not supported. You will not be able to set your status. Status feature is not supported. You will not be able to set your status. + + This week This week + + Today Today @@ -4961,14 +6109,17 @@ Server replied with error: %2 OCC::Vfs + Please choose a different location. %1 is a drive. It doesn't support virtual files. Please choose a different location. %1 is a drive. It doesn't support virtual files. + Please choose a different location. %1 is a network drive. It doesn't support virtual files. Please choose a different location. %1 is a network drive. It doesn't support virtual files. + Please choose a different location. %1 isn't a NTFS file system. It doesn't support virtual files. Please choose a different location. %1 isn't a NTFS file system. It doesn't support virtual files. @@ -4976,30 +6127,37 @@ Server replied with error: %2 OCC::VfsDownloadErrorDialog + %1 could not be downloaded. %1 could not be downloaded. + + Error downloading %1 + Error downloading %1 + + + > More details > More details + Download error Download error + Error downloading Error downloading - Error downloading %1 - Error downloading %1 - - + More details More details + could not be downloaded could not be downloaded @@ -5007,6 +6165,8 @@ Server replied with error: %2 OCC::VfsSuffix + + Error updating metadata due to invalid modification time Error updating metadata due to invalid modification time @@ -5014,6 +6174,8 @@ Server replied with error: %2 OCC::VfsXAttr + + Error updating metadata due to invalid modification time Error updating metadata due to invalid modification time @@ -5021,10 +6183,12 @@ Server replied with error: %2 OCC::WebEnginePage + Invalid certificate detected Invalid certificate detected + The host "%1" provided an invalid certificate. Continue? The host "%1" provided an invalid certificate. Continue? @@ -5032,6 +6196,7 @@ Server replied with error: %2 OCC::WebFlowCredentials + <b>You have been logged out of your account %1 at %2. Please login again.</b> <b>You have been logged out of your account %1 at %2. Please login again.</b> @@ -5039,22 +6204,27 @@ Server replied with error: %2 OCC::WelcomePage - Form - Form - - + Host your own server Host your own server + Keep your data secure and under your control Keep your data secure and under your control + + Form + Form + + + Log in Log in + Sign up with provider Sign up with provider @@ -5062,55 +6232,68 @@ Server replied with error: %2 OwncloudAdvancedSetupPage + &Local Folder &Local Folder + <html><head/><body><p>If this box is checked, existing content in the local folder will be erased to start a clean sync from the server.</p><p>Do not check this if the local content should be uploaded to the servers folder.</p></body></html> <html><head/><body><p>If this box is checked, existing content in the local folder will be erased to start a clean sync from the server.</p><p>Do not check this if the local content should be uploaded to the servers folder.</p></body></html> + Ask before syncing folders larger than Ask before syncing folders larger than + Choose different folder Choose different folder + Choose what to sync Choose what to sync + Erase local folder and start a clean sync Erase local folder and start a clean sync + Keep local data Keep local data + Local Folder Local Folder + MB Trailing part of "Ask confirmation before syncing folder larger than" MB + Server address Server address + Sync Logo Sync Logo + Synchronize everything from server Synchronize everything from server + Username Username @@ -5118,10 +6301,12 @@ Server replied with error: %2 OwncloudHttpCredsPage + &Password &Password + &Username &Username @@ -5129,14 +6314,18 @@ Server replied with error: %2 OwncloudSetupPage + Server address Server address + + TextLabel TextLabel + This is the link to your %1 web interface when you open it in the browser. This is the link to your %1 web interface when you open it in the browser. @@ -5144,110 +6333,127 @@ Server replied with error: %2 progress + Deleted Deleted + Deleting Deleting + Downloaded Downloaded + Downloading Downloading + + Error Error + Filesystem access error Filesystem access error + Ignored Ignored + Ignoring Ignoring + Moved to %1 Moved to %1 + Moving Moving + Replaced by virtual file Replaced by virtual file + Server version downloaded, copied changed local file into case conflict conflict file Server version downloaded, copied changed local file into case conflict conflict file + Server version downloaded, copied changed local file into conflict file Server version downloaded, copied changed local file into conflict file + + Unknown Unknown + Updated end-to-end encryption metadata Updated end-to-end encryption metadata + Updated local metadata Updated local metadata + Updated local virtual files metadata Updated local virtual files metadata + Updating end-to-end encryption metadata Updating end-to-end encryption metadata + Updating local metadata Updating local metadata + Updating local virtual files metadata Updating local virtual files metadata + Uploaded Uploaded + Uploading Uploading + Virtual file created Virtual file created - - updating local virtual files metadata - Updating local virtual files metadata - QObject - - %1: %2 - this displays an error string (%2) for a file %1 - %1: %2 - + %nd delay in days after an activity @@ -5256,6 +6462,7 @@ Server replied with error: %2 + %nh delay in hours after an activity @@ -5264,6 +6471,7 @@ Server replied with error: %2 + %nm delay in minutes after an activity @@ -5272,70 +6480,92 @@ Server replied with error: %2 + 1m one minute after activity date and time 1m - Could not create debug archive in selected location! - Could not create debug archive in selected location! + + Some time ago + Some time ago - Error deleting the file - Error deleting the file + + in the future + in the future - Failed to create debug archive - Failed to create debug archive + + now + now + + + + The directory %1 cannot be part of your sync directory. Please choose another folder. + The directory %1 cannot be part of your sync directory. Please choose another folder. + New folder New folder - Paths beginning with '#' character are not supported in VFS mode. - Paths beginning with '#' character are not supported in VFS mode. + + Could not create debug archive in selected location! + Could not create debug archive in selected location! - Some time ago - Some time ago + + Failed to create debug archive + Failed to create debug archive + Synced %1 Synced %1 - The directory %1 cannot be part of your sync directory. Please choose another folder. - The directory %1 cannot be part of your sync directory. Please choose another folder. - - + You changed %1 You changed %1 + You created %1 You created %1 + You deleted %1 You deleted %1 + You renamed %1 You renamed %1 - in the future - in the future + + Error deleting the file + Error deleting the file - now - now + + %1: %2 + this displays an error string (%2) for a file %1 + %1: %2 - + + + Paths beginning with '#' character are not supported in VFS mode. + Paths beginning with '#' character are not supported in VFS mode. + + ResolveConflictsDialog + %1 files in conflict indicate the number of conflicts to resolve @@ -5344,26 +6574,32 @@ Server replied with error: %2 + All local versions All local versions + All server versions All server versions + Cancel Cancel + Choose if you want to keep the local version, server version, or both. If you choose both, the local file will have a number added to its name. Choose if you want to keep the local version, server version, or both. If you choose both, the local file will have a number added to its name. + Resolve conflicts Resolve conflicts + Solve sync conflicts Solve sync conflicts @@ -5371,6 +6607,7 @@ Server replied with error: %2 SesErrorBox + Error Error @@ -5378,14 +6615,17 @@ Server replied with error: %2 SesTrayHeader + Open Nextcloud in browser Open HiDrive Next in browser + Open local or group folders Open local or group folders + Website Website @@ -5393,18 +6633,22 @@ Server replied with error: %2 ShareDelegate + Copied! Copied! + Copy share link location + Create a new share link + Share options Share options @@ -5412,62 +6656,78 @@ Server replied with error: %2 ShareDetailsPage + Add another link Add another link + Allow resharing Allow resharing + + Allow upload and editing Allow upload and editing + An error occurred setting the share password. An error occurred setting the share password. + Copy share link Copy share link + Custom Permissions Custom Permissions + Enter the note to recipient Enter the note to recipient + File drop (upload only) File drop (upload only) + Hide download Hide download + Note to recipient Note to recipient + Password protection Password protection + Set expiration date Set expiration date + Share link copied! Share link copied! + Unshare Unshare + View only View only @@ -5475,10 +6735,12 @@ Server replied with error: %2 ShareeSearchField + Search for users or groups… Search for users or groups… + Sharing is not available for this folder Sharing is not available for this folder @@ -5486,30 +6748,37 @@ Server replied with error: %2 ShareView + Expires in %1 Expires in %1 + Password required for new share Password required for new share + Share password Share password + Shared with you by %1 Shared with you by %1 + Sharing is disabled Sharing is disabled + Sharing is disabled. Sharing is disabled. + This item cannot be shared. This item cannot be shared. @@ -5517,6 +6786,7 @@ Server replied with error: %2 SyncJournalDb + Failed to connect database. Failed to connect database. @@ -5524,14 +6794,17 @@ Server replied with error: %2 SyncStatus + Open browser Open browser + Resolve conflicts Resolve conflicts + Sync now Sync now @@ -5539,10 +6812,12 @@ Server replied with error: %2 TalkReplyTextField + Reply to … Reply to … + Send reply to chat message Send reply to chat message @@ -5550,14 +6825,17 @@ Server replied with error: %2 TermsOfServiceCheckWidget + Logo Logo + Switch to your browser to accept the terms of service Switch to your browser to accept the terms of service + Terms of Service Terms of Service @@ -5565,92 +6843,105 @@ Server replied with error: %2 theme + Error occurred during setup Error occurred during setup + Error occurred during sync Error occurred during sync + Preparing to sync Preparing to sync + Stopping sync Stopping sync + Sync is paused Sync is paused + Sync is running Sync is running + Sync status is unknown Sync status is unknown + Sync was successful Sync was successful + Sync was successful but some files were ignored Sync was successful but some files were ignored + Waiting to start syncing Waiting to start syncing - - TrayFoldersMenuButton - - Files - Files - - TrayWindowAccountMenu + Account switcher and settings menu Account switcher and settings menu + Add account Add account + Current account Current account + Current account avatar Current account avatar + Current account status is do not disturb Current account status is do not disturb + Current account status is online Current account status is online + Exit Exit + Pause sync for all Pause sync for all + Resume sync for all Resume sync for all + Settings Settings @@ -5658,14 +6949,17 @@ Server replied with error: %2 TrayWindowHeader + More apps More apps + Open %1 in browser Open %1 in browser + Open local or group folders Open local or group folders @@ -5673,26 +6967,32 @@ Server replied with error: %2 TrayWindowHeaderBar + More apps More apps + Open %1 in browser Open %1 in browser + Open Nextcloud Talk in browser Open Nextcloud Talk in browser + Open Nextcloud in browser Open HiDrive Next in browser + Open local or group folders Open local or group folders + Website Website @@ -5700,6 +7000,7 @@ Server replied with error: %2 UnifiedSearchInputContainer + Search files, messages, events … Search files, messages, events … @@ -5707,6 +7008,7 @@ Server replied with error: %2 UnifiedSearchPlaceholderView + Start typing to search Start typing to search @@ -5714,6 +7016,7 @@ Server replied with error: %2 UnifiedSearchResultFetchMoreTrigger + Load more results Load more results @@ -5721,6 +7024,7 @@ Server replied with error: %2 UnifiedSearchResultItemSkeleton + Search result skeleton. Search result skeleton. @@ -5728,6 +7032,7 @@ Server replied with error: %2 UnifiedSearchResultListItem + Load more results Load more results @@ -5735,6 +7040,7 @@ Server replied with error: %2 UnifiedSearchResultNothingFound + No results for No results for @@ -5742,6 +7048,7 @@ Server replied with error: %2 UnifiedSearchResultSectionItem + Search results section %1 Search results section %1 @@ -5749,26 +7056,34 @@ Server replied with error: %2 UserLine + Account actions Account actions + + Log in Log in + + Log out Log out + Remove account Remove account + Set status Set status + Switch to account Switch to account @@ -5776,54 +7091,67 @@ Server replied with error: %2 UserStatusSelector + Appear offline Appear offline + Apply Apply + Away Away + Cancel Cancel + Clear Clear + Clear status message after Clear status message after + Do not disturb Do not disturb + Invisible Invisible + Mute all notifications Mute all notifications + Online Online + Online status Online status + Status message Status message + What is your status? What is your status? @@ -5831,30 +7159,37 @@ Server replied with error: %2 Utility + %1 %2 %1 %2 + %L1 B %L1 B + %L1 GB %L1 GB + %L1 KB %L1 KB + %L1 MB %L1 MB + %L1 TB %L1 TB + %n day(s) %n day @@ -5862,6 +7197,7 @@ Server replied with error: %2 + %n hour(s) %n hour @@ -5869,6 +7205,7 @@ Server replied with error: %2 + %n minute(s) %n minute @@ -5876,6 +7213,7 @@ Server replied with error: %2 + %n month(s) %n month @@ -5883,6 +7221,7 @@ Server replied with error: %2 + %n second(s) %n second @@ -5890,6 +7229,7 @@ Server replied with error: %2 + %n year(s) %n year @@ -5900,42 +7240,52 @@ Server replied with error: %2 utility + Always available locally Always available locally + Available online only Available online only + Could not open browser Could not open browser + Could not open email client Could not open email client + Currently available locally Currently available locally + Free up local space Free up local space + Make always available locally Make always available locally + Some available online only Some available online only + There was an error when launching the browser to go to URL %1. Maybe no default browser is configured? There was an error when launching the browser to go to URL %1. Maybe no default browser is configured? + There was an error when launching the email client to create a new message. Maybe no default email client is configured? There was an error when launching the email client to create a new message. Maybe no default email client is configured? @@ -5943,14 +7293,17 @@ Server replied with error: %2 ValidateChecksumHeader + The checksum header contained an unknown checksum type "%1" The checksum header contained an unknown checksum type "%1" + The checksum header is malformed. The checksum header is malformed. + The downloaded file does not match the checksum, it will be resumed. "%1" != "%2" The downloaded file does not match the checksum, it will be resumed. "%1" != "%2" diff --git a/translations/client_es.ts b/translations/client_es.ts index d3872dc6db0d0..fc7ddd631d1c8 100644 --- a/translations/client_es.ts +++ b/translations/client_es.ts @@ -1,56 +1,14 @@ - - - - Agree - Aceptar - - - Back - Volver - - - Necessary data - Datos necesarios - - - Required to ensure that the software can be used as expected - Necesario para garantizar que el software puede utilizarse según lo previsto - - - Save Settings - Guardar ajustes - - - Send anonymous use - Enviar uso anónimo - - - Settings - Ajustes - - - This application uses tracking technologies. By clicking on Agree, you accept the processing of your anonymized data. You can adjust your choices at any time via the settings. <br/> <br/>Information on data processing and more can be found in our <a href='https://wl.hidrive.com/easy/0005'>privacy policy</a>. - Esta aplicación utiliza tecnologías de seguimiento. Al hacer clic en Aceptar, usted acepta el tratamiento de sus datos anónimos. Puede ajustar sus opciones en cualquier momento a través de la configuración. <br/> <br/>Puede encontrar información sobre el procesamiento de datos y más en nuestra <a href='https://wl.hidrive.com/easy/0015'>política de privacidad</a>. - - - This helps us to optimize the software and to better identify system crashes and unexpected errors. - Esto nos ayuda a optimizar el software y a identificar mejor las caídas del sistema y los errores inesperados. - - - We collect anonymized data to optimize our app. We use software solutions from various partners for this purpose. We want to give you full transparency and freedom of choice regarding the collection and processing of your anonymized usage. You can change your settings at any time under the menu item Data Protection. - Recopilamos datos de carácter anónimo para la optimización de nuestra aplicación. -Para ello, utilizamos soluciones de software de distintos socios. Deseamos transmitirte total transparencia y libertad de decisión acerca de la recopilación y el tratamiento de tu uso anónimo. Puedes modificar tu configuración en la opción del menú «Protección de datos» en cualquier momento. - - ActivityItem + In %1 En %1 + Open %1 locally Abrir %1 localmente @@ -58,10 +16,12 @@ Para ello, utilizamos soluciones de software de distintos socios. Deseamos trans ActivityItemContent + Dismiss Descartar + Open file details Abrir detalles del archivo @@ -69,40 +29,40 @@ Para ello, utilizamos soluciones de software de distintos socios. Deseamos trans ActivityList + Activity list Lista de actividad + No activities yet Aún no hay actividades + Scroll to top Desplazarse hasta la parte superior - - BasicComboBox - - Clear status message menu - Borrar el menú de mensajes de estado - - CallNotificationDialog + Answer Talk call notification Aviso de llamada de Answer Talk + Decline Rechazar + Decline Talk call notification Rechazar la notificación de llamadas de Talk + Talk notification caller avatar Avatar de la notificación de llamada @@ -110,66 +70,83 @@ Para ello, utilizamos soluciones de software de distintos socios. Deseamos trans CloudProviderWrapper + %1 (%2, %3) %1 (%2, %3) + Checking for changes in "%1" Buscando cambios en "%1" + Help Ayuda + Log out Cerrar sesión + + No recently changed files No hay archivos modificados recientemente + Open website Abrir página web + Pause synchronization Pausar sincronización + Quit sync client Cerrar cliente de sincronización + Recently changed Cambiado recientemente + Settings Configuración + Sync paused Sincronización pausada + Syncing Sincronizando + Syncing %1 Sincronizando %1 + Syncing %1 (%2 left) Sincronizando %1 (quedan %2) + Syncing %1 of %2 Sincronizando %1 de %2 + Syncing %1 of %2 (%3 left) Sicronizando %1 de %2 (quedan %3) @@ -177,10 +154,12 @@ Para ello, utilizamos soluciones de software de distintos socios. Deseamos trans ConflictDelegate + Local version Versión local + Server version Versión del servidor @@ -188,46 +167,59 @@ Para ello, utilizamos soluciones de software de distintos socios. Deseamos trans CurrentAccountHeaderButton + Account switcher and settings menu Menú para cambio de cuentas y ajustes + Add account Añadir cuenta + Add new account Añadir cuenta nueva + Current account Cuenta actual + Current account avatar Avatar de la cuenta actual + Current account status is do not disturb El estado actual de la cuenta es no molestar + Current account status is online El estado actual de la cuenta es en línea + Exit Salir + + Pause sync for all Pausar sincronización para todos + + Resume sync for all Reanudar sincronización para todos + Settings Ajustes @@ -235,6 +227,7 @@ Para ello, utilizamos soluciones de software de distintos socios. Deseamos trans EditFileLocallyLoadingDialog + Opening file for local editing Abriendo archivo para editarlo en local @@ -242,6 +235,7 @@ Para ello, utilizamos soluciones de software de distintos socios. Deseamos trans EmojiPicker + No recent emojis No hay emojis recientes @@ -249,6 +243,7 @@ Para ello, utilizamos soluciones de software de distintos socios. Deseamos trans EncryptionTokenDiscoveryDialog + Discovering the certificates stored on your USB token Descubriendo los certificados almacenados en su token USB @@ -256,18 +251,22 @@ Para ello, utilizamos soluciones de software de distintos socios. Deseamos trans EncryptionTokenSelectionWindow + Available Keys for end-to-end Encryption: Llaves disponibles para cifrado de extremo a extremo: + Cancel Cancelar + Choose Seleccione + Token Encryption Key Chooser Seleccionador de Token para llave de cifrado @@ -275,6 +274,7 @@ Para ello, utilizamos soluciones de software de distintos socios. Deseamos trans ErrorBox + Error Error @@ -282,6 +282,7 @@ Para ello, utilizamos soluciones de software de distintos socios. Deseamos trans FileDetailsPage + Dismiss Descartar @@ -289,6 +290,7 @@ Para ello, utilizamos soluciones de software de distintos socios. Deseamos trans FileDetailsWindow + File details of %1 · %2 Detalles del archivo de %1 · %2 @@ -296,14 +298,17 @@ Para ello, utilizamos soluciones de software de distintos socios. Deseamos trans FileProviderEvictionDialog + Evict materialised files Quitar los archivos materializados + Materialised items Elementos materializados + Reload Recargar @@ -311,10 +316,12 @@ Para ello, utilizamos soluciones de software de distintos socios. Deseamos trans FileProviderFastEnumerationSettings + Enable fast sync Habilitar sincronización rápida + Fast sync will only sync changes in files and folders within folders that have been explored. This can significantly increase responsiveness on initial configuration of virtual files. However, it will cause redundant downloads of files moved to an unexplored folder. La sincronización rápida sólo sincronizará los cambios en archivos y carpetas dentro de las carpetas que se han explorado. Esto puede incrementar significativamente la capacidad de respuesta en la configuración inicial de archivos virtuales. Sin embargo, esto provocará descargas redundantes de archivos movidos a carpetas inexploradas. @@ -322,6 +329,7 @@ Para ello, utilizamos soluciones de software de distintos socios. Deseamos trans FileProviderFileDelegate + Delete Borrar @@ -329,18 +337,17 @@ Para ello, utilizamos soluciones de software de distintos socios. Deseamos trans FileProviderSettings + Enable virtual files Activar archivos virtuales + General settings Configuración general - Signal file provider domain - Dominio del proveedor de archivos de firmas - - + Virtual files settings Configuración de archivos virtuales @@ -348,18 +355,17 @@ Para ello, utilizamos soluciones de software de distintos socios. Deseamos trans FileProviderStorageInfo + %1 GB of %2 GB remote files synced %1 GB de %2 GB de archivos remotos sincronizados + Evict local copies … Quitar copias locales … - Evict local copies... - Desalojar las copias locales... - - + Local storage use Uso de almacenamiento local @@ -367,20 +373,24 @@ Para ello, utilizamos soluciones de software de distintos socios. Deseamos trans FileProviderSyncStatus + All synced! ¡Todo está sincronizado! + Request a sync of changes for the VFS environment. macOS may ignore or delay this request. Solicitar una sincronización de cambios para el ambiente VFS. macOS podría ignorar o demorar esta solicitud. + Request sync Solicitar sincronización + Syncing Sincronizando @@ -388,10 +398,12 @@ macOS podría ignorar o demorar esta solicitud. FileSystem + Could not remove folder "%1" No se ha podido eliminar la carpeta "%1" + Error removing "%1": %2 Error al eliminar "%1": %2 @@ -399,26 +411,32 @@ macOS podría ignorar o demorar esta solicitud. Flow2AuthWidget + An error occurred while connecting. Please try again. Se ha producido un error al conectarse. Por favor, inténtelo de nuevo. + Browser Authentication Autentificación del navegador + Copy Link + Logo Logo + Reopen Browser + Switch to your browser to connect your account Cambiar al navegador para conectar con tu cuenta @@ -426,10 +444,12 @@ macOS podría ignorar o demorar esta solicitud. FolderWizardSelectiveSync + Add Folder Sync Añadir sincronización de carpetas + Step 3 of 3: Selektive Synchronisation Paso 3 de 3: Sincronización selectiva @@ -437,18 +457,22 @@ macOS podría ignorar o demorar esta solicitud. FolderWizardSourcePage + &Choose &Elegir + Add Folder Sync Añadir sincronización de carpetas + Select a folder on your hard drive that should be permanetly connected to your %1. All files and subfolders are automatically uploaded and synchronized Selecciona una carpeta de tu disco duro que deba estar permanentemente conectada a tu %1. Todos los archivos y subcarpetas se cargan y sincronizan automáticamente. + Step 1 of 3: Select local folder Paso 1 de 3: Seleccionar carpeta local @@ -456,30 +480,37 @@ macOS podría ignorar o demorar esta solicitud. FolderWizardTargetPage + Add Folder Sync Añadir sincronización de carpetas + Both folders are permanently linked and the respective contents are automatically synchronized and updated. Ambas carpetas están permanentemente vinculadas y sus respectivos contenidos se sincronizan y actualizan automáticamente. + Create folder Crear carpeta + Folders Carpetas + Please now select or create a target folder in your %1 where the content should be uploaded and synchronized. Por favor, ahora seleccione o cree una carpeta de destino en su %1 donde el contenido debe ser cargado y sincronizado. + Refresh Actualizar + Step 2 of 3: Directory in your %1 Paso 2 de 3: Directorio en su %1 @@ -487,10 +518,12 @@ macOS podría ignorar o demorar esta solicitud. main.cpp + %1 requires on a working system tray. If you are running XFCE, please follow <a href="http://docs.xfce.org/xfce/xfce4-panel/systray">these instructions</a>. Otherwise, please install a system tray application such as "trayer" and try again. %1 requiere una bandeja del sistema de trabajo. Si estás ejecutando XFCE, por favor, siga <a href="http://docs.xfce.org/xfce/xfce4-panel/systray">estas instrucciones</a>. Por otro lado, instale una bandeja del sistema de aplicaciones como "trayer" e inténtelo de nuevo. + System Tray not available La bandeja del sistema no está disponible @@ -498,14 +531,17 @@ macOS podría ignorar o demorar esta solicitud. MainWindow + New activities Nuevas actividades + Nextcloud desktop main dialog Diálogo principal de Nextcloud para escritorio + Unified search results list Lista de resultados de la búsqueda unificada @@ -513,6 +549,7 @@ macOS podría ignorar o demorar esta solicitud. nextcloudTheme::aboutInfo() + <p><small>Built from Git revision <a href="%1">%2</a> on %3, %4 using Qt %5, %6</small></p> <p><small>Creado desde la revisión Git <a href="%1">%2</a> en %3, %4 utilizando Qt %5, %6</small></p> @@ -520,14 +557,17 @@ macOS podría ignorar o demorar esta solicitud. OCC::AbstractNetworkJob + Connection timed out Tiempo de conexión agotado + Server replied "%1 %2" to "%3 %4" El servidor respondió "%1 %2" a "%3 %4" + Unknown error: network reply was deleted Error desconocido: la respuesta de red fue eliminada @@ -535,14 +575,17 @@ macOS podría ignorar o demorar esta solicitud. OCC::Account + File %1 is already locked by %2. El archivo %1 ya está bloqueado por %2. + Lock operation on %1 failed with error %2 La operación de bloqueo en %1 ha fallado con el error %2. + Unlock operation on %1 failed with error %2 La operación de desbloqueo en %1 ha fallado con el error %2. @@ -550,30 +593,37 @@ macOS podría ignorar o demorar esta solicitud. OCC::AccountManager + %1 accounts were detected from a legacy desktop client. Should the accounts be imported? %1 cuentas se detectaron con un cliente de escritorio antiguo. ¿Deben estas cuentas ser importadas? + 1 account was detected from a legacy desktop client. Should the account be imported? 1 cuenta se detectó desde un cliente de escritorio antiguo. ¿Debe importarse esta cuenta? + Could not import accounts from legacy client configuration. No se pudieron importar las cuentas desde la configuración del cliente antiguo. + Import Importar + + Legacy import Importación legada + Skip Saltar @@ -581,304 +631,335 @@ Should the account be imported? OCC::AccountSettings + %1 (%3%) of %2 in use. Some folders, including network mounted or shared folders, might have different limits. %1 (%3%) de %2 en uso. Algunas carpetas, como carpetas de red o compartidas, podrían tener límites diferentes. + %1 as %2 %1 como %2 + %1 in use %1 en uso + %1 of %2 in use %1 de %2 en uso + (experimental) (experimental) + <p>Could not create local folder <i>%1</i>.</p> <p>No pudo crear la carpeta local <i>%1</i>.</p> + <p>Do you really want to stop syncing the folder <i>%1</i>?</p><p><b>Note:</b> This will <b>not</b> delete any files.</p> <p>¿De verdad quiere dejar de sincronizar la carpeta <i>%1</i>?</p><p><b>Nota:</b> Esto <b>no</b> elminará los archivo.</p> - Apply - Aplicar - - - Apply manual changes - Aplicar cambios manuales - - + + Availability Disponibilidad - Cancel - Cancelar - - + Choose what to sync Elija qué sincronizar + Confirm Folder Sync Connection Removal Confirme la sincronización para la eliminación de la carpeta conectada + Connected to %1. Conectado a %1. - Connected with <server> as <user> - Conectado a <server> como <user> - - + Connecting to %1 … Conectando a %1 ... - Connection settings - Configuración de conexión - - + Could not encrypt folder because the folder does not exist anymore No es posible cifrar la carpeta porque ya no existe + + Create new folder Crear nueva carpeta + Currently there is no storage usage information available. Actualmente no hay información disponible sobre el uso de almacenamiento. + Disable encryption Deshabilitar cifrado + Disable end-to-end encryption Deshabilitar cifrado de extremo a extremo + Disable end-to-end encryption for %1? ¿Deshabilitar cifrado de extremo a extremo para %1? + Disable support Desactivar soporte + Disable virtual file support … Desactivar soporte para archivos virtuales … + Disable virtual file support? ¿Desactivar soporte para archivos virtuales? + Display mnemonic Mostrar regla mnemotécnica + + Do not encrypt folder No cifrar carpeta + + Edit Ignored Files Editar archivos ignorados + Enable virtual file support %1 … Activar soporte para archivos virtuales %1 ... + Encrypt Cifrar + + Encrypt folder Cifrar carpeta + Encryption failed Ha fallado el cifrado + End-to-end Encryption Cifrado de extremo a extremo + End-to-end Encryption with Virtual Files Cifrado de extremo a extremo con Archivos Virtuales + End-to-end encryption has been enabled for this account El cifrado de extremo a extremo a sido habilitado para esta cuenta + End-to-end encryption has been enabled on this account with another device.<br>It can be enabled on this device by entering your mnemonic.<br>This will enable synchronisation of existing encrypted folders. El cifrado de extremo a extremo ha sido habilitado en esta cuenta con otro dispositivo.<br> puede ser habilitado en este dispositivo ingresando su mnemónico.<br> Esto habilitará la sincronización de las carpetas cifradas existentes + End-to-end encryption is not configured on this device. Once it is configured, you will be able to encrypt this folder. Would you like to set up end-to-end encryption? El cifrado de extremo a extremo no está configurado en este dispositivo. Una vez que esté configurado, podrá cifrar esta carpeta. ¿Desea configurar el cifrado de extremo a extremo? + End-to-end encryption mnemonic Mnemónico para cifrado de extremo a extremo - Expand Memory - Ampliar la memoria - - + Folder creation failed Ha fallado la creación de la carpeta + Force sync now Forzar la sincronización ahora + Migrate certificate to a new one Migrar certificado a uno nuevo + No %1 connection configured. No hay ninguna conexión de %1 configurada. + No account configured. No se ha configurado ninguna cuenta. + + Open folder Abrir carpeta + Pause sync Pausar sincronización + Please wait for the folder to sync before trying to encrypt it. Por favor, espere a que la carpeta se sincronice antes de intentar cifrarla. + Remove Folder Sync Connection Eliminar carpeta de sincronización conectada + Remove folder sync connection Eliminar la sincronización de carpetas conectadas + Removing end-to-end encryption will remove locally-synced files that are encrypted.<br>Encrypted files will remain on the server. Quitar el cifrado de extremo a extremo borrará los archivos sincronizados localmente que se encuentran cifrados.<br>Los archivos cifrados se mantendrán en el servidor. + Restart sync Reiniciar sync + Resume sync Continuar sincronización + Server %1 is currently being redirected, or your connection is behind a captive portal. El servidor %1 está siendo redirigido actualmente, ó, su conexión está detrás de un portal cautivo. + Server %1 is currently in maintenance mode. El servidor %1 se encuentra en modo mantenimiento. + Server %1 is temporarily unavailable. Servidor %1 no está disponible temporalmente. + Server configuration error: %1 at %2. Error de configuración del servidor: %1 en %2, + Set up encryption Configurar cifrado + Signed out from %1. Cerró sesión desde %1. - Standard file sync - Sincronización de archivos estándar - - + Storage space %1% occupied Espacio de almacenamiento %1% ocupado - Storage space: … - Espacio de almacenamiento: ... - - + Sync Running Sincronización en curso - Synchronize all - Sincronizar todo - - - Synchronize none - No sincronizar nada - - + The folder has a minor sync problem. Encryption of this folder will be possible once it has synced successfully La carpeta tiene un pequeño problema de sincronización. El cifrado de esta carpeta será posible cuando se haya sincronizado correctamente. + The folder has a sync error. Encryption of this folder will be possible once it has synced successfully La carpeta tiene un problema de sincronización. El cifrado de esta carpeta será posible cuando se haya sincronizado correctamente. + The server version %1 is unsupported! Proceed at your own risk. ¡La versión %1 del servidor no está soportada! Si continúas, lo haces bajo tu propio riesgo. + The syncing operation is running.<br/>Do you want to terminate it? La sincronización está en curso.<br/>¿Desea interrumpirla? + There are folders that have grown in size beyond %1MB: %2 Existen carpetas que han aumentado de tamaño más allá de %1MB: %2 + There are folders that were not synchronized because they are external storages: Hay carpetas que no se han sincronizado porque están en el almacenamiento externo: + There are folders that were not synchronized because they are too big or external storages: Hay carpetas que no se han sincronizado porque son demasiado grandes o están en el almacenamiento externo: + There are folders that were not synchronized because they are too big: Hay carpetas que no se han sincronizado porque son demasiado grandes: + This account supports end-to-end encryption Esta cuenta soporta cifrado punto a punto + This action will disable virtual file support. As a consequence contents of folders that are currently marked as "available online only" will be downloaded. The only advantage of disabling virtual file support is that the selective sync feature will become available again. @@ -891,61 +972,127 @@ La única ventaja de deshabilitar el soporte de archivos virtuales es para la ca Además, esta acción interrumpirá cualquier sincronización en curso. + This will encrypt your folder and all files within it. These files will no longer be accessible without your encryption mnemonic key. <b>This process is not reversible. Are you sure you want to proceed?</b> Esto cifrará su carpeta y todos los archivos contenidos en ella. Ya no se podrá acceder a estos archivos sin su clave de cifrado. <b>Este proceso no es reversible. ¿Seguro que quiere continuar?</b> + To protect your Cryptographic Identity, we encrypt it with a mnemonic of 12 dictionary words. Please note these down and keep them safe. They will be needed to add other devices to your account (like your mobile phone or laptop). Para proteger tu identidad criptográfica, la ciframos con una regla mnemotécnica de 12 palabras del diccionario. Por favor, anótalas y mantenlas a salvo. Estas palabras serán necesarias para añadir otros dispositivos a su cuenta (como un teléfono móvil o un portátil). + Unable to connect to %1. No es posible conectarse con %1. - Unchecked folders will be <b>removed</b> from your local file system and will not be synchronized to this computer anymore - Las carpetas no seleccionadas serán <b>eliminadas</b> de su carpeta local y ya no serán sincronizadas en este ordenador - - - Virtual file sync - Sincronización de archivos virtual - - + Warning Aviso + You cannot encrypt a folder with contents, please remove the files. Wait for the new sync, then encrypt it. No puede cifrar una carpeta con contenidos, por favor, elimine los archivos. Espere a una nueva sincronización, luego cifrala. + You need to accept the terms of service at %1. Debe aceptar los términos de servicio en %1. + You seem to have the Virtual Files feature enabled on this folder. At the moment, it is not possible to implicitly download virtual files that are end-to-end encrypted. To get the best experience with virtual files and end-to-end encryption, make sure the encrypted folder is marked with "Make always available locally". Parece que tiene la función de Archivos Virtuales activada en esta carpeta. Por el momento, no es posible descargar implícitamente los archivos virtuales que están cifrados de extremo a extremo. Para obtener la mejor experiencia con los archivos virtuales y el cifrado de extremo a extremo, asegúrese de que la carpeta cifrada está marcada con "Hacer que esté siempre disponible localmente". + https://wl.hidrive.com/easy/0057 https://wl.hidrive.com/easy/0087 - + + + Apply + Aplicar + + + + Apply manual changes + Aplicar cambios manuales + + + + + + Cancel + Cancelar + + + + Connected with <server> as <user> + Conectado a <server> como <user> + + + + Connection settings + Configuración de conexión + + + + Expand Memory + Ampliar la memoria + + + + Standard file sync + Sincronización de archivos estándar + + + + + Storage space: … + Espacio de almacenamiento: ... + + + + Synchronize all + Sincronizar todo + + + + Synchronize none + No sincronizar nada + + + + Unchecked folders will be <b>removed</b> from your local file system and will not be synchronized to this computer anymore + Las carpetas no seleccionadas serán <b>eliminadas</b> de su carpeta local y ya no serán sincronizadas en este ordenador + + + + Virtual file sync + Sincronización de archivos virtual + + OCC::AccountSetupFromCommandLineJob + Access forbidden by server. To verify that you have proper access, <a href="%1">click here</a> to access the service with your browser. Acceso denegado por el servidor. Para verificar que tiene acceso, <a href="%1">haga clic aquí</a> para acceder al servicio desde su navegador. + The authenticated request to the server was redirected to "%1". The URL is bad, the server is misconfigured. La petición autenticada al servidor ha sido redirigida a "%1". La URL es errónea, el servidor está mal configurado. + There was an invalid response to an authenticated WebDAV request Ha habido una respuesta no válida a una solicitud autenticada de WebDAV @@ -953,46 +1100,57 @@ Espere a una nueva sincronización, luego cifrala. OCC::AccountState + Asking Credentials Solicitando credenciales + Configuration error Error en la configuración + Connected Conectado + Disconnected Desconectado + Maintenance mode Modo mantenimiento + Need the user to accept the terms of service Necesita el usuario aceptar los términos de servicio + Network error Error en la red + Redirect detected Redirección detectada + Service unavailable Servicio no disponible + Signed out Cerrar sesión + Unknown account state Estado de cuenta desconocido @@ -1000,14 +1158,17 @@ Espere a una nueva sincronización, luego cifrala. OCC::ActivityListModel + Fetching activities … Actividades de búsqueda … + For more activities please open the Activity app. Para más detalles, por favor, abre la app Actividades. + Network error occurred: client will retry syncing. Ha ocurrido un error de red: el cliente reintentará la sincronización. @@ -1015,34 +1176,42 @@ Espere a una nueva sincronización, luego cifrala. OCC::AddCertificateDialog + + Certificate files (*.p12 *.pfx) + Archivos de certificado (*.p12 *.pfx) + + + + Select a certificate + Seleccione un certificado + + + An encrypted pkcs12 bundle is strongly recommended as a copy will be stored in the configuration file. Usar encriptación pkcs12 es muy recomendable, puesto que una copia se guardará en el archivo de configuración. + Browse … Explorar ... + Certificate & Key (pkcs12): Certificado & Key (pkcs12): - Certificate files (*.p12 *.pfx) - Archivos de certificado (*.p12 *.pfx) - - + Certificate password: Contraseña del certificado: + SSL client certificate authentication Certificado de autentificación SSL del cliente - Select a certificate - Seleccione un certificado - - + This server probably requires a SSL client certificate. Probablemente este servidor requiera un certificado SSL del cliente. @@ -1050,32 +1219,39 @@ Espere a una nueva sincronización, luego cifrala. OCC::Application + %1 accounts number of accounts imported %1 cuentas + %1 folders number of folders imported %1 carpetas + 1 account 1 cuenta + 1 folder 1 carpeta + Continue Continuar + Error accessing the configuration file Error al acceder al archivo de configuración + Imported %1 and %2 from a legacy desktop client. %3 number of accounts and folders imported. list of users. @@ -1083,35 +1259,43 @@ Espere a una nueva sincronización, luego cifrala. %3 + Legacy import Importación legada + Quit Salir + Some settings were configured in %1 versions of this client and use features that are not available in this version.<br><br>Continuing will mean <b>%2 these settings</b>.<br><br>The current configuration file was already backed up to <i>%3</i>. Algunos ajustes fueron configurados en %1 versiones de este cliente y utilizan características que no están disponibles en esta versión.<br><br>Continuar implica <b>%2 estos ajustes</b>.<br><br>El archivo de configuración actual ya se respaldó en <i>%3</i>. + There was an error while accessing the configuration file at %1. Please make sure the file can be accessed by your system account. Se ha producido un error al acceder al archivo de configuración en %1. Por favor, asegúrese de que su cuenta del sistema puede acceder al archivo. + deleting eliminando + ignoring ignorando + newer newer software version recientes + older older software version antiguos @@ -1120,18 +1304,22 @@ Espere a una nueva sincronización, luego cifrala. OCC::AuthenticationDialog + &Password: &Contraseña: + &Username: &Usuario: + Authentication Required Se requiere autenticación + Enter username and password for "%1" at %2. Introduce usuario y contraseña para "%1" en %2. @@ -1139,10 +1327,12 @@ Espere a una nueva sincronización, luego cifrala. OCC::BasePropagateRemoteDeleteEncrypted + "%1 Failed to unlock encrypted folder %2". "%1 Fallo al desbloquear la carpeta cifrada %2". + Wrong HTTP code returned by server. Expected 204, but received "%1 %2". El código HTTP devuelto por el servidor es erróneo. Se esperaba 204, pero se recibió "%1 %2". @@ -1150,46 +1340,58 @@ Espere a una nueva sincronización, luego cifrala. OCC::BulkPropagatorJob + Error updating metadata: %1 Error al actualizar los metadatos: %1 + File %1 cannot be uploaded because another file with the same name, differing only in case, exists El archivo %1 no se puede subir porque ya existe otro con el mismo nombre, solo difiere en las mayúsculas/minúsculas + File %1 has invalid modification time. Do not upload to the server. El archivo %1 tiene una hora de modificación no válida. No subir al servidor. + File %1 has invalid modified time. Do not upload to the server. El archivo %1 tiene una hora de modificación no válida. No subir al servidor. + File Removed (start upload) %1 Archivo eliminado (comenzar subida) %1 + + Local file changed during sync. Un archivo local ha cambiado durante la sincronización. + Local file changed during syncing. It will be resumed. Un archivo local ha cambiado durante la sincronización. Será subido. + Network error: %1 Error de red: %1 + Restoration failed: %1 Fallo al restaurar: %1 + The file %1 is currently in use El archivo %1 se encuentra en uso + The local file was removed during sync. El archivo local ha sido eliminado durante la sincronización. @@ -1197,30 +1399,37 @@ Espere a una nueva sincronización, luego cifrala. OCC::CaseClashConflictSolver + Cannot rename file because a file with the same name already exists on the server. Please pick another name. No se puede renombrar el archivo porque hay un archivo con el mismo nombre en el servidor. Por favor, elija otro nombre. + Could not rename file. Please make sure you are connected to the server. No se ha podido renombrar el archivo. Por favor, asegúrese de que está conectado al servidor. + Failed to fetch permissions with error %1 Fallo al obtener permisos con error %1 + Filename contains leading and trailing spaces. El nombre del archivo contiene espacios iniciales y finales. + Filename contains leading spaces. El nombre del archivo contiene espacios al inicio. + Filename contains trailing spaces. El nombre del archivo contiene espacios al final. + You don't have the permission to rename this file. Please ask the author of the file to rename it. No tiene permisos para renombrar este archivo. Por favor, solicite al autor del archivo que lo renombre. @@ -1228,86 +1437,111 @@ Espere a una nueva sincronización, luego cifrala. OCC::CaseClashFilenameDialog + %1 does not support equal file names with only letter casing differences. %1 no soporta nombres de archivo idénticos con diferencias de capitalización de letras. + + Filename contains illegal characters: %1 + El nombre del archivo contiene caracteres ilegales: %1 + + + + Filename contains leading and trailing spaces. + El nombre del archivo contiene espacios iniciales y finales. + + + + Filename contains leading spaces. + El nombre del archivo contiene espacios al inicio. + + + + Filename contains trailing spaces. + El nombre del archivo contiene espacios al final. + + + + Rename file + Renombrar archivo + + + + The file "%1" could not be synced because of a case clash conflict with an existing file on this system. + El archivo "%1" no pudo ser sincronizado porque genera un conflicto de capitalización con un archivo que ya existe en este sistema. + + + + Use invalid name + Usar nombre inválido + + + + 0 byte 0 bytes + Case Clash Conflict Conflicto de capitalización + Case clashing file Archivo con conflicto de capitalización + Error Error + Existing file Archivo existente - Filename contains illegal characters: %1 - El nombre del archivo contiene caracteres ilegales: %1 - - - Filename contains leading and trailing spaces. - El nombre del archivo contiene espacios iniciales y finales. - - - Filename contains leading spaces. - El nombre del archivo contiene espacios al inicio. - - - Filename contains trailing spaces. - El nombre del archivo contiene espacios al final. - - + New filename Nuevo nombre de archivo + + Open clashing file Abrir archivo con problema de capitalización + + Open existing file Abrir archivo existente + Please enter a new name for the clashing file: Por favor ingrese un nombre nuevo para el archivo con el problema de capitalización: - Rename file - Renombrar archivo - - - The file "%1" could not be synced because of a case clash conflict with an existing file on this system. - El archivo "%1" no pudo ser sincronizado porque genera un conflicto de capitalización con un archivo que ya existe en este sistema. - - + The file could not be synced because it generates a case clash conflict with an existing file on this system. El archivo no puede ser sincronizado porque genera un conflicto de capitalización con un archivo que ya existe en este sistema. - Use invalid name - Usar nombre inválido - - + file A archivo A + file B archivo B + + today hoy @@ -1315,6 +1549,7 @@ Espere a una nueva sincronización, luego cifrala. OCC::CleanupPollsJob + Error writing metadata to the database Error al escribir los metadatos en la base de datos @@ -1322,27 +1557,33 @@ Espere a una nueva sincronización, luego cifrala. OCC::ClientSideEncryption + Enter Certificate USB Token PIN: Ingrese el PIN del Token USB para certificados: + Enter E2E passphrase Introduce la frase de acceso E2E + Input PIN code Please keep it short and shorter than "Enter Certificate USB Token PIN:" Ingrese código PIN + Invalid PIN. Login failed PIN inválido, falló el inicio de sesión + Login to the token failed after providing the user PIN. It may be invalid or wrong. Please try again! El inicio de sesión al Token falló luego de proporcionar el PIN del usuario. Podría ser inválido o incorrecto. ¡Por favor, intente de nuevo! + Please enter your end-to-end encryption passphrase:<br><br>Username: %2<br>Account: %3<br> Por favor, introduzca su frase de cifrado de extremo a extremo:<br><br>Nombre de usuario: %2<br> Cuenta: %3<br> @@ -1350,66 +1591,87 @@ Espere a una nueva sincronización, luego cifrala. OCC::ConflictDialog - 0 byte - 0 byte - - - <a href="%1">Open local version</a> - <a href="%1">Abrir versión local</a> - - - <a href="%1">Open server version</a> - <a href="%1">Abrir versión en servidor</a> - - - Click to open the file - Clic para abrir el archivo - - - Conflicting versions of %1. - Versión conflictiva de %1. - - + Keep both versions Mantener ambas versiones + Keep local version Mantener versión local + + Keep selected version Mantener la versión seleccionada + Keep server version Mantener la versión del servidor - Local version - Versión local - - + Open local version Abrir la versión local + Open server version Abrir la versión en servidor + + + 0 byte + 0 byte + + + + <a href="%1">Open local version</a> + <a href="%1">Abrir versión local</a> + + + + <a href="%1">Open server version</a> + <a href="%1">Abrir versión en servidor</a> + + + + + Click to open the file + Clic para abrir el archivo + + + + + Conflicting versions of %1. + Versión conflictiva de %1. + + + + Local version + Versión local + + + Server version Versión del servidor + Sync Conflict Conflicto de sincronización + Which version of the file do you want to keep?<br/>If you select both versions, the local file will have a number added to its name. ¿Qué versión del archivo quiere mantener?<br/>Si selecciona ambas versiones, al archivo local se le añadirá un número a su nombre + + today hoy @@ -1417,22 +1679,29 @@ Espere a una nueva sincronización, luego cifrala. OCC::ConflictSolver + Confirm deletion Confirmar borrado + Do you want to delete the directory <i>%1</i> and all its contents permanently? ¿Quieres eliminar la carpeta <i>%1</i> y todo su contenido permanentemente? + Do you want to delete the file <i>%1</i> permanently? ¿Quieres eliminar el archivo <i>%1</i> permanentemente? + + Error Error + + Moving file failed: %1 @@ -1444,26 +1713,32 @@ Espere a una nueva sincronización, luego cifrala. OCC::ConnectionValidator + Authentication error: Either username or password are wrong. Error de autenticación: El usuario o la contraseña son incorrectos + No Nextcloud account configured La cuenta Nextcloud no está configurada + Please update to the latest server and restart the client. Por favor, actualice a la última versión del servidor y reinicie el cliente. + The configured server for this client is too old La configuración del servidor para este cliente es demasiado antigua + The provided credentials are not correct Las credenciales proporcionadas no son correctas + Timeout Tiempo de espera superado @@ -1471,65 +1746,79 @@ Espere a una nueva sincronización, luego cifrala. OCC::DataProtectionPage + + This application uses tracking technologies. By clicking on Agree, you accept the processing of your anonymized data. You can adjust your choices at any time via the settings. <br/> <br/>Information on data processing and more can be found in our <a href='https://wl.hidrive.com/easy/0005'>privacy policy</a>. + Esta aplicación utiliza tecnologías de seguimiento. Al hacer clic en Aceptar, usted acepta el tratamiento de sus datos anónimos. Puede ajustar sus opciones en cualquier momento a través de la configuración. <br/> <br/>Puede encontrar información sobre el procesamiento de datos y más en nuestra <a href='https://wl.hidrive.com/easy/0015'>política de privacidad</a>. + + + Agree Aceptar + Form Formulario + Settings - - This application uses tracking technologies. By clicking on Agree, you accept the processing of your anonymized data. You can adjust your choices at any time via the settings. <br/> <br/>Information on data processing and more can be found in our <a href='https://wl.hidrive.com/easy/0005'>privacy policy</a>. - Esta aplicación utiliza tecnologías de seguimiento. Al hacer clic en Aceptar, usted acepta el tratamiento de sus datos anónimos. Puede ajustar sus opciones en cualquier momento a través de la configuración. <br/> <br/>Puede encontrar información sobre el procesamiento de datos y más en nuestra <a href='https://wl.hidrive.com/easy/0015'>política de privacidad</a>. - - + OCC::DataProtectionSettingsPage + + We collect anonymized data to optimize our app. We use software solutions from various partners for this purpose. We want to give you full transparency and freedom of choice regarding the collection and processing of your anonymized usage. You can change your settings at any time under the menu item Data Protection. + Recopilamos datos de carácter anónimo para la optimización de nuestra aplicación. +Para ello, utilizamos soluciones de software de distintos socios. Deseamos transmitirte total transparencia y libertad de decisión acerca de la recopilación y el tratamiento de tu uso anónimo. Puedes modificar tu configuración en la opción del menú «Protección de datos» en cualquier momento. + + + Back Volver + Form Formulario + Necessary data Datos necesarios + Required to ensure that the software can be used as expected Necesario para garantizar que el software puede utilizarse según lo previsto + Save Settings Guardar ajustes + Send anonymous use Enviar uso anónimo + This helps us to optimize the software and to better identify system crashes and unexpected errors. Esto nos ayuda a optimizar el software y a identificar mejor las caídas del sistema y los errores inesperados. - - We collect anonymized data to optimize our app. We use software solutions from various partners for this purpose. We want to give you full transparency and freedom of choice regarding the collection and processing of your anonymized usage. You can change your settings at any time under the menu item Data Protection. - Recopilamos datos de carácter anónimo para la optimización de nuestra aplicación. -Para ello, utilizamos soluciones de software de distintos socios. Deseamos transmitirte total transparencia y libertad de decisión acerca de la recopilación y el tratamiento de tu uso anónimo. Puedes modificar tu configuración en la opción del menú «Protección de datos» en cualquier momento. - - + OCC::DiscoveryPhase + Error while canceling deletion of %1 Error al cancelar la eliminación de %1 + Error while canceling deletion of a file Error al cancelar la eliminación de un archivo @@ -1537,14 +1826,19 @@ Para ello, utilizamos soluciones de software de distintos socios. Deseamos trans OCC::DiscoverySingleDirectoryJob + + Encrypted metadata setup error! ¡Hubo un error al configurar los metadatos cifrados! + Encrypted metadata setup error: initial signature from server is empty. Error de configuración de metadatos encriptados: la firma inicial del servidor está vacía. + + Server error: PROPFIND reply is not XML formatted! Error del servidor: ¡la respuesta de PROPFIND no tiene formato XML! @@ -1552,22 +1846,27 @@ Para ello, utilizamos soluciones de software de distintos socios. Deseamos trans OCC::DiscoverySingleLocalDirectoryJob + Directory not accessible on client, permission denied Directorio no accesible en el cliente, permiso denegado + Directory not found: %1 Directorio no encontrado: %1 + Error while opening directory %1 Error al abrir el directorio %1 + Error while reading directory %1 Error al leer el directorio %1 + Filename encoding is not valid La codificación del nombre del archivo no es válida @@ -1575,62 +1874,93 @@ Para ello, utilizamos soluciones de software de distintos socios. Deseamos trans OCC::EditLocallyJob + + + An error occurred during data retrieval. Ocurrió un error mientras se recuperaban los datos. + + An error occurred during setup. Ocurrió un error mientras se hacía la configuración. + + An error occurred trying to synchronise the file to edit locally. Ocurrió un error mientras se intentaba sincronizar el archivo para edición local. + + + + Could not find a file for local editing. Make sure it is not excluded via selective sync. No fue posible encontrar un archivo para edición local. Asegúrese de que no está excluida a través de la sincronización selectiva. + + Could not find a file for local editing. Make sure its path is valid and it is synced locally. No fue posible encontrar un archivo para edición local. Asegúrese de que la ruta es válida y que esta se encuentra sincronizada localmente. + Could not find a remote file info for local editing. Make sure its path is valid. No fue posible encontrar la información del archivo remoto para edición local. Asegúrese de que la ruta es válida. + Could not open %1 No fue posible abrir %1 + + + + + + + + Could not start editing locally. No se pudo iniciar la edición local. + File %1 already locked. El archivo %1 ya está bloqueado. + File %1 could not be locked. El archivo %1 no pudo ser bloqueado. + File %1 now locked. El archivo %1 ahora está bloqueado. + Invalid local file path. Ruta al archivo local inválida. + + Lock will last for %1 minutes. You can also unlock this file manually once you are finished editing. El bloqueo se mantendrá por %1 minutos. Puede también desbloquear este archivo manualmente una vez que termine de editarlo. + Please try again. Por favor intente de nuevo. + Server error: PROPFIND reply is not XML formatted! Error del servidor: ¡la respuesta de PROPFIND no tiene formato XML! @@ -1638,10 +1968,12 @@ Para ello, utilizamos soluciones de software de distintos socios. Deseamos trans OCC::EditLocallyManager + Could not validate the request to open a file from server. No se pudo validar la solicitud para abrir un archivo desde el servidor. + Please try again. Por favor, inténtelo de nuevo. @@ -1649,26 +1981,34 @@ Para ello, utilizamos soluciones de software de distintos socios. Deseamos trans OCC::EditLocallyVerificationJob + An error occurred trying to verify the request to edit locally. Ha ocurrido un error intentando verificar la petición para editar localmente. + Could not find an account for local editing. No se ha podido encontrar una cuenta para edición local. + Could not start editing locally. No se ha podido comenzar la edición local. + Invalid file path was provided. Se ha proporcionado una ruta de archivo inválida. + Invalid token received. Se recibió un token inválido. + + + Please try again. Por favor, vuelve a intentarlo. @@ -1676,22 +2016,34 @@ Para ello, utilizamos soluciones de software de distintos socios. Deseamos trans OCC::EncryptedFolderMetadataHandler + Error fetching encrypted folder ID. Error al obtener el ID de la carpeta cifrada. + + + + + + Error fetching metadata. Error al obtener los metadatos. + + + Error locking folder. Error al bloquear la carpeta. + Error parsing or decrypting metadata. Error al analizar o descifrar los metadatos. + Failed to upload metadata Fallo al subir los metadatos @@ -1699,6 +2051,7 @@ Para ello, utilizamos soluciones de software de distintos socios. Deseamos trans OCC::EncryptFolderJob + Could not generate the metadata for encryption, Unlocking the folder. This can be an issue with your OpenSSL libraries. No se pueden generar los metadatos para el cifrado, desbloquea la carpeta. @@ -1708,6 +2061,7 @@ Esto podría ser un problema con tu librería OpenSSL OCC::FileDetails + %1 day(s) ago days elapsed since file last modified @@ -1716,6 +2070,7 @@ Esto podría ser un problema con tu librería OpenSSL + %1 hour(s) ago hours elapsed since file last modified @@ -1724,6 +2079,7 @@ Esto podría ser un problema con tu librería OpenSSL + %1 minute(s) ago minutes elapsed since file last modified @@ -1732,6 +2088,7 @@ Esto podría ser un problema con tu librería OpenSSL + %1 month(s) ago months elapsed since file last modified @@ -1740,6 +2097,7 @@ Esto podría ser un problema con tu librería OpenSSL + %1 second(s) ago seconds elapsed since file last modified @@ -1748,6 +2106,7 @@ Esto podría ser un problema con tu librería OpenSSL + %1 year(s) ago years elapsed since file last modified @@ -1756,6 +2115,7 @@ Esto podría ser un problema con tu librería OpenSSL + Locked by %1 - Expires in %2 minute(s) remaining time before lock expires @@ -1767,26 +2127,36 @@ Esto podría ser un problema con tu librería OpenSSL OCC::Flow2Auth + + Could not parse the JSON returned from the server: <br><em>%1</em> No se pudo procesar el código JSON recibido del servidor: <br><em>%1</em> + + Error returned from the server: <em>%1</em> Error devuelto por el servidor: <em>%1</em> + The polling URL does not start with HTTPS despite the login URL started with HTTPS. Login will not be possible because this might be a security issue. Please contact your administrator. La URL de la consulta no comienza con HTTPS a pesar de que la URL de inicio de sesión comenzó con HTTPS. El inicio de sesión no será posible porque esto podría ser un problema de seguridad. Por favor, póngase en contacto con su administrador. + + The reply from the server did not contain all expected fields La respuesta del servidor no contiene todos los campos esperados + The returned server URL does not start with HTTPS despite the login URL started with HTTPS. Login will not be possible because this might be a security issue. Please contact your administrator. La URL de consulta no comienza con HTTPS a pesar de que la URL de inicio de sesión comenzó con HTTPS. El inicio de sesión no será posible porque esto podría ser un problema de seguridad. Por favor, póngase en contacto con su administrador. + + There was an error accessing the "token" endpoint: <br><em>%1</em> Hubo un error accediendo al "token" endpoint: <br><em>%1</em> @@ -1794,38 +2164,48 @@ Esto podría ser un problema con tu librería OpenSSL OCC::Flow2AuthWidget + Copy Link Copiar Link + + Error Error + Link copied to clipboard. Enlace copiado al portapapeles. + Open Browser Abrir en el navegador + Polling for authorization Pidiendo autorización + Starting authorization Iniciando autorización + Switch to your browser to connect your account Cambiar al navegador para conectar con tu cuenta + Unable to open the Browser, please copy the link to your Browser. No se ha podido abrir el navegador, por favor copie el enlace en su navegador. + Waiting for authorization Esperando autorización @@ -1833,6 +2213,7 @@ Esto podría ser un problema con tu librería OpenSSL OCC::Folder + %1 and %n other file(s) are currently locked. %1 y otro %n archivo está actualmente bloqueado. @@ -1840,6 +2221,7 @@ Esto podría ser un problema con tu librería OpenSSL + %1 and %n other file(s) could not be synced due to errors. See the log for details. %1 y otro archivo no pudieron ser sincronizados debido a errores. Para más detalles vea el registro. @@ -1847,6 +2229,7 @@ Esto podría ser un problema con tu librería OpenSSL + %1 and %n other file(s) have been added. %1 y %n otro(s) archivo(s) ha(n) sido añadido(s). @@ -1854,6 +2237,7 @@ Esto podría ser un problema con tu librería OpenSSL + %1 and %n other file(s) have been removed. %1 y %n otro archivo han sido eliminados @@ -1861,6 +2245,7 @@ Esto podría ser un problema con tu librería OpenSSL + %1 and %n other file(s) have been updated. %1 y otro archivo han sido actualizados. @@ -1868,14 +2253,17 @@ Esto podría ser un problema con tu librería OpenSSL + %1 could not be synced due to an error. See the log for details. %1 no se ha podido sincronizar debido a un error. Para más detalles, vea el registro. + %1 has a sync conflict. Please check the conflict file! Conflicto al sincronizar %1. ¡Por favor compruebe el archivo! + %1 has and %n other file(s) have sync conflicts. %1 y otro archivo han tenido conflictos al sincronizar. @@ -1883,11 +2271,13 @@ Esto podría ser un problema con tu librería OpenSSL + %1 has been added. %1 names a file. %1 ha sido añadido. + %1 has been moved to %2 and %n other file(s) have been moved. %1 ha sido movido a %2 y otro archivo ha sido movido. @@ -1895,15 +2285,18 @@ Esto podría ser un problema con tu librería OpenSSL + %1 has been moved to %2. %1 ha sido movido a %2. + %1 has been removed. %1 names a file. %1 ha sido eliminado. + %1 has been renamed to %2 and %n other file(s) have been renamed. %1 ha sido renombrado a %2 y otro archivo ha sido renombrado. @@ -1911,30 +2304,36 @@ Esto podría ser un problema con tu librería OpenSSL + %1 has been renamed to %2. %1 and %2 name files. %1 ha sido renombrado a %2. + %1 has been updated. %1 names a file. %1 ha sido actualizado. + %1 is currently locked. %1 está actualmente bloqueado. + A folder from an external storage has been added. Una carpeta de almacenamiento externo ha sido añadida. + A folder has surpassed the set folder size limit of %1MB: %2. %3 Una carpeta ha sobrepasado el límite establecido de tamaño de %1MB: %2. %3 + A large number of files in the server have been deleted. Please confirm if you'd like to proceed with these deletions. Alternatively, you can restore all deleted files by uploading from '%1' folder to the server. @@ -1943,6 +2342,7 @@ Por favor, confirme si desea proceder con estos borrados. Alternativamente, puede restaurar todos los archivos borrados subiendo desde la carpeta '%1' al servidor. + A large number of files in your local '%1' folder have been deleted. Please confirm if you'd like to proceed with these deletions. Alternatively, you can restore all deleted files by downloading them from the server. @@ -1951,10 +2351,12 @@ Por favor, confirme si desea proceder con estos borrados. Alternativamente, puedes restaurar todos los archivos borrados descargándolos del servidor. + A new folder larger than %1 MB has been added: %2. Una carpeta mayor de %1 MB ha sido añadida: %2. + Changes in synchronized folders could not be tracked reliably. This means that the synchronization client might not upload local changes immediately and will instead only scan for local changes and upload them occasionally (every two hours by default). @@ -1967,70 +2369,87 @@ Esto significa que el cliente de sincronización podría no subir inmediatamente %1 + Could not read system exclude file No se ha podido leer el archivo de exclusión del sistema + Keep syncing Continuar sincronización + Please choose a different location. %1 isn't a readable folder. Por favor, escoja una ubicación diferente. La carpeta %1 no se puede leer. + Please choose a different location. %1 isn't a valid folder. Por favor, escoja una ubicación diferente. La carpeta %1 no es válida. + Please choose a different location. The folder %1 doesn't exist. Por favor, escoja una ubicación diferente. La carpeta %1 no existe. + Please go in the settings to select it if you wish to download it. Por favor vaya a opciones a seleccionarlo si desea descargar esto. + Proceed with Deletion Proceder a la supresión + Remove all files? ¿Eliminar todos los archivos? + Restore Files from Server Restaurar archivos del servidor + Restore Files to Server Restaurar archivos en el servidor + Stop syncing Detener sincronización + Sync Activity Actividad de la sincronización + The file %1 was created but was excluded from synchronization previously. It will not be synchronized. Se ha creado el archivo %1 pero se excluyó de la sincronización con anterioridad. No se sincronizará. + The folder %1 has surpassed the set folder size limit of %2MB. La carpeta %1 ha sobrepasado el límite establecido de tamaño de %2MB. + The folder %1 was created but was excluded from synchronization previously. Data inside it will not be synchronized. Se ha creado la carpeta %1 pero se excluyó de la sincronización con anterioridad. Los datos en su interior no se sincronizarán. + Virtual file download failed with code "%1", status "%2" and error message "%3" La descarga del archivo virtual ha fallado con código "%1" , estado "%2" y mensaje de error "%3" + Would you like to stop syncing this folder? ¿Desea detener la sincronización de esta carpeta? @@ -2038,26 +2457,32 @@ Esto significa que el cliente de sincronización podría no subir inmediatamente OCC::FolderCreationDialog + %1 Create new folder %1 Crear nueva carpeta + Could not create a folder! Check your write permissions. ¡No se pudo crear la carpeta! Comprueba los permisos de escritura. + + Error + Error + + + Create new folder Crear nueva carpeta + Enter folder name Escriba el nombre de la carpeta - Error - Error - - + Folder already exists Ya existe la carpeta @@ -2065,108 +2490,136 @@ Esto significa que el cliente de sincronización podría no subir inmediatamente OCC::FolderMan + %1 (Sync is paused) %1 (Sincronización en pausa) + (backup %1) (copia de seguridad %1) + (backup) (copia de seguridad) + An old sync journal "%1" was found, but could not be removed. Please make sure that no application is currently using it. Se ha encontrado un registro de sincronización antiguo "%1", que no se ha podido eliminar. Por favor, asegúrese de que ninguna aplicación lo está utilizando en este momento. + Could not reset folder state No se ha podido restablecer el estado de la carpeta + Last sync was successful. La última sincronización se ha realizado con éxito. + Please choose a different location. %1 is already being used as a sync folder for %2. folder location, server url Por favor, escoja una ubicación diferente. %1 ya se está utilizando como una carpeta de sincronización para %2. + + Please choose a different location. %1 is already being used as a sync folder. Por favor, escoja una ubicación diferente. %1 ya se está utilizando como una carpeta de sincronización. + Please choose a different location. %1 is already contained in a folder used as a sync folder. Por favor, escoja una ubicación diferente. %1 ya se está dentro de una carpeta que se está utilizando como carpeta de sincronización. + Please choose a different location. The path %1 doesn't exist. Por favor, escoja una ubicación diferente. La ruta %1 no existe. + Please choose a different location. The path %1 isn't a folder. Por favor, escoja una ubicación diferente. La ruta %1 no es una carpeta. + Please choose a different location. The selected folder isn't valid. Por favor, escoja una ubicación diferente. La carpeta seleccionada no es válida. + + Please choose a different location. You don't have enough permissions to write to %1. folder location Por favor, escoja una ubicación diferente. No tiene suficientes permisos para escribir a%1. + Preparing for sync. Preparándose para sincronizar. + Setup error. Error de configuración. + Sync finished with unresolved conflicts. La sincronización finalizó pero con conflictos sin resolver. + Sync is paused. La sincronización está en pausa. + Sync is running. Sincronización en funcionamiento. + Sync request was cancelled. La solicitud de sincronización fue cancelada. + Syncing %1 Sincronizando %1 + Syncing %1 (%2 left) Sincronizando %1 (Quedan %2) + Syncing %1 (A few seconds left) Sincronizando %1 (Quedan pocos segundos) + Syncing %1 of %2 Sincronizando %1 de %2 + Syncing %1 of %2 (%3 left) Sicronizando %1 de %2 (quedan %3) + Syncing %1 of %2 (A few seconds left) Sincronizando %1 de %2 (quedan unos segundos) + The folder %1 is linked to multiple accounts. This setup can cause data loss and it is no longer supported. To resolve this issue: please remove %1 from one of the accounts and create a new sync folder. @@ -2177,10 +2630,12 @@ Para resolver este problema: Por favor, quite %1 de alguna de las cuentas y cree Para usuarios avanzados: Este problema puede estar relacionado a múltiples archivos de base de datos de sincronización ubicados en una carpeta. Por favor, chequee en %1 la existencia de archivos .sync_*.db desactualizados o sin usar y elimínelos. + Undefined state. Estado no definido. + Waiting to start syncing. Esperando para comenzar la sincronización. @@ -2188,14 +2643,17 @@ Para usuarios avanzados: Este problema puede estar relacionado a múltiples arch OCC::FolderStatusDelegate + Add Folder Sync Añadir sincronización de carpetas + File Archivo + Synchronize any other local folder with your %1 Sincroniza cualquier otra carpeta local con tu %1 @@ -2203,113 +2661,141 @@ Para usuarios avanzados: Este problema puede estar relacionado a múltiples arch OCC::FolderStatusModel + %1 %2 Example text: "Uploading foobar.png" %1 %2 + %1 %2 (%3 of %4) Example text: "Uploading foobar.png (2MB of 2MB)" %1 %2 (%3 de %4) + %1 %2 … Example text: "Uploading foobar.png (1MB of 2MB) time left 2 minutes at a rate of 24Kb/s" Example text: "Syncing 'foo.txt', 'bar.txt'" %1 %2 … + + %1 (%2) %1 (%2) + %1 of %2, file %3 of %4 Example text: "12 MB of 345 MB, file 6 of 7" %1 de %2, archivo %3 de %4 + %5 left, %1 of %2, file %3 of %4 %5 restantes, %1 de %2, archivo %3 de %4 + + , , + A few seconds left, %1 of %2, file %3 of %4 Example text: "5 minutes left, 12 MB of 345 MB, file 6 of 7" Quedan pocos segundos, %1 de %2, archivo %3 de %4 + About to start syncing A punto de comenzar a sincronizar + Checking for changes in local "%1" Buscando cambios en carpeta local "%1" + Checking for changes in remote "%1" Buscando cambios en carpeta remota "%1" + Click this button to add a folder to synchronize. Haga clic en este botón para añadir una carpeta a sincronizar + Could not decrypt! ¡No fue posible descifrar! + Download %1/s Example text: "Download 24Kb/s" (%1 is replaced by 24Kb (translated)) Descargando %1/s + Error while loading the list of folders from the server. Error mientras se cargaba la lista de carpetas desde el servidor. + Fetching folder list from server … Obteniendo la lista de carpetas del servidor ... + File %1 of %2 Archivo %1 de %2 + Preparing to sync … Preparando la sincronización ... + Signed out Cerrar sesión + Synchronizing files in local folder Sincronizando archivos en carpeta local + Synchronizing virtual files in local folder Sincronizando archivos virtuales en carpeta local + Syncing local and remote changes Sincronizando cambios locales y remotos + There are unresolved conflicts. Click for details. Hay conflictos sin resolver. Haz clic para más detalles. + Upload %1/s Example text: "Upload 24Kb/s" (%1 is replaced by 24Kb (translated)) Subiendo %1/s + Virtual file support is enabled. El soporte para archivos virtuales está activado. + Waiting for %n other folder(s) … Esperando a otra %n carpeta ... @@ -2317,14 +2803,17 @@ Para usuarios avanzados: Este problema puede estar relacionado a múltiples arch + You need to be connected to add a folder Necesita estar conectado para añadir una carpeta + ↑ %1/s ↑ %1/s + ↓ %1/s ↓ %1/s @@ -2332,6 +2821,7 @@ Para usuarios avanzados: Este problema puede estar relacionado a múltiples arch OCC::FolderWatcher + The watcher did not receive a test notification. El vigilante no recibió una notificación de prueba. @@ -2339,6 +2829,7 @@ Para usuarios avanzados: Este problema puede estar relacionado a múltiples arch OCC::FolderWatcherPrivate + This problem usually happens when the inotify watches are exhausted. Check the FAQ for details. Este problema sucede habitualmente cuando las "inotify watches" están agotadas. Comprueba el FAQ para más detalles. @@ -2346,10 +2837,12 @@ Para usuarios avanzados: Este problema puede estar relacionado a múltiples arch OCC::FolderWizard + Add Folder Sync Connection Añadir conexión para el directorio de sincronización + Add Sync Connection Añadir conexión de sincronización @@ -2357,30 +2850,37 @@ Para usuarios avanzados: Este problema puede estar relacionado a múltiples arch OCC::FolderWizardLocalPath + Add Folder Sync Añadir sincronización de carpetas + Choose Seleccione + Click to select a local folder to sync. Haga clic para seleccionar una carpeta local que sincronizar. + Enter the path to the local folder. Introduzca la ubicación de la carpeta local. + Select a folder on your hard drive that should be permanetly connected to your %1. All files and subfolders are automatically uploaded and synchronized Selecciona una carpeta de tu disco duro que deba estar permanentemente conectada a tu %1. Todos los archivos y subcarpetas se cargan y sincronizan automáticamente. + Select the source folder Seleccione la carpeta de origen + Step 1 of 3: Select local folder Paso 1 de 3: Seleccionar carpeta local @@ -2388,58 +2888,74 @@ Para usuarios avanzados: Este problema puede estar relacionado a múltiples arch OCC::FolderWizardRemotePath + Add Folder Sync Añadir sincronización de carpetas + Authentication failed accessing %1 Fallo de autenticación al acceder a %1 + Both folders are permanently linked and the respective contents are automatically synchronized and updated. Ambas carpetas están permanentemente vinculadas y sus respectivos contenidos se sincronizan y actualizan automáticamente. + Choose this to sync the entire account Elija esto para sincronizar la cuenta entera + Create Remote Folder Crear carpeta remota + Create folder Crear carpeta + Enter the name of the new folder to be created below "%1": Introduce el nombre de la nueva carpeta que se creará debajo de "%1": + Failed to create the folder on %1. Please check manually. Fallo al crear la carpeta %1. Por favor, revíselo manualmente. + Failed to list a folder. Error: %1 Fallo al listar una carpeta. Error: %1 + Folder was successfully created on %1. La carpeta ha sido creada con éxito en %1. + + + Please choose a different location. %1 is already being synced to %2. Por favor, escoja una ubicación diferente. %1 ya se está sincronizando para %2. + Please now select or create a target folder in your %1 where the content should be uploaded and synchronized. Por favor, ahora seleccione o cree una carpeta de destino en su %1 donde el contenido debe ser cargado y sincronizado. + Refresh Actualizar + Step 2 of 3: Directory in your %1 Paso 2 de 3: Directorio en su %1 @@ -2447,26 +2963,36 @@ Para usuarios avanzados: Este problema puede estar relacionado a múltiples arch OCC::FolderWizardSelectiveSync + + + (experimental) (experimental) + Add Folder Sync Añadir sincronización de carpetas + Step 3 of 3: Selektive Synchronisation Paso 3 de 3: Sincronización selectiva + + + Use virtual files instead of downloading content immediately %1 Usa archivos virtuales en vez de descargar el contenido inmediatamente %1 + Virtual files are not supported at the selected location Los archivos virtuales no están soportados en la ubicación seleccionada + Virtual files are not supported for Windows partition roots as local folder. Please choose a valid subfolder under drive letter. Los archivos virtuales no son compatibles con la carpeta raíz de la partición de Windows como carpeta local. Por favor, elija una subcarpeta válida bajo la letra de la unidad. @@ -2474,22 +3000,7 @@ Para usuarios avanzados: Este problema puede estar relacionado a múltiples arch OCC::GeneralSettings - &Analysis data collection for needs-based design - &Recogida de datos de análisis para un diseño basado en las necesidades - - - &Automatically check for updates - Comprobar &actualizaciones automáticamente - - - &Launch on System Startup - &Ejecutar al iniciar el sistema - - - &Restart && Update - &Reiniciar && Actualizar - - + - beta: contains versions with new features that may not be tested thoroughly - daily: contains versions created daily only for testing and development @@ -2501,6 +3012,7 @@ Downgrading versions is not possible immediately: changing from beta to stable m Cambiar a una versión anterior no es inmediatamente posible: cambiar de beta a estable significa esperar a la siguiente version estable. + - enterprise: contains stable versions for customers. Downgrading versions is not possible immediately: changing from stable to enterprise means waiting for the new enterprise version. @@ -2510,200 +3022,266 @@ Downgrading versions is not possible immediately: changing from stable to enterp Cambiar a una versión anterior no es inmediatamente posible: cambiar de estable a empresarial significa esperar a la nueva versión empresarial. + + Cancel + Cancelar + + + + Change update channel + Cambiar canal de actualización + + + + Changing update channel? + ¿Cambiar canal de actualización? + + + + Debug Archive Created + Archivo de depuración creado + + + + Debug archive is created at %1 + El archivo de depuración se ha creado en %1 + + + + Server notifications that require attention. + Notificaciones del servidor que requieren atención. + + + + Show call notification dialogs. + Mostrar diálogos de notificación de llamadas. + + + + The channel determines which upgrades will be offered to install: +- stable: contains tested versions considered reliable + + starts list of available update channels, stable is always available + El canal determina qué actualizaciones se ofrecerán para instalar: +- estable: contiene versiones probadas consideradas fiables. + + + + + You cannot disable autostart because system-wide autostart is enabled. + No puedes desactivar el inicio automático porque el inicio automático de todo el sistema está activado. + + + + Zip Archives + Archivos Zip + + + + daily + diariamente + + + + enterprise + empresarial + + + + https://wl.hidrive.com/easy/0004 + https://wl.hidrive.com/easy/0014 + + + + https://wl.hidrive.com/easy/0005 + https://wl.hidrive.com/easy/0015 + + + + https://wl.hidrive.com/easy/0006 + https://wl.hidrive.com/easy/0006 + + + + https://wl.hidrive.com/easy/0007 + https://wl.hidrive.com/easy/0017 + + + + &Automatically check for updates + Comprobar &actualizaciones automáticamente + + + + &Launch on System Startup + &Ejecutar al iniciar el sistema + + + + &Restart && Update + &Reiniciar && Actualizar + + + Advanced Avanzado + Ask for confirmation before synchronizing external storages Pide confirmación antes de sincronizar almacenamientos externos + Ask for confirmation before synchronizing new folders larger than Pedir confirmación antes de sincronizar carpetas nuevas mayores a + Automatically disable synchronisation of folders that overcome limit Desactivar automáticamente la sincronización de carpetas que superen el límite - Cancel - Cancelar - - - Change update channel - Cambiar canal de actualización - - - Changing update channel? - ¿Cambiar canal de actualización? - - + Check Now Comprobar ahora + + Create Debug Archive Crear archivo de depuración + Data Protection Protección de datos - Debug Archive Created - Archivo de depuración creado - - - Debug archive is created at %1 - El archivo de depuración se ha creado en %1 - - + Desktop client x.x.x Cliente de escritorio x.x.x + Edit &Ignored Files Editar archivos &ignorados + For System Tray A la bandeja del sistema + General Settings Ajustes generales + Legal Notice Aviso Legal + MB Trailing part of "Ask confirmation before syncing folder larger than" MB + More Information Más información + Move removed files to trash Mover archivos eliminados a la papelera + Necessary data Datos necesarios + Notify when synchronised folders grow larger than specified limit Notificar cuando las carpetas sincronizadas aumenten su tamaño más allá del límite especificado + Open Source Software Software de código abierto + Privacy Policy Política de privacidad + Required to ensure that the software can be used as expected Necesario para garantizar que el software puede utilizarse según lo previsto + S&how crash reporter M&ostrar el informe de fallos + Send anonymous use Enviar uso anónimo - Server notifications that require attention. - Notificaciones del servidor que requieren atención. - - + Show Server &Notifications Mostrar &Notificaciones del Servidor - Show call notification dialogs. - Mostrar diálogos de notificación de llamadas. - - + Show call notifications + Show sync folders in &Explorer's navigation pane Mostrar carpetas de sincronización en el panel de navegación de &Explorer - The channel determines which upgrades will be offered to install: -- stable: contains tested versions considered reliable - - starts list of available update channels, stable is always available - El canal determina qué actualizaciones se ofrecerán para instalar: -- estable: contiene versiones probadas consideradas fiables. - - - + This helps us to optimize the software and to better identify system crashes and unexpected errors. Esto nos ayuda a optimizar el software y a identificar mejor las caídas del sistema y los errores inesperados. + Update channel Canal de actualización + Updates Actualizaciones + Usage Documentation Documentación de uso + Use &monochrome icons - You cannot disable autostart because system-wide autostart is enabled. - No puedes desactivar el inicio automático porque el inicio automático de todo el sistema está activado. - - - Zip Archives - Archivos Zip - - + + beta beta - daily - diariamente - - - enterprise - empresarial - - - https://wl.hidrive.com/easy/0004 - https://wl.hidrive.com/easy/0014 - - - https://wl.hidrive.com/easy/0005 - https://wl.hidrive.com/easy/0015 - - - https://wl.hidrive.com/easy/0006 - https://wl.hidrive.com/easy/0006 - - - https://wl.hidrive.com/easy/0007 - https://wl.hidrive.com/easy/0017 - - + + stable stable @@ -2711,22 +3289,27 @@ Cambiar a una versión anterior no es inmediatamente posible: cambiar de estable OCC::GETFileJob + Connection Timeout Tiempo de espera de conexión agotado + No E-Tag received from server, check Proxy/Gateway No se ha recibido ninguna E-Tag del servidor, revise el proxy/puerta de enlace + Server returned wrong content-range El servidor ha devuelto un content-range erróneo + We received a different E-Tag for resuming. Retrying next time. Se ha recibido una E-Tag distinta para reanudar. Se volverá a intentar. + We received an unexpected download Content-Length. Hemos recibido una longitud inesperada de contenido de la descarga. @@ -2734,6 +3317,7 @@ Cambiar a una versión anterior no es inmediatamente posible: cambiar de estable OCC::GetOrCreatePublicLinkShare + Could not retrieve or create the public link share. Error: %1 @@ -2742,14 +3326,17 @@ Cambiar a una versión anterior no es inmediatamente posible: cambiar de estable %1 + Password for share required Se requiere contraseña para compartir + Please enter a password for your link share: Por favor, introduce una contraseña para tu enlace compartido: + Sharing error Error al compartir @@ -2757,18 +3344,22 @@ Cambiar a una versión anterior no es inmediatamente posible: cambiar de estable OCC::HttpCredentialsGui + <a href="%1">Click here</a> to request an app password from the web interface. <a href="%1">Haga clic aquí</a> para solicitar una contraseña de aplicación desde la interfaz web. + Enter Password Introduzca la contraseña + Please enter %1 password:<br><br>Username: %2<br>Account: %3<br> Por favor, introduzca la contraseña de %1:<br><br>Usuario: %2<br>Cuenta: %3<br> + Reading from keychain failed with error: "%1" La lectura del keychain falló con el error "%1" @@ -2776,49 +3367,50 @@ Cambiar a una versión anterior no es inmediatamente posible: cambiar de estable OCC::IgnoreListEditor + + This entry is provided by the system at "%1" and cannot be modified in this view. + Esta entrada la proporciona el sistema en "%1" y no se puede modificar en esta vista. + + + Files Ignored by Patterns Archivos ignorados por patrones + Global Ignore Settings Ajustes de Ignorar de modo global + Ignored Files Editor Editor de archivos ignorados + Sync hidden files Sincronizar archivos ocultos - - This entry is provided by the system at "%1" and cannot be modified in this view. - Esta entrada la proporciona el sistema en "%1" y no se puede modificar en esta vista. - - + OCC::IgnoreListTableWidget - Add - Añadir - - + Add a new ignore pattern: Añadir un nuevo patrón de ignorar: - Allow Deletion - Permitir borrado - - + Cannot write changes to "%1". No se pudo escribir los cambios a "%1". + Could not open file No se ha podido abrir el archivo + Files or folders matching a pattern will not be synchronized. Items where deletion is allowed will be deleted if they prevent a directory from being removed. This is useful for meta data. @@ -2827,18 +3419,32 @@ Items where deletion is allowed will be deleted if they prevent a directory from Los objetos cuyo borrado esté permitido se eliminarán si impiden que se borre una carpeta. Esto es útil para los metadatos. + Ignore Pattern Ignorar patrón + + Add + Añadir + + + + Allow Deletion + Permitir borrado + + + Pattern Patrón + Remove Eliminar + Remove all Eliminar todos @@ -2846,117 +3452,146 @@ Los objetos cuyo borrado esté permitido se eliminarán si impiden que se borre OCC::InvalidFilenameDialog + Cannot rename file because a file with the same name does already exist on the server. Please pick another name. No se puede renombrar el archivo porque hay un archivo con el mismo nombre en el servidor. Por favor, elija otro nombre. + Checking rename permissions … Comprobando los permisos de para renombrado … + Could not rename file. Please make sure you are connected to the server. No se ha podido renombrar el archivo. Por favor, asegúrese de que está conectado al servidor. + Could not rename local file. %1 No se ha podido renombrar el archivo local. %1 - Error - Error - - + Failed to fetch permissions with error %1 Fallo en la obtención de permisos con error %1 + Filename contains illegal characters: %1 El nombre del archivo contiene caracteres ilegales: %1 + Filename contains leading and trailing spaces. El nombre del archivo contiene espacios iniciales y finales. + Filename contains leading spaces. El nombre del archivo contiene espacios iniciales. + Filename contains trailing spaces. El nombre del archivo contiene espacios finales. - Invalid filename - Nombre de archivo no válido - - - New filename - Nuevo nombre de archivo - - - Please enter a new name for the file: - Por favor, escribe un nuevo nombre para el archivo: - - + Rename file Renombrar archivo + The file "%1" could not be synced because the name contains characters which are not allowed on the server. No se ha podido sincronizar el archivo "%1" porque su nombre contiene caracteres que no están permitidos en el servidor. + The file "%1" could not be synced because the name contains characters which are not allowed on this system. El archivo "%1" no pudo ser sincronizado porque el nombre contiene caracteres no permitidos en este sistema. - The file could not be synced because it contains characters which are not allowed on this system. - El archivo no puede ser sincronizado porque contiene caracteres que no se permiten en el sistema. - - + The following basenames are not allowed: %1 Los siguientes nombres base no están permitidos: %1 + The following characters are not allowed on the system: \ / : ? * " < > | leading/trailing spaces Los siguientes caracteres no se permiten en el sistema: \ / : ? * " < > | espacios al inicio/final + The following characters are not allowed: %1 Los siguientes caracteres no están permitidos: %1 + The following file extensions are not allowed: %1 Las siguients extensiones de archivo no están permitidas: %1 + The following filenames are not allowed: %1 Los siguientes nombres de archivo no están permitidos: %1 + Use invalid name Utilizar nombre inválido + You don't have the permission to rename this file. Please ask the author of the file to rename it. No tienes permisos para renombrar este archivo. Por favor, dile al autor del archivo que lo renombre. - + + + Error + Error + + + + Invalid filename + Nombre de archivo no válido + + + + New filename + Nuevo nombre de archivo + + + + Please enter a new name for the file: + Por favor, escribe un nuevo nombre para el archivo: + + + + The file could not be synced because it contains characters which are not allowed on this system. + El archivo no puede ser sincronizado porque contiene caracteres que no se permiten en el sistema. + + OCC::LegalNotice + <p>Copyright 2017-2025 Nextcloud GmbH<br />Copyright 2012-2023 ownCloud GmbH</p> <p>Copyright 2017-2025 Nextcloud GmbH<br />Copyright 2012-2023 ownCloud GmbH</p> + <p>Licensed under the GNU General Public License (GPL) Version 2.0 or any later version.</p> <p>Bajo la Licencia Pública General de GNU (GPL) versión 2.0 o posterior.</p> + Close Cerrar + + Legal notice Aviso legal @@ -2964,18 +3599,22 @@ Los objetos cuyo borrado esté permitido se eliminarán si impiden que se borre OCC::LogBrowser + Enable logging to temporary folder Activar la escritura de registros a una carpeta temporal + Log Output Salida del registro + Open folder Abrir carpeta + The client can write debug logs to a temporary folder. These logs are very helpful for diagnosing problems. Since log files can get large, the client will start a new one for each sync run and compress older ones. It will also delete log files after a couple of hours to avoid consuming too much disk space. If enabled, logs will be written to %1 @@ -2984,6 +3623,7 @@ Ya que los archivos de registro pueden acabar siendo grandes, el cliente creará Si está activado, los registros serán escritos en %1 + This setting persists across client restarts. Note that using any logging command line options will override this setting. Este ajuste persiste tras el reinicio del cliente. @@ -2993,10 +3633,14 @@ Nótese que usar cualquier opción de toma de registros a través de línea de c OCC::Logger + + <nobr>File "%1"<br/>cannot be opened for writing.<br/><br/>The log output <b>cannot</b> be saved!</nobr> <nobr>El archivo "%1"<br/>no se puede abrir para escritura.<br/><br/>¡El archivo de registro <b>no se puede</b> guardar!</nobr> + + Error Error @@ -3004,26 +3648,32 @@ Nótese que usar cualquier opción de toma de registros a través de línea de c OCC::Mac::FileProviderEditLocallyJob + An error occurred during setup. Ha ocurrido un error durante la configuración. + Could not find a file for local editing. Make sure its path is valid and it is synced locally. No fue posible encontrar un archivo para edición local. Asegúrese de que su ruta es válida y que este se encuentra sincronizado localmente. + Could not get file ID. No se ha podido obtener la ID del archivo. + Could not get file identifier. No se pudo obtener el identificador del archivo. + Could not start editing locally. No se ha podido empezar a editar localmente. + The file identifier is empty. El identificador del archivo está vacío. @@ -3031,121 +3681,157 @@ Nótese que usar cualquier opción de toma de registros a través de línea de c OCC::NetworkSettings - Download Bandwidth - Velocidad de descarga - - + HTTP(S) proxy Proxy HTTP(S) - Host - Servidor - - + Hostname of proxy server Nombre del host para servidor proxy + + Password for proxy server + Contraseña para el servidor proxy + + + + SOCKS5 proxy + Proxy SOCKS5 + + + + Username for proxy server + Nombre de usuario para el servidor proxy + + + + Download Bandwidth + Velocidad de descarga + + + + Host + Servidor + + + + KBytes/s KBytes/s + + Limit automatically Limitar automáticamente + + Limit to Limitar a + + Limit to 3/4 of estimated bandwidth Limitar a 3/4 de la velocidad estimada + Manually specify proxy Especificar proxy manualmente + + No limit Ilimitado + No proxy Sin proxy + Note: proxy settings have no effects for accounts on localhost Nota: los ajustes de proxy no tienen efecto para cuentas en el sistema local. - Password for proxy server - Contraseña para el servidor proxy - - + Proxy Settings Configuración del proxy + Proxy server requires authentication El servidor proxy requiere autenticación - SOCKS5 proxy - Proxy SOCKS5 - - + Upload Bandwidth Velocidad de subida + + + Use global settings Usar la configuración global + Use system proxy Usar proxy del sistema - - Username for proxy server - Nombre de usuario para el servidor proxy - - + OCC::NSISUpdater + <p>A new version of the %1 Client is available but the updating process failed.</p><p><b>%2</b> has been downloaded. The installed version is %3. If you confirm restart and update, your computer may reboot to complete the installation.</p> <p>Una nueva versión del Cliente %1 está disponible pero el proceso de actualización ha fallado.</p><p><b>%2</b> se ha descargado. La versión instalada es %3. Si confirmas el reinicio y la actualización, es posible que su ordenador se reinicie para completar la instalación. + <p>A new version of the %1 Client is available.</p><p><b>%2</b> is available for download. The installed version is %3.</p> <p>Una nueva versión del programa cliente de %1 está disponible.</p><p><b>%2</b> está disponible para descargar. La versión instalada es la %3.</p> + Ask again later Preguntar de nuevo más tarde + Get update Actualizar + New Version Available Nueva versión disponible + Restart and update Reiniciar y actualizar + Skip this time Omitir esta vez + Update Failed La actualización falló + Update manually Actualizar manualmente @@ -3153,54 +3839,67 @@ Nótese que usar cualquier opción de toma de registros a través de línea de c OCC::OCUpdater + %1 available. Restart application to start the update. %1 disponible. Reinicia la aplicación para empezar la actualización. + A new update for %1 is about to be installed. The updater may ask for additional privileges during the process. Your computer may reboot to complete the installation. Está a punto de ser instalada una nueva actualización para %1 . Es posible que el actualizador solicite privilegios adicionales durante el proceso. Es posible que su ordenador se deba reiniciar para completar la instalación. + Checking update server … Consultando al servidor de actualizaciones ... + Could not check for new updates. No se puede comprobar si hay actualizaciones. + Could not download update. Please open %1 to download the update manually. No se pudo descargar la actualización. Por favor, abra %1 para descargarla manualmente. + Could not download update. Please open <a href='%1'>%1</a> to download the update manually. No se puede descargar la actualización. Por favor, abra <a href='%1'>%1</a> para descargar la actualización manualmente. + Downloading %1 … Descargando %1 … + New %1 is available. Please open %2 to download the update. La nueva %1 está disponible. Por favor, abra %2 para descargar la actualización. + New %1 is available. Please open <a href='%2'>%2</a> to download the update. La nueva %1 está disponible. Por favor, abra<a href='%2'>%2</a> para descargar la actualización. + New %1 update ready La nueva %1 actualización está lista + No updates available. Your installation is at the latest version. No hay actualizaciones disponibles. Tiene la última versión. + Update Check Comprobar si hay actualizaciones + Update status is unknown: Did not check for new updates. Estado de actualización desconocido: no se buscaron nuevas actualizaciones. @@ -3208,55 +3907,72 @@ Nótese que usar cualquier opción de toma de registros a través de línea de c OCC::OwncloudAdvancedSetupPage + %1 folder "%2" is synced to local folder "%3" %1 carpeta "%2" está sincronizada con la carpeta local "%3" + + %1 free space %1 gets replaced with the size and a matching unit. Example: 3 MB or 5 GB %1 espacio libre + + (%1) (%1) + + (experimental) (experimental) + Connect Conectar + In Finder's "Locations" sidebar section En la sección "Ubicaciones" de la barra lateral del Finder + Local Sync Folder Carpeta local de sincronización + Sync the folder "%1" Sincronizar la carpeta "%1" + There isn't enough free space in the local folder! ¡No hay suficiente espacio libre en la carpeta local! + + Use &virtual files instead of downloading content immediately %1 Usa &archivos virtuales en vez de descargar el contenido inmediatamente %1 + Virtual files are not supported at the selected location Los archivos virtuales no están soportados en la ubicación seleccionada + Virtual files are not supported for Windows partition roots as local folder. Please choose a valid subfolder under drive letter. Los archivos virtuales no son compatibles con la carpeta raíz de la partición de Windows como carpeta local. Por favor, elija una subcarpeta válida bajo la letra de la unidad. + Warning: The local folder is not empty. Pick a resolution! Advertencia: La carpeta local no está vacía. ¡Elija una solución! @@ -3264,26 +3980,32 @@ Nótese que usar cualquier opción de toma de registros a través de línea de c OCC::OwncloudConnectionMethodDialog + <html><head/><body><p>Failed to connect to the secure server address <em>%1</em>. How do you wish to proceed?</p></body></html> <html><head/><body><p>Fallo al conectar con la dirección del servidor seguro <em>%1</em>. ¿Cómo desea proceder?</p></body></html> + <html><head/><body><p>Failed to connect to the secure server address specified. How do you wish to proceed?</p></body></html> <html><head/><body><p>Fallo al conectar con la dirección del servidor seguro especificado. ¿Cómo desea proceder?</p></body></html> + Configure client-side TLS certificate Configurar certificado TLS del cliente + Connection failed La conexión ha fallado + Retry unencrypted over HTTP (insecure) Reintentar sin cifrado sobre HTTP (inseguro) + Select a different URL Seleccionar una URL diferente @@ -3291,71 +4013,88 @@ Nótese que usar cualquier opción de toma de registros a través de línea de c OCC::ownCloudGui + %1 (%2, %3) %1 (%2, %3) + %1: %2 Example text: "Nextcloud: Syncing 25MB (3 minutes left)" (%1 is the folder name to be synced, %2 a status message for that folder) %1:%2 + Account %1: %2 Cuenta %1: %2 + Account synchronization is disabled La sincronización está deshabilitada + Checking for changes in local "%1" Buscando cambios en carpeta local "%1" + Checking for changes in remote "%1" Buscando cambios en carpeta remota "%1" + Disconnected from %1 Desconectado de %1 + Disconnected from accounts: Desconectado desde cuentas: + Please sign in Por favor, inicie sesión + Terms of service Términos de servicio + The server on account %1 runs an unsupported version %2. Using this client with unsupported server versions is untested and potentially dangerous. Proceed at your own risk. El servidor en la cuenta %1 usa una versión no soportada %2. El uso de este cliente con versiones de servidor no soportadas no ha sido probado y es potencialmente peligroso. Continúa bajo tu propio riesgo. + There are no sync folders configured. No hay carpetas configuradas para sincronizar. + Unsupported Server Version Versión del servidor no soportada + Your account %1 requires you to accept the terms of service of your server. You will be redirected to %2 to acknowledge that you have read it and agrees with it. Su cuenta %1 requiere que acepte los términos de servicio de su servidor. Será redirigido a %2 para indicar que los ha leído y está de acuerdo. + macOS VFS for %1: A problem was encountered. macOS VFS para %1: Se ha encontrado un problema. + macOS VFS for %1: Last sync was successful. macOS VFS para %1: la última sincronización fue exitosa. + macOS VFS for %1: Sync is running. macOS VFS para %1: Sincronización en progreso. @@ -3363,14 +4102,17 @@ Nótese que usar cualquier opción de toma de registros a través de línea de c OCC::OwncloudHttpCredsPage + &Email &Correo electrónico + Connect to %1 Conectarse a %1 + Enter user credentials Introduzca las credenciales de usuario @@ -3378,6 +4120,8 @@ Nótese que usar cualquier opción de toma de registros a través de línea de c OCC::OwncloudPropagator + + Impossible to get modification time for file in conflict %1 Es imposible leer la hora de modificación del archivo en conflicto %1 @@ -3385,18 +4129,22 @@ Nótese que usar cualquier opción de toma de registros a través de línea de c OCC::OwncloudSetupPage + &Next > &Siguiente > + Could not load certificate. Maybe wrong password? No se ha podido guardar el certificado. ¿Quizás la contraseña sea incorrecta? + Server address does not seem to be valid La dirección del servidor no es válida + The link to your %1 web interface when you open it in the browser. %1 will be replaced with the application name El link a su interfaz web %1 cuando la abra en el navegador. @@ -3405,118 +4153,149 @@ Nótese que usar cualquier opción de toma de registros a través de línea de c OCC::OwncloudSetupWizard + <font color="green"><b>File Provider-based account %1 successfully created!</b></font> <font color="green"><b>¡La cuenta basada en proveedor de archivos %1 fue creada exitosamente! </b></font> + <font color="green"><b>Local sync folder %1 successfully created!</b></font> <font color="green"><b>Carpeta de sincronización local %1 creada con éxito</b></font> + <font color="green">Successfully connected to %1: %2 version %3 (%4)</font><br/><br/> <font color="green">Conectado con éxito a %1: versión %2 %3 (%4)</font><br/><br/> + <p><font color="red">Remote folder creation failed probably because the provided credentials are wrong.</font><br/>Please go back and check your credentials.</p> <p><font color="red">La creación de la carpeta remota ha fallado, probablemente porque las credenciales proporcionadas son incorrectas.</font><br/>Por favor, vuelva atrás y compruebe sus credenciales.</p> + A sync connection from %1 to remote directory %2 was set up. Se ha configarado una conexión de sincronización desde %1 al directorio remoto %2 + Access forbidden by server. To verify that you have proper access, <a href="%1">click here</a> to access the service with your browser. Acceso denegado por el servidor. Para verificar que tiene acceso, <a href="%1">haga clic aquí</a> para acceder al servicio desde el navegador. + Cannot remove and back up the folder because the folder or a file in it is open in another program. Please close the folder or file and hit retry or cancel the setup. No se pudo eliminar y restaurar la carpeta porque ella o un archivo dentro de ella está abierto por otro programa. Por favor, cierre la carpeta o el archivo y pulsa en reintentar o cancelar la instalación. + Connection to %1 could not be established. Please check again. No se ha podido establecer la conexión con %1. Por favor, compruébelo de nuevo. + Could not create local folder %1 No se ha podido crear la carpeta local %1 + Creating local sync folder %1 … Creando carpeta de sincronización local %1 ... + Error: %1 Error: %1 + Failed to connect to %1 at %2:<br/>%3 Fallo al conectar %1 a %2:<br/>%3 + Folder rename failed Error al renombrar la carpeta + Invalid URL URL no válida. + Local sync folder %1 already exists, setting it up for sync.<br/><br/> La carpeta de sincronización local %1 ya existe, configurándola para la sincronización.<br/><br/> + No remote folder specified! ¡No se ha especificado ninguna carpeta remota! + OK OK + Remote folder %1 created successfully. Carpeta remota %1 creado correctamente. + + Remote folder %1 creation failed with error <tt>%2</tt>. Creación %1 de carpeta remota ha fallado con el error <tt>%2</tt>. + Successfully connected to %1! ¡Conectado con éxito a %1! + The authenticated request to the server was redirected to "%1". The URL is bad, the server is misconfigured. La petición autenticada al servidor ha sido redirigida a "%1". La URL es errónea, el servidor está mal configurado. + + The folder creation resulted in HTTP error code %1 La creación de la carpeta ha producido el código de error HTTP %1 + The remote folder %1 already exists. Connecting it for syncing. La carpeta remota %1 ya existe. Conectándola para sincronizacion. + The remote folder creation failed because the provided credentials are wrong!<br/>Please go back and check your credentials.</p> ¡La creación de la carpeta remota ha fallado debido a que las credenciales proporcionadas son incorrectas!<br/>Por favor, vuelva atrás y compruebe sus credenciales</p> + There was an invalid response to an authenticated WebDAV request Ha habido una respuesta no válida a una solicitud autenticada de WebDAV + Timeout while trying to connect to %1 at %2. Tiempo de espera agotado mientras se intentaba conectar a %1 en %2 + Trying to connect to %1 at %2 … Intentando conectar a %1 desde %2 ... + creating folder on Nextcloud: %1 Creando carpeta en Nextcloud: %1 + failed. ha fallado. @@ -3524,30 +4303,37 @@ Nótese que usar cualquier opción de toma de registros a través de línea de c OCC::OwncloudWizard + Add %1 account Añadir %1 cuenta + Cancel Cancelar + Enable experimental feature? ¿Activar característica experimental? + Enable experimental placeholder mode Activar modo experimental de marcador de posición + Skip folders configuration Omitir la configuración de carpetas + Stay safe Mantente a salvo + When the "virtual files" mode is enabled no files will be downloaded initially. Instead, a tiny "%1" file will be created for each file that exists on the server. The contents can be downloaded by running these files or by using their context menu. The virtual files mode is mutually exclusive with selective sync. Currently unselected folders will be translated to online-only folders and your selective sync settings will be reset. @@ -3567,10 +4353,12 @@ Esta es un modo nuevo y experimental. Si decides usarlo, por favor, informa de c OCC::PasswordInputDialog + Password for share required Se requiere la contraseña para el recurso compartido + Please enter a password for your share: Por favor, introduce una contraseña para tu recurso compartido: @@ -3578,6 +4366,7 @@ Esta es un modo nuevo y experimental. Si decides usarlo, por favor, informa de c OCC::PollJob + Invalid JSON reply from the poll URL Respuesta JSON invalida de la poll URL @@ -3585,165 +4374,210 @@ Esta es un modo nuevo y experimental. Si decides usarlo, por favor, informa de c OCC::ProcessDirectoryJob + %1 name containing the character "%2" is not supported on this file system. folder or file impossible to sync due to an invalid name, placeholders will be file or folder and the invalid character El nombre %1 que contiene el carácter "%2" no está soportado en este sistema de archivos. + %1 name contains at least one invalid character El nombre %1 contiene al menos un carácter inválido + %1 name is a reserved name on this file system. El nombre %1 es un nombre reservado en este sistema de archivos. + + + + Cannot be renamed or uploaded. No puede ser renombrado o subido. + Cannot modify encrypted item because the selected certificate is not valid. No se puede modificar el item cifrado ya que el certificado seleccionado no es válido. + Cannot sync due to invalid modification time No se puede sincronizar debido a una hora de modificación no válida + Case Clash Conflict: Server file downloaded and renamed to avoid clash. Conflicto de capitalización: Se descargó el archivo del servidor y se renombró para evitar el conflicto. + Conflict: Server version downloaded, local copy renamed and not uploaded. Conflicto: Versión del servidor descargada, la copia local ha sido renombrada pero no se ha podido subir. + Could not upload file, because it is open in "%1". No es posible subir el archivo, porque está abierto en "%1". + Error while deleting file record %1 from the database Error mientras se borraba el registro de archivo %1 de la base de datos + Error while reading the database Error mientras se leía la base de datos + File name of folder entity to use when warning about invalid name Archivo + File has extension reserved for virtual files. El archivo tiene una extensión reservada para archivos virtuales. + File is listed on the ignore list. El archivo está en la lista de ignorados. + File names ending with a period are not supported on this file system. Los nombres de archivo que terminan con un punto no son compatibles con este sistema de archivos. + File/Folder is ignored because it's hidden. El archivo o carpeta es ignorado porque está oculto. + Filename contains leading and trailing spaces. El nombre del archivo contiene espacios iniciales y finales. + Filename contains leading spaces. El nombre del archivo contiene espacios iniciales. + Filename contains trailing spaces. El nombre del archivo contiene espacios finales. + Filename is too long. El nombre del archivo es demasiado largo. + Folder name of folder entity to use when warning about invalid name Carpeta + Ignored because of the "choose what to sync" blacklist Ignorado porque se encuentra en la lista negra de «elija qué va a sincronizar» + + Moved to invalid target, restoring Movido a un lugar no válido, restaurando + Not allowed because you don't have permission to add files in that folder No permitido porque no tienes permiso para añadir archivos a esa carpeta. + + Not allowed because you don't have permission to add subfolders to that folder No permitido porque no tienes permiso para añadir subcarpetas a esa carpeta. + Not allowed to remove, restoring No está permitido borrar, restaurando + Not allowed to upload this file because it is read-only on the server, restoring No está permitido subir este archivo porque es de solo lectura en el servidor, restaurando. + Reason: the entire filename is forbidden. Motivo: el nombre de archivo completo no está permitido. + Reason: the file has a forbidden extension (.%1). Motivo: el archivo tiene una extensión no permitida (.%1). + Reason: the filename contains a forbidden character (%1). Motivo: el nombre del archivo contiene un carácter no permitido (%1). + Reason: the filename has a forbidden base name (filename start). Motivo: el nombre de archivo tiene un nombre base (inicio del nombre del archivo) no permitido. + Server replied with an error while reading directory "%1" : %2 El servidor contestó con un error al leer el directorio "%1" : %2 + Server reported no %1 El servidor informó de no %1 + Stat failed. Stat ha fallado. + Symbolic links are not supported in syncing. Los enlaces simbólicos no están soportados en la sincronización. + The filename cannot be encoded on your file system. El nombre de archivo no se puede codificar en tu sistema de archivos. + The filename is blacklisted on the server. El nombre del archivo está prohibido en el servidor. + file id identificador de archivo + permission permisos + size tamaño @@ -3751,26 +4585,38 @@ Esta es un modo nuevo y experimental. Si decides usarlo, por favor, informa de c OCC::PropagateDirectory + Could not delete file %1 from local DB No se pudo eliminar el archivo %1 de la DB local + Error updating metadata due to invalid modification time Error al actualizar los metadatos debido a una hora de modificación no válida + Error updating metadata: %1 Error al actualizar los metadatos: %1 + File is currently in use El archivo se encuentra en uso + + + + + + The folder %1 cannot be made read-only: %2 La carpeta %1 no se puede hacer de sólo lectura: %2 + + unknown exception excepción inválida @@ -3778,58 +4624,75 @@ Esta es un modo nuevo y experimental. Si decides usarlo, por favor, informa de c OCC::PropagateDownloadFile + + Could not delete file record %1 from local DB No fue posible borrar el registro del archivo %1 de la base de datos local + Could not get file %1 from local DB No se pudo obtener el archivo %1 de la DB local + Error updating metadata: %1 Error al actualizar los metadatos: %1 + File %1 can not be downloaded because of a local file name clash! ¡El archivo %1 no se puede descargar a causa de un conflicto con el nombre de un archivo local! + File %1 cannot be downloaded because encryption information is missing. El archivo %1 no puede ser descargado porque falta la información de cifrado, + File %1 downloaded but it resulted in a local file name clash! ¡El archivo %1 se descargó pero resultó en un conflicto con el nombre de un archivo local! + + File %1 has invalid modified time reported by server. Do not save it. El servidor informa que el archivo %1 tiene una hora de modificación no válida. No lo guardes. + + File has changed since discovery El archivo ha cambiado desde que fue descubierto + File was deleted from server Se ha eliminado el archivo del servidor + Free space on disk is less than %1 El espacio libre en el disco es inferior a %1 + The download would reduce free local disk space below the limit La descarga reducirá el espacio libre local por debajo del límite. + The downloaded file is empty, but the server said it should have been %1. El archivo descargado está vacío, aunque el servidor dijo que debía ocupar %1. + The file %1 is currently in use El archivo %1 se encuentra en uso + The file could not be downloaded completely. No se ha podido descargar el archivo completamente. @@ -3837,10 +4700,12 @@ Esta es un modo nuevo y experimental. Si decides usarlo, por favor, informa de c OCC::PropagateItemJob + ; Restoration Failed: %1 ; Fallo al restaurar: %1 + A file or folder was removed from a read only share, but restoring failed: %1 Un archivo o directorio ha sido eliminado de una carpeta compartida de solo lectura pero la recuperación ha fallado: %1 @@ -3848,30 +4713,39 @@ Esta es un modo nuevo y experimental. Si decides usarlo, por favor, informa de c OCC::PropagateLocalMkdir + Could not create folder %1 No se pudo crear la carpeta %1 + Error updating metadata: %1 Error al actualizar los metadatos: %1 + Folder %1 cannot be created because of a local file or folder name clash! ¡La carpeta %1 no se pudo crear a causa de un conflicto con el nombre de un archivo o carpeta local! + The file %1 is currently in use El archivo %1 se encuentra en uso + + + The folder %1 cannot be made read-only: %2 La carpeta %1 no se puede hacer de sólo lectura: %2 + could not delete file %1, error: %2 no se ha podido borrar el archivo %1, error: %2 + unknown exception excepción inválida @@ -3879,14 +4753,19 @@ Esta es un modo nuevo y experimental. Si decides usarlo, por favor, informa de c OCC::PropagateLocalRemove + Could not delete file record %1 from local DB No fue posible borrar el registro del archivo %1 de la base de datos local + Could not remove %1 because of a local file name clash No se ha podido eliminar %1 por causa de un conflicto con el nombre de un archivo local + + + Temporary error when removing local item removed from server. Error temporal al quitar ítem local que fue eliminado del servidor. @@ -3894,38 +4773,49 @@ Esta es un modo nuevo y experimental. Si decides usarlo, por favor, informa de c OCC::PropagateLocalRename + Could not delete file record %1 from local DB No fue posible borrar el registro del archivo %1 de la base de datos local + + Could not get file %1 from local DB No se pudo obtener el archivo %1 de la DB local + + Error setting pin state Error al configurar el estado fijado + Error updating metadata: %1 Error al actualizar los metadatos: %1 + Failed to propagate directory rename in hierarchy Fallo al propagar el renombrado de carpeta en la jerarquía + Failed to rename file Fallo al renombrar el archivo + File %1 downloaded but it resulted in a local file name clash! ¡El archivo %1 se descargó pero resultó en un conflicto con el nombre de un archivo local! + Folder %1 cannot be renamed because of a local file or folder name clash! La carpeta %1 no puede renombrarse debido a un conflicto de nombres de archivos o carpetas locales. + The file %1 is currently in use El archivo %1 se encuentra en uso @@ -3933,10 +4823,12 @@ Esta es un modo nuevo y experimental. Si decides usarlo, por favor, informa de c OCC::PropagateRemoteDelete + Could not delete file record %1 from local DB No fue posible borrar el registro del archivo %1 de la base de datos local + Wrong HTTP code returned by server. Expected 204, but received "%1 %2". El código HTTP devuelto por el servidor es erróneo. Se esperaba 204, pero se recibió "%1 %2". @@ -3944,6 +4836,7 @@ Esta es un modo nuevo y experimental. Si decides usarlo, por favor, informa de c OCC::PropagateRemoteDeleteEncryptedRootFolder + Wrong HTTP code returned by server. Expected 204, but received "%1 %2". El código HTTP devuelto por el servidor es erróneo. Se esperaba 204, pero se recibió "%1 %2". @@ -3951,18 +4844,22 @@ Esta es un modo nuevo y experimental. Si decides usarlo, por favor, informa de c OCC::PropagateRemoteMkdir + Error writing metadata to the database: %1 Error al escribir los metadatos en la base de datos: %1 + Failed to encrypt a folder %1 Fallo al cifrar una carpeta %1 + The file %1 is currently in use El archivo %1 se encuentra en uso + Wrong HTTP code returned by server. Expected 201, but received "%1 %2". El código HTTP devuelto por el servidor es erróneo. Se esperaba 201, pero se recibió "%1 %2". @@ -3970,34 +4867,44 @@ Esta es un modo nuevo y experimental. Si decides usarlo, por favor, informa de c OCC::PropagateRemoteMove + Could not delete file record %1 from local DB No fue posible borrar el registro del archivo %1 de la base de datos local + Could not get file %1 from local DB No se pudo obtener el archivo %1 de la DB local + Could not rename %1 to %2, error: %3 No se puede renombrar %1 a %2, error: %3 + Error setting pin state Error al configurar el estado fijado + + Error updating metadata: %1 Error al actualizar los metadatos: %1 + Error writing metadata to the database Error al escribir los metadatos en la base de datos + + The file %1 is currently in use El archivo %1 se encuentra en uso + Wrong HTTP code returned by server. Expected 201, but received "%1 %2". El código HTTP devuelto por el servidor es erróneo. Esperado 201, pero recibido "%1 %2". @@ -4005,46 +4912,60 @@ Esta es un modo nuevo y experimental. Si decides usarlo, por favor, informa de c OCC::PropagateUploadFileCommon + Error updating metadata: %1 Error al actualizar los metadatos: %1 + Failed to unlock encrypted folder. Fallo al desbloquear la carpeta cifrada. + Failed to upload encrypted file. Fallo al subir el archivo cifrado. + File %1 cannot be uploaded because another file with the same name, differing only in case, exists El archivo %1 no se puede subir porque ya existe otro con el mismo nombre. Puede que sólo haya diferencias de mayúsculas/minúsculas + + + File %1 has invalid modification time. Do not upload to the server. El archivo %1 tiene una hora de modificación no válida. No subir al servidor. + File Removed (start upload) %1 Archivo eliminado (comenzar subida) %1 + Local file changed during sync. Un archivo local ha sido modificado durante la sincronización. + Local file changed during syncing. It will be resumed. Un archivo local ha cambiado durante la sincronización. Se reanudará. + The file %1 is currently in use El archivo %1 se encuentra en uso + Unable to upload an item with invalid characters No se puede subir un elemento con caracteres no válidos + + Upload of %1 exceeds the quota for the folder La subida %1 excede el límite de tamaño de la carpeta @@ -4052,26 +4973,32 @@ Esta es un modo nuevo y experimental. Si decides usarlo, por favor, informa de c OCC::PropagateUploadFileNG + Local file changed during sync. Un archivo local fue modificado durante la sincronización. + Missing ETag from server Perdido ETag del servidor + Missing File ID from server ID perdido del archivo del servidor + Poll URL missing Falta la URL de la encuesta + The local file was removed during sync. El archivo local ha sido eliminado durante la sincronización. + Unexpected return code from server (%1) Respuesta inesperada del servidor (%1) @@ -4079,18 +5006,22 @@ Esta es un modo nuevo y experimental. Si decides usarlo, por favor, informa de c OCC::PropagateUploadFileV1 + Local file changed during sync. Un archivo local ha sido modificado durante la sincronización. + Poll URL missing Falta la URL de la encuesta + The local file was removed during sync. El archivo local ha sido eliminado durante la sincronización. + The server did not acknowledge the last chunk. (No e-tag was present) El servidor no ha reconocido la última parte. (No había una e-tag presente) @@ -4098,22 +5029,27 @@ Esta es un modo nuevo y experimental. Si decides usarlo, por favor, informa de c OCC::ProxyAuthDialog + Password: Contraseña: + Proxy authentication required Autenticación de proxy necesaria + Proxy: Proxy: + The proxy server needs a username and password. El servidor de proxy necesita de un usuario y contraseña. + Username: Nombre de usuario: @@ -4121,6 +5057,7 @@ Esta es un modo nuevo y experimental. Si decides usarlo, por favor, informa de c OCC::SelectiveSyncDialog + Choose What to Sync Escoja qué sincronizar @@ -4128,26 +5065,33 @@ Esta es un modo nuevo y experimental. Si decides usarlo, por favor, informa de c OCC::SelectiveSyncWidget + An error occurred while loading the list of sub folders. Se ha producido un error al cargar la lista de carpetas. + Deselect remote folders you do not wish to synchronize. Deseleccione las carpetas remotas que no desea sincronizar. + Loading … Cargando ... + Name Nombre + + No subfolders currently on the server. No hay subcarpetas actualmente en el servidor. + Size Tamaño @@ -4155,6 +5099,7 @@ Esta es un modo nuevo y experimental. Si decides usarlo, por favor, informa de c OCC::ServerNotificationHandler + Reply Responder @@ -4162,14 +5107,17 @@ Esta es un modo nuevo y experimental. Si decides usarlo, por favor, informa de c OCC::sesSnackBar + Error Error + Success Éxito + Warning Aviso @@ -4177,27 +5125,33 @@ Esta es un modo nuevo y experimental. Si decides usarlo, por favor, informa de c OCC::SettingsDialog + %1 Settings This name refers to the application name e.g Nextcloud %1 Configuración + Account Cuenta + General General + Network Red + New account Nueva cuenta + Settings Ajustes @@ -4205,19 +5159,24 @@ Esta es un modo nuevo y experimental. Si decides usarlo, por favor, informa de c OCC::ShareeModel + %1 (%2) sharee (shareWithAdditionalInfo) %1 (%2) + Global search results Resultados de búsqueda global + No results found No se encontraron resultados + + Search globally Buscar globalmente @@ -4225,6 +5184,7 @@ Esta es un modo nuevo y experimental. Si decides usarlo, por favor, informa de c OCC::ShareManager + Error Error @@ -4232,38 +5192,47 @@ Esta es un modo nuevo y experimental. Si decides usarlo, por favor, informa de c OCC::ShareModel + %1 days %1 días + 1 day 1 día + Could not find local folder for %1 No se ha podido encontrar una carpeta local para %1 + Internal link Enlace interno + Link share Compartición de enlace + Secure file drop Entrega segura de archivos + Secure file drop link Enlace para entrega de archivos segura + Share link Compartir enlace + Today Hoy @@ -4271,22 +5240,28 @@ Esta es un modo nuevo y experimental. Si decides usarlo, por favor, informa de c OCC::SocketApi + + Activity Actividad + Context menu share Compartir en menú contextual + Copy internal link Copiar enlace interno + Copy private link to clipboard Copiar enlace privado al portapapeles + Could not encrypt the following folder: "%1". Server replied with error: %2 @@ -4295,18 +5270,22 @@ Server replied with error: %2 El servidor respondió con el error: %2 + Delete Eliminar + Delete local changes Borra cambios en local + Encrypt Cifrar + Expires in %1 minutes remaining time before lock expires @@ -4315,82 +5294,104 @@ El servidor respondió con el error: %2 + Failed to encrypt folder Fallo al cifrar la carpeta + Failed to encrypt folder at "%1" No se pudo cifrar carpeta en "%1" + Folder encrypted successfully Se cifró la carpeta exitosamente + I shared something with you He compartido algo contigo + Leave this share Abandonar este recurso compartido + Lock file Bloquear archivo + Locked by %1 Bloqueado por %1 + Move and rename … Mover y renombrar … + Move and upload … Mover y subir … + Move, rename and upload … Mover, renombrar y subir … + + Open in browser Abrir en navegador + Resharing this file is not allowed No está permitido compartir de nuevo + Resharing this folder is not allowed No está permitido compartir de nuevo esta carpeta + Resolve conflict … Resolver conflicto … + Select new location … Seleccione nueva ubicación … + Send private link by email … Enviar enlace privado por correo electrónico ... + + Share options Opciones de compartir + The account %1 does not have end-to-end encryption configured. Please configure this in your account settings to enable folder encryption. La cuenta %1 no tiene el cifrado de extremo a extremo configurado. Por favor configure esto en sus opciones de cuenta para habilitar el cifrado de carpetas. + The following folder was encrypted successfully: "%1" La siguiente carpeta se cifró con éxito: "%1" + Unlock file Desbloquear archivo @@ -4398,98 +5399,122 @@ El servidor respondió con el error: %2 OCC::SslButton + %1 %1 + %1 (self-signed) %1 (autofirmado) + <h3>Certificate Details</h3> <h3>Detalles del certificado</h3> + <h3>Fingerprints</h3> <h3>Firma</h3> + <h3>Issuer</h3> <h3>Emisor</h3> + <p><b>Note:</b> This certificate was manually approved</p> <p><b>Notificación:</b> Este certificado fue aprobado manualmente</p> + Certificate information: Información del certificado: + Common Name (CN): Nombre común (NC): + Country: País: + Expires on: Caduca el: + Issued on: Emitido en: + Issuer: Emisor: + No support for SSL session tickets/identifiers No admite tickets de sesión/identificadores SSL + Organization (O): Organización (O): + Organizational Unit (OU): Unidad organizativa (UO): + SHA-1: SHA-1: + SHA-256: SHA-256: + Serial: Nº de serie: + Server version: %1 Versión del servidor: %1 + State/Province: Estado/Provincia: + Subject Alternative Names: Nombres alternativos del sujeto: + The connection is not secure La conexión no es segura + This connection is NOT secure as it is not encrypted. Esta conexión NO ES SEGURA, pues no está cifrada. + This connection is encrypted using %1 bit %2. Esta conexión está cifrada con %1 bit %2. @@ -4497,122 +5522,156 @@ El servidor respondió con el error: %2 OCC::SslErrorDialog + + + &lt;not specified&gt; &lt;no especificado&gt; + Additional errors: Errores adicionales: + Cannot connect securely to <i>%1</i>: No puedo conectar de forma segura a <i>%1</i>: + + Country: %1 País: %1 + Effective Date: %1 Fecha de vigencia: %1 + Expiration Date: %1 Fecha de caducidad: %1 + Fingerprint (SHA-256): <tt>%1</tt> Huella digital (SHA-256):<tt>%1</tt> + Fingerprint (SHA-512): <tt>%1</tt> Huella digital (SHA-512): <tt>%1</tt> + Fingerprint (SHA1): <tt>%1</tt> Huella dactilar (SHA1): <tt>%1</tt> + Issuer: %1 Emisor: %1 + + Organization: %1 Organización: %1 - Trust this certificate anyway - Confiar en este certificado de todas maneras - - + + Unit: %1 Unidad: %1 + Untrusted Certificate Certificado sin verificar + with Certificate %1 con certificado %1 - + + + Trust this certificate anyway + Confiar en este certificado de todas maneras + + OCC::SyncEngine + %1 (skipped due to earlier error, trying again in %2) %1 (no realizado por el error anterior, intente de nuevo %2) + Cannot open the sync journal No es posible abrir el diario de sincronización + Could not set file record to local DB: %1 No fue posible establecer el registro del archivo a la base de datos local: %1 + Could not update file metadata: %1 No se pudo actualizar los metadatos del archivo: %1 + Could not update file: %1 No se pudo actualizar el archivo: %1 + Could not update virtual file metadata: %1 No se ha podido actualizar los metadatos del archivo virtual: %1 + Disk space is low: Downloads that would reduce free space below %1 were skipped. Poco espacio libre en disco: La descarga lo reducirá por debajo del %1, deberia abortar. + Only %1 are available, need at least %2 to start Placeholders are postfixed with file sizes using Utility::octetsToString() Solo %1 disponible, se necesita por lo menos %2 para comenzar + There is insufficient space available on the server for some uploads. No hay suficiente espacio libre en el servidor para algunas subidas. + Unable to open or create the local sync database. Make sure you have write access in the sync folder. Imposible abrir o crear la BBDD local de sync. Asegurese de que tiene permisos de escritura en la carpeta de sync. + Unable to read from the sync journal. No se ha podido leer desde el registro de sincronización + Unable to read the blacklist from the local database No se pudo leer la lista de bloqueo de la base de datos local + Unresolved conflict. Conflicto sin resolver. + Using virtual files with suffix, but suffix is not set Usando archivos virtuales con sufijo, pero el sufijo no está establecido @@ -4620,54 +5679,70 @@ El servidor respondió con el error: %2 OCC::SyncStatusSummary + %1 of %2 %1 de %2 + %1 of %2 · %3 left %1 de %2 · quedan %3 + + + All synced! ¡Todo está sincronizado! + Checking folder changes Comprobando cambios en la carpeta + + Offline No conectado + See below for errors Comprueba abajo los errores + See below for warnings Comprueba abajo los avisos + Some files could not be synced! ¡Algunos archivos no pueden ser sincronizados! + Some files couldn't be synced! ¡Algunos archivos no han podido ser sincronizados! + Sync paused Sincronización pausada + Syncing Sincronizando + Syncing changes Sincronizando cambios + Syncing file %1 of %2 Sincronizando archivo %1 de %2 @@ -4675,42 +5750,54 @@ El servidor respondió con el error: %2 OCC::Systray + Add account Agregar cuenta + Download Descargar + Exit %1 Salir %1 + Help Ayuda + Open main dialog Abrir diálogo principal + + Pause sync Pausar sincronización + Pause sync for all Pausar sincronización para todo + + Resume sync Continuar sincronización + Resume sync for all Continuar sincronización a todos + Settings Ajustes @@ -4718,22 +5805,27 @@ El servidor respondió con el error: %2 OCC::TermsOfServiceCheckWidget + Copy Link Copiar enlace + Link copied to clipboard. Enlace copiado al portapapeles + Open Browser Abrir Navegador + Polling Sondeando + Waiting for terms to be accepted Esperando a que los términos de servicio sean aceptados @@ -4741,19 +5833,23 @@ El servidor respondió con el error: %2 OCC::Theme + %1 Desktop Client Version %2 (%3) %1 is application name. %2 is the human version string. %3 is the operating system name. %1 Versión del Cliente de Escritorio %2 (%3) + <p><small>Using virtual files plugin: %1</small></p> <p><small>Usando el plugin de archivos virtuales: %1</small></p> + <p>This release was supplied by %1.</p> <p>Esta versión ha sido suministrada por %1.</p> + easy/0118 easy/0118 @@ -4761,18 +5857,22 @@ El servidor respondió con el error: %2 OCC::UnifiedSearchResultsListModel + Failed to fetch providers. Fallo al recuperar los proveedores. + Failed to fetch search providers for '%1'. Error: %2 Fallo al recuperar los proveedores de búsqueda para '%1'. Error: %2 + Search has failed for '%1'. Error: %2 La búsqueda ha fallado para '%1'. Error: %2 + Search has failed for '%2'. La búsqueda ha fallado para '%2'. @@ -4780,14 +5880,17 @@ El servidor respondió con el error: %2 OCC::UpdateE2eeFolderMetadataJob + Failed to finalize item. Fallo al finalizar ítem. + Failed to unlock encrypted folder. Fallo al desbloquear carpeta cifrada. + Failed to update folder metadata. Fallo al actualizar los metadatos de la carpeta. @@ -4795,33 +5898,43 @@ El servidor respondió con el error: %2 OCC::UpdateE2eeFolderUsersMetadataJob + Could not add or remove user %1 to access folder %2 No se ha podido añadir o eliminar el usuario %1 para acceder a la carpeta %2 + Could not fetch public key for user %1 No se pudo obtener la llave pública para el usuario %1 + Could not find root encrypted folder for folder %1 No se ha podido encontrar la carpeta cifrada para la carpeta %1 + + + + + + + + + Error updating metadata for a folder %1 Error al actualizar los metadatos de una carpeta %1 + Failed to unlock a folder. Fallo al desbloquear una carpeta. OCC::User - - %1 notifications - %1 notificaciones - + %n notification(s) %n notificación @@ -4829,30 +5942,38 @@ El servidor respondió con el error: %2 + End-to-end certificate needs to be migrated to a new one El certificado de extremo a extremo debe ser migrado a uno nuevo + Open Nextcloud Assistant in browser Abrir Nextcloud Assistant en el navegador + Open Nextcloud Talk in browser Abrir Nextcloud Talk en el navegador + Rename file Renombrar archivo + + Resolve conflict Resolver conflicto + Retry all uploads Reintentar todas las subidas + Trigger the migration Iniciar la migración @@ -4860,18 +5981,22 @@ El servidor respondió con el error: %2 OCC::UserModel + <p>Do you really want to remove the connection to the account <i>%1</i>?</p><p><b>Note:</b> This will <b>not</b> delete any files.</p> <p>¿De verdad quieres eliminar la conexión con la cuenta <i>%1</i>?</p><p><b>Aviso:</b> Esto <b>no eliminará</b> ningún archivo.</p> + Cancel Cancelar + Confirm Account Removal Confirma la eliminación de cuenta + Remove connection Eliminar vinculación @@ -4879,6 +6004,7 @@ El servidor respondió con el error: %2 OCC::UserStatusSelectorModel + %1 days %1 día @@ -4886,6 +6012,7 @@ El servidor respondió con el error: %2 + %1 hours %1 hora @@ -4893,6 +6020,7 @@ El servidor respondió con el error: %2 + %1 minutes %1 minuto @@ -4900,62 +6028,81 @@ El servidor respondió con el error: %2 + 1 day 1 día + + 1 hour 1 hora + 1 minute 1 minuto + 30 minutes 30 minutos + 4 hours 4 horas + Could not clear status message. Make sure you are connected to the server. No se ha podido borrar el mensaje de estado. Asegúrese de que está conectado al servidor. + Could not fetch predefined statuses. Make sure you are connected to the server. No se han podido recuperar los estados predefinidos. Asegúrese de que está conectado al servidor. + Could not fetch status. Make sure you are connected to the server. No se ha podido obtener el estado. Asegúrese de que está conectado al servidor. + Could not set status. Make sure you are connected to the server. No se ha podido establecer el estado. Asegúrese de que está conectado al servidor. + + Don't clear No borrar + Emojis are not supported. Some status functionality may not work. La característica de emojis no está soportada. Es posible que algunas características de estado del usuario no funcionen. + Less than a minute Hace menos de un minuto + Status feature is not supported. You will not be able to set your status. La característica de estado no está soportada. No podrá establecer su estado. + + This week Esta semana + + Today Hoy @@ -4963,14 +6110,17 @@ El servidor respondió con el error: %2 OCC::Vfs + Please choose a different location. %1 is a drive. It doesn't support virtual files. Por favor seleccione un ubicación diferente. %1 es una unidad. No soporta archivos virtuales. + Please choose a different location. %1 is a network drive. It doesn't support virtual files. Por favor seleccione un ubicación diferente. %1 es una unidad de red. No soporta archivos virtuales. + Please choose a different location. %1 isn't a NTFS file system. It doesn't support virtual files. Por favor seleccione un ubicación diferente. %1no es un sistema de archivos NTFS. No soporta archivos virtuales. @@ -4978,30 +6128,37 @@ El servidor respondió con el error: %2 OCC::VfsDownloadErrorDialog + %1 could not be downloaded. %1 no pudo ser descargado. + + Error downloading %1 + Error descargando %1 + + + > More details > Más detalles + Download error Error de descarga + Error downloading Error al descargar - Error downloading %1 - Error descargando %1 - - + More details Más detalles + could not be downloaded no pudo ser descargado @@ -5009,6 +6166,8 @@ El servidor respondió con el error: %2 OCC::VfsSuffix + + Error updating metadata due to invalid modification time Error al actualizar los metadatos debido a una fecha de modificación no válida. @@ -5016,6 +6175,8 @@ El servidor respondió con el error: %2 OCC::VfsXAttr + + Error updating metadata due to invalid modification time Error al actualizar los metadatos debido a una fecha de modificación no válida. @@ -5023,10 +6184,12 @@ El servidor respondió con el error: %2 OCC::WebEnginePage + Invalid certificate detected Certificado inválido detectado + The host "%1" provided an invalid certificate. Continue? El host "%1" ha entregado un certificado no válido. ¿Continuar? @@ -5034,6 +6197,7 @@ El servidor respondió con el error: %2 OCC::WebFlowCredentials + <b>You have been logged out of your account %1 at %2. Please login again.</b> <b>Se ha cerrado la sesión de su cuenta %1 en %2. Vuelva a iniciar sesión.</b> @@ -5041,22 +6205,27 @@ El servidor respondió con el error: %2 OCC::WelcomePage - Form - Formulario - - + Host your own server Aloja tu propio servidor + Keep your data secure and under your control Mantén tus datos seguros y bajo tu control + + Form + Formulario + + + Log in Iniciar sesión + Sign up with provider Iniciar sesión a través de un proveedor @@ -5064,55 +6233,68 @@ El servidor respondió con el error: %2 OwncloudAdvancedSetupPage + &Local Folder Carpeta &local + <html><head/><body><p>If this box is checked, existing content in the local folder will be erased to start a clean sync from the server.</p><p>Do not check this if the local content should be uploaded to the servers folder.</p></body></html> <html><head/><body><p>Si esta casilla está marcada, el contenido existente en la carpeta local se borrará para iniciar una sincronización limpia desde el servidor.</p><p>No marque esta casilla si el contenido local debe cargarse en la carpeta de los servidores.</p></body></html>. + Ask before syncing folders larger than Preguntar antes sincronizar carpetas mayores de + Choose different folder Elegir una carpeta diferente + Choose what to sync Elija qué sincronizar + Erase local folder and start a clean sync Borrar carpeta local e iniciar una sincronización limpia + Keep local data Mantener datos locales + Local Folder Carpeta Local + MB Trailing part of "Ask confirmation before syncing folder larger than" MB + Server address Nombre del servidor + Sync Logo Sync Logo + Synchronize everything from server Sincronizar todo desde el servidor + Username Nombre de usuario @@ -5120,10 +6302,12 @@ El servidor respondió con el error: %2 OwncloudHttpCredsPage + &Password &Contraseña + &Username &Nombre de usuario @@ -5131,14 +6315,18 @@ El servidor respondió con el error: %2 OwncloudSetupPage + Server address Nombre del servidor + + TextLabel TextLabel + This is the link to your %1 web interface when you open it in the browser. Este es el link a su interfaz web %1 cuando la abra en el navegador. @@ -5146,110 +6334,127 @@ El servidor respondió con el error: %2 progress + Deleted Eliminado + Deleting Eliminando + Downloaded Descargado + Downloading Descargando + + Error Error + Filesystem access error Error de acceso al sistema de archivos + Ignored Ignorado + Ignoring Ignorando + Moved to %1 Movido a %1 + Moving Moviendo + Replaced by virtual file Reemplazado por un archivo virtual + Server version downloaded, copied changed local file into case conflict conflict file Se descargó la versión del servidor, se copió el archivo local cambiado hacia archivo con conflictos de capitalización + Server version downloaded, copied changed local file into conflict file Versión del servidor descargada, se ha copiado el fichero local cambiado al fichero en conflicto + + Unknown Desconocido + Updated end-to-end encryption metadata Metadatos de cifrado de extremo a extremo actualizados + Updated local metadata Actualizados metadatos locales + Updated local virtual files metadata Actualizados los metadatos de los archivos virtuales locales + Updating end-to-end encryption metadata Actualizando metadatos de cifrado extremo a extremo + Updating local metadata Actualizando los metadatos locales + Updating local virtual files metadata Actualizando los metadatos de los archivos virtuales locales + Uploaded Subido + Uploading Subiendo + Virtual file created Archivo virtual creado - - updating local virtual files metadata - Actualización de los metadatos de los archivos virtuales locales - QObject - - %1: %2 - this displays an error string (%2) for a file %1 - %1: %2 - + %nd delay in days after an activity @@ -5258,6 +6463,7 @@ El servidor respondió con el error: %2 + %nh delay in hours after an activity @@ -5266,6 +6472,7 @@ El servidor respondió con el error: %2 + %nm delay in minutes after an activity @@ -5274,70 +6481,92 @@ El servidor respondió con el error: %2 + 1m one minute after activity date and time 1min - Could not create debug archive in selected location! - No se ha podido crear el archivo de depuración en la ubicación seleccionada. + + Some time ago + Hace tiempo - Error deleting the file - Error al eliminar el archivo + + in the future + en el futuro - Failed to create debug archive - Error al crear el archivo de depuración + + now + ahora + + + + The directory %1 cannot be part of your sync directory. Please choose another folder. + El directorio %1 no puede formar parte de su directorio de sincronización. Por favor, elija otra carpeta. + New folder Nueva carpeta - Paths beginning with '#' character are not supported in VFS mode. - Las rutas que comienzan con el carácter '#' no están soportadas en el modo VFS. + + Could not create debug archive in selected location! + No se ha podido crear el archivo de depuración en la ubicación seleccionada. - Some time ago - Hace tiempo + + Failed to create debug archive + Error al crear el archivo de depuración + Synced %1 Sincronizado %1 - The directory %1 cannot be part of your sync directory. Please choose another folder. - El directorio %1 no puede formar parte de su directorio de sincronización. Por favor, elija otra carpeta. - - + You changed %1 Ha cambiado %1 + You created %1 Ha creado %1 + You deleted %1 Ha eliminado %1 + You renamed %1 Ha renombrado %1 - in the future - en el futuro + + Error deleting the file + Error al eliminar el archivo - now - ahora + + %1: %2 + this displays an error string (%2) for a file %1 + %1: %2 - + + + Paths beginning with '#' character are not supported in VFS mode. + Las rutas que comienzan con el carácter '#' no están soportadas en el modo VFS. + + ResolveConflictsDialog + %1 files in conflict indicate the number of conflicts to resolve @@ -5346,26 +6575,32 @@ El servidor respondió con el error: %2 + All local versions Todas las versiones locales + All server versions Todas las versiones del servidor + Cancel Cancelar + Choose if you want to keep the local version, server version, or both. If you choose both, the local file will have a number added to its name. Decida si quiere mantener la versión local, la versión del servidor, o ambas. Si escoge ambas, se le añadirá un número al nombre del archivo local. + Resolve conflicts Resolver conflictos + Solve sync conflicts Resolver conflictos de sincronización @@ -5373,6 +6608,7 @@ El servidor respondió con el error: %2 SesErrorBox + Error Error @@ -5380,14 +6616,17 @@ El servidor respondió con el error: %2 SesTrayHeader + Open Nextcloud in browser Abrir HiDrive Next en el navegador + Open local or group folders Abrir carpetas locales o de grupo + Website Sitio web @@ -5395,18 +6634,22 @@ El servidor respondió con el error: %2 ShareDelegate + Copied! ¡Copiado! + Copy share link location + Create a new share link + Share options Opciones de compartir @@ -5414,62 +6657,78 @@ El servidor respondió con el error: %2 ShareDetailsPage + Add another link Añadir otro enlace + Allow resharing Permitir que otros compartan + + Allow upload and editing Permitir la subida y edición + An error occurred setting the share password. Ocurrió un error al establecer la contraseña del recurso compartido + Copy share link Copiar enlace de recurso compartido + Custom Permissions Permisos personalizados + Enter the note to recipient Introducir la nota al destinatario + File drop (upload only) Entrega de archivos (solo carga) + Hide download Ocultar descarga + Note to recipient Nota para el destinatario + Password protection Protección por contraseña + Set expiration date Fijar fecha de caducidad + Share link copied! ¡Enlace compartido copiado! + Unshare Dejar de compartir + View only Solo lectura @@ -5477,10 +6736,12 @@ El servidor respondió con el error: %2 ShareeSearchField + Search for users or groups… Buscar usuarios o grupos… + Sharing is not available for this folder Compartir no está disponible para esta carpeta @@ -5488,30 +6749,37 @@ El servidor respondió con el error: %2 ShareView + Expires in %1 Caduca en %1 + Password required for new share Se requiere una contraseña para el nuevo recurso compartido + Share password Contraseña del recurso compartido + Shared with you by %1 Compartido con Ud. por %1 + Sharing is disabled Compartir está deshabilitado + Sharing is disabled. Compartir está deshabilitado. + This item cannot be shared. Este ítem no puede ser compartido. @@ -5519,6 +6787,7 @@ El servidor respondió con el error: %2 SyncJournalDb + Failed to connect database. Fallo en la conexión a la base de datos. @@ -5526,14 +6795,17 @@ El servidor respondió con el error: %2 SyncStatus + Open browser Abrir navegador + Resolve conflicts Resolver conflictos + Sync now Sincronizar ahora @@ -5541,10 +6813,12 @@ El servidor respondió con el error: %2 TalkReplyTextField + Reply to … Responder a … + Send reply to chat message Enviar respuesta al mensaje de chat @@ -5552,14 +6826,17 @@ El servidor respondió con el error: %2 TermsOfServiceCheckWidget + Logo Logotipo + Switch to your browser to accept the terms of service Cambie al navegador para aceptar los términos de servicio + Terms of Service Términos de Servicio @@ -5567,92 +6844,105 @@ El servidor respondió con el error: %2 theme + Error occurred during setup Ha ocurrido un error durante la configuración + Error occurred during sync Ha ocurrido un error durante la sincronización + Preparing to sync Preparando para sincronizar + Stopping sync Deteniendo la sincronización + Sync is paused La sincronización está en pausa. + Sync is running Sincronizado en proceso + Sync status is unknown Estado de sincronización desconocido + Sync was successful La sincronización fue exitosa + Sync was successful but some files were ignored La sincronización fue exitosa, pero se han ignorado algunos archivos + Waiting to start syncing Esperando para empezar la sincronización - - TrayFoldersMenuButton - - Files - Archivos - - TrayWindowAccountMenu + Account switcher and settings menu Menú para cambio de cuentas y ajustes + Add account + Current account Cuenta actual + Current account avatar Avatar de la cuenta actual + Current account status is do not disturb El estado actual de la cuenta es no molestar + Current account status is online El estado actual de la cuenta es en línea + Exit Salir + Pause sync for all + Resume sync for all + Settings @@ -5660,14 +6950,17 @@ El servidor respondió con el error: %2 TrayWindowHeader + More apps Más apps + Open %1 in browser Abrir %1 en el navegador + Open local or group folders Abrir carpetas locales o de grupo @@ -5675,26 +6968,32 @@ El servidor respondió con el error: %2 TrayWindowHeaderBar + More apps Más apps + Open %1 in browser Abrir %1 en el navegador + Open Nextcloud Talk in browser Abrir Nextcloud Talk en el navegador + Open Nextcloud in browser Abrir HiDrive Next en el navegador + Open local or group folders Abrir carpetas locales o de grupo + Website Sitio web @@ -5702,6 +7001,7 @@ El servidor respondió con el error: %2 UnifiedSearchInputContainer + Search files, messages, events … Buscando archivos, mensajes, eventos … @@ -5709,6 +7009,7 @@ El servidor respondió con el error: %2 UnifiedSearchPlaceholderView + Start typing to search Comience a escribir para buscar @@ -5716,6 +7017,7 @@ El servidor respondió con el error: %2 UnifiedSearchResultFetchMoreTrigger + Load more results Cargar más resultados @@ -5723,6 +7025,7 @@ El servidor respondió con el error: %2 UnifiedSearchResultItemSkeleton + Search result skeleton. Árbol de resultados de la búsqueda @@ -5730,6 +7033,7 @@ El servidor respondió con el error: %2 UnifiedSearchResultListItem + Load more results Cargar más resultados @@ -5737,6 +7041,7 @@ El servidor respondió con el error: %2 UnifiedSearchResultNothingFound + No results for No se encontraron resultados para @@ -5744,6 +7049,7 @@ El servidor respondió con el error: %2 UnifiedSearchResultSectionItem + Search results section %1 Sección de resultados de búsqueda %1 @@ -5751,26 +7057,34 @@ El servidor respondió con el error: %2 UserLine + Account actions Acciones de la cuenta + + Log in Iniciar sesión + + Log out Cerrar sesión + Remove account Eliminar cuenta + Set status Establecer estado + Switch to account Cambiar a la cuenta @@ -5778,54 +7092,67 @@ El servidor respondió con el error: %2 UserStatusSelector + Appear offline Mostrar como fuera de línea + Apply Aplicar + Away Ausente + Cancel Cancelar + Clear Limpiar + Clear status message after Borrar el mensaje de estado después de + Do not disturb No molestar + Invisible Invisible + Mute all notifications Silenciar todas las notificaciones + Online En línea + Online status Estado en línea + Status message Mensaje de estado + What is your status? ¿Cuál es su estado? @@ -5833,30 +7160,37 @@ El servidor respondió con el error: %2 Utility + %1 %2 %1 %2 + %L1 B %L1 B + %L1 GB %L1 GB + %L1 KB %L1 KB + %L1 MB %L1 MB + %L1 TB %L1 TB + %n day(s) %n dia @@ -5864,6 +7198,7 @@ El servidor respondió con el error: %2 + %n hour(s) %n hora @@ -5871,6 +7206,7 @@ El servidor respondió con el error: %2 + %n minute(s) %n minuto @@ -5878,6 +7214,7 @@ El servidor respondió con el error: %2 + %n month(s) %n Mes @@ -5885,6 +7222,7 @@ El servidor respondió con el error: %2 + %n second(s) %n segundo @@ -5892,6 +7230,7 @@ El servidor respondió con el error: %2 + %n year(s) %n año @@ -5902,42 +7241,52 @@ El servidor respondió con el error: %2 utility + Always available locally Siempre disponible localmente + Available online only Disponible solo en línea + Could not open browser No se ha podido abrir el navegador + Could not open email client No se ha podido abrir el cliente de correo electrónico + Currently available locally Disponible localmente ahora + Free up local space Liberar espacio local + Make always available locally Hacer que esté siempre localmente disponible + Some available online only Algunos solo disponibles en línea + There was an error when launching the browser to go to URL %1. Maybe no default browser is configured? Se ha producido un error al lanzar el navegador para ir a la URL: %1 , ¿puede ser que no tenga ningún navegador por defecto? + There was an error when launching the email client to create a new message. Maybe no default email client is configured? Se ha producido un error al lanzar el cliente de correo electrónico para crear un nuevo mensaje. ¿Puede ser que no haya ningún cliente de correo electrónico configurado? @@ -5945,14 +7294,17 @@ El servidor respondió con el error: %2 ValidateChecksumHeader + The checksum header contained an unknown checksum type "%1" El encabezado del checksum contenía un tipo de comprobación desconocido: "%1" + The checksum header is malformed. El encabezado de checksum está malformado. + The downloaded file does not match the checksum, it will be resumed. "%1" != "%2" El archivo descargado no coincide con la suma de comprobación (checksum), se reanudará. "%1" != "%2" diff --git a/translations/client_fr.ts b/translations/client_fr.ts index 3d55530845f11..c127a5de6081a 100644 --- a/translations/client_fr.ts +++ b/translations/client_fr.ts @@ -1,55 +1,14 @@ - - - - Agree - Accepter - - - Back - Retour - - - Necessary data - Données indispensables - - - Required to ensure that the software can be used as expected - Nécessaire pour s'assurer que le logiciel peut être utilisé comme prévu - - - Save Settings - Sauvegarder les paramètres - - - Send anonymous use - Envoyer utilisation anonyme - - - Settings - Paramètres - - - This application uses tracking technologies. By clicking on Agree, you accept the processing of your anonymized data. You can adjust your choices at any time via the settings. <br/> <br/>Information on data processing and more can be found in our <a href='https://wl.hidrive.com/easy/0005'>privacy policy</a>. - Cette application utilise des technologies de suivi. En cliquant sur Accepter, vous acceptez le traitement de vos données anonymes. Vous pouvez modifier vos choix à tout moment via les paramètres. <br/> <br/>Des informations sur le traitement des données et autres peuvent être trouvées dans notre <a href='https://wl.hidrive.com/easy/0025'>politique de confidentialité</a>. - - - This helps us to optimize the software and to better identify system crashes and unexpected errors. - Cela nous aide à optimiser le logiciel et à mieux identifier les pannes de système et les erreurs inattendues. - - - We collect anonymized data to optimize our app. We use software solutions from various partners for this purpose. We want to give you full transparency and freedom of choice regarding the collection and processing of your anonymized usage. You can change your settings at any time under the menu item Data Protection. - Nous collectons des données anonymes pour optimiser notre application. Nous utilisons à cet effet des solutions logicielles de différents partenaires. Nous souhaitons vous offrir une transparence totale et une liberté de choix en ce qui concerne la collecte et le traitement de votre utilisation anonyme. Vous pouvez modifier vos paramètres à tout moment dans le menu Protection des données. - - ActivityItem + In %1 Dans %1 + Open %1 locally Ouvrir %1 localement @@ -57,10 +16,12 @@ ActivityItemContent + Dismiss Rejeter + Open file details Ouvrir les détails du fichier @@ -68,40 +29,40 @@ ActivityList + Activity list Liste des activités + No activities yet Pas encore d'activité + Scroll to top Défiler vers le haut - - BasicComboBox - - Clear status message menu - Menu d'effacement du message de statut - - CallNotificationDialog + Answer Talk call notification Répondre à la notification d'appel de Talk + Decline Décliner + Decline Talk call notification Décliner la notification d'appel de Talk + Talk notification caller avatar Avatar de l'appelant de la notification Talk @@ -109,66 +70,83 @@ CloudProviderWrapper + %1 (%2, %3) %1 (%2, %3) + Checking for changes in "%1" Vérification des modifications dans "%1" + Help Aide + Log out Se déconnecter + + No recently changed files Aucun fichier modifié récemment + Open website Consulter le site web + Pause synchronization Suspendre la synchronisation + Quit sync client Quitter le client de synchro + Recently changed Modifié récemment + Settings Paramètres + Sync paused Synchronisation en pause + Syncing Synchronisation en cours + Syncing %1 Synchronisation de %1 + Syncing %1 (%2 left) Synchronisation de %1 (%2 restant) + Syncing %1 of %2 Synchronisation de %1 sur %2 + Syncing %1 of %2 (%3 left) Synchronisation de %1 sur %2 (%3 restant⸱s) @@ -176,10 +154,12 @@ ConflictDelegate + Local version Version locale + Server version Version du serveur @@ -187,46 +167,59 @@ CurrentAccountHeaderButton + Account switcher and settings menu Sélecteur de compte et menu de paramètres + Add account Ajouter un compte + Add new account Ajouter un nouveau compte + Current account Compte actuel + Current account avatar Avatar du compte actuel + Current account status is do not disturb Le statuts de compte actuel est ne pas déranger + Current account status is online Le statuts de compte actuel est en ligne + Exit Quitter + + Pause sync for all Mettre en pause la synchronisation pour tous + + Resume sync for all Reprendre la synchronisation pour tous + Settings Paramètres @@ -234,6 +227,7 @@ EditFileLocallyLoadingDialog + Opening file for local editing Ouverture du fichier pour édition locale @@ -241,6 +235,7 @@ EmojiPicker + No recent emojis Pas d'émojis récents @@ -248,6 +243,7 @@ EncryptionTokenDiscoveryDialog + Discovering the certificates stored on your USB token Découverte des certificats stockés sur votre jeton USB @@ -255,18 +251,22 @@ EncryptionTokenSelectionWindow + Available Keys for end-to-end Encryption: Clés disponibles pour le chiffrement de bout en bout: + Cancel Annuler + Choose Choisir + Token Encryption Key Chooser Choisir la clé de chiffrement du jeton @@ -274,6 +274,7 @@ ErrorBox + Error Erreur @@ -281,6 +282,7 @@ FileDetailsPage + Dismiss Rejeter @@ -288,6 +290,7 @@ FileDetailsWindow + File details of %1 · %2 Détails du fichier de %1 · %2 @@ -295,14 +298,17 @@ FileProviderEvictionDialog + Evict materialised files Supprimer les fichiers matérialisés + Materialised items Éléments matérialisés + Reload Recharger @@ -310,10 +316,12 @@ FileProviderFastEnumerationSettings + Enable fast sync Activer la sync. rapide + Fast sync will only sync changes in files and folders within folders that have been explored. This can significantly increase responsiveness on initial configuration of virtual files. However, it will cause redundant downloads of files moved to an unexplored folder. La synchronisation rapide va uniquement synchroniser les modifications des fichiers et des dossiers dans les dossiers qui ont été explorés. Ceci peut significativement augmenter la réactivité sur la configuration initiale des fichiers virtuelles. Cependant, cela va causer des téléchargements redondants de fichiers déplacés dans un dossier non exploré. @@ -321,6 +329,7 @@ FileProviderFileDelegate + Delete Supprimer @@ -328,18 +337,17 @@ FileProviderSettings + Enable virtual files Activer les fichiers virtuels + General settings Paramètres généraux - Signal file provider domain - Indiquer le domaine du fournisseur de fichiers - - + Virtual files settings Paramètres des fichiers virtuels @@ -347,18 +355,17 @@ FileProviderStorageInfo + %1 GB of %2 GB remote files synced %1 Go sur %2 Go de fichiers distants synchronisés + Evict local copies … Évincer les copies locales… - Evict local copies... - Supprimer les copies locales - - + Local storage use Utilisation du stockage local @@ -366,20 +373,24 @@ FileProviderSyncStatus + All synced! Tout est synchronisé ! + Request a sync of changes for the VFS environment. macOS may ignore or delay this request. Synchroniser les modifications pour l'environnement VFS. macOS peut ignorer ou retarder cette demande. + Request sync Synchroniser + Syncing Synchronisation @@ -387,10 +398,12 @@ macOS may ignore or delay this request. FileSystem + Could not remove folder "%1" Impossible de supprimer le dossier "%1" + Error removing "%1": %2 Erreur lors de la suppression de "%1" : %2 @@ -398,26 +411,32 @@ macOS may ignore or delay this request. Flow2AuthWidget + An error occurred while connecting. Please try again. Une erreur s'est produite pendant la connexion. Veuillez ré-essayer. + Browser Authentication Authentification avec le navigateur Internet + Copy Link Copier le lien + Logo Logo + Reopen Browser + Switch to your browser to connect your account Basculez sur votre navigateur pour connecter votre compte @@ -425,10 +444,12 @@ macOS may ignore or delay this request. FolderWizardSelectiveSync + Add Folder Sync Ajouter une synchronisation de dossiers + Step 3 of 3: Selektive Synchronisation Étape 3 sur 3 : synchronisation sélective @@ -436,18 +457,22 @@ macOS may ignore or delay this request. FolderWizardSourcePage + &Choose &Choisir + Add Folder Sync Ajouter une synchronisation de dossiers + Select a folder on your hard drive that should be permanetly connected to your %1. All files and subfolders are automatically uploaded and synchronized Sélectionnez sur votre disque dur un dossier qui doit être en permanence rattaché à votre %1. Tous les fichiers et sous-dossiers sont automatiquement importés et synchronisés. + Step 1 of 3: Select local folder Étape 1 sur 3 : sélectionner un dossier local @@ -455,30 +480,37 @@ macOS may ignore or delay this request. FolderWizardTargetPage + Add Folder Sync Ajouter une synchronisation de dossiers + Both folders are permanently linked and the respective contents are automatically synchronized and updated. Les deux dossiers sont en permanence rattachés et leur contenu respectif est automatiquement synchronisé et importé. + Create folder Créer un dossier + Folders Dossiers + Please now select or create a target folder in your %1 where the content should be uploaded and synchronized. À présent, sélectionnez ou créez dans votre %1 un dossier cible dans lequel le contenu doit être importé et synchronisé. + Refresh Rafraîchir + Step 2 of 3: Directory in your %1 Étape 2 sur 3 : répertoire dans votre %1 @@ -486,10 +518,12 @@ macOS may ignore or delay this request. main.cpp + %1 requires on a working system tray. If you are running XFCE, please follow <a href="http://docs.xfce.org/xfce/xfce4-panel/systray">these instructions</a>. Otherwise, please install a system tray application such as "trayer" and try again. %1 nécessite une zone de notification système fonctionnelle. Si vous utiliser XFCE, veuillez suivre <a href="http://docs.xfce.org/xfce/xfce4-panel/systray">ces instructions</a>. Sinon, installez une application de la barre d'état système telle que "trayer" et réessayez. + System Tray not available Zone de notification système non disponible @@ -497,14 +531,17 @@ macOS may ignore or delay this request. MainWindow + New activities Nouvelles activités + Nextcloud desktop main dialog Boîte de dialogue principale du bureau Nextcloud + Unified search results list Liste des résultats de la recherche unifiée @@ -512,6 +549,7 @@ macOS may ignore or delay this request. nextcloudTheme::aboutInfo() + <p><small>Built from Git revision <a href="%1">%2</a> on %3, %4 using Qt %5, %6</small></p> <p><small>Généré à partir de la révision Git <a href="%1">%2</a> du %3, %4 en utilisant Qt %5, %6</small></p> @@ -519,14 +557,17 @@ macOS may ignore or delay this request. OCC::AbstractNetworkJob + Connection timed out Délai de connexion dépassé + Server replied "%1 %2" to "%3 %4" Le serveur a répondu "%1 %2" à "%3 %4" + Unknown error: network reply was deleted Erreur inconnue : La réponse du réseau a été supprimée @@ -534,14 +575,17 @@ macOS may ignore or delay this request. OCC::Account + File %1 is already locked by %2. Le fichier %1 est déjà verrouillé par %2. + Lock operation on %1 failed with error %2 L'opération de verrouillage de %1 a échoué avec l'erreur %2 + Unlock operation on %1 failed with error %2 L'opération de déverrouillage de %1 a échoué avec l'erreur %2 @@ -549,30 +593,37 @@ macOS may ignore or delay this request. OCC::AccountManager + %1 accounts were detected from a legacy desktop client. Should the accounts be imported? %1 comptes ont été détectés à partir d'un ancien client de bureau. Doivent-ils être importés ? + 1 account was detected from a legacy desktop client. Should the account be imported? 1 compte a été détecté à partir d'un ancien client de bureau. Le compte doit-il être importé ? + Could not import accounts from legacy client configuration. Impossible d'importer des comptes à partir de l'ancienne configuration client. + Import Importer + + Legacy import Importation de l'héritage + Skip Ignorer @@ -580,305 +631,336 @@ Le compte doit-il être importé ? OCC::AccountSettings + %1 (%3%) of %2 in use. Some folders, including network mounted or shared folders, might have different limits. %1 (%3%) utilisés sur %2. Certains dossiers, montés depuis le réseau ou partagés, peuvent avoir des limites différentes. + %1 as %2 %1 avec le compte %2 + %1 in use %1 utilisé(s) + %1 of %2 in use %1 utilisés sur %2 + (experimental) (expérimental) + <p>Could not create local folder <i>%1</i>.</p> <p>Impossible de créer le dossier local <i>%1</i>.</p> + <p>Do you really want to stop syncing the folder <i>%1</i>?</p><p><b>Note:</b> This will <b>not</b> delete any files.</p> <p>Voulez-vous vraiment arrêter de synchroniser le dossier <i>%1</i> ?</p><p><b>Note :</b> Aucun fichier ne sera supprimé.</p> - Apply - Appliquer - - - Apply manual changes - Appliquer les changements manuels - - + + Availability Disponibilités - Cancel - Annuler - - + Choose what to sync Sélectionner le contenu à synchroniser + Confirm Folder Sync Connection Removal Confirmer le retrait de la synchronisation de dossier + Connected to %1. Connecté au serveur %1. - Connected with <server> as <user> - Connecté au serveur <server> avec le compte <user> - - + Connecting to %1 … Connexion à %1 ... - Connection settings - Paramètres de connexion - - + Could not encrypt folder because the folder does not exist anymore Impossible de chiffrer le dossier car il n'existe plus + + Create new folder Créer un nouveau dossier + Currently there is no storage usage information available. Actuellement aucune information d'utilisation de stockage n'est disponible. + Disable encryption Désactiver le chiffrement + Disable end-to-end encryption Désactiver le chiffrement de bout en bout + Disable end-to-end encryption for %1? Désactiver le chiffrement de bout en bout pour %1 ? + Disable support Désactiver le support + Disable virtual file support … Désactiver la prise en charge du fichier virtuel… + Disable virtual file support? Désactiver le support des fichiers virtuels ? + Display mnemonic Afficher la phrase secrète + + Do not encrypt folder Ne pas chiffrer le dossier + + Edit Ignored Files Modifier les fichiers exclus + Enable virtual file support %1 … Activer la prise en charge du fichier virtuel %1 … + Encrypt Chiffrer + + Encrypt folder Chiffrer le dossier + Encryption failed Le chiffrement a échoué + End-to-end Encryption Chiffrement de bout en bout + End-to-end Encryption with Virtual Files Chiffrement de bout en bout avec fichiers virtuels + End-to-end encryption has been enabled for this account Le chiffrement de bout en bout a été activé sur ce compte + End-to-end encryption has been enabled on this account with another device.<br>It can be enabled on this device by entering your mnemonic.<br>This will enable synchronisation of existing encrypted folders. Le chiffrement de bout en bout a été activé sur ce compte avec un autre appareil.<br>Il peut être activé sur cet appareil en entrant votre phrase secrète.<br>Cela permettra la synchronisation des dossiers chiffrés existants. + End-to-end encryption is not configured on this device. Once it is configured, you will be able to encrypt this folder. Would you like to set up end-to-end encryption? Le chiffrement de bout en bout n'est pas configuré sur cet appareil. Une fois qu'il sera configuré, vous serez en mesure de chiffrer ce dossier. Souhaitez-vous configurer le chiffrement de bout en bout ? + End-to-end encryption mnemonic Phrase secrète du chiffrement de bout en bout - Expand Memory - Augmenter la mémoire - - + Folder creation failed Échec de la création du dossier + Force sync now Forcer la synchronisation maintenant + Migrate certificate to a new one Migrer le certificat vers une nouvelle clé + No %1 connection configured. Aucune connexion à %1 configurée + No account configured. Aucun compte configuré. + + Open folder Ouvrir le dossier + Pause sync Mettre en pause la synchronisation + Please wait for the folder to sync before trying to encrypt it. Merci d'attendre que le dossier soit synchronisé avant d'essayer de le chiffrer. + Remove Folder Sync Connection Retirer la synchronisation de ce dossier + Remove folder sync connection Retirer la connexion de synchronisation de dossier + Removing end-to-end encryption will remove locally-synced files that are encrypted.<br>Encrypted files will remain on the server. Le retrait du chiffrage de bout en bout supprimera localement les fichiers chiffrés synchronisés.<br>Les fichiers chiffrés demeureront sur le serveur. + Restart sync Redémarrer la synchronisation + Resume sync Reprendre la synchronisation + Server %1 is currently being redirected, or your connection is behind a captive portal. Le serveur %1 est actuellement redirigé ou votre connexion est derrière un portail captif. + Server %1 is currently in maintenance mode. Le serveur %1 est en cours de maintenance. + Server %1 is temporarily unavailable. Le serveur %1 est temporairement indisponible. + Server configuration error: %1 at %2. Erreur de configuration serveur : %1 à %2. + Set up encryption Configurer le chiffrement + Signed out from %1. Session sur %1 fermée. - Standard file sync - Synchronisation standard des fichiers - - + Storage space %1% occupied Espace de stockage %1% occupé - Storage space: … - Espace de stockage : ... - - + Sync Running Synchronisation en cours - Synchronize all - Tout synchroniser - - - Synchronize none - Ne rien synchroniser - - + The folder has a minor sync problem. Encryption of this folder will be possible once it has synced successfully Le dossier a un défaut de synchronisation mineur. Le chiffrement de ce dossier sera possible quand la synchronisation aura réussi. + The folder has a sync error. Encryption of this folder will be possible once it has synced successfully Le dossier a une erreur de synchronisation. Le chiffrement de ce dossier sera possible quand la synchronisation aura réussi. + The server version %1 is unsupported! Proceed at your own risk. La version %1 du serveur n'est pas maintenue ! Vous prenez vos propres risques. + The syncing operation is running.<br/>Do you want to terminate it? La synchronisation est en cours.<br/>Voulez-vous l'arrêter ? + There are folders that have grown in size beyond %1MB: %2 Il y a des dossiers qui ont augmenté de taille au-delà de %1 Mo : %2 + There are folders that were not synchronized because they are external storages: Certains dossiers n'ont pas été synchronisés parce qu'ils sont localisés sur un stockage externe : + There are folders that were not synchronized because they are too big or external storages: Certains dossiers n'ont pas été synchronisés parce qu'ils sont localisés sur un stockage externe ou qu'ils sont de taille trop importante : + There are folders that were not synchronized because they are too big: Certains dossiers n'ont pas été synchronisés parce qu'ils sont de taille trop importante : + This account supports end-to-end encryption Ce compte prend en charge le chiffrement de bout en bout. + This action will disable virtual file support. As a consequence contents of folders that are currently marked as "available online only" will be downloaded. The only advantage of disabling virtual file support is that the selective sync feature will become available again. @@ -889,60 +971,126 @@ Le seul avantage de désactiver la prise en charge du fichier virtuel est que le Cette action entraînera l'interruption de toute synchronisation en cours. + This will encrypt your folder and all files within it. These files will no longer be accessible without your encryption mnemonic key. <b>This process is not reversible. Are you sure you want to proceed?</b> Cette opération cryptera votre dossier et tous les fichiers qu'il contient. Ces fichiers ne seront plus accessibles sans votre clé mnémonique de cryptage. <b>Ce processus n'est pas réversible. Êtes-vous sûr de vouloir continuer ? + To protect your Cryptographic Identity, we encrypt it with a mnemonic of 12 dictionary words. Please note these down and keep them safe. They will be needed to add other devices to your account (like your mobile phone or laptop). Pour protéger votre identité cryptographique, nous la chiffrons avec une phrase secrète de 12 mots du dictionnaire. Veuillez la noter et la garder en sécurité. Elle sera nécessaire pour ajouter d’autres appareils à votre compte (comme votre smartphone ou votre ordinateur portable). + Unable to connect to %1. Impossible de se connecter à %1. - Unchecked folders will be <b>removed</b> from your local file system and will not be synchronized to this computer anymore - Les dossiers décochés seront <b>supprimés</b> de votre disque local et ne seront plus synchronisés avec cet ordinateur. - - - Virtual file sync - Synchronisation de fichiers virtuels - - + Warning Attention + You cannot encrypt a folder with contents, please remove the files. Wait for the new sync, then encrypt it. Vous ne pouvez pas chiffrer un dossier avec son contenu, veuillez enlever les fichiers. Attendez une nouvelle synchronisation puis chiffrez le dossier. + You need to accept the terms of service at %1. Vous devez accepter les conditions d'utilisation ici %1. + You seem to have the Virtual Files feature enabled on this folder. At the moment, it is not possible to implicitly download virtual files that are end-to-end encrypted. To get the best experience with virtual files and end-to-end encryption, make sure the encrypted folder is marked with "Make always available locally". Il semble que la fonctionnalité des Fichiers Virtuels soit activée sur ce dossier. Pour l'instant, il n'est pas possible de télécharger implicitement des fichiers virtuels qui sont chiffrés de bout en bout. Pour bénéficier d'une expérience optimale avec les fichiers virtuels et le chiffrement de bout en bout, assurez-vous que le dossier chiffré soit marqué par l'option "Toujours rendre disponible localement". + https://wl.hidrive.com/easy/0057 https://wl.hidrive.com/easy/0057 - + + + Apply + Appliquer + + + + Apply manual changes + Appliquer les changements manuels + + + + + + Cancel + Annuler + + + + Connected with <server> as <user> + Connecté au serveur <server> avec le compte <user> + + + + Connection settings + Paramètres de connexion + + + + Expand Memory + Augmenter la mémoire + + + + Standard file sync + Synchronisation standard des fichiers + + + + + Storage space: … + Espace de stockage : ... + + + + Synchronize all + Tout synchroniser + + + + Synchronize none + Ne rien synchroniser + + + + Unchecked folders will be <b>removed</b> from your local file system and will not be synchronized to this computer anymore + Les dossiers décochés seront <b>supprimés</b> de votre disque local et ne seront plus synchronisés avec cet ordinateur. + + + + Virtual file sync + Synchronisation de fichiers virtuels + + OCC::AccountSetupFromCommandLineJob + Access forbidden by server. To verify that you have proper access, <a href="%1">click here</a> to access the service with your browser. Accès refusé par le serveur. Pour vérifier que vous disposez d'un accès approprié, <a href="%1">cliquez ici</a> pour accéder au service avec votre navigateur Web. + The authenticated request to the server was redirected to "%1". The URL is bad, the server is misconfigured. La requête authentifiée au serveur a été redirigée vers « %1 ». L'URL est mauvaise, le serveur est mal configuré. + There was an invalid response to an authenticated WebDAV request Réponse invalide reçue suite à une requête WebDav authentifiée. @@ -950,46 +1098,57 @@ Wait for the new sync, then encrypt it. OCC::AccountState + Asking Credentials informations d'identification demandées + Configuration error Erreur de configuration + Connected Connecté + Disconnected Déconnecté + Maintenance mode mode maintenance + Need the user to accept the terms of service Besoin que l'utilisateur accepte les conditions générales d'utilisation + Network error Erreur réseau + Redirect detected Redirection détectée + Service unavailable Service indisponible + Signed out Session fermée + Unknown account state État du compte inconnu @@ -997,14 +1156,17 @@ Wait for the new sync, then encrypt it. OCC::ActivityListModel + Fetching activities … Récupération des activités... + For more activities please open the Activity app. Pour plus d'activités veuillez lancer l'application Activité. + Network error occurred: client will retry syncing. Une erreur de réseau est survenue : le client va réessayer la synchronisation. @@ -1012,34 +1174,42 @@ Wait for the new sync, then encrypt it. OCC::AddCertificateDialog + + Certificate files (*.p12 *.pfx) + Fichiers de certificats (*.p12 *.pfx) + + + + Select a certificate + Sélectionner un certificat + + + An encrypted pkcs12 bundle is strongly recommended as a copy will be stored in the configuration file. Un paquet pkcs12 chiffré est vivement recommandé vu qu'une copie sera stockée dans le fichier de configuration. + Browse … Parcourir … + Certificate & Key (pkcs12): Certificat & clé (pkcs12) : - Certificate files (*.p12 *.pfx) - Fichiers de certificats (*.p12 *.pfx) - - + Certificate password: Mot de passe du certificat : + SSL client certificate authentication Authentification par certificat SSL client - Select a certificate - Sélectionner un certificat - - + This server probably requires a SSL client certificate. Ce serveur requiert probablement un certificat SSL client. @@ -1047,32 +1217,39 @@ Wait for the new sync, then encrypt it. OCC::Application + %1 accounts number of accounts imported %1 comptes + %1 folders number of folders imported %1 dossiers + 1 account 1 compte + 1 folder 1 dossier + Continue Continuer + Error accessing the configuration file Erreur lors de l'accès au fichier de configuration + Imported %1 and %2 from a legacy desktop client. %3 number of accounts and folders imported. list of users. @@ -1080,35 +1257,43 @@ Wait for the new sync, then encrypt it. %3 + Legacy import Importation héritée + Quit Quitter + Some settings were configured in %1 versions of this client and use features that are not available in this version.<br><br>Continuing will mean <b>%2 these settings</b>.<br><br>The current configuration file was already backed up to <i>%3</i>. Des paramètres ont été configurés dans des versions %1 de ce client et utilisent des fonctionnalités non disponibles dans la version actuelle. <br><br>Continuer impliquera que <b>ces paramètres seront %2</b>.<br><br> Le fichier de configuration actuel a été sauvegardé dans <i>%3</i>. + There was an error while accessing the configuration file at %1. Please make sure the file can be accessed by your system account. Une erreur est survenue lors de l'accès au fichier de configuration à %1. Merci de vérifier que le fichier est accessible du compte système. + deleting supprimés + ignoring ignorés + newer newer software version ultérieures + older older software version antérieures @@ -1117,18 +1302,22 @@ Wait for the new sync, then encrypt it. OCC::AuthenticationDialog + &Password: &Password: + &Username: &Username: + Authentication Required Authentification requise + Enter username and password for "%1" at %2. Saisir le nom d’utilisateur et le mot de passe pour « %1 » sur %2. @@ -1136,10 +1325,12 @@ Wait for the new sync, then encrypt it. OCC::BasePropagateRemoteDeleteEncrypted + "%1 Failed to unlock encrypted folder %2". « %1 Impossible de déverrouiller le dossier chiffré %2 ». + Wrong HTTP code returned by server. Expected 204, but received "%1 %2". Le code HTTP retourné par le serveur n'est pas valide. La valeur attendue est 204 mais la valeur retournée est « %1 %2 ». @@ -1147,46 +1338,58 @@ Wait for the new sync, then encrypt it. OCC::BulkPropagatorJob + Error updating metadata: %1 Erreur à la mise à jour des méta-données : %1 + File %1 cannot be uploaded because another file with the same name, differing only in case, exists Le fichier %1 ne peut être téléversé parce qu'un autre fichier avec le même nom hormis la casse existe + File %1 has invalid modification time. Do not upload to the server. Le fichier %1 présente une heure de modification invalide. Téléversement vers le serveur impossible. + File %1 has invalid modified time. Do not upload to the server. Le fichier %1 présente une heure de modification invalide. Téléversement vers le serveur impossible. + File Removed (start upload) %1 Fichier retiré (début du téléversement) %1 + + Local file changed during sync. Fichier local modifié pendant la synchronisation. + Local file changed during syncing. It will be resumed. Fichier local modifié pendant la synchronisation. La synchronisation sera reprise. + Network error: %1 Erreur réseau : %1 + Restoration failed: %1 Échec de la restauration : %1 + The file %1 is currently in use Le fichier %1 est en cours d'utilisation + The local file was removed during sync. Le fichier local a été supprimé pendant la synchronisation. @@ -1194,30 +1397,37 @@ Wait for the new sync, then encrypt it. OCC::CaseClashConflictSolver + Cannot rename file because a file with the same name already exists on the server. Please pick another name. Impossible de renommer le fichier parce qu'un fichier portant le même nom existe déjà sur le serveur. Veuillez choisir un autre nom. + Could not rename file. Please make sure you are connected to the server. Impossible de renommer le fichier. Assurez-vous de bien être connecté au serveur. + Failed to fetch permissions with error %1 Échec de récupération de permissions avec l'erreur %1 + Filename contains leading and trailing spaces. Le nom de fichier contient des espaces de début et de fin. + Filename contains leading spaces. Le nom de fichier contient des espaces de début. + Filename contains trailing spaces. Le nom de fichier contient des espaces de fin. + You don't have the permission to rename this file. Please ask the author of the file to rename it. Vous n'avez pas les permissions de renommer ce fichier. Veuillez demander à son auteur de le renommer. @@ -1225,86 +1435,111 @@ Wait for the new sync, then encrypt it. OCC::CaseClashFilenameDialog + %1 does not support equal file names with only letter casing differences. %1 ne supporte pas les noms de fichiers identiques avec seulement des différences de casse de caractère. + + Filename contains illegal characters: %1 + Le nom du fichier contient des caractères illégaux : %1 + + + + Filename contains leading and trailing spaces. + Le nom de fichier contient des espaces de début et de fin. + + + + Filename contains leading spaces. + Le nom de fichier contient des espaces de début. + + + + Filename contains trailing spaces. + Le nom de fichier contient des espaces de fin. + + + + Rename file + Renomer le fichier + + + + The file "%1" could not be synced because of a case clash conflict with an existing file on this system. + Le fichier "%1" n'a pas pu être synchronisé à cause d'un conflit de casse avec un fichier existant dans ce système. + + + + Use invalid name + Nom invalide + + + + 0 byte 0 octets + Case Clash Conflict Conflit de casse + Case clashing file Fichier avec conflit de casse + Error Erreur + Existing file Dossier existant - Filename contains illegal characters: %1 - Le nom du fichier contient des caractères illégaux : %1 - - - Filename contains leading and trailing spaces. - Le nom de fichier contient des espaces de début et de fin. - - - Filename contains leading spaces. - Le nom de fichier contient des espaces de début. - - - Filename contains trailing spaces. - Le nom de fichier contient des espaces de fin. - - + New filename Nouveau nom de fichier + + Open clashing file Ouvrir le fichier conflictuel + + Open existing file Ouvrir un fichier existant + Please enter a new name for the clashing file: Veuillez saisir un nouveau nom pour le fichier conflictuel : - Rename file - Renomer le fichier - - - The file "%1" could not be synced because of a case clash conflict with an existing file on this system. - Le fichier "%1" n'a pas pu être synchronisé à cause d'un conflit de casse avec un fichier existant dans ce système. - - + The file could not be synced because it generates a case clash conflict with an existing file on this system. Le fichier n'a pas pu être synchronisé car il génère un conflit de cas avec un fichier existant sur ce système. - Use invalid name - Nom invalide - - + file A fichier A + file B fichier B + + today aujourd'hui @@ -1312,6 +1547,7 @@ Wait for the new sync, then encrypt it. OCC::CleanupPollsJob + Error writing metadata to the database Erreur à l'écriture des métadonnées dans la base de données @@ -1319,27 +1555,33 @@ Wait for the new sync, then encrypt it. OCC::ClientSideEncryption + Enter Certificate USB Token PIN: Entrez le PIN du jeton USB de certificat: + Enter E2E passphrase Entrez la phrase secrète E2E + Input PIN code Please keep it short and shorter than "Enter Certificate USB Token PIN:" Saisir le code PIN + Invalid PIN. Login failed PIN invalide. Connexion échouée + Login to the token failed after providing the user PIN. It may be invalid or wrong. Please try again! La connexion au token a échoué après la saisie du code PIN. Il est peut-être invalide ou erroné. Veuillez réessayer ! + Please enter your end-to-end encryption passphrase:<br><br>Username: %2<br>Account: %3<br> Veuillez entrer votre phrase de passe de chiffrement de bout en bout :<br><br>Nom d'utilisateur : %2<br>Compte : %3<br> @@ -1347,66 +1589,87 @@ Wait for the new sync, then encrypt it. OCC::ConflictDialog - 0 byte - 0 octet - - - <a href="%1">Open local version</a> - <a href="%1">Ouvrir la version locale</a> - - - <a href="%1">Open server version</a> - <a href="%1">Ouvrir la version serveur</a> - - - Click to open the file - Cliquez pour ouvrir le fichier - - - Conflicting versions of %1. - Versions en conflit de %1. - - + Keep both versions Conserver les deux versions + Keep local version Conserver la version locale + + Keep selected version Conserver la version sélectionnée + Keep server version Conserver la version serveur - Local version - Version locale - - + Open local version Ouvrir la version locale + Open server version Ouvrir la version serveur + + + 0 byte + 0 octet + + + + <a href="%1">Open local version</a> + <a href="%1">Ouvrir la version locale</a> + + + + <a href="%1">Open server version</a> + <a href="%1">Ouvrir la version serveur</a> + + + + + Click to open the file + Cliquez pour ouvrir le fichier + + + + + Conflicting versions of %1. + Versions en conflit de %1. + + + + Local version + Version locale + + + Server version Version du serveur + Sync Conflict Conflit de synchronisation + Which version of the file do you want to keep?<br/>If you select both versions, the local file will have a number added to its name. Quelle version du fichier souhaitez-vous garder ?<br/>Si vous sélectionnez les deux versions, le fichier local aura un numéro ajouté à son nom. + + today aujourd'hui @@ -1414,22 +1677,29 @@ Wait for the new sync, then encrypt it. OCC::ConflictSolver + Confirm deletion Confirmer la suppression + Do you want to delete the directory <i>%1</i> and all its contents permanently? Voulez-vous supprimer le dossier <i>%1</i> et tout son contenu définitivement ? + Do you want to delete the file <i>%1</i> permanently? Voulez-vous supprimer le fichier <i>%1</i> définitivement ? + + Error Erreur + + Moving file failed: %1 @@ -1441,26 +1711,32 @@ Wait for the new sync, then encrypt it. OCC::ConnectionValidator + Authentication error: Either username or password are wrong. Erreur d'authentification : nom d’utilisateur et/ou mot de passe incorrect(s). + No Nextcloud account configured Aucun compte Nextcloud n'est paramétré + Please update to the latest server and restart the client. Veuillez mettre à jour le serveur vers la dernière version et redémarrer le client. + The configured server for this client is too old Le serveur configuré pour ce client est trop vieux + The provided credentials are not correct Les informations d'identification fournies ne sont pas correctes + Timeout Délai d'attente @@ -1468,64 +1744,78 @@ Wait for the new sync, then encrypt it. OCC::DataProtectionPage + + This application uses tracking technologies. By clicking on Agree, you accept the processing of your anonymized data. You can adjust your choices at any time via the settings. <br/> <br/>Information on data processing and more can be found in our <a href='https://wl.hidrive.com/easy/0005'>privacy policy</a>. + Cette application utilise des technologies de suivi. En cliquant sur Accepter, vous acceptez le traitement de vos données anonymes. Vous pouvez modifier vos choix à tout moment via les paramètres. <br/> <br/>Des informations sur le traitement des données et autres peuvent être trouvées dans notre <a href='https://wl.hidrive.com/easy/0025'>politique de confidentialité</a>. + + + Agree Accepter + Form Formulaire + Settings Paramètres - - This application uses tracking technologies. By clicking on Agree, you accept the processing of your anonymized data. You can adjust your choices at any time via the settings. <br/> <br/>Information on data processing and more can be found in our <a href='https://wl.hidrive.com/easy/0005'>privacy policy</a>. - Cette application utilise des technologies de suivi. En cliquant sur Accepter, vous acceptez le traitement de vos données anonymes. Vous pouvez modifier vos choix à tout moment via les paramètres. <br/> <br/>Des informations sur le traitement des données et autres peuvent être trouvées dans notre <a href='https://wl.hidrive.com/easy/0025'>politique de confidentialité</a>. - - + OCC::DataProtectionSettingsPage + + We collect anonymized data to optimize our app. We use software solutions from various partners for this purpose. We want to give you full transparency and freedom of choice regarding the collection and processing of your anonymized usage. You can change your settings at any time under the menu item Data Protection. + Nous collectons des données anonymes pour optimiser notre application. Nous utilisons à cet effet des solutions logicielles de différents partenaires. Nous souhaitons vous offrir une transparence totale et une liberté de choix en ce qui concerne la collecte et le traitement de votre utilisation anonyme. Vous pouvez modifier vos paramètres à tout moment dans le menu Protection des données. + + + Back Retour + Form Formulaire + Necessary data Données indispensables + Required to ensure that the software can be used as expected Nécessaire pour s'assurer que le logiciel peut être utilisé comme prévu + Save Settings Sauvegarder les paramètres + Send anonymous use Envoyer utilisation anonyme + This helps us to optimize the software and to better identify system crashes and unexpected errors. Cela nous aide à optimiser le logiciel et à mieux identifier les pannes de système et les erreurs inattendues. - - We collect anonymized data to optimize our app. We use software solutions from various partners for this purpose. We want to give you full transparency and freedom of choice regarding the collection and processing of your anonymized usage. You can change your settings at any time under the menu item Data Protection. - Nous collectons des données anonymes pour optimiser notre application. Nous utilisons à cet effet des solutions logicielles de différents partenaires. Nous souhaitons vous offrir une transparence totale et une liberté de choix en ce qui concerne la collecte et le traitement de votre utilisation anonyme. Vous pouvez modifier vos paramètres à tout moment dans le menu Protection des données. - - + OCC::DiscoveryPhase + Error while canceling deletion of %1 Erreur lors de l'annulation de la suppression de %1 + Error while canceling deletion of a file Erreur lors de l'annulation de la suppression d'un fichier @@ -1533,14 +1823,19 @@ Wait for the new sync, then encrypt it. OCC::DiscoverySingleDirectoryJob + + Encrypted metadata setup error! Erreur de configuration des métadonnées chiffrées ! + Encrypted metadata setup error: initial signature from server is empty. Erreur de configuration des métadonnées cryptées : la signature initiale du serveur est vide. + + Server error: PROPFIND reply is not XML formatted! Erreur du serveur : La réponse PROPFIND n'est pas au format XML ! @@ -1548,22 +1843,27 @@ Wait for the new sync, then encrypt it. OCC::DiscoverySingleLocalDirectoryJob + Directory not accessible on client, permission denied Dossier non accessible au client, permission refusée + Directory not found: %1 Dossier non trouvé : %1 + Error while opening directory %1 Erreur à l’ouverture du dossier %1 + Error while reading directory %1 Erreur de lecture du dossier %1 + Filename encoding is not valid L’encodage du nom de fichier n’est pas valide @@ -1571,62 +1871,93 @@ Wait for the new sync, then encrypt it. OCC::EditLocallyJob + + + An error occurred during data retrieval. Une erreur est survenue pendant le rapatriement des données. + + An error occurred during setup. Une erreur est survenue pendant l'installation + + An error occurred trying to synchronise the file to edit locally. Une erreur s'est produite lors de la synchronisation du fichier à éditer localement. + + + + Could not find a file for local editing. Make sure it is not excluded via selective sync. Impossible de trouver le fichier pour l'édition locale. Assurez-vous qu'il n'est pas exclus par un filtre de synchronisation. + + Could not find a file for local editing. Make sure its path is valid and it is synced locally. Impossible de trouver le fichier pour l'édition locale. Assurez-vous que le chemin est valide et qu'il est synchronisé localement. + Could not find a remote file info for local editing. Make sure its path is valid. Impossible de trouver une info fichier distante pour l'édition locale. Assurez-vous que son chemin est valide. + Could not open %1 Impossible d'ouvrir %1 + + + + + + + + Could not start editing locally. Impossible de démarrer l'édition localement. + File %1 already locked. Fichier %1 déjà verrouillé. + File %1 could not be locked. Impossible de verrouiller le fichier %1. + File %1 now locked. Fichier %1 désormais verrouillé. + Invalid local file path. Chemin d'accès au fichier local non valide. + + Lock will last for %1 minutes. You can also unlock this file manually once you are finished editing. Le verrouillage durera %1 minutes. Vous pouvez également déverrouiller ce fichier manuellement une fois que vous avez terminé l'édition. + Please try again. Merci de réessayer. + Server error: PROPFIND reply is not XML formatted! Erreur de serveur : La réponse de PROPFIND n'est pas formatée en XML ! @@ -1634,10 +1965,12 @@ Wait for the new sync, then encrypt it. OCC::EditLocallyManager + Could not validate the request to open a file from server. Impossible de valider la requête pour ouvrir un fichier du serveur. + Please try again. Merci de réessayer. @@ -1645,26 +1978,34 @@ Wait for the new sync, then encrypt it. OCC::EditLocallyVerificationJob + An error occurred trying to verify the request to edit locally. Une erreur est survenue, tentative de vérification de la requête pour éditer localement. + Could not find an account for local editing. Impossible de trouver un compte pour l'édition locale. + Could not start editing locally. Impossible de démarrer l'édition locale. + Invalid file path was provided. Un chemin d'accès au fichier invalide a été fourni. + Invalid token received. Le jeton reçu est invalide. + + + Please try again. Merci de réessayer. @@ -1672,22 +2013,34 @@ Wait for the new sync, then encrypt it. OCC::EncryptedFolderMetadataHandler + Error fetching encrypted folder ID. Erreur dans la récupération de l’ID du dossier chiffré. + + + + + + Error fetching metadata. Erreur à la récupération des méta-données. + + + Error locking folder. Erreur de verrouillage du dossier. + Error parsing or decrypting metadata. Erreur lors du parsing ou du déchiffrement des métadonnées. + Failed to upload metadata Échec du téléversement des métadonnées @@ -1695,6 +2048,7 @@ Wait for the new sync, then encrypt it. OCC::EncryptFolderJob + Could not generate the metadata for encryption, Unlocking the folder. This can be an issue with your OpenSSL libraries. Impossible de générer les métadonnées pour le chiffrement, déverrouillage du dossier. @@ -1704,6 +2058,7 @@ Cela peut être un problème avec vos bibliothèques OpenSSL. OCC::FileDetails + %1 day(s) ago days elapsed since file last modified @@ -1712,6 +2067,7 @@ Cela peut être un problème avec vos bibliothèques OpenSSL. + %1 hour(s) ago hours elapsed since file last modified @@ -1720,6 +2076,7 @@ Cela peut être un problème avec vos bibliothèques OpenSSL. + %1 minute(s) ago minutes elapsed since file last modified @@ -1728,6 +2085,7 @@ Cela peut être un problème avec vos bibliothèques OpenSSL. + %1 month(s) ago months elapsed since file last modified @@ -1736,6 +2094,7 @@ Cela peut être un problème avec vos bibliothèques OpenSSL. + %1 second(s) ago seconds elapsed since file last modified @@ -1744,6 +2103,7 @@ Cela peut être un problème avec vos bibliothèques OpenSSL. + %1 year(s) ago years elapsed since file last modified @@ -1752,6 +2112,7 @@ Cela peut être un problème avec vos bibliothèques OpenSSL. + Locked by %1 - Expires in %2 minute(s) remaining time before lock expires @@ -1763,26 +2124,36 @@ Cela peut être un problème avec vos bibliothèques OpenSSL. OCC::Flow2Auth + + Could not parse the JSON returned from the server: <br><em>%1</em> Impossible d'analyser le JSON renvoyé par le serveur : <br><em>%1</em> + + Error returned from the server: <em>%1</em> Erreur renvoyée par le serveur : <em>%1</em> + The polling URL does not start with HTTPS despite the login URL started with HTTPS. Login will not be possible because this might be a security issue. Please contact your administrator. L'URL du sondage ne commence pas par HTTPS alors que l'URL de connexion commence par HTTPS. La connexion ne sera pas possible car cela pourrait être un problème de sécurité. Veuillez contacter votre administrateur. + + The reply from the server did not contain all expected fields La réponse du serveur ne contient pas tous les champs attendus + The returned server URL does not start with HTTPS despite the login URL started with HTTPS. Login will not be possible because this might be a security issue. Please contact your administrator. L'URL renvoyée par le serveur ne commence pas par HTTPS alors que l'URL de connexion commence par HTTPS. La connexion ne sera pas possible car cela pourrait être un problème de sécurité. Veuillez contacter votre administrateur. + + There was an error accessing the "token" endpoint: <br><em>%1</em> Une erreur est survenue en accédant au "jeton" : <br><em>%1</em> @@ -1790,38 +2161,48 @@ Cela peut être un problème avec vos bibliothèques OpenSSL. OCC::Flow2AuthWidget + Copy Link Copier le lien + + Error Erreur + Link copied to clipboard. Lien copié dans le presse-papier + Open Browser Ouvrir le navigateur + Polling for authorization En attente de l'autorisation + Starting authorization Démarrage de l'autorisation + Switch to your browser to connect your account Basculez sur votre navigateur pour connecter votre compte + Unable to open the Browser, please copy the link to your Browser. Impossible d'ouvrir le navigateur, veuillez copier le lien dans votre navigateur Web. + Waiting for authorization En attente de l'autorisation @@ -1829,6 +2210,7 @@ Cela peut être un problème avec vos bibliothèques OpenSSL. OCC::Folder + %1 and %n other file(s) are currently locked. %1 et %n autre fichier sont verrouillés. @@ -1836,6 +2218,7 @@ Cela peut être un problème avec vos bibliothèques OpenSSL. + %1 and %n other file(s) could not be synced due to errors. See the log for details. %1 ne peut pas être synchronisé en raison d'erreurs. Consultez les logs pour les détails. @@ -1843,6 +2226,7 @@ Cela peut être un problème avec vos bibliothèques OpenSSL. + %1 and %n other file(s) have been added. %1 et %n autre fichier ont été ajoutés. @@ -1850,6 +2234,7 @@ Cela peut être un problème avec vos bibliothèques OpenSSL. + %1 and %n other file(s) have been removed. %1 a été supprimé. @@ -1857,6 +2242,7 @@ Cela peut être un problème avec vos bibliothèques OpenSSL. + %1 and %n other file(s) have been updated. %1 a été mis à jour. @@ -1864,14 +2250,17 @@ Cela peut être un problème avec vos bibliothèques OpenSSL. + %1 could not be synced due to an error. See the log for details. %1 n'a pu être synchronisé pour cause d'erreur. Consultez les logs pour les détails. + %1 has a sync conflict. Please check the conflict file! %1 a un problème de synchronisation. Merci de vérifier le fichier conflit ! + %1 has and %n other file(s) have sync conflicts. %1 a un conflit de synchronisation. @@ -1879,11 +2268,13 @@ Cela peut être un problème avec vos bibliothèques OpenSSL. + %1 has been added. %1 names a file. %1 a été ajouté. + %1 has been moved to %2 and %n other file(s) have been moved. %1 a été déplacé vers %2. @@ -1891,15 +2282,18 @@ Cela peut être un problème avec vos bibliothèques OpenSSL. + %1 has been moved to %2. %1 a été déplacé vers %2. + %1 has been removed. %1 names a file. %1 a été supprimé. + %1 has been renamed to %2 and %n other file(s) have been renamed. %1 a été renommé en %2. @@ -1907,30 +2301,36 @@ Cela peut être un problème avec vos bibliothèques OpenSSL. + %1 has been renamed to %2. %1 and %2 name files. %1 a été renommé en %2. + %1 has been updated. %1 names a file. %1 a été mis à jour. + %1 is currently locked. %1 est actuellement verrouillé. + A folder from an external storage has been added. Un nouveau dossier localisé sur un stockage externe a été ajouté. + A folder has surpassed the set folder size limit of %1MB: %2. %3 Un dossier a dépassé la taille limite fixée de %1 Mo : %2. %3 + A large number of files in the server have been deleted. Please confirm if you'd like to proceed with these deletions. Alternatively, you can restore all deleted files by uploading from '%1' folder to the server. @@ -1939,6 +2339,7 @@ Veuillez confirmer si vous souhaitez procéder à ces suppressions. Vous pouvez également restaurer tous les fichiers supprimés en les téléchargeant depuis le dossier '%1' vers le serveur. + A large number of files in your local '%1' folder have been deleted. Please confirm if you'd like to proceed with these deletions. Alternatively, you can restore all deleted files by downloading them from the server. @@ -1947,10 +2348,12 @@ Veuillez confirmer si vous souhaitez procéder à ces suppressions. Vous pouvez également restaurer tous les fichiers supprimés en les téléchargeant depuis le serveur. + A new folder larger than %1 MB has been added: %2. Un nouveau dossier de taille supérieure à %1 Mo a été ajouté : %2. + Changes in synchronized folders could not be tracked reliably. This means that the synchronization client might not upload local changes immediately and will instead only scan for local changes and upload them occasionally (every two hours by default). @@ -1963,70 +2366,87 @@ Cela signifie que le client de bureau ne va pas téléverser immédiatement les %1 + Could not read system exclude file Impossible de lire le fichier d'exclusion du système + Keep syncing Continuer la synchronisation + Please choose a different location. %1 isn't a readable folder. Veuillez choisir un emplacement différent. %1 n'est pas un dossier lisible. + Please choose a different location. %1 isn't a valid folder. Veuillez choisir un emplacement différent. %1 n'est pas un dossier valide. + Please choose a different location. The folder %1 doesn't exist. Veuillez choisir un emplacement différent. Le dossier %1 n'existe pas. + Please go in the settings to select it if you wish to download it. Merci d'aller dans les Paramètres pour indiquer si vous souhaitez le télécharger. + Proceed with Deletion Procéder à la suppression + Remove all files? Supprimer tous les fichiers ? + Restore Files from Server Restaurer des fichiers à partir du serveur + Restore Files to Server Restaurer les fichiers sur le serveur + Stop syncing Arrêter la synchronisation + Sync Activity Activité de synchronisation + The file %1 was created but was excluded from synchronization previously. It will not be synchronized. Le fichier %1 a été créé mais il était exclu de la synchronisation auparavant. Il ne sera pas synchronisé. + The folder %1 has surpassed the set folder size limit of %2MB. Le dossier %1 a dépassé la taille limite fixée de %2 Mo. + The folder %1 was created but was excluded from synchronization previously. Data inside it will not be synchronized. Le dossier %1 a été créé mais il était exclu de la synchronisation auparavant. Les données qu'il contient ne seront pas synchronisées. + Virtual file download failed with code "%1", status "%2" and error message "%3" Le téléchargement du fichier virtuel a échoué avec le code « %1 », état « %2 » et le message d'erreur « %3 » + Would you like to stop syncing this folder? Voulez vous arrêter la synchronisation de ce dossier ? @@ -2034,26 +2454,32 @@ Cela signifie que le client de bureau ne va pas téléverser immédiatement les OCC::FolderCreationDialog + %1 Create new folder %1 Créer un nouveau dossier + Could not create a folder! Check your write permissions. Impossible de créer le dossier ! Veuillez vérifier vos permissions d’écriture. + + Error + Erreur + + + Create new folder Créer un nouveau dossier + Enter folder name Saisissez le nom du dossier - Error - Erreur - - + Folder already exists Le dossier existe déjà @@ -2061,108 +2487,136 @@ Cela signifie que le client de bureau ne va pas téléverser immédiatement les OCC::FolderMan + %1 (Sync is paused) %1 (Synchronisation en pause) + (backup %1) (sauvegarde %1) + (backup) (sauvegarde) + An old sync journal "%1" was found, but could not be removed. Please make sure that no application is currently using it. Un ancien fichier journal "%1" a été trouvé, mais ne peut être supprimé. Veuillez vous assurer qu’aucune application ne l'utilise en ce moment. + Could not reset folder state Impossible de réinitialiser l'état du dossier + Last sync was successful. Synchronisation terminée avec succès + Please choose a different location. %1 is already being used as a sync folder for %2. folder location, server url Veuillez choisir un emplacement différent. %1 est déjà utilisé comme dossier de synchronisation pour %2. + + Please choose a different location. %1 is already being used as a sync folder. Veuillez choisir un emplacement différent. %1 est déjà utilisé comme dossier de synchronisation. + Please choose a different location. %1 is already contained in a folder used as a sync folder. Veuillez choisir un emplacement différent. %1 est déjà contenu dans un dossier utilisé comme dossier de synchronisation. + Please choose a different location. The path %1 doesn't exist. Veuillez choisir un emplacement différent. Le chemin %1 n'existe pas. + Please choose a different location. The path %1 isn't a folder. Veuillez choisir un emplacement différent. Le chemin %1 n'est pas un dossier. + Please choose a different location. The selected folder isn't valid. Veuillez choisir un emplacement différent. Le dossier sélectionné n'est pas valide. + + Please choose a different location. You don't have enough permissions to write to %1. folder location Veuillez choisir un emplacement différent. Vous ne disposez pas d'autorisations suffisantes pour écrire dans %1. + Preparing for sync. Préparation de la synchronisation. + Setup error. Erreur de paramétrage. + Sync finished with unresolved conflicts. Synchronisation terminée avec des conflits non résolus. + Sync is paused. La synchronisation est en pause. + Sync is running. Synchronisation en cours + Sync request was cancelled. La requête de synchronisation a été annulée. + Syncing %1 Synchronisation de %1 + Syncing %1 (%2 left) Synchronisation de %1 (%2 restant⸱s) + Syncing %1 (A few seconds left) Synchronisation de %1 (il reste quelques secondes) + Syncing %1 of %2 Synchronisation de %1 sur %2 + Syncing %1 of %2 (%3 left) Synchronisation de %1 sur %2 (%3 restant⸱s) + Syncing %1 of %2 (A few seconds left) Synchronisation de %1 sur %2 (il reste quelques secondes) + The folder %1 is linked to multiple accounts. This setup can cause data loss and it is no longer supported. To resolve this issue: please remove %1 from one of the accounts and create a new sync folder. @@ -2173,10 +2627,12 @@ Pour résoudre ce problème: veuillez enlever %1 d'un des comptes et créer Pour les utilisateurs avancés: ce problème peut aussi venir de plusieurs fichiers de bases de données de synchronisation dans un seul dossier. Veuillez vérifier si %1 contient des fichiers .sync_*.db périmés ou inutilisés et supprimez-les. + Undefined state. Statut indéfini. + Waiting to start syncing. En attente de synchronisation. @@ -2184,14 +2640,17 @@ Pour les utilisateurs avancés: ce problème peut aussi venir de plusieurs fichi OCC::FolderStatusDelegate + Add Folder Sync Ajouter une synchronisation de dossiers + File Fichier + Synchronize any other local folder with your %1 Synchronisez n’importe quel autre dossier local avec votre %1 @@ -2199,113 +2658,141 @@ Pour les utilisateurs avancés: ce problème peut aussi venir de plusieurs fichi OCC::FolderStatusModel + %1 %2 Example text: "Uploading foobar.png" %1 %2 + %1 %2 (%3 of %4) Example text: "Uploading foobar.png (2MB of 2MB)" %1 %2 (%3 sur %4) + %1 %2 … Example text: "Uploading foobar.png (1MB of 2MB) time left 2 minutes at a rate of 24Kb/s" Example text: "Syncing 'foo.txt', 'bar.txt'" %1 %2 … + + %1 (%2) %1 (%2) + %1 of %2, file %3 of %4 Example text: "12 MB of 345 MB, file 6 of 7" %1 sur %2, fichier %3 sur %4 + %5 left, %1 of %2, file %3 of %4 %5 restantes, %1 sur %2, fichier %3 sur %4 + + , , + A few seconds left, %1 of %2, file %3 of %4 Example text: "5 minutes left, 12 MB of 345 MB, file 6 of 7" Quelques secondes restantes, %1 de %2, fichier %3 parmi %4 + About to start syncing Sur le point de démarrer la synchronisation + Checking for changes in local "%1" Vérification des modifications dans "%1" local + Checking for changes in remote "%1" Vérification des modifications dans "%1" distant + Click this button to add a folder to synchronize. Cliquez sur ce bouton pour ajouter un dossier à synchroniser. + Could not decrypt! Déchiffrage impossible ! + Download %1/s Example text: "Download 24Kb/s" (%1 is replaced by 24Kb (translated)) Télécharger %1/s + Error while loading the list of folders from the server. Une erreur est survenue lors du chargement de la liste des dossiers depuis le serveur. + Fetching folder list from server … Récupération de la liste des dossiers depuis le serveur... + File %1 of %2 Fichier %1 sur %2 + Preparing to sync … Préparation de la synchronisation ... + Signed out Session fermée + Synchronizing files in local folder Synchronisation des fichiers dans le dossier local + Synchronizing virtual files in local folder Synchronisation des fichiers virtuels dans le dossier local + Syncing local and remote changes Synchronisation des changements locaux et distants + There are unresolved conflicts. Click for details. Il y a des conflits non résolus. Cliquez pour plus de détails. + Upload %1/s Example text: "Upload 24Kb/s" (%1 is replaced by 24Kb (translated)) Téléverser %1/s + Virtual file support is enabled. Support des fichiers virtuels activé. + Waiting for %n other folder(s) … En attente de %n autre dossier ... @@ -2313,14 +2800,17 @@ Pour les utilisateurs avancés: ce problème peut aussi venir de plusieurs fichi + You need to be connected to add a folder Vous devez être connecté pour ajouter un dossier + ↑ %1/s ↑ %1/s + ↓ %1/s ↓ %1/s @@ -2328,6 +2818,7 @@ Pour les utilisateurs avancés: ce problème peut aussi venir de plusieurs fichi OCC::FolderWatcher + The watcher did not receive a test notification. L'observateur n'a pas reçu de notification de test. @@ -2335,6 +2826,7 @@ Pour les utilisateurs avancés: ce problème peut aussi venir de plusieurs fichi OCC::FolderWatcherPrivate + This problem usually happens when the inotify watches are exhausted. Check the FAQ for details. Ce problème survient généralement lorsque les points de surveillance inotify sont épuisés. Consultez la FAQ pour plus de détails. @@ -2342,10 +2834,12 @@ Pour les utilisateurs avancés: ce problème peut aussi venir de plusieurs fichi OCC::FolderWizard + Add Folder Sync Connection Ajouter une connexion de synchronisation de dossiers + Add Sync Connection Ajouter la synchronisation @@ -2353,30 +2847,37 @@ Pour les utilisateurs avancés: ce problème peut aussi venir de plusieurs fichi OCC::FolderWizardLocalPath + Add Folder Sync Ajouter une synchronisation de dossiers + Choose Choisissez + Click to select a local folder to sync. Cliquez pour choisir un dossier local à synchroniser. + Enter the path to the local folder. Entrez le chemin du dossier local. + Select a folder on your hard drive that should be permanetly connected to your %1. All files and subfolders are automatically uploaded and synchronized Sélectionnez sur votre disque dur un dossier qui doit être en permanence rattaché à votre %1. Tous les fichiers et sous-dossiers sont automatiquement importés et synchronisés. + Select the source folder Sélectionnez le dossier source + Step 1 of 3: Select local folder Étape 1 sur 3 : sélectionner un dossier local @@ -2384,58 +2885,74 @@ Pour les utilisateurs avancés: ce problème peut aussi venir de plusieurs fichi OCC::FolderWizardRemotePath + Add Folder Sync Ajouter une synchronisation de dossiers + Authentication failed accessing %1 Erreur d'authentification lors de l'accès à %1 + Both folders are permanently linked and the respective contents are automatically synchronized and updated. Les deux dossiers sont en permanence rattachés et leur contenu respectif est automatiquement synchronisé et importé. + Choose this to sync the entire account Sélectionnez ceci pour synchroniser l'ensemble du compte + Create Remote Folder Créer un dossier distant + Create folder Créer un dossier + Enter the name of the new folder to be created below "%1": Entrez le nom du nouveau dossier à créer dans "%1" : + Failed to create the folder on %1. Please check manually. Échec à la création du dossier sur %1. Veuillez vérifier manuellement. + Failed to list a folder. Error: %1 Impossible de lister un dossier. Erreur : %1 + Folder was successfully created on %1. Le dossier a été créé sur %1 + + + Please choose a different location. %1 is already being synced to %2. Veuillez choisir un emplacement différent. %1 est déjà synchronisé avec %2. + Please now select or create a target folder in your %1 where the content should be uploaded and synchronized. À présent, sélectionnez ou créez dans votre %1 un dossier cible dans lequel le contenu doit être importé et synchronisé. + Refresh Rafraîchir + Step 2 of 3: Directory in your %1 Étape 2 sur 3 : répertoire dans votre %1 @@ -2443,26 +2960,36 @@ Pour les utilisateurs avancés: ce problème peut aussi venir de plusieurs fichi OCC::FolderWizardSelectiveSync + + + (experimental) (expérimental) + Add Folder Sync Ajouter une synchronisation de dossiers + Step 3 of 3: Selektive Synchronisation Étape 3 sur 3 : synchronisation sélective + + + Use virtual files instead of downloading content immediately %1 Utiliser les fichiers virtuels %1 + Virtual files are not supported at the selected location Les fichiers virtuels ne sont pas pris en charge à l'emplacement sélectionné + Virtual files are not supported for Windows partition roots as local folder. Please choose a valid subfolder under drive letter. Vous ne pouvez pas définir la racine d'une partition Windows pour votre dossier local. Veuillez choisir un (sous)dossier de la partition. @@ -2470,22 +2997,7 @@ Pour les utilisateurs avancés: ce problème peut aussi venir de plusieurs fichi OCC::GeneralSettings - &Analysis data collection for needs-based design - &Collecte des données d’analyse pour une conception basée sur les besoins - - - &Automatically check for updates - &Vérifier automatiquement les mises à jour - - - &Launch on System Startup - &Lancer au démarrage du système - - - &Restart && Update - Redémarrer et Mettre à jour - - + - beta: contains versions with new features that may not be tested thoroughly - daily: contains versions created daily only for testing and development @@ -2497,6 +3009,7 @@ Downgrading versions is not possible immediately: changing from beta to stable m La rétrogradation des versions n'est pas possible immédiatement: passer de la version bêta à la version stable signifie attendre la nouvelle version stable. + - enterprise: contains stable versions for customers. Downgrading versions is not possible immediately: changing from stable to enterprise means waiting for the new enterprise version. @@ -2506,200 +3019,266 @@ Downgrading versions is not possible immediately: changing from stable to enterp La rétrogradation des versions n'est pas possible immédiatement: passer de stable à entreprise signifie attendre la nouvelle version d'entreprise. + + Cancel + Annuler + + + + Change update channel + Changer de canal de mise à jour + + + + Changing update channel? + Changement du canal de mise à jour ? + + + + Debug Archive Created + Archive de débogage créée + + + + Debug archive is created at %1 + Archive de débogage créée à %1 + + + + Server notifications that require attention. + Notifications du serveur requérant votre attention. + + + + Show call notification dialogs. + Montre les fenêtres de notification d'appel. + + + + The channel determines which upgrades will be offered to install: +- stable: contains tested versions considered reliable + + starts list of available update channels, stable is always available + Le canal détermine quelles mises à niveau seront proposées à l'installation: + - stable: contient des versions testées et considérées comme fiables + + + + + You cannot disable autostart because system-wide autostart is enabled. + Vous ne pouvez pas désactiver le démarrage automatique parce que le démarrage automatique à l'échelle du système est activé. + + + + Zip Archives + Archives Zip + + + + daily + quotidien + + + + enterprise + enterprise + + + + https://wl.hidrive.com/easy/0004 + https://wl.hidrive.com/easy/0024 + + + + https://wl.hidrive.com/easy/0005 + https://wl.hidrive.com/easy/0025 + + + + https://wl.hidrive.com/easy/0006 + https://wl.hidrive.com/easy/0006 + + + + https://wl.hidrive.com/easy/0007 + https://wl.hidrive.com/easy/0027 + + + + &Automatically check for updates + &Vérifier automatiquement les mises à jour + + + + &Launch on System Startup + &Lancer au démarrage du système + + + + &Restart && Update + Redémarrer et Mettre à jour + + + Advanced Avancés + Ask for confirmation before synchronizing external storages Confirmation avant de synchroniser des stockages externes + Ask for confirmation before synchronizing new folders larger than Demander la confirmation avant de synchroniser les dossiers plus grands que + Automatically disable synchronisation of folders that overcome limit Désactiver automatiquement la synchronisation des dossiers qui dépassent la limite - Cancel - Annuler - - - Change update channel - Changer de canal de mise à jour - - - Changing update channel? - Changement du canal de mise à jour ? - - + Check Now Vérifier maintenant + + Create Debug Archive Créer une archive de débogage + Data Protection Protection des données - Debug Archive Created - Archive de débogage créée - - - Debug archive is created at %1 - Archive de débogage créée à %1 - - + Desktop client x.x.x Client de bureau x.x.x + Edit &Ignored Files Modifier les fichiers exclus + For System Tray Pour la zone de notification système + General Settings Paramètres généraux + Legal Notice Mentions légales + MB Trailing part of "Ask confirmation before syncing folder larger than" Mo + More Information Plus d’informations + Move removed files to trash Déplacer les fichiers supprimés vers la corbeille + Necessary data Données indispensables + Notify when synchronised folders grow larger than specified limit Notifier lorsque les dossiers synchronisés dépassent la limite spécifiée + Open Source Software Logiciel libre + Privacy Policy Politique de confidentialité + Required to ensure that the software can be used as expected Nécessaire pour s'assurer que le logiciel peut être utilisé comme prévu + S&how crash reporter Affic&her le rapport d'incident + Send anonymous use Envoyer utilisation anonyme - Server notifications that require attention. - Notifications du serveur requérant votre attention. - - + Show Server &Notifications Afficher les &notifications serveur - Show call notification dialogs. - Montre les fenêtres de notification d'appel. - - + Show call notifications + Show sync folders in &Explorer's navigation pane Afficher les dossiers synchronisés dans le panneau de navigation de l'&Explorateur de fichiers - The channel determines which upgrades will be offered to install: -- stable: contains tested versions considered reliable - - starts list of available update channels, stable is always available - Le canal détermine quelles mises à niveau seront proposées à l'installation: - - stable: contient des versions testées et considérées comme fiables - - - + This helps us to optimize the software and to better identify system crashes and unexpected errors. Cela nous aide à optimiser le logiciel et à mieux identifier les pannes de système et les erreurs inattendues. + Update channel Canal de mise à jour + Updates Mises à jour + Usage Documentation Documentation d'utilisation + Use &monochrome icons - You cannot disable autostart because system-wide autostart is enabled. - Vous ne pouvez pas désactiver le démarrage automatique parce que le démarrage automatique à l'échelle du système est activé. - - - Zip Archives - Archives Zip - - + + beta bêta - daily - quotidien - - - enterprise - enterprise - - - https://wl.hidrive.com/easy/0004 - https://wl.hidrive.com/easy/0024 - - - https://wl.hidrive.com/easy/0005 - https://wl.hidrive.com/easy/0025 - - - https://wl.hidrive.com/easy/0006 - https://wl.hidrive.com/easy/0006 - - - https://wl.hidrive.com/easy/0007 - https://wl.hidrive.com/easy/0027 - - + + stable stable @@ -2707,22 +3286,27 @@ La rétrogradation des versions n'est pas possible immédiatement: passer d OCC::GETFileJob + Connection Timeout Délai d'attente de connexion dépassé + No E-Tag received from server, check Proxy/Gateway Aucun E-Tag reçu du serveur, vérifiez le proxy / la passerelle + Server returned wrong content-range Le serveur a retourné une gamme de contenu erronée + We received a different E-Tag for resuming. Retrying next time. Nous avons reçu un E-Tag différent pour reprendre le téléchargement. Nouvel essai la prochaine fois. + We received an unexpected download Content-Length. Nous avons reçu un téléchargement de Contenu-Longeur inattendu @@ -2730,6 +3314,7 @@ La rétrogradation des versions n'est pas possible immédiatement: passer d OCC::GetOrCreatePublicLinkShare + Could not retrieve or create the public link share. Error: %1 @@ -2738,14 +3323,17 @@ La rétrogradation des versions n'est pas possible immédiatement: passer d %1 + Password for share required Mot de passe requis + Please enter a password for your link share: Veuillez saisir un mot de passe pour votre lien partagé : + Sharing error Erreur de partage @@ -2753,18 +3341,22 @@ La rétrogradation des versions n'est pas possible immédiatement: passer d OCC::HttpCredentialsGui + <a href="%1">Click here</a> to request an app password from the web interface. <a href="%1">Cliquez ici</a> pour demander un mot de passe d'application depuis l'interface web. + Enter Password Saisissez le mot de passe + Please enter %1 password:<br><br>Username: %2<br>Account: %3<br> Merci de saisir %1 mot de passe :<br><br>Identifiant : %2<br>Compte : %3<br> + Reading from keychain failed with error: "%1" La lecture à partir du trousseau a échoué avec l'erreur : "%1" @@ -2772,49 +3364,50 @@ La rétrogradation des versions n'est pas possible immédiatement: passer d OCC::IgnoreListEditor + + This entry is provided by the system at "%1" and cannot be modified in this view. + Cette entrée est fournie par le système dans "%1" et ne peut être modifiée dans cette vue. + + + Files Ignored by Patterns Fichiers ignorés par modèles + Global Ignore Settings Paramètres globaux d'exclusion + Ignored Files Editor Éditeur d'exclusion de fichiers + Sync hidden files Synchroniser les fichiers cachés - - This entry is provided by the system at "%1" and cannot be modified in this view. - Cette entrée est fournie par le système dans "%1" et ne peut être modifiée dans cette vue. - - + OCC::IgnoreListTableWidget - Add - Ajouter - - + Add a new ignore pattern: Ajouter un nouveau motif d'exclusion: - Allow Deletion - Autoriser la suppression - - + Cannot write changes to "%1". Impossible d'écrire les modifications sur "%1". + Could not open file Impossible d'ouvrir le fichier + Files or folders matching a pattern will not be synchronized. Items where deletion is allowed will be deleted if they prevent a directory from being removed. This is useful for meta data. @@ -2823,18 +3416,32 @@ Items where deletion is allowed will be deleted if they prevent a directory from Les objets autorisés à être supprimés le seront s'ils empêchent la suppression d'un dossier. Ceci est utile pour les métadonnées. + Ignore Pattern Ignorer le modèle + + Add + Ajouter + + + + Allow Deletion + Autoriser la suppression + + + Pattern Modèle + Remove Retirer + Remove all Tout retirer @@ -2842,117 +3449,146 @@ Les objets autorisés à être supprimés le seront s'ils empêchent la sup OCC::InvalidFilenameDialog + Cannot rename file because a file with the same name does already exist on the server. Please pick another name. Impossible de renommer le fichier parce qu'un fichier avec le même nom existe déjà sur le serveur. Merci de choisir un autre nom. + Checking rename permissions … Vérification des permissions de renommage... + Could not rename file. Please make sure you are connected to the server. Impossible de renommer le fichier. Veuillez vous certifier que vous êtes bien connecté au serveur. + Could not rename local file. %1 Impossible de renommer le dossier local %1 - Error - Erreur - - + Failed to fetch permissions with error %1 Erreur à la récupération des permissions : %1 + Filename contains illegal characters: %1 Le nom du fichier contiens des caractères illégaux: %1 + Filename contains leading and trailing spaces. Le nom de fichier contient des espaces en début ou en fin de chaîne. + Filename contains leading spaces. Le nom du fichier contient des espaces au début. + Filename contains trailing spaces. Le nom de fichier contient des espaces à la fin. - Invalid filename - Nom de fichier invalide - - - New filename - Nouveau nom de fichier - - - Please enter a new name for the file: - Veuillez saisir le nouveau nom du fichier : - - + Rename file Renommer le fichier + The file "%1" could not be synced because the name contains characters which are not allowed on the server. Le fichier "%1" n'a pas pu être synchronisé, car le nom contient des caractères qui ne sont pas autorisés sur le serveur. + The file "%1" could not be synced because the name contains characters which are not allowed on this system. Le fichier "%1" n'a pas pu être synchronisé car son nom contient des caractères qui ne sont pas autorisés sur ce système. - The file could not be synced because it contains characters which are not allowed on this system. - Le fichier n'a pas pu être synchronisé parce qu'il contiens des caractères invalides ou non-supportés par votre système. - - + The following basenames are not allowed: %1 Les noms de base suivants de fichiers ne sont pas autorisés : %1 + The following characters are not allowed on the system: \ / : ? * " < > | leading/trailing spaces Les caractères suivants ne sont pas autorisés sur ce système : \ / : ? * " < > | espaces en début et fin de chaîne + The following characters are not allowed: %1 Les caractères suivants ne sont pas autorisés : %1 + The following file extensions are not allowed: %1 Les extensions de fichiers suivantes ne sont pas autorisées : %1 + The following filenames are not allowed: %1 Les noms de fichiers suivants ne sont pas autorisés : %1 + Use invalid name Nom invalide + You don't have the permission to rename this file. Please ask the author of the file to rename it. Vous n'avez pas la permission de renommer ce fichier. Veuillez demander à son auteur de le renommer. - + + + Error + Erreur + + + + Invalid filename + Nom de fichier invalide + + + + New filename + Nouveau nom de fichier + + + + Please enter a new name for the file: + Veuillez saisir le nouveau nom du fichier : + + + + The file could not be synced because it contains characters which are not allowed on this system. + Le fichier n'a pas pu être synchronisé parce qu'il contiens des caractères invalides ou non-supportés par votre système. + + OCC::LegalNotice + <p>Copyright 2017-2025 Nextcloud GmbH<br />Copyright 2012-2023 ownCloud GmbH</p> <p>Copyright 2017-2025 Nextcloud GmbH<br />Copyright 2012-2023 ownCloud GmbH</p> + <p>Licensed under the GNU General Public License (GPL) Version 2.0 or any later version.</p> <p>Sous licence GNU General Public License (GPL) Version 2.0 ou supérieure.</p> + Close Fermer + + Legal notice Notice légale @@ -2960,18 +3596,22 @@ Les objets autorisés à être supprimés le seront s'ils empêchent la sup OCC::LogBrowser + Enable logging to temporary folder Activer la journalisation dans le dossier temporaire + Log Output Consigner la sortie dans des fichiers de log + Open folder Ouvrir le dossier + The client can write debug logs to a temporary folder. These logs are very helpful for diagnosing problems. Since log files can get large, the client will start a new one for each sync run and compress older ones. It will also delete log files after a couple of hours to avoid consuming too much disk space. If enabled, logs will be written to %1 @@ -2980,6 +3620,7 @@ Comme ces fichiers de log peuvent devenir lourds, le client en commence un nouve Si activés, les logs seront écrits dans %1 + This setting persists across client restarts. Note that using any logging command line options will override this setting. Ce paramètre persiste lors des redémarrages du client. @@ -2989,10 +3630,14 @@ Notez que l'utilisation de toute option de ligne de commande de journalisat OCC::Logger + + <nobr>File "%1"<br/>cannot be opened for writing.<br/><br/>The log output <b>cannot</b> be saved!</nobr> <nobr>Le fichier "%1"<br/>ne peut pas être ouvert en écriture.<br/><br/>Le fichier journal <b>ne peut pas</b> être sauvegardé !</nobr> + + Error Erreur @@ -3000,26 +3645,32 @@ Notez que l'utilisation de toute option de ligne de commande de journalisat OCC::Mac::FileProviderEditLocallyJob + An error occurred during setup. Une erreur est survenue pendant l'installation + Could not find a file for local editing. Make sure its path is valid and it is synced locally. Impossible de trouver un fichier à modifier localement. Assurez-vous que son chemin est valide et qu'il est synchronisé localement. + Could not get file ID. Impossible d'obtenir l'identifiant du fichier. + Could not get file identifier. Impossible d'obtenir l'identifiant du fichier. + Could not start editing locally. Impossible de démarrer l'édition locale. + The file identifier is empty. L'identifiant du fichier est vide. @@ -3027,121 +3678,157 @@ Notez que l'utilisation de toute option de ligne de commande de journalisat OCC::NetworkSettings - Download Bandwidth - Bande passante de réception - - + HTTP(S) proxy Proxy HTTP(S) - Host - Hôte - - + Hostname of proxy server Nom d'hôte du serveur proxy + + Password for proxy server + Mot de passe pour le serveur proxy + + + + SOCKS5 proxy + Proxy SOCKS5 + + + + Username for proxy server + Nom d’utilisateur pour le serveur proxy + + + + Download Bandwidth + Bande passante de réception + + + + Host + Hôte + + + + KBytes/s Ko/s + + Limit automatically Limiter automatiquement + + Limit to Limiter à + + Limit to 3/4 of estimated bandwidth Limiter aux 3/4 de la bande passante estimée + Manually specify proxy Spécifier manuellement le serveur proxy + + No limit Aucune limite + No proxy Aucun serveur proxy + Note: proxy settings have no effects for accounts on localhost Remarque: les paramètres de proxy n'ont aucun effet sur les comptes sur localhost - Password for proxy server - Mot de passe pour le serveur proxy - - + Proxy Settings Paramètres de serveur proxy + Proxy server requires authentication Le serveur proxy requiert une authentification - SOCKS5 proxy - Proxy SOCKS5 - - + Upload Bandwidth Bande passante d'émission + + + Use global settings Utiliser les paramètres globaux + Use system proxy Utiliser les paramètres du système - - Username for proxy server - Nom d’utilisateur pour le serveur proxy - - + OCC::NSISUpdater + <p>A new version of the %1 Client is available but the updating process failed.</p><p><b>%2</b> has been downloaded. The installed version is %3. If you confirm restart and update, your computer may reboot to complete the installation.</p> <p>Une nouvelle version du Client %1 est disponible mais la mise à jour a échoué.</p><p><b>%2</b> a été téléchargé. La version installée est %3. Si vous confirmez le redémarrage et la mise à jour, votre ordinateur peut redémarrer pour terminer l'installation.</p> + <p>A new version of the %1 Client is available.</p><p><b>%2</b> is available for download. The installed version is %3.</p> <p>Une nouvelle version du client %1 est disponible.</p><p><b>%2</b> est disponible en téléchargement. La version actuellement installée est %3.<p> + Ask again later Demander plus tard + Get update Télécharger la version + New Version Available Nouvelle version disponible + Restart and update Redémarrer et mettre à jour + Skip this time Ignorer pour cette fois + Update Failed Échec de mise à jour + Update manually Mettre à jour manuellement @@ -3149,54 +3836,67 @@ Notez que l'utilisation de toute option de ligne de commande de journalisat OCC::OCUpdater + %1 available. Restart application to start the update. %1 disponible. Redémarrez l'application pour effectuer la mise à jour. + A new update for %1 is about to be installed. The updater may ask for additional privileges during the process. Your computer may reboot to complete the installation. Une nouvelle mise à jour pour %1 est sur le point d'être installée. Le dispositif de mise à jour peut demander des autorisations supplémentaires au cours du processus. Votre ordinateur peut nécessiter un redémarrage pour terminer l'installation. + Checking update server … Vérification du serveur de mises à jour ... + Could not check for new updates. Impossible de vérifier la présence de nouvelles mises à jour. + Could not download update. Please open %1 to download the update manually. Impossible de télécharger la mise à jour. Ouvrez %1 pour télécharger manuellement la mise à jour. + Could not download update. Please open <a href='%1'>%1</a> to download the update manually. Impossible de télécharger la mise à jour. Merci d'ouvrir <a href='%1'>%1</a> pour télécharger la mise à jour manuellement. + Downloading %1 … Téléchargement de %1 … + New %1 is available. Please open %2 to download the update. Un nouveau %1 est disponible. Merci d'ouvrir %2 pour télécharger la mise à jour. + New %1 is available. Please open <a href='%2'>%2</a> to download the update. Un nouveau %1 est disponible. Merci d'ouvrir <a href='%2'>%2</a> pour télécharger la mise à jour. + New %1 update ready Une nouvelle mise à jour de %1 est disponible + No updates available. Your installation is at the latest version. Aucune mise à jour disponible. Votre installation est à jour. + Update Check Recherche de mise à jour + Update status is unknown: Did not check for new updates. L'état du processus de mise à jour est inconnu. Impossible de vérifier la présence de mises à jour. @@ -3204,55 +3904,72 @@ Notez que l'utilisation de toute option de ligne de commande de journalisat OCC::OwncloudAdvancedSetupPage + %1 folder "%2" is synced to local folder "%3" Le dossier %1 "%2" est synchronisé avec le dossier local "%3". + + %1 free space %1 gets replaced with the size and a matching unit. Example: 3 MB or 5 GB espace libre %1 + + (%1) (%1) + + (experimental) (expérimental) + Connect Connexion + In Finder's "Locations" sidebar section Dans la section « Emplacements » de la barre latérale du Finder + Local Sync Folder Dossier de synchronisation local + Sync the folder "%1" Synchroniser le dossier "%1" + There isn't enough free space in the local folder! L'espace libre dans le dossier local est insuffisant ! + + Use &virtual files instead of downloading content immediately %1 Utiliser les fichiers virtuels plutôt que de télécharger le contenu immédiatement %1 + Virtual files are not supported at the selected location Les fichiers virtuels ne sont pas pris en charge à l'emplacement sélectionné + Virtual files are not supported for Windows partition roots as local folder. Please choose a valid subfolder under drive letter. Les fichiers virtuels ne sont pas pris en charge pour les racines de partition Windows en tant que dossier local. Veuillez choisir un sous-dossier valide sous la lettre du lecteur. + Warning: The local folder is not empty. Pick a resolution! Avertissement : Le dossier local n'est pas vide. Choisissez une option. @@ -3260,26 +3977,32 @@ Notez que l'utilisation de toute option de ligne de commande de journalisat OCC::OwncloudConnectionMethodDialog + <html><head/><body><p>Failed to connect to the secure server address <em>%1</em>. How do you wish to proceed?</p></body></html> <html><head/><body><p>Impossible de se connecter à l'adresse sécurisée <em>%1</em>. Que souhaitez-vous faire ?</p></body></html> + <html><head/><body><p>Failed to connect to the secure server address specified. How do you wish to proceed?</p></body></html> <html><head/><body><p>Impossible de se connecter au serveur via l'adresse sécurisée indiquée. Que souhaitez-vous faire ?</p></body></html> + Configure client-side TLS certificate Configurer le certificat TLS client + Connection failed Échec de la connexion + Retry unencrypted over HTTP (insecure) Essayer en clair sur HTTP (non sécurisé) + Select a different URL Choisir une URL différente @@ -3287,71 +4010,88 @@ Notez que l'utilisation de toute option de ligne de commande de journalisat OCC::ownCloudGui + %1 (%2, %3) %1 (%2, %3) + %1: %2 Example text: "Nextcloud: Syncing 25MB (3 minutes left)" (%1 is the folder name to be synced, %2 a status message for that folder) %1: %2 + Account %1: %2 Compte %1 : %2 + Account synchronization is disabled La synchronisation est en pause + Checking for changes in local "%1" Vérification des modifications dans "%1" local + Checking for changes in remote "%1" Vérification des modifications dans "%1" distant + Disconnected from %1 Déconnecté de %1 + Disconnected from accounts: Déconnecté des comptes : + Please sign in Veuillez vous connecter + Terms of service Conditions d'utilisation + The server on account %1 runs an unsupported version %2. Using this client with unsupported server versions is untested and potentially dangerous. Proceed at your own risk. Le serveur sur le compte %1 fonctionne avec une version non-supportée %2. Utiliser ce client avec des versions non-supportées du serveur n'est pas testé et est potentiellement dangereux. Procédez à vos risques et périls. + There are no sync folders configured. Aucun dossier à synchroniser n'est configuré + Unsupported Server Version Version du Serveur non prise en charge + Your account %1 requires you to accept the terms of service of your server. You will be redirected to %2 to acknowledge that you have read it and agrees with it. Votre compte %1 vous demande d'accepter les conditions générales d'utilisation de votre serveur. Vous serez redirigé vers %2 pour confirmer que vous l'avez lu et que vous l'acceptez. + macOS VFS for %1: A problem was encountered. macOS VFS pour %1: Une erreur est survenue. + macOS VFS for %1: Last sync was successful. macOS VFS pour %1: La dernière synchronisation a réussi. + macOS VFS for %1: Sync is running. macOS VFS pour %1: Synchronisation en cours. @@ -3359,14 +4099,17 @@ Notez que l'utilisation de toute option de ligne de commande de journalisat OCC::OwncloudHttpCredsPage + &Email &Adresse mail + Connect to %1 Connexion à %1 + Enter user credentials Saisissez les identifiants de connexion de l'utilisateur @@ -3374,6 +4117,8 @@ Notez que l'utilisation de toute option de ligne de commande de journalisat OCC::OwncloudPropagator + + Impossible to get modification time for file in conflict %1 Impossible de récupérer la date de modification du fichier en conflit %1 @@ -3381,18 +4126,22 @@ Notez que l'utilisation de toute option de ligne de commande de journalisat OCC::OwncloudSetupPage + &Next > &Suivant > + Could not load certificate. Maybe wrong password? Impossible de charger le certificat. Vérifiez le mot de passe saisi. + Server address does not seem to be valid L'adresse du serveur ne semble pas être valide + The link to your %1 web interface when you open it in the browser. %1 will be replaced with the application name Adresse URL visible dans la barre d'adresse de votre navigateur Web lorsque vous êtes connecté à %1. @@ -3401,118 +4150,149 @@ Notez que l'utilisation de toute option de ligne de commande de journalisat OCC::OwncloudSetupWizard + <font color="green"><b>File Provider-based account %1 successfully created!</b></font> <font color="green"><b> Compte basé sur un fournisseur de fichiers %1 créé avec succès ! </b></font> + <font color="green"><b>Local sync folder %1 successfully created!</b></font> <font color="green"><b>Dossier de synchronisation local %1 créé avec succès !</b></font> + <font color="green">Successfully connected to %1: %2 version %3 (%4)</font><br/><br/> <font color="green">Connecté avec succès à %1 : %2 version %3 (%4)</font><br/><br/> + <p><font color="red">Remote folder creation failed probably because the provided credentials are wrong.</font><br/>Please go back and check your credentials.</p> <p><font color="red">La création du dossier distant a échoué, probablement parce que les informations d'identification fournies sont fausses.</font><br/>Veuillez revenir en arrière et les vérifier.</p> + A sync connection from %1 to remote directory %2 was set up. Une synchronisation entre le dossier local %1 et le dossier distant %2 a été configurée. + Access forbidden by server. To verify that you have proper access, <a href="%1">click here</a> to access the service with your browser. Accès impossible. Afin de vérifier l'accès au serveur, <a href="%1">cliquez ici</a> et connectez-vous au service avec votre navigateur web. + Cannot remove and back up the folder because the folder or a file in it is open in another program. Please close the folder or file and hit retry or cancel the setup. Impossible de supprimer et sauvegarder le dossier parce que le dossier ou un fichier qu'il contient est ouvert dans un autre programme. Merci de fermer le dossier ou le fichier et recommencer ou annuler la configuration. + Connection to %1 could not be established. Please check again. La connexion à %1 n'a pu être établie. Veuillez réessayer. + Could not create local folder %1 Impossible de créer le dossier local %1 + Creating local sync folder %1 … Création du dossier local de synchronisation %1 ... + Error: %1 Erreur : %1 + Failed to connect to %1 at %2:<br/>%3 Échec de la connexion à %1 sur %2 :<br/>%3 + Folder rename failed Echec du renommage du dossier + Invalid URL URL invalide + Local sync folder %1 already exists, setting it up for sync.<br/><br/> Le dossier de synchronisation local %1 existe déjà, configuration de la synchronisation.<br/><br/> + No remote folder specified! Aucun dossier distant spécifié ! + OK OK + Remote folder %1 created successfully. Le dossier distant %1 a été créé avec succès. + + Remote folder %1 creation failed with error <tt>%2</tt>. La création du dossier distant "%1" a échouée avec l'erreur <tt>%2</tt>. + Successfully connected to %1! Connecté avec succès à %1 ! + The authenticated request to the server was redirected to "%1". The URL is bad, the server is misconfigured. La demande authentifiée au serveur a été redirigée vers "%1". L'URL est mauvaise, le serveur est mal configuré. + + The folder creation resulted in HTTP error code %1 La création du dossier a généré le code d'erreur HTTP %1 + The remote folder %1 already exists. Connecting it for syncing. Le dossier distant %1 existe déjà. Connexion. + The remote folder creation failed because the provided credentials are wrong!<br/>Please go back and check your credentials.</p> La création du dossier distant a échoué car les identifiants de connexion sont erronés !<br/>Veuillez revenir en arrière et vérifier ces derniers.</p> + There was an invalid response to an authenticated WebDAV request Il y a eu une réponse invalide à une demande WebDAV authentifiée + Timeout while trying to connect to %1 at %2. Délai d'attente dépassé lors de la connexion à %1 sur %2. + Trying to connect to %1 at %2 … Tentative de connexion à %1 sur %2 ... + creating folder on Nextcloud: %1 Création du dossier sur Nextcloud : %1 + failed. échoué. @@ -3520,30 +4300,37 @@ Notez que l'utilisation de toute option de ligne de commande de journalisat OCC::OwncloudWizard + Add %1 account Ajout du compte %1 + Cancel Annuler + Enable experimental feature? Activer la fonction expérimentale ? + Enable experimental placeholder mode Activer la fonction expérimentale de fichiers virtuels ? + Skip folders configuration Ignorer la configuration des dossiers + Stay safe Restez en sécurité + When the "virtual files" mode is enabled no files will be downloaded initially. Instead, a tiny "%1" file will be created for each file that exists on the server. The contents can be downloaded by running these files or by using their context menu. The virtual files mode is mutually exclusive with selective sync. Currently unselected folders will be translated to online-only folders and your selective sync settings will be reset. @@ -3563,10 +4350,12 @@ Il s'agit d'un nouveau mode expérimental. Si vous décidez de l' OCC::PasswordInputDialog + Password for share required Mot de passe requis pour le partage + Please enter a password for your share: Veuillez saisir un mot de passe pour votre partage : @@ -3574,6 +4363,7 @@ Il s'agit d'un nouveau mode expérimental. Si vous décidez de l' OCC::PollJob + Invalid JSON reply from the poll URL L'URL de sondage a renvoyé une réponse JSON non valide @@ -3581,165 +4371,210 @@ Il s'agit d'un nouveau mode expérimental. Si vous décidez de l' OCC::ProcessDirectoryJob + %1 name containing the character "%2" is not supported on this file system. folder or file impossible to sync due to an invalid name, placeholders will be file or folder and the invalid character Le nom %1 contenant le caractère « %2 » n’est pas supporté sur ce système de fichiers. + %1 name contains at least one invalid character Le nom %1 contient au moins un caractère invalide + %1 name is a reserved name on this file system. Le nom %1 est un nom réservé sur ce système de fichiers. + + + + Cannot be renamed or uploaded. Ne peut être renommé ou téléversé. + Cannot modify encrypted item because the selected certificate is not valid. Impossible de modifier l'élément chiffré car le certificat sélectionné n'est pas valide. + Cannot sync due to invalid modification time Impossible de synchroniser à cause d'une date de modification invalide + Case Clash Conflict: Server file downloaded and renamed to avoid clash. Conflit de casse : fichier serveur téléchargé et renommé pour éviter le conflit. + Conflict: Server version downloaded, local copy renamed and not uploaded. Conflit : la version du serveur a été téléchargée, la version locale a été renommée, mais pas téléversée. + Could not upload file, because it is open in "%1". Impossible de téléverser le fichier, car il est ouvert dans « %1 ». + Error while deleting file record %1 from the database Erreur à la suppression de l'enregistrement du fichier %1 de la base de données + Error while reading the database Erreur de lecture de la base de données + File name of folder entity to use when warning about invalid name Fichier + File has extension reserved for virtual files. Le fichier a une extension réservée pour les fichiers virtuels. + File is listed on the ignore list. Le fichier est présent dans la liste des fichiers exclus. + File names ending with a period are not supported on this file system. Les noms de fichier se terminant par un point ne sont pas pris en charge sur votre système. + File/Folder is ignored because it's hidden. Le fichier/dossier est exclu, car il est caché. + Filename contains leading and trailing spaces. Nom de fichier contenant des espaces au début et à la fin. + Filename contains leading spaces. Nom de fichier contenant des espaces au début. + Filename contains trailing spaces. Le nom du fichier finit par des espaces. + Filename is too long. Le nom du fichier est trop long. + Folder name of folder entity to use when warning about invalid name Dossier + Ignored because of the "choose what to sync" blacklist Exclus en raison de la liste noire "Sélectionner le contenu à synchroniser". + + Moved to invalid target, restoring Déplacé vers une cible invalide, restauration + Not allowed because you don't have permission to add files in that folder Non autorisé car vous n'avez pas la permission d'ajouter des fichiers dans ce dossier + + Not allowed because you don't have permission to add subfolders to that folder Non autorisé car vous n'avez pas la permission d'ajouter des sous-dossiers dans ce dossier + Not allowed to remove, restoring Suppression non autorisée, restauration en cours + Not allowed to upload this file because it is read-only on the server, restoring Non autorisé à téléverser ce fichier, car il est en lecture seule sur le serveur, restauration en cours + Reason: the entire filename is forbidden. Motif : le nom de fichier entier est interdit. + Reason: the file has a forbidden extension (.%1). Motif : le fichier a une extension interdite (.%1). + Reason: the filename contains a forbidden character (%1). Motif : le nom du fichier contient un caractère interdit (%1). + Reason: the filename has a forbidden base name (filename start). Motif : le nom de fichier a un nom de base interdit (début du nom de fichier). + Server replied with an error while reading directory "%1" : %2 Le serveur a répondu avec une erreur lors de la lecture du dossier "%1" : %2 + Server reported no %1 Le serveur n'a signalé aucun %1 + Stat failed. Stat échoué. + Symbolic links are not supported in syncing. Les liens symboliques ne sont pas pris en charge par la synchronisation. + The filename cannot be encoded on your file system. Le nom de fichier ne peut pas être encodé sur votre système de fichiers. + The filename is blacklisted on the server. Le nom du fichier est sur la liste noire du serveur. + file id ID du fichier + permission permission + size taille @@ -3747,26 +4582,38 @@ Il s'agit d'un nouveau mode expérimental. Si vous décidez de l' OCC::PropagateDirectory + Could not delete file %1 from local DB Impossible de supprimer le fichier %1 de la base de données locale + Error updating metadata due to invalid modification time Erreur de mise à jour des métadonnées à cause d'une date de modification invalide + Error updating metadata: %1 Erreur lors de la mise à jour des métadonnées : %1 + File is currently in use Le fichier est actuellement en cours d'utilisation + + + + + + The folder %1 cannot be made read-only: %2 Le dossier %1 ne peut pas être mis en lecture seule : %2 + + unknown exception Exception inconnue @@ -3774,58 +4621,75 @@ Il s'agit d'un nouveau mode expérimental. Si vous décidez de l' OCC::PropagateDownloadFile + + Could not delete file record %1 from local DB Impossible de supprimer l'enregistrement du fichier %1 depuis la base de données locale + Could not get file %1 from local DB Impossible de récupérer le fichier %1 depuis la base de données locale + Error updating metadata: %1 Erreur lors de la mise à jour des métadonnées : %1 + File %1 can not be downloaded because of a local file name clash! Le fichier %1 ne peut pas être téléchargé en raison d'un conflit sur le nom de fichier local. + File %1 cannot be downloaded because encryption information is missing. Le fichier %1 ne peut pas être téléchargé car les informations de chiffrement sont manquantes. + File %1 downloaded but it resulted in a local file name clash! Fichier %1 téléchargé, mais a abouti à un conflit de casse du nom de fichier local ! + + File %1 has invalid modified time reported by server. Do not save it. Le fichier %1 présente une date de modification invalide sur le serveur. Enregistrement impossible. + + File has changed since discovery Le fichier a changé depuis sa découverte + File was deleted from server Le fichier a été supprimé du serveur + Free space on disk is less than %1 Il y a moins de %1 d'espace libre sur le disque + The download would reduce free local disk space below the limit Le téléchargement réduira l'espace disque libre en dessous de la limite + The downloaded file is empty, but the server said it should have been %1. Le fichier téléchargé est vide bien que le serveur indique que sa taille devrait être de %1. + The file %1 is currently in use Le fichier %1 est en cours d'utilisation + The file could not be downloaded completely. Le fichier n'a pas pu être téléchargé intégralement. @@ -3833,10 +4697,12 @@ Il s'agit d'un nouveau mode expérimental. Si vous décidez de l' OCC::PropagateItemJob + ; Restoration Failed: %1 ; Échec de la restauration : %1 + A file or folder was removed from a read only share, but restoring failed: %1 Un fichier ou un dossier a été supprimé d'un partage en lecture seule, mais la restauration a échoué : %1 @@ -3844,30 +4710,39 @@ Il s'agit d'un nouveau mode expérimental. Si vous décidez de l' OCC::PropagateLocalMkdir + Could not create folder %1 Impossible de créer le dossier %1 + Error updating metadata: %1 Erreur lors de la mise à jour des métadonnées : %1 + Folder %1 cannot be created because of a local file or folder name clash! Le dossier %1 n'a pu être créé à cause d'un conflit local de nom de fichier ou de dossier ! + The file %1 is currently in use Le fichier %1 est en cours d'utilisation + + + The folder %1 cannot be made read-only: %2 Le dossier %1 ne peut être rendu en lecture seule : %2 + could not delete file %1, error: %2 impossible de supprimer le fichier %1. Erreur : %2 + unknown exception Exception inconnue @@ -3875,14 +4750,19 @@ Il s'agit d'un nouveau mode expérimental. Si vous décidez de l' OCC::PropagateLocalRemove + Could not delete file record %1 from local DB Impossible de supprimer l'enregistrement du fichier %1 depuis la base de données locale + Could not remove %1 because of a local file name clash Impossible de retirer %1 en raison d'un conflit de nom de fichier local + + + Temporary error when removing local item removed from server. Erreur temporaire lors de la suppression d'un élément local supprimé du serveur. @@ -3890,38 +4770,49 @@ Il s'agit d'un nouveau mode expérimental. Si vous décidez de l' OCC::PropagateLocalRename + Could not delete file record %1 from local DB Impossible de récupérer le fichier %1 depuis la base de données locale + + Could not get file %1 from local DB Impossible de récupérer le fichier %1 depuis la base de données locale + + Error setting pin state Erreur lors de la modification de l'état du fichier + Error updating metadata: %1 Erreur lors de la mise à jour des métadonnées : %1 + Failed to propagate directory rename in hierarchy Impossible de propager le renommage du dossier dans la hiérarchie + Failed to rename file Échec lors du changement de nom du fichier + File %1 downloaded but it resulted in a local file name clash! Fichier %1 téléchargé, mais a abouti à un conflit de casse du nom de fichier local ! + Folder %1 cannot be renamed because of a local file or folder name clash! Le dossier %1 ne peut pas être renommé en raison d’un conflit de nom avec un fichier ou un dossier local ! + The file %1 is currently in use Le fichier %1 est en cours d'utilisation @@ -3929,10 +4820,12 @@ Il s'agit d'un nouveau mode expérimental. Si vous décidez de l' OCC::PropagateRemoteDelete + Could not delete file record %1 from local DB Impossible de récupérer le fichier %1 depuis la base de données locale + Wrong HTTP code returned by server. Expected 204, but received "%1 %2". Le code HTTP retourné par le serveur n'est pas valide. La valeur attendue est 204 mais la valeur reçue est "%1 %2". @@ -3940,6 +4833,7 @@ Il s'agit d'un nouveau mode expérimental. Si vous décidez de l' OCC::PropagateRemoteDeleteEncryptedRootFolder + Wrong HTTP code returned by server. Expected 204, but received "%1 %2". Le code HTTP retourné par le serveur n'est pas valide. La valeur attendue est 204 mais la valeur retournée est "%1 %2". @@ -3947,18 +4841,22 @@ Il s'agit d'un nouveau mode expérimental. Si vous décidez de l' OCC::PropagateRemoteMkdir + Error writing metadata to the database: %1 Erreur d'écriture des métadonnées dans la base de données : %1 + Failed to encrypt a folder %1 Échec du chiffrement d'un dossier %1 + The file %1 is currently in use Le fichier %1 est en cours d'utilisation + Wrong HTTP code returned by server. Expected 201, but received "%1 %2". Le code HTTP retourné par le serveur n'est pas valide. La valeur attendue est 201 mais la valeur reçue est "%1 %2". @@ -3966,34 +4864,44 @@ Il s'agit d'un nouveau mode expérimental. Si vous décidez de l' OCC::PropagateRemoteMove + Could not delete file record %1 from local DB Impossible de récupérer le fichier %1 depuis la base de données locale + Could not get file %1 from local DB Impossible de récupérer le fichier %1 depuis la base de données locale + Could not rename %1 to %2, error: %3 Impossible de renommer %1 en %2, erreur: %3 + Error setting pin state Erreur lors de la modification de l'état du fichier + + Error updating metadata: %1 Erreur lors de la mise à jour des métadonnées : %1 + Error writing metadata to the database Erreur à l'écriture des métadonnées dans la base de données + + The file %1 is currently in use Le fichier %1 est en cours d'utilisation + Wrong HTTP code returned by server. Expected 201, but received "%1 %2". Le code HTTP retourné par le serveur n'est pas valide. La valeur attendue est 201 mais la valeur reçue est "%1 %2". @@ -4001,46 +4909,60 @@ Il s'agit d'un nouveau mode expérimental. Si vous décidez de l' OCC::PropagateUploadFileCommon + Error updating metadata: %1 Erreur lors de la mise à jour des métadonnées : %1 + Failed to unlock encrypted folder. Impossible de déverrouiller le dossier chiffré. + Failed to upload encrypted file. Échec de téléversement du fichier chiffré. + File %1 cannot be uploaded because another file with the same name, differing only in case, exists Impossible de téléverser le fichier %1 car un autre fichier de même nom existe, différent seulement par la casse. + + + File %1 has invalid modification time. Do not upload to the server. Le fichier %1 présente une heure de modification invalide. Ne téléversez pas sur le serveur. + File Removed (start upload) %1 Fichier supprimé (début du téléversement) %1 + Local file changed during sync. Fichier local modifié pendant la synchronisation. + Local file changed during syncing. It will be resumed. Fichier local modifié pendant la synchronisation. Elle va reprendre. + The file %1 is currently in use Le fichier %1 est en cours d'utilisation + Unable to upload an item with invalid characters Impossible de téléverser un élément contenant des caractères non valides + + Upload of %1 exceeds the quota for the folder L'envoi de %1 amène un dépassement de quota pour le dossier @@ -4048,26 +4970,32 @@ Il s'agit d'un nouveau mode expérimental. Si vous décidez de l' OCC::PropagateUploadFileNG + Local file changed during sync. Fichier local modifié pendant la synchronisation. + Missing ETag from server L'information Etag de modification de fichier est manquante sur le serveur + Missing File ID from server L'identifiant de fichier est manquant sur le serveur + Poll URL missing URL du sondage manquante + The local file was removed during sync. Fichier local supprimé pendant la synchronisation. + Unexpected return code from server (%1) Le serveur a retourné un code inattendu (%1) @@ -4075,18 +5003,22 @@ Il s'agit d'un nouveau mode expérimental. Si vous décidez de l' OCC::PropagateUploadFileV1 + Local file changed during sync. Fichier local modifié pendant la synchronisation. + Poll URL missing URL de sondage manquante + The local file was removed during sync. Fichier local supprimé pendant la synchronisation. + The server did not acknowledge the last chunk. (No e-tag was present) Le serveur n'a pas confirmé la réception du dernier morceau. (Aucun e-tag n'était présent). @@ -4094,22 +5026,27 @@ Il s'agit d'un nouveau mode expérimental. Si vous décidez de l' OCC::ProxyAuthDialog + Password: Mot de passe : + Proxy authentication required Authentification requise sur le proxy + Proxy: Proxy : + The proxy server needs a username and password. Le serveur proxy requiert un identifiant et un mot de passe. + Username: Nom d’utilisateur : @@ -4117,6 +5054,7 @@ Il s'agit d'un nouveau mode expérimental. Si vous décidez de l' OCC::SelectiveSyncDialog + Choose What to Sync Sélectionner le contenu à synchroniser @@ -4124,26 +5062,33 @@ Il s'agit d'un nouveau mode expérimental. Si vous décidez de l' OCC::SelectiveSyncWidget + An error occurred while loading the list of sub folders. Une erreur est survenue lors du chargement de la liste des sous-dossiers. + Deselect remote folders you do not wish to synchronize. Désélectionnez les sous-dossiers distants que vous ne souhaitez pas synchroniser. + Loading … Chargement… + Name Nom + + No subfolders currently on the server. Aucun sous-dossier sur le serveur. + Size Taille @@ -4151,6 +5096,7 @@ Il s'agit d'un nouveau mode expérimental. Si vous décidez de l' OCC::ServerNotificationHandler + Reply Répondre @@ -4158,14 +5104,17 @@ Il s'agit d'un nouveau mode expérimental. Si vous décidez de l' OCC::sesSnackBar + Error Erreur + Success Réussite + Warning Attention @@ -4173,27 +5122,33 @@ Il s'agit d'un nouveau mode expérimental. Si vous décidez de l' OCC::SettingsDialog + %1 Settings This name refers to the application name e.g Nextcloud Paramètres %1 + Account Compte + General Général + Network Réseau + New account Nouveau compte + Settings Paramètres @@ -4201,19 +5156,24 @@ Il s'agit d'un nouveau mode expérimental. Si vous décidez de l' OCC::ShareeModel + %1 (%2) sharee (shareWithAdditionalInfo) %1 (%2) + Global search results Résultats de la recherche globale + No results found Aucun résultat trouvé + + Search globally Rechercher globalement @@ -4221,6 +5181,7 @@ Il s'agit d'un nouveau mode expérimental. Si vous décidez de l' OCC::ShareManager + Error Erreur @@ -4228,38 +5189,47 @@ Il s'agit d'un nouveau mode expérimental. Si vous décidez de l' OCC::ShareModel + %1 days %1 jours + 1 day 1 jour + Could not find local folder for %1 Impossible de trouver le dossier local pour %1 + Internal link Lien interne + Link share Lien de partage + Secure file drop Dépôt de fichier sécurisé + Secure file drop link Lien de dépôt sécurisé de fichier + Share link Partager un lien + Today Aujourd'hui @@ -4267,22 +5237,28 @@ Il s'agit d'un nouveau mode expérimental. Si vous décidez de l' OCC::SocketApi + + Activity Activité + Context menu share Partage du menu contextuel + Copy internal link Copier le lien interne + Copy private link to clipboard Copier le lien privé dans le presse-papier + Could not encrypt the following folder: "%1". Server replied with error: %2 @@ -4291,18 +5267,22 @@ Server replied with error: %2 Le serveur a répondu avec l'erreur : %2 + Delete Supprimer + Delete local changes Supprimer les modifications locales + Encrypt Chiffrer + Expires in %1 minutes remaining time before lock expires @@ -4311,82 +5291,104 @@ Le serveur a répondu avec l'erreur : %2 + Failed to encrypt folder Échec du chiffrement du dossier + Failed to encrypt folder at "%1" Échec du chiffrement du dossier à "%1" + Folder encrypted successfully Dossier chiffré avec succès + I shared something with you J'ai partagé quelque chose avec vous + Leave this share Quitter ce partage + Lock file Verrouiller le fichier + Locked by %1 Verrouillé par %1 + Move and rename … Déplacer et renommer... + Move and upload … Déplacer et téléverser… + Move, rename and upload … Déplacer, renommer et téléverser… + + Open in browser Ouvrir dans le navigateur + Resharing this file is not allowed Repartager ce fichier est interdit + Resharing this folder is not allowed Repartager ce dossier est interdit + Resolve conflict … Résoudre le conflit… + Select new location … Sélectionnez le nouvel emplacement ... + Send private link by email … Envoyer le lien privé par e-mail ... + + Share options Options de partage + The account %1 does not have end-to-end encryption configured. Please configure this in your account settings to enable folder encryption. Le compte %1 n'a pas de chiffrement de bout en bout configuré. Veuillez le configurer dans les paramètres de votre compte pour activer le chiffrement des dossiers. + The following folder was encrypted successfully: "%1" Le dossier suivant a été chiffré avec succès : "%1" + Unlock file Déverrouiller le fichier @@ -4394,98 +5396,122 @@ Le serveur a répondu avec l'erreur : %2 OCC::SslButton + %1 %1 + %1 (self-signed) %1 (auto-signé) + <h3>Certificate Details</h3> <h3>Détails du certificat</h3> + <h3>Fingerprints</h3> <h3>Empreintes numériques</h3> + <h3>Issuer</h3> <h3>Émetteur</h3> + <p><b>Note:</b> This certificate was manually approved</p> <p><b>Note :</b> Ce certificat a été approuvé manuellement</p> + Certificate information: Informations du certificat : + Common Name (CN): Nom commun (CN) : + Country: Pays : + Expires on: Expire le : + Issued on: Émis le : + Issuer: Émetteur : + No support for SSL session tickets/identifiers Identifiants/tickets de sessions SSL non pris en charge + Organization (O): Organisation (O) : + Organizational Unit (OU): Unité d'organisation (OU) : + SHA-1: SHA-1 : + SHA-256: SHA-256 : + Serial: Numéro de série : + Server version: %1 Version du serveur : %1 + State/Province: État/Région : + Subject Alternative Names: Noms alternatifs du sujet : + The connection is not secure La connexion n'est pas sécurisée + This connection is NOT secure as it is not encrypted. Cette connexion n'est PAS sécurisée car elle n'est pas chiffrée. + This connection is encrypted using %1 bit %2. Cette connexion est chiffrée en utilisant %1 bit %2. @@ -4493,122 +5519,156 @@ Le serveur a répondu avec l'erreur : %2 OCC::SslErrorDialog + + + &lt;not specified&gt; &lt;non spécifié&gt; + Additional errors: Erreurs supplémentaires : + Cannot connect securely to <i>%1</i>: Impossible de se connecter de manière sécurisée à <i>%1</i> : + + Country: %1 Pays : %1 + Effective Date: %1 Date de début de validité : %1 + Expiration Date: %1 Date d'expiration : %1 + Fingerprint (SHA-256): <tt>%1</tt> Empreinte (SHA-256): <tt>%1</tt> + Fingerprint (SHA-512): <tt>%1</tt> Empreinte (SHA-512): <tt>%1</tt> + Fingerprint (SHA1): <tt>%1</tt> Empreinte (SHA1) : <tt>%1</tt> + Issuer: %1 Émetteur : %1 + + Organization: %1 Organisation : %1 - Trust this certificate anyway - Faire confiance à ce certificat malgré tout - - + + Unit: %1 Unité : %1 + Untrusted Certificate Certificat non fiable + with Certificate %1 avec certificat %1 - + + + Trust this certificate anyway + Faire confiance à ce certificat malgré tout + + OCC::SyncEngine + %1 (skipped due to earlier error, trying again in %2) %1 (ignoré à cause d'une précédente erreur, nouvel essai dans %2) + Cannot open the sync journal Impossible d'ouvrir le journal de synchronisation + Could not set file record to local DB: %1 Impossible de définir l'enregistrement du fichier dans la base de données locale : %1 + Could not update file metadata: %1 Impossible de mettre à jour les métadonnées du fichier : %1 + Could not update file: %1 Impossible de mettre à jour le fichier : %1 + Could not update virtual file metadata: %1 Impossible de mettre à jour les métadonnées du fichier virutel : %1 + Disk space is low: Downloads that would reduce free space below %1 were skipped. L'espace disque est faible : les téléchargements qui amèneraient à réduire l'espace libre en dessous de %1 ont été ignorés. + Only %1 are available, need at least %2 to start Placeholders are postfixed with file sizes using Utility::octetsToString() Seulement %1 disponibles, il faut au moins %2 pour démarrer + There is insufficient space available on the server for some uploads. Il n'y a pas suffisamment d’espace disponible sur le serveur pour certains téléversements. + Unable to open or create the local sync database. Make sure you have write access in the sync folder. Impossible d'accéder ou de créer une base de données locale de synchronisation. Assurez vous de disposer des droits d'écriture dans le dossier de synchronisation. + Unable to read from the sync journal. Impossible de lire le journal de synchronisation. + Unable to read the blacklist from the local database Impossible de lire la liste noire de la base de données locale + Unresolved conflict. conflit non résolu. + Using virtual files with suffix, but suffix is not set Utilisation de fichiers virtuels avec suffixe, mais le suffixe n'est pas défini @@ -4616,54 +5676,70 @@ Le serveur a répondu avec l'erreur : %2 OCC::SyncStatusSummary + %1 of %2 %1 sur %2 + %1 of %2 · %3 left %1 sur %2 · %3 restants + + + All synced! Tout est synchronisé ! + Checking folder changes Vérification des modifications du dossier + + Offline Hors ligne + See below for errors Voir ci-dessous pour les erreurs + See below for warnings Voir ci-dessous pour les avertissements + Some files could not be synced! Certains fichiers n’ont pas pu être synchronisés ! + Some files couldn't be synced! Certains fichiers n’ont pas pu être synchronisés ! + Sync paused Synchronisation mise en pause + Syncing Synchronisation + Syncing changes Synchronisation des modifications + Syncing file %1 of %2 Synchronisation du fichier %1 sur %2 @@ -4671,42 +5747,54 @@ Le serveur a répondu avec l'erreur : %2 OCC::Systray + Add account Ajouter un compte + Download Télécharger + Exit %1 Quitter %1 + Help Aide + Open main dialog Ouvrir la boîte de dialogue principale + + Pause sync Suspendre la synchronisation + Pause sync for all Suspendre toutes les synchros + + Resume sync Relancer la synchro + Resume sync for all Relancer toutes les synchros + Settings Paramètres @@ -4714,22 +5802,27 @@ Le serveur a répondu avec l'erreur : %2 OCC::TermsOfServiceCheckWidget + Copy Link Copier le lien + Link copied to clipboard. Lien copié dans le presse-papiers. + Open Browser Ouvrir le navigateur + Polling Vote + Waiting for terms to be accepted En attente de l'acceptation des conditions @@ -4737,19 +5830,23 @@ Le serveur a répondu avec l'erreur : %2 OCC::Theme + %1 Desktop Client Version %2 (%3) %1 is application name. %2 is the human version string. %3 is the operating system name. %1 Version du client de bureau %2 (%3) + <p><small>Using virtual files plugin: %1</small></p> <p><small>Utilise l'extension de fichiers virtuels : %1</small></p> + <p>This release was supplied by %1.</p> <p>Cette version a été fournie par %1.</p> + easy/0118 easy/0128 @@ -4757,18 +5854,22 @@ Le serveur a répondu avec l'erreur : %2 OCC::UnifiedSearchResultsListModel + Failed to fetch providers. Échec de la récupération des fournisseurs. + Failed to fetch search providers for '%1'. Error: %2 Échec de la récupération des fournisseurs de recherche pour '%1'. Erreur : %2 + Search has failed for '%1'. Error: %2 La recherche de '%1' a échoué. Erreur: %2 + Search has failed for '%2'. La recherche de '%2' a échoué. @@ -4776,14 +5877,17 @@ Le serveur a répondu avec l'erreur : %2 OCC::UpdateE2eeFolderMetadataJob + Failed to finalize item. Échec de finalisation de l’élément. + Failed to unlock encrypted folder. Échec du déverrouillage du dossier chiffré. + Failed to update folder metadata. Échec du téléversement du dossier des métadonnées. @@ -4791,33 +5895,43 @@ Le serveur a répondu avec l'erreur : %2 OCC::UpdateE2eeFolderUsersMetadataJob + Could not add or remove user %1 to access folder %2 Impossible de supprimer l’utilisateur %1 au dossier d’accès %2 ou de l’y ajouter + Could not fetch public key for user %1 Impossible de récupérer la clé publique pour l'utilisateur %1 + Could not find root encrypted folder for folder %1 Impossible de trouver le dossier racine chiffré pour le dossier %1 + + + + + + + + + Error updating metadata for a folder %1 Erreur lors de la mise à jour des métadonnées pour un dossier %1 + Failed to unlock a folder. Échec du déverrouillage d’un dossier. OCC::User - - %1 notifications - %1 notifications - + %n notification(s) %n notification @@ -4825,30 +5939,38 @@ Le serveur a répondu avec l'erreur : %2 + End-to-end certificate needs to be migrated to a new one Le certificat de bout en bout doit être migré vers une nouvelle clé + Open Nextcloud Assistant in browser Ouvrir l'assistant Nextcloud dans le navigateur + Open Nextcloud Talk in browser Ouvrir Nextcloud Discussion dans le navigateur + Rename file Renommer le fichier + + Resolve conflict Résoudre le conflit + Retry all uploads Réessayer tous les téléversements + Trigger the migration Déclencher la migration @@ -4856,18 +5978,22 @@ Le serveur a répondu avec l'erreur : %2 OCC::UserModel + <p>Do you really want to remove the connection to the account <i>%1</i>?</p><p><b>Note:</b> This will <b>not</b> delete any files.</p> <p>Êtes-vous certain de vouloir retirer la connexion au compte <i>%1</i> ?</p><p><b>Note :</b> cette opération <b>ne supprimera aucun de vos fichiers</b> et ne supprimera pas non plus votre compte du serveur.</p> + Cancel Annuler + Confirm Account Removal Confirmer le retrait du compte + Remove connection Supprimer la connexion @@ -4875,6 +6001,7 @@ Le serveur a répondu avec l'erreur : %2 OCC::UserStatusSelectorModel + %1 days %1 jours @@ -4882,6 +6009,7 @@ Le serveur a répondu avec l'erreur : %2 + %1 hours %1 heures @@ -4889,6 +6017,7 @@ Le serveur a répondu avec l'erreur : %2 + %1 minutes %1 minutes @@ -4896,62 +6025,81 @@ Le serveur a répondu avec l'erreur : %2 + 1 day 1 jour + + 1 hour 1 heure + 1 minute 1 minute + 30 minutes 30 minutes + 4 hours 4 heures + Could not clear status message. Make sure you are connected to the server. Impossible d'effacer le message de statut. Assurez-vous que vous êtes connecté au serveur. + Could not fetch predefined statuses. Make sure you are connected to the server. Impossible de récupérer les statuts prédéfinis. Assurez-vous que vous êtes connecté au serveur. + Could not fetch status. Make sure you are connected to the server. Impossible de récupérer le statut. Merci de vérifier que vous êtes bien connecté(e) au serveur. + Could not set status. Make sure you are connected to the server. Impossible de définir le statut. Merci de vérifier que vous êtes connecté(e) au serveur. + + Don't clear Ne pas effacer + Emojis are not supported. Some status functionality may not work. Les Emojis ne sont pas supportés. Certaines fonctionnalités de statut pourront ne pas fonctionner. + Less than a minute Il y a moins d'une minute + Status feature is not supported. You will not be able to set your status. La fonctionnalité "statut" n'est pas supporté. Vous ne pourrez pas définir votre statut. + + This week Cette semaine + + Today Aujourd'hui @@ -4959,14 +6107,17 @@ Le serveur a répondu avec l'erreur : %2 OCC::Vfs + Please choose a different location. %1 is a drive. It doesn't support virtual files. Veuillez choisir un emplacement différent. %1 est un lecteur. Il ne prend pas en charge les fichiers virtuels. + Please choose a different location. %1 is a network drive. It doesn't support virtual files. Veuillez choisir un emplacement différent. %1 est un lecteur réseau. Il ne prend pas en charge les fichiers virtuels. + Please choose a different location. %1 isn't a NTFS file system. It doesn't support virtual files. Veuillez choisir un emplacement différent. %1 n'est pas un système de fichiers NTFS. Il ne prend pas en charge les fichiers virtuels. @@ -4974,30 +6125,37 @@ Le serveur a répondu avec l'erreur : %2 OCC::VfsDownloadErrorDialog + %1 could not be downloaded. %1 ne peut pas être téléchargé. + + Error downloading %1 + Erreur au téléchargement %1 + + + > More details > Plus de détails + Download error Erreur de téléchargement + Error downloading Erreur au téléchargement - Error downloading %1 - Erreur au téléchargement %1 - - + More details Plus de détails + could not be downloaded ne peut pas être téléchargé @@ -5005,6 +6163,8 @@ Le serveur a répondu avec l'erreur : %2 OCC::VfsSuffix + + Error updating metadata due to invalid modification time Erreur de mise à jour des métadonnées à cause d'une date de modification invalide @@ -5012,6 +6172,8 @@ Le serveur a répondu avec l'erreur : %2 OCC::VfsXAttr + + Error updating metadata due to invalid modification time Erreur de mise à jour des métadonnées à cause d'une date de modification invalide @@ -5019,10 +6181,12 @@ Le serveur a répondu avec l'erreur : %2 OCC::WebEnginePage + Invalid certificate detected Certificat invalide + The host "%1" provided an invalid certificate. Continue? L’hôte "%1" utilise un certificat invalide. Continuer ? @@ -5030,6 +6194,7 @@ Le serveur a répondu avec l'erreur : %2 OCC::WebFlowCredentials + <b>You have been logged out of your account %1 at %2. Please login again.</b> <b>Vous avez été déconnecté(e) de votre compte %1 à %2. Veuillez vous reconnecter.</b> @@ -5037,22 +6202,27 @@ Le serveur a répondu avec l'erreur : %2 OCC::WelcomePage - Form - Formulaire - - + Host your own server Hébergez votre propre serveur + Keep your data secure and under your control Gardez vos données en sécurité et sous votre contrôle + + Form + Formulaire + + + Log in Se connecter + Sign up with provider S'inscrire auprès d'un fournisseur @@ -5060,55 +6230,68 @@ Le serveur a répondu avec l'erreur : %2 OwncloudAdvancedSetupPage + &Local Folder &Dossier local + <html><head/><body><p>If this box is checked, existing content in the local folder will be erased to start a clean sync from the server.</p><p>Do not check this if the local content should be uploaded to the servers folder.</p></body></html> <html><head/><body><p>Si cette case est cochée, le contenu existant du dossier local sera supprimé pour démarrer une synchronisation propre depuis le serveur.</p><p>Ne pas cocher si le contenu local doit être téléversé vers le serveur.</p></body></html> + Ask before syncing folders larger than Demander confirmation avant de synchroniser les dossiers de taille supérieure à + Choose different folder Choisir un autre dossier + Choose what to sync Sélectionner le contenu à synchroniser + Erase local folder and start a clean sync Effacer le dossier local et démarrer une synchronisation complète + Keep local data Conserver les données locales + Local Folder Dossier local + MB Trailing part of "Ask confirmation before syncing folder larger than" Mo + Server address Adresse du serveur + Sync Logo Logo de synchronisation + Synchronize everything from server Tout synchroniser depuis le serveur + Username Nom d’utilisateur @@ -5116,10 +6299,12 @@ Le serveur a répondu avec l'erreur : %2 OwncloudHttpCredsPage + &Password &Mot de passe + &Username &Nom d’utilisateur @@ -5127,14 +6312,18 @@ Le serveur a répondu avec l'erreur : %2 OwncloudSetupPage + Server address Adresse du serveur + + TextLabel Étiquette de texte + This is the link to your %1 web interface when you open it in the browser. Il s'agit de l'adresse URL lorsque vous utilisez %1 dans un navigateur. @@ -5142,110 +6331,127 @@ Le serveur a répondu avec l'erreur : %2 progress + Deleted Supprimé + Deleting Suppression + Downloaded Reçu + Downloading Téléchargement + + Error Erreur + Filesystem access error Erreur d'accès au système de fichiers + Ignored Exclu + Ignoring Ignoré + Moved to %1 Déplacé vers %1 + Moving Déplacement + Replaced by virtual file Remplacé par un fichier virtuel + Server version downloaded, copied changed local file into case conflict conflict file La version du serveur est téléchargée, les changements locaux ont été copiés dans un fichier de conflit de casse. + Server version downloaded, copied changed local file into conflict file La version du serveur est téléchargée, les changements locaux ont été copiés dans un fichier conflit. + + Unknown Inconnu + Updated end-to-end encryption metadata Métadonnées de chiffrement de bout en bout mises à jour + Updated local metadata Métadonnées locales mises à jour + Updated local virtual files metadata Métadonnées des fichiers virtuels locaux mises à jour + Updating end-to-end encryption metadata Mise à jour des métadonnées de chiffrement de bout en bout + Updating local metadata Mise à jour des méta-données locales + Updating local virtual files metadata Mise à jour des méta-données des fichiers virtuels + Uploaded Téléversé + Uploading Téléversement + Virtual file created Fichier virtuel créé - - updating local virtual files metadata - Mise à jour des métadonnées des fichiers virtuels locaux - QObject - - %1: %2 - this displays an error string (%2) for a file %1 - %1 : %2 - + %nd delay in days after an activity @@ -5254,6 +6460,7 @@ Le serveur a répondu avec l'erreur : %2 + %nh delay in hours after an activity @@ -5262,6 +6469,7 @@ Le serveur a répondu avec l'erreur : %2 + %nm delay in minutes after an activity @@ -5270,70 +6478,92 @@ Le serveur a répondu avec l'erreur : %2 + 1m one minute after activity date and time 1m - Could not create debug archive in selected location! - Impossible de créer une archive de débogage à l’emplacement sélectionné ! + + Some time ago + Il y a quelque temps - Error deleting the file - Le fichier est déjà supprimé + + in the future + Dans le futur - Failed to create debug archive - Échec de création de l’archive de débogage + + now + A l'instant + + + + The directory %1 cannot be part of your sync directory. Please choose another folder. + La répertoire %1 ne peut pas faire partie de votre répertoire de synchronisation. Veuillez choisir un autre dossier. + New folder Nouveau dossier - Paths beginning with '#' character are not supported in VFS mode. - Les chemins commençant par le caractère « # » ne sont pas pris en charge dans le mode VFS. + + Could not create debug archive in selected location! + Impossible de créer une archive de débogage à l’emplacement sélectionné ! - Some time ago - Il y a quelque temps + + Failed to create debug archive + Échec de création de l’archive de débogage + Synced %1 %1 a été synchronisé - The directory %1 cannot be part of your sync directory. Please choose another folder. - La répertoire %1 ne peut pas faire partie de votre répertoire de synchronisation. Veuillez choisir un autre dossier. - - + You changed %1 Vous avez modifié %1 + You created %1 Vous avez créé %1 + You deleted %1 Vous avez supprimé %1 + You renamed %1 Vous avez renommé %1 - in the future - Dans le futur + + Error deleting the file + Le fichier est déjà supprimé - now - A l'instant + + %1: %2 + this displays an error string (%2) for a file %1 + %1 : %2 - + + + Paths beginning with '#' character are not supported in VFS mode. + Les chemins commençant par le caractère « # » ne sont pas pris en charge dans le mode VFS. + + ResolveConflictsDialog + %1 files in conflict indicate the number of conflicts to resolve @@ -5342,26 +6572,32 @@ Le serveur a répondu avec l'erreur : %2 + All local versions Toutes les versions locales + All server versions Toutes les versions serveur + Cancel Annuler + Choose if you want to keep the local version, server version, or both. If you choose both, the local file will have a number added to its name. Choisissez si vous souhaitez conserver la version locale, la version serveur, ou les deux. Si vous choisissez les deux, un numéro sera ajouté au nom du fichier local. + Resolve conflicts Résoudre les conflits + Solve sync conflicts Résoudre les conflits de synchronisation @@ -5369,6 +6605,7 @@ Le serveur a répondu avec l'erreur : %2 SesErrorBox + Error Erreur @@ -5376,14 +6613,17 @@ Le serveur a répondu avec l'erreur : %2 SesTrayHeader + Open Nextcloud in browser Ouvrir HiDrive Next dans le navigateur + Open local or group folders Ouvrir des dossiers locaux ou de groupe + Website Site Web @@ -5391,18 +6631,22 @@ Le serveur a répondu avec l'erreur : %2 ShareDelegate + Copied! Copié ! + Copy share link location + Create a new share link + Share options Options de partage @@ -5410,62 +6654,78 @@ Le serveur a répondu avec l'erreur : %2 ShareDetailsPage + Add another link Ajouter un autre lien + Allow resharing Permettre le repartage + + Allow upload and editing Autoriser le téléversement et l'édition + An error occurred setting the share password. Une erreur est survenue lors de la configuration du mot de passe de partage. + Copy share link Copier le lien + Custom Permissions Autorisations personnalisées + Enter the note to recipient Saisir la remarque à l’attention du destinataire + File drop (upload only) Dépôt de fichiers (téléversement seulement) + Hide download Masquer le téléchargement + Note to recipient Note au destinataire + Password protection Protection par mot de passe + Set expiration date Définir une date d'expiration + Share link copied! Lien copié ! + Unshare Cesser le partage + View only Afficher seulement @@ -5473,10 +6733,12 @@ Le serveur a répondu avec l'erreur : %2 ShareeSearchField + Search for users or groups… Rechercher des utilisateurs ou des groupes... + Sharing is not available for this folder Le partage n'est pas disponible pour ce dossier @@ -5484,30 +6746,37 @@ Le serveur a répondu avec l'erreur : %2 ShareView + Expires in %1 Expire dans %1 + Password required for new share Mot de passe requis pour le nouveau partage + Share password Mot de passe du partage + Shared with you by %1 Partagé avec vous par %1 + Sharing is disabled Le partage est désactivté + Sharing is disabled. Le partage est désactivé. + This item cannot be shared. L'élément ne peut pas être partagé. @@ -5515,6 +6784,7 @@ Le serveur a répondu avec l'erreur : %2 SyncJournalDb + Failed to connect database. Impossible de connecter la base de données. @@ -5522,14 +6792,17 @@ Le serveur a répondu avec l'erreur : %2 SyncStatus + Open browser Ouvrir le navigateur + Resolve conflicts Résoudre les conflits + Sync now Synchroniser maintenant @@ -5537,10 +6810,12 @@ Le serveur a répondu avec l'erreur : %2 TalkReplyTextField + Reply to … Répondre à... + Send reply to chat message Envoyer la réponse dans la discussion @@ -5548,14 +6823,17 @@ Le serveur a répondu avec l'erreur : %2 TermsOfServiceCheckWidget + Logo Logo + Switch to your browser to accept the terms of service Accédez à votre navigateur pour accepter les conditions d'utilisation + Terms of Service Conditions d'utilisation @@ -5563,92 +6841,105 @@ Le serveur a répondu avec l'erreur : %2 theme + Error occurred during setup Une erreur est survenue pendant l'installation + Error occurred during sync Une erreur est survenue pendant la synchronisation + Preparing to sync Préparation à la synchronisation + Stopping sync Arrêt de la synchronisation + Sync is paused La synchronisation est en pause + Sync is running Synchronisation en cours + Sync status is unknown Le statut de synchronisations est inconnu + Sync was successful Synchronisation réussie + Sync was successful but some files were ignored La syncronisation a réussi mais certains fichiers ont été ignorés + Waiting to start syncing En attente du démarrage de la synchronisation - - TrayFoldersMenuButton - - Files - Fichiers - - TrayWindowAccountMenu + Account switcher and settings menu Sélecteur de compte et menu de paramètres + Add account Ajouter un compte + Current account Compte actuel + Current account avatar Avatar du compte actuel + Current account status is do not disturb Le statuts de compte actuel est ne pas déranger + Current account status is online Le statuts de compte actuel est en ligne + Exit Quitter + Pause sync for all + Resume sync for all + Settings Paramètres @@ -5656,14 +6947,17 @@ Le serveur a répondu avec l'erreur : %2 TrayWindowHeader + More apps Plus d'applications + Open %1 in browser Ouvrir %1 dans le navigateur + Open local or group folders Ouvrir des dossiers locaux ou de groupe @@ -5671,26 +6965,32 @@ Le serveur a répondu avec l'erreur : %2 TrayWindowHeaderBar + More apps Plus d'applications + Open %1 in browser Ouvrir %1 dans le navigateur + Open Nextcloud Talk in browser Ouvrir Nextcloud Discussion dans le navigateur + Open Nextcloud in browser Ouvrir HiDrive Next dans le navigateur + Open local or group folders Ouvrir des dossiers locaux ou de groupe + Website Site Web @@ -5698,6 +6998,7 @@ Le serveur a répondu avec l'erreur : %2 UnifiedSearchInputContainer + Search files, messages, events … Rechercher des fichiers, des messages, des événements … @@ -5705,6 +7006,7 @@ Le serveur a répondu avec l'erreur : %2 UnifiedSearchPlaceholderView + Start typing to search Commencez à écrire pour rechercher @@ -5712,6 +7014,7 @@ Le serveur a répondu avec l'erreur : %2 UnifiedSearchResultFetchMoreTrigger + Load more results Charger plus de résultats @@ -5719,6 +7022,7 @@ Le serveur a répondu avec l'erreur : %2 UnifiedSearchResultItemSkeleton + Search result skeleton. Squelette de résultat de recherche. @@ -5726,6 +7030,7 @@ Le serveur a répondu avec l'erreur : %2 UnifiedSearchResultListItem + Load more results Charger plus de résultats @@ -5733,6 +7038,7 @@ Le serveur a répondu avec l'erreur : %2 UnifiedSearchResultNothingFound + No results for Aucun résultat pour @@ -5740,6 +7046,7 @@ Le serveur a répondu avec l'erreur : %2 UnifiedSearchResultSectionItem + Search results section %1 Section de résultats de recherche %1 @@ -5747,26 +7054,34 @@ Le serveur a répondu avec l'erreur : %2 UserLine + Account actions Actions du compte + + Log in Se connecter + + Log out Se déconnecter + Remove account Retirer le compte + Set status Définir le statut + Switch to account Utiliser ce compte @@ -5774,54 +7089,67 @@ Le serveur a répondu avec l'erreur : %2 UserStatusSelector + Appear offline Apparaitre hors ligne + Apply Appliquer + Away Absent(e) + Cancel Annuler + Clear Effacer + Clear status message after Effacer le message de statut après + Do not disturb Ne pas déranger + Invisible Invisible + Mute all notifications Désactiver toutes les notifications + Online En ligne + Online status Statut en ligne + Status message Message de statut + What is your status? Quel est votre statut ? @@ -5829,30 +7157,37 @@ Le serveur a répondu avec l'erreur : %2 Utility + %1 %2 %1 %2 + %L1 B %L1 octets + %L1 GB %L1 Go + %L1 KB %L1 Ko + %L1 MB %L1 Mo + %L1 TB %L1 To + %n day(s) %n jour @@ -5860,6 +7195,7 @@ Le serveur a répondu avec l'erreur : %2 + %n hour(s) %n heure @@ -5867,6 +7203,7 @@ Le serveur a répondu avec l'erreur : %2 + %n minute(s) %n minute @@ -5874,6 +7211,7 @@ Le serveur a répondu avec l'erreur : %2 + %n month(s) %n mois @@ -5881,6 +7219,7 @@ Le serveur a répondu avec l'erreur : %2 + %n second(s) %n seconde @@ -5888,6 +7227,7 @@ Le serveur a répondu avec l'erreur : %2 + %n year(s) %n an @@ -5898,42 +7238,52 @@ Le serveur a répondu avec l'erreur : %2 utility + Always available locally Toujours disponible localement + Available online only Disponible seulement en ligne + Could not open browser Impossible de démarrer le navigateur + Could not open email client Impossible d'ouvrir le client de messagerie + Currently available locally Actuellement disponible en local + Free up local space Libérer de l'espace local + Make always available locally Toujours rendre disponible localement + Some available online only Certains sont disponibles en ligne seulement + There was an error when launching the browser to go to URL %1. Maybe no default browser is configured? Une erreur est survenue au lancement du navigateur pour visiter l'adresse %1. Il est possible qu'aucun navigateur par défaut ne soit configuré. + There was an error when launching the email client to create a new message. Maybe no default email client is configured? Il y a eu une erreur lors du lancement du client de messagerie pour créer un nouveau message. Peut-être qu'aucun client de messagerie n'est configuré ? @@ -5941,14 +7291,17 @@ Le serveur a répondu avec l'erreur : %2 ValidateChecksumHeader + The checksum header contained an unknown checksum type "%1" L’en-tête de somme de contrôle contenait un type de somme de contrôle inconnu « %1 » + The checksum header is malformed. L’en-tête de la somme de contrôle est mal formé. + The downloaded file does not match the checksum, it will be resumed. "%1" != "%2" Le fichier téléchargé ne correspond pas à la somme de contrôle, il sera repris. "%1" != "%2" diff --git a/translations/client_nl.ts b/translations/client_nl.ts index 9e49332bcd315..5346d637f7559 100644 --- a/translations/client_nl.ts +++ b/translations/client_nl.ts @@ -1,55 +1,14 @@ - - - - Agree - Akkoord - - - Back - Terug - - - Necessary data - Noodzakelijke gegevens - - - Required to ensure that the software can be used as expected - Vereist om ervoor te zorgen dat de software kan worden gebruikt zoals verwacht - - - Save Settings - Instellingen opslaan - - - Send anonymous use - Anoniem gebruik verzenden - - - Settings - Instellingen - - - This application uses tracking technologies. By clicking on Agree, you accept the processing of your anonymized data. You can adjust your choices at any time via the settings. <br/> <br/>Information on data processing and more can be found in our <a href='https://wl.hidrive.com/easy/0005'>privacy policy</a>. - Deze applicatie maakt gebruik van traceertechnologieën. Door op Akkoord te klikken, accepteert u de verwerking van uw geanonimiseerde gegevens. U kunt uw keuzes op elk gewenst moment aanpassen via de instellingen. <br/> <br/>Informatie over gegevensverwerking en meer kunt u vinden in ons <a href='https://wl.hidrive.com/easy/0045'>privacybeleid</a>. - - - This helps us to optimize the software and to better identify system crashes and unexpected errors. - Dit helpt ons om de software te optimaliseren en om systeemcrashes en onverwachte fouten beter te identificeren. - - - We collect anonymized data to optimize our app. We use software solutions from various partners for this purpose. We want to give you full transparency and freedom of choice regarding the collection and processing of your anonymized usage. You can change your settings at any time under the menu item Data Protection. - We verzamelen geanonimiseerde gegevens om onze app te optimaliseren. Hiervoor gebruiken we softwareoplossingen van verschillende partners. We willen je volledige transparantie en keuzevrijheid geven met betrekking tot het verzamelen en verwerken van je geanonimiseerde gebruik. Je kunt je instellingen op elk gewenst moment wijzigen onder het menu-item Gegevensbescherming. - - ActivityItem + In %1 In %1 + Open %1 locally %1 lokaal openen @@ -57,10 +16,12 @@ ActivityItemContent + Dismiss Negeren + Open file details Bestandsdetails openen @@ -68,40 +29,40 @@ ActivityList + Activity list Activiteitenlijst + No activities yet Nog geen activiteiten + Scroll to top Naar boven schuiven - - BasicComboBox - - Clear status message menu - Statusbericht wissen - - CallNotificationDialog + Answer Talk call notification Answer Talk call notification + Decline Afwijzen + Decline Talk call notification Afwijzingsmelding voor gesprek + Talk notification caller avatar Spraakmelding beller avatar @@ -109,66 +70,83 @@ CloudProviderWrapper + %1 (%2, %3) %1 (%2, %3) + Checking for changes in "%1" Controleren op wijzigingen in '%1' + Help Help + Log out Uitloggen + + No recently changed files Geen recent gewijzigde bestanden + Open website Openen website + Pause synchronization Pauzeer synchronisatie + Quit sync client Afsluiten synchronisatieclient + Recently changed Recent gewijzigd + Settings Instellingen + Sync paused Synchroniseren gepauzeerd + Syncing Synchroniseren + Syncing %1 Synchroniseren %1 + Syncing %1 (%2 left) Synchroniseren %1 (%2 over) + Syncing %1 of %2 Synchroniseren %1 van %2 + Syncing %1 of %2 (%3 left) @@ -176,10 +154,12 @@ ConflictDelegate + Local version Lokale versie + Server version Serverversie @@ -187,46 +167,59 @@ CurrentAccountHeaderButton + Account switcher and settings menu Wisselen van gebruiker en instellingsmenu + Add account Gebruiker toevoegen + Add new account Nieuwe gebruiker toevoegen + Current account Huidige gebruiker + Current account avatar Huidige gebruiker avatar + Current account status is do not disturb Huidige gebruikersstatus is Niet Storen + Current account status is online Huidige gebruikersstatus is Online + Exit Verlaat + + Pause sync for all Synchronisatie pauzeren voor alles + + Resume sync for all Synchronisatie hervatten voor alles + Settings Instellingen @@ -234,6 +227,7 @@ EditFileLocallyLoadingDialog + Opening file for local editing Bestand openen voor lokaal bewerken @@ -241,6 +235,7 @@ EmojiPicker + No recent emojis Geen recente emojis @@ -248,6 +243,7 @@ EncryptionTokenDiscoveryDialog + Discovering the certificates stored on your USB token De certificaten ontdekken die op je USB-token zijn opgeslagen @@ -255,18 +251,22 @@ EncryptionTokenSelectionWindow + Available Keys for end-to-end Encryption: Beschikbare sleutels voor end-to-end-versleuteling + Cancel Afbreken + Choose Kies + Token Encryption Key Chooser Token-versleutelingssleutelkiezer @@ -274,6 +274,7 @@ ErrorBox + Error Fout @@ -281,6 +282,7 @@ FileDetailsPage + Dismiss Negeren @@ -288,6 +290,7 @@ FileDetailsWindow + File details of %1 · %2 Bestandseigenschappen van %1 · %2 @@ -295,14 +298,17 @@ FileProviderEvictionDialog + Evict materialised files Gecreëerde items verwijderen + Materialised items Gecreëerde items + Reload Herlaad @@ -310,10 +316,12 @@ FileProviderFastEnumerationSettings + Enable fast sync Snelle sync inschakelen + Fast sync will only sync changes in files and folders within folders that have been explored. This can significantly increase responsiveness on initial configuration of virtual files. However, it will cause redundant downloads of files moved to an unexplored folder. Fast sync will only sync changes in files and folders within folders that have been explored. This can significantly increase responsiveness on initial configuration of virtual files. However, it will cause redundant downloads of files moved to an unexplored folder. @@ -321,6 +329,7 @@ FileProviderFileDelegate + Delete Verwijderen @@ -328,18 +337,17 @@ FileProviderSettings + Enable virtual files Virtuele bestanden inschakelen + General settings Algemene instellingen - Signal file provider domain - Signal file provider domain - - + Virtual files settings Virtuele bestandsinstellingen @@ -347,18 +355,17 @@ FileProviderStorageInfo + %1 GB of %2 GB remote files synced %1 GB van %2 GB remote bestanden gesychroniseerd + Evict local copies … Lokale kopieën verwijderen … - Evict local copies... - Lokale kopieën verwijderen... - - + Local storage use Gebruik lokale opslag @@ -366,20 +373,24 @@ FileProviderSyncStatus + All synced! Alles gesynchroniseerd! + Request a sync of changes for the VFS environment. macOS may ignore or delay this request. Vraag een synchronisatie van wijzigingen voor de VFS-omgeving aan. macOS kan dit verzoek negeren of uitstellen. + Request sync Vraag synchronisatie aan + Syncing Synchroniseren @@ -387,10 +398,12 @@ macOS kan dit verzoek negeren of uitstellen. FileSystem + Could not remove folder "%1" Kan map "%1" niet verwijderen + Error removing "%1": %2 Fout bij verwijderen '%1': %2 @@ -398,26 +411,32 @@ macOS kan dit verzoek negeren of uitstellen. Flow2AuthWidget + An error occurred while connecting. Please try again. Er is een fout opgetreden tijdens het verbinden. Probeer het opnieuw. + Browser Authentication Browserauthenticatie + Copy Link Kopiëren link + Logo Logo + Reopen Browser + Switch to your browser to connect your account Schakel over naar je browser om je account te verbinden @@ -425,10 +444,12 @@ macOS kan dit verzoek negeren of uitstellen. FolderWizardSelectiveSync + Add Folder Sync Mapsynchronisatie toevoegen + Step 3 of 3: Selektive Synchronisation Stap 3 van 3: Selektieve synchronisatie @@ -436,18 +457,22 @@ macOS kan dit verzoek negeren of uitstellen. FolderWizardSourcePage + &Choose &Kiezen + Add Folder Sync Mapsynchronisatie toevoegen + Select a folder on your hard drive that should be permanetly connected to your %1. All files and subfolders are automatically uploaded and synchronized Selecteer een map op je harde schijf die permanent verbonden moet zijn met je %1. Alle bestanden en submappen worden automatisch geüpload en gesynchroniseerd. + Step 1 of 3: Select local folder Stap 1 van 3: Selecteer lokale map @@ -455,30 +480,37 @@ macOS kan dit verzoek negeren of uitstellen. FolderWizardTargetPage + Add Folder Sync Mapsynchronisatie toevoegen + Both folders are permanently linked and the respective contents are automatically synchronized and updated. Beide mappen zijn permanent gekoppeld en de respectieve inhoud wordt automatisch gesynchroniseerd en bijgewerkt. + Create folder Maak map + Folders Mappen + Please now select or create a target folder in your %1 where the content should be uploaded and synchronized. Selecteer of maak nu een doelmap in uw %1 waar de inhoud moet worden geüpload en gesynchroniseerd. + Refresh Vernieuwen + Step 2 of 3: Directory in your %1 Stap 2 van 3: Directory in uw %1 @@ -486,10 +518,12 @@ macOS kan dit verzoek negeren of uitstellen. main.cpp + %1 requires on a working system tray. If you are running XFCE, please follow <a href="http://docs.xfce.org/xfce/xfce4-panel/systray">these instructions</a>. Otherwise, please install a system tray application such as "trayer" and try again. %1 heeft een werkend systeemvak nodig. Als je XFCE draait volg je <a href="http://docs.xfce.org/xfce/xfce4-panel/systray">deze instructies</a>. Installeer anders een systeemvak applicatie zoals "trayer" en probeer het opnieuw. + System Tray not available Systeemvak niet beschikbaar @@ -497,14 +531,17 @@ macOS kan dit verzoek negeren of uitstellen. MainWindow + New activities + Nextcloud desktop main dialog Nextcloud desktop basisdialoog + Unified search results list @@ -512,6 +549,7 @@ macOS kan dit verzoek negeren of uitstellen. nextcloudTheme::aboutInfo() + <p><small>Built from Git revision <a href="%1">%2</a> on %3, %4 using Qt %5, %6</small></p> <p><small>Gebouwd vanaf Git revisie <a href="%1">%2</a> op %3, %4 gebruik makend van Qt %5, %6</small></p> @@ -519,14 +557,17 @@ macOS kan dit verzoek negeren of uitstellen. OCC::AbstractNetworkJob + Connection timed out De verbindingstijd is verstreken + Server replied "%1 %2" to "%3 %4" Server antwoordde "%1 %2" naar "%3 %4" + Unknown error: network reply was deleted Onbekende fout: netwerkantwoord verwijderd @@ -534,14 +575,17 @@ macOS kan dit verzoek negeren of uitstellen. OCC::Account + File %1 is already locked by %2. Bestand %1 is al vergrendeld door %2. + Lock operation on %1 failed with error %2 Vergrendeling van %1 mislukt met fout %2 + Unlock operation on %1 failed with error %2 Ontgrendeling van %1 mislukt met fout %2 @@ -549,29 +593,36 @@ macOS kan dit verzoek negeren of uitstellen. OCC::AccountManager + %1 accounts were detected from a legacy desktop client. Should the accounts be imported? Er zijn %1 accounts gedetecteerd van een oudere desktopclient. Moeten de accounts worden geïmporteerd? + 1 account was detected from a legacy desktop client. Should the account be imported? 1 account van een eerdere desktop cliënt is gevonden. Moet dit account geïmporteerd worden? + Could not import accounts from legacy client configuration. Kon geen accounts importeren van legacy client configuratie. + Import Import + + Legacy import Legacy import + Skip Overslaan @@ -579,304 +630,335 @@ Should the account be imported? OCC::AccountSettings + %1 (%3%) of %2 in use. Some folders, including network mounted or shared folders, might have different limits. %1 (%3%) van %2 in gebruik. Sommige mappen, inclusief netwerkmappen en gedeelde mappen, kunnen andere limieten hebben. + %1 as %2 %1 als %2 + %1 in use %1 in gebruik + %1 of %2 in use %1 van %2 in gebruik + (experimental) (experimenteel) + <p>Could not create local folder <i>%1</i>.</p> <p>Kan lokale map <i>%1</i> niet maken.</p> + <p>Do you really want to stop syncing the folder <i>%1</i>?</p><p><b>Note:</b> This will <b>not</b> delete any files.</p> <p>Weet je zeker dat je het synchroniseren van map <i>%1</i> wilt stoppen?</p><p><b>Opmerking:</b> Dit zal <b>geen</b> bestanden verwijderen.</p> - Apply - Toepassen - - - Apply manual changes - Handmatige wijzigingen toepassen - - + + Availability Beschikbaarheid - Cancel - Annuleren - - + Choose what to sync Kies wat je wilt synchroniseren + Confirm Folder Sync Connection Removal Bevestig het verwijderen van de verbinding voor mapsynchronisatie + Connected to %1. Verbonden met %1. - Connected with <server> as <user> - Verbonden met <server> als <user> - - + Connecting to %1 … Verbinden met %1 ... - Connection settings - Verbindingsinstellingen - - + Could not encrypt folder because the folder does not exist anymore Kon map niet versleutelen omdat de map niet meer bestaat + + Create new folder Maak nieuwe map aan + Currently there is no storage usage information available. Er is nu geen informatie over het gebruik van de opslagruimte beschikbaar. + Disable encryption Encryptie deactiveren + Disable end-to-end encryption Begin-tot-eind versleuteling uitzetten + Disable end-to-end encryption for %1? Begin-tot-eind versleuteling uitzetten voor %1? + Disable support Ondersteuning uitschakelen + Disable virtual file support … Ondersteuning voor virtuele bestanden uitschakelen... + Disable virtual file support? Ondersteuning voor virtuele bestanden uitschakelen? + Display mnemonic Geheugensteun weergeven + + Do not encrypt folder Map niet versleutelen + + Edit Ignored Files Genegeerde bestanden bewerken + Enable virtual file support %1 … Virtuele bestandsondersteuning inschakelen %1... + Encrypt Versleutelen + + Encrypt folder Versleutel map + Encryption failed Versleuteling mislukt + End-to-end Encryption Begin-tot-eind versleuteling + End-to-end Encryption with Virtual Files End-to-end versleuteling met virtuele bestanden + End-to-end encryption has been enabled for this account Begin-tot-eind versleuteling is ingeschakeld voor dit account + End-to-end encryption has been enabled on this account with another device.<br>It can be enabled on this device by entering your mnemonic.<br>This will enable synchronisation of existing encrypted folders. Begin-tot-eind versleuteling is ingesteld voor dit account op een ander apparaat.<br>Het kan aangezet worden op dit apparaat door je geheugensteun in te voeren.<br>Dit activeert de synchronisatie van bestaande, versleutelde mappen. + End-to-end encryption is not configured on this device. Once it is configured, you will be able to encrypt this folder. Would you like to set up end-to-end encryption? Begin-tot-eind versleuteling is niet ingesteld op dit apparaat. Als dit ingesteld is kan je deze map versleutelen. Wil je begin-tot-eind versleuteling instellen? + End-to-end encryption mnemonic Geheugensteun voor begin-tot-eind versleuteling - Expand Memory - Geheugen uitbreiden - - + Folder creation failed Map maken mislukt + Force sync now Synchronisatie nu forceren + Migrate certificate to a new one + No %1 connection configured. Geen %1 connectie geconfigureerd. + No account configured. Geen account ingesteld. + + Open folder Map openen + Pause sync Synchronisatie pauzeren + Please wait for the folder to sync before trying to encrypt it. Wacht tot de map gesynchroniseerd is alvorens deze te versleutelen. + Remove Folder Sync Connection Verwijder verbinding voor mapsynchronisatie + Remove folder sync connection Verwijder verbinding voor mapsynchronisatie + Removing end-to-end encryption will remove locally-synced files that are encrypted.<br>Encrypted files will remain on the server. Verwijderen van begin-tot-eind versleuteling zal de lokale gesynchroniseerde bestanden verwijderen die versleuteld zijn.<br>Versleutelde bestanden blijven aanwezig op de server. + Restart sync Synchronisatie herstarten + Resume sync Synchronisatie hervatten + Server %1 is currently being redirected, or your connection is behind a captive portal. Server %1 wordt momenteel doorgestuurd of je verbinding zit achter een 'captive portal'. + Server %1 is currently in maintenance mode. Server %1 is momenteel in onderhoudsmodus. + Server %1 is temporarily unavailable. Server %1 is tijdelijk niet beschikbaar. + Server configuration error: %1 at %2. Serverconfiguratiefout: %1 op %2. + Set up encryption Versleuteling instellen + Signed out from %1. Uitgelogd van %1. - Standard file sync - Standaard bestandssynchronisatie - - + Storage space %1% occupied Opslagruimte %1% bezet - Storage space: … - Opslagruimte: ... - - + Sync Running Bezig met synchroniseren - Synchronize all - Alles synchroniseren - - - Synchronize none - Niets synchroniseren - - + The folder has a minor sync problem. Encryption of this folder will be possible once it has synced successfully De map heeft een klein synchronisatieprobleem. Versleuteling van de map is mogelijk als de synchronisatie gelukt is. + The folder has a sync error. Encryption of this folder will be possible once it has synced successfully De map heeft een synchronisatiefout. Versleuteling van de map is mogelijk als de synchronisatie gelukt is. + The server version %1 is unsupported! Proceed at your own risk. De serverversie %1 wordt niet ondersteund! Verdergaan is op eigen risico. + The syncing operation is running.<br/>Do you want to terminate it? Bezig met synchroniseren.<br/>Wil je stoppen met synchroniseren? + There are folders that have grown in size beyond %1MB: %2 Er zijn bestanden die groter zijn geworden dan %1MB: %2 + There are folders that were not synchronized because they are external storages: Er zijn mappen die niet gesynchroniseerd zijn, omdat ze op externe opslag staan: + There are folders that were not synchronized because they are too big or external storages: Er zijn mappen die niet gesynchroniseerd zijn, omdat ze te groot zijn of op externe opslag staan: + There are folders that were not synchronized because they are too big: Er zijn mappen die niet gesynchroniseerd zijn, omdat ze te groot zijn: + This account supports end-to-end encryption Dit account ondersteunt end-to-end-versleuteling + This action will disable virtual file support. As a consequence contents of folders that are currently marked as "available online only" will be downloaded. The only advantage of disabling virtual file support is that the selective sync feature will become available again. @@ -889,60 +971,126 @@ Het enige voordeel van het uitschakelen van ondersteuning voor virtuele bestande Dit zal alle synchronisaties, die op dit moment bezig zijn, afbreken. + This will encrypt your folder and all files within it. These files will no longer be accessible without your encryption mnemonic key. <b>This process is not reversible. Are you sure you want to proceed?</b> Dit zal je map en alle bestanden erin versleutelen. Deze bestanden zullen niet langer toegankelijk zijn zonder je coderingssleutel. <b>Dit proces is niet omkeerbaar. Weet u zeker dat u wilt doorgaan? + To protect your Cryptographic Identity, we encrypt it with a mnemonic of 12 dictionary words. Please note these down and keep them safe. They will be needed to add other devices to your account (like your mobile phone or laptop). To protect your Cryptographic Identity, we encrypt it with a mnemonic of 12 dictionary words. Please note these down and keep them safe. They will be needed to add other devices to your account (like your mobile phone or laptop). + Unable to connect to %1. Kan niet verbinden met %1. - Unchecked folders will be <b>removed</b> from your local file system and will not be synchronized to this computer anymore - Niet-geselecteerde mappen worden <b>verwijderd</b> van je lokale bestandssysteem en zullen niet meer met deze computer worden gesynchroniseerd - - - Virtual file sync - Virtuele bestandssynchronisatie - - + Warning Waarschuwing + You cannot encrypt a folder with contents, please remove the files. Wait for the new sync, then encrypt it. Je kunt een map met inhoud niet versleutelen, verwijder de bestanden. Wacht op de nieuwe synchronisatie en versleutel ze vervolgens. + You need to accept the terms of service at %1. + You seem to have the Virtual Files feature enabled on this folder. At the moment, it is not possible to implicitly download virtual files that are end-to-end encrypted. To get the best experience with virtual files and end-to-end encryption, make sure the encrypted folder is marked with "Make always available locally". Het lijkt erop dat de functie Virtuele bestanden voor deze map is ingeschakeld. Momenteel is het niet mogelijk om impliciet virtuele bestanden te downloaden die begin-tot-eind versleuteld zijn. Om de beste ervaring met virtuele bestanden en begin-tot-eind versleuteling te krijgen, moet je ervoor zorgen dat de versleutelde map is gemarkeerd met "Altijd lokaal beschikbaar maken". + https://wl.hidrive.com/easy/0057 https://wl.hidrive.com/easy/0097 - + + + Apply + Toepassen + + + + Apply manual changes + Handmatige wijzigingen toepassen + + + + + + Cancel + Annuleren + + + + Connected with <server> as <user> + Verbonden met <server> als <user> + + + + Connection settings + Verbindingsinstellingen + + + + Expand Memory + Geheugen uitbreiden + + + + Standard file sync + Standaard bestandssynchronisatie + + + + + Storage space: … + Opslagruimte: ... + + + + Synchronize all + Alles synchroniseren + + + + Synchronize none + Niets synchroniseren + + + + Unchecked folders will be <b>removed</b> from your local file system and will not be synchronized to this computer anymore + Niet-geselecteerde mappen worden <b>verwijderd</b> van je lokale bestandssysteem en zullen niet meer met deze computer worden gesynchroniseerd + + + + Virtual file sync + Virtuele bestandssynchronisatie + + OCC::AccountSetupFromCommandLineJob + Access forbidden by server. To verify that you have proper access, <a href="%1">click here</a> to access the service with your browser. Toegang door server verboden. Om te verifiëren dat je toegang mag hebben, <a href="%1">klik hier</a> om met je browser toegang tot de service te krijgen. + The authenticated request to the server was redirected to "%1". The URL is bad, the server is misconfigured. De geverifieerde aanvraag voor de server werd omgeleid naar "%1". De URL is onjuist, de server is verkeerd geconfigureerd. + There was an invalid response to an authenticated WebDAV request Er is een ongeldig antwoord ontvangen op een geverifieerde WebDAV aanvraag @@ -950,46 +1098,57 @@ Wait for the new sync, then encrypt it. OCC::AccountState + Asking Credentials Vragen naar inloggegevens + Configuration error Configuratiefout + Connected Verbonden + Disconnected Niet verbonden + Maintenance mode Onderhoudsmodus + Need the user to accept the terms of service + Network error Netwerkfout + Redirect detected Redirect waargenomen + Service unavailable Dienst niet beschikbaar + Signed out Afgemeld + Unknown account state Onbekende account-status @@ -997,14 +1156,17 @@ Wait for the new sync, then encrypt it. OCC::ActivityListModel + Fetching activities … Ophalen activiteiten... + For more activities please open the Activity app. Voor meer activiteiten open de Activiteit app. + Network error occurred: client will retry syncing. Netwerkfout opgetreden: cliënt probeert synchronisatie opnieuw. @@ -1012,34 +1174,42 @@ Wait for the new sync, then encrypt it. OCC::AddCertificateDialog + + Certificate files (*.p12 *.pfx) + Certificaat bestanden (*.p12 *.pfx) + + + + Select a certificate + Selecteer een certificaat + + + An encrypted pkcs12 bundle is strongly recommended as a copy will be stored in the configuration file. Een versleutelde pkcs12-bundel wordt sterk aanbevolen, aangezien er een kopie wordt opgeslagen in het configuratiebestand. + Browse … Bladeren ... + Certificate & Key (pkcs12): Certificaat & Sleutel (pkcs12): - Certificate files (*.p12 *.pfx) - Certificaat bestanden (*.p12 *.pfx) - - + Certificate password: Wachtwoord certificaat: + SSL client certificate authentication SSL client certificaat authenticatie - Select a certificate - Selecteer een certificaat - - + This server probably requires a SSL client certificate. De server vereist vermoedelijk een SSL client certificaat. @@ -1047,32 +1217,39 @@ Wait for the new sync, then encrypt it. OCC::Application + %1 accounts number of accounts imported %1 accounts + %1 folders number of folders imported %1 mappen + 1 account 1 account + 1 folder 1 map + Continue Doorgaan + Error accessing the configuration file Fout bij benaderen configuratiebestand + Imported %1 and %2 from a legacy desktop client. %3 number of accounts and folders imported. list of users. @@ -1080,35 +1257,43 @@ Wait for the new sync, then encrypt it. %3 + Legacy import Legacy import + Quit Stoppen + Some settings were configured in %1 versions of this client and use features that are not available in this version.<br><br>Continuing will mean <b>%2 these settings</b>.<br><br>The current configuration file was already backed up to <i>%3</i>. Sommige instellingen zijn geconfigureerd in nieuwere versies van deze cliënt en maken gebruik van functies die niet beschikbaar zijn in deze versie.<br><br>Doorgaan betekent <br>%2 van deze instellingen</br>. Van het huidige configuratiebestand is al een back-up gemaakt naar <i>%3</i>. + There was an error while accessing the configuration file at %1. Please make sure the file can be accessed by your system account. Fout bij het benaderen van het configuratiebestand op %1. Zorg ervoor dat het bestand door je systeemaccount kan worden benaderd. + deleting verwijderen + ignoring negeren + newer newer software version recenter + older older software version ouder @@ -1117,18 +1302,22 @@ Wait for the new sync, then encrypt it. OCC::AuthenticationDialog + &Password: &Wachtwoord: + &Username: &Gebruikersnaam: + Authentication Required Authenticatie vereist + Enter username and password for "%1" at %2. Geef gebruikersnaam en wachtwoord op voor "%1" bij %2. @@ -1136,10 +1325,12 @@ Wait for the new sync, then encrypt it. OCC::BasePropagateRemoteDeleteEncrypted + "%1 Failed to unlock encrypted folder %2". "%1 kon versleutelde map %2" niet ontgrendelen. + Wrong HTTP code returned by server. Expected 204, but received "%1 %2". Foutieve HTTP code ontvangen van de server. Verwacht was 204, maar ontvangen "%1 %2". @@ -1147,46 +1338,58 @@ Wait for the new sync, then encrypt it. OCC::BulkPropagatorJob + Error updating metadata: %1 Fout bij bijwerken metadata: %1 + File %1 cannot be uploaded because another file with the same name, differing only in case, exists Bestand %1 kan niet worden geüpload omdat er al een ander bestand met dezelfde naam bestaat, al verschillen hoofd/kleine letters + File %1 has invalid modification time. Do not upload to the server. Bestand %1 heeft een ongeldige laatste wijziging datum. Upload niet naar de server. + File %1 has invalid modified time. Do not upload to the server. Bestand %1 heeft een ongeldige wijzigingstijd. Niet uploaden naar de server. + File Removed (start upload) %1 Bestand verwijderd (start upload) %1 + + Local file changed during sync. Lokaal bestand gewijzigd tijdens synchronisatie. + Local file changed during syncing. It will be resumed. Lokaal bestand gewijzigd gedurende synchronisatie. Wordt opnieuw meegenomen. + Network error: %1 Netwerkfout: %1 + Restoration failed: %1 Herstellen mislukt: %1 + The file %1 is currently in use Bestand %1 is momenteel in gebruik + The local file was removed during sync. Het lokale bestand werd verwijderd tijdens synchronisatie. @@ -1194,30 +1397,37 @@ Wait for the new sync, then encrypt it. OCC::CaseClashConflictSolver + Cannot rename file because a file with the same name already exists on the server. Please pick another name. Kan het bestand niet hernoemen omdat er al een bestand met dezelfde naam op de server bestaat. Kies een andere naam. + Could not rename file. Please make sure you are connected to the server. Kan het bestand niet hernoemen. Zorg dat je verbonden bent met de server. + Failed to fetch permissions with error %1 Ophalen van machtigingen mislukt met fout %1 + Filename contains leading and trailing spaces. De bestandsnaam bevat spaties vooraan en achteraan. + Filename contains leading spaces. De bestandsnaam bevat spaties vooraan. + Filename contains trailing spaces. De bestandsnaam bevat spaties achteraan. + You don't have the permission to rename this file. Please ask the author of the file to rename it. Je bent niet gemachtigd om dit bestand te hernoemen. Vraag de auteur van het bestand om het te hernoemen. @@ -1225,86 +1435,111 @@ Wait for the new sync, then encrypt it. OCC::CaseClashFilenameDialog + %1 does not support equal file names with only letter casing differences. %1 ondersteund geen overeenkomstige bestandsnamen met verschil in hoofdlettergebruik. + + Filename contains illegal characters: %1 + Bestandsnaam bevat ongeldige tekens: %1 + + + + Filename contains leading and trailing spaces. + De bestandsnaam bevat spaties vooraan en achteraan. + + + + Filename contains leading spaces. + De bestandsnaam bevat spaties vooraan. + + + + Filename contains trailing spaces. + De bestandsnaam bevat spaties achteraan. + + + + Rename file + Bestand hernoemen + + + + The file "%1" could not be synced because of a case clash conflict with an existing file on this system. + Het bestand %1 kan niet worden gesynchroniseerd vanwege een conflict in hoofdlettergebruik met een bestaand bestand op dit systeem. + + + + Use invalid name + Gebruik ongeldige naam + + + + 0 byte 0 bytes + Case Clash Conflict Conflict in hoofdlettergebruik + Case clashing file Bestand met conflict in hoofdlettergebruik + Error Fout + Existing file Bestaand bestand - Filename contains illegal characters: %1 - Bestandsnaam bevat ongeldige tekens: %1 - - - Filename contains leading and trailing spaces. - De bestandsnaam bevat spaties vooraan en achteraan. - - - Filename contains leading spaces. - De bestandsnaam bevat spaties vooraan. - - - Filename contains trailing spaces. - De bestandsnaam bevat spaties achteraan. - - + New filename Nieuwe bestandsnaam + + Open clashing file Open bestand met conflict + + Open existing file Open bestaand bestand + Please enter a new name for the clashing file: Voer alsjeblieft een nieuwe naam in voor het bestand met het conflict: - Rename file - Bestand hernoemen - - - The file "%1" could not be synced because of a case clash conflict with an existing file on this system. - Het bestand %1 kan niet worden gesynchroniseerd vanwege een conflict in hoofdlettergebruik met een bestaand bestand op dit systeem. - - + The file could not be synced because it generates a case clash conflict with an existing file on this system. The file could not be synced because it generates a case clash conflict with an existing file on this system. - Use invalid name - Gebruik ongeldige naam - - + file A bestand A + file B bestand B + + today vandaag @@ -1312,6 +1547,7 @@ Wait for the new sync, then encrypt it. OCC::CleanupPollsJob + Error writing metadata to the database Fout bij schrijven van metadata naar de database @@ -1319,27 +1555,33 @@ Wait for the new sync, then encrypt it. OCC::ClientSideEncryption + Enter Certificate USB Token PIN: + Enter E2E passphrase Invoeren E2E wachtwoord + Input PIN code Please keep it short and shorter than "Enter Certificate USB Token PIN:" + Invalid PIN. Login failed + Login to the token failed after providing the user PIN. It may be invalid or wrong. Please try again! + Please enter your end-to-end encryption passphrase:<br><br>Username: %2<br>Account: %3<br> Voer je begin-tot-eind versleutelingswachtwoord in: <br><br>Gebruiker: %2<br>Account: %3<br> @@ -1347,66 +1589,87 @@ Wait for the new sync, then encrypt it. OCC::ConflictDialog - 0 byte - 0 bytes - - - <a href="%1">Open local version</a> - <a href="%1">Open lokale versie</a> - - - <a href="%1">Open server version</a> - <a href="%1">Open serverversie</a> - - - Click to open the file - Klik om het bestand te openen - - - Conflicting versions of %1. - Conflicterende versies van %1. - - + Keep both versions Bewaar beide versies + Keep local version Bewaar lokale versie + + Keep selected version Bewaar geselecteerde versie + Keep server version Bewaar serverversie - Local version - Lokale versie - - + Open local version Open lokale versie + Open server version Open serverversie + + + 0 byte + 0 bytes + + + + <a href="%1">Open local version</a> + <a href="%1">Open lokale versie</a> + + + + <a href="%1">Open server version</a> + <a href="%1">Open serverversie</a> + + + + + Click to open the file + Klik om het bestand te openen + + + + + Conflicting versions of %1. + Conflicterende versies van %1. + + + + Local version + Lokale versie + + + Server version Serverversie + Sync Conflict Synchronisatieconflict + Which version of the file do you want to keep?<br/>If you select both versions, the local file will have a number added to its name. Welke versie van het bestand wil je bewaren? <br/>Als je beide versies selecteert, wordt er een getal achter de bestandsnaam van het lokale bestand gezet. + + today vandaag @@ -1414,22 +1677,29 @@ Wait for the new sync, then encrypt it. OCC::ConflictSolver + Confirm deletion Bevestig verwijderen + Do you want to delete the directory <i>%1</i> and all its contents permanently? Wil je de map <i>%1</i>met gehele inhoud permanent verwijderen? + Do you want to delete the file <i>%1</i> permanently? Wil je het bestand <i>%1</i>permanent verwijderen? + + Error Fout + + Moving file failed: %1 @@ -1441,26 +1711,32 @@ Wait for the new sync, then encrypt it. OCC::ConnectionValidator + Authentication error: Either username or password are wrong. Authenticatiefout: Gebruikersnaam of wachtwoord onjuist. + No Nextcloud account configured Geen Nextcloud-account geconfigureerd + Please update to the latest server and restart the client. Werk de server bij naar de nieuwste versie en herstart het programma. + The configured server for this client is too old De voor dit programma ingestelde server is te oud + The provided credentials are not correct De verstrekte inloggegevens zijn niet juist + Timeout Time-out @@ -1468,64 +1744,78 @@ Wait for the new sync, then encrypt it. OCC::DataProtectionPage + + This application uses tracking technologies. By clicking on Agree, you accept the processing of your anonymized data. You can adjust your choices at any time via the settings. <br/> <br/>Information on data processing and more can be found in our <a href='https://wl.hidrive.com/easy/0005'>privacy policy</a>. + Deze applicatie maakt gebruik van traceertechnologieën. Door op Akkoord te klikken, accepteert u de verwerking van uw geanonimiseerde gegevens. U kunt uw keuzes op elk gewenst moment aanpassen via de instellingen. <br/> <br/>Informatie over gegevensverwerking en meer kunt u vinden in ons <a href='https://wl.hidrive.com/easy/0045'>privacybeleid</a>. + + + Agree Akkoord + Form Formulier + Settings Instellingen - - This application uses tracking technologies. By clicking on Agree, you accept the processing of your anonymized data. You can adjust your choices at any time via the settings. <br/> <br/>Information on data processing and more can be found in our <a href='https://wl.hidrive.com/easy/0005'>privacy policy</a>. - Deze applicatie maakt gebruik van traceertechnologieën. Door op Akkoord te klikken, accepteert u de verwerking van uw geanonimiseerde gegevens. U kunt uw keuzes op elk gewenst moment aanpassen via de instellingen. <br/> <br/>Informatie over gegevensverwerking en meer kunt u vinden in ons <a href='https://wl.hidrive.com/easy/0045'>privacybeleid</a>. - - + OCC::DataProtectionSettingsPage + + We collect anonymized data to optimize our app. We use software solutions from various partners for this purpose. We want to give you full transparency and freedom of choice regarding the collection and processing of your anonymized usage. You can change your settings at any time under the menu item Data Protection. + We verzamelen geanonimiseerde gegevens om onze app te optimaliseren. Hiervoor gebruiken we softwareoplossingen van verschillende partners. We willen je volledige transparantie en keuzevrijheid geven met betrekking tot het verzamelen en verwerken van je geanonimiseerde gebruik. Je kunt je instellingen op elk gewenst moment wijzigen onder het menu-item Gegevensbescherming. + + + Back Terug + Form Formulier + Necessary data Noodzakelijke gegevens + Required to ensure that the software can be used as expected Vereist om ervoor te zorgen dat de software kan worden gebruikt zoals verwacht + Save Settings Instellingen opslaan + Send anonymous use Anoniem gebruik verzenden + This helps us to optimize the software and to better identify system crashes and unexpected errors. Dit helpt ons om de software te optimaliseren en om systeemcrashes en onverwachte fouten beter te identificeren. - - We collect anonymized data to optimize our app. We use software solutions from various partners for this purpose. We want to give you full transparency and freedom of choice regarding the collection and processing of your anonymized usage. You can change your settings at any time under the menu item Data Protection. - We verzamelen geanonimiseerde gegevens om onze app te optimaliseren. Hiervoor gebruiken we softwareoplossingen van verschillende partners. We willen je volledige transparantie en keuzevrijheid geven met betrekking tot het verzamelen en verwerken van je geanonimiseerde gebruik. Je kunt je instellingen op elk gewenst moment wijzigen onder het menu-item Gegevensbescherming. - - + OCC::DiscoveryPhase + Error while canceling deletion of %1 Fout bij annuleren verwijderen van %1 + Error while canceling deletion of a file Fout bij het annuleren van verwijdering van een bestand @@ -1533,14 +1823,19 @@ Wait for the new sync, then encrypt it. OCC::DiscoverySingleDirectoryJob + + Encrypted metadata setup error! Encrypted metadata setup error! + Encrypted metadata setup error: initial signature from server is empty. Fout bij opzetten versleutelde metagegevens: initiële handtekening van server is leeg. + + Server error: PROPFIND reply is not XML formatted! Serverfout: PROPFIND-antwoord heeft geen XML-opmaak! @@ -1548,22 +1843,27 @@ Wait for the new sync, then encrypt it. OCC::DiscoverySingleLocalDirectoryJob + Directory not accessible on client, permission denied Map niet toegankelijk op client, toegang geweigerd + Directory not found: %1 Map niet gevonden: %1 + Error while opening directory %1 Fout bij het openen van map %1 + Error while reading directory %1 Fout tijdens lezen van map %1 + Filename encoding is not valid Bestandsnaamcodering is niet geldig @@ -1571,62 +1871,93 @@ Wait for the new sync, then encrypt it. OCC::EditLocallyJob + + + An error occurred during data retrieval. Er trad een fout op tijdens het ophalen van data. + + An error occurred during setup. Er trad een fout op bij het instellen. + + An error occurred trying to synchronise the file to edit locally. Er trad een fout op bij de poging het bestand voor lokaal bewerken te synchroniseren. + + + + Could not find a file for local editing. Make sure it is not excluded via selective sync. Kon geen bestand vinden om lokaal te bewerken. Zorg ervoor dat het niet uitgesloten is door selectieve synchronisatie. + + Could not find a file for local editing. Make sure its path is valid and it is synced locally. Kon geen bestand vinden om lokaal te bewerken. Zorg ervoor dat het pad juist is en dat het lokaal gesynchroniseerd is. + Could not find a remote file info for local editing. Make sure its path is valid. Kon geen remote bestandsinformatie vinden om lokaal te bewerken. Zorg ervoor dat het pad juist is. + Could not open %1 Kon %1 niet openen + + + + + + + + Could not start editing locally. Kon lokaal bewerken niet starten. + File %1 already locked. Bestand %1 is al vergrendeld. + File %1 could not be locked. Bestand %1 kon niet vergrendeld worden. + File %1 now locked. Bestand %1 is nu vergrendeld. + Invalid local file path. Ongeldig lokaal bestandspad. + + Lock will last for %1 minutes. You can also unlock this file manually once you are finished editing. Vergrendeling duurt %1 minuten. Als je klaar bent met verwerken, kan je het bestand ook handmatig ontgrendelen. + Please try again. Probeer a.u.b opnieuw + Server error: PROPFIND reply is not XML formatted! Serverfout: PROPFIND-antwoord heeft geen XML-opmaak! @@ -1634,10 +1965,12 @@ Wait for the new sync, then encrypt it. OCC::EditLocallyManager + Could not validate the request to open a file from server. Kon de aanvraag niet valideren voor het openen van een bestand op de server. + Please try again. Probeer a.u.b opnieuw @@ -1645,26 +1978,34 @@ Wait for the new sync, then encrypt it. OCC::EditLocallyVerificationJob + An error occurred trying to verify the request to edit locally. Er trad een fout op bij de aanvraag voor lokaal bewerken. + Could not find an account for local editing. Kon geen account vinden voor lokaal bewerken. + Could not start editing locally. Kon lokaal bewerken niet starten. + Invalid file path was provided. Ongeldig pad opgegeven. + Invalid token received. Ongeldig token ontvangen. + + + Please try again. Probeer a.u.b opnieuw @@ -1672,22 +2013,34 @@ Wait for the new sync, then encrypt it. OCC::EncryptedFolderMetadataHandler + Error fetching encrypted folder ID. Fout bij ophalen ID van versleutelde map. + + + + + + Error fetching metadata. Fout bij ophalen metadata: %1 + + + Error locking folder. Fout bij vergrendelen map. + Error parsing or decrypting metadata. Fout bij verwerken of ontsleutelen metadata. + Failed to upload metadata Kon metadata niet uploaden. @@ -1695,6 +2048,7 @@ Wait for the new sync, then encrypt it. OCC::EncryptFolderJob + Could not generate the metadata for encryption, Unlocking the folder. This can be an issue with your OpenSSL libraries. Kan de metadata voor versleuteling niet genereren, de map wordt ontgrendeld. @@ -1704,6 +2058,7 @@ Dit kan een probleem zijn met je OpenSSL-bibliotheken. OCC::FileDetails + %1 day(s) ago days elapsed since file last modified @@ -1712,6 +2067,7 @@ Dit kan een probleem zijn met je OpenSSL-bibliotheken. + %1 hour(s) ago hours elapsed since file last modified @@ -1720,6 +2076,7 @@ Dit kan een probleem zijn met je OpenSSL-bibliotheken. + %1 minute(s) ago minutes elapsed since file last modified @@ -1728,6 +2085,7 @@ Dit kan een probleem zijn met je OpenSSL-bibliotheken. + %1 month(s) ago months elapsed since file last modified @@ -1736,6 +2094,7 @@ Dit kan een probleem zijn met je OpenSSL-bibliotheken. + %1 second(s) ago seconds elapsed since file last modified @@ -1744,6 +2103,7 @@ Dit kan een probleem zijn met je OpenSSL-bibliotheken. + %1 year(s) ago years elapsed since file last modified @@ -1752,6 +2112,7 @@ Dit kan een probleem zijn met je OpenSSL-bibliotheken. + Locked by %1 - Expires in %2 minute(s) remaining time before lock expires @@ -1763,26 +2124,36 @@ Dit kan een probleem zijn met je OpenSSL-bibliotheken. OCC::Flow2Auth + + Could not parse the JSON returned from the server: <br><em>%1</em> Kan de van de server ontvangen JSON niet verwerken: <br><em>%1</em> + + Error returned from the server: <em>%1</em> Fout gemeld door de server: <em>%1</em> + The polling URL does not start with HTTPS despite the login URL started with HTTPS. Login will not be possible because this might be a security issue. Please contact your administrator. De polling-URL begint niet met HTTPS, ondanks dat de login-URL met HTTPS begint. Inloggen is niet mogelijk omdat dit een beveiligingsprobleem kan zijn. Neem contact op met je beheerder. + + The reply from the server did not contain all expected fields Het antwoord van de server bevatte niet alle verwachte velden + The returned server URL does not start with HTTPS despite the login URL started with HTTPS. Login will not be possible because this might be a security issue. Please contact your administrator. De geretourneerde server-URL begint niet met HTTPS, ondanks dat de inlog-URL begint met HTTPS. Inloggen is niet mogelijk omdat dit een beveiligingsprobleem kan zijn. Neem contact op met je beheerder. + + There was an error accessing the "token" endpoint: <br><em>%1</em> Er trad een fout op bij het benaderen van het "token" endpoint: <br><em>%1</em> @@ -1790,38 +2161,48 @@ Dit kan een probleem zijn met je OpenSSL-bibliotheken. OCC::Flow2AuthWidget + Copy Link Kopiëren link + + Error Fout + Link copied to clipboard. Link gekopieerd naar het klembord. + Open Browser Browser openen + Polling for authorization Controleren op autorisatie + Starting authorization Starten autorisatie + Switch to your browser to connect your account Schakel over naar je browser om je account te verbinden + Unable to open the Browser, please copy the link to your Browser. Kan de browser niet openen, kopieer de link naar je browser. + Waiting for authorization Wachten op autorisatie @@ -1829,6 +2210,7 @@ Dit kan een probleem zijn met je OpenSSL-bibliotheken. OCC::Folder + %1 and %n other file(s) are currently locked. %1 en %n ander bestand zijn momenteel op slot. @@ -1836,6 +2218,7 @@ Dit kan een probleem zijn met je OpenSSL-bibliotheken. + %1 and %n other file(s) could not be synced due to errors. See the log for details. %1 en %n ander bestand(en) konden niet worden gesynchroniseerd wegens fouten. Bekijk het log voor details. @@ -1843,6 +2226,7 @@ Dit kan een probleem zijn met je OpenSSL-bibliotheken. + %1 and %n other file(s) have been added. %1 en %n andere bestand zijn toegevoegd. @@ -1850,6 +2234,7 @@ Dit kan een probleem zijn met je OpenSSL-bibliotheken. + %1 and %n other file(s) have been removed. @@ -1857,6 +2242,7 @@ Dit kan een probleem zijn met je OpenSSL-bibliotheken. + %1 and %n other file(s) have been updated. %1 en %n ander bestand(en) zijn bijgewerkt. @@ -1864,14 +2250,17 @@ Dit kan een probleem zijn met je OpenSSL-bibliotheken. + %1 could not be synced due to an error. See the log for details. %1 kon niet worden gesynchroniseerd door een fout. Bekijk het log voor details. + %1 has a sync conflict. Please check the conflict file! %1 heeft een synchronisatie-conflict. Controleer het conflictbestand! + %1 has and %n other file(s) have sync conflicts. %1 en %n ander bestand(en) hebben een sync conflict. @@ -1879,11 +2268,13 @@ Dit kan een probleem zijn met je OpenSSL-bibliotheken. + %1 has been added. %1 names a file. %1 is toegevoegd. + %1 has been moved to %2 and %n other file(s) have been moved. %1 is verplaatst naar %2 en %n ander bestand(en) is verplaatst. @@ -1891,15 +2282,18 @@ Dit kan een probleem zijn met je OpenSSL-bibliotheken. + %1 has been moved to %2. %1 is verplaatst naar %2. + %1 has been removed. %1 names a file. %1 is verwijderd. + %1 has been renamed to %2 and %n other file(s) have been renamed. %1 is hernoemd naar %2 en %n ander bestand(en) is hernoemd. @@ -1907,30 +2301,36 @@ Dit kan een probleem zijn met je OpenSSL-bibliotheken. + %1 has been renamed to %2. %1 and %2 name files. %1 is hernoemd naar %2. + %1 has been updated. %1 names a file. %1 is bijgewerkt. + %1 is currently locked. %1 is momenteel op slot. + A folder from an external storage has been added. Er is een map op externe opslag toegevoegd. + A folder has surpassed the set folder size limit of %1MB: %2. %3 Een map is groter geworden dan de ingestelde limiet van %1MB: %2. %3 + A large number of files in the server have been deleted. Please confirm if you'd like to proceed with these deletions. Alternatively, you can restore all deleted files by uploading from '%1' folder to the server. @@ -1939,6 +2339,7 @@ Bevestig alstublieft of u door wilt gaan met deze verwijderingen. U kunt ook alle verwijderde bestanden terugzetten door vanuit de map '%1' te uploaden naar de server. + A large number of files in your local '%1' folder have been deleted. Please confirm if you'd like to proceed with these deletions. Alternatively, you can restore all deleted files by downloading them from the server. @@ -1947,10 +2348,12 @@ Bevestig alstublieft of u door wilt gaan met deze verwijderingen. U kunt ook alle verwijderde bestanden herstellen door ze van de server te downloaden. + A new folder larger than %1 MB has been added: %2. Er is een nieuwe map groter dan %1 MB toegevoegd: %2. + Changes in synchronized folders could not be tracked reliably. This means that the synchronization client might not upload local changes immediately and will instead only scan for local changes and upload them occasionally (every two hours by default). @@ -1963,70 +2366,87 @@ Dit betekent dat de synchronisatieclient misschien niet meteen lokale wijziginge %1 + Could not read system exclude file Kon het systeem-uitsluitingsbestand niet lezen + Keep syncing Doorgaan met synchronisatie + Please choose a different location. %1 isn't a readable folder. + Please choose a different location. %1 isn't a valid folder. + Please choose a different location. The folder %1 doesn't exist. + Please go in the settings to select it if you wish to download it. Ga naar de instellingen om het te selecteren als u deze wilt downloaden. + Proceed with Deletion Doorgaan met verwijderen + Remove all files? Alle bestanden verwijderen? + Restore Files from Server Bestanden terugzetten van server + Restore Files to Server Bestanden terugzetten naar server + Stop syncing Stop synchronisatie + Sync Activity Synchronisatie-activiteit + The file %1 was created but was excluded from synchronization previously. It will not be synchronized. Bestand %1 is gecreëerd, maar eerder uitgesloten van synchronisatie. Het wordt niet gesynchroniseerd. + The folder %1 has surpassed the set folder size limit of %2MB. De map %1 is groter geworden dan de ingestelde limiet van %2MB + The folder %1 was created but was excluded from synchronization previously. Data inside it will not be synchronized. Map %1 is gecreëerd, maar eerder uitgesloten van synchronisatie. Bestanden erin worden niet gesynchroniseerd. + Virtual file download failed with code "%1", status "%2" and error message "%3" + Would you like to stop syncing this folder? Wil je stoppen met het synchroniseren van deze map? @@ -2034,26 +2454,32 @@ Dit betekent dat de synchronisatieclient misschien niet meteen lokale wijziginge OCC::FolderCreationDialog + %1 Create new folder %1 Nieuwe map maken + Could not create a folder! Check your write permissions. Kan map niet aanmaken! Controleer je schrijfmachtiging. + + Error + Fout + + + Create new folder Maak nieuwe map aan + Enter folder name Geef mapnaam op - Error - Fout - - + Folder already exists Map bestaat al @@ -2061,108 +2487,136 @@ Dit betekent dat de synchronisatieclient misschien niet meteen lokale wijziginge OCC::FolderMan + %1 (Sync is paused) %1 (Synchronisatie onderbroken) + (backup %1) (backup %1) + (backup) (backup) + An old sync journal "%1" was found, but could not be removed. Please make sure that no application is currently using it. Een oud synchronisatieverslag "%1" is gevonden maar kan niet worden verwijderd. Zorg ervoor dat geen applicatie dit bestand gebruikt. + Could not reset folder state Kan de beginstaat van de map niet terugzetten + Last sync was successful. Laatste synchronisatie was geslaagd. + Please choose a different location. %1 is already being used as a sync folder for %2. folder location, server url + + Please choose a different location. %1 is already being used as a sync folder. + Please choose a different location. %1 is already contained in a folder used as a sync folder. + Please choose a different location. The path %1 doesn't exist. + Please choose a different location. The path %1 isn't a folder. + Please choose a different location. The selected folder isn't valid. + + Please choose a different location. You don't have enough permissions to write to %1. folder location + Preparing for sync. Synchronisatie wordt voorbereid + Setup error. Installatiefout. + Sync finished with unresolved conflicts. Synchronisatie beëindigd met niet opgeloste conflicten. + Sync is paused. Synchronisatie gepauzeerd. + Sync is running. Bezig met synchroniseren. + Sync request was cancelled. Synchronisatieaanvraag werd geannuleerd. + Syncing %1 Synchroniseren %1 + Syncing %1 (%2 left) Synchroniseren %1 (%2 over) + Syncing %1 (A few seconds left) + Syncing %1 of %2 Synchroniseren %1 van %2 + Syncing %1 of %2 (%3 left) + Syncing %1 of %2 (A few seconds left) + The folder %1 is linked to multiple accounts. This setup can cause data loss and it is no longer supported. To resolve this issue: please remove %1 from one of the accounts and create a new sync folder. @@ -2170,10 +2624,12 @@ For advanced users: this issue might be related to multiple sync database files + Undefined state. Ongedefinieerde status. + Waiting to start syncing. In afwachting van synchronisatie. @@ -2181,14 +2637,17 @@ For advanced users: this issue might be related to multiple sync database files OCC::FolderStatusDelegate + Add Folder Sync Mapsynchronisatie toevoegen + File Bestand + Synchronize any other local folder with your %1 Synchroniseer een andere lokale map met uw %1 @@ -2196,114 +2655,142 @@ For advanced users: this issue might be related to multiple sync database files OCC::FolderStatusModel + %1 %2 Example text: "Uploading foobar.png" %1 %2 + %1 %2 (%3 of %4) Example text: "Uploading foobar.png (2MB of 2MB)" %1 %2 (%3 van %4) + %1 %2 … Example text: "Uploading foobar.png (1MB of 2MB) time left 2 minutes at a rate of 24Kb/s" Example text: "Syncing 'foo.txt', 'bar.txt'" %1 %2 ... + + %1 (%2) %1 (%2) + %1 of %2, file %3 of %4 Example text: "12 MB of 345 MB, file 6 of 7" %1 van %2, bestand %3 van %4 + %5 left, %1 of %2, file %3 of %4 %5 over, %1 van %2, bestand %3 van %4 + + , , + A few seconds left, %1 of %2, file %3 of %4 Example text: "5 minutes left, 12 MB of 345 MB, file 6 of 7" Een paar seconden over, %1 van %2, bestand %3 van %4 + About to start syncing In afwachting van synchronisatie + Checking for changes in local "%1" Controleren op wijzigingen in lokale "%1" + Checking for changes in remote "%1" Controleren op wijzigingen in externe "%1" + Click this button to add a folder to synchronize. Klik op deze knop om een te synchroniseren map toe te voegen. + Could not decrypt! Kon niet ontsleutelen! + Download %1/s Example text: "Download 24Kb/s" (%1 is replaced by 24Kb (translated)) Download %1/s + Error while loading the list of folders from the server. Fout bij ophalen mappenlijst van de server. + Fetching folder list from server … Mappenlijst ophalen van de server ... + File %1 of %2 Bestand %1 van %2 + Preparing to sync … Voorbereiden synchronisatie ... + Signed out Afgemeld + Synchronizing files in local folder Synchroniseren bestanden in lokale map + Synchronizing virtual files in local folder Synchroniseren virtuele bestanden in lokale map + Syncing local and remote changes Synchroniseren lokale en remote aanpassingen + There are unresolved conflicts. Click for details. Er zijn nog niet-opgehelderde conflicten. Klik voor details. + Upload %1/s Example text: "Upload 24Kb/s" (%1 is replaced by 24Kb (translated)) Upload %1/s + Virtual file support is enabled. Virtuele bestandsondersteuning is ingeschakeld. + Waiting for %n other folder(s) … Wacht op %n andere map ... @@ -2311,14 +2798,17 @@ For advanced users: this issue might be related to multiple sync database files + You need to be connected to add a folder U moet verbonden zijn om een map toe te voegen + ↑ %1/s ↑ %1/s + ↓ %1/s ↓ %1/s @@ -2326,6 +2816,7 @@ For advanced users: this issue might be related to multiple sync database files OCC::FolderWatcher + The watcher did not receive a test notification. De kijker ontving geen testmelding. @@ -2333,6 +2824,7 @@ For advanced users: this issue might be related to multiple sync database files OCC::FolderWatcherPrivate + This problem usually happens when the inotify watches are exhausted. Check the FAQ for details. Dit gebeurt gewoonlijk wanneer de inotify monitors op zijn. Klik op de FAQ voor details. @@ -2340,10 +2832,12 @@ For advanced users: this issue might be related to multiple sync database files OCC::FolderWizard + Add Folder Sync Connection Toevoegen mapsynchronisatie verbinding + Add Sync Connection Toevoegen Sync verbinding @@ -2351,30 +2845,37 @@ For advanced users: this issue might be related to multiple sync database files OCC::FolderWizardLocalPath + Add Folder Sync Mapsynchronisatie toevoegen + Choose Kies + Click to select a local folder to sync. Klikken om een lokale map te selecteren voor synchronisatie + Enter the path to the local folder. Geef het pad op naar de lokale map. + Select a folder on your hard drive that should be permanetly connected to your %1. All files and subfolders are automatically uploaded and synchronized Selecteer een map op je harde schijf die permanent verbonden moet zijn met je %1. Alle bestanden en submappen worden automatisch geüpload en gesynchroniseerd. + Select the source folder Selecteer de bronmap + Step 1 of 3: Select local folder Stap 1 van 3: Selecteer lokale map @@ -2382,58 +2883,74 @@ For advanced users: this issue might be related to multiple sync database files OCC::FolderWizardRemotePath + Add Folder Sync Mapsynchronisatie toevoegen + Authentication failed accessing %1 Authenticatie mislukt bij benaderen %1 + Both folders are permanently linked and the respective contents are automatically synchronized and updated. Beide mappen zijn permanent gekoppeld en de respectieve inhoud wordt automatisch gesynchroniseerd en bijgewerkt. + Choose this to sync the entire account Kies dit om je volledige account te synchroniseren + Create Remote Folder Externe map aanmaken + Create folder Maak map + Enter the name of the new folder to be created below "%1": Voer de naam van de hieronder te maken nieuwe map in "%1": + Failed to create the folder on %1. Please check manually. Aanmaken van de map op %1 mislukt. Controleer handmatig. + Failed to list a folder. Error: %1 Tonen mappenlijst mislukt. Fout: %1 + Folder was successfully created on %1. Map is succesvol aangemaakt op %1. + + + Please choose a different location. %1 is already being synced to %2. + Please now select or create a target folder in your %1 where the content should be uploaded and synchronized. Selecteer of maak nu een doelmap in uw %1 waar de inhoud moet worden geüpload en gesynchroniseerd. + Refresh Vernieuwen + Step 2 of 3: Directory in your %1 Stap 2 van 3: Directory in uw %1 @@ -2441,26 +2958,36 @@ For advanced users: this issue might be related to multiple sync database files OCC::FolderWizardSelectiveSync + + + (experimental) (experimenteel) + Add Folder Sync Mapsynchronisatie toevoegen + Step 3 of 3: Selektive Synchronisation Stap 3 van 3: Selektieve synchronisatie + + + Use virtual files instead of downloading content immediately %1 Gebruik virtuele bestanden in plaats van direct downloaden content%1 + Virtual files are not supported at the selected location + Virtual files are not supported for Windows partition roots as local folder. Please choose a valid subfolder under drive letter. Virtuele bestanden worden niet ondersteund voor Windows-partitie-hoofdmappen als lokale map. Kies een geldige submap onder de stationsletter. @@ -2468,229 +2995,281 @@ For advanced users: this issue might be related to multiple sync database files OCC::GeneralSettings - &Analysis data collection for needs-based design - &Analyse van gegevensverzameling voor een op behoeften gebaseerd ontwerp + + - beta: contains versions with new features that may not be tested thoroughly +- daily: contains versions created daily only for testing and development + +Downgrading versions is not possible immediately: changing from beta to stable means waiting for the new stable version. + list of available update channels to non enterprise users and downgrading warning + - &Automatically check for updates - &Controleer automatisch op updates + + - enterprise: contains stable versions for customers. + +Downgrading versions is not possible immediately: changing from stable to enterprise means waiting for the new enterprise version. + list of available update channels to enterprise users and downgrading warning + - &Launch on System Startup - &Starten bij systeemstart + + Cancel + Annuleren - &Restart && Update - &Herstarten && Bijwerken + + Change update channel + Wijzigen bijwerkkanaal - - beta: contains versions with new features that may not be tested thoroughly -- daily: contains versions created daily only for testing and development - -Downgrading versions is not possible immediately: changing from beta to stable means waiting for the new stable version. - list of available update channels to non enterprise users and downgrading warning + + Changing update channel? + Wijzigen bijwerkkanaal? + + + + Debug Archive Created + Debugarchief Aangemaakt + + + + Debug archive is created at %1 + Debugarchief is gemaakt op %1 + + + + Server notifications that require attention. + Servermeldingen die aandacht nodig hebben. + + + + Show call notification dialogs. + Toon oproepmeldingenvensters. + + + + The channel determines which upgrades will be offered to install: +- stable: contains tested versions considered reliable + + starts list of available update channels, stable is always available - - enterprise: contains stable versions for customers. - -Downgrading versions is not possible immediately: changing from stable to enterprise means waiting for the new enterprise version. - list of available update channels to enterprise users and downgrading warning - + + You cannot disable autostart because system-wide autostart is enabled. + Je kunt autostart niet uitschakelen omdat systeem-brede autostart is ingeschakeld. + + + + Zip Archives + Zip Archieven + + + + daily + dagelijks + + + + enterprise + zakelijk + + + + https://wl.hidrive.com/easy/0004 + https://wl.hidrive.com/easy/0054 + + + + https://wl.hidrive.com/easy/0005 + https://wl.hidrive.com/easy/0055 + + + + https://wl.hidrive.com/easy/0006 + https://wl.hidrive.com/easy/0006 + + + + https://wl.hidrive.com/easy/0007 + https://wl.hidrive.com/easy/0057 + + + + &Automatically check for updates + &Controleer automatisch op updates + + + + &Launch on System Startup + &Starten bij systeemstart + + + + &Restart && Update + &Herstarten && Bijwerken + Advanced Geavanceerd + Ask for confirmation before synchronizing external storages Vraag bevestiging voor synchronisatie van mappen op externe opslag + Ask for confirmation before synchronizing new folders larger than Ask for confirmation before synchronizing new folders larger than + Automatically disable synchronisation of folders that overcome limit Automatically disable synchronisation of folders that overcome limit - Cancel - Annuleren - - - Change update channel - Wijzigen bijwerkkanaal - - - Changing update channel? - Wijzigen bijwerkkanaal? - - + Check Now Controleer nu + + Create Debug Archive Debugarchief maken + Data Protection Gegevensbescherming - Debug Archive Created - Debugarchief Aangemaakt - - - Debug archive is created at %1 - Debugarchief is gemaakt op %1 - - + Desktop client x.x.x Desktop cliënt x.x.x + Edit &Ignored Files Bewerken &genegeerde bestanden + For System Tray Voor systeemvak + General Settings Algemene instellingen + Legal Notice Juridische bepalingen + MB Trailing part of "Ask confirmation before syncing folder larger than" MB + More Information Meer informatie + Move removed files to trash Verplaats verwijderde bestanden naar de prullenbak + Necessary data Noodzakelijke gegevens + Notify when synchronised folders grow larger than specified limit Melding als gesynchroniseerde mappen groter worden dan de opgegeven limiet + Open Source Software Open source software + Privacy Policy Privacybeleid + Required to ensure that the software can be used as expected Vereist om ervoor te zorgen dat de software kan worden gebruikt zoals verwacht + S&how crash reporter T&onen crash reporter + Send anonymous use Anoniem gebruik verzenden - Server notifications that require attention. - Servermeldingen die aandacht nodig hebben. - - + Show Server &Notifications Tonen server&meldingen - Show call notification dialogs. - Toon oproepmeldingenvensters. - - + Show call notifications + Show sync folders in &Explorer's navigation pane Show sync folders in &Explorer's navigation pane - The channel determines which upgrades will be offered to install: -- stable: contains tested versions considered reliable - - starts list of available update channels, stable is always available - - - + This helps us to optimize the software and to better identify system crashes and unexpected errors. Dit helpt ons om de software te optimaliseren en om systeemcrashes en onverwachte fouten beter te identificeren. + Update channel Bijwerkkanaal + Updates Updates + Usage Documentation Gebruiksdocumentatie + Use &monochrome icons - You cannot disable autostart because system-wide autostart is enabled. - Je kunt autostart niet uitschakelen omdat systeem-brede autostart is ingeschakeld. - - - Zip Archives - Zip Archieven - - + + beta beta - daily - dagelijks - - - enterprise - zakelijk - - - https://wl.hidrive.com/easy/0004 - https://wl.hidrive.com/easy/0054 - - - https://wl.hidrive.com/easy/0005 - https://wl.hidrive.com/easy/0055 - - - https://wl.hidrive.com/easy/0006 - https://wl.hidrive.com/easy/0006 - - - https://wl.hidrive.com/easy/0007 - https://wl.hidrive.com/easy/0057 - - + + stable stabiel @@ -2698,22 +3277,27 @@ Downgrading versions is not possible immediately: changing from stable to enterp OCC::GETFileJob + Connection Timeout Verbindingstime-out + No E-Tag received from server, check Proxy/Gateway Geen E-Tag ontvangen van de server, controleer Proxy/Gateway + Server returned wrong content-range Server retourneerde verkeerde content-bandbreedte + We received a different E-Tag for resuming. Retrying next time. We ontvingen een afwijkende E-Tag om door te gaan. We proberen het later opnieuw. + We received an unexpected download Content-Length. We ontvingen een onverwachte download Content-Lengte. @@ -2721,6 +3305,7 @@ Downgrading versions is not possible immediately: changing from stable to enterp OCC::GetOrCreatePublicLinkShare + Could not retrieve or create the public link share. Error: %1 @@ -2729,14 +3314,17 @@ Downgrading versions is not possible immediately: changing from stable to enterp %1 + Password for share required Wachtwoord voor deellink vereist + Please enter a password for your link share: Voer het wachtwoord in voor je deellink: + Sharing error Fout bij delen @@ -2744,18 +3332,22 @@ Downgrading versions is not possible immediately: changing from stable to enterp OCC::HttpCredentialsGui + <a href="%1">Click here</a> to request an app password from the web interface. <a href="%1">Klik hier</a> om een nieuw app wachtwoord via de web interface op te vragen. + Enter Password Vul het wachtwoord in + Please enter %1 password:<br><br>Username: %2<br>Account: %3<br> Voer %1 wachtwoord in:<br><br>Gebruiker: %2<br>Account: %3<br> + Reading from keychain failed with error: "%1" Het lezen van de sleutelketen is mislukt met fout: "%1" @@ -2763,49 +3355,50 @@ Downgrading versions is not possible immediately: changing from stable to enterp OCC::IgnoreListEditor + + This entry is provided by the system at "%1" and cannot be modified in this view. + Dit gegeven is door het systeem vastgelegd op "%1" en kan niet worden aangepast in deze weergave. + + + Files Ignored by Patterns Bestanden volgens patroon genegeerd + Global Ignore Settings Algemene negeer-instellingen + Ignored Files Editor Genegeerde bestanden-editor + Sync hidden files Synchroniseer verborgen bestanden - - This entry is provided by the system at "%1" and cannot be modified in this view. - Dit gegeven is door het systeem vastgelegd op "%1" en kan niet worden aangepast in deze weergave. - - + OCC::IgnoreListTableWidget - Add - Toevoegen - - + Add a new ignore pattern: Voeg nieuw negeerpatroon toe: - Allow Deletion - Verwijderen toestaan - - + Cannot write changes to "%1". Kan geen wijzigingen wegschrijven naar "%1". + Could not open file Kan het bestand niet openen + Files or folders matching a pattern will not be synchronized. Items where deletion is allowed will be deleted if they prevent a directory from being removed. This is useful for meta data. @@ -2814,18 +3407,32 @@ Items where deletion is allowed will be deleted if they prevent a directory from Objecten die verwijderd mogen worden, worden verwijderd als ze zouden verhinderen dat een map verwijderd wordt. Dit is nuttig voor metadata. + Ignore Pattern Patroon negeren + + Add + Toevoegen + + + + Allow Deletion + Verwijderen toestaan + + + Pattern Patroon + Remove Verwijderen + Remove all Alles verwijderen @@ -2833,117 +3440,146 @@ Objecten die verwijderd mogen worden, worden verwijderd als ze zouden verhindere OCC::InvalidFilenameDialog + Cannot rename file because a file with the same name does already exist on the server. Please pick another name. Kan het bestand niet hernoemen omdat er al een bestand met dezelfde naam op de server bestaat. Kies een andere naam. + Checking rename permissions … Hernoem machtigingen controleren ... + Could not rename file. Please make sure you are connected to the server. Kan het bestand niet hernoemen. Zorg ervoor dat je verbonden bent met de server. + Could not rename local file. %1 Kan lokaal bestand niet hernoemen. %1 - Error - Fout - - + Failed to fetch permissions with error %1 Ophalen van machtigingen mislukt met fout %1 + Filename contains illegal characters: %1 Bestandsnaam bevat ongeldige tekens: %1 + Filename contains leading and trailing spaces. De bestandsnaam bevat spaties vooraan en achteraan. + Filename contains leading spaces. De bestandsnaam bevat spaties vooraan. + Filename contains trailing spaces. De bestandsnaam bevat spaties achteraan. - Invalid filename - Ongeldige bestandsnaam - - - New filename - Nieuwe bestandsnaam - - - Please enter a new name for the file: - Voer alsjeblieft een nieuwe naam voor dit bestand in: - - + Rename file Bestand hernoemen + The file "%1" could not be synced because the name contains characters which are not allowed on the server. Het bestand %1 kan niet worden gesynchroniseerd omdat de naam tekens bevat die niet zijn toegestaan op dit systeem. + The file "%1" could not be synced because the name contains characters which are not allowed on this system. Het bestand %1 kan niet worden gesynchroniseerd omdat de naam tekens bevat die niet zijn toegestaan op dit systeem. - The file could not be synced because it contains characters which are not allowed on this system. - Dit bestand kon niet worden gesynchroniseerd omdat het symbolen bevat die niet toegestaan zijn op dit systeem. - - + The following basenames are not allowed: %1 De volgende basisnamen zijn niet toegestaan: %1 + The following characters are not allowed on the system: \ / : ? * " < > | leading/trailing spaces + The following characters are not allowed: %1 De volgende tekens zijn niet toegestaan: %1 + The following file extensions are not allowed: %1 De volgende bestandsextensies zijn niet toegestaan: %1 + The following filenames are not allowed: %1 De volgende bestandsnamen zijn niet toegestaan: %1 + Use invalid name Gebruik ongeldige naam + You don't have the permission to rename this file. Please ask the author of the file to rename it. Je bent niet gemachtigd om dit bestand te hernoemen. Vraag de auteur van het bestand om het te hernoemen. - + + + Error + Fout + + + + Invalid filename + Ongeldige bestandsnaam + + + + New filename + Nieuwe bestandsnaam + + + + Please enter a new name for the file: + Voer alsjeblieft een nieuwe naam voor dit bestand in: + + + + The file could not be synced because it contains characters which are not allowed on this system. + Dit bestand kon niet worden gesynchroniseerd omdat het symbolen bevat die niet toegestaan zijn op dit systeem. + + OCC::LegalNotice + <p>Copyright 2017-2025 Nextcloud GmbH<br />Copyright 2012-2023 ownCloud GmbH</p> + <p>Licensed under the GNU General Public License (GPL) Version 2.0 or any later version.</p> <p>Gelicenseerd onder de GNU General Public License (GPL) Versie 2.0 of later</p> + Close Sluiten + + Legal notice Juridische bepalingen @@ -2951,18 +3587,22 @@ Objecten die verwijderd mogen worden, worden verwijderd als ze zouden verhindere OCC::LogBrowser + Enable logging to temporary folder Inschakelen logging naar tijdelijke map + Log Output Log Output + Open folder Openen map + The client can write debug logs to a temporary folder. These logs are very helpful for diagnosing problems. Since log files can get large, the client will start a new one for each sync run and compress older ones. It will also delete log files after a couple of hours to avoid consuming too much disk space. If enabled, logs will be written to %1 @@ -2971,6 +3611,7 @@ Omdat logbestanden groot kunnen worden, zal de client een nieuwe starten voor el Indien ingeschakeld, worden logboeken naar % 1 geschreven + This setting persists across client restarts. Note that using any logging command line options will override this setting. Deze instelling blijft bestaan tijdens het opnieuw opstarten van de client. @@ -2980,10 +3621,14 @@ Merk op dat het gebruik van logging-opdrachtregel opties deze instelling zal ove OCC::Logger + + <nobr>File "%1"<br/>cannot be opened for writing.<br/><br/>The log output <b>cannot</b> be saved!</nobr> <nobr>Bestand "%1"<br/>kan niet voor schrijven worden geopend.<br/><br/>De log output kan <b>niet</b> opgeslagen worden!</nobr> + + Error Fout @@ -2991,26 +3636,32 @@ Merk op dat het gebruik van logging-opdrachtregel opties deze instelling zal ove OCC::Mac::FileProviderEditLocallyJob + An error occurred during setup. Er trad een fout op bij het instellen. + Could not find a file for local editing. Make sure its path is valid and it is synced locally. Kon geen bestand vinden om lokaal te bewerken. Zorg ervoor dat het pad juist is en dat het lokaal gesynchroniseerd is. + Could not get file ID. Kon het bestands-ID niet ophalen. + Could not get file identifier. Kon het bestands-ID niet ophalen. + Could not start editing locally. Kon lokaal bewerken niet starten. + The file identifier is empty. Het bestands-ID is leeg. @@ -3018,121 +3669,157 @@ Merk op dat het gebruik van logging-opdrachtregel opties deze instelling zal ove OCC::NetworkSettings - Download Bandwidth - Download bandbreedte - - + HTTP(S) proxy HTTP(S) proxy - Host - Server - - + Hostname of proxy server Hostnaam van proxyserver + + Password for proxy server + Wachtwoord voor proxyserver + + + + SOCKS5 proxy + SOCKS5 proxy + + + + Username for proxy server + Gebruikersnaam voor proxyserver + + + + Download Bandwidth + Download bandbreedte + + + + Host + Server + + + + KBytes/s KBytes/s + + Limit automatically Beperk automatisch + + Limit to Beperkt tot + + Limit to 3/4 of estimated bandwidth Beperk tot 3/4 van de geschatte bandbreedte + Manually specify proxy Specificeer proxy handmatig + + No limit Geen beperking + No proxy Geen proxy + Note: proxy settings have no effects for accounts on localhost Let op: proxy-instellingen hebben geen effect voor accounts op localhost - Password for proxy server - Wachtwoord voor proxyserver - - + Proxy Settings Proxy Instellingen + Proxy server requires authentication Proxyserver heeft verificatie nodig - SOCKS5 proxy - SOCKS5 proxy - - + Upload Bandwidth Upload bandbreedte + + + Use global settings Gebruik globale instellingen + Use system proxy Gebruik systeem proxy - - Username for proxy server - Gebruikersnaam voor proxyserver - - + OCC::NSISUpdater + <p>A new version of the %1 Client is available but the updating process failed.</p><p><b>%2</b> has been downloaded. The installed version is %3. If you confirm restart and update, your computer may reboot to complete the installation.</p> <p>Een nieuwe versie van de %1 Client is beschikbaar, maar het updaten is mislukt.</p><p><b>%2</b> is gedownload. De geïnstalleerde versie is %3. Als je herstarten en bijwerken bevestigt, kan je computer opnieuw opgestart worden om de installatie te voltooien.</p> + <p>A new version of the %1 Client is available.</p><p><b>%2</b> is available for download. The installed version is %3.</p> <p>Er is een nieuwe versie van de %1 Client beschikbaar.</p><p><b>%2</b> is beschikbaar voor download. De geïnstalleerde versie is %3.</p> + Ask again later Vraag later nogmaals + Get update Ophalen update + New Version Available Nieuwe versie beschikbaar + Restart and update Herstarten en bijwerken + Skip this time Deze keer overslaan + Update Failed Bijwerken mislukt + Update manually Handmatig bijwerken @@ -3140,54 +3827,67 @@ Merk op dat het gebruik van logging-opdrachtregel opties deze instelling zal ove OCC::OCUpdater + %1 available. Restart application to start the update. %1 beschikbaar. Herstart de applicatie om de update te starten. + A new update for %1 is about to be installed. The updater may ask for additional privileges during the process. Your computer may reboot to complete the installation. Een nieuwe update voor %1 wordt geïnstalleerd. De updater kan om extra privileges vragen tijdens het update proces. Je computer kan herstart worden om de installatie te voltooien. + Checking update server … Controleren updateserver ... + Could not check for new updates. Kan niet controleren op nieuwe updates. + Could not download update. Please open %1 to download the update manually. Kon de update niet downloaden. Open %1 om de update handmatig te downloaden. + Could not download update. Please open <a href='%1'>%1</a> to download the update manually. Kon de download niet bijwerken. Open <a href='%1'>%1</a> om de update handmatig te downloaden. + Downloading %1 … Downloaden %1 … + New %1 is available. Please open %2 to download the update. Nieuwe %1 beschikbaar. Open %2 om de update te downloaden. + New %1 is available. Please open <a href='%2'>%2</a> to download the update. Nieuwe %1 beschikbaar. Open <a href='%2'>%1</a> om de update te downloaden. + New %1 update ready Nieuwe %1 update is klaar + No updates available. Your installation is at the latest version. Geen updates beschikbaar. Je installatie is al van de laatste versie. + Update Check Controle update + Update status is unknown: Did not check for new updates. Update status is onbekend: niet gecontroleerd op nieuwe updates. @@ -3195,55 +3895,72 @@ Merk op dat het gebruik van logging-opdrachtregel opties deze instelling zal ove OCC::OwncloudAdvancedSetupPage + %1 folder "%2" is synced to local folder "%3" %1 map "%2" is gesynchroniseerd naar de lokale map "%3" + + %1 free space %1 gets replaced with the size and a matching unit. Example: 3 MB or 5 GB %1 vrije ruimte + + (%1) (%1) + + (experimental) (experimenteel) + Connect Verbinden + In Finder's "Locations" sidebar section + Local Sync Folder Lokale synchronisatiemap + Sync the folder "%1" Synchroniseer de map "%1" + There isn't enough free space in the local folder! Er is niet genoeg ruimte beschikbaar in de lokale map! + + Use &virtual files instead of downloading content immediately %1 Gebruik &virtuele bestanden in plaats van direct downloaden content%1 + Virtual files are not supported at the selected location + Virtual files are not supported for Windows partition roots as local folder. Please choose a valid subfolder under drive letter. Virtuele bestanden worden niet ondersteund voor Windows-partitie-hoofdmappen als lokale map. Kies een geldige submap onder de stationsletter. + Warning: The local folder is not empty. Pick a resolution! Waarschuwing: De lokale map is niet leeg. Maak een keuze! @@ -3251,26 +3968,32 @@ Merk op dat het gebruik van logging-opdrachtregel opties deze instelling zal ove OCC::OwncloudConnectionMethodDialog + <html><head/><body><p>Failed to connect to the secure server address <em>%1</em>. How do you wish to proceed?</p></body></html> <html><head/><body><p>Kan niet verbinden met het opgegeven beveiligde serveradres <em>%1</em>.Hoe wilt u verder gaan?</p></body></html> + <html><head/><body><p>Failed to connect to the secure server address specified. How do you wish to proceed?</p></body></html> <html><head/><body><p>Kan niet verbinden met het opgegeven beveiligde serveradres. Hoe wilt u verder gaan?</p></body></html> + Configure client-side TLS certificate Configureer het client-side TLS-certificaat + Connection failed Verbinding mislukt + Retry unencrypted over HTTP (insecure) Probeer onversleuteld over HTTP (onbeveiligd) + Select a different URL Selecteer een andere URL @@ -3278,71 +4001,88 @@ Merk op dat het gebruik van logging-opdrachtregel opties deze instelling zal ove OCC::ownCloudGui + %1 (%2, %3) %1 (%2, %3) + %1: %2 Example text: "Nextcloud: Syncing 25MB (3 minutes left)" (%1 is the folder name to be synced, %2 a status message for that folder) %1: %2 + Account %1: %2 Account %1: %2 + Account synchronization is disabled Account synchronisatie is uitgeschakeld + Checking for changes in local "%1" Controleren op wijzigingen in lokale "%1" + Checking for changes in remote "%1" Controleren op wijzigingen in externe "%1" + Disconnected from %1 Losgekoppeld van %1 + Disconnected from accounts: Losgekoppeld van account: + Please sign in Log alstublieft in + Terms of service + The server on account %1 runs an unsupported version %2. Using this client with unsupported server versions is untested and potentially dangerous. Proceed at your own risk. De server van account %1 gebruikt een niet ondersteunde versie %2. Het gebruik van deze clientsoftware met niet-ondersteunde server versies is niet getest en mogelijk gevaarlijk. Verdergaan is op eigen risico. + There are no sync folders configured. Er zijn geen synchronisatie-mappen geconfigureerd. + Unsupported Server Version Niet-ondersteunde server versie + Your account %1 requires you to accept the terms of service of your server. You will be redirected to %2 to acknowledge that you have read it and agrees with it. + macOS VFS for %1: A problem was encountered. + macOS VFS for %1: Last sync was successful. + macOS VFS for %1: Sync is running. @@ -3350,14 +4090,17 @@ Merk op dat het gebruik van logging-opdrachtregel opties deze instelling zal ove OCC::OwncloudHttpCredsPage + &Email &E-mail + Connect to %1 Verbinden met %1 + Enter user credentials Vul uw inloggegevens in @@ -3365,6 +4108,8 @@ Merk op dat het gebruik van logging-opdrachtregel opties deze instelling zal ove OCC::OwncloudPropagator + + Impossible to get modification time for file in conflict %1 Onmogelijk om wijzigingstijd te krijgen voor bestand in conflict %1) @@ -3372,18 +4117,22 @@ Merk op dat het gebruik van logging-opdrachtregel opties deze instelling zal ove OCC::OwncloudSetupPage + &Next > &Volgende > + Could not load certificate. Maybe wrong password? Kan certificaat niet laden. Misschien is het wachtwoord onjuist? + Server address does not seem to be valid Het serveradres lijkt niet geldig + The link to your %1 web interface when you open it in the browser. %1 will be replaced with the application name De link naar je %1 web interface wanneer je die opent in de browser. @@ -3392,118 +4141,149 @@ Merk op dat het gebruik van logging-opdrachtregel opties deze instelling zal ove OCC::OwncloudSetupWizard + <font color="green"><b>File Provider-based account %1 successfully created!</b></font> + <font color="green"><b>Local sync folder %1 successfully created!</b></font> <font color="green"><b>Lokale synch map %1 is succesvol aangemaakt!</b></font> + <font color="green">Successfully connected to %1: %2 version %3 (%4)</font><br/><br/> <font color="green">Succesvol verbonden met %1: %2 versie %3 (%4)</font><br/><br/> + <p><font color="red">Remote folder creation failed probably because the provided credentials are wrong.</font><br/>Please go back and check your credentials.</p> <p><font color="red">Het aanmaken van de externe map is mislukt, waarschijnlijk omdat je inloggegevens fout waren.</font><br/>ga terug en controleer je inloggevens.</p> + A sync connection from %1 to remote directory %2 was set up. Er is een synchronisatie verbinding van %1 naar externe map %2 opgezet. + Access forbidden by server. To verify that you have proper access, <a href="%1">click here</a> to access the service with your browser. Toegang door server verboden. Om te verifiëren dat je toegang mag hebben, <a href="%1">klik hier</a> om met je browser toegang tot de service te krijgen. + Cannot remove and back up the folder because the folder or a file in it is open in another program. Please close the folder or file and hit retry or cancel the setup. Kan de map niet verwijderen en back-uppen, omdat de map of een bestand daarin, geopend is in een ander programma. Sluit de map of het bestand en drup op Opnieuw of annuleer de installatie. + Connection to %1 could not be established. Please check again. Er kan geen verbinding worden gemaakt met %1. Probeer het nog eens. + Could not create local folder %1 Kan lokale map %1 niet aanmaken + Creating local sync folder %1 … Creëren lokale synchronisatie map %1 ... + Error: %1 Fout: %1 + Failed to connect to %1 at %2:<br/>%3 Kon geen verbinding maken met %1 op %2:<br/>%3 + Folder rename failed Hernoemen map mislukt + Invalid URL Ongeldige URL + Local sync folder %1 already exists, setting it up for sync.<br/><br/> Lokale synchronisatie map %1 bestaat al, deze wordt ingesteld voor synchronisatie.<br/><br/> + No remote folder specified! Geen externe map opgegeven! + OK OK + Remote folder %1 created successfully. Externe map %1 succesvol gecreëerd. + + Remote folder %1 creation failed with error <tt>%2</tt>. Aanmaken van externe map %1 mislukt met fout <tt>%2</tt>. + Successfully connected to %1! Succesvol verbonden met %1! + The authenticated request to the server was redirected to "%1". The URL is bad, the server is misconfigured. De geauthentiseerde aanvraag voor de server werd omgeleid naar "%1". De URL is onjuist, de server is verkeerd geconfigureerd. + + The folder creation resulted in HTTP error code %1 Het aanmaken van de map resulteerde in HTTP foutcode %1 + The remote folder %1 already exists. Connecting it for syncing. De externe map %1 bestaat al. Verbinden voor synchroniseren. + The remote folder creation failed because the provided credentials are wrong!<br/>Please go back and check your credentials.</p> Het aanmaken van de externe map is mislukt, waarschijnlijk omdat je inloggegevens fout waren.<br/>Ga terug en controleer je inloggegevens.</p> + There was an invalid response to an authenticated WebDAV request Er is een ongeldig antwoord ontvangen op een geauthenticeerde WebDAV opvraging + Timeout while trying to connect to %1 at %2. Time-out bij verbinden met %1 op %2. + Trying to connect to %1 at %2 … Probeer te verbinden met %1 om %2 ... + creating folder on Nextcloud: %1 aanmaken map op Nextcloud: %1 + failed. mislukt. @@ -3511,30 +4291,37 @@ Merk op dat het gebruik van logging-opdrachtregel opties deze instelling zal ove OCC::OwncloudWizard + Add %1 account Toevoegen %1 account + Cancel Annuleren + Enable experimental feature? Inschakelen experimentele functies? + Enable experimental placeholder mode Inschakelen experimentele aanduider modus + Skip folders configuration Sla configuratie van mappen over + Stay safe Blijf veilig + When the "virtual files" mode is enabled no files will be downloaded initially. Instead, a tiny "%1" file will be created for each file that exists on the server. The contents can be downloaded by running these files or by using their context menu. The virtual files mode is mutually exclusive with selective sync. Currently unselected folders will be translated to online-only folders and your selective sync settings will be reset. @@ -3554,10 +4341,12 @@ Dit is een nieuwe, experimentele modus. Als je besluit het te gebruiken, vragen OCC::PasswordInputDialog + Password for share required Wachtwoord voor delen vereist + Please enter a password for your share: Voer het wachtwoord in voor je deellink: @@ -3565,6 +4354,7 @@ Dit is een nieuwe, experimentele modus. Als je besluit het te gebruiken, vragen OCC::PollJob + Invalid JSON reply from the poll URL Ongeldig JSON antwoord van de opgegeven URL @@ -3572,165 +4362,210 @@ Dit is een nieuwe, experimentele modus. Als je besluit het te gebruiken, vragen OCC::ProcessDirectoryJob + %1 name containing the character "%2" is not supported on this file system. folder or file impossible to sync due to an invalid name, placeholders will be file or folder and the invalid character %1 naam met teken "%2" wordt niet ondersteund door het bestandssysteem. + %1 name contains at least one invalid character %1 naam bevat op z'n minst één ongeldig teken + %1 name is a reserved name on this file system. %1 naam is een gereserveerde naam op dit bestandssysteem. + + + + Cannot be renamed or uploaded. + Cannot modify encrypted item because the selected certificate is not valid. + Cannot sync due to invalid modification time Kan niet synchroniseren door ongeldig wijzigingstijdstip + Case Clash Conflict: Server file downloaded and renamed to avoid clash. + Conflict: Server version downloaded, local copy renamed and not uploaded. Bestandsconflict: serverversie is gedownload, de lokale kopie is hernoemd en niet geüpload + Could not upload file, because it is open in "%1". Kan bestand niet uploaden, omdat het geopend is in "%1". + Error while deleting file record %1 from the database Fout tijdens verwijderen bestandsrecord %1 uit de database + Error while reading the database Fout bij lezen database + File name of folder entity to use when warning about invalid name Bestand + File has extension reserved for virtual files. Bestand heeft een extensie gereserveerd voor virtuele bestanden. + File is listed on the ignore list. Het bestand is opgenomen op de negeerlijst. + File names ending with a period are not supported on this file system. Bestandsnamen die eindigen met een punt worden niet ondersteund door het bestandssysteem. + File/Folder is ignored because it's hidden. Bestand/Map is genegeerd omdat het verborgen is. + Filename contains leading and trailing spaces. De bestandsnaam bevat spaties vooraan en achteraan. + Filename contains leading spaces. De bestandsnaam bevat spaties vooraan. + Filename contains trailing spaces. De bestandsnaam bevat spaties achteraan. + Filename is too long. De bestandsnaam is te lang. + Folder name of folder entity to use when warning about invalid name Map + Ignored because of the "choose what to sync" blacklist Genegeerd vanwege de "wat synchroniseren" negeerlijst + + Moved to invalid target, restoring Verplaatst naar ongeldig doel, herstellen + Not allowed because you don't have permission to add files in that folder Niet toegestaan omdat je geen machtiging hebt om bestanden in die map toe te voegen + + Not allowed because you don't have permission to add subfolders to that folder Niet toegestaan, omdat je geen machtiging hebt om submappen aan die map toe te voegen + Not allowed to remove, restoring Niet toegestaan om te verwijderen, herstellen + Not allowed to upload this file because it is read-only on the server, restoring Niet toegestaan om dit bestand te uploaden, omdat het alleen-lezen is op de server, herstellen + Reason: the entire filename is forbidden. + Reason: the file has a forbidden extension (.%1). + Reason: the filename contains a forbidden character (%1). + Reason: the filename has a forbidden base name (filename start). + Server replied with an error while reading directory "%1" : %2 Server gaf een foutmelding bij lezen directory "%1'": %2 + Server reported no %1 Server rapporteerde nr %1 + Stat failed. Stat mislukt. + Symbolic links are not supported in syncing. Symbolische links worden niet ondersteund bij het synchroniseren. + The filename cannot be encoded on your file system. De bestandsnaam kan op je bestandssysteem niet worden gecodeerd. + The filename is blacklisted on the server. De bestandsnaam staat op de negeerlijst van de server. + file id bestand id + permission machtiging + size omvang @@ -3738,26 +4573,38 @@ Dit is een nieuwe, experimentele modus. Als je besluit het te gebruiken, vragen OCC::PropagateDirectory + Could not delete file %1 from local DB + Error updating metadata due to invalid modification time Fout bij bijwerken metadata door ongeldige laatste wijziging datum + Error updating metadata: %1 Fout bij bijwerken metadata: %1 + File is currently in use Bestand is al in gebruik + + + + + + The folder %1 cannot be made read-only: %2 Map %1 kon niet alleen-lezen gemaakt worden: %2 + + unknown exception @@ -3765,58 +4612,75 @@ Dit is een nieuwe, experimentele modus. Als je besluit het te gebruiken, vragen OCC::PropagateDownloadFile + + Could not delete file record %1 from local DB Kon bestandsrecord %1 niet verwijderen uit de lokale DB + Could not get file %1 from local DB + Error updating metadata: %1 Fout bij bijwerken metadata: %1 + File %1 can not be downloaded because of a local file name clash! Bestand %1 kan niet worden gedownload, omdat de naam conflicteert met een lokaal bestand + File %1 cannot be downloaded because encryption information is missing. Bestand %1 kan niet worden gedownload, omdat crypto informatie ontbreekt. + File %1 downloaded but it resulted in a local file name clash! Bestand %1 gedownload maar het resulteerde in een lokaal bestandsnaam conflict! + + File %1 has invalid modified time reported by server. Do not save it. Bestand %1 heeft een ongeldige wijzigingstijd gerapporteerd door de server. Bewaar het niet. + + File has changed since discovery Het bestand is gewijzigd sinds het is gevonden + File was deleted from server Bestand was verwijderd van de server + Free space on disk is less than %1 Vrije schijfruimte is minder dan %1 + The download would reduce free local disk space below the limit De download zou de vrije lokale schijfruimte beperken tot onder de limiet + The downloaded file is empty, but the server said it should have been %1. Het gedownloade bestand is leeg, maar de server meldde dat het %1 zou moeten zijn. + The file %1 is currently in use Bestand %1 is al in gebruik + The file could not be downloaded completely. Het bestand kon niet volledig worden gedownload. @@ -3824,10 +4688,12 @@ Dit is een nieuwe, experimentele modus. Als je besluit het te gebruiken, vragen OCC::PropagateItemJob + ; Restoration Failed: %1 ; Herstellen mislukt: %1 + A file or folder was removed from a read only share, but restoring failed: %1 Er is een bestand of map verwijderd van een alleen-lezen share, maar herstellen is mislukt: %1 @@ -3835,30 +4701,39 @@ Dit is een nieuwe, experimentele modus. Als je besluit het te gebruiken, vragen OCC::PropagateLocalMkdir + Could not create folder %1 Kon map %1 niet maken + Error updating metadata: %1 Fout bij bijwerken metadata: %1 + Folder %1 cannot be created because of a local file or folder name clash! Map %1 kan niet worden gemaakt wegens een lokaal map- of bestandsnaam conflict! + The file %1 is currently in use Bestand %1 is al in gebruik + + + The folder %1 cannot be made read-only: %2 Map %1 kon niet alleen-lezen gemaakt worden: %2 + could not delete file %1, error: %2 kon bestand file %1 niet verwijderen, fout: %2 + unknown exception @@ -3866,14 +4741,19 @@ Dit is een nieuwe, experimentele modus. Als je besluit het te gebruiken, vragen OCC::PropagateLocalRemove + Could not delete file record %1 from local DB Kon bestandsrecord %1 niet verwijderen uit de lokale DB + Could not remove %1 because of a local file name clash Bestand %1 kon niet worden verwijderd, omdat de naam conflicteert met een lokaal bestand + + + Temporary error when removing local item removed from server. @@ -3881,38 +4761,49 @@ Dit is een nieuwe, experimentele modus. Als je besluit het te gebruiken, vragen OCC::PropagateLocalRename + Could not delete file record %1 from local DB Kon bestandsrecord %1 niet verwijderen uit de lokale DB + + Could not get file %1 from local DB + + Error setting pin state Fout bij instellen pin status + Error updating metadata: %1 Fout bij bijwerken metadata: %1 + Failed to propagate directory rename in hierarchy + Failed to rename file Kon bestand niet hernoemen + File %1 downloaded but it resulted in a local file name clash! Bestand %1 gedownload maar het resulteerde in een lokaal bestandsnaam conflict! + Folder %1 cannot be renamed because of a local file or folder name clash! Map %1 kan niet hernoemd worden vanwege een lokale bestands- of mapnaamclash! + The file %1 is currently in use Bestand %1 is al in gebruik @@ -3920,10 +4811,12 @@ Dit is een nieuwe, experimentele modus. Als je besluit het te gebruiken, vragen OCC::PropagateRemoteDelete + Could not delete file record %1 from local DB Kon bestandsrecord %1 niet verwijderen uit de lokale DB + Wrong HTTP code returned by server. Expected 204, but received "%1 %2". Foutieve HTTP code ontvangen van de server. Verwacht was 204, maar ontvangen "%1 %2". @@ -3931,6 +4824,7 @@ Dit is een nieuwe, experimentele modus. Als je besluit het te gebruiken, vragen OCC::PropagateRemoteDeleteEncryptedRootFolder + Wrong HTTP code returned by server. Expected 204, but received "%1 %2". Foutieve HTTP code ontvangen van de server. Verwacht was 204, maar ontvangen "%1 %2". @@ -3938,18 +4832,22 @@ Dit is een nieuwe, experimentele modus. Als je besluit het te gebruiken, vragen OCC::PropagateRemoteMkdir + Error writing metadata to the database: %1 Fout bij schrijven van metadata naar de database: %1 + Failed to encrypt a folder %1 Kon een map %1 niet versleutelen + The file %1 is currently in use Bestand %1 is al in gebruik + Wrong HTTP code returned by server. Expected 201, but received "%1 %2". Foutieve HTTP code ontvangen van de server. Verwacht was 201, maar ontvangen "%1 %2". @@ -3957,34 +4855,44 @@ Dit is een nieuwe, experimentele modus. Als je besluit het te gebruiken, vragen OCC::PropagateRemoteMove + Could not delete file record %1 from local DB Kon bestandsrecord %1 niet verwijderen uit de lokale DB + Could not get file %1 from local DB + Could not rename %1 to %2, error: %3 Kon niet %1 hernoemen naar %2, fout: %3 + Error setting pin state Fout bij instellen pin status + + Error updating metadata: %1 Fout bij bijwerken metadata: %1 + Error writing metadata to the database Fout bij schrijven van Metadata naar de database + + The file %1 is currently in use Bestand %1 is al in gebruik + Wrong HTTP code returned by server. Expected 201, but received "%1 %2". Foutieve HTTP code ontvangen van de server. Verwacht werd 201, maar ontvangen "%1 %2". @@ -3992,46 +4900,60 @@ Dit is een nieuwe, experimentele modus. Als je besluit het te gebruiken, vragen OCC::PropagateUploadFileCommon + Error updating metadata: %1 Fout bij bijwerken metadata: %1 + Failed to unlock encrypted folder. Kon versleutelde map niet ontgrendelen. + Failed to upload encrypted file. Kon versleuteld bestand niet uploaden. + File %1 cannot be uploaded because another file with the same name, differing only in case, exists Bestand %1 kan niet worden geüpload omdat er al een ander bestand met dezelfde naam bestaat, al verschillen hoofd/kleine letters + + + File %1 has invalid modification time. Do not upload to the server. Bestand %1 heeft een ongeldige laatste wijziging datum. Upload niet naar de server. + File Removed (start upload) %1 Bestand verwijderd (start upload) %1 + Local file changed during sync. Lokaal bestand gewijzigd tijdens sync. + Local file changed during syncing. It will be resumed. Lokaal bestand gewijzigd gedurende sync. Wordt opnieuw meegenomen. + The file %1 is currently in use Bestand %1 is al in gebruik + Unable to upload an item with invalid characters Kon een item met onjuiste tekens niet uploaden + + Upload of %1 exceeds the quota for the folder Upload van %1 overschrijdt het quotum voor de map @@ -4039,26 +4961,32 @@ Dit is een nieuwe, experimentele modus. Als je besluit het te gebruiken, vragen OCC::PropagateUploadFileNG + Local file changed during sync. Lokaal bestand gewijzigd tijdens sync. + Missing ETag from server Ontbrekende ETag van de server + Missing File ID from server Ontbrekende File ID van de server + Poll URL missing Peilingen-URL ontbreekt + The local file was removed during sync. Het lokale bestand werd verwijderd tijdens sync. + Unexpected return code from server (%1) Onverwachte reactie van server (%1) @@ -4066,18 +4994,22 @@ Dit is een nieuwe, experimentele modus. Als je besluit het te gebruiken, vragen OCC::PropagateUploadFileV1 + Local file changed during sync. Lokaal bestand gewijzigd tijdens sync. + Poll URL missing URL opvraag ontbreekt + The local file was removed during sync. Het lokale bestand werd verwijderd tijdens sync. + The server did not acknowledge the last chunk. (No e-tag was present) De server heeft het laatste deel niet bevestigd (er was geen e-tag aanwezig) @@ -4085,22 +5017,27 @@ Dit is een nieuwe, experimentele modus. Als je besluit het te gebruiken, vragen OCC::ProxyAuthDialog + Password: Wachtwoord: + Proxy authentication required Proxy-authenticatie vereist + Proxy: Proxy: + The proxy server needs a username and password. De proxyserver heeft een gebruikersnaam en wachtwoord nodig + Username: Gebruikersnaam: @@ -4108,6 +5045,7 @@ Dit is een nieuwe, experimentele modus. Als je besluit het te gebruiken, vragen OCC::SelectiveSyncDialog + Choose What to Sync Kies wat te synchroniseren @@ -4115,26 +5053,33 @@ Dit is een nieuwe, experimentele modus. Als je besluit het te gebruiken, vragen OCC::SelectiveSyncWidget + An error occurred while loading the list of sub folders. Er trad een fout op bij het laden van de lijst met submappen. + Deselect remote folders you do not wish to synchronize. Deselecteer de externe mappen die u niet wenst te synchroniseren. + Loading … Laden ... + Name Naam + + No subfolders currently on the server. Momenteel geen submappen op de server. + Size Grootte @@ -4142,6 +5087,7 @@ Dit is een nieuwe, experimentele modus. Als je besluit het te gebruiken, vragen OCC::ServerNotificationHandler + Reply Antwoord @@ -4149,14 +5095,17 @@ Dit is een nieuwe, experimentele modus. Als je besluit het te gebruiken, vragen OCC::sesSnackBar + Error Fout + Success Succes + Warning Waarschuwing @@ -4164,27 +5113,33 @@ Dit is een nieuwe, experimentele modus. Als je besluit het te gebruiken, vragen OCC::SettingsDialog + %1 Settings This name refers to the application name e.g Nextcloud %1 Instellingen + Account Account + General Algemeen + Network Netwerk + New account Nieuw account + Settings Instellingen @@ -4192,19 +5147,24 @@ Dit is een nieuwe, experimentele modus. Als je besluit het te gebruiken, vragen OCC::ShareeModel + %1 (%2) sharee (shareWithAdditionalInfo) %1 (%2) + Global search results Zoekresultaten (global) + No results found Geen resultaten gevonden + + Search globally Zoek door alles @@ -4212,6 +5172,7 @@ Dit is een nieuwe, experimentele modus. Als je besluit het te gebruiken, vragen OCC::ShareManager + Error Fout @@ -4219,38 +5180,47 @@ Dit is een nieuwe, experimentele modus. Als je besluit het te gebruiken, vragen OCC::ShareModel + %1 days + 1 day 1 dag + Could not find local folder for %1 Kan lokale map niet vinden voor %1 + Internal link Interne link + Link share + Secure file drop Beveiligde bestands-drop + Secure file drop link Beveiligde bestands-drop link + Share link Deellink + Today Vandaag @@ -4258,22 +5228,28 @@ Dit is een nieuwe, experimentele modus. Als je besluit het te gebruiken, vragen OCC::SocketApi + + Activity Activiteit + Context menu share Contextmenu delen + Copy internal link Kopieer interne link + Copy private link to clipboard Kopieer privé-link naar klembord + Could not encrypt the following folder: "%1". Server replied with error: %2 @@ -4282,18 +5258,22 @@ Server replied with error: %2 Server antwoordde met fout: %2 + Delete Verwijderen + Delete local changes Verwijder lokale aanpassingen + Encrypt Versleutel + Expires in %1 minutes remaining time before lock expires @@ -4302,82 +5282,104 @@ Server antwoordde met fout: %2 + Failed to encrypt folder Kon de map niet versleutelen + Failed to encrypt folder at "%1" Kon een map niet versleutelen in %1 + Folder encrypted successfully Map succesvol versleuteld + I shared something with you Ik deelde iets met u + Leave this share Verlaat deze gedeelde locatie + Lock file Vergrendel bestand + Locked by %1 Vergrendeld door %1 + Move and rename … Verplaatsen en hernoemen ... + Move and upload … Verplaatsen en uploaden ... + Move, rename and upload … Verplaatsen, hernoemen en uploaden ... + + Open in browser Openen in browser + Resharing this file is not allowed Opnieuw delen van dit bestand is niet toegestaan + Resharing this folder is not allowed Opnieuw delen van deze map is niet toegestaan + Resolve conflict … Oplossen conflict ... + Select new location … Selecteer nieuwe locatie ... + Send private link by email … Verstuur privélink per e-mail --- + + Share options Deelopties + The account %1 does not have end-to-end encryption configured. Please configure this in your account settings to enable folder encryption. Het account %1 heeft geen begin-tot-eind versleuteling ingesteld. Ga naar je accountinstellingen om mapversleuteling in te stellen. + The following folder was encrypted successfully: "%1" De volgende map was succesvol versleuteld: "%1" + Unlock file Ontgrendel bestand @@ -4385,98 +5387,122 @@ Server antwoordde met fout: %2 OCC::SslButton + %1 %1 + %1 (self-signed) %1 (zelf ondertekend) + <h3>Certificate Details</h3> <h3>Certificaat details</h3> + <h3>Fingerprints</h3> <h3>Vingerafdrukken</h3> + <h3>Issuer</h3> <h3>Uitgever</h3> + <p><b>Note:</b> This certificate was manually approved</p> <p><b>Let op:</b> Dit certificaat werd handmatig goedgekeurd</p> + Certificate information: Certificaat informatie: + Common Name (CN): Common Name (CN): + Country: Land: + Expires on: Vervalt op: + Issued on: Uitgegeven op: + Issuer: Uitgever: + No support for SSL session tickets/identifiers Geen ondersteuning voor SSL-sessie tickets/identifiers + Organization (O): Organisatie (O): + Organizational Unit (OU): Organisatie unit (OU): + SHA-1: SHA-1: + SHA-256: SHA-256: + Serial: Serienummer: + Server version: %1 Serverversie: %1 + State/Province: Land/Provincie: + Subject Alternative Names: Alternatieve subject namen: + The connection is not secure De verbinding is niet veilig + This connection is NOT secure as it is not encrypted. Deze verbinding is NIET veilig, omdat deze niet versleuteld is. + This connection is encrypted using %1 bit %2. Deze verbinding is versleuteld via %1 bit %2. @@ -4484,122 +5510,156 @@ Server antwoordde met fout: %2 OCC::SslErrorDialog + + + &lt;not specified&gt; &lt;niet gespecificeerd&gt; + Additional errors: Additionele fouten: + Cannot connect securely to <i>%1</i>: Kan niet beveiligd verbinden met <i>%1</i>: + + Country: %1 Land: %1 + Effective Date: %1 Ingangsdatum: %1 + Expiration Date: %1 Vervaldatum: %1 + Fingerprint (SHA-256): <tt>%1</tt> Fingerprint (SHA-256): <tt>%1</tt> + Fingerprint (SHA-512): <tt>%1</tt> Fingerprint (SHA-512): <tt>%1</tt> + Fingerprint (SHA1): <tt>%1</tt> Fingerprint (SHA1): <tt>%1</tt> + Issuer: %1 Uitgever: %1 + + Organization: %1 Organisatie: %1 - Trust this certificate anyway - Vertrouw dit certificaat alsnog - - + + Unit: %1 Unit: %1 + Untrusted Certificate Niet vertrouwd certificaat + with Certificate %1 met certificaat %1 - + + + Trust this certificate anyway + Vertrouw dit certificaat alsnog + + OCC::SyncEngine + %1 (skipped due to earlier error, trying again in %2) %1 (overgeslagen wegens een eerdere fout, probeer opnieuw over %2) + Cannot open the sync journal Kan het sync transactielog niet openen + Could not set file record to local DB: %1 Kon bestandsrecord %1 niet instellen op de lokale DB: %1 + Could not update file metadata: %1 Kon bestand metadata niet bijwerken: %1 + Could not update file: %1 Kon bestand niet bijwerken: %1 + Could not update virtual file metadata: %1 Kon virtuele bestand metadata niet bijwerken: %1 + Disk space is low: Downloads that would reduce free space below %1 were skipped. Schijfruimte laag: Downloads die de vrije ruimte tot onder %1 zouden reduceren, zijn overgeslagen. + Only %1 are available, need at least %2 to start Placeholders are postfixed with file sizes using Utility::octetsToString() Slechts %1 beschikbaar, maar heeft minimaal %2 nodig om te starten + There is insufficient space available on the server for some uploads. Onvoldoende schijfruimte op de server voor sommige uploads. + Unable to open or create the local sync database. Make sure you have write access in the sync folder. Kon de lokale sync-database niet openen of aanmaken. Zorg ervoor dat je schrijf-toegang hebt in de sync-map + Unable to read from the sync journal. Niet mogelijk om te lezen uit het synchronisatie verslag. + Unable to read the blacklist from the local database Kan de blacklist niet lezen uit de lokale database + Unresolved conflict. Bestandsconflict + Using virtual files with suffix, but suffix is not set gebruik maken van virtuele bestanden met achtervoegsel, maar achtervoegsel niet ingesteld @@ -4607,54 +5667,70 @@ Server antwoordde met fout: %2 OCC::SyncStatusSummary + %1 of %2 %1 van %2 + %1 of %2 · %3 left %1 van %2 · %3 resterend + + + All synced! Alles gesynchroniseerd! + Checking folder changes Controleren op wijzigingen map + + Offline Offline + See below for errors Zie hieronder voor fouten + See below for warnings Zie hieronder voor waarschuwingen + Some files could not be synced! Sommige bestanden konden niet gesynchroniseerd worden! + Some files couldn't be synced! Sommige bestanden konden niet gesynchroniseerd worden! + Sync paused Synchronisatie gepauzeerd + Syncing Synchroniseren + Syncing changes Synchroniseren wijzigingen + Syncing file %1 of %2 Bestand %1 van %2 synchroniseren @@ -4662,42 +5738,54 @@ Server antwoordde met fout: %2 OCC::Systray + Add account Account toevoegen + Download Download + Exit %1 %1 afsluiten + Help Help + Open main dialog Open het hoofdvenster + + Pause sync Pauzeer sync + Pause sync for all Pauzeer sync voor iedereen + + Resume sync Vervolg sync + Resume sync for all Vervolg sync voor iedereen + Settings Instellingen @@ -4705,22 +5793,27 @@ Server antwoordde met fout: %2 OCC::TermsOfServiceCheckWidget + Copy Link Kopiëren link + Link copied to clipboard. Link gekopieerd naar het klembord. + Open Browser Browser openen + Polling + Waiting for terms to be accepted @@ -4728,19 +5821,23 @@ Server antwoordde met fout: %2 OCC::Theme + %1 Desktop Client Version %2 (%3) %1 is application name. %2 is the human version string. %3 is the operating system name. + <p><small>Using virtual files plugin: %1</small></p> <p><small>Gebruik makend van virtuele bestanden plugin: %1</small></p> + <p>This release was supplied by %1.</p> <p>Deze release is geleverd door %1</p> + easy/0118 easy/0108 @@ -4748,18 +5845,22 @@ Server antwoordde met fout: %2 OCC::UnifiedSearchResultsListModel + Failed to fetch providers. Fout bij het laden van providers. + Failed to fetch search providers for '%1'. Error: %2 Fout bij het zoeken van providers voor '%1'. Error: %2 + Search has failed for '%1'. Error: %2 Fout bij het zoeken naar '%1'. Error: %2 + Search has failed for '%2'. Fout bij het zoeken naar '%2'. @@ -4767,14 +5868,17 @@ Server antwoordde met fout: %2 OCC::UpdateE2eeFolderMetadataJob + Failed to finalize item. Failed to finalize item. + Failed to unlock encrypted folder. Kon versleutelde map niet ontgrendelen. + Failed to update folder metadata. Kon metadata niet uploaden. @@ -4782,33 +5886,43 @@ Server antwoordde met fout: %2 OCC::UpdateE2eeFolderUsersMetadataJob + Could not add or remove user %1 to access folder %2 Kan gebruiker %1 niet toevoegen of verwijderen voor toegang tot map %2 + Could not fetch public key for user %1 Kon de publieke sleutel voor gebruiker %1 niet vinden + Could not find root encrypted folder for folder %1 Kon de versleutelde basismap voor map %1 niet vinden + + + + + + + + + Error updating metadata for a folder %1 Fout bij bijwerken metadata voor een map: %1 + Failed to unlock a folder. Kon een map niet ontgrendelen. OCC::User - - %1 notifications - %1 kennisgevingen - + %n notification(s) @@ -4816,30 +5930,38 @@ Server antwoordde met fout: %2 + End-to-end certificate needs to be migrated to a new one + Open Nextcloud Assistant in browser Open Nextcloud Assistant in browser + Open Nextcloud Talk in browser Open Nextcloud Talk in browser + Rename file Bestand hernoemen + + Resolve conflict Conflict oplossen... + Retry all uploads Probeer alle uploads opnieuw + Trigger the migration @@ -4847,18 +5969,22 @@ Server antwoordde met fout: %2 OCC::UserModel + <p>Do you really want to remove the connection to the account <i>%1</i>?</p><p><b>Note:</b> This will <b>not</b> delete any files.</p> <p>Wilt je echt de verbinding met het account <i>%1</i> verbreken?</p><p><b>Let op:</b> Hierdoor verwijder je <b>geen</b> bestanden.</p> + Cancel Annuleren + Confirm Account Removal Bevestig verwijderen account + Remove connection Verwijderen verbinding @@ -4866,6 +5992,7 @@ Server antwoordde met fout: %2 OCC::UserStatusSelectorModel + %1 days @@ -4873,6 +6000,7 @@ Server antwoordde met fout: %2 + %1 hours @@ -4880,6 +6008,7 @@ Server antwoordde met fout: %2 + %1 minutes @@ -4887,62 +6016,81 @@ Server antwoordde met fout: %2 + 1 day 1 dag + + 1 hour 1 uur + 1 minute 1 minuut + 30 minutes 30 minuten + 4 hours 4 uren + Could not clear status message. Make sure you are connected to the server. Kan het statusbericht niet wissen. Zorg ervoor dat je verbonden bent met de server. + Could not fetch predefined statuses. Make sure you are connected to the server. Kan vooraf gedefinieerde statussen niet ophalen. Zorg ervoor dat je verbonden bent met de server. + Could not fetch status. Make sure you are connected to the server. Kan status niet ophalen. Zorg ervoor dat je verbonden bent met de server. + Could not set status. Make sure you are connected to the server. Kan status niet instellen. Zorg ervoor dat je verbonden bent met de server. + + Don't clear Niet wissen + Emojis are not supported. Some status functionality may not work. Emoji's worden niet ondersteund. Sommige gebruikersstatusfuncties werken mogelijk niet. + Less than a minute Minder dan een minuut + Status feature is not supported. You will not be able to set your status. Gebruikersstatus functie wordt niet ondersteund. Je zult je gebruikersstatus niet kunnen instellen. + + This week Deze week + + Today Vandaag @@ -4950,14 +6098,17 @@ Server antwoordde met fout: %2 OCC::Vfs + Please choose a different location. %1 is a drive. It doesn't support virtual files. + Please choose a different location. %1 is a network drive. It doesn't support virtual files. + Please choose a different location. %1 isn't a NTFS file system. It doesn't support virtual files. @@ -4965,30 +6116,37 @@ Server antwoordde met fout: %2 OCC::VfsDownloadErrorDialog + %1 could not be downloaded. %1 kon niet worden gedownload. + + Error downloading %1 + Fout bij downloaden %1 + + + > More details > Meer details + Download error Downloadfout + Error downloading Fout bij downloaden - Error downloading %1 - Fout bij downloaden %1 - - + More details Meer details + could not be downloaded kon niet worden gedownload @@ -4996,6 +6154,8 @@ Server antwoordde met fout: %2 OCC::VfsSuffix + + Error updating metadata due to invalid modification time Fout bij bijwerken metadata door ongeldige laatste wijziging datum @@ -5003,6 +6163,8 @@ Server antwoordde met fout: %2 OCC::VfsXAttr + + Error updating metadata due to invalid modification time Fout bij bijwerken metadata door ongeldige laatste wijziging datum @@ -5010,10 +6172,12 @@ Server antwoordde met fout: %2 OCC::WebEnginePage + Invalid certificate detected Ongeldig certificaat gedetecteerd + The host "%1" provided an invalid certificate. Continue? De server "%1" heeft een ongeldig certificaat . Wilt u doorgaan? @@ -5021,6 +6185,7 @@ Server antwoordde met fout: %2 OCC::WebFlowCredentials + <b>You have been logged out of your account %1 at %2. Please login again.</b> <b>U bent afgemeld bij uw account %1 op %2. Log opnieuw in.</b> @@ -5028,22 +6193,27 @@ Server antwoordde met fout: %2 OCC::WelcomePage - Form - Formulier - - + Host your own server Host je eigen server + Keep your data secure and under your control Hou je gegevens veilig en in eigen beheer + + Form + Formulier + + + Log in Aanmelden + Sign up with provider Aanmelden bij provider @@ -5051,55 +6221,68 @@ Server antwoordde met fout: %2 OwncloudAdvancedSetupPage + &Local Folder &Lokale map + <html><head/><body><p>If this box is checked, existing content in the local folder will be erased to start a clean sync from the server.</p><p>Do not check this if the local content should be uploaded to the servers folder.</p></body></html> <html><head/><body><p>Als deze checkbox is aangevinkt zullen bestaande bestanden in de lokale map worden gewist om een schone sync vanaf de server te starten.</p><p>Vink dit niet aan als de lokale bestanden naar de map op de server zouden moeten worden geüploadet.</p></body></html> + Ask before syncing folders larger than Vraag bevestiging voor synchronisatie van mappen groter dan + Choose different folder Kies een andere map + Choose what to sync Selectieve synchronisatie + Erase local folder and start a clean sync Wis de map op je computer en start een schone sync + Keep local data Bewaar de lokale gegevens + Local Folder Lokale map + MB Trailing part of "Ask confirmation before syncing folder larger than" MB + Server address Serveradres + Sync Logo Sync Logo + Synchronize everything from server Synchroniseer alles vanaf de server + Username Gebruikersnaam @@ -5107,10 +6290,12 @@ Server antwoordde met fout: %2 OwncloudHttpCredsPage + &Password &Wachtwoord + &Username &Gebruikersnaam @@ -5118,14 +6303,18 @@ Server antwoordde met fout: %2 OwncloudSetupPage + Server address Serveradres + + TextLabel TextLabel + This is the link to your %1 web interface when you open it in the browser. De link naar je %1 web interface wanneer je die opent in de browser. @@ -5133,110 +6322,127 @@ Server antwoordde met fout: %2 progress + Deleted Verwijderd + Deleting Verwijderen + Downloaded Gedownload + Downloading Downloaden + + Error Fout + Filesystem access error Toegangsfout van het bestandssysteem + Ignored Genegeerd + Ignoring Negeren + Moved to %1 Verplaatst naar %1 + Moving Verplaatsen + Replaced by virtual file Vervangen door virtueel bestand + Server version downloaded, copied changed local file into case conflict conflict file Serverversie gedownload, gewijzigde lokale bestand gekopieerd in conflictbestand + Server version downloaded, copied changed local file into conflict file Serverversie gedownload, gewijzigde lokale bestand gekopieerd in conflictbestand + + Unknown Onbekend + Updated end-to-end encryption metadata + Updated local metadata Lokale metadata geüploaded + Updated local virtual files metadata Metagegevens van lokale virtuele bestanden bijgewerkt + Updating end-to-end encryption metadata + Updating local metadata Bijwerken lokale metadata + Updating local virtual files metadata Bijwerken lokale virtuele bestanden metadata + Uploaded Geüpload + Uploading Uploaden + Virtual file created Virtueel bestand gecreëerd - - updating local virtual files metadata - Metagegevens van lokale virtuele bestanden bijwerken - QObject - - %1: %2 - this displays an error string (%2) for a file %1 - %1: %2 - + %nd delay in days after an activity @@ -5245,6 +6451,7 @@ Server antwoordde met fout: %2 + %nh delay in hours after an activity @@ -5253,6 +6460,7 @@ Server antwoordde met fout: %2 + %nm delay in minutes after an activity @@ -5261,70 +6469,92 @@ Server antwoordde met fout: %2 + 1m one minute after activity date and time - Could not create debug archive in selected location! - Kon geen debug-archief aanmaken op geselecteerde locatie! + + Some time ago + Even geleden - Error deleting the file - + + in the future + in de toekomst - Failed to create debug archive - Debug-archief is niet aangemaakt + + now + nu + + + + The directory %1 cannot be part of your sync directory. Please choose another folder. + De map %1 kan geen deel uitmaken van je synchronisatiemap. Kies een andere map. + New folder Nieuwe map - Paths beginning with '#' character are not supported in VFS mode. - + + Could not create debug archive in selected location! + Kon geen debug-archief aanmaken op geselecteerde locatie! - Some time ago - Even geleden + + Failed to create debug archive + Debug-archief is niet aangemaakt + Synced %1 Gesynchroniseerd %1 - The directory %1 cannot be part of your sync directory. Please choose another folder. - De map %1 kan geen deel uitmaken van je synchronisatiemap. Kies een andere map. - - + You changed %1 Je wijzigde %1 + You created %1 Je creëerde %1 + You deleted %1 Je verwijderde %1 + You renamed %1 Je hernoemde %1 - in the future - in de toekomst + + Error deleting the file + - now - nu + + %1: %2 + this displays an error string (%2) for a file %1 + %1: %2 - + + + Paths beginning with '#' character are not supported in VFS mode. + + + ResolveConflictsDialog + %1 files in conflict indicate the number of conflicts to resolve @@ -5333,26 +6563,32 @@ Server antwoordde met fout: %2 + All local versions Alle lokale versies + All server versions Alle server versies + Cancel Annuleren + Choose if you want to keep the local version, server version, or both. If you choose both, the local file will have a number added to its name. Kies of je lokale versie, server versie of beide wilt behouden. Als je voor beide kiest, krijgt het lokale bestand een nummer toegevoegd aan de naam. + Resolve conflicts Los conflicten op + Solve sync conflicts Los synchronisatieconflicten op @@ -5360,6 +6596,7 @@ Server antwoordde met fout: %2 SesErrorBox + Error Fout @@ -5367,14 +6604,17 @@ Server antwoordde met fout: %2 SesTrayHeader + Open Nextcloud in browser HiDrive Next in browser openen + Open local or group folders Open lokale of groepsmappen + Website Website @@ -5382,18 +6622,22 @@ Server antwoordde met fout: %2 ShareDelegate + Copied! Gekopieerd! + Copy share link location + Create a new share link + Share options Deelopties @@ -5401,62 +6645,78 @@ Server antwoordde met fout: %2 ShareDetailsPage + Add another link Nog een link toevoegen + Allow resharing Opnieuw delen toestaan + + Allow upload and editing Uploaden en bewerken toestaan + An error occurred setting the share password. Er trad een fout op bij het instellen van het wachtwoord voor de deellink + Copy share link Copy share link + Custom Permissions Aangepaste machtigingen + Enter the note to recipient Voer de notitie aan de ontvanger in + File drop (upload only) Bestands-drop (alleen uploaden) + Hide download Verberg download + Note to recipient Notitie voor ontvanger + Password protection + Set expiration date Instellen vervaldatum + Share link copied! Share link copied! + Unshare Delen opheffen + View only Alleen bekijken @@ -5464,10 +6724,12 @@ Server antwoordde met fout: %2 ShareeSearchField + Search for users or groups… Zoeken naar gebruikers of groepen ... + Sharing is not available for this folder Delen is niet beschikbaar voor deze map @@ -5475,30 +6737,37 @@ Server antwoordde met fout: %2 ShareView + Expires in %1 + Password required for new share Wachtwoord vereist voor delen + Share password Wachtwoord + Shared with you by %1 + Sharing is disabled Delen is uitgeschakeld + Sharing is disabled. Delen is uitgeschakeld. + This item cannot be shared. Dit item kan niet worden gedeeld @@ -5506,6 +6775,7 @@ Server antwoordde met fout: %2 SyncJournalDb + Failed to connect database. Kon niet verbinden met database. @@ -5513,14 +6783,17 @@ Server antwoordde met fout: %2 SyncStatus + Open browser + Resolve conflicts Los conflicten op + Sync now Nu synchroniseren @@ -5528,10 +6801,12 @@ Server antwoordde met fout: %2 TalkReplyTextField + Reply to … Antwoord aan ... + Send reply to chat message Stuur antwoord op chatbericht @@ -5539,14 +6814,17 @@ Server antwoordde met fout: %2 TermsOfServiceCheckWidget + Logo Logo + Switch to your browser to accept the terms of service + Terms of Service @@ -5554,92 +6832,105 @@ Server antwoordde met fout: %2 theme + Error occurred during setup Er trad een fout op bij het instellen + Error occurred during sync Er trad een fout op tijdens synchronisatie + Preparing to sync Voorbereiden synchronisatie + Stopping sync Synchronisatie stoppen + Sync is paused Synchronisatie is gepauzeerd + Sync is running Bezig met synchroniseren + Sync status is unknown Synchronisatiestatus is onbekend + Sync was successful Synchronisatie was geslaagd + Sync was successful but some files were ignored Synchronisatie geslaagd, sommige bestanden werden genegeerd + Waiting to start syncing In afwachting van synchronisatie - - TrayFoldersMenuButton - - Files - Bestanden - - TrayWindowAccountMenu + Account switcher and settings menu Wisselen van gebruiker en instellingsmenu + Add account + Current account Huidige gebruiker + Current account avatar Huidige gebruiker avatar + Current account status is do not disturb Huidige gebruikersstatus is Niet Storen + Current account status is online Huidige gebruikersstatus is Online + Exit Verlaat + Pause sync for all + Resume sync for all + Settings Instellingen @@ -5647,14 +6938,17 @@ Server antwoordde met fout: %2 TrayWindowHeader + More apps + Open %1 in browser + Open local or group folders Open lokale of groepsmappen @@ -5662,26 +6956,32 @@ Server antwoordde met fout: %2 TrayWindowHeaderBar + More apps + Open %1 in browser + Open Nextcloud Talk in browser Open Nextcloud Talk in browser + Open Nextcloud in browser HiDrive Next in browser openen + Open local or group folders Open lokale of groepsmappen + Website Website @@ -5689,6 +6989,7 @@ Server antwoordde met fout: %2 UnifiedSearchInputContainer + Search files, messages, events … Zoek in bestanden, berichten, afspraak ... @@ -5696,6 +6997,7 @@ Server antwoordde met fout: %2 UnifiedSearchPlaceholderView + Start typing to search @@ -5703,6 +7005,7 @@ Server antwoordde met fout: %2 UnifiedSearchResultFetchMoreTrigger + Load more results Laad meer resultaten @@ -5710,6 +7013,7 @@ Server antwoordde met fout: %2 UnifiedSearchResultItemSkeleton + Search result skeleton. Zoekresultaat skelet. @@ -5717,6 +7021,7 @@ Server antwoordde met fout: %2 UnifiedSearchResultListItem + Load more results Laad meer resultaten @@ -5724,6 +7029,7 @@ Server antwoordde met fout: %2 UnifiedSearchResultNothingFound + No results for Geen resultaten voor @@ -5731,6 +7037,7 @@ Server antwoordde met fout: %2 UnifiedSearchResultSectionItem + Search results section %1 Zoekresultaten sectie %1 @@ -5738,26 +7045,34 @@ Server antwoordde met fout: %2 UserLine + Account actions Accountacties + + Log in Meld u aan + + Log out Afmelden + Remove account Verwijder account + Set status Status instellen + Switch to account Omschakelen naar account @@ -5765,54 +7080,67 @@ Server antwoordde met fout: %2 UserStatusSelector + Appear offline Toon als afwezig + Apply Toepassen + Away Afwezig + Cancel Annuleren + Clear + Clear status message after Statusbericht wissen na + Do not disturb Niet storen + Invisible Onzichtbaar + Mute all notifications Demp alle meldingen + Online Online + Online status Online status + Status message Statusbericht + What is your status? Wat is je status? @@ -5820,30 +7148,37 @@ Server antwoordde met fout: %2 Utility + %1 %2 %1 %2 + %L1 B %L1 B + %L1 GB %L1 GB + %L1 KB %L1 KB + %L1 MB %L1 MB + %L1 TB %L1 TB + %n day(s) %n dag @@ -5851,6 +7186,7 @@ Server antwoordde met fout: %2 + %n hour(s) %n uur @@ -5858,6 +7194,7 @@ Server antwoordde met fout: %2 + %n minute(s) %n minuut @@ -5865,6 +7202,7 @@ Server antwoordde met fout: %2 + %n month(s) %n maand @@ -5872,6 +7210,7 @@ Server antwoordde met fout: %2 + %n second(s) %n seconde @@ -5879,6 +7218,7 @@ Server antwoordde met fout: %2 + %n year(s) %n jaar @@ -5889,42 +7229,52 @@ Server antwoordde met fout: %2 utility + Always available locally Altijd lokaal beschikbaar + Available online only Alleen online beschikbaar + Could not open browser Kon browser niet openen + Could not open email client Kon e-mailclient niet openen + Currently available locally Momenteel lokaal beschikbaar + Free up local space Lokale ruimte vrijmaken + Make always available locally Maak altijd lokaal beschikbaar + Some available online only Sommige alleen online beschikbaar + There was an error when launching the browser to go to URL %1. Maybe no default browser is configured? Er trad een fout op bij het starten van de browser om naar URL %1 te gaan. Misschien is er geen standaardbrowser geconfigureerd? + There was an error when launching the email client to create a new message. Maybe no default email client is configured? Er trad een fout op bij het starten van de e-mailclient om een nieuw bericht te maken. Misschien is er geen e-mailclient gedefinieerd? @@ -5932,14 +7282,17 @@ Server antwoordde met fout: %2 ValidateChecksumHeader + The checksum header contained an unknown checksum type "%1" Het header controlegetal bevat een onbekend controlegetal type "%1" + The checksum header is malformed. De header van het controlegetal is misvormd. + The downloaded file does not match the checksum, it will be resumed. "%1" != "%2" Het gedownloade bestand komt niet overeen met het controlegetal. Het wordt opnieuw verwerkt. "%1" != "%2"