From e60b7902e34ba64afc8f611026f8b11337737461 Mon Sep 17 00:00:00 2001 From: Nextcloud bot Date: Thu, 13 Feb 2025 03:00:11 +0000 Subject: [PATCH 001/139] Fix(l10n): Update translations from Transifex Signed-off-by: Nextcloud bot --- translations/client_ar.ts | 420 ++++++++++++++++---------------- translations/client_bg.ts | 384 ++++++++++++++--------------- translations/client_br.ts | 380 ++++++++++++++--------------- translations/client_ca.ts | 382 ++++++++++++++--------------- translations/client_cs.ts | 454 +++++++++++++++++------------------ translations/client_da.ts | 390 +++++++++++++++--------------- translations/client_de.ts | 420 ++++++++++++++++---------------- translations/client_el.ts | 382 ++++++++++++++--------------- translations/client_en_GB.ts | 422 ++++++++++++++++---------------- translations/client_eo.ts | 380 ++++++++++++++--------------- translations/client_es.ts | 392 +++++++++++++++--------------- translations/client_es_CL.ts | 378 ++++++++++++++--------------- translations/client_es_CO.ts | 378 ++++++++++++++--------------- translations/client_es_CR.ts | 378 ++++++++++++++--------------- translations/client_es_DO.ts | 378 ++++++++++++++--------------- translations/client_es_EC.ts | 384 ++++++++++++++--------------- translations/client_es_GT.ts | 378 ++++++++++++++--------------- translations/client_es_HN.ts | 378 ++++++++++++++--------------- translations/client_es_MX.ts | 392 +++++++++++++++--------------- translations/client_es_SV.ts | 378 ++++++++++++++--------------- translations/client_eu.ts | 390 +++++++++++++++--------------- translations/client_fa.ts | 384 ++++++++++++++--------------- translations/client_fi.ts | 380 ++++++++++++++--------------- translations/client_fr.ts | 420 ++++++++++++++++---------------- translations/client_ga.ts | 392 +++++++++++++++--------------- translations/client_gl.ts | 422 ++++++++++++++++---------------- translations/client_he.ts | 380 ++++++++++++++--------------- translations/client_hr.ts | 382 ++++++++++++++--------------- translations/client_hu.ts | 392 +++++++++++++++--------------- translations/client_is.ts | 380 ++++++++++++++--------------- translations/client_it.ts | 424 ++++++++++++++++---------------- translations/client_ja.ts | 390 +++++++++++++++--------------- translations/client_ko.ts | 390 +++++++++++++++--------------- translations/client_lt_LT.ts | 382 ++++++++++++++--------------- translations/client_lv.ts | 378 ++++++++++++++--------------- translations/client_mk.ts | 380 ++++++++++++++--------------- translations/client_nb_NO.ts | 392 +++++++++++++++--------------- translations/client_nl.ts | 392 +++++++++++++++--------------- translations/client_oc.ts | 376 ++++++++++++++--------------- translations/client_pl.ts | 384 ++++++++++++++--------------- translations/client_pt.ts | 380 ++++++++++++++--------------- translations/client_pt_BR.ts | 392 +++++++++++++++--------------- translations/client_ro.ts | 380 ++++++++++++++--------------- translations/client_ru.ts | 390 +++++++++++++++--------------- translations/client_sc.ts | 382 ++++++++++++++--------------- translations/client_sk.ts | 392 +++++++++++++++--------------- translations/client_sl.ts | 382 ++++++++++++++--------------- translations/client_sr.ts | 422 ++++++++++++++++---------------- translations/client_sv.ts | 392 +++++++++++++++--------------- translations/client_th.ts | 378 ++++++++++++++--------------- translations/client_tr.ts | 390 +++++++++++++++--------------- translations/client_ug.ts | 392 +++++++++++++++--------------- translations/client_uk.ts | 392 +++++++++++++++--------------- translations/client_zh_CN.ts | 392 +++++++++++++++--------------- translations/client_zh_HK.ts | 420 ++++++++++++++++---------------- translations/client_zh_TW.ts | 420 ++++++++++++++++---------------- 56 files changed, 10575 insertions(+), 11359 deletions(-) diff --git a/translations/client_ar.ts b/translations/client_ar.ts index a5d5cf67777ee..9804bed9cd300 100644 --- a/translations/client_ar.ts +++ b/translations/client_ar.ts @@ -172,13 +172,13 @@ - + Resume sync for all استئناف المزامنة للكل - + Pause sync for all تجميد المزامنة للكل @@ -193,32 +193,32 @@ إضافة حساب جديد - + Settings الإعدادات - + Exit خروج - + Current account avatar آفاتار الحساب الحالي - + Current account status is online حالة الحساب الحالي: مُتّصِل - + Current account status is do not disturb حالة الحساب الحالي: أرجو عدم الإزعاج - + Account switcher and settings menu قائمة تبديل الحسابات و الإعدادات @@ -307,17 +307,17 @@ FileProviderEvictionDialog - + Evict materialised files إخلاء الملفات المنجزة - + Materialised items عناصر منجزة materialized - + Reload إعادة تحميل @@ -493,17 +493,17 @@ MainWindow - + Nextcloud desktop main dialog شاشة الحوار الرئيسية في تطبيق نكست كلاود لسطح المكتب - + Unified search results list قائمة نتائج البحث الموحد - + New activities أنشطة جديدة @@ -553,14 +553,14 @@ Should an account import be attempted? تم اكتشاف تهيئة من نسخة سابقة للعميل موجودة على الجهاز. هل ترغب في محاولة استيراد الحساب؟ - + %1 accounts were detected from a legacy desktop client. Should the accounts be imported? %1 حسابات تمّ حذفها من تطبيق عميل سطح المكتب القديم. هل يتوجب استيراد الحسابات؟ - + 1 account was detected from a legacy desktop client. Should the account be imported? حساب واحد 1 تم حذفه من تطبيق عميل سطح المكتب القديم. هل يتوجب استيراد الحساب؟ @@ -573,12 +573,12 @@ Should the account be imported? إستيراد قديم - + Import استيراد - + Skip تخطِّي @@ -673,12 +673,12 @@ Should the account be imported? شفّر المُجلّد - + 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> سييؤدي هذا إلى تشفير مجلدك و كافة الملفات داخله. و لن يمكنك الوصول إلى هذه الملفات إلاّ بعد تقديم مفتاح الشفرة التذكُّرية mnemonic key الصحيح . @@ -710,17 +710,17 @@ Should the account be imported? تحذير - + 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 عملية مزامنة هذا المجلد فيها بعض الأخطاء. لا يمكن البدء في تشفير المجلد إلاّ بعد اكتمال عملية المزامنة بالشكل الصحيح. @@ -973,7 +973,7 @@ This action will abort any currently running synchronization. لا يوجد اتصال مع %1 فى %2. - + Unable to connect to %1. تعذّر الاتصال بـ %1. @@ -983,7 +983,7 @@ This action will abort any currently running synchronization. خطـأ تهيئة الخادم: %1 في %2. - + You need to accept the terms of service يجب عليك قبول شروط الخدمة @@ -1013,7 +1013,7 @@ This action will abort any currently running synchronization. هنالك مجلدات لم تتم مزامنتها لأن حجمها كبيرٌ جدًا أو لأنها وحدات تخزين خارجية: - + There are folders that have grown in size beyond %1MB: %2 هنالك مجلدات تجاوز حجمها %1ميغا بايت: %2 @@ -1215,34 +1215,39 @@ This action will abort any currently running synchronization. استمرار - + + Quit %1 + خروج %1 + + + %1 accounts number of accounts imported %1 حساب - + 1 account حساب واحد 1 - + %1 folders number of folders imported %1 مجلد - + 1 folder مجلد واحد 1 - + Legacy import استيراد القديمة - + Imported %1 and %2 from a legacy desktop client. %3 number of accounts and folders imported. list of users. @@ -1259,11 +1264,6 @@ This action will abort any currently running synchronization. There was an error while accessing the configuration file at %1. Please make sure the file can be accessed by your system account. حدث خطأ أثناء الوصول إلى ملف التهيئة في٪ 1. يرجى التأكد من إمكانية الوصول إلى الملف من خلال حسابك في النظام. - - - Quit %1 - خروج %1 - OCC::AuthenticationDialog @@ -1728,13 +1728,13 @@ This action will abort any currently running synchronization. خطأ في الخادم: رد PROPFIND ليس على نسق XML! - - + + Encrypted metadata setup error! خطأ في إعدادات البيانات الوصفية المشفرة! - + Encrypted metadata setup error: initial signature from server is empty. خطأ في إعداد البيانات الوصفية المشفرة: التوقيع الأوّلي من الخادم فارغ. @@ -2128,17 +2128,17 @@ This can be an issue with your OpenSSL libraries. Please choose a different location. The folder %1 doesn't exist. - + رجاءً؛ إختَر موضعاً آخر. المُجلّد %1 غير موجود. Please choose a different location. %1 isn't a valid folder. - + رجاءً؛ إختَر موضعاً آخر. المُجلّد %1 غير صحيح. Please choose a different location. %1 isn't a readable folder. - + رجاءً؛ إختَر موضعاً آخر. المُجلّد %1 غير قابل للقراءة. @@ -2287,29 +2287,29 @@ If this was an accident and you decide to keep your files, they will be re-synce إحتفظ بالملفات - + A folder has surpassed the set folder size limit of %1MB: %2. %3 تجاوز المجلد الحجم الأقصى المحدد و هو %1 ميغا بايت: %2. %3 - + Keep syncing إستمِر في المزامنة - + Stop syncing أوقِف المزامنة - + The folder %1 has surpassed the set folder size limit of %2MB. تجاوز المجلد %1 الحجم الأقصى المحدد و هو %2 ميغا بايت. - + Would you like to stop syncing this folder? هل ترغب في التوقف عن مزامنة هذا المجلد؟ @@ -2335,41 +2335,41 @@ 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" تعذّر تنزيل الملف الظاهري الذي رمزه: "%1", الحالة: "%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. لقد تم حذف عدد كبير من الملفات الموجودة على الخادوم. يرجى التأكيد إذا كنت ترغب في متابعة عمليات الحذف هذه. بدلاً من ذلك، يمكنك استعادة جميع الملفات المحذوفة عن طريق التحميل من المجلد '%1' إلى الخادوم. - + 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. لقد تم حذف عدد كبير من الملفات في المجلد المحلي '%1'. يرجى التأكيد إذا كنت ترغب في متابعة عمليات الحذف هذه.بدلاً من ذلك، يمكنك استعادة جميع الملفات المحذوفة عن طريق تنزيلها من الخادوم. - + Remove all files? حذف كل الملفات؟ - + Proceed with Deletion إستمر في الحذف ... - + Restore Files to Server قم باستعادة الملفات إلى الخادم - + Restore Files from Server قم باستعادة الملفات من الخادم @@ -2440,32 +2440,32 @@ Alternatively, you can restore all deleted files by downloading them from the se التحضير للمزامنة. - + Syncing %1 of %2 (A few seconds left) مزامنة %1 من %2 (المتبقي بضع ثوانٍ) - + Syncing %1 of %2 (%3 left) مزامنة %1 من %2 (مازال %3) - + Syncing %1 of %2 مزامنة %1 من %2 - + Syncing %1 (A few seconds left) مزامنة %1 (المتبقي بضع ثوانٍ) - + Syncing %1 (%2 left) مزامنة %1 (مازال %2) - + Syncing %1 مزامنة %1 @@ -2509,16 +2509,6 @@ Alternatively, you can restore all deleted files by downloading them from the se No valid folder selected! لم يتم اختيار أي مُجلّدٍ صحيحٍ! - - - The folder %1 is used in a folder sync connection! - المجلد %1 يستعمل لاتصال مزموة المجلد! - - - - Please choose a different location. The selected folder isn't valid. - - The selected path does not exist! @@ -2529,62 +2519,67 @@ Alternatively, you can restore all deleted files by downloading them from the se The selected path is not a folder! المسار المختار ليس مُجلّداً! - - - - Please choose a different location. %1 is already being used as a sync folder. - - You have no permission to write to the selected folder! ليس عندك صلاحية للكتابة في المُجلّد المُختار! + + + The local folder %1 already contains a folder used in a folder sync connection. Please pick another one! + يحتوي المجلد المحلي٪ 1 سلفاً على مجلد مستخدم في اتصال مزامنة مجلد folder sync connection. الرجاء اختيار واحدة أخرى! + + + + The local folder %1 is already contained in a folder used in a folder sync connection. Please pick another one! + المجلد المحلي٪ 1 موجود سلفاً في مجلد مستخدم في اتصال مزامنة مجلد folder sync connection. الرجاء اختيار واحدة أخرى! + + + + There is already a sync from the server to this local folder. Please pick another local folder! + هناك مزامنة من الخادوم لهذا المجلد المحلي قائمة سلفاً. الرجاء اختيار مجلد محلي آخر! + + + + 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. + رجاءً؛ إختَر موضعاً آخر. المُجلّد %1 مُخصَّصٌ مسبقاً كمجلد مزامنة. + Please choose a different location. The path %1 doesn't exist. - + رجاءً؛ إختَر موضعاً آخر. المسار %1 غير موجود. Please choose a different location. The path %1 isn't a folder. - + رجاءً؛ إختَر موضعاً آخر. المسار %1 لا يُمثِّل مُجلَّداً. Please choose a different location. You don't have enough permissions to write to %1. folder location - - - - - The local folder %1 already contains a folder used in a folder sync connection. Please pick another one! - يحتوي المجلد المحلي٪ 1 سلفاً على مجلد مستخدم في اتصال مزامنة مجلد folder sync connection. الرجاء اختيار واحدة أخرى! - - - - The local folder %1 is already contained in a folder used in a folder sync connection. Please pick another one! - المجلد المحلي٪ 1 موجود سلفاً في مجلد مستخدم في اتصال مزامنة مجلد folder sync connection. الرجاء اختيار واحدة أخرى! + رجاءً؛ إختَر موضعاً آخر. ليس عندك الصلاحيات الكافية للكتابة في %1. Please choose a different location. %1 is already contained in a folder used as a sync folder. - - - - - There is already a sync from the server to this local folder. Please pick another local folder! - هناك مزامنة من الخادوم لهذا المجلد المحلي قائمة سلفاً. الرجاء اختيار مجلد محلي آخر! + رجاءً؛ إختَر موضعاً آخر. %1 موجودٌ بداخل مُجلَّد مخصص كمُجلَّد مزامنة. Please choose a different location. %1 is already being used as a sync folder for %2. folder location, server url - + رجاءً؛ إختَر موضعاً آخر. المُجلّد %1 مُخصُّصٌ مسبقاً كمجلد مزامنة لـ %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. @@ -2692,12 +2687,12 @@ For advanced users: this issue might be related to multiple sync database files التوفيق بين التغييرات Reconciling 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'" %1 %2 … @@ -2715,7 +2710,7 @@ For advanced users: this issue might be related to multiple sync database files , - + Download %1/s Example text: "Download 24Kb/s" (%1 is replaced by 24Kb (translated)) تنزيل %1/ث @@ -2732,7 +2727,7 @@ For advanced users: this issue might be related to multiple sync database files ↓ %1/ثا - + Upload %1/s Example text: "Upload 24Kb/s" (%1 is replaced by 24Kb (translated)) رفع %1/ث @@ -2783,12 +2778,12 @@ For advanced users: this issue might be related to multiple sync database files ملف %1 من %2 - + File %1 of %2 الملف %1 من %2 - + About to start syncing على وشك بدء المزامنة @@ -2897,7 +2892,7 @@ 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. - + رجاءً؛ إختَر موضعاً آخر. المُجلّد %1 تتم مزامنته مسبقاً مع %2. @@ -2942,7 +2937,7 @@ For advanced users: this issue might be related to multiple sync database files Virtual files are not supported at the selected location - + الملفات الافتراضية غير مدعومة في الموضع المُحدَّد @@ -3154,7 +3149,7 @@ For advanced users: this issue might be related to multiple sync database files إشعارات الخادم ذات الأهمية - + Show chat notification dialogs. عرض نافذة إشعارات الدردشة. @@ -3193,17 +3188,17 @@ Note that this selects only what pool upgrades are taken from, and that there ar تُحدّد قناة التحديث أي تحديثات للعميل سيتم اقتراح تثبيتها. تحتوي القناة "المستقرة" فقط على الترقيات الموثوقة. في حين أن الإصدارات الموجودة في القناة "التجريبية" قد تحتوي على تحسيناتٍ و تصليحاتٍ أحدث؛ ولكن لم يتم اختبارها بدقة بعد. لا حظ أنه لا يمكن عادةً العودة من القناة التجريبية إلى القناة الثابتة على الفور إلا بانتظار إصدار ثابت أحدث من الإصدار التجريبي المثبت حاليًا. - + daily يومي - + enterprise مؤسَّسِي - + - beta: contains versions with new features that may not be tested thoroughly - daily: contains versions created daily only for testing and development @@ -3215,7 +3210,7 @@ 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. @@ -3225,12 +3220,12 @@ 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 @@ -3921,7 +3916,7 @@ Note that using any logging command line options will override this setting. Virtual files are not supported at the selected location - + الملفات الافتراضية غير مدعومة في الموضع المُحدَّد @@ -4275,30 +4270,30 @@ This is a new, experimental mode. If you decide to use it, please report any iss اسم الملف هذا هو اسم محجوز لنظام التشغيل هذا. - + 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 الذي يحتوي على الحرف "%2" غير مدعوم في نظام الملفات هذا. - + %1 name contains at least one invalid character يحتوي الاسم %1 على حرف واحد غير صالح على الأقل - + %1 name is a reserved name on this file system. الاسم %1 هو اسم محجوز في نظام الملفات هذا. @@ -4353,22 +4348,22 @@ This is a new, experimental mode. If you decide to use it, please report any iss اسم الملف موجود في القائمة السوداء للخادوم. - + Reason: the entire filename is forbidden. السبب: اسم الملف بأكمله ممنوع. - + Reason: the filename has a forbidden base name (filename start). السبب: الجزء الأساسي من اسم الملف محظور (بداية اسم الملف). - + Reason: the file has a forbidden extension (.%1). السبب: امتداد الملف ممنوع (.%1). - + Reason: the filename contains a forbidden character (%1). السبب: اسم الملف يحتوي على حروف غير مسموح بها (%1). @@ -4403,7 +4398,7 @@ This is a new, experimental mode. If you decide to use it, please report any iss تعذّرت المزامنة لأن وقت آخر تعديل للملف غير صالح - + Could not upload file, because it is open in "%1". يتعذّر فتح الملف لأنه مفتوح سلفاً في "%1". @@ -4486,18 +4481,18 @@ This is a new, experimental mode. If you decide to use it, please report any iss خطأ في تحديث البيانات الوصفية metadata بسبب أن "آخر وقت تعديل للملف" غير صالح - - - - - - + + + + + + The folder %1 cannot be made read-only: %2 المجلد %1؛ لا يمكن جعله للقراءة فقط: %2 - - + + unknown exception استثناء غير معروف @@ -4671,12 +4666,6 @@ This is a new, experimental mode. If you decide to use it, please report any iss File %1 downloaded but it resulted in a local file name clash! الملف %1 تمّ تنزيله؛ لكنه تسبّب في تضارب مع اسم ملف محلي! - - - - Could not get file %1 from local DB - تعذّر الحصول على الملف %1 من قاعدة البيانات المحلية - @@ -4684,6 +4673,13 @@ This is a new, experimental mode. If you decide to use it, please report any iss could not get file %1 from local DB تعذّر الحصول على الملف %1 من قاعدة البيانات المحلية + + + + + Could not get file %1 from local DB + تعذّر الحصول على الملف %1 من قاعدة البيانات المحلية + @@ -4785,13 +4781,13 @@ This is a new, experimental mode. If you decide to use it, please report any iss كود HTTP خاطيء وارد من الخادوم. المتوقع هو 201، بينما الوارد هو "%1 %2". - - Could not get file %1 from local DB + + could not get file %1 from local DB تعذّر الحصول على الملف %1 من قاعدة البيانات المحلية - - could not get file %1 from local DB + + Could not get file %1 from local DB تعذّر الحصول على الملف %1 من قاعدة البيانات المحلية @@ -5042,7 +5038,7 @@ This is a new, experimental mode. If you decide to use it, please report any iss OCC::ShareManager - + Error خطأ @@ -5050,17 +5046,17 @@ This is a new, experimental mode. If you decide to use it, please report any iss OCC::ShareModel - + %1 days %1 يوم - + 1 day 1 يوم - + Today اليوم @@ -5090,7 +5086,7 @@ This is a new, experimental mode. If you decide to use it, please report any iss إفلات آمن للملف - + Could not find local folder for %1 تعذّر إيجاد المجلد المحلي لـ %1 @@ -5211,11 +5207,6 @@ Server replied with error: %2 Resharing this folder is not allowed إعادة مشاركة هذا الملف غير مسموحة - - - Copy internal link - نسخ رابط داخلي - Copy secure file drop link @@ -5227,6 +5218,11 @@ Server replied with error: %2 Copy public link نسخ الرابط العمومي + + + Copy internal link + نسخ رابط داخلي + Copy secure filedrop link @@ -5258,16 +5254,16 @@ Server replied with error: %2 remaining time before lock expires ينتهي صلاحيته في %1 دقائقينتهي صلاحيته في %1 دقائقينتهي صلاحيته في %1 دقائقينتهي صلاحيته في %1 دقائقينتهي صلاحيته في %1 دقائقتنتهي صلاحيته في %1 دقائق - - - Open in browser - فتح في المتصفّح - Edit تحرير + + + Open in browser + فتح في المتصفّح + Resolve conflict … @@ -5800,10 +5796,10 @@ Server replied with error: %2 - - - - + + + + Error updating metadata for a folder %1 خطأ في تحديث البيانات الوصفية للمجلد %1 @@ -5823,7 +5819,7 @@ Server replied with error: %2 تعذر إضافة أو إزالة حق وصول المستخدم %1 إلى المجلد %2 - + Failed to unlock a folder. تعذّر فك قفل مجلد. @@ -5841,7 +5837,7 @@ Server replied with error: %2 البدء في الترحيل - + %1 notifications %1 إشعارات @@ -5857,17 +5853,17 @@ Server replied with error: %2 حُلّ التعارض - + Rename file تغيير اسم الملف - + Open Nextcloud Assistant in browser إفتَح "مُساعِد نكست كلاود" Assistant في المُستعرِض - + Open Nextcloud Talk in browser إفتَح "مُحادثة نكست كلاود" Talk في المُستعرِض @@ -5997,32 +5993,22 @@ Server replied with error: %2 Please choose a different location. %1 is a drive. It doesn't support virtual files. - + رجاءً؛ إختَر موضعاً آخر. %1 هو سَوَّاقَة؛ وهي لاتدعم الملفات الافتراضية. - The Virtual filesystem feature does not support a drive as sync root - خاصية نظام الملفات الافتراضي لا تدعم قرصاً كجذر لعمليات المزامنة + The Virtual filesystem feature requires a NTFS file system, %1 is using %2 + تتطلب ميزة نظام الملفات الظاهري نظام ملفات NTFS ـ . %1 تستخدم %2 Please choose a different location. %1 isn't a NTFS file system. It doesn't support virtual files. - - - - - The Virtual filesystem feature requires a NTFS file system, %1 is using %2 - تتطلب ميزة نظام الملفات الظاهري نظام ملفات NTFS ـ . %1 تستخدم %2 + رجاءً؛ إختَر موضعاً آخر. %1 ليس نظام ملفات من النوع NFTS؛ وهو لايدعم الملفات الافتراضية. Please choose a different location. %1 is a network drive. It doesn't support virtual files. - - - - - The Virtual filesystem feature is not supported on network drives - خاصية نظام الملفات الافتراضي غير مدعومة على أقراص التخزين الشبكية + رجاءً؛ إختَر موضعاً آخر. %1 هي سَوَّاقَة شبكية؛ وهي لاتدعم الملفات الافتراضية. @@ -6163,12 +6149,12 @@ Server replied with error: %2 الخادوم على الحساب %1 يقوم بتشغيل إصدار غير معتمد %2. إستعمال هذا العميل مع إصدارات خادوم غير مدعومة لم يتم اختبارها يحتمل أن يُشكّل خطراً أمنيّاً. المضي قدما على مسؤوليتك الخاصة. - + 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 للإقرار بأنك قد قرأتها و وافقت عليها. @@ -6244,23 +6230,23 @@ Server replied with error: %2 لم يتم تكوين مجلدات مزامنة - + %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 لـ %1: المزامنة جارية... - + macOS VFS for %1: Last sync was successful. macOS VFS لـ %1: آخر مزامنة تمّت بنجاحٍِ. - + macOS VFS for %1: A problem was encountered. macOS VFSلـ %1: وَاجَهَ مشكلةً. @@ -6706,7 +6692,7 @@ Server replied with error: %2 البحث عن مستخدمين و مجموعات - + Sharing is not available for this folder المشاركة غير متاحة لهذا المجلد @@ -7117,11 +7103,6 @@ Server replied with error: %2 downloading يتم التنزيل - - - Downloading - يتم تنزيل - uploading @@ -7129,8 +7110,8 @@ Server replied with error: %2 - Uploading - رفع + Downloading + يتم تنزيل @@ -7139,8 +7120,8 @@ Server replied with error: %2 - Deleting - حذف + Uploading + رفع @@ -7148,9 +7129,9 @@ Server replied with error: %2 جاري النقل - - Moving - نقل + + Deleting + حذف @@ -7159,26 +7140,31 @@ Server replied with error: %2 - Ignoring - تجاهل + Moving + نقل error خطأ + + + Ignoring + تجاهل + updating local metadata تحديث بيانات التعريف الوصفية المحلية - + Updating local metadata تحديث البيانات الوصفية المحلية - + Updating local virtual files metadata تحديث البيانات الوصفية للمحلية للملفات الافتراضية @@ -7337,19 +7323,6 @@ Server replied with error: %2 إمسح قائمة رسالة الحالة - - OCC::FormatWarningsWizardPage - - - <b>Warning:</b> %1 - <b>تحذير:</b> %1 - - - - <b>Warning:</b> - <b>تحذير:</b> - - OCC::AbstractPropagateRemoteDeleteEncrypted @@ -7363,6 +7336,19 @@ Server replied with error: %2 "%1 فشل في فك قفل المجلّد المشفّر %2". + + OCC::FormatWarningsWizardPage + + + <b>Warning:</b> %1 + <b>تحذير:</b> %1 + + + + <b>Warning:</b> + <b>تحذير:</b> + + OCC::OAuth diff --git a/translations/client_bg.ts b/translations/client_bg.ts index f053d18f8c435..fb58a0716be42 100644 --- a/translations/client_bg.ts +++ b/translations/client_bg.ts @@ -172,13 +172,13 @@ - + Resume sync for all - + Pause sync for all @@ -193,32 +193,32 @@ - + Settings - + Exit - + Current account avatar - + Current account status is online - + Current account status is do not disturb - + Account switcher and settings menu @@ -307,17 +307,17 @@ FileProviderEvictionDialog - + Evict materialised files - + Materialised items - + Reload @@ -493,17 +493,17 @@ MainWindow - + Nextcloud desktop main dialog - + Unified search results list - + New activities @@ -553,13 +553,13 @@ Should an account import be attempted? - + %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? @@ -572,12 +572,12 @@ Should the account be imported? - + Import - + Skip @@ -672,12 +672,12 @@ Should the account be imported? Криптиране на папка - + 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> @@ -708,17 +708,17 @@ Should the account be imported? Внимание - + 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 @@ -974,7 +974,7 @@ This action will abort any currently running synchronization. Не може да се осъществи връзка като %1 с %2. - + Unable to connect to %1. @@ -984,7 +984,7 @@ This action will abort any currently running synchronization. Грешка в конфигурацията на сървъра:% 1 при% 2. - + You need to accept the terms of service @@ -1014,7 +1014,7 @@ This action will abort any currently running synchronization. Има папки, които не са синхронизирани защото са твърде големи или са външни хранилища: - + There are folders that have grown in size beyond %1MB: %2 @@ -1216,34 +1216,39 @@ This action will abort any currently running synchronization. Продължи - + + Quit %1 + Напускане %1 + + + %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. @@ -1259,11 +1264,6 @@ This action will abort any currently running synchronization. There was an error while accessing the configuration file at %1. Please make sure the file can be accessed by your system account. Възникна грешка при достъпа до конфигурационния файл при % 1 . Моля да се уверите, че файлът е достъпен от вашият системен профил. - - - Quit %1 - Напускане %1 - OCC::AuthenticationDialog @@ -1728,13 +1728,13 @@ This action will abort any currently running synchronization. Грешка на сървъра: PROPFIND отговорът не е форматиран в XML! - - + + Encrypted metadata setup error! - + Encrypted metadata setup error: initial signature from server is empty. @@ -2290,28 +2290,28 @@ If this was an accident and you decide to keep your files, they will be re-synce Запазване на файловете - + 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? @@ -2339,41 +2339,41 @@ 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" - + 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 @@ -2444,32 +2444,32 @@ Alternatively, you can restore all deleted files by downloading them from the se Подготвяне за синхронизиране. - + 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 @@ -2513,16 +2513,6 @@ Alternatively, you can restore all deleted files by downloading them from the se No valid folder selected! Не сте избрали валидна папка! - - - The folder %1 is used in a folder sync connection! - - - - - Please choose a different location. The selected folder isn't valid. - - The selected path does not exist! @@ -2533,17 +2523,37 @@ Alternatively, you can restore all deleted files by downloading them from the se The selected path is not a folder! Избраният път не е папка! + + + You have no permission to write to the selected folder! + Нямате права за писане в избраната папка. + + + + The local folder %1 already contains a folder used in a folder sync connection. Please pick another one! + Локалната папка %1 вече съдържа папка, използвана във връзка за синхронизиране на папка. Моля, изберете друга! + + + + The local folder %1 is already contained in a folder used in a folder sync connection. Please pick another one! + Локалната папка %1 вече се съдържа в папка, използвана във връзка за синхронизиране на папка. Моля, изберете друга! + + + + There is already a sync from the server to this local folder. Please pick another local folder! + Вече има синхронизация от сървъра към тази локална папка. Моля, изберете друга локална папка! + + + + 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. - - - You have no permission to write to the selected folder! - Нямате права за писане в избраната папка. - Please choose a different location. The path %1 doesn't exist. @@ -2561,26 +2571,11 @@ Alternatively, you can restore all deleted files by downloading them from the se folder location - - - The local folder %1 already contains a folder used in a folder sync connection. Please pick another one! - Локалната папка %1 вече съдържа папка, използвана във връзка за синхронизиране на папка. Моля, изберете друга! - - - - The local folder %1 is already contained in a folder used in a folder sync connection. Please pick another one! - Локалната папка %1 вече се съдържа в папка, използвана във връзка за синхронизиране на папка. Моля, изберете друга! - Please choose a different location. %1 is already contained in a folder used as a sync folder. - - - There is already a sync from the server to this local folder. Please pick another local folder! - Вече има синхронизация от сървъра към тази локална папка. Моля, изберете друга локална папка! - Please choose a different location. %1 is already being used as a sync folder for %2. @@ -2588,7 +2583,7 @@ Alternatively, you can restore all deleted files by downloading them from the se - + 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. @@ -2693,12 +2688,12 @@ For advanced users: this issue might be related to multiple sync database files Запис на промените - + 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'" @@ -2716,7 +2711,7 @@ For advanced users: this issue might be related to multiple sync database files , - + Download %1/s Example text: "Download 24Kb/s" (%1 is replaced by 24Kb (translated)) @@ -2733,7 +2728,7 @@ For advanced users: this issue might be related to multiple sync database files ↓ %1/s - + Upload %1/s Example text: "Upload 24Kb/s" (%1 is replaced by 24Kb (translated)) @@ -2784,12 +2779,12 @@ For advanced users: this issue might be related to multiple sync database files файл %1 от %2 - + File %1 of %2 - + About to start syncing @@ -3155,7 +3150,7 @@ For advanced users: this issue might be related to multiple sync database files Известия от сървъра, които изискват внимание. - + Show chat notification dialogs. @@ -3196,17 +3191,17 @@ Note that this selects only what pool upgrades are taken from, and that there ar Обърнете внимание, че се избира само това от какво са взети надстройките на пула и че няма понижавания: Така че връщането от бета канала към стабилния канал обикновено не може да се направи веднага и означава изчакване на стабилна версия, която е по-нова от текущо инсталираната бета версия. - + daily - + enterprise - + - beta: contains versions with new features that may not be tested thoroughly - daily: contains versions created daily only for testing and development @@ -3215,7 +3210,7 @@ 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. @@ -3223,12 +3218,12 @@ 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 @@ -4279,30 +4274,30 @@ This is a new, experimental mode. If you decide to use it, please report any iss Името на файла е запазено име на тази файлова система. - + 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. @@ -4357,22 +4352,22 @@ This is a new, experimental mode. If you decide to use it, please report any iss Името на файла е в черния списък на сървъра. - + 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). @@ -4407,7 +4402,7 @@ This is a new, experimental mode. If you decide to use it, please report any iss Не може да се синхронизира поради невалиден час на модификация - + Could not upload file, because it is open in "%1". @@ -4490,18 +4485,18 @@ This is a new, experimental mode. If you decide to use it, please report any iss Грешка при актуализиране на метаданните поради невалиден час на модификация - - - - - - + + + + + + The folder %1 cannot be made read-only: %2 - - + + unknown exception @@ -4675,12 +4670,6 @@ This is a new, experimental mode. If you decide to use it, please report any iss File %1 downloaded but it resulted in a local file name clash! Файл %1 е изтеглен, но това е довело до сблъсък с имена на локалните файлове! - - - - Could not get file %1 from local DB - - @@ -4688,6 +4677,13 @@ This is a new, experimental mode. If you decide to use it, please report any iss could not get file %1 from local DB не можа да се получи файл %1 от локалната БД + + + + + Could not get file %1 from local DB + + @@ -4788,16 +4784,16 @@ 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". Грешен HTTP код, върнат от сървъра. Очаквани 201, но са получени „% 1% 2“. - - - Could not get file %1 from local DB - - could not get file %1 from local DB не можа да се получи файл %1 от локалната БД + + + Could not get file %1 from local DB + + Could not delete file record %1 from local DB @@ -5046,7 +5042,7 @@ This is a new, experimental mode. If you decide to use it, please report any iss OCC::ShareManager - + Error @@ -5054,17 +5050,17 @@ This is a new, experimental mode. If you decide to use it, please report any iss OCC::ShareModel - + %1 days - + 1 day - + Today @@ -5094,7 +5090,7 @@ This is a new, experimental mode. If you decide to use it, please report any iss Защитено пускане на файлове - + Could not find local folder for %1 @@ -5217,11 +5213,6 @@ Server replied with error: %2 Resharing this folder is not allowed Повторното споделяне на тази папка не е разрешено - - - Copy internal link - Копиране на вътрешна връзка - Copy secure file drop link @@ -5233,6 +5224,11 @@ Server replied with error: %2 Copy public link Копиране на публична връзка + + + Copy internal link + Копиране на вътрешна връзка + Copy secure filedrop link @@ -5264,16 +5260,16 @@ Server replied with error: %2 remaining time before lock expires Изтича след %1 минута/иИзтича след %1 минута/и - - - Open in browser - Отвори в браузъра - Edit Редакция + + + Open in browser + Отвори в браузъра + Resolve conflict … @@ -5806,10 +5802,10 @@ Server replied with error: %2 - - - - + + + + Error updating metadata for a folder %1 @@ -5829,7 +5825,7 @@ Server replied with error: %2 - + Failed to unlock a folder. @@ -5847,7 +5843,7 @@ Server replied with error: %2 - + %1 notifications @@ -5863,17 +5859,17 @@ Server replied with error: %2 Разрешаване на конфликт - + Rename file - + Open Nextcloud Assistant in browser - + Open Nextcloud Talk in browser @@ -6007,29 +6003,19 @@ Server replied with error: %2 - The Virtual filesystem feature does not support a drive as sync root - + The Virtual filesystem feature requires a NTFS file system, %1 is using %2 + Функцията за Виртуална файлова система изисква файлова система NTFS, % 1 използва % 2 Please choose a different location. %1 isn't a NTFS file system. It doesn't support virtual files. - - - The Virtual filesystem feature requires a NTFS file system, %1 is using %2 - Функцията за Виртуална файлова система изисква файлова система NTFS, % 1 използва % 2 - Please choose a different location. %1 is a network drive. It doesn't support virtual files. - - - The Virtual filesystem feature is not supported on network drives - - OCC::VfsDownloadErrorDialog @@ -6169,12 +6155,12 @@ Server replied with error: %2 Сървърът на профил% 1 изпълнява стара и неподдържана версия% 2. Използването на този клиент с неподдържани версии на сървъра е непроверено и потенциално опасно. Продължете на свой риск. - + 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. @@ -6250,23 +6236,23 @@ Server replied with error: %2 Няма настроени папки за синхронизиране - + %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. @@ -6712,7 +6698,7 @@ Server replied with error: %2 Търсене на потребители или групи... - + Sharing is not available for this folder @@ -7123,11 +7109,6 @@ Server replied with error: %2 downloading сваляне - - - Downloading - - uploading @@ -7135,7 +7116,7 @@ Server replied with error: %2 - Uploading + Downloading @@ -7145,7 +7126,7 @@ Server replied with error: %2 - Deleting + Uploading @@ -7154,8 +7135,8 @@ Server replied with error: %2 преместване - - Moving + + Deleting @@ -7165,7 +7146,7 @@ Server replied with error: %2 - Ignoring + Moving @@ -7173,18 +7154,23 @@ Server replied with error: %2 error грешка + + + Ignoring + + updating local metadata актуализиране на локални метаданни - + Updating local metadata - + Updating local virtual files metadata @@ -7343,19 +7329,6 @@ Server replied with error: %2 Изчистване на менюто за съобщения на състояние - - OCC::FormatWarningsWizardPage - - - <b>Warning:</b> %1 - <b>Внимание:</b> %1 - - - - <b>Warning:</b> - <b>Внимание:</b> - - OCC::AbstractPropagateRemoteDeleteEncrypted @@ -7369,6 +7342,19 @@ Server replied with error: %2 "%1 Неуспешно отключване на криптирана папка% 2" + + OCC::FormatWarningsWizardPage + + + <b>Warning:</b> %1 + <b>Внимание:</b> %1 + + + + <b>Warning:</b> + <b>Внимание:</b> + + OCC::OAuth diff --git a/translations/client_br.ts b/translations/client_br.ts index 1fc2c94dd066f..ed1d76486c1e9 100644 --- a/translations/client_br.ts +++ b/translations/client_br.ts @@ -172,13 +172,13 @@ - + Resume sync for all - + Pause sync for all @@ -193,32 +193,32 @@ - + Settings - + Exit - + Current account avatar - + Current account status is online - + Current account status is do not disturb - + Account switcher and settings menu @@ -307,17 +307,17 @@ FileProviderEvictionDialog - + Evict materialised files - + Materialised items - + Reload @@ -493,17 +493,17 @@ MainWindow - + Nextcloud desktop main dialog - + Unified search results list - + New activities @@ -553,13 +553,13 @@ Should an account import be attempted? - + %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? @@ -572,12 +572,12 @@ Should the account be imported? - + Import - + Skip @@ -672,12 +672,12 @@ Should the account be imported? - + 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> @@ -708,17 +708,17 @@ Should the account be imported? Kemenadenn - + 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 @@ -969,7 +969,7 @@ This action will abort any currently running synchronization. Kestagadenn ebet da %1 da %2 - + Unable to connect to %1. @@ -979,7 +979,7 @@ This action will abort any currently running synchronization. - + You need to accept the terms of service @@ -1009,7 +1009,7 @@ This action will abort any currently running synchronization. Teuliadoù so n'int ke bet kemredet peogwir e oant pe re vra pe lec'hioù klenkañ diavaez : - + There are folders that have grown in size beyond %1MB: %2 @@ -1211,34 +1211,39 @@ This action will abort any currently running synchronization. - + + Quit %1 + Kuitaat %1 + + + %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. @@ -1254,11 +1259,6 @@ This action will abort any currently running synchronization. There was an error while accessing the configuration file at %1. Please make sure the file can be accessed by your system account. - - - Quit %1 - Kuitaat %1 - OCC::AuthenticationDialog @@ -1721,13 +1721,13 @@ This action will abort any currently running synchronization. - - + + Encrypted metadata setup error! - + Encrypted metadata setup error: initial signature from server is empty. @@ -2277,28 +2277,28 @@ If this was an accident and you decide to keep your files, they will be re-synce - + 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? @@ -2326,41 +2326,41 @@ Talvout a ra ar c'hliant kemprenn a c'hell n'omp pas pellkas ar c %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. 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 @@ -2431,32 +2431,32 @@ Alternatively, you can restore all deleted files by downloading them from the se O prientiñ evit ar gemprenn. - + 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 @@ -2500,16 +2500,6 @@ Alternatively, you can restore all deleted files by downloading them from the se No valid folder selected! Teuliad mat choazet ebet ! - - - The folder %1 is used in a folder sync connection! - - - - - Please choose a different location. The selected folder isn't valid. - - The selected path does not exist! @@ -2520,17 +2510,37 @@ Alternatively, you can restore all deleted files by downloading them from the se The selected path is not a folder! An hent choazet n'eo ket un teuliad ! + + + You have no permission to write to the selected folder! + N'ho peus aotre ebet evit skrivañ en teuliad choazet ! + + + + The local folder %1 already contains a folder used in a folder sync connection. Please pick another one! + An teuliad diabarzh %1 en deus dija un teuliad implijet er genstagadenn kemprennañ teuliad. Choazit unan all ! + + + + The local folder %1 is already contained in a folder used in a folder sync connection. Please pick another one! + An teuliad diabarzh %1 a zo dija en teuliad implijet er genstagadenn kemprennañ teuliad. Choazit unan all ! + + + + There is already a sync from the server to this local folder. Please pick another local folder! + Un gemprennadenn eus ar servijour d'an teuliad diabarzh ez eus dija. Choazit un teuliad diabarzh all ! + + + + 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. - - - You have no permission to write to the selected folder! - N'ho peus aotre ebet evit skrivañ en teuliad choazet ! - Please choose a different location. The path %1 doesn't exist. @@ -2548,26 +2558,11 @@ Alternatively, you can restore all deleted files by downloading them from the se folder location - - - The local folder %1 already contains a folder used in a folder sync connection. Please pick another one! - An teuliad diabarzh %1 en deus dija un teuliad implijet er genstagadenn kemprennañ teuliad. Choazit unan all ! - - - - The local folder %1 is already contained in a folder used in a folder sync connection. Please pick another one! - An teuliad diabarzh %1 a zo dija en teuliad implijet er genstagadenn kemprennañ teuliad. Choazit unan all ! - Please choose a different location. %1 is already contained in a folder used as a sync folder. - - - There is already a sync from the server to this local folder. Please pick another local folder! - Un gemprennadenn eus ar servijour d'an teuliad diabarzh ez eus dija. Choazit un teuliad diabarzh all ! - Please choose a different location. %1 is already being used as a sync folder for %2. @@ -2575,7 +2570,7 @@ Alternatively, you can restore all deleted files by downloading them from the se - + 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. @@ -2680,12 +2675,12 @@ For advanced users: this issue might be related to multiple sync database files Adkompezañ ar cheñchamantoù - + 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'" @@ -2703,7 +2698,7 @@ For advanced users: this issue might be related to multiple sync database files ' - + Download %1/s Example text: "Download 24Kb/s" (%1 is replaced by 24Kb (translated)) @@ -2720,7 +2715,7 @@ For advanced users: this issue might be related to multiple sync database files ↓ %1/s - + Upload %1/s Example text: "Upload 24Kb/s" (%1 is replaced by 24Kb (translated)) @@ -2771,12 +2766,12 @@ For advanced users: this issue might be related to multiple sync database files %1 restr diwar %2 - + File %1 of %2 - + About to start syncing @@ -3142,7 +3137,7 @@ For advanced users: this issue might be related to multiple sync database files Kemenadennoù servijour ho deus ezhomm ho hevez. - + Show chat notification dialogs. @@ -3181,17 +3176,17 @@ Note that this selects only what pool upgrades are taken from, and that there ar - + daily - + enterprise - + - beta: contains versions with new features that may not be tested thoroughly - daily: contains versions created daily only for testing and development @@ -3200,7 +3195,7 @@ 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. @@ -3208,12 +3203,12 @@ 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 @@ -4255,30 +4250,30 @@ This is a new, experimental mode. If you decide to use it, please report any iss - + 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. @@ -4333,22 +4328,22 @@ This is a new, experimental mode. If you decide to use it, please report any iss - + 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). @@ -4383,7 +4378,7 @@ This is a new, experimental mode. If you decide to use it, please report any iss - + Could not upload file, because it is open in "%1". @@ -4466,18 +4461,18 @@ This is a new, experimental mode. If you decide to use it, please report any iss - - - - - - + + + + + + The folder %1 cannot be made read-only: %2 - - + + unknown exception @@ -4651,12 +4646,6 @@ This is a new, experimental mode. If you decide to use it, please report any iss File %1 downloaded but it resulted in a local file name clash! - - - - Could not get file %1 from local DB - - @@ -4664,6 +4653,13 @@ This is a new, experimental mode. If you decide to use it, please report any iss could not get file %1 from local DB + + + + + Could not get file %1 from local DB + + @@ -4765,13 +4761,13 @@ This is a new, experimental mode. If you decide to use it, please report any iss Kod HTTP fall roet gant ar servijour. O gortoz e oa 201, met resevet a zo ber "%1 %2". - - Could not get file %1 from local DB + + could not get file %1 from local DB - - could not get file %1 from local DB + + Could not get file %1 from local DB @@ -5022,7 +5018,7 @@ This is a new, experimental mode. If you decide to use it, please report any iss OCC::ShareManager - + Error @@ -5030,17 +5026,17 @@ This is a new, experimental mode. If you decide to use it, please report any iss OCC::ShareModel - + %1 days - + 1 day - + Today @@ -5070,7 +5066,7 @@ This is a new, experimental mode. If you decide to use it, please report any iss - + Could not find local folder for %1 @@ -5191,11 +5187,6 @@ Server replied with error: %2 Resharing this folder is not allowed - - - Copy internal link - Eilañ al liammm diabarzh - Copy secure file drop link @@ -5207,6 +5198,11 @@ Server replied with error: %2 Copy public link Eilañ al liamm publik + + + Copy internal link + Eilañ al liammm diabarzh + Copy secure filedrop link @@ -5238,16 +5234,16 @@ Server replied with error: %2 remaining time before lock expires - - - Open in browser - Digeriñ er furcher - Edit Cheñch + + + Open in browser + Digeriñ er furcher + Resolve conflict … @@ -5780,10 +5776,10 @@ Server replied with error: %2 - - - - + + + + Error updating metadata for a folder %1 @@ -5803,7 +5799,7 @@ Server replied with error: %2 - + Failed to unlock a folder. @@ -5821,7 +5817,7 @@ Server replied with error: %2 - + %1 notifications @@ -5837,17 +5833,17 @@ Server replied with error: %2 - + Rename file - + Open Nextcloud Assistant in browser - + Open Nextcloud Talk in browser @@ -5981,7 +5977,7 @@ Server replied with error: %2 - The Virtual filesystem feature does not support a drive as sync root + The Virtual filesystem feature requires a NTFS file system, %1 is using %2 @@ -5989,21 +5985,11 @@ Server replied with error: %2 Please choose a different location. %1 isn't a NTFS file system. It doesn't support virtual files. - - - The Virtual filesystem feature requires a NTFS file system, %1 is using %2 - - Please choose a different location. %1 is a network drive. It doesn't support virtual files. - - - The Virtual filesystem feature is not supported on network drives - - OCC::VfsDownloadErrorDialog @@ -6143,12 +6129,12 @@ Server replied with error: %2 - + 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. @@ -6224,23 +6210,23 @@ Server replied with error: %2 Teuliad kemprenn ebet - + %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. @@ -6686,7 +6672,7 @@ Server replied with error: %2 - + Sharing is not available for this folder @@ -7097,11 +7083,6 @@ Server replied with error: %2 downloading o pelkargañ - - - Downloading - - uploading @@ -7109,7 +7090,7 @@ Server replied with error: %2 - Uploading + Downloading @@ -7119,7 +7100,7 @@ Server replied with error: %2 - Deleting + Uploading @@ -7128,8 +7109,8 @@ Server replied with error: %2 o diblasañ - - Moving + + Deleting @@ -7139,7 +7120,7 @@ Server replied with error: %2 - Ignoring + Moving @@ -7147,18 +7128,23 @@ Server replied with error: %2 error fazi + + + Ignoring + + updating local metadata o adnevesaat ar roadennoù meta diabarzh - + Updating local metadata - + Updating local virtual files metadata @@ -7317,19 +7303,6 @@ Server replied with error: %2 - - OCC::FormatWarningsWizardPage - - - <b>Warning:</b> %1 - <b>Diwallit :</b> %1 - - - - <b>Warning:</b> - <b>Diwallit : </b> - - OCC::AbstractPropagateRemoteDeleteEncrypted @@ -7343,6 +7316,19 @@ Server replied with error: %2 + + OCC::FormatWarningsWizardPage + + + <b>Warning:</b> %1 + <b>Diwallit :</b> %1 + + + + <b>Warning:</b> + <b>Diwallit : </b> + + OCC::OAuth diff --git a/translations/client_ca.ts b/translations/client_ca.ts index 19aec7f1233af..b201558c91aa7 100644 --- a/translations/client_ca.ts +++ b/translations/client_ca.ts @@ -172,13 +172,13 @@ - + Resume sync for all - + Pause sync for all @@ -193,32 +193,32 @@ - + Settings - + Exit - + Current account avatar - + Current account status is online - + Current account status is do not disturb - + Account switcher and settings menu @@ -307,17 +307,17 @@ FileProviderEvictionDialog - + Evict materialised files - + Materialised items - + Reload @@ -493,17 +493,17 @@ MainWindow - + Nextcloud desktop main dialog - + Unified search results list - + New activities @@ -554,13 +554,13 @@ Should an account import be attempted? S'ha d'intentar importar un compte? - + %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? @@ -573,12 +573,12 @@ Should the account be imported? - + Import - + Skip @@ -673,12 +673,12 @@ Should the account be imported? Xifra la carpeta - + 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> @@ -709,17 +709,17 @@ Should the account be imported? Avís - + 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 @@ -974,7 +974,7 @@ Aquesta acció anul·larà qualsevol sincronització en execució. No hi ha connexió a %1 a %2. - + Unable to connect to %1. @@ -984,7 +984,7 @@ Aquesta acció anul·larà qualsevol sincronització en execució. Error de configuració del servidor: %1 a %2. - + You need to accept the terms of service @@ -1014,7 +1014,7 @@ Aquesta acció anul·larà qualsevol sincronització en execució. Hi ha carpetes que no s'han sincronitzat perquè són massa grans o són fonts d'emmagatzematge extern: - + There are folders that have grown in size beyond %1MB: %2 @@ -1216,34 +1216,39 @@ Aquesta acció anul·larà qualsevol sincronització en execució. Continua - + + Quit %1 + Surt del %1 + + + %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. @@ -1259,11 +1264,6 @@ Aquesta acció anul·larà qualsevol sincronització en execució. There was an error while accessing the configuration file at %1. Please make sure the file can be accessed by your system account. S'ha produït un error en accedir al fitxer de configuració a %1. Assegureu-vos que el vostre compte del sistema pugui accedir al fitxer. - - - Quit %1 - Surt del %1 - OCC::AuthenticationDialog @@ -1728,13 +1728,13 @@ Aquesta acció anul·larà qualsevol sincronització en execució. Error del servidor: la resposta PROPFIND no té el format XML. - - + + Encrypted metadata setup error! - + Encrypted metadata setup error: initial signature from server is empty. @@ -2284,28 +2284,28 @@ If this was an accident and you decide to keep your files, they will be re-synce Mantén els fitxers - + 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? @@ -2329,41 +2329,41 @@ This means that the synchronization client might not upload local changes immedi No s'ha pogut fer un seguiment fiable dels canvis en les carpetes sincronitzades. Això significa que és possible que el client de sincronització no pugui carregar els canvis locals immediatament i, en canvi, només cercarà els canvis locals i els pujarà ocasionalment (per defecte, cada dues hores). %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. 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 @@ -2434,32 +2434,32 @@ Alternatively, you can restore all deleted files by downloading them from the se S'està preparant la sincronització. - + 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 @@ -2503,16 +2503,6 @@ Alternatively, you can restore all deleted files by downloading them from the se No valid folder selected! No s'ha seleccionat cap carpeta vàlida. - - - The folder %1 is used in a folder sync connection! - - - - - Please choose a different location. The selected folder isn't valid. - - The selected path does not exist! @@ -2523,17 +2513,37 @@ Alternatively, you can restore all deleted files by downloading them from the se The selected path is not a folder! El camí seleccionat no és una carpeta. + + + You have no permission to write to the selected folder! + No teniu permís per a escriure a la carpeta seleccionada. + + + + The local folder %1 already contains a folder used in a folder sync connection. Please pick another one! + La carpeta local %1 ja conté una carpeta utilitzada en una connexió de sincronització de carpetes. Trieu-ne una altra. + + + + The local folder %1 is already contained in a folder used in a folder sync connection. Please pick another one! + La carpeta local %1 ja forma part d'una carpeta utilitzada en una connexió de sincronització de carpetes. Trieu-ne una altra. + + + + There is already a sync from the server to this local folder. Please pick another local folder! + Ja hi ha una sincronització entre el servidor i aquesta carpeta local. Trieu una altra carpeta local. + + + + 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. - - - You have no permission to write to the selected folder! - No teniu permís per a escriure a la carpeta seleccionada. - Please choose a different location. The path %1 doesn't exist. @@ -2551,26 +2561,11 @@ Alternatively, you can restore all deleted files by downloading them from the se folder location - - - The local folder %1 already contains a folder used in a folder sync connection. Please pick another one! - La carpeta local %1 ja conté una carpeta utilitzada en una connexió de sincronització de carpetes. Trieu-ne una altra. - - - - The local folder %1 is already contained in a folder used in a folder sync connection. Please pick another one! - La carpeta local %1 ja forma part d'una carpeta utilitzada en una connexió de sincronització de carpetes. Trieu-ne una altra. - Please choose a different location. %1 is already contained in a folder used as a sync folder. - - - There is already a sync from the server to this local folder. Please pick another local folder! - Ja hi ha una sincronització entre el servidor i aquesta carpeta local. Trieu una altra carpeta local. - Please choose a different location. %1 is already being used as a sync folder for %2. @@ -2578,7 +2573,7 @@ Alternatively, you can restore all deleted files by downloading them from the se - + 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. @@ -2683,12 +2678,12 @@ For advanced users: this issue might be related to multiple sync database files S'estan conciliant els canvis - + 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'" @@ -2706,7 +2701,7 @@ For advanced users: this issue might be related to multiple sync database files , - + Download %1/s Example text: "Download 24Kb/s" (%1 is replaced by 24Kb (translated)) @@ -2723,7 +2718,7 @@ For advanced users: this issue might be related to multiple sync database files ↓ %1/s - + Upload %1/s Example text: "Upload 24Kb/s" (%1 is replaced by 24Kb (translated)) @@ -2774,12 +2769,12 @@ For advanced users: this issue might be related to multiple sync database files fitxer %1 de %2 - + File %1 of %2 - + About to start syncing @@ -3145,7 +3140,7 @@ For advanced users: this issue might be related to multiple sync database files Notificacions del servidor que requereixen atenció. - + Show chat notification dialogs. @@ -3184,17 +3179,17 @@ Note that this selects only what pool upgrades are taken from, and that there ar - + daily - + enterprise - + - beta: contains versions with new features that may not be tested thoroughly - daily: contains versions created daily only for testing and development @@ -3203,7 +3198,7 @@ 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. @@ -3211,12 +3206,12 @@ 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 @@ -4256,30 +4251,30 @@ This is a new, experimental mode. If you decide to use it, please report any iss Aquest nom de fitxer és un nom reservat en aquest sistema de fitxers. - + 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. @@ -4334,22 +4329,22 @@ This is a new, experimental mode. If you decide to use it, please report any iss El nom del fitxer es troba en la llista de prohibicions del servidor. - + 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). @@ -4384,7 +4379,7 @@ This is a new, experimental mode. If you decide to use it, please report any iss - + Could not upload file, because it is open in "%1". @@ -4467,18 +4462,18 @@ This is a new, experimental mode. If you decide to use it, please report any iss - - - - - - + + + + + + The folder %1 cannot be made read-only: %2 - - + + unknown exception @@ -4652,12 +4647,6 @@ This is a new, experimental mode. If you decide to use it, please report any iss File %1 downloaded but it resulted in a local file name clash! - - - - Could not get file %1 from local DB - - @@ -4665,6 +4654,13 @@ This is a new, experimental mode. If you decide to use it, please report any iss could not get file %1 from local DB + + + + + Could not get file %1 from local DB + + @@ -4766,13 +4762,13 @@ This is a new, experimental mode. If you decide to use it, please report any iss El servidor ha retornat un codi HTTP incorrecte. S'esperava el codi 201, però s'ha rebut «%1 %2». - - Could not get file %1 from local DB + + could not get file %1 from local DB - - could not get file %1 from local DB + + Could not get file %1 from local DB @@ -5023,7 +5019,7 @@ This is a new, experimental mode. If you decide to use it, please report any iss OCC::ShareManager - + Error @@ -5031,17 +5027,17 @@ This is a new, experimental mode. If you decide to use it, please report any iss OCC::ShareModel - + %1 days - + 1 day - + Today @@ -5071,7 +5067,7 @@ This is a new, experimental mode. If you decide to use it, please report any iss - + Could not find local folder for %1 @@ -5192,11 +5188,6 @@ Server replied with error: %2 Resharing this folder is not allowed No es permet tornar a compartir la carpeta - - - Copy internal link - Copia l'enllaç intern - Copy secure file drop link @@ -5208,6 +5199,11 @@ Server replied with error: %2 Copy public link Copia l'enllaç públic + + + Copy internal link + Copia l'enllaç intern + Copy secure filedrop link @@ -5239,16 +5235,16 @@ Server replied with error: %2 remaining time before lock expires - - - Open in browser - Obre en el navegador - Edit Edita + + + Open in browser + Obre en el navegador + Resolve conflict … @@ -5781,10 +5777,10 @@ Server replied with error: %2 - - - - + + + + Error updating metadata for a folder %1 @@ -5804,7 +5800,7 @@ Server replied with error: %2 - + Failed to unlock a folder. @@ -5822,7 +5818,7 @@ Server replied with error: %2 - + %1 notifications @@ -5838,17 +5834,17 @@ Server replied with error: %2 - + Rename file - + Open Nextcloud Assistant in browser - + Open Nextcloud Talk in browser @@ -5982,29 +5978,19 @@ Server replied with error: %2 - The Virtual filesystem feature does not support a drive as sync root - + The Virtual filesystem feature requires a NTFS file system, %1 is using %2 + La característica de sistema de fitxers virtual requereix un sistema de fitxers NTFS; %1 utilitza %2 Please choose a different location. %1 isn't a NTFS file system. It doesn't support virtual files. - - - The Virtual filesystem feature requires a NTFS file system, %1 is using %2 - La característica de sistema de fitxers virtual requereix un sistema de fitxers NTFS; %1 utilitza %2 - Please choose a different location. %1 is a network drive. It doesn't support virtual files. - - - The Virtual filesystem feature is not supported on network drives - - OCC::VfsDownloadErrorDialog @@ -6144,12 +6130,12 @@ Server replied with error: %2 El servidor del compte %1 utilitza la versió %2, que ha quedat obsoleta. No s'ha provat l'ús d'aquest client amb versions del servidor obsoletes i és potencialment perillós. Continueu sota la vostra responsabilitat. - + 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. @@ -6225,23 +6211,23 @@ Server replied with error: %2 No s'ha configurat cap carpeta de sincronització - + %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. @@ -6687,7 +6673,7 @@ Server replied with error: %2 - + Sharing is not available for this folder @@ -7098,11 +7084,6 @@ Server replied with error: %2 downloading s'està baixant - - - Downloading - - uploading @@ -7110,7 +7091,7 @@ Server replied with error: %2 - Uploading + Downloading @@ -7120,7 +7101,7 @@ Server replied with error: %2 - Deleting + Uploading @@ -7129,8 +7110,8 @@ Server replied with error: %2 s'està movent - - Moving + + Deleting @@ -7140,7 +7121,7 @@ Server replied with error: %2 - Ignoring + Moving @@ -7148,18 +7129,23 @@ Server replied with error: %2 error error + + + Ignoring + + updating local metadata s'estan actualitzant les metadades locals - + Updating local metadata - + Updating local virtual files metadata @@ -7318,19 +7304,6 @@ Server replied with error: %2 Esborra el menú del missatge d'estat - - OCC::FormatWarningsWizardPage - - - <b>Warning:</b> %1 - <b>Avís:</b> %1 - - - - <b>Warning:</b> - <b>Avís:</b> - - OCC::AbstractPropagateRemoteDeleteEncrypted @@ -7344,6 +7317,19 @@ Server replied with error: %2 "% 1 no s'ha pogut desbloquejar la carpeta xifrada %2". + + OCC::FormatWarningsWizardPage + + + <b>Warning:</b> %1 + <b>Avís:</b> %1 + + + + <b>Warning:</b> + <b>Avís:</b> + + OCC::OAuth diff --git a/translations/client_cs.ts b/translations/client_cs.ts index c194978881918..5d8c8224e9511 100644 --- a/translations/client_cs.ts +++ b/translations/client_cs.ts @@ -35,7 +35,7 @@ Scroll to top - + Odrolovat nahoru @@ -172,13 +172,13 @@ - + Resume sync for all Pokračovat v synchronizaci u všeho - + Pause sync for all Pozastavit synchronizaci u všeho @@ -193,32 +193,32 @@ Přidat nový účet - + Settings Settings - + Exit Ukončit - + Current account avatar Stávající zástupný obrázek uživatele - + Current account status is online Stávající stav účtu je online - + Current account status is do not disturb Stávající stav účtu je nerušit - + Account switcher and settings menu Přepínání účtů a nabídka nastavení @@ -244,7 +244,7 @@ Discovering the certificates stored on your USB token - + Objevování certifikátů uložených na USB tokenu @@ -252,22 +252,22 @@ Token Encryption Key Chooser - + Volič šifrovacího klíče tokenu Available Keys for end-to-end Encryption: - + Klíče pro šifrování mezi koncovými body k dispozici: Choose - + Vybrat Cancel - + Storno @@ -307,17 +307,17 @@ FileProviderEvictionDialog - + Evict materialised files Vyzdvihnout materializované soubory - + Materialised items Materializované položky - + Reload Načíst znovu @@ -493,17 +493,17 @@ MainWindow - + Nextcloud desktop main dialog Hlavní dialog Nextcloud desktop - + Unified search results list Seznam výsledků sjednoceného vyhledávání - + New activities Nové aktivity @@ -554,13 +554,13 @@ Should an account import be attempted? Má se být pokoušeno o jejich naimportování? - + %1 accounts were detected from a legacy desktop client. Should the accounts be imported? Zjištěno %1 účtů ze starého klienta pro počítač. Chcete je naimportovat? - + 1 account was detected from a legacy desktop client. Should the account be imported? Zjištěn jeden účet ze starého klienta pro počítač. @@ -574,12 +574,12 @@ Chcete ho naimportovat? Import z dřívějšího - + Import Naimportovat - + Skip Přeskočit @@ -674,12 +674,12 @@ Chcete ho naimportovat? Šifrovat složku - + End-to-end Encryption Šifrování mezi koncovými body - + 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> Toto zašifruje vaši složku a veškeré soubory v ní. Soubory už nebudou přístupné bez vašeho mnemotechnického klíče. @@ -711,17 +711,17 @@ Chcete ho naimportovat? Varování - + Please wait for the folder to sync before trying to encrypt it. Vyčkejte na dokončení synchronizace složky a až pak se ji pokoušejte šifrovat. - + The folder has a minor sync problem. Encryption of this folder will be possible once it has synced successfully Složka má drobný problém se synchronizací. Její šifrování bude možné až po úspěšné synchronizaci - + The folder has a sync error. Encryption of this folder will be possible once it has synced successfully Vyskytla se chyba při synchronizaci složky. Její šifrování bude možné až po úspěšné synchronizaci @@ -977,7 +977,7 @@ Současně tato akce zruší jakoukoli právě probíhající synchronizaci.Bez připojení k %1 na %2. - + Unable to connect to %1. Nedaří se připojit k %1. @@ -987,7 +987,7 @@ Současně tato akce zruší jakoukoli právě probíhající synchronizaci.Chyba nastavení serveru: %1 na %2. - + You need to accept the terms of service Je třeba přijmout všeobecné podmínky @@ -999,7 +999,7 @@ Současně tato akce zruší jakoukoli právě probíhající synchronizaci. Migrate certificate to a new one - + Přestěhovat certifikát na nový @@ -1017,7 +1017,7 @@ Současně tato akce zruší jakoukoli právě probíhající synchronizaci.Tyto složky nebyly synchronizovány, protože jsou příliš velké, nebo se nacházejí na externích úložištích: - + There are folders that have grown in size beyond %1MB: %2 Jsou zde složky, jejichž velikost přesáhla %1MB: %2 @@ -1219,34 +1219,39 @@ Současně tato akce zruší jakoukoli právě probíhající synchronizaci.Pokračovat - + + Quit %1 + Ukončit %1 + + + %1 accounts number of accounts imported %1 účtů - + 1 account 1 účet - + %1 folders number of folders imported %1 složek - + 1 folder 1 složka - + Legacy import Import ze starého - + Imported %1 and %2 from a legacy desktop client. %3 number of accounts and folders imported. list of users. @@ -1263,11 +1268,6 @@ Současně tato akce zruší jakoukoli právě probíhající synchronizaci.There was an error while accessing the configuration file at %1. Please make sure the file can be accessed by your system account. Došlo k chybě při přístupu k souboru s nastaveními %1. Ověřte, že váš účet na systému má k souboru přístup. - - - Quit %1 - Ukončit %1 - OCC::AuthenticationDialog @@ -1527,22 +1527,22 @@ Současně tato akce zruší jakoukoli právě probíhající synchronizaci. PIN needed to login to token - + Pro přihlášení se k tokenu je zapotřebí PIN Enter Certificate USB Token PIN: - + Zadejte PIN k certifikátu na USB tokenu: Invalid PIN. Login failed - + Neplatný PIN. Přihlášení se nezdařilo Login to the token failed after providing the user PIN. It may be invalid or wrong. Please try again ! - + Přihlášení k tokenu se nezdařilo po zadání PIN kódu uživatele. Ten může být neplatný nebo chybný. Zkuste to znovu! @@ -1732,13 +1732,13 @@ Současně tato akce zruší jakoukoli právě probíhající synchronizaci.Chyba serveru: odpověď PROPFIND není ve formátu XML! - - + + Encrypted metadata setup error! Chyba nastavení šifrovaných metadat! - + Encrypted metadata setup error: initial signature from server is empty. Chyba nastavení šifrovaných metadat: počáteční signatura ze serveru je prázdná. @@ -2133,17 +2133,17 @@ Toto může být způsobeno problémem s OpenSSL knihovnami. Please choose a different location. The folder %1 doesn't exist. - + Zvolte jiné umístění. Složka %1 neexistuje. Please choose a different location. %1 isn't a valid folder. - + Zvolte jiné umístění. %1 není platnou složkou. Please choose a different location. %1 isn't a readable folder. - + Zvolte jiné umístění. %1 není čitelnou složkou. @@ -2293,29 +2293,29 @@ Pokud to byla pouze chyba a chcete si tyto soubory ponechat, budou ze serveru zn Ponechat soubory - + A folder has surpassed the set folder size limit of %1MB: %2. %3 Složka překročila nastavený limit velikosti %1MB: %2. %3 - + Keep syncing Synchronizovat - + Stop syncing Zastavit synchronizaci - + The folder %1 has surpassed the set folder size limit of %2MB. Složka %1 překročila nastavený limit velikosti %2MB. - + Would you like to stop syncing this folder? Chcete ji přestat synchronizovat? @@ -2343,12 +2343,12 @@ To znamená, že se může stávat, že synchronizační klient nebude místní %1 - + Virtual file download failed with code "%1", status "%2" and error message "%3" Stažení virtuálního souboru se nezdařilo s kódem „%1“, stav „%2“ a chybové hlášení „%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. @@ -2357,7 +2357,7 @@ Potvrďte, že chcete v těchto mazáních pokračovat. Případně je možné veškeré smazané soubory obnovit jejich nahráním ze složky „%1“ na 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. @@ -2366,22 +2366,22 @@ Potvrďte, že chcete v těchto mazáních pokračovat. Případně je možné veškeré smazané soubory obnovit jejich stažením si ze serveru. - + Remove all files? Odebrat veškeré soubory? - + Proceed with Deletion Pokračovat v mazání - + Restore Files to Server Obnovit soubory na server - + Restore Files from Server Obnovit soubory ze serveru @@ -2452,32 +2452,32 @@ Případně je možné veškeré smazané soubory obnovit jejich stažením si z Příprava na synchronizaci. - + Syncing %1 of %2 (A few seconds left) Synchronizuje se %1 z %2 (zbývá několik sekund) - + Syncing %1 of %2 (%3 left) Synchronizuje se %1 z %2 (zbývá %3) - + Syncing %1 of %2 Synchronizuje se %1 z %2 - + Syncing %1 (A few seconds left) Synchronizuje se %1 (zbývá několik sekund) - + Syncing %1 (%2 left) Synchronizuje se %1 (%2 zbývá) - + Syncing %1 Synchronizuje se %1 @@ -2521,16 +2521,6 @@ Případně je možné veškeré smazané soubory obnovit jejich stažením si z No valid folder selected! Nevybrána platná složka! - - - The folder %1 is used in a folder sync connection! - Složka %1 je použitá v připojení synchronizace složky! - - - - Please choose a different location. The selected folder isn't valid. - - The selected path does not exist! @@ -2541,62 +2531,67 @@ Případně je možné veškeré smazané soubory obnovit jejich stažením si z The selected path is not a folder! Vybraný popis umístění není složka! - - - - Please choose a different location. %1 is already being used as a sync folder. - - You have no permission to write to the selected folder! Nemáte oprávnění pro zápis do zvolené složky! + + + The local folder %1 already contains a folder used in a folder sync connection. Please pick another one! + Místní složka %1 už obsahuje podsložku použitou pro synchronizaci. Zvolte jinou! + + + + The local folder %1 is already contained in a folder used in a folder sync connection. Please pick another one! + Místní složka %1 už je obsažena ve složce, použité pro synchronizaci. Zvolte jinou! + + + + There is already a sync from the server to this local folder. Please pick another local folder! + Ze serveru se do tohoto umístění už synchronizuje. Zvolte jinou místní složku! + + + + Please choose a different location. The selected folder isn't valid. + Zvolte jiné umístění. Vybraná složka není platná. + + + + + Please choose a different location. %1 is already being used as a sync folder. + Zvolte jiné umístění. %1 už je používáno jako synchronizační složka. + Please choose a different location. The path %1 doesn't exist. - + Zvolte jiné umístění. Popis umístění %1 neexistuje. Please choose a different location. The path %1 isn't a folder. - + Zvolte jiné umístění. Popis umístění %1 není složka. Please choose a different location. You don't have enough permissions to write to %1. folder location - - - - - The local folder %1 already contains a folder used in a folder sync connection. Please pick another one! - Místní složka %1 už obsahuje podsložku použitou pro synchronizaci. Zvolte jinou! - - - - The local folder %1 is already contained in a folder used in a folder sync connection. Please pick another one! - Místní složka %1 už je obsažena ve složce, použité pro synchronizaci. Zvolte jinou! + Zvolte jiné umístění. Nemáte dostatečná oprávnění k zápisu do %1. Please choose a different location. %1 is already contained in a folder used as a sync folder. - - - - - There is already a sync from the server to this local folder. Please pick another local folder! - Ze serveru se do tohoto umístění už synchronizuje. Zvolte jinou místní složku! + Zvolte jiné umístění. %1 už je obsaženo ve složce, používané jako synchronizační. Please choose a different location. %1 is already being used as a sync folder for %2. folder location, server url - + Zvolte jiné umístění. %1 už je používáno jako synchronizační složka pro %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. @@ -2704,12 +2699,12 @@ Pro pokročilé uživatele: tento problém může souviset s vícero databázov Slučování změn - + Syncing local and remote changes Synchronizují se místní a vzdálené změny - + %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 … @@ -2727,7 +2722,7 @@ Pro pokročilé uživatele: tento problém může souviset s vícero databázov , - + Download %1/s Example text: "Download 24Kb/s" (%1 is replaced by 24Kb (translated)) Stahování %1/s @@ -2744,7 +2739,7 @@ Pro pokročilé uživatele: tento problém může souviset s vícero databázov ↓ %1/s - + Upload %1/s Example text: "Upload 24Kb/s" (%1 is replaced by 24Kb (translated)) Odesílání %1/s @@ -2795,12 +2790,12 @@ Pro pokročilé uživatele: tento problém může souviset s vícero databázov soubor %1 z %2 - + File %1 of %2 Soubor %1 z %2 - + About to start syncing Chystá se zahájení synchronizace @@ -2909,7 +2904,7 @@ Pro pokročilé uživatele: tento problém může souviset s vícero databázov Please choose a different location. %1 is already being synced to %2. - + Zvolte jiné umístění. %1 už je synchronizováno do %2. @@ -2954,7 +2949,7 @@ Pro pokročilé uživatele: tento problém může souviset s vícero databázov Virtual files are not supported at the selected location - + Ve vybraném umístění nejsou virtuální soubory podporovány @@ -3166,7 +3161,7 @@ Pro pokročilé uživatele: tento problém může souviset s vícero databázov Upozornění ze serveru, která vyžadují pozornost. - + Show chat notification dialogs. Zobrazovat dialogy notifikací chatu. @@ -3207,17 +3202,17 @@ Note that this selects only what pool upgrades are taken from, and that there ar Poznamenejme, že je možné přejít na novější verzi, ale není možné se vrátit ke starší. To znamená, že návrat z beta kanálu ke stabilnímu obvykle potrvá, protože se čeká, až bude nabídnuta stabilní verze klienta novější, než nainstalovaná vývojová verze. - + daily denní - + enterprise podnikové - + - beta: contains versions with new features that may not be tested thoroughly - daily: contains versions created daily only for testing and development @@ -3229,7 +3224,7 @@ Downgrading versions is not possible immediately: changing from beta to stable m Přechod na konzervativnější verze není možný: změna z beta na stable znamená vyčkat na novou stabilní verzi. - + - enterprise: contains stable versions for customers. Downgrading versions is not possible immediately: changing from stable to enterprise means waiting for the new enterprise version. @@ -3239,12 +3234,12 @@ Downgrading versions is not possible immediately: changing from stable to enterp Přechod na konzervativnější verze není možný: změna ze stable na enterprise znamená vyčkat na novou enterprise verzi. - + Changing update channel? Změnit kanál aktualizací? - + The channel determines which upgrades will be offered to install: - stable: contains tested versions considered reliable @@ -3940,7 +3935,7 @@ Poznamenejme, že použití jakékoli volby příkazového řádku má před tí Virtual files are not supported at the selected location - + Ve vybraném umístění nejsou virtuální soubory podporovány @@ -4297,30 +4292,30 @@ Toto je nový, experimentální režim. Pokud se jej rozhodnete používat, pros Název souboru je na tomto souborovém systému rezervovaným názvem (nelze ho použít). - + Folder name of folder entity to use when warning about invalid name Složka - + File name of folder entity to use when warning about invalid name Soubor - + %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 Název %1 obsahující znak „%2“ není na tomto souborovém systému podporován. - + %1 name contains at least one invalid character Název %1 obsahuje přinejmenším jeden neplatný znak - + %1 name is a reserved name on this file system. Název %S je na tomto souborovém systému rezervovaným názvem (nelze ho použít). @@ -4375,22 +4370,22 @@ Toto je nový, experimentální režim. Pokud se jej rozhodnete používat, pros Takový název souboru je na serveru zařazen na seznam nepřípustných. - + Reason: the entire filename is forbidden. Důvod: celý název souboru není povolený. - + Reason: the filename has a forbidden base name (filename start). Důvod: název souboru má nepovolený základ (začátek názvu souboru). - + Reason: the file has a forbidden extension (.%1). Důvod: soubor má nepovolenou přípon (.%1). - + Reason: the filename contains a forbidden character (%1). Důvod: název souboru obsahuje nepovolený znak (%1). @@ -4425,7 +4420,7 @@ Toto je nový, experimentální režim. Pokud se jej rozhodnete používat, pros Není možné provést synchronizaci z důvodu neplatného času změny - + Could not upload file, because it is open in "%1". Nepodařilo se nahrát soubor, protože je otevřený v „%1“. @@ -4452,7 +4447,7 @@ Toto je nový, experimentální režim. Pokud se jej rozhodnete používat, pros Cannot modify encrypted item because the selected certificate is not valid. - + Není možné upravit šifrovanou položku, protože vybraný certifikát není platný. @@ -4508,18 +4503,18 @@ Toto je nový, experimentální režim. Pokud se jej rozhodnete používat, pros Chyba při aktualizaci metadat z důvodu neplatného času změny - - - - - - + + + + + + The folder %1 cannot be made read-only: %2 Složka %1 nemůže být učiněna pouze pro čtení: %2 - - + + unknown exception neznámá výjimka @@ -4693,12 +4688,6 @@ Toto je nový, experimentální režim. Pokud se jej rozhodnete používat, pros File %1 downloaded but it resulted in a local file name clash! Soubor %1 stažen, ale mělo za následek kolizi stejných názvů lišících se jen velikostí písmen se souborem na stroji! - - - - Could not get file %1 from local DB - Nepodařilo se získat soubor %1 z lokální databáze - @@ -4706,6 +4695,13 @@ Toto je nový, experimentální režim. Pokud se jej rozhodnete používat, pros could not get file %1 from local DB nepodařilo se získat soubor %1 z lokální databáze + + + + + Could not get file %1 from local DB + Nepodařilo se získat soubor %1 z lokální databáze + @@ -4806,16 +4802,16 @@ Toto je nový, experimentální režim. Pokud se jej rozhodnete používat, pros Wrong HTTP code returned by server. Expected 201, but received "%1 %2". Serverem vrácen neplatný HTTP kód. Očekáván 201, ale obdržen „%1 %2“. - - - Could not get file %1 from local DB - Nepodařilo se získat soubor %1 z lokální databáze - could not get file %1 from local DB nepodařilo se získat soubor %1 z místní databáze + + + Could not get file %1 from local DB + Nepodařilo se získat soubor %1 z lokální databáze + Could not delete file record %1 from local DB @@ -5064,7 +5060,7 @@ Toto je nový, experimentální režim. Pokud se jej rozhodnete používat, pros OCC::ShareManager - + Error Chyba @@ -5072,17 +5068,17 @@ Toto je nový, experimentální režim. Pokud se jej rozhodnete používat, pros OCC::ShareModel - + %1 days %1 dnů - + 1 day 1 den - + Today Dnes @@ -5112,7 +5108,7 @@ Toto je nový, experimentální režim. Pokud se jej rozhodnete používat, pros Bezpečný příjem souboru - + Could not find local folder for %1 Nepodařilo se najít místní složku pro %1 @@ -5235,11 +5231,6 @@ Server odpověděl chybou: %2 Resharing this folder is not allowed Sdílení této složky dál dalším není umožněno - - - Copy internal link - Zkopírovat interní odkaz - Copy secure file drop link @@ -5251,6 +5242,11 @@ Server odpověděl chybou: %2 Copy public link Zkopírovat veřejný odkaz + + + Copy internal link + Zkopírovat interní odkaz + Copy secure filedrop link @@ -5282,16 +5278,16 @@ Server odpověděl chybou: %2 remaining time before lock expires Platnost skončí za %1 minutuPlatnost skončí za %1 minutyPlatnost skončí za %1 minutPlatnost skončí za %1 minuty - - - Open in browser - Otevřít v prohlížeči - Edit Upravit + + + Open in browser + Otevřít v prohlížeči + Resolve conflict … @@ -5824,10 +5820,10 @@ Server odpověděl chybou: %2 - - - - + + + + Error updating metadata for a folder %1 Chyba při aktualizaci metadat pro složku %1 @@ -5847,7 +5843,7 @@ Server odpověděl chybou: %2 Nepodařilo se přidat nebo odebrat uživateli %1 přístup do složky %2 - + Failed to unlock a folder. Nepodařilo se odemknout složku. @@ -5857,15 +5853,15 @@ Server odpověděl chybou: %2 End-to-end certificate needs to be migrated to a new one - + Šifrování mezi koncovými body je třeba předělat na nový certifikát Trigger the migration - + Spustit stěhování - + %1 notifications %1 upozornění @@ -5881,17 +5877,17 @@ Server odpověděl chybou: %2 Vyřešit konflikt - + Rename file Přejmenovat soubor - + Open Nextcloud Assistant in browser Otevřít Nextcloud Asistent v prohlížeči - + Open Nextcloud Talk in browser Otevřít Nextcloud Talk v prohlížeči @@ -6021,32 +6017,22 @@ Server odpověděl chybou: %2 Please choose a different location. %1 is a drive. It doesn't support virtual files. - + Zvolte jiné umístění. %1 je disk. Nepodporuje virtuální soubory. - The Virtual filesystem feature does not support a drive as sync root - Funkce virtuální souborový systém nepodporuje celou jednotku coby kořen synchronizace + The Virtual filesystem feature requires a NTFS file system, %1 is using %2 + Funkce virtuální souborový systém vyžaduje souborový systém NTFS, %1 používá %2 Please choose a different location. %1 isn't a NTFS file system. It doesn't support virtual files. - - - - - The Virtual filesystem feature requires a NTFS file system, %1 is using %2 - Funkce virtuální souborový systém vyžaduje souborový systém NTFS, %1 používá %2 + Zvolte jiné umístění. %1 se nenachází na souborovém systému NTFS. Nepodporuje virtuální soubory. Please choose a different location. %1 is a network drive. It doesn't support virtual files. - - - - - The Virtual filesystem feature is not supported on network drives - Funkce virtuální souborový systém není podporována na síťových jednotkách + Zvolte jiné umístění. %1 je síťový disk. Nepodporuje virtuální soubory. @@ -6187,12 +6173,12 @@ Server odpověděl chybou: %2 Server na účtu %1 používá nepodporovanou verzi %2. Používání tohoto klienta s nepodporovanými verzemi serveru není otestováno a může být nebezpečné. Pokračujte jen na vlastní nebezpečí. - + Terms of service Všeobecné podmínky - + 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. Váš %1 účet vyžaduje abyste přijali všeobecné podmínky služeb serveru, který využíváte. Budete přesměrování na %2, kde můžete potvrdit, že jste si je přečetli a souhlasíte s nimi. @@ -6268,23 +6254,23 @@ Server odpověděl chybou: %2 Nejsou nastavené žádné složky pro synchronizaci - + %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 pro %1: Probíhá synchronizace - + macOS VFS for %1: Last sync was successful. macOS VFS pro %1: Nejnovější synchronizace byla úspěšná. - + macOS VFS for %1: A problem was encountered. macOS VFS pro %1: Narazilo se na problém. @@ -6730,7 +6716,7 @@ Server odpověděl chybou: %2 Hledat uživatele nebo skupiny… - + Sharing is not available for this folder Sdílení není v této složce k dispozici @@ -7128,7 +7114,7 @@ Server odpověděl chybou: %2 Updated end-to-end encryption metadata - + Zaktualizována metadata šifrování mezi koncovými body @@ -7141,11 +7127,6 @@ Server odpověděl chybou: %2 downloading stahování - - - Downloading - Stahování - uploading @@ -7153,8 +7134,8 @@ Server odpověděl chybou: %2 - Uploading - Nahrávání + Downloading + Stahování @@ -7163,8 +7144,8 @@ Server odpověděl chybou: %2 - Deleting - Mazání + Uploading + Nahrávání @@ -7172,9 +7153,9 @@ Server odpověděl chybou: %2 přesouvání - - Moving - Přesouvání + + Deleting + Mazání @@ -7183,33 +7164,38 @@ Server odpověděl chybou: %2 - Ignoring - Ingorování + Moving + Přesouvání error chyba + + + Ignoring + Ingorování + updating local metadata aktualizují se místní metadata - + Updating local metadata Aktualizace místních metadat - + Updating local virtual files metadata Aktualizace místních metadat virtuálních souborů Updating end-to-end encryption metadata - + Aktualizují se metadata šifrování mezi koncovými body @@ -7361,19 +7347,6 @@ Server odpověděl chybou: %2 Vyčistit nabídku se stavovými zprávami - - OCC::FormatWarningsWizardPage - - - <b>Warning:</b> %1 - <b>Varování:</b> %1 - - - - <b>Warning:</b> - <b>Varování:</b> - - OCC::AbstractPropagateRemoteDeleteEncrypted @@ -7387,6 +7360,19 @@ Server odpověděl chybou: %2 „%1 se nepodařilo odemknout zašifrovanou složku %2“. + + OCC::FormatWarningsWizardPage + + + <b>Warning:</b> %1 + <b>Varování:</b> %1 + + + + <b>Warning:</b> + <b>Varování:</b> + + OCC::OAuth diff --git a/translations/client_da.ts b/translations/client_da.ts index 0b503d8c7e468..9aa62cec7b3f4 100644 --- a/translations/client_da.ts +++ b/translations/client_da.ts @@ -35,7 +35,7 @@ Scroll to top - Scroll til toppen + Rul til toppen @@ -172,13 +172,13 @@ - + Resume sync for all - + Pause sync for all @@ -193,32 +193,32 @@ Tilføj ny konto - + Settings Indstillinger - + Exit Afslut - + Current account avatar - + Current account status is online - + Current account status is do not disturb - + Account switcher and settings menu @@ -252,7 +252,7 @@ Token Encryption Key Chooser - Tokenkrypteringsnøglevælger + Vælger til tokenkrypteringsnøgle @@ -307,17 +307,17 @@ FileProviderEvictionDialog - + Evict materialised files Smid materialiserede filer ud - + Materialised items Materialiserede elementer - + Reload Genindlæs @@ -493,17 +493,17 @@ MainWindow - + Nextcloud desktop main dialog Nextcloud-skrivebordets hoveddialog - + Unified search results list Samlet søgeresultatliste - + New activities Nye aktiviteter @@ -554,14 +554,14 @@ Should an account import be attempted? Skal en kontoimport forsøges? - + %1 accounts were detected from a legacy desktop client. Should the accounts be imported? %1 konti blev fundet fra en ældre desktop-klient. Skal regnskabet importeres? - + 1 account was detected from a legacy desktop client. Should the account be imported? 1 konto blev fundet fra en ældre desktop-klient. @@ -575,12 +575,12 @@ Skal kontoen importeres? Legacy import - + Import Importer - + Skip Spring over @@ -675,12 +675,12 @@ Skal kontoen importeres? Krypter mappe - + End-to-end Encryption End-to-end Kryptering - + 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> @@ -711,17 +711,17 @@ Skal kontoen importeres? Advarsel - + Please wait for the folder to sync before trying to encrypt it. Vent venligst på at mappen synkroniseres, før du prøver at kryptere den. - + The folder has a minor sync problem. Encryption of this folder will be possible once it has synced successfully Mappen har et mindre synkroniseringsproblem. Kryptering af denne mappe vil være mulig, når den er synkroniseret - + The folder has a sync error. Encryption of this folder will be possible once it has synced successfully Mappen har en synkroniseringsfejl. Kryptering af denne mappe vil være mulig, når den er synkroniseret @@ -977,7 +977,7 @@ Denne handling vil annullere alle i øjeblikket kørende synkroniseringer.Ingen forbindelse til %1 hos %2. - + Unable to connect to %1. Kan ikke oprette forbindelse til %1. @@ -987,7 +987,7 @@ Denne handling vil annullere alle i øjeblikket kørende synkroniseringer.Serverkonfigurationsfejl: %1 på %2. - + You need to accept the terms of service @@ -1017,7 +1017,7 @@ Denne handling vil annullere alle i øjeblikket kørende synkroniseringer.Der er mapper som ikke blev synkroniseret fordi de er for store eller eksterne lagre: - + There are folders that have grown in size beyond %1MB: %2 @@ -1219,34 +1219,39 @@ Denne handling vil annullere alle i øjeblikket kørende synkroniseringer.Fortsæt - + + Quit %1 + Afslut %1 + + + %1 accounts number of accounts imported %1 konti - + 1 account 1 konto - + %1 folders number of folders imported %1 mapper - + 1 folder 1 mappe - + Legacy import Bagudkompatibel import - + Imported %1 and %2 from a legacy desktop client. %3 number of accounts and folders imported. list of users. @@ -1263,11 +1268,6 @@ Denne handling vil annullere alle i øjeblikket kørende synkroniseringer.There was an error while accessing the configuration file at %1. Please make sure the file can be accessed by your system account. - - - Quit %1 - Afslut %1 - OCC::AuthenticationDialog @@ -1527,7 +1527,7 @@ Denne handling vil annullere alle i øjeblikket kørende synkroniseringer. PIN needed to login to token - PIN-kode er nødvendig for at logge ind på token + PIN-kode er nødvendig for at logge på token @@ -1542,7 +1542,7 @@ Denne handling vil annullere alle i øjeblikket kørende synkroniseringer. Login to the token failed after providing the user PIN. It may be invalid or wrong. Please try again ! - Login på tokenet mislykkedes efter at have angivet bruger-PIN. Det kan være ugyldigt eller forkert. Prøv venligst igen! + Login på tokenet mislykkedes efter at have angivet bruger PIN. Det kan være ugyldigt eller forkert. Prøv venligst igen! @@ -1730,13 +1730,13 @@ Denne handling vil annullere alle i øjeblikket kørende synkroniseringer. - - + + Encrypted metadata setup error! - + Encrypted metadata setup error: initial signature from server is empty. @@ -2287,28 +2287,28 @@ If this was an accident and you decide to keep your files, they will be re-synce Behold filer - + 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? @@ -2336,41 +2336,41 @@ Dette betyder at synkroniseringsklienten muligvis ikke sender lokale ændringer %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. 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? Slet alle filer? - + Proceed with Deletion - + Restore Files to Server - + Restore Files from Server @@ -2441,32 +2441,32 @@ Alternatively, you can restore all deleted files by downloading them from the se Forbereder synkronisering - + Syncing %1 of %2 (A few seconds left) Synkroniserer %1 af %2 (et par sekunder tilbage) - + Syncing %1 of %2 (%3 left) Synkroniserer %1 af %2 (%3 tilbage) - + Syncing %1 of %2 Synkroniserer %1 af %2 - + Syncing %1 (A few seconds left) Synkroniserer %1 (et par sekunder tilbage) - + Syncing %1 (%2 left) Synkroniserer %1 (%2 tilbage) - + Syncing %1 Synkroniserer %1 @@ -2510,16 +2510,6 @@ Alternatively, you can restore all deleted files by downloading them from the se No valid folder selected! Ingen gyldig mappe valgt! - - - The folder %1 is used in a folder sync connection! - - - - - Please choose a different location. The selected folder isn't valid. - - The selected path does not exist! @@ -2530,17 +2520,37 @@ Alternatively, you can restore all deleted files by downloading them from the se The selected path is not a folder! Den valgte sti er ikke en mappe! + + + You have no permission to write to the selected folder! + Du har ikke tilladelse til at skrive til denne mappe. + + + + The local folder %1 already contains a folder used in a folder sync connection. Please pick another one! + Den lokale mappe %1 indeholder allerede en mappe opsat som sync forbindelse. Vælg venligst en anden! + + + + The local folder %1 is already contained in a folder used in a folder sync connection. Please pick another one! + Den lokale mappe %1 er allerede indeholdt i en mappe opsat som sync forbindelse. Vælg venligst en anden! + + + + There is already a sync from the server to this local folder. Please pick another local folder! + Der er allerede sync fra serveren til denne lokale mappe. Vælg venligst en anden mappe! + + + + 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. - - - You have no permission to write to the selected folder! - Du har ikke tilladelse til at skrive til denne mappe. - Please choose a different location. The path %1 doesn't exist. @@ -2558,26 +2568,11 @@ Alternatively, you can restore all deleted files by downloading them from the se folder location - - - The local folder %1 already contains a folder used in a folder sync connection. Please pick another one! - Den lokale mappe %1 indeholder allerede en mappe opsat som sync forbindelse. Vælg venligst en anden! - - - - The local folder %1 is already contained in a folder used in a folder sync connection. Please pick another one! - Den lokale mappe %1 er allerede indeholdt i en mappe opsat som sync forbindelse. Vælg venligst en anden! - Please choose a different location. %1 is already contained in a folder used as a sync folder. - - - There is already a sync from the server to this local folder. Please pick another local folder! - Der er allerede sync fra serveren til denne lokale mappe. Vælg venligst en anden mappe! - Please choose a different location. %1 is already being used as a sync folder for %2. @@ -2585,7 +2580,7 @@ Alternatively, you can restore all deleted files by downloading them from the se - + 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. @@ -2690,12 +2685,12 @@ For advanced users: this issue might be related to multiple sync database files Forener ændringer - + 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'" @@ -2713,7 +2708,7 @@ For advanced users: this issue might be related to multiple sync database files , - + Download %1/s Example text: "Download 24Kb/s" (%1 is replaced by 24Kb (translated)) @@ -2730,7 +2725,7 @@ For advanced users: this issue might be related to multiple sync database files ↓ %1/s - + Upload %1/s Example text: "Upload 24Kb/s" (%1 is replaced by 24Kb (translated)) @@ -2781,12 +2776,12 @@ For advanced users: this issue might be related to multiple sync database files fil %1 af %2 - + File %1 of %2 - + About to start syncing @@ -3152,7 +3147,7 @@ For advanced users: this issue might be related to multiple sync database files Server notifikationer der kræver opmærksomhed. - + Show chat notification dialogs. @@ -3191,17 +3186,17 @@ Note that this selects only what pool upgrades are taken from, and that there ar - + daily - + enterprise - + - beta: contains versions with new features that may not be tested thoroughly - daily: contains versions created daily only for testing and development @@ -3210,7 +3205,7 @@ 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. @@ -3218,12 +3213,12 @@ 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 @@ -4265,30 +4260,30 @@ This is a new, experimental mode. If you decide to use it, please report any iss - + 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. @@ -4343,22 +4338,22 @@ This is a new, experimental mode. If you decide to use it, please report any iss - + 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). @@ -4393,7 +4388,7 @@ This is a new, experimental mode. If you decide to use it, please report any iss - + Could not upload file, because it is open in "%1". @@ -4476,18 +4471,18 @@ This is a new, experimental mode. If you decide to use it, please report any iss - - - - - - + + + + + + The folder %1 cannot be made read-only: %2 - - + + unknown exception @@ -4661,12 +4656,6 @@ This is a new, experimental mode. If you decide to use it, please report any iss File %1 downloaded but it resulted in a local file name clash! - - - - Could not get file %1 from local DB - - @@ -4674,6 +4663,13 @@ This is a new, experimental mode. If you decide to use it, please report any iss could not get file %1 from local DB + + + + + Could not get file %1 from local DB + + @@ -4775,13 +4771,13 @@ This is a new, experimental mode. If you decide to use it, please report any iss Forkert HTTP kode returneret fra server. Forventet 201, men modtog "%1 %2". - - Could not get file %1 from local DB + + could not get file %1 from local DB - - could not get file %1 from local DB + + Could not get file %1 from local DB @@ -5032,7 +5028,7 @@ This is a new, experimental mode. If you decide to use it, please report any iss OCC::ShareManager - + Error @@ -5040,17 +5036,17 @@ This is a new, experimental mode. If you decide to use it, please report any iss OCC::ShareModel - + %1 days - + 1 day - + Today @@ -5080,7 +5076,7 @@ This is a new, experimental mode. If you decide to use it, please report any iss - + Could not find local folder for %1 @@ -5201,11 +5197,6 @@ Server replied with error: %2 Resharing this folder is not allowed - - - Copy internal link - Kopier internt link - Copy secure file drop link @@ -5217,6 +5208,11 @@ Server replied with error: %2 Copy public link Kopier offentligt link + + + Copy internal link + Kopier internt link + Copy secure filedrop link @@ -5248,16 +5244,16 @@ Server replied with error: %2 remaining time before lock expires - - - Open in browser - Åbn i browser - Edit Rediger + + + Open in browser + Åbn i browser + Resolve conflict … @@ -5790,10 +5786,10 @@ Server replied with error: %2 - - - - + + + + Error updating metadata for a folder %1 @@ -5813,7 +5809,7 @@ Server replied with error: %2 - + Failed to unlock a folder. @@ -5823,7 +5819,7 @@ Server replied with error: %2 End-to-end certificate needs to be migrated to a new one - End-to-end-certifikat skal migreres til et nyt + End-to-end certifikat skal migreres til et nyt @@ -5831,7 +5827,7 @@ Server replied with error: %2 Start migreringen - + %1 notifications @@ -5847,17 +5843,17 @@ Server replied with error: %2 - + Rename file - + Open Nextcloud Assistant in browser - + Open Nextcloud Talk in browser @@ -5991,7 +5987,7 @@ Server replied with error: %2 - The Virtual filesystem feature does not support a drive as sync root + The Virtual filesystem feature requires a NTFS file system, %1 is using %2 @@ -5999,21 +5995,11 @@ Server replied with error: %2 Please choose a different location. %1 isn't a NTFS file system. It doesn't support virtual files. - - - The Virtual filesystem feature requires a NTFS file system, %1 is using %2 - - Please choose a different location. %1 is a network drive. It doesn't support virtual files. - - - The Virtual filesystem feature is not supported on network drives - - OCC::VfsDownloadErrorDialog @@ -6153,12 +6139,12 @@ Server replied with error: %2 Serveren for konto %1 kører den ikke-supporterede version %2. Brug af denne klient med en serverversion, der ikke har support er ikke testet og kan muligvis føre til alvorlige problemer. Fortsæt på egen risiko. - + 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. @@ -6234,23 +6220,23 @@ Server replied with error: %2 Ingen synkroniseringsmapper konfigureret - + %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. @@ -6696,7 +6682,7 @@ Server replied with error: %2 - + Sharing is not available for this folder @@ -7107,11 +7093,6 @@ Server replied with error: %2 downloading downloader - - - Downloading - - uploading @@ -7119,7 +7100,7 @@ Server replied with error: %2 - Uploading + Downloading @@ -7129,7 +7110,7 @@ Server replied with error: %2 - Deleting + Uploading @@ -7138,8 +7119,8 @@ Server replied with error: %2 flytter - - Moving + + Deleting @@ -7149,7 +7130,7 @@ Server replied with error: %2 - Ignoring + Moving @@ -7157,18 +7138,23 @@ Server replied with error: %2 error fejl + + + Ignoring + + updating local metadata opdaterer lokale metadata - + Updating local metadata - + Updating local virtual files metadata @@ -7327,19 +7313,6 @@ Server replied with error: %2 Ryd statusbesked menu - - OCC::FormatWarningsWizardPage - - - <b>Warning:</b> %1 - <b>Advarsel:</b> %1 - - - - <b>Warning:</b> - <b>Advarsel:</b> - - OCC::AbstractPropagateRemoteDeleteEncrypted @@ -7353,6 +7326,19 @@ Server replied with error: %2 "%1 Det lykkedes ikke at låse den krypterede mappe op %2". + + OCC::FormatWarningsWizardPage + + + <b>Warning:</b> %1 + <b>Advarsel:</b> %1 + + + + <b>Warning:</b> + <b>Advarsel:</b> + + OCC::OAuth diff --git a/translations/client_de.ts b/translations/client_de.ts index 7c44c78f74e43..845423bccd8ba 100644 --- a/translations/client_de.ts +++ b/translations/client_de.ts @@ -172,13 +172,13 @@ - + Resume sync for all Synchronisierung für alle fortsetzen - + Pause sync for all Synchronisierung für alle pausieren @@ -193,32 +193,32 @@ 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ü @@ -307,17 +307,17 @@ FileProviderEvictionDialog - + Evict materialised files Materialisierte Dateien löschen - + Materialised items Materialisierte Elemente - + Reload Neu laden @@ -493,17 +493,17 @@ MainWindow - + Nextcloud desktop main dialog Nextcloud Desktop-Hauptdialog - + Unified search results list Einheitliche Suchergebnisliste - + New activities Neue Aktivitäten @@ -554,14 +554,14 @@ Should an account import be attempted? Soll ein Kontoimport versucht 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? - + 1 account was detected from a legacy desktop client. Should the account be imported? 1 Konto wurde von einem älteren Desktop-Client erkannt. @@ -575,12 +575,12 @@ Soll das Konto importiert werden? Import früherer Konfiguration - + Import Importieren - + Skip Überspringen @@ -675,12 +675,12 @@ Soll das Konto importiert werden? 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. @@ -712,17 +712,17 @@ Soll das Konto importiert werden? 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 erfolgreich 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 erfolgreich synchronisiert wurde @@ -977,7 +977,7 @@ Diese Aktion bricht jede derzeit laufende Synchronisierung ab. Keine Verbindung zu %1 auf %2 - + Unable to connect to %1. Verbindung zu %1 kann nicht hergestellt werden. @@ -987,7 +987,7 @@ Diese Aktion bricht jede derzeit laufende Synchronisierung ab. Konfigurationsfehler des Servers: %1 auf %2. - + You need to accept the terms of service Sie müssen die Nutzungsbedingungen akzeptieren @@ -1017,7 +1017,7 @@ Diese Aktion bricht jede derzeit laufende Synchronisierung ab. Es gibt Ordner, die nicht synchronisiert werden konnten, da sie zu groß oder externe Speicher sind: - + There are folders that have grown in size beyond %1MB: %2 Es gibt Ordner, deren Größe über %1 MB hinaus gewachsen ist: %2 @@ -1219,34 +1219,39 @@ Diese Aktion bricht jede derzeit laufende Synchronisierung ab. Fortsetzen - + + Quit %1 + Beende %1 + + + %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. @@ -1263,11 +1268,6 @@ Diese Aktion bricht jede derzeit laufende Synchronisierung ab. 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. - - - Quit %1 - Beende %1 - OCC::AuthenticationDialog @@ -1732,13 +1732,13 @@ Diese Aktion bricht jede derzeit laufende Synchronisierung ab. 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. @@ -2133,17 +2133,17 @@ Dies kann ein Problem mit Ihren OpenSSL-Bibliotheken sein. 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. @@ -2294,29 +2294,29 @@ Falls dies ein Missgeschick war und Sie sich zum Behalten der Dateien entscheide Dateien behalten - + 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? @@ -2344,12 +2344,12 @@ 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. Alternatively, you can restore all deleted files by uploading from '%1' folder to the server. @@ -2358,7 +2358,7 @@ 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. Alternatively, you can restore all deleted files by downloading them from the server. @@ -2367,22 +2367,22 @@ 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 @@ -2453,32 +2453,32 @@ Alternativ können Sie auch alle gelöschten Dateien wiederherstellen, indem Sie 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 @@ -2522,16 +2522,6 @@ Alternativ können Sie auch alle gelöschten Dateien wiederherstellen, indem Sie No valid folder selected! Kein gültiger Ordner gewählt! - - - The folder %1 is used in a folder sync connection! - Der Ordner %1 wird in einer Ordner-Synchronisationsverbindung verwendet! - - - - Please choose a different location. The selected folder isn't valid. - - The selected path does not exist! @@ -2542,62 +2532,67 @@ Alternativ können Sie auch alle gelöschten Dateien wiederherstellen, indem Sie The selected path is not a folder! Der gewählte Pfad ist kein Ordner! - - - - Please choose a different location. %1 is already being used as a sync folder. - - You have no permission to write to the selected folder! Sie haben keine Schreibberechtigung für den ausgewählten Ordner! + + + The local folder %1 already contains a folder used in a folder sync connection. Please pick another one! + Der lokale Ordner %1 liegt innerhalb eines synchronisierten Ordners. Bitte wählen Sie einen anderen aus! + + + + The local folder %1 is already contained in a folder used in a folder sync connection. Please pick another one! + Der lokale Ordner %1 liegt in einem Ordner, der bereits synchronisiert wird. Bitte wählen Sie einen anderen aus! + + + + There is already a sync from the server to this local folder. Please pick another local folder! + Es existiert bereits eine Synchronisierung vom Server zu diesem lokalen Ordner. Bitte wählen Sie einen anderen lokalen 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. %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 - - - - - The local folder %1 already contains a folder used in a folder sync connection. Please pick another one! - Der lokale Ordner %1 liegt innerhalb eines synchronisierten Ordners. Bitte wählen Sie einen anderen aus! - - - - The local folder %1 is already contained in a folder used in a folder sync connection. Please pick another one! - Der lokale Ordner %1 liegt in einem Ordner, der bereits synchronisiert wird. Bitte wählen Sie einen anderen aus! + 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. - - - - - There is already a sync from the server to this local folder. Please pick another local folder! - Es existiert bereits eine Synchronisierung vom Server zu diesem lokalen Ordner. Bitte wählen Sie einen anderen lokalen Ordner! + 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. @@ -2705,12 +2700,12 @@ Für fortgeschrittene Benutzer: Dieses Problem kann damit zusammenhängen, dass Änderungen zusammenführen - + 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'" %1 %2 … @@ -2728,7 +2723,7 @@ Für fortgeschrittene Benutzer: Dieses Problem kann damit zusammenhängen, dass , - + Download %1/s Example text: "Download 24Kb/s" (%1 is replaced by 24Kb (translated)) %1/s herunterladen @@ -2745,7 +2740,7 @@ Für fortgeschrittene Benutzer: Dieses Problem kann damit zusammenhängen, dass ↓ %1/s - + Upload %1/s Example text: "Upload 24Kb/s" (%1 is replaced by 24Kb (translated)) %1/s hochladen @@ -2796,12 +2791,12 @@ Für fortgeschrittene Benutzer: Dieses Problem kann damit zusammenhängen, dass Datei %1 von %2 - + File %1 of %2 Datei %1 von %2 - + About to start syncing Die Synchronisierung beginnt @@ -2910,7 +2905,7 @@ 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. @@ -2955,7 +2950,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 @@ -3167,7 +3162,7 @@ Für fortgeschrittene Benutzer: Dieses Problem kann damit zusammenhängen, dass Server-Benachrichtigungen, die Aufmerksamkeit erfordern. - + Show chat notification dialogs. Dialog zu Chatbenachrichtigungen anzeigen @@ -3208,17 +3203,17 @@ Note that this selects only what pool upgrades are taken from, and that there ar Beachten Sie bitte, dass hierdurch nur ausgewählt wird, aus welchem Pool Upgrades heruntergeladen werden und dass Downgrades nicht möglich sind. Die Rückkehr vom Beta- zum stabilen Kanal kann daher zumeist nicht sofort erfolgen, sondern es muss auf eine neue stabile Version gewartet werden, die neuer als die aktuell installierte Beta ist. - + 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 @@ -3230,7 +3225,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. @@ -3240,12 +3235,12 @@ 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 @@ -3940,7 +3935,7 @@ Beachten Sie, dass die Verwendung von Befehlszeilenoptionen für die Protokollie Virtual files are not supported at the selected location - + Virtuelle Dateien werden an dem ausgewählten Speicherort nicht unterstützt @@ -4297,30 +4292,30 @@ Dies ist ein neuer, experimenteller Modus. Wenn Sie sich entscheiden, ihn zu ver Der Dateiname ist ein reservierter Name für dieses Dateisystem. - + 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. - + %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. @@ -4375,22 +4370,22 @@ Dies ist ein neuer, experimenteller Modus. Wenn Sie sich entscheiden, ihn zu ver 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). @@ -4425,7 +4420,7 @@ Dies ist ein neuer, experimenteller Modus. Wenn Sie sich entscheiden, ihn zu ver Synchronisierung wegen ungültiger Änderungszeit nicht möglich - + Could not upload file, because it is open in "%1". Datei konnte nicht hochgeladen werden, da sie in "%1" geöffnet ist. @@ -4508,18 +4503,18 @@ Dies ist ein neuer, experimenteller Modus. Wenn Sie sich entscheiden, ihn zu ver 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 @@ -4693,12 +4688,6 @@ Dies ist ein neuer, experimenteller Modus. Wenn Sie sich entscheiden, ihn zu ver 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 - @@ -4706,6 +4695,13 @@ Dies ist ein neuer, experimenteller Modus. Wenn Sie sich entscheiden, ihn zu ver could not get file %1 from local DB Datei %1 konnte nicht aus der lokalen Datenbank abgerufen werden + + + + + Could not get file %1 from local DB + Datei %1 konnte nicht aus der lokalen Datenbank abgerufen werden + @@ -4807,13 +4803,13 @@ Dies ist ein neuer, experimenteller Modus. Wenn Sie sich entscheiden, ihn zu ver 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 + + could not get file %1 from local DB Datei %1 konnte nicht aus der lokalen Datenbank abgerufen werden - - could not get file %1 from local DB + + Could not get file %1 from local DB Datei %1 konnte nicht aus der lokalen Datenbank abgerufen werden @@ -5064,7 +5060,7 @@ Dies ist ein neuer, experimenteller Modus. Wenn Sie sich entscheiden, ihn zu ver OCC::ShareManager - + Error Fehler @@ -5072,17 +5068,17 @@ 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 @@ -5112,7 +5108,7 @@ Dies ist ein neuer, experimenteller Modus. Wenn Sie sich entscheiden, ihn zu ver Sichere Dateiablage - + Could not find local folder for %1 Lokaler Ordner für %1 nicht gefunden @@ -5235,11 +5231,6 @@ Server antwortete mit Fehler: %2 Resharing this folder is not allowed Weiterteilen dieses Ordners ist nicht erlaubt - - - Copy internal link - Internen Link kopieren - Copy secure file drop link @@ -5251,6 +5242,11 @@ Server antwortete mit Fehler: %2 Copy public link Öffentlichen Link kopieren + + + Copy internal link + Internen Link kopieren + Copy secure filedrop link @@ -5282,16 +5278,16 @@ Server antwortete mit Fehler: %2 remaining time before lock expires Läuft ab in %1 MinuteLäuft ab in %1 Minuten - - - Open in browser - Im Browser öffnen - Edit Bearbeiten + + + Open in browser + Im Browser öffnen + Resolve conflict … @@ -5824,10 +5820,10 @@ Server antwortete mit Fehler: %2 - - - - + + + + Error updating metadata for a folder %1 Fehler beim Aktualisieren der Metadaten für einen Ordner %1 @@ -5847,7 +5843,7 @@ Server antwortete mit Fehler: %2 Benutzer %1 konnte für den Zugriff auf Ordner %2 nicht hinzugefügt oder entfernt werden - + Failed to unlock a folder. Fehler beim Entsperren eines Ordners. @@ -5865,7 +5861,7 @@ Server antwortete mit Fehler: %2 Starten der Migration - + %1 notifications %1 Benachrichtigungen @@ -5881,17 +5877,17 @@ Server antwortete mit Fehler: %2 Konflikt lösen - + Rename file Datei umbenennen - + Open Nextcloud Assistant in browser Nextcloud-Assistent im Browser öffnen - + Open Nextcloud Talk in browser Nextcloud-Talk im Browser öffnen @@ -6021,32 +6017,22 @@ Server antwortete mit Fehler: %2 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. - The Virtual filesystem feature does not support a drive as sync root - Die Funktion "Virtuelles Dateisystem" unterstützt kein Laufwerk als Synchronisierungsstamm + The Virtual filesystem feature requires a NTFS file system, %1 is using %2 + Die Funktion "Virtuelles Dateisystem" erfordert ein NTFS-Dateisystem, %1 verwendet %2 Please choose a different location. %1 isn't a NTFS file system. It doesn't support virtual files. - - - - - The Virtual filesystem feature requires a NTFS file system, %1 is using %2 - Die Funktion "Virtuelles Dateisystem" erfordert ein NTFS-Dateisystem, %1 verwendet %2 + 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. - - - - - The Virtual filesystem feature is not supported on network drives - Die Funktion "Virtuelles Dateisystem" wird auf Netzwerklaufwerken nicht unterstützt + Bitte wählen Sie einen anderen Speicherort. %1 ist ein Netzlaufwerk. Es unterstützt keine virtuellen Dateien. @@ -6187,12 +6173,12 @@ Server antwortete mit Fehler: %2 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. @@ -6268,23 +6254,23 @@ Server antwortete mit Fehler: %2 Keine Ordner zur Synchronisierung konfiguriert - + %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. @@ -6730,7 +6716,7 @@ Server antwortete mit Fehler: %2 Suche nach Benutzern oder Gruppen… - + Sharing is not available for this folder Teilen ist für diesen Ordner nicht verfügbar @@ -7141,11 +7127,6 @@ Server antwortete mit Fehler: %2 downloading Lade herunter - - - Downloading - Lade herunter - uploading @@ -7153,8 +7134,8 @@ Server antwortete mit Fehler: %2 - Uploading - Lade hoch + Downloading + Lade herunter @@ -7163,8 +7144,8 @@ Server antwortete mit Fehler: %2 - Deleting - Lösche + Uploading + Lade hoch @@ -7172,9 +7153,9 @@ Server antwortete mit Fehler: %2 Verschiebe - - Moving - Verschiebe + + Deleting + Lösche @@ -7183,26 +7164,31 @@ Server antwortete mit Fehler: %2 - Ignoring - ignoriere + Moving + Verschiebe error Fehler + + + Ignoring + ignoriere + updating local metadata Aktualisiere lokale Metadaten - + Updating local metadata Aktualisiere lokale Metadaten - + Updating local virtual files metadata Aktualisiere Metadaten für lokale virtuelle Dateien @@ -7361,19 +7347,6 @@ Server antwortete mit Fehler: %2 Statusmeldungs-Menü löschen - - OCC::FormatWarningsWizardPage - - - <b>Warning:</b> %1 - <b>Warnung:</b> %1 - - - - <b>Warning:</b> - <b>Warnung:</b> - - OCC::AbstractPropagateRemoteDeleteEncrypted @@ -7387,6 +7360,19 @@ Server antwortete mit Fehler: %2 "%1 Der verschlüsselte Ordner %2 konnte nicht entsperrt werden". + + OCC::FormatWarningsWizardPage + + + <b>Warning:</b> %1 + <b>Warnung:</b> %1 + + + + <b>Warning:</b> + <b>Warnung:</b> + + OCC::OAuth diff --git a/translations/client_el.ts b/translations/client_el.ts index bec333ae70166..e1c8dcec8ff67 100644 --- a/translations/client_el.ts +++ b/translations/client_el.ts @@ -172,13 +172,13 @@ - + Resume sync for all - + Pause sync for all @@ -193,32 +193,32 @@ - + Settings - + Exit - + Current account avatar - + Current account status is online - + Current account status is do not disturb - + Account switcher and settings menu @@ -307,17 +307,17 @@ FileProviderEvictionDialog - + Evict materialised files - + Materialised items - + Reload @@ -493,17 +493,17 @@ MainWindow - + Nextcloud desktop main dialog - + Unified search results list - + New activities @@ -553,13 +553,13 @@ Should an account import be attempted? - + %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? @@ -572,12 +572,12 @@ Should the account be imported? - + Import - + Skip @@ -672,12 +672,12 @@ Should the account be imported? Κρυπτογράφηση φακέλου - + 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> @@ -708,17 +708,17 @@ Should the account be imported? Προειδοποίηση - + 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 @@ -969,7 +969,7 @@ This action will abort any currently running synchronization. Δεν υπάρχει σύνδεση με το %1 στο %2. - + Unable to connect to %1. @@ -979,7 +979,7 @@ This action will abort any currently running synchronization. Σφάλμα ρυθμίσεων διακομιστή: %1 σε %2. - + You need to accept the terms of service @@ -1009,7 +1009,7 @@ This action will abort any currently running synchronization. Υπάρχουν φάκελοι που δεν συγχρονίστηκαν επειδή είναι πολύ μεγάλοι ή αποθηκευτικοί χώροι: - + There are folders that have grown in size beyond %1MB: %2 @@ -1211,34 +1211,39 @@ This action will abort any currently running synchronization. Συνέχεια - + + Quit %1 + Κλείσιμο %1 + + + %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. @@ -1254,11 +1259,6 @@ This action will abort any currently running synchronization. There was an error while accessing the configuration file at %1. Please make sure the file can be accessed by your system account. - - - Quit %1 - Κλείσιμο %1 - OCC::AuthenticationDialog @@ -1723,13 +1723,13 @@ This action will abort any currently running synchronization. Σφάλμα διακομιστή: Η απάντηση PROPFIND δεν έχει μορφοποίηση XML! - - + + Encrypted metadata setup error! - + Encrypted metadata setup error: initial signature from server is empty. @@ -2285,28 +2285,28 @@ If this was an accident and you decide to keep your files, they will be re-synce Κράτησε τα αρχεία - + 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? @@ -2332,41 +2332,41 @@ 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 @@ -2437,32 +2437,32 @@ Alternatively, you can restore all deleted files by downloading them from the se Προετοιμασία για συγχρονισμό. - + 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 @@ -2506,16 +2506,6 @@ Alternatively, you can restore all deleted files by downloading them from the se No valid folder selected! Δεν επιλέχθηκε έγκυρος φάκελος! - - - The folder %1 is used in a folder sync connection! - - - - - Please choose a different location. The selected folder isn't valid. - - The selected path does not exist! @@ -2526,17 +2516,37 @@ Alternatively, you can restore all deleted files by downloading them from the se The selected path is not a folder! Η επιλεγμένη διαδρομή δεν είναι φάκελος! + + + You have no permission to write to the selected folder! + Δεν έχετε δικαιώματα εγγραφής στον επιλεγμένο φάκελο! + + + + The local folder %1 already contains a folder used in a folder sync connection. Please pick another one! + Ο τοπικός φάκελος %1 περιέχει ήδη ένα φάκελο που χρησιμοποιείται σε μια σύνδεση συγχρονισμού φακέλου. Παρακαλώ επιλέξτε άλλον! + + + + The local folder %1 is already contained in a folder used in a folder sync connection. Please pick another one! + Ο τοπικός φάκελος %1 περιέχεται ήδη σε φάκελο που χρησιμοποιείται σε μια σύνδεση συγχρονισμού. Παρακαλώ επιλέξτε άλλον! + + + + There is already a sync from the server to this local folder. Please pick another local folder! + Υπάρχει ήδη συγχρονισμός από το διακομιστή σε αυτόν τον τοπικό φάκελο. Επιλέξτε έναν άλλο τοπικό φάκελο! + + + + 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. - - - You have no permission to write to the selected folder! - Δεν έχετε δικαιώματα εγγραφής στον επιλεγμένο φάκελο! - Please choose a different location. The path %1 doesn't exist. @@ -2554,26 +2564,11 @@ Alternatively, you can restore all deleted files by downloading them from the se folder location - - - The local folder %1 already contains a folder used in a folder sync connection. Please pick another one! - Ο τοπικός φάκελος %1 περιέχει ήδη ένα φάκελο που χρησιμοποιείται σε μια σύνδεση συγχρονισμού φακέλου. Παρακαλώ επιλέξτε άλλον! - - - - The local folder %1 is already contained in a folder used in a folder sync connection. Please pick another one! - Ο τοπικός φάκελος %1 περιέχεται ήδη σε φάκελο που χρησιμοποιείται σε μια σύνδεση συγχρονισμού. Παρακαλώ επιλέξτε άλλον! - Please choose a different location. %1 is already contained in a folder used as a sync folder. - - - There is already a sync from the server to this local folder. Please pick another local folder! - Υπάρχει ήδη συγχρονισμός από το διακομιστή σε αυτόν τον τοπικό φάκελο. Επιλέξτε έναν άλλο τοπικό φάκελο! - Please choose a different location. %1 is already being used as a sync folder for %2. @@ -2581,7 +2576,7 @@ Alternatively, you can restore all deleted files by downloading them from the se - + 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. @@ -2686,12 +2681,12 @@ For advanced users: this issue might be related to multiple sync database files Συνδυασμός αλλαγών - + 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'" @@ -2709,7 +2704,7 @@ For advanced users: this issue might be related to multiple sync database files , - + Download %1/s Example text: "Download 24Kb/s" (%1 is replaced by 24Kb (translated)) @@ -2726,7 +2721,7 @@ For advanced users: this issue might be related to multiple sync database files ↓ %1/s - + Upload %1/s Example text: "Upload 24Kb/s" (%1 is replaced by 24Kb (translated)) @@ -2777,12 +2772,12 @@ For advanced users: this issue might be related to multiple sync database files αρχείο %1 από %2 - + File %1 of %2 - + About to start syncing @@ -3148,7 +3143,7 @@ For advanced users: this issue might be related to multiple sync database files Ειδοποιήσεις από τον διακομιστή που απαιτούν την προσοχή σας. - + Show chat notification dialogs. @@ -3188,17 +3183,17 @@ Note that this selects only what pool upgrades are taken from, and that there ar Λάβετε υπόψη ότι αυτό επιλέγει μόνο από τη δεξαμενήαπό την οποία προέρχονται οι αναβαθμίσεις της ομάδας και ότι δεν υπάρχουν υποβαθμίσεις: Επομένως, η επιστροφή από το κανάλι beta στο σταθερό κανάλι συνήθως δεν μπορεί να γίνει αμέσως και σημαίνει αναμονή για μια σταθερή έκδοση που είναι νεότερη από την τρέχουσα εγκατεστημένη έκδοση 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 @@ -3207,7 +3202,7 @@ 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. @@ -3215,12 +3210,12 @@ 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 @@ -4263,30 +4258,30 @@ This is a new, experimental mode. If you decide to use it, please report any iss Το όνομα αρχείου είναι ένα δεσμευμένο όνομα σε αυτό το σύστημα αρχείων. - + 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. @@ -4341,22 +4336,22 @@ This is a new, experimental mode. If you decide to use it, please report any iss Το όνομα αρχείου είναι στη μαύρη λίστα στον διακομιστή. - + 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). @@ -4391,7 +4386,7 @@ This is a new, experimental mode. If you decide to use it, please report any iss - + Could not upload file, because it is open in "%1". @@ -4474,18 +4469,18 @@ This is a new, experimental mode. If you decide to use it, please report any iss - - - - - - + + + + + + The folder %1 cannot be made read-only: %2 - - + + unknown exception @@ -4659,12 +4654,6 @@ This is a new, experimental mode. If you decide to use it, please report any iss File %1 downloaded but it resulted in a local file name clash! - - - - Could not get file %1 from local DB - - @@ -4672,6 +4661,13 @@ This is a new, experimental mode. If you decide to use it, please report any iss could not get file %1 from local DB + + + + + Could not get file %1 from local DB + + @@ -4773,13 +4769,13 @@ This is a new, experimental mode. If you decide to use it, please report any iss Ο διακομιστής επέστρεψε εσφαλμένο κωδικό HTTP. Αναμενόταν 201, αλλά ελήφθη "%1 %2". - - Could not get file %1 from local DB + + could not get file %1 from local DB - - could not get file %1 from local DB + + Could not get file %1 from local DB @@ -5030,7 +5026,7 @@ This is a new, experimental mode. If you decide to use it, please report any iss OCC::ShareManager - + Error @@ -5038,17 +5034,17 @@ This is a new, experimental mode. If you decide to use it, please report any iss OCC::ShareModel - + %1 days - + 1 day - + Today @@ -5078,7 +5074,7 @@ This is a new, experimental mode. If you decide to use it, please report any iss - + Could not find local folder for %1 @@ -5199,11 +5195,6 @@ Server replied with error: %2 Resharing this folder is not allowed Δεν επιτρέπεται η αναδημοσίευση αυτού του φακέλου. - - - Copy internal link - Αντιγραφή εσωτερικού συνδέσμου - Copy secure file drop link @@ -5215,6 +5206,11 @@ Server replied with error: %2 Copy public link Αντιγραφή δημόσιου συνδέσμου + + + Copy internal link + Αντιγραφή εσωτερικού συνδέσμου + Copy secure filedrop link @@ -5246,16 +5242,16 @@ Server replied with error: %2 remaining time before lock expires - - - Open in browser - Άνοιγμα στον περιηγητή - Edit Επεξεργασία + + + Open in browser + Άνοιγμα στον περιηγητή + Resolve conflict … @@ -5788,10 +5784,10 @@ Server replied with error: %2 - - - - + + + + Error updating metadata for a folder %1 @@ -5811,7 +5807,7 @@ Server replied with error: %2 - + Failed to unlock a folder. @@ -5829,7 +5825,7 @@ Server replied with error: %2 - + %1 notifications @@ -5845,17 +5841,17 @@ Server replied with error: %2 - + Rename file - + Open Nextcloud Assistant in browser - + Open Nextcloud Talk in browser @@ -5989,29 +5985,19 @@ Server replied with error: %2 - The Virtual filesystem feature does not support a drive as sync root - + The Virtual filesystem feature requires a NTFS file system, %1 is using %2 + Η δυνατότητα εικονικού συστήματος αρχείων απαιτεί σύστημα αρχείων NTFS, το %1 χρησιμοποιεί %2. Please choose a different location. %1 isn't a NTFS file system. It doesn't support virtual files. - - - The Virtual filesystem feature requires a NTFS file system, %1 is using %2 - Η δυνατότητα εικονικού συστήματος αρχείων απαιτεί σύστημα αρχείων NTFS, το %1 χρησιμοποιεί %2. - Please choose a different location. %1 is a network drive. It doesn't support virtual files. - - - The Virtual filesystem feature is not supported on network drives - - OCC::VfsDownloadErrorDialog @@ -6151,12 +6137,12 @@ Server replied with error: %2 Ο διακομιστής στο λογαριασμό %1 εκτελεί μια μη υποστηριζόμενη έκδοση % 2. Η χρήση αυτού του προγράμματος-πελάτη με μη υποστηριζόμενες εκδόσεις διακομιστή δεν έχει δοκιμαστεί και είναι δυνητικά επικίνδυνη. Προχωρήστε με δική σας ευθύνη. - + 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. @@ -6232,23 +6218,23 @@ Server replied with error: %2 Δεν ρυθμίστηκαν φάκελοι συγχρονισμού - + %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. @@ -6694,7 +6680,7 @@ Server replied with error: %2 - + Sharing is not available for this folder @@ -7105,11 +7091,6 @@ Server replied with error: %2 downloading λήψη - - - Downloading - - uploading @@ -7117,7 +7098,7 @@ Server replied with error: %2 - Uploading + Downloading @@ -7127,7 +7108,7 @@ Server replied with error: %2 - Deleting + Uploading @@ -7136,8 +7117,8 @@ Server replied with error: %2 μετακίνηση - - Moving + + Deleting @@ -7147,7 +7128,7 @@ Server replied with error: %2 - Ignoring + Moving @@ -7155,18 +7136,23 @@ Server replied with error: %2 error σφάλμα + + + Ignoring + + updating local metadata γίνεται ενημέρωση μεταδεδομένων - + Updating local metadata - + Updating local virtual files metadata @@ -7325,19 +7311,6 @@ Server replied with error: %2 - - OCC::FormatWarningsWizardPage - - - <b>Warning:</b> %1 - <b>Προειδοποίηση:</b> %1 - - - - <b>Warning:</b> - <b>Προειδοποίηση:</b> - - OCC::AbstractPropagateRemoteDeleteEncrypted @@ -7351,6 +7324,19 @@ Server replied with error: %2 "%1 Το ξεκλείδωμα του κρυπτογραφημένου φακέλου απέτυχε %2". + + OCC::FormatWarningsWizardPage + + + <b>Warning:</b> %1 + <b>Προειδοποίηση:</b> %1 + + + + <b>Warning:</b> + <b>Προειδοποίηση:</b> + + OCC::OAuth diff --git a/translations/client_en_GB.ts b/translations/client_en_GB.ts index 7b2e5f4927087..9d5e7bcc35def 100644 --- a/translations/client_en_GB.ts +++ b/translations/client_en_GB.ts @@ -172,13 +172,13 @@ - + Resume sync for all Resume sync for all - + Pause sync for all Pause sync for all @@ -193,32 +193,32 @@ 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 @@ -307,17 +307,17 @@ FileProviderEvictionDialog - + Evict materialised files Evict materialised files - + Materialised items Materialised items - + Reload Reload @@ -493,17 +493,17 @@ MainWindow - + Nextcloud desktop main dialog Nextcloud desktop main dialogue - + Unified search results list Unified search results list - + New activities New activities @@ -554,14 +554,14 @@ Should an account import be attempted? Should an account import be attempted? - + %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. @@ -575,12 +575,12 @@ Should the account be imported? Legacy import - + Import Import - + Skip Skip @@ -675,12 +675,12 @@ Should the account be imported? 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. @@ -712,17 +712,17 @@ Should the account be imported? 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 @@ -978,7 +978,7 @@ This action will abort any currently running synchronization. No connection to %1 at %2. - + Unable to connect to %1. Unable to connect to %1. @@ -988,7 +988,7 @@ This action will abort any currently running synchronization. Server configuration error: %1 at %2. - + You need to accept the terms of service You need to accept the terms of service @@ -1018,7 +1018,7 @@ This action will abort any currently running synchronization. There are folders that were not synchronised because they are too big or external storages: - + There are folders that have grown in size beyond %1MB: %2 There are folders that have grown in size beyond %1MB: %2 @@ -1220,34 +1220,39 @@ This action will abort any currently running synchronization. Continue - + + Quit %1 + Quit %1 + + + %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. @@ -1264,11 +1269,6 @@ This action will abort any currently running synchronization. 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. - - - Quit %1 - Quit %1 - OCC::AuthenticationDialog @@ -1733,13 +1733,13 @@ This action will abort any currently running synchronization. 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. @@ -2134,17 +2134,17 @@ 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. 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. @@ -2295,29 +2295,29 @@ If this was an accident and you decide to keep your files, they will be re-synce Keep files - + 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? @@ -2345,12 +2345,12 @@ 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. Alternatively, you can restore all deleted files by uploading from '%1' folder to the server. @@ -2359,7 +2359,7 @@ 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. @@ -2368,22 +2368,22 @@ 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 @@ -2454,32 +2454,32 @@ Alternatively, you can restore all deleted files by downloading them from the se 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 @@ -2523,16 +2523,6 @@ Alternatively, you can restore all deleted files by downloading them from the se No valid folder selected! No valid folder selected! - - - The folder %1 is used in a folder sync connection! - The folder %1 is used in a folder sync connection! - - - - Please choose a different location. The selected folder isn't valid. - - The selected path does not exist! @@ -2543,62 +2533,67 @@ Alternatively, you can restore all deleted files by downloading them from the se The selected path is not a folder! The selected path is not a folder! - - - - Please choose a different location. %1 is already being used as a sync folder. - - You have no permission to write to the selected folder! You have no permission to write to the selected folder! + + + The local folder %1 already contains a folder used in a folder sync connection. Please pick another one! + The local folder %1 already contains a folder used in a folder sync connection. Please pick another one! + + + + The local folder %1 is already contained in a folder used in a folder sync connection. Please pick another one! + The local folder %1 is already contained in a folder used in a folder sync connection. Please pick another one! + + + + There is already a sync from the server to this local folder. Please pick another local folder! + There is already a sync from the server to this local folder. Please pick another local 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. %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 - - - - - The local folder %1 already contains a folder used in a folder sync connection. Please pick another one! - The local folder %1 already contains a folder used in a folder sync connection. Please pick another one! - - - - The local folder %1 is already contained in a folder used in a folder sync connection. Please pick another one! - The local folder %1 is already contained in a folder used in a folder sync connection. Please pick another one! + 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. - - - - - There is already a sync from the server to this local folder. Please pick another local folder! - There is already a sync from the server to this local folder. Please pick another local 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. @@ -2706,12 +2701,12 @@ For advanced users: this issue might be related to multiple sync database files Reconciling changes - + 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'" %1 %2 … @@ -2729,7 +2724,7 @@ For advanced users: this issue might be related to multiple sync database files , - + Download %1/s Example text: "Download 24Kb/s" (%1 is replaced by 24Kb (translated)) Download %1/s @@ -2746,7 +2741,7 @@ For advanced users: this issue might be related to multiple sync database files ↓ %1/s - + Upload %1/s Example text: "Upload 24Kb/s" (%1 is replaced by 24Kb (translated)) Upload %1/s @@ -2797,12 +2792,12 @@ For advanced users: this issue might be related to multiple sync database files file %1 of %2 - + File %1 of %2 File %1 of %2 - + About to start syncing About to start syncing @@ -2911,7 +2906,7 @@ 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. @@ -2956,7 +2951,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 @@ -3168,7 +3163,7 @@ For advanced users: this issue might be related to multiple sync database files Server notifications that require attention. - + Show chat notification dialogs. Show chat notification dialogs. @@ -3209,17 +3204,17 @@ Note that this selects only what pool upgrades are taken from, and that there ar Note that this selects only what pool upgrades are taken from, and that there are no downgrades: So going back from the beta channel to the stable channel usually cannot be done immediately and means waiting for a stable version that is newer than the currently installed beta version. - + 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 @@ -3231,7 +3226,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. @@ -3241,12 +3236,12 @@ 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 @@ -3942,7 +3937,7 @@ Note that using any logging command line options will override this setting. Virtual files are not supported at the selected location - + Virtual files are not supported at the selected location @@ -4299,30 +4294,30 @@ This is a new, experimental mode. If you decide to use it, please report any iss The file name is a reserved name on this file system. - + 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. - + %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. @@ -4377,22 +4372,22 @@ This is a new, experimental mode. If you decide to use it, please report any iss 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). @@ -4427,7 +4422,7 @@ This is a new, experimental mode. If you decide to use it, please report any iss Cannot sync due to invalid modification time - + Could not upload file, because it is open in "%1". Could not upload file, because it is open in "%1". @@ -4510,18 +4505,18 @@ This is a new, experimental mode. If you decide to use it, please report any iss 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 @@ -4695,12 +4690,6 @@ This is a new, experimental mode. If you decide to use it, please report any iss 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 - @@ -4708,6 +4697,13 @@ This is a new, experimental mode. If you decide to use it, please report any iss could not get file %1 from local DB could not get file %1 from local DB + + + + + Could not get file %1 from local DB + Could not get file %1 from local DB + @@ -4808,16 +4804,16 @@ 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". - - - Could not get file %1 from local DB - Could not get file %1 from local DB - could not get file %1 from local DB could not get file %1 from local DB + + + 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 @@ -5066,7 +5062,7 @@ This is a new, experimental mode. If you decide to use it, please report any iss OCC::ShareManager - + Error Error @@ -5074,17 +5070,17 @@ 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 @@ -5114,7 +5110,7 @@ This is a new, experimental mode. If you decide to use it, please report any iss Secure file drop - + Could not find local folder for %1 Could not find local folder for %1 @@ -5237,11 +5233,6 @@ Server replied with error: %2 Resharing this folder is not allowed Resharing this folder is not allowed - - - Copy internal link - Copy internal link - Copy secure file drop link @@ -5253,6 +5244,11 @@ Server replied with error: %2 Copy public link Copy public link + + + Copy internal link + Copy internal link + Copy secure filedrop link @@ -5284,16 +5280,16 @@ Server replied with error: %2 remaining time before lock expires Expires in %1 minutesExpires in %1 minutes - - - Open in browser - Open in browser - Edit Edit + + + Open in browser + Open in browser + Resolve conflict … @@ -5826,10 +5822,10 @@ Server replied with error: %2 - - - - + + + + Error updating metadata for a folder %1 Error updating metadata for a folder %1 @@ -5849,7 +5845,7 @@ Server replied with error: %2 Unable to add or remove user %1 from accessing folder %2. - + Failed to unlock a folder. Failed to unlock a folder. @@ -5867,7 +5863,7 @@ Server replied with error: %2 Trigger the migration - + %1 notifications %1 notifications @@ -5883,17 +5879,17 @@ Server replied with error: %2 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 @@ -6023,32 +6019,22 @@ Server replied with error: %2 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. - The Virtual filesystem feature does not support a drive as sync root - The Virtual filesystem feature does not support a drive as sync root + The Virtual filesystem feature requires a NTFS file system, %1 is using %2 + The Virtual filesystem feature requires a NTFS file system, %1 is using %2 Please choose a different location. %1 isn't a NTFS file system. It doesn't support virtual files. - - - - - The Virtual filesystem feature requires a NTFS file system, %1 is using %2 - The Virtual filesystem feature requires a NTFS file system, %1 is using %2 + 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. - - - - - The Virtual filesystem feature is not supported on network drives - The Virtual filesystem feature is not supported on network drives + Please choose a different location. %1 is a network drive. It doesn't support virtual files. @@ -6189,12 +6175,12 @@ Server replied with error: %2 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. @@ -6270,23 +6256,23 @@ Server replied with error: %2 No sync folders configured - + %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. @@ -6732,7 +6718,7 @@ Server replied with error: %2 Search for users or groups… - + Sharing is not available for this folder Sharing is not available for this folder @@ -7143,11 +7129,6 @@ Server replied with error: %2 downloading downloading - - - Downloading - Downloading - uploading @@ -7155,8 +7136,8 @@ Server replied with error: %2 - Uploading - Uploading + Downloading + Downloading @@ -7165,8 +7146,8 @@ Server replied with error: %2 - Deleting - Deleting + Uploading + Uploading @@ -7174,9 +7155,9 @@ Server replied with error: %2 moving - - Moving - Moving + + Deleting + Deleting @@ -7185,26 +7166,31 @@ Server replied with error: %2 - Ignoring - Ignoring + Moving + Moving error error + + + Ignoring + Ignoring + updating local metadata updating local metadata - + Updating local metadata Updating local metadata - + Updating local virtual files metadata Updating local virtual files metadata @@ -7363,19 +7349,6 @@ Server replied with error: %2 Clear status message menu - - OCC::FormatWarningsWizardPage - - - <b>Warning:</b> %1 - <b>Warning:</b> %1 - - - - <b>Warning:</b> - <b>Warning:</b> - - OCC::AbstractPropagateRemoteDeleteEncrypted @@ -7389,6 +7362,19 @@ Server replied with error: %2 "%1 Failed to unlock encrypted folder %2". + + OCC::FormatWarningsWizardPage + + + <b>Warning:</b> %1 + <b>Warning:</b> %1 + + + + <b>Warning:</b> + <b>Warning:</b> + + OCC::OAuth diff --git a/translations/client_eo.ts b/translations/client_eo.ts index 360093244921c..431873cac67aa 100644 --- a/translations/client_eo.ts +++ b/translations/client_eo.ts @@ -172,13 +172,13 @@ - + Resume sync for all - + Pause sync for all @@ -193,32 +193,32 @@ - + Settings - + Exit - + Current account avatar - + Current account status is online - + Current account status is do not disturb - + Account switcher and settings menu @@ -307,17 +307,17 @@ FileProviderEvictionDialog - + Evict materialised files - + Materialised items - + Reload @@ -493,17 +493,17 @@ MainWindow - + Nextcloud desktop main dialog - + Unified search results list - + New activities @@ -553,13 +553,13 @@ Should an account import be attempted? - + %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? @@ -572,12 +572,12 @@ Should the account be imported? - + Import - + Skip @@ -672,12 +672,12 @@ Should the account be imported? Ĉifri dosierujon - + 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> @@ -708,17 +708,17 @@ Should the account be imported? Averto - + 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 @@ -968,7 +968,7 @@ This action will abort any currently running synchronization. Neniu konekto al servilo %1 je la adreso %2. - + Unable to connect to %1. @@ -978,7 +978,7 @@ This action will abort any currently running synchronization. - + You need to accept the terms of service @@ -1008,7 +1008,7 @@ This action will abort any currently running synchronization. Kelkaj dosierujoj ne sinkroniĝis, ĉar ili estas tro grandaj âù konservataj en ekstera konservejo: - + There are folders that have grown in size beyond %1MB: %2 @@ -1210,34 +1210,39 @@ This action will abort any currently running synchronization. Daŭrigi - + + Quit %1 + Fini %1 + + + %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. @@ -1253,11 +1258,6 @@ This action will abort any currently running synchronization. There was an error while accessing the configuration file at %1. Please make sure the file can be accessed by your system account. - - - Quit %1 - Fini %1 - OCC::AuthenticationDialog @@ -1720,13 +1720,13 @@ This action will abort any currently running synchronization. - - + + Encrypted metadata setup error! - + Encrypted metadata setup error: initial signature from server is empty. @@ -2276,28 +2276,28 @@ If this was an accident and you decide to keep your files, they will be re-synce Teni dosierojn - + 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? @@ -2325,41 +2325,41 @@ Tio signifas, ke la sinkroniga kliento eble ne alŝutas tuj lokajn ŝanĝojn kaj %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. 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 @@ -2430,32 +2430,32 @@ Alternatively, you can restore all deleted files by downloading them from the se Pretigado de la sinkronigo. - + 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 @@ -2499,16 +2499,6 @@ Alternatively, you can restore all deleted files by downloading them from the se No valid folder selected! Nevalida dosierujo elektita! - - - The folder %1 is used in a folder sync connection! - - - - - Please choose a different location. The selected folder isn't valid. - - The selected path does not exist! @@ -2519,17 +2509,37 @@ Alternatively, you can restore all deleted files by downloading them from the se The selected path is not a folder! La elektita vojo ne estas dosierujo! + + + You have no permission to write to the selected folder! + Vi ne rajtas skribi en la elektitan dosierujon! + + + + The local folder %1 already contains a folder used in a folder sync connection. Please pick another one! + La loka dosierujo %1 jam enhavas dosierujon uzitan en alia dosieruja sinkronigo. Bv. elekti alian dosierujon! + + + + The local folder %1 is already contained in a folder used in a folder sync connection. Please pick another one! + La loka dosierujo %1 jam troviĝas en dosierujo uzita en alia dosieruja sinkronigo. Bv. elekti alian dosierujon! + + + + There is already a sync from the server to this local folder. Please pick another local folder! + Jam ekzistas sinkronigo el la servilo al tiu ĉi loka dosierujo. Bv. elekti alian lokan dosierujon! + + + + 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. - - - You have no permission to write to the selected folder! - Vi ne rajtas skribi en la elektitan dosierujon! - Please choose a different location. The path %1 doesn't exist. @@ -2547,26 +2557,11 @@ Alternatively, you can restore all deleted files by downloading them from the se folder location - - - The local folder %1 already contains a folder used in a folder sync connection. Please pick another one! - La loka dosierujo %1 jam enhavas dosierujon uzitan en alia dosieruja sinkronigo. Bv. elekti alian dosierujon! - - - - The local folder %1 is already contained in a folder used in a folder sync connection. Please pick another one! - La loka dosierujo %1 jam troviĝas en dosierujo uzita en alia dosieruja sinkronigo. Bv. elekti alian dosierujon! - Please choose a different location. %1 is already contained in a folder used as a sync folder. - - - There is already a sync from the server to this local folder. Please pick another local folder! - Jam ekzistas sinkronigo el la servilo al tiu ĉi loka dosierujo. Bv. elekti alian lokan dosierujon! - Please choose a different location. %1 is already being used as a sync folder for %2. @@ -2574,7 +2569,7 @@ Alternatively, you can restore all deleted files by downloading them from the se - + 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. @@ -2679,12 +2674,12 @@ For advanced users: this issue might be related to multiple sync database files Komparo de ŝanĝoj - + 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'" @@ -2702,7 +2697,7 @@ For advanced users: this issue might be related to multiple sync database files , - + Download %1/s Example text: "Download 24Kb/s" (%1 is replaced by 24Kb (translated)) @@ -2719,7 +2714,7 @@ For advanced users: this issue might be related to multiple sync database files ↓ %1/s - + Upload %1/s Example text: "Upload 24Kb/s" (%1 is replaced by 24Kb (translated)) @@ -2770,12 +2765,12 @@ For advanced users: this issue might be related to multiple sync database files dosiero %1 el %2 - + File %1 of %2 - + About to start syncing @@ -3141,7 +3136,7 @@ For advanced users: this issue might be related to multiple sync database files Servilaj sciigoj, kiu bezonas atenton. - + Show chat notification dialogs. @@ -3180,17 +3175,17 @@ Note that this selects only what pool upgrades are taken from, and that there ar - + daily - + enterprise - + - beta: contains versions with new features that may not be tested thoroughly - daily: contains versions created daily only for testing and development @@ -3199,7 +3194,7 @@ 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. @@ -3207,12 +3202,12 @@ 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 @@ -4254,30 +4249,30 @@ This is a new, experimental mode. If you decide to use it, please report any iss - + 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. @@ -4332,22 +4327,22 @@ This is a new, experimental mode. If you decide to use it, please report any iss - + 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). @@ -4382,7 +4377,7 @@ This is a new, experimental mode. If you decide to use it, please report any iss - + Could not upload file, because it is open in "%1". @@ -4465,18 +4460,18 @@ This is a new, experimental mode. If you decide to use it, please report any iss - - - - - - + + + + + + The folder %1 cannot be made read-only: %2 - - + + unknown exception @@ -4650,12 +4645,6 @@ This is a new, experimental mode. If you decide to use it, please report any iss File %1 downloaded but it resulted in a local file name clash! - - - - Could not get file %1 from local DB - - @@ -4663,6 +4652,13 @@ This is a new, experimental mode. If you decide to use it, please report any iss could not get file %1 from local DB + + + + + Could not get file %1 from local DB + + @@ -4764,13 +4760,13 @@ This is a new, experimental mode. If you decide to use it, please report any iss Neĝusta HTTP-kodo ricevita de servilo. Atendita: 201, ricevita: „%1 %2“. - - Could not get file %1 from local DB + + could not get file %1 from local DB - - could not get file %1 from local DB + + Could not get file %1 from local DB @@ -5021,7 +5017,7 @@ This is a new, experimental mode. If you decide to use it, please report any iss OCC::ShareManager - + Error @@ -5029,17 +5025,17 @@ This is a new, experimental mode. If you decide to use it, please report any iss OCC::ShareModel - + %1 days - + 1 day - + Today @@ -5069,7 +5065,7 @@ This is a new, experimental mode. If you decide to use it, please report any iss - + Could not find local folder for %1 @@ -5190,11 +5186,6 @@ Server replied with error: %2 Resharing this folder is not allowed - - - Copy internal link - Kopii internan ligilon - Copy secure file drop link @@ -5206,6 +5197,11 @@ Server replied with error: %2 Copy public link Kopii publikan ligilon + + + Copy internal link + Kopii internan ligilon + Copy secure filedrop link @@ -5237,16 +5233,16 @@ Server replied with error: %2 remaining time before lock expires - - - Open in browser - Malfermi per retumilo - Edit Redakti + + + Open in browser + Malfermi per retumilo + Resolve conflict … @@ -5778,10 +5774,10 @@ Server replied with error: %2 - - - - + + + + Error updating metadata for a folder %1 @@ -5801,7 +5797,7 @@ Server replied with error: %2 - + Failed to unlock a folder. @@ -5819,7 +5815,7 @@ Server replied with error: %2 - + %1 notifications @@ -5835,17 +5831,17 @@ Server replied with error: %2 - + Rename file - + Open Nextcloud Assistant in browser - + Open Nextcloud Talk in browser @@ -5979,7 +5975,7 @@ Server replied with error: %2 - The Virtual filesystem feature does not support a drive as sync root + The Virtual filesystem feature requires a NTFS file system, %1 is using %2 @@ -5987,21 +5983,11 @@ Server replied with error: %2 Please choose a different location. %1 isn't a NTFS file system. It doesn't support virtual files. - - - The Virtual filesystem feature requires a NTFS file system, %1 is using %2 - - Please choose a different location. %1 is a network drive. It doesn't support virtual files. - - - The Virtual filesystem feature is not supported on network drives - - OCC::VfsDownloadErrorDialog @@ -6141,12 +6127,12 @@ Server replied with error: %2 - + 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. @@ -6222,23 +6208,23 @@ Server replied with error: %2 Neniu sinkroniga dosiero agordita - + %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. @@ -6684,7 +6670,7 @@ Server replied with error: %2 - + Sharing is not available for this folder @@ -7095,11 +7081,6 @@ Server replied with error: %2 downloading elŝutado - - - Downloading - - uploading @@ -7107,7 +7088,7 @@ Server replied with error: %2 - Uploading + Downloading @@ -7117,7 +7098,7 @@ Server replied with error: %2 - Deleting + Uploading @@ -7126,8 +7107,8 @@ Server replied with error: %2 movado - - Moving + + Deleting @@ -7137,7 +7118,7 @@ Server replied with error: %2 - Ignoring + Moving @@ -7145,18 +7126,23 @@ Server replied with error: %2 error eraro + + + Ignoring + + updating local metadata ĝisdatigo de lokaj pridatumoj - + Updating local metadata - + Updating local virtual files metadata @@ -7315,19 +7301,6 @@ Server replied with error: %2 - - OCC::FormatWarningsWizardPage - - - <b>Warning:</b> %1 - <b>Averto:</b> %1 - - - - <b>Warning:</b> - <b>Averto:</b> - - OCC::AbstractPropagateRemoteDeleteEncrypted @@ -7341,6 +7314,19 @@ Server replied with error: %2 + + OCC::FormatWarningsWizardPage + + + <b>Warning:</b> %1 + <b>Averto:</b> %1 + + + + <b>Warning:</b> + <b>Averto:</b> + + OCC::OAuth diff --git a/translations/client_es.ts b/translations/client_es.ts index 3e2c510ff3e42..47dffb5794d2c 100644 --- a/translations/client_es.ts +++ b/translations/client_es.ts @@ -172,13 +172,13 @@ - + Resume sync for all - + Pause sync for all @@ -193,32 +193,32 @@ - + Settings - + Exit - + Current account avatar - + Current account status is online - + Current account status is do not disturb - + Account switcher and settings menu @@ -307,17 +307,17 @@ FileProviderEvictionDialog - + Evict materialised files Evitar los archivos materializados - + Materialised items Elementos materializados - + Reload Recargar @@ -493,17 +493,17 @@ 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 @@ -555,14 +555,14 @@ Should an account import be attempted? ¿Se debe intentar importar la cuenta? - + %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. @@ -576,12 +576,12 @@ Should the account be imported? Importación antigua - + Import Importar - + Skip Saltar @@ -676,12 +676,12 @@ Should the account be imported? 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. @@ -713,17 +713,17 @@ Should the account be imported? 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. @@ -979,7 +979,7 @@ Además, esta acción interrumpirá cualquier sincronización en curso.Sin conexión a %1 en %2. - + Unable to connect to %1. No es posible conectarse con %1. @@ -989,7 +989,7 @@ Además, esta acción interrumpirá cualquier sincronización en curso.Error de configuración del servidor: %1 en %2, - + You need to accept the terms of service Tienes que aceptar los términos de servicio @@ -1019,7 +1019,7 @@ Además, esta acción interrumpirá cualquier sincronización en curso.Hay carpetas que no se han sincronizado porque son demasiado grandes o están en el almacenamiento externo: - + There are folders that have grown in size beyond %1MB: %2 Existen carpetas que han aumentado de tamaño más alla de %1MB: %2 @@ -1221,34 +1221,39 @@ Además, esta acción interrumpirá cualquier sincronización en curso.Continuar - + + Quit %1 + Salir %1 + + + %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. @@ -1265,11 +1270,6 @@ Además, esta acción interrumpirá cualquier sincronización en curso.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. - - - Quit %1 - Salir %1 - OCC::AuthenticationDialog @@ -1734,13 +1734,13 @@ Además, esta acción interrumpirá cualquier sincronización en curso.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 signatura inical del servidor está vacía. @@ -2297,29 +2297,29 @@ Si esto ha sido un accidente, y decides mantener tus archivos, serán re-sincron Mantener archivos - + 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? @@ -2347,12 +2347,12 @@ 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 de 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. Alternatively, you can restore all deleted files by uploading from '%1' folder to the server. @@ -2361,7 +2361,7 @@ Por favor, confirma si quieres proceder con estos borrados. Alternativamente, puedes restaurar todos los archivos borrados subiéndoles 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. @@ -2370,22 +2370,22 @@ Por favor, confirma si quieres continuar con estos borrados. Alternativamente, puedes restaurar todos los archivos borrados descargándolos del servidor. - + Remove all files? ¿Eliminar todos los archivos? - + Proceed with Deletion Continuar con el borrado - + Restore Files to Server Restaurar los archivos al servidor - + Restore Files from Server Restaurar los archivos desde el servidor @@ -2456,32 +2456,32 @@ Alternativamente, puedes restaurar todos los archivos borrados descargándolos d 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 unos segundos) - + Syncing %1 (%2 left) Sincronizando %1 (Quedan %2) - + Syncing %1 Sincronizando %1 @@ -2525,16 +2525,6 @@ Alternativamente, puedes restaurar todos los archivos borrados descargándolos d No valid folder selected! ¡La carpeta seleccionada no es válida! - - - The folder %1 is used in a folder sync connection! - - - - - Please choose a different location. The selected folder isn't valid. - - The selected path does not exist! @@ -2545,17 +2535,37 @@ Alternativamente, puedes restaurar todos los archivos borrados descargándolos d The selected path is not a folder! ¡La ruta seleccionada no es una carpeta! + + + You have no permission to write to the selected folder! + ¡No tiene permiso para escribir en la carpeta seleccionada! + + + + The local folder %1 already contains a folder used in a folder sync connection. Please pick another one! + El directorio local %1 ya contiene un directorio usado en una conexión de sincronización de directorios. Por favor, elija otro. + + + + The local folder %1 is already contained in a folder used in a folder sync connection. Please pick another one! + El directorio local %1 está dentro de un directorio usado en una conexión de sincronización de directorios. Por favor, elija otro. + + + + There is already a sync from the server to this local folder. Please pick another local folder! + Ya existe una tarea de sincronización entre el servidor y esta carpeta. Por favor elija otra carpeta local. + + + + 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. - - - You have no permission to write to the selected folder! - ¡No tiene permiso para escribir en la carpeta seleccionada! - Please choose a different location. The path %1 doesn't exist. @@ -2573,26 +2583,11 @@ Alternativamente, puedes restaurar todos los archivos borrados descargándolos d folder location - - - The local folder %1 already contains a folder used in a folder sync connection. Please pick another one! - El directorio local %1 ya contiene un directorio usado en una conexión de sincronización de directorios. Por favor, elija otro. - - - - The local folder %1 is already contained in a folder used in a folder sync connection. Please pick another one! - El directorio local %1 está dentro de un directorio usado en una conexión de sincronización de directorios. Por favor, elija otro. - Please choose a different location. %1 is already contained in a folder used as a sync folder. - - - There is already a sync from the server to this local folder. Please pick another local folder! - Ya existe una tarea de sincronización entre el servidor y esta carpeta. Por favor elija otra carpeta local. - Please choose a different location. %1 is already being used as a sync folder for %2. @@ -2600,7 +2595,7 @@ Alternativamente, puedes restaurar todos los archivos borrados descargándolos d - + 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. @@ -2705,12 +2700,12 @@ For advanced users: this issue might be related to multiple sync database files Reconciliando cambios - + 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'" %1 %2 … @@ -2728,7 +2723,7 @@ For advanced users: this issue might be related to multiple sync database files , - + Download %1/s Example text: "Download 24Kb/s" (%1 is replaced by 24Kb (translated)) Descargando %1/s @@ -2745,7 +2740,7 @@ For advanced users: this issue might be related to multiple sync database files ↓ %1/s - + Upload %1/s Example text: "Upload 24Kb/s" (%1 is replaced by 24Kb (translated)) Subiendo %1 /s @@ -2796,12 +2791,12 @@ For advanced users: this issue might be related to multiple sync database files archivo %1 de %2 - + File %1 of %2 Archivo %1 de %2 - + About to start syncing A punto de empezar a sincronizar @@ -3167,7 +3162,7 @@ For advanced users: this issue might be related to multiple sync database files Notificaciones del servidor que requieren atención. - + Show chat notification dialogs. @@ -3208,17 +3203,17 @@ Note that this selects only what pool upgrades are taken from, and that there ar Tenga en cuenta que esto sólo selecciona de qué grupo se tomarán las actualizaciones, y que no hay vuelta atrás: Por lo tanto volver del canal "beta" al canal "estable" normalmente no puede hacerse inmediatamente y significa esperar a una versión estable que sea más reciente que la versión beta instalada actualmente. - + 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 @@ -3230,7 +3225,7 @@ Downgrading versions is not possible immediately: changing from beta to stable m Bajar de versión no es inmediatamente posible: cambiar de beta a estable significa esperar a la siguiente ersión 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. @@ -3240,12 +3235,12 @@ Downgrading versions is not possible immediately: changing from stable to enterp Bajar de versión 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 @@ -4298,30 +4293,30 @@ Esta es un modo nuevo y experimental. Si decides usarlo, por favor, informa de c El nombre del archivo es una palabra reservada del sistema de archivos. - + 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. - + %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. @@ -4376,22 +4371,22 @@ Esta es un modo nuevo y experimental. Si decides usarlo, por favor, informa de c El nombre del archivo está prohibido en el servidor. - + Reason: the entire filename is forbidden. Motivo: el nombre de archivo completo está prohibido. - + Reason: the filename has a forbidden base name (filename start). Motivo: el nombre de archivo tiene un basename (inicio del nombre del archivo) prohibido. - + Reason: the file has a forbidden extension (.%1). Motivo: el archivo tiene una extensión prohibida (%1). - + Reason: the filename contains a forbidden character (%1). Motivo: el nombre del archivo contiene un carácter prohibido (%1). @@ -4426,7 +4421,7 @@ Esta es un modo nuevo y experimental. Si decides usarlo, por favor, informa de c No se puede sincronizar debido a una hora de modificación no válida - + Could not upload file, because it is open in "%1". No es posible subir el archivo, porque está abierto en "%1". @@ -4509,18 +4504,18 @@ Esta es un modo nuevo y experimental. Si decides usarlo, por favor, informa de c 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 @@ -4694,12 +4689,6 @@ Esta es un modo nuevo y experimental. Si decides usarlo, por favor, informa de c 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 - - @@ -4707,6 +4696,13 @@ Esta es un modo nuevo y experimental. Si decides usarlo, por favor, informa de c could not get file %1 from local DB no fue posible obtener el archivo %1 de la base de datos local + + + + + Could not get file %1 from local DB + + @@ -4807,16 +4803,16 @@ 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". - - - Could not get file %1 from local DB - - could not get file %1 from local DB no fue posible obtener el archivo %1 de la base de datos local + + + Could not get file %1 from local DB + + Could not delete file record %1 from local DB @@ -5065,7 +5061,7 @@ Esta es un modo nuevo y experimental. Si decides usarlo, por favor, informa de c OCC::ShareManager - + Error Error @@ -5073,17 +5069,17 @@ Esta es un modo nuevo y experimental. Si decides usarlo, por favor, informa de c OCC::ShareModel - + %1 days - + 1 day - + Today @@ -5113,7 +5109,7 @@ Esta es un modo nuevo y experimental. Si decides usarlo, por favor, informa de c Entrega de archivos segura - + Could not find local folder for %1 No se ha podido encontrar una carpeta local para %1 @@ -5236,11 +5232,6 @@ El servidor respondió con el error: %2 Resharing this folder is not allowed No está permitido compartir de nuevo esta carpeta - - - Copy internal link - Copiar enlace interno - Copy secure file drop link @@ -5252,6 +5243,11 @@ El servidor respondió con el error: %2 Copy public link Copiar enlace público + + + Copy internal link + Copiar enlace interno + Copy secure filedrop link @@ -5283,16 +5279,16 @@ El servidor respondió con el error: %2 remaining time before lock expires Expira en %1 minutoExpira en %1 minutosExpira en %1 minutos - - - Open in browser - Abrir en navegador - Edit Editar + + + Open in browser + Abrir en navegador + Resolve conflict … @@ -5825,10 +5821,10 @@ El servidor respondió con el error: %2 - - - - + + + + Error updating metadata for a folder %1 Error al actualizar los metadatos de una carpeta %1 @@ -5848,7 +5844,7 @@ El servidor respondió con el error: %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. @@ -5866,7 +5862,7 @@ El servidor respondió con el error: %2 - + %1 notifications %1notificaciones @@ -5882,17 +5878,17 @@ El servidor respondió con el error: %2 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 @@ -6026,29 +6022,19 @@ El servidor respondió con el error: %2 - The Virtual filesystem feature does not support a drive as sync root - + The Virtual filesystem feature requires a NTFS file system, %1 is using %2 + La característica de archivos virtuales necesita un sistema de archivos NTFS, %1 está usando %2 Please choose a different location. %1 isn't a NTFS file system. It doesn't support virtual files. - - - The Virtual filesystem feature requires a NTFS file system, %1 is using %2 - La característica de archivos virtuales necesita un sistema de archivos NTFS, %1 está usando %2 - Please choose a different location. %1 is a network drive. It doesn't support virtual files. - - - The Virtual filesystem feature is not supported on network drives - - OCC::VfsDownloadErrorDialog @@ -6188,12 +6174,12 @@ El servidor respondió con el error: %2 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 del 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. Tu cuenta %1 requiere que aceptes los términos del servicio del servidor. Vas a ser redirigido a %2 para señalar que los has leído y estás de acuerdo. @@ -6269,23 +6255,23 @@ El servidor respondió con el error: %2 No hay carpetas sincronizado configuradas - + %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 correcta. - + macOS VFS for %1: A problem was encountered. macOS VFS para %1: Se ha encontrado un error. @@ -6731,7 +6717,7 @@ El servidor respondió con el error: %2 Buscar usuarios o grupos... - + Sharing is not available for this folder Compartir no está disponible para esta carpeta @@ -7142,11 +7128,6 @@ El servidor respondió con el error: %2 downloading descargando - - - Downloading - Descargando - uploading @@ -7154,8 +7135,8 @@ El servidor respondió con el error: %2 - Uploading - Subiendo + Downloading + Descargando @@ -7164,8 +7145,8 @@ El servidor respondió con el error: %2 - Deleting - Eliminando + Uploading + Subiendo @@ -7173,9 +7154,9 @@ El servidor respondió con el error: %2 moviendo - - Moving - Moviendo + + Deleting + Eliminando @@ -7184,26 +7165,31 @@ El servidor respondió con el error: %2 - Ignoring - Ignorando + Moving + Moviendo error error + + + Ignoring + Ignorando + updating local metadata actualizando metadatos locales - + Updating local metadata Actualizando los metadatos locales - + Updating local virtual files metadata Actualizando los metadatos locales de los archivos virtuales @@ -7362,19 +7348,6 @@ El servidor respondió con el error: %2 Borrar el menú de mensajes de estado - - OCC::FormatWarningsWizardPage - - - <b>Warning:</b> %1 - <b>Advertencia:</b> %1 - - - - <b>Warning:</b> - <b>Advertencia:</b> - - OCC::AbstractPropagateRemoteDeleteEncrypted @@ -7388,6 +7361,19 @@ El servidor respondió con el error: %2 "%1 Falló al desbloquear la carpeta cifrada %2". + + OCC::FormatWarningsWizardPage + + + <b>Warning:</b> %1 + <b>Advertencia:</b> %1 + + + + <b>Warning:</b> + <b>Advertencia:</b> + + OCC::OAuth diff --git a/translations/client_es_CL.ts b/translations/client_es_CL.ts index 22b283757b98f..e25e27339136f 100644 --- a/translations/client_es_CL.ts +++ b/translations/client_es_CL.ts @@ -172,13 +172,13 @@ - + Resume sync for all - + Pause sync for all @@ -193,32 +193,32 @@ - + Settings - + Exit - + Current account avatar - + Current account status is online - + Current account status is do not disturb - + Account switcher and settings menu @@ -307,17 +307,17 @@ FileProviderEvictionDialog - + Evict materialised files - + Materialised items - + Reload @@ -493,17 +493,17 @@ MainWindow - + Nextcloud desktop main dialog - + Unified search results list - + New activities @@ -553,13 +553,13 @@ Should an account import be attempted? - + %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? @@ -572,12 +572,12 @@ Should the account be imported? - + Import - + Skip @@ -672,12 +672,12 @@ Should the account be imported? - + 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> @@ -708,17 +708,17 @@ Should the account be imported? Advertencia - + 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 @@ -968,7 +968,7 @@ This action will abort any currently running synchronization. No hay conexión a %1 en %2. - + Unable to connect to %1. @@ -978,7 +978,7 @@ This action will abort any currently running synchronization. - + You need to accept the terms of service @@ -1008,7 +1008,7 @@ This action will abort any currently running synchronization. Hay carpetas que no fueron sincronizadas porque son demasiado grandes o son de almacenamiento externo: - + There are folders that have grown in size beyond %1MB: %2 @@ -1210,34 +1210,39 @@ This action will abort any currently running synchronization. - + + Quit %1 + + + + %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. @@ -1253,11 +1258,6 @@ This action will abort any currently running synchronization. There was an error while accessing the configuration file at %1. Please make sure the file can be accessed by your system account. - - - Quit %1 - - OCC::AuthenticationDialog @@ -1720,13 +1720,13 @@ This action will abort any currently running synchronization. - - + + Encrypted metadata setup error! - + Encrypted metadata setup error: initial signature from server is empty. @@ -2276,28 +2276,28 @@ If this was an accident and you decide to keep your files, they will be re-synce Mantener archivos - + 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? @@ -2321,41 +2321,41 @@ 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 @@ -2426,32 +2426,32 @@ Alternatively, you can restore all deleted files by downloading them from the se Preparando para sincronizar. - + 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 @@ -2495,16 +2495,6 @@ Alternatively, you can restore all deleted files by downloading them from the se No valid folder selected! ¡No se ha seleccionado una carpeta válida! - - - The folder %1 is used in a folder sync connection! - - - - - Please choose a different location. The selected folder isn't valid. - - The selected path does not exist! @@ -2515,17 +2505,37 @@ Alternatively, you can restore all deleted files by downloading them from the se The selected path is not a folder! ¡La ruta seleccionada no es de una carpeta! + + + You have no permission to write to the selected folder! + ¡No tienes permisos para escribir en la carpeta seleccionada! + + + + The local folder %1 already contains a folder used in a folder sync connection. Please pick another one! + La carpeta local %1 contiene una carpeta ya usada en una conexión de sincronización de carpeta. ¡Por favor elige otra! + + + + The local folder %1 is already contained in a folder used in a folder sync connection. Please pick another one! + La carpeta local %1 ya está contenida en una carpeta usada en una conexión de sincronización de carpeta. ¡Por favor elige otra! + + + + There is already a sync from the server to this local folder. Please pick another local folder! + Ya existe una sincronización desde el servidor a esta carpeta local. ¡Por favor elige otra carpeta local! + + + + 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. - - - You have no permission to write to the selected folder! - ¡No tienes permisos para escribir en la carpeta seleccionada! - Please choose a different location. The path %1 doesn't exist. @@ -2543,26 +2553,11 @@ Alternatively, you can restore all deleted files by downloading them from the se folder location - - - The local folder %1 already contains a folder used in a folder sync connection. Please pick another one! - La carpeta local %1 contiene una carpeta ya usada en una conexión de sincronización de carpeta. ¡Por favor elige otra! - - - - The local folder %1 is already contained in a folder used in a folder sync connection. Please pick another one! - La carpeta local %1 ya está contenida en una carpeta usada en una conexión de sincronización de carpeta. ¡Por favor elige otra! - Please choose a different location. %1 is already contained in a folder used as a sync folder. - - - There is already a sync from the server to this local folder. Please pick another local folder! - Ya existe una sincronización desde el servidor a esta carpeta local. ¡Por favor elige otra carpeta local! - Please choose a different location. %1 is already being used as a sync folder for %2. @@ -2570,7 +2565,7 @@ Alternatively, you can restore all deleted files by downloading them from the se - + 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. @@ -2675,12 +2670,12 @@ For advanced users: this issue might be related to multiple sync database files Reconciliando los cambios - + 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'" @@ -2698,7 +2693,7 @@ For advanced users: this issue might be related to multiple sync database files , - + Download %1/s Example text: "Download 24Kb/s" (%1 is replaced by 24Kb (translated)) @@ -2715,7 +2710,7 @@ For advanced users: this issue might be related to multiple sync database files - + Upload %1/s Example text: "Upload 24Kb/s" (%1 is replaced by 24Kb (translated)) @@ -2766,12 +2761,12 @@ For advanced users: this issue might be related to multiple sync database files archivo %1 de %2 - + File %1 of %2 - + About to start syncing @@ -3137,7 +3132,7 @@ For advanced users: this issue might be related to multiple sync database files - + Show chat notification dialogs. @@ -3176,17 +3171,17 @@ Note that this selects only what pool upgrades are taken from, and that there ar - + daily - + enterprise - + - beta: contains versions with new features that may not be tested thoroughly - daily: contains versions created daily only for testing and development @@ -3195,7 +3190,7 @@ 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. @@ -3203,12 +3198,12 @@ 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 @@ -4246,30 +4241,30 @@ This is a new, experimental mode. If you decide to use it, please report any iss - + 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. @@ -4324,22 +4319,22 @@ This is a new, experimental mode. If you decide to use it, please report any iss - + 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). @@ -4374,7 +4369,7 @@ This is a new, experimental mode. If you decide to use it, please report any iss - + Could not upload file, because it is open in "%1". @@ -4457,18 +4452,18 @@ This is a new, experimental mode. If you decide to use it, please report any iss - - - - - - + + + + + + The folder %1 cannot be made read-only: %2 - - + + unknown exception @@ -4642,12 +4637,6 @@ This is a new, experimental mode. If you decide to use it, please report any iss File %1 downloaded but it resulted in a local file name clash! - - - - Could not get file %1 from local DB - - @@ -4655,6 +4644,13 @@ This is a new, experimental mode. If you decide to use it, please report any iss could not get file %1 from local DB + + + + + Could not get file %1 from local DB + + @@ -4756,13 +4752,13 @@ This is a new, experimental mode. If you decide to use it, please report any iss Código equivocado de HTTP regresado por el servidor. Se esperaba 201, pero se recibió "%1 %2". - - Could not get file %1 from local DB + + could not get file %1 from local DB - - could not get file %1 from local DB + + Could not get file %1 from local DB @@ -5013,7 +5009,7 @@ This is a new, experimental mode. If you decide to use it, please report any iss OCC::ShareManager - + Error @@ -5021,17 +5017,17 @@ This is a new, experimental mode. If you decide to use it, please report any iss OCC::ShareModel - + %1 days - + 1 day - + Today @@ -5061,7 +5057,7 @@ This is a new, experimental mode. If you decide to use it, please report any iss - + Could not find local folder for %1 @@ -5182,11 +5178,6 @@ Server replied with error: %2 Resharing this folder is not allowed - - - Copy internal link - - Copy secure file drop link @@ -5198,6 +5189,11 @@ Server replied with error: %2 Copy public link + + + Copy internal link + + Copy secure filedrop link @@ -5230,13 +5226,13 @@ Server replied with error: %2 - - Open in browser + + Edit - - Edit + + Open in browser @@ -5771,10 +5767,10 @@ Server replied with error: %2 - - - - + + + + Error updating metadata for a folder %1 @@ -5794,7 +5790,7 @@ Server replied with error: %2 - + Failed to unlock a folder. @@ -5812,7 +5808,7 @@ Server replied with error: %2 - + %1 notifications @@ -5828,17 +5824,17 @@ Server replied with error: %2 - + Rename file - + Open Nextcloud Assistant in browser - + Open Nextcloud Talk in browser @@ -5972,7 +5968,7 @@ Server replied with error: %2 - The Virtual filesystem feature does not support a drive as sync root + The Virtual filesystem feature requires a NTFS file system, %1 is using %2 @@ -5980,21 +5976,11 @@ Server replied with error: %2 Please choose a different location. %1 isn't a NTFS file system. It doesn't support virtual files. - - - The Virtual filesystem feature requires a NTFS file system, %1 is using %2 - - Please choose a different location. %1 is a network drive. It doesn't support virtual files. - - - The Virtual filesystem feature is not supported on network drives - - OCC::VfsDownloadErrorDialog @@ -6134,12 +6120,12 @@ Server replied with error: %2 - + 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. @@ -6215,23 +6201,23 @@ Server replied with error: %2 No se han configurado carpetas de sincronización - + %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. @@ -6677,7 +6663,7 @@ Server replied with error: %2 - + Sharing is not available for this folder @@ -7088,11 +7074,6 @@ Server replied with error: %2 downloading descargando - - - Downloading - - uploading @@ -7100,7 +7081,7 @@ Server replied with error: %2 - Uploading + Downloading @@ -7110,7 +7091,7 @@ Server replied with error: %2 - Deleting + Uploading @@ -7119,8 +7100,8 @@ Server replied with error: %2 moviendo - - Moving + + Deleting @@ -7130,7 +7111,7 @@ Server replied with error: %2 - Ignoring + Moving @@ -7138,18 +7119,23 @@ Server replied with error: %2 error error + + + Ignoring + + updating local metadata actualizando los metadatos locales - + Updating local metadata - + Updating local virtual files metadata @@ -7308,19 +7294,6 @@ Server replied with error: %2 - - OCC::FormatWarningsWizardPage - - - <b>Warning:</b> %1 - <b>Advertencia:</b> %1 - - - - <b>Warning:</b> - 1 - - OCC::AbstractPropagateRemoteDeleteEncrypted @@ -7334,6 +7307,19 @@ Server replied with error: %2 + + OCC::FormatWarningsWizardPage + + + <b>Warning:</b> %1 + <b>Advertencia:</b> %1 + + + + <b>Warning:</b> + 1 + + OCC::OAuth diff --git a/translations/client_es_CO.ts b/translations/client_es_CO.ts index 1b820813b307e..1c89084da0b2f 100644 --- a/translations/client_es_CO.ts +++ b/translations/client_es_CO.ts @@ -172,13 +172,13 @@ - + Resume sync for all - + Pause sync for all @@ -193,32 +193,32 @@ - + Settings - + Exit - + Current account avatar - + Current account status is online - + Current account status is do not disturb - + Account switcher and settings menu @@ -307,17 +307,17 @@ FileProviderEvictionDialog - + Evict materialised files - + Materialised items - + Reload @@ -493,17 +493,17 @@ MainWindow - + Nextcloud desktop main dialog - + Unified search results list - + New activities @@ -553,13 +553,13 @@ Should an account import be attempted? - + %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? @@ -572,12 +572,12 @@ Should the account be imported? - + Import - + Skip @@ -672,12 +672,12 @@ Should the account be imported? - + 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> @@ -708,17 +708,17 @@ Should the account be imported? Advertencia - + 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 @@ -968,7 +968,7 @@ This action will abort any currently running synchronization. No hay conexión a %1 en %2. - + Unable to connect to %1. @@ -978,7 +978,7 @@ This action will abort any currently running synchronization. - + You need to accept the terms of service @@ -1008,7 +1008,7 @@ This action will abort any currently running synchronization. Hay carpetas que no fueron sincronizadas porque son demasiado grandes o son de almacenamiento externo: - + There are folders that have grown in size beyond %1MB: %2 @@ -1210,34 +1210,39 @@ This action will abort any currently running synchronization. - + + Quit %1 + + + + %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. @@ -1253,11 +1258,6 @@ This action will abort any currently running synchronization. There was an error while accessing the configuration file at %1. Please make sure the file can be accessed by your system account. - - - Quit %1 - - OCC::AuthenticationDialog @@ -1720,13 +1720,13 @@ This action will abort any currently running synchronization. - - + + Encrypted metadata setup error! - + Encrypted metadata setup error: initial signature from server is empty. @@ -2276,28 +2276,28 @@ If this was an accident and you decide to keep your files, they will be re-synce Mantener archivos - + 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? @@ -2321,41 +2321,41 @@ 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 @@ -2426,32 +2426,32 @@ Alternatively, you can restore all deleted files by downloading them from the se Preparando para sincronizar. - + 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 @@ -2495,16 +2495,6 @@ Alternatively, you can restore all deleted files by downloading them from the se No valid folder selected! ¡No se ha seleccionado una carpeta válida! - - - The folder %1 is used in a folder sync connection! - - - - - Please choose a different location. The selected folder isn't valid. - - The selected path does not exist! @@ -2515,17 +2505,37 @@ Alternatively, you can restore all deleted files by downloading them from the se The selected path is not a folder! ¡La ruta seleccionada no es de una carpeta! + + + You have no permission to write to the selected folder! + ¡No tienes permisos para escribir en la carpeta seleccionada! + + + + The local folder %1 already contains a folder used in a folder sync connection. Please pick another one! + La carpeta local %1 contiene una carpeta ya usada en una conexión de sincronización de carpeta. ¡Por favor elige otra! + + + + The local folder %1 is already contained in a folder used in a folder sync connection. Please pick another one! + La carpeta local %1 ya está contenida en una carpeta usada en una conexión de sincronización de carpeta. ¡Por favor elige otra! + + + + There is already a sync from the server to this local folder. Please pick another local folder! + Ya existe una sincronización desde el servidor a esta carpeta local. ¡Por favor elige otra carpeta local! + + + + 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. - - - You have no permission to write to the selected folder! - ¡No tienes permisos para escribir en la carpeta seleccionada! - Please choose a different location. The path %1 doesn't exist. @@ -2543,26 +2553,11 @@ Alternatively, you can restore all deleted files by downloading them from the se folder location - - - The local folder %1 already contains a folder used in a folder sync connection. Please pick another one! - La carpeta local %1 contiene una carpeta ya usada en una conexión de sincronización de carpeta. ¡Por favor elige otra! - - - - The local folder %1 is already contained in a folder used in a folder sync connection. Please pick another one! - La carpeta local %1 ya está contenida en una carpeta usada en una conexión de sincronización de carpeta. ¡Por favor elige otra! - Please choose a different location. %1 is already contained in a folder used as a sync folder. - - - There is already a sync from the server to this local folder. Please pick another local folder! - Ya existe una sincronización desde el servidor a esta carpeta local. ¡Por favor elige otra carpeta local! - Please choose a different location. %1 is already being used as a sync folder for %2. @@ -2570,7 +2565,7 @@ Alternatively, you can restore all deleted files by downloading them from the se - + 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. @@ -2675,12 +2670,12 @@ For advanced users: this issue might be related to multiple sync database files Reconciliando los cambios - + 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'" @@ -2698,7 +2693,7 @@ For advanced users: this issue might be related to multiple sync database files , - + Download %1/s Example text: "Download 24Kb/s" (%1 is replaced by 24Kb (translated)) @@ -2715,7 +2710,7 @@ For advanced users: this issue might be related to multiple sync database files - + Upload %1/s Example text: "Upload 24Kb/s" (%1 is replaced by 24Kb (translated)) @@ -2766,12 +2761,12 @@ For advanced users: this issue might be related to multiple sync database files archivo %1 de %2 - + File %1 of %2 - + About to start syncing @@ -3137,7 +3132,7 @@ For advanced users: this issue might be related to multiple sync database files - + Show chat notification dialogs. @@ -3176,17 +3171,17 @@ Note that this selects only what pool upgrades are taken from, and that there ar - + daily - + enterprise - + - beta: contains versions with new features that may not be tested thoroughly - daily: contains versions created daily only for testing and development @@ -3195,7 +3190,7 @@ 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. @@ -3203,12 +3198,12 @@ 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 @@ -4246,30 +4241,30 @@ This is a new, experimental mode. If you decide to use it, please report any iss - + 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. @@ -4324,22 +4319,22 @@ This is a new, experimental mode. If you decide to use it, please report any iss - + 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). @@ -4374,7 +4369,7 @@ This is a new, experimental mode. If you decide to use it, please report any iss - + Could not upload file, because it is open in "%1". @@ -4457,18 +4452,18 @@ This is a new, experimental mode. If you decide to use it, please report any iss - - - - - - + + + + + + The folder %1 cannot be made read-only: %2 - - + + unknown exception @@ -4642,12 +4637,6 @@ This is a new, experimental mode. If you decide to use it, please report any iss File %1 downloaded but it resulted in a local file name clash! - - - - Could not get file %1 from local DB - - @@ -4655,6 +4644,13 @@ This is a new, experimental mode. If you decide to use it, please report any iss could not get file %1 from local DB + + + + + Could not get file %1 from local DB + + @@ -4756,13 +4752,13 @@ This is a new, experimental mode. If you decide to use it, please report any iss Código equivocado de HTTP regresado por el servidor. Se esperaba 201, pero se recibió "%1 %2". - - Could not get file %1 from local DB + + could not get file %1 from local DB - - could not get file %1 from local DB + + Could not get file %1 from local DB @@ -5013,7 +5009,7 @@ This is a new, experimental mode. If you decide to use it, please report any iss OCC::ShareManager - + Error @@ -5021,17 +5017,17 @@ This is a new, experimental mode. If you decide to use it, please report any iss OCC::ShareModel - + %1 days - + 1 day - + Today @@ -5061,7 +5057,7 @@ This is a new, experimental mode. If you decide to use it, please report any iss - + Could not find local folder for %1 @@ -5182,11 +5178,6 @@ Server replied with error: %2 Resharing this folder is not allowed - - - Copy internal link - - Copy secure file drop link @@ -5198,6 +5189,11 @@ Server replied with error: %2 Copy public link + + + Copy internal link + + Copy secure filedrop link @@ -5230,13 +5226,13 @@ Server replied with error: %2 - - Open in browser + + Edit - - Edit + + Open in browser @@ -5771,10 +5767,10 @@ Server replied with error: %2 - - - - + + + + Error updating metadata for a folder %1 @@ -5794,7 +5790,7 @@ Server replied with error: %2 - + Failed to unlock a folder. @@ -5812,7 +5808,7 @@ Server replied with error: %2 - + %1 notifications @@ -5828,17 +5824,17 @@ Server replied with error: %2 - + Rename file - + Open Nextcloud Assistant in browser - + Open Nextcloud Talk in browser @@ -5972,7 +5968,7 @@ Server replied with error: %2 - The Virtual filesystem feature does not support a drive as sync root + The Virtual filesystem feature requires a NTFS file system, %1 is using %2 @@ -5980,21 +5976,11 @@ Server replied with error: %2 Please choose a different location. %1 isn't a NTFS file system. It doesn't support virtual files. - - - The Virtual filesystem feature requires a NTFS file system, %1 is using %2 - - Please choose a different location. %1 is a network drive. It doesn't support virtual files. - - - The Virtual filesystem feature is not supported on network drives - - OCC::VfsDownloadErrorDialog @@ -6134,12 +6120,12 @@ Server replied with error: %2 - + 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. @@ -6215,23 +6201,23 @@ Server replied with error: %2 No se han configurado carpetas de sincronización - + %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. @@ -6677,7 +6663,7 @@ Server replied with error: %2 - + Sharing is not available for this folder @@ -7088,11 +7074,6 @@ Server replied with error: %2 downloading descargando - - - Downloading - - uploading @@ -7100,7 +7081,7 @@ Server replied with error: %2 - Uploading + Downloading @@ -7110,7 +7091,7 @@ Server replied with error: %2 - Deleting + Uploading @@ -7119,8 +7100,8 @@ Server replied with error: %2 moviendo - - Moving + + Deleting @@ -7130,7 +7111,7 @@ Server replied with error: %2 - Ignoring + Moving @@ -7138,18 +7119,23 @@ Server replied with error: %2 error error + + + Ignoring + + updating local metadata actualizando los metadatos locales - + Updating local metadata - + Updating local virtual files metadata @@ -7308,19 +7294,6 @@ Server replied with error: %2 - - OCC::FormatWarningsWizardPage - - - <b>Warning:</b> %1 - <b>Advertencia:</b> %1 - - - - <b>Warning:</b> - 1 - - OCC::AbstractPropagateRemoteDeleteEncrypted @@ -7334,6 +7307,19 @@ Server replied with error: %2 + + OCC::FormatWarningsWizardPage + + + <b>Warning:</b> %1 + <b>Advertencia:</b> %1 + + + + <b>Warning:</b> + 1 + + OCC::OAuth diff --git a/translations/client_es_CR.ts b/translations/client_es_CR.ts index 561c75e943445..e13b28353c676 100644 --- a/translations/client_es_CR.ts +++ b/translations/client_es_CR.ts @@ -172,13 +172,13 @@ - + Resume sync for all - + Pause sync for all @@ -193,32 +193,32 @@ - + Settings - + Exit - + Current account avatar - + Current account status is online - + Current account status is do not disturb - + Account switcher and settings menu @@ -307,17 +307,17 @@ FileProviderEvictionDialog - + Evict materialised files - + Materialised items - + Reload @@ -493,17 +493,17 @@ MainWindow - + Nextcloud desktop main dialog - + Unified search results list - + New activities @@ -553,13 +553,13 @@ Should an account import be attempted? - + %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? @@ -572,12 +572,12 @@ Should the account be imported? - + Import - + Skip @@ -672,12 +672,12 @@ Should the account be imported? - + 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> @@ -708,17 +708,17 @@ Should the account be imported? Advertencia - + 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 @@ -968,7 +968,7 @@ This action will abort any currently running synchronization. No hay conexión a %1 en %2. - + Unable to connect to %1. @@ -978,7 +978,7 @@ This action will abort any currently running synchronization. - + You need to accept the terms of service @@ -1008,7 +1008,7 @@ This action will abort any currently running synchronization. Hay carpetas que no fueron sincronizadas porque son demasiado grandes o son de almacenamiento externo: - + There are folders that have grown in size beyond %1MB: %2 @@ -1210,34 +1210,39 @@ This action will abort any currently running synchronization. - + + Quit %1 + + + + %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. @@ -1253,11 +1258,6 @@ This action will abort any currently running synchronization. There was an error while accessing the configuration file at %1. Please make sure the file can be accessed by your system account. - - - Quit %1 - - OCC::AuthenticationDialog @@ -1720,13 +1720,13 @@ This action will abort any currently running synchronization. - - + + Encrypted metadata setup error! - + Encrypted metadata setup error: initial signature from server is empty. @@ -2276,28 +2276,28 @@ If this was an accident and you decide to keep your files, they will be re-synce Mantener archivos - + 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? @@ -2321,41 +2321,41 @@ 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 @@ -2426,32 +2426,32 @@ Alternatively, you can restore all deleted files by downloading them from the se Preparando para sincronizar. - + 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 @@ -2495,16 +2495,6 @@ Alternatively, you can restore all deleted files by downloading them from the se No valid folder selected! ¡No se ha seleccionado una carpeta válida! - - - The folder %1 is used in a folder sync connection! - - - - - Please choose a different location. The selected folder isn't valid. - - The selected path does not exist! @@ -2515,17 +2505,37 @@ Alternatively, you can restore all deleted files by downloading them from the se The selected path is not a folder! ¡La ruta seleccionada no es de una carpeta! + + + You have no permission to write to the selected folder! + ¡No tienes permisos para escribir en la carpeta seleccionada! + + + + The local folder %1 already contains a folder used in a folder sync connection. Please pick another one! + La carpeta local %1 contiene una carpeta ya usada en una conexión de sincronización de carpeta. ¡Por favor elige otra! + + + + The local folder %1 is already contained in a folder used in a folder sync connection. Please pick another one! + La carpeta local %1 ya está contenida en una carpeta usada en una conexión de sincronización de carpeta. ¡Por favor elige otra! + + + + There is already a sync from the server to this local folder. Please pick another local folder! + Ya existe una sincronización desde el servidor a esta carpeta local. ¡Por favor elige otra carpeta local! + + + + 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. - - - You have no permission to write to the selected folder! - ¡No tienes permisos para escribir en la carpeta seleccionada! - Please choose a different location. The path %1 doesn't exist. @@ -2543,26 +2553,11 @@ Alternatively, you can restore all deleted files by downloading them from the se folder location - - - The local folder %1 already contains a folder used in a folder sync connection. Please pick another one! - La carpeta local %1 contiene una carpeta ya usada en una conexión de sincronización de carpeta. ¡Por favor elige otra! - - - - The local folder %1 is already contained in a folder used in a folder sync connection. Please pick another one! - La carpeta local %1 ya está contenida en una carpeta usada en una conexión de sincronización de carpeta. ¡Por favor elige otra! - Please choose a different location. %1 is already contained in a folder used as a sync folder. - - - There is already a sync from the server to this local folder. Please pick another local folder! - Ya existe una sincronización desde el servidor a esta carpeta local. ¡Por favor elige otra carpeta local! - Please choose a different location. %1 is already being used as a sync folder for %2. @@ -2570,7 +2565,7 @@ Alternatively, you can restore all deleted files by downloading them from the se - + 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. @@ -2675,12 +2670,12 @@ For advanced users: this issue might be related to multiple sync database files Reconciliando los cambios - + 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'" @@ -2698,7 +2693,7 @@ For advanced users: this issue might be related to multiple sync database files , - + Download %1/s Example text: "Download 24Kb/s" (%1 is replaced by 24Kb (translated)) @@ -2715,7 +2710,7 @@ For advanced users: this issue might be related to multiple sync database files - + Upload %1/s Example text: "Upload 24Kb/s" (%1 is replaced by 24Kb (translated)) @@ -2766,12 +2761,12 @@ For advanced users: this issue might be related to multiple sync database files archivo %1 de %2 - + File %1 of %2 - + About to start syncing @@ -3137,7 +3132,7 @@ For advanced users: this issue might be related to multiple sync database files - + Show chat notification dialogs. @@ -3176,17 +3171,17 @@ Note that this selects only what pool upgrades are taken from, and that there ar - + daily - + enterprise - + - beta: contains versions with new features that may not be tested thoroughly - daily: contains versions created daily only for testing and development @@ -3195,7 +3190,7 @@ 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. @@ -3203,12 +3198,12 @@ 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 @@ -4246,30 +4241,30 @@ This is a new, experimental mode. If you decide to use it, please report any iss - + 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. @@ -4324,22 +4319,22 @@ This is a new, experimental mode. If you decide to use it, please report any iss - + 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). @@ -4374,7 +4369,7 @@ This is a new, experimental mode. If you decide to use it, please report any iss - + Could not upload file, because it is open in "%1". @@ -4457,18 +4452,18 @@ This is a new, experimental mode. If you decide to use it, please report any iss - - - - - - + + + + + + The folder %1 cannot be made read-only: %2 - - + + unknown exception @@ -4642,12 +4637,6 @@ This is a new, experimental mode. If you decide to use it, please report any iss File %1 downloaded but it resulted in a local file name clash! - - - - Could not get file %1 from local DB - - @@ -4655,6 +4644,13 @@ This is a new, experimental mode. If you decide to use it, please report any iss could not get file %1 from local DB + + + + + Could not get file %1 from local DB + + @@ -4756,13 +4752,13 @@ This is a new, experimental mode. If you decide to use it, please report any iss Código equivocado de HTTP regresado por el servidor. Se esperaba 201, pero se recibió "%1 %2". - - Could not get file %1 from local DB + + could not get file %1 from local DB - - could not get file %1 from local DB + + Could not get file %1 from local DB @@ -5013,7 +5009,7 @@ This is a new, experimental mode. If you decide to use it, please report any iss OCC::ShareManager - + Error @@ -5021,17 +5017,17 @@ This is a new, experimental mode. If you decide to use it, please report any iss OCC::ShareModel - + %1 days - + 1 day - + Today @@ -5061,7 +5057,7 @@ This is a new, experimental mode. If you decide to use it, please report any iss - + Could not find local folder for %1 @@ -5182,11 +5178,6 @@ Server replied with error: %2 Resharing this folder is not allowed - - - Copy internal link - - Copy secure file drop link @@ -5198,6 +5189,11 @@ Server replied with error: %2 Copy public link + + + Copy internal link + + Copy secure filedrop link @@ -5230,13 +5226,13 @@ Server replied with error: %2 - - Open in browser + + Edit - - Edit + + Open in browser @@ -5771,10 +5767,10 @@ Server replied with error: %2 - - - - + + + + Error updating metadata for a folder %1 @@ -5794,7 +5790,7 @@ Server replied with error: %2 - + Failed to unlock a folder. @@ -5812,7 +5808,7 @@ Server replied with error: %2 - + %1 notifications @@ -5828,17 +5824,17 @@ Server replied with error: %2 - + Rename file - + Open Nextcloud Assistant in browser - + Open Nextcloud Talk in browser @@ -5972,7 +5968,7 @@ Server replied with error: %2 - The Virtual filesystem feature does not support a drive as sync root + The Virtual filesystem feature requires a NTFS file system, %1 is using %2 @@ -5980,21 +5976,11 @@ Server replied with error: %2 Please choose a different location. %1 isn't a NTFS file system. It doesn't support virtual files. - - - The Virtual filesystem feature requires a NTFS file system, %1 is using %2 - - Please choose a different location. %1 is a network drive. It doesn't support virtual files. - - - The Virtual filesystem feature is not supported on network drives - - OCC::VfsDownloadErrorDialog @@ -6134,12 +6120,12 @@ Server replied with error: %2 - + 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. @@ -6215,23 +6201,23 @@ Server replied with error: %2 No se han configurado carpetas de sincronización - + %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. @@ -6677,7 +6663,7 @@ Server replied with error: %2 - + Sharing is not available for this folder @@ -7088,11 +7074,6 @@ Server replied with error: %2 downloading descargando - - - Downloading - - uploading @@ -7100,7 +7081,7 @@ Server replied with error: %2 - Uploading + Downloading @@ -7110,7 +7091,7 @@ Server replied with error: %2 - Deleting + Uploading @@ -7119,8 +7100,8 @@ Server replied with error: %2 moviendo - - Moving + + Deleting @@ -7130,7 +7111,7 @@ Server replied with error: %2 - Ignoring + Moving @@ -7138,18 +7119,23 @@ Server replied with error: %2 error error + + + Ignoring + + updating local metadata actualizando los metadatos locales - + Updating local metadata - + Updating local virtual files metadata @@ -7308,19 +7294,6 @@ Server replied with error: %2 - - OCC::FormatWarningsWizardPage - - - <b>Warning:</b> %1 - <b>Advertencia:</b> %1 - - - - <b>Warning:</b> - 1 - - OCC::AbstractPropagateRemoteDeleteEncrypted @@ -7334,6 +7307,19 @@ Server replied with error: %2 + + OCC::FormatWarningsWizardPage + + + <b>Warning:</b> %1 + <b>Advertencia:</b> %1 + + + + <b>Warning:</b> + 1 + + OCC::OAuth diff --git a/translations/client_es_DO.ts b/translations/client_es_DO.ts index 66b36562f4ad9..f8d9c3cc3b6d4 100644 --- a/translations/client_es_DO.ts +++ b/translations/client_es_DO.ts @@ -172,13 +172,13 @@ - + Resume sync for all - + Pause sync for all @@ -193,32 +193,32 @@ - + Settings - + Exit - + Current account avatar - + Current account status is online - + Current account status is do not disturb - + Account switcher and settings menu @@ -307,17 +307,17 @@ FileProviderEvictionDialog - + Evict materialised files - + Materialised items - + Reload @@ -493,17 +493,17 @@ MainWindow - + Nextcloud desktop main dialog - + Unified search results list - + New activities @@ -553,13 +553,13 @@ Should an account import be attempted? - + %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? @@ -572,12 +572,12 @@ Should the account be imported? - + Import - + Skip @@ -672,12 +672,12 @@ Should the account be imported? - + 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> @@ -708,17 +708,17 @@ Should the account be imported? Advertencia - + 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 @@ -968,7 +968,7 @@ This action will abort any currently running synchronization. No hay conexión a %1 en %2. - + Unable to connect to %1. @@ -978,7 +978,7 @@ This action will abort any currently running synchronization. - + You need to accept the terms of service @@ -1008,7 +1008,7 @@ This action will abort any currently running synchronization. Hay carpetas que no fueron sincronizadas porque son demasiado grandes o son de almacenamiento externo: - + There are folders that have grown in size beyond %1MB: %2 @@ -1210,34 +1210,39 @@ This action will abort any currently running synchronization. - + + Quit %1 + + + + %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. @@ -1253,11 +1258,6 @@ This action will abort any currently running synchronization. There was an error while accessing the configuration file at %1. Please make sure the file can be accessed by your system account. - - - Quit %1 - - OCC::AuthenticationDialog @@ -1720,13 +1720,13 @@ This action will abort any currently running synchronization. - - + + Encrypted metadata setup error! - + Encrypted metadata setup error: initial signature from server is empty. @@ -2276,28 +2276,28 @@ If this was an accident and you decide to keep your files, they will be re-synce Mantener archivos - + 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? @@ -2321,41 +2321,41 @@ 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 @@ -2426,32 +2426,32 @@ Alternatively, you can restore all deleted files by downloading them from the se Preparando para sincronizar. - + 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 @@ -2495,16 +2495,6 @@ Alternatively, you can restore all deleted files by downloading them from the se No valid folder selected! ¡No se ha seleccionado una carpeta válida! - - - The folder %1 is used in a folder sync connection! - - - - - Please choose a different location. The selected folder isn't valid. - - The selected path does not exist! @@ -2515,17 +2505,37 @@ Alternatively, you can restore all deleted files by downloading them from the se The selected path is not a folder! ¡La ruta seleccionada no es de una carpeta! + + + You have no permission to write to the selected folder! + ¡No tienes permisos para escribir en la carpeta seleccionada! + + + + The local folder %1 already contains a folder used in a folder sync connection. Please pick another one! + La carpeta local %1 contiene una carpeta ya usada en una conexión de sincronización de carpeta. ¡Por favor elige otra! + + + + The local folder %1 is already contained in a folder used in a folder sync connection. Please pick another one! + La carpeta local %1 ya está contenida en una carpeta usada en una conexión de sincronización de carpeta. ¡Por favor elige otra! + + + + There is already a sync from the server to this local folder. Please pick another local folder! + Ya existe una sincronización desde el servidor a esta carpeta local. ¡Por favor elige otra carpeta local! + + + + 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. - - - You have no permission to write to the selected folder! - ¡No tienes permisos para escribir en la carpeta seleccionada! - Please choose a different location. The path %1 doesn't exist. @@ -2543,26 +2553,11 @@ Alternatively, you can restore all deleted files by downloading them from the se folder location - - - The local folder %1 already contains a folder used in a folder sync connection. Please pick another one! - La carpeta local %1 contiene una carpeta ya usada en una conexión de sincronización de carpeta. ¡Por favor elige otra! - - - - The local folder %1 is already contained in a folder used in a folder sync connection. Please pick another one! - La carpeta local %1 ya está contenida en una carpeta usada en una conexión de sincronización de carpeta. ¡Por favor elige otra! - Please choose a different location. %1 is already contained in a folder used as a sync folder. - - - There is already a sync from the server to this local folder. Please pick another local folder! - Ya existe una sincronización desde el servidor a esta carpeta local. ¡Por favor elige otra carpeta local! - Please choose a different location. %1 is already being used as a sync folder for %2. @@ -2570,7 +2565,7 @@ Alternatively, you can restore all deleted files by downloading them from the se - + 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. @@ -2675,12 +2670,12 @@ For advanced users: this issue might be related to multiple sync database files Reconciliando los cambios - + 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'" @@ -2698,7 +2693,7 @@ For advanced users: this issue might be related to multiple sync database files , - + Download %1/s Example text: "Download 24Kb/s" (%1 is replaced by 24Kb (translated)) @@ -2715,7 +2710,7 @@ For advanced users: this issue might be related to multiple sync database files - + Upload %1/s Example text: "Upload 24Kb/s" (%1 is replaced by 24Kb (translated)) @@ -2766,12 +2761,12 @@ For advanced users: this issue might be related to multiple sync database files archivo %1 de %2 - + File %1 of %2 - + About to start syncing @@ -3137,7 +3132,7 @@ For advanced users: this issue might be related to multiple sync database files - + Show chat notification dialogs. @@ -3176,17 +3171,17 @@ Note that this selects only what pool upgrades are taken from, and that there ar - + daily - + enterprise - + - beta: contains versions with new features that may not be tested thoroughly - daily: contains versions created daily only for testing and development @@ -3195,7 +3190,7 @@ 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. @@ -3203,12 +3198,12 @@ 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 @@ -4246,30 +4241,30 @@ This is a new, experimental mode. If you decide to use it, please report any iss - + 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. @@ -4324,22 +4319,22 @@ This is a new, experimental mode. If you decide to use it, please report any iss - + 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). @@ -4374,7 +4369,7 @@ This is a new, experimental mode. If you decide to use it, please report any iss - + Could not upload file, because it is open in "%1". @@ -4457,18 +4452,18 @@ This is a new, experimental mode. If you decide to use it, please report any iss - - - - - - + + + + + + The folder %1 cannot be made read-only: %2 - - + + unknown exception @@ -4642,12 +4637,6 @@ This is a new, experimental mode. If you decide to use it, please report any iss File %1 downloaded but it resulted in a local file name clash! - - - - Could not get file %1 from local DB - - @@ -4655,6 +4644,13 @@ This is a new, experimental mode. If you decide to use it, please report any iss could not get file %1 from local DB + + + + + Could not get file %1 from local DB + + @@ -4756,13 +4752,13 @@ This is a new, experimental mode. If you decide to use it, please report any iss Código equivocado de HTTP regresado por el servidor. Se esperaba 201, pero se recibió "%1 %2". - - Could not get file %1 from local DB + + could not get file %1 from local DB - - could not get file %1 from local DB + + Could not get file %1 from local DB @@ -5013,7 +5009,7 @@ This is a new, experimental mode. If you decide to use it, please report any iss OCC::ShareManager - + Error @@ -5021,17 +5017,17 @@ This is a new, experimental mode. If you decide to use it, please report any iss OCC::ShareModel - + %1 days - + 1 day - + Today @@ -5061,7 +5057,7 @@ This is a new, experimental mode. If you decide to use it, please report any iss - + Could not find local folder for %1 @@ -5182,11 +5178,6 @@ Server replied with error: %2 Resharing this folder is not allowed - - - Copy internal link - - Copy secure file drop link @@ -5198,6 +5189,11 @@ Server replied with error: %2 Copy public link + + + Copy internal link + + Copy secure filedrop link @@ -5230,13 +5226,13 @@ Server replied with error: %2 - - Open in browser + + Edit - - Edit + + Open in browser @@ -5771,10 +5767,10 @@ Server replied with error: %2 - - - - + + + + Error updating metadata for a folder %1 @@ -5794,7 +5790,7 @@ Server replied with error: %2 - + Failed to unlock a folder. @@ -5812,7 +5808,7 @@ Server replied with error: %2 - + %1 notifications @@ -5828,17 +5824,17 @@ Server replied with error: %2 - + Rename file - + Open Nextcloud Assistant in browser - + Open Nextcloud Talk in browser @@ -5972,7 +5968,7 @@ Server replied with error: %2 - The Virtual filesystem feature does not support a drive as sync root + The Virtual filesystem feature requires a NTFS file system, %1 is using %2 @@ -5980,21 +5976,11 @@ Server replied with error: %2 Please choose a different location. %1 isn't a NTFS file system. It doesn't support virtual files. - - - The Virtual filesystem feature requires a NTFS file system, %1 is using %2 - - Please choose a different location. %1 is a network drive. It doesn't support virtual files. - - - The Virtual filesystem feature is not supported on network drives - - OCC::VfsDownloadErrorDialog @@ -6134,12 +6120,12 @@ Server replied with error: %2 - + 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. @@ -6215,23 +6201,23 @@ Server replied with error: %2 No se han configurado carpetas de sincronización - + %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. @@ -6677,7 +6663,7 @@ Server replied with error: %2 - + Sharing is not available for this folder @@ -7088,11 +7074,6 @@ Server replied with error: %2 downloading descargando - - - Downloading - - uploading @@ -7100,7 +7081,7 @@ Server replied with error: %2 - Uploading + Downloading @@ -7110,7 +7091,7 @@ Server replied with error: %2 - Deleting + Uploading @@ -7119,8 +7100,8 @@ Server replied with error: %2 moviendo - - Moving + + Deleting @@ -7130,7 +7111,7 @@ Server replied with error: %2 - Ignoring + Moving @@ -7138,18 +7119,23 @@ Server replied with error: %2 error error + + + Ignoring + + updating local metadata actualizando los metadatos locales - + Updating local metadata - + Updating local virtual files metadata @@ -7308,19 +7294,6 @@ Server replied with error: %2 - - OCC::FormatWarningsWizardPage - - - <b>Warning:</b> %1 - <b>Advertencia:</b> %1 - - - - <b>Warning:</b> - 1 - - OCC::AbstractPropagateRemoteDeleteEncrypted @@ -7334,6 +7307,19 @@ Server replied with error: %2 + + OCC::FormatWarningsWizardPage + + + <b>Warning:</b> %1 + <b>Advertencia:</b> %1 + + + + <b>Warning:</b> + 1 + + OCC::OAuth diff --git a/translations/client_es_EC.ts b/translations/client_es_EC.ts index da5fcc215bdbf..15fce9f84325b 100644 --- a/translations/client_es_EC.ts +++ b/translations/client_es_EC.ts @@ -172,13 +172,13 @@ - + Resume sync for all - + Pause sync for all @@ -193,32 +193,32 @@ - + Settings - + Exit - + Current account avatar - + Current account status is online - + Current account status is do not disturb - + Account switcher and settings menu @@ -307,17 +307,17 @@ FileProviderEvictionDialog - + Evict materialised files - + Materialised items - + Reload @@ -493,17 +493,17 @@ MainWindow - + Nextcloud desktop main dialog - + Unified search results list - + New activities @@ -554,13 +554,13 @@ Should an account import be attempted? ¿Debería intentarse la importación de una cuenta? - + %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? @@ -573,12 +573,12 @@ Should the account be imported? Importación heredada - + Import - + Skip @@ -673,12 +673,12 @@ Should the account be imported? Cifrar carpeta - + 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> @@ -709,17 +709,17 @@ Should the account be imported? Advertencia - + 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 @@ -975,7 +975,7 @@ This action will abort any currently running synchronization. No hay conexión a %1 en %2. - + Unable to connect to %1. @@ -985,7 +985,7 @@ This action will abort any currently running synchronization. Error de configuración del servidor: %1 en %2. - + You need to accept the terms of service @@ -1015,7 +1015,7 @@ This action will abort any currently running synchronization. Hay carpetas que no fueron sincronizadas porque son demasiado grandes o son de almacenamiento externo: - + There are folders that have grown in size beyond %1MB: %2 @@ -1217,34 +1217,39 @@ This action will abort any currently running synchronization. Continuar - + + Quit %1 + Salir de %1 + + + %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. @@ -1260,11 +1265,6 @@ This action will abort any currently running synchronization. There was an error while accessing the configuration file at %1. Please make sure the file can be accessed by your system account. Ocurrió un error al acceder al archivo de configuración en %1. Asegúrate de que el archivo pueda ser accedido por tu cuenta de sistema. - - - Quit %1 - Salir de %1 - OCC::AuthenticationDialog @@ -1728,13 +1728,13 @@ This action will abort any currently running synchronization. Error del servidor: ¡La respuesta de PROPFIND no tiene formato XML! - - + + Encrypted metadata setup error! - + Encrypted metadata setup error: initial signature from server is empty. @@ -2290,28 +2290,28 @@ If this was an accident and you decide to keep your files, they will be re-synce Mantener archivos - + 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? @@ -2339,41 +2339,41 @@ 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" - + 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 @@ -2444,32 +2444,32 @@ Alternatively, you can restore all deleted files by downloading them from the se Preparando para sincronizar. - + 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 @@ -2513,16 +2513,6 @@ Alternatively, you can restore all deleted files by downloading them from the se No valid folder selected! ¡No se ha seleccionado una carpeta válida! - - - The folder %1 is used in a folder sync connection! - - - - - Please choose a different location. The selected folder isn't valid. - - The selected path does not exist! @@ -2533,17 +2523,37 @@ Alternatively, you can restore all deleted files by downloading them from the se The selected path is not a folder! ¡La ruta seleccionada no es de una carpeta! + + + You have no permission to write to the selected folder! + ¡No tienes permisos para escribir en la carpeta seleccionada! + + + + The local folder %1 already contains a folder used in a folder sync connection. Please pick another one! + La carpeta local %1 contiene una carpeta ya usada en una conexión de sincronización de carpeta. ¡Por favor elige otra! + + + + The local folder %1 is already contained in a folder used in a folder sync connection. Please pick another one! + La carpeta local %1 ya está contenida en una carpeta usada en una conexión de sincronización de carpeta. ¡Por favor elige otra! + + + + There is already a sync from the server to this local folder. Please pick another local folder! + Ya existe una sincronización desde el servidor a esta carpeta local. ¡Por favor elige otra carpeta local! + + + + 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. - - - You have no permission to write to the selected folder! - ¡No tienes permisos para escribir en la carpeta seleccionada! - Please choose a different location. The path %1 doesn't exist. @@ -2561,26 +2571,11 @@ Alternatively, you can restore all deleted files by downloading them from the se folder location - - - The local folder %1 already contains a folder used in a folder sync connection. Please pick another one! - La carpeta local %1 contiene una carpeta ya usada en una conexión de sincronización de carpeta. ¡Por favor elige otra! - - - - The local folder %1 is already contained in a folder used in a folder sync connection. Please pick another one! - La carpeta local %1 ya está contenida en una carpeta usada en una conexión de sincronización de carpeta. ¡Por favor elige otra! - Please choose a different location. %1 is already contained in a folder used as a sync folder. - - - There is already a sync from the server to this local folder. Please pick another local folder! - Ya existe una sincronización desde el servidor a esta carpeta local. ¡Por favor elige otra carpeta local! - Please choose a different location. %1 is already being used as a sync folder for %2. @@ -2588,7 +2583,7 @@ Alternatively, you can restore all deleted files by downloading them from the se - + 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. @@ -2693,12 +2688,12 @@ For advanced users: this issue might be related to multiple sync database files Reconciliando los cambios - + 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'" @@ -2716,7 +2711,7 @@ For advanced users: this issue might be related to multiple sync database files , - + Download %1/s Example text: "Download 24Kb/s" (%1 is replaced by 24Kb (translated)) @@ -2733,7 +2728,7 @@ For advanced users: this issue might be related to multiple sync database files ↓ %1/s - + Upload %1/s Example text: "Upload 24Kb/s" (%1 is replaced by 24Kb (translated)) @@ -2784,12 +2779,12 @@ For advanced users: this issue might be related to multiple sync database files archivo %1 de %2 - + File %1 of %2 - + About to start syncing @@ -3155,7 +3150,7 @@ For advanced users: this issue might be related to multiple sync database files Notificaciones del servidor que requieren atención. - + Show chat notification dialogs. @@ -3196,17 +3191,17 @@ Note that this selects only what pool upgrades are taken from, and that there ar Ten en cuenta que esto selecciona solo las actualizaciones que se tomarán del conjunto y que no hay versiones anteriores: Por lo tanto, volver del canal beta al canal estable generalmente no se puede hacer de inmediato y significa esperar una versión estable que sea más nueva que la versión beta instalada actualmente. - + daily - + enterprise - + - beta: contains versions with new features that may not be tested thoroughly - daily: contains versions created daily only for testing and development @@ -3215,7 +3210,7 @@ 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. @@ -3223,12 +3218,12 @@ 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 @@ -4279,30 +4274,30 @@ This is a new, experimental mode. If you decide to use it, please report any iss El nombre de archivo es un nombre reservado en este sistema de archivos. - + 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. @@ -4357,22 +4352,22 @@ This is a new, experimental mode. If you decide to use it, please report any iss El nombre de archivo está en la lista negra en el servidor. - + 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). @@ -4407,7 +4402,7 @@ This is a new, experimental mode. If you decide to use it, please report any iss No se puede sincronizar debido a una hora de modificación no válida - + Could not upload file, because it is open in "%1". @@ -4490,18 +4485,18 @@ This is a new, experimental mode. If you decide to use it, please report any iss Error al actualizar los metadatos debido a una hora de modificación no válida - - - - - - + + + + + + The folder %1 cannot be made read-only: %2 - - + + unknown exception @@ -4675,12 +4670,6 @@ This is a new, experimental mode. If you decide to use it, please report any iss File %1 downloaded but it resulted in a local file name clash! El archivo %1 se descargó, ¡pero generó un conflicto con un nombre de archivo local! - - - - Could not get file %1 from local DB - - @@ -4688,6 +4677,13 @@ This is a new, experimental mode. If you decide to use it, please report any iss could not get file %1 from local DB No se pudo obtener el archivo %1 de la base de datos local + + + + + Could not get file %1 from local DB + + @@ -4788,16 +4784,16 @@ 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". Código equivocado de HTTP regresado por el servidor. Se esperaba 201, pero se recibió "%1 %2". - - - Could not get file %1 from local DB - - could not get file %1 from local DB No se pudo obtener el archivo %1 de la base de datos local + + + Could not get file %1 from local DB + + Could not delete file record %1 from local DB @@ -5046,7 +5042,7 @@ This is a new, experimental mode. If you decide to use it, please report any iss OCC::ShareManager - + Error @@ -5054,17 +5050,17 @@ This is a new, experimental mode. If you decide to use it, please report any iss OCC::ShareModel - + %1 days - + 1 day - + Today @@ -5094,7 +5090,7 @@ This is a new, experimental mode. If you decide to use it, please report any iss Envío seguro de archivos - + Could not find local folder for %1 @@ -5217,11 +5213,6 @@ Server replied with error: %2 Resharing this folder is not allowed No se permite volver a compartir esta carpeta - - - Copy internal link - Copiar enlace interno - Copy secure file drop link @@ -5233,6 +5224,11 @@ Server replied with error: %2 Copy public link Copiar enlace público + + + Copy internal link + Copiar enlace interno + Copy secure filedrop link @@ -5264,16 +5260,16 @@ Server replied with error: %2 remaining time before lock expires Expira en %1 minutosExpira en %1 minutosExpira en %1 minutos - - - Open in browser - Abrir en el navegador - Edit Editar + + + Open in browser + Abrir en el navegador + Resolve conflict … @@ -5806,10 +5802,10 @@ Server replied with error: %2 - - - - + + + + Error updating metadata for a folder %1 @@ -5829,7 +5825,7 @@ Server replied with error: %2 - + Failed to unlock a folder. @@ -5847,7 +5843,7 @@ Server replied with error: %2 - + %1 notifications @@ -5863,17 +5859,17 @@ Server replied with error: %2 Resolver conflicto - + Rename file - + Open Nextcloud Assistant in browser - + Open Nextcloud Talk in browser @@ -6007,29 +6003,19 @@ Server replied with error: %2 - The Virtual filesystem feature does not support a drive as sync root - + The Virtual filesystem feature requires a NTFS file system, %1 is using %2 + La función del sistema de archivos virtual requiere un sistema de archivos NTFS, %1 está utilizando %2 Please choose a different location. %1 isn't a NTFS file system. It doesn't support virtual files. - - - The Virtual filesystem feature requires a NTFS file system, %1 is using %2 - La función del sistema de archivos virtual requiere un sistema de archivos NTFS, %1 está utilizando %2 - Please choose a different location. %1 is a network drive. It doesn't support virtual files. - - - The Virtual filesystem feature is not supported on network drives - - OCC::VfsDownloadErrorDialog @@ -6169,12 +6155,12 @@ Server replied with error: %2 El servidor en la cuenta %1 ejecuta una versión no compatible %2. Usar este cliente con versiones de servidor no compatibles no ha sido probado y puede ser peligroso. Procede bajo tu propio riesgo. - + 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. @@ -6250,23 +6236,23 @@ Server replied with error: %2 No se han configurado carpetas de sincronización - + %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. @@ -6712,7 +6698,7 @@ Server replied with error: %2 Buscar usuarios o grupos... - + Sharing is not available for this folder @@ -7123,11 +7109,6 @@ Server replied with error: %2 downloading descargando - - - Downloading - - uploading @@ -7135,7 +7116,7 @@ Server replied with error: %2 - Uploading + Downloading @@ -7145,7 +7126,7 @@ Server replied with error: %2 - Deleting + Uploading @@ -7154,8 +7135,8 @@ Server replied with error: %2 moviendo - - Moving + + Deleting @@ -7165,7 +7146,7 @@ Server replied with error: %2 - Ignoring + Moving @@ -7173,18 +7154,23 @@ Server replied with error: %2 error error + + + Ignoring + + updating local metadata actualizando los metadatos locales - + Updating local metadata - + Updating local virtual files metadata @@ -7343,19 +7329,6 @@ Server replied with error: %2 Limpiar menú de mensajes de estado - - OCC::FormatWarningsWizardPage - - - <b>Warning:</b> %1 - <b>Advertencia:</b> %1 - - - - <b>Warning:</b> - 1 - - OCC::AbstractPropagateRemoteDeleteEncrypted @@ -7369,6 +7342,19 @@ Server replied with error: %2 "%1 No se pudo desbloquear la carpeta encriptada %2". + + OCC::FormatWarningsWizardPage + + + <b>Warning:</b> %1 + <b>Advertencia:</b> %1 + + + + <b>Warning:</b> + 1 + + OCC::OAuth diff --git a/translations/client_es_GT.ts b/translations/client_es_GT.ts index 2bb4e2e397bb8..0f06b4e5655ad 100644 --- a/translations/client_es_GT.ts +++ b/translations/client_es_GT.ts @@ -172,13 +172,13 @@ - + Resume sync for all - + Pause sync for all @@ -193,32 +193,32 @@ - + Settings - + Exit - + Current account avatar - + Current account status is online - + Current account status is do not disturb - + Account switcher and settings menu @@ -307,17 +307,17 @@ FileProviderEvictionDialog - + Evict materialised files - + Materialised items - + Reload @@ -493,17 +493,17 @@ MainWindow - + Nextcloud desktop main dialog - + Unified search results list - + New activities @@ -553,13 +553,13 @@ Should an account import be attempted? - + %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? @@ -572,12 +572,12 @@ Should the account be imported? - + Import - + Skip @@ -672,12 +672,12 @@ Should the account be imported? - + 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> @@ -708,17 +708,17 @@ Should the account be imported? Advertencia - + 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 @@ -968,7 +968,7 @@ This action will abort any currently running synchronization. No hay conexión a %1 en %2. - + Unable to connect to %1. @@ -978,7 +978,7 @@ This action will abort any currently running synchronization. - + You need to accept the terms of service @@ -1008,7 +1008,7 @@ This action will abort any currently running synchronization. Hay carpetas que no fueron sincronizadas porque son demasiado grandes o son de almacenamiento externo: - + There are folders that have grown in size beyond %1MB: %2 @@ -1210,34 +1210,39 @@ This action will abort any currently running synchronization. - + + Quit %1 + + + + %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. @@ -1253,11 +1258,6 @@ This action will abort any currently running synchronization. There was an error while accessing the configuration file at %1. Please make sure the file can be accessed by your system account. - - - Quit %1 - - OCC::AuthenticationDialog @@ -1720,13 +1720,13 @@ This action will abort any currently running synchronization. - - + + Encrypted metadata setup error! - + Encrypted metadata setup error: initial signature from server is empty. @@ -2276,28 +2276,28 @@ If this was an accident and you decide to keep your files, they will be re-synce Mantener archivos - + 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? @@ -2321,41 +2321,41 @@ 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 @@ -2426,32 +2426,32 @@ Alternatively, you can restore all deleted files by downloading them from the se Preparando para sincronizar. - + 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 @@ -2495,16 +2495,6 @@ Alternatively, you can restore all deleted files by downloading them from the se No valid folder selected! ¡No se ha seleccionado una carpeta válida! - - - The folder %1 is used in a folder sync connection! - - - - - Please choose a different location. The selected folder isn't valid. - - The selected path does not exist! @@ -2515,17 +2505,37 @@ Alternatively, you can restore all deleted files by downloading them from the se The selected path is not a folder! ¡La ruta seleccionada no es de una carpeta! + + + You have no permission to write to the selected folder! + ¡No tienes permisos para escribir en la carpeta seleccionada! + + + + The local folder %1 already contains a folder used in a folder sync connection. Please pick another one! + La carpeta local %1 contiene una carpeta ya usada en una conexión de sincronización de carpeta. ¡Por favor elige otra! + + + + The local folder %1 is already contained in a folder used in a folder sync connection. Please pick another one! + La carpeta local %1 ya está contenida en una carpeta usada en una conexión de sincronización de carpeta. ¡Por favor elige otra! + + + + There is already a sync from the server to this local folder. Please pick another local folder! + Ya existe una sincronización desde el servidor a esta carpeta local. ¡Por favor elige otra carpeta local! + + + + 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. - - - You have no permission to write to the selected folder! - ¡No tienes permisos para escribir en la carpeta seleccionada! - Please choose a different location. The path %1 doesn't exist. @@ -2543,26 +2553,11 @@ Alternatively, you can restore all deleted files by downloading them from the se folder location - - - The local folder %1 already contains a folder used in a folder sync connection. Please pick another one! - La carpeta local %1 contiene una carpeta ya usada en una conexión de sincronización de carpeta. ¡Por favor elige otra! - - - - The local folder %1 is already contained in a folder used in a folder sync connection. Please pick another one! - La carpeta local %1 ya está contenida en una carpeta usada en una conexión de sincronización de carpeta. ¡Por favor elige otra! - Please choose a different location. %1 is already contained in a folder used as a sync folder. - - - There is already a sync from the server to this local folder. Please pick another local folder! - Ya existe una sincronización desde el servidor a esta carpeta local. ¡Por favor elige otra carpeta local! - Please choose a different location. %1 is already being used as a sync folder for %2. @@ -2570,7 +2565,7 @@ Alternatively, you can restore all deleted files by downloading them from the se - + 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. @@ -2675,12 +2670,12 @@ For advanced users: this issue might be related to multiple sync database files Reconciliando los cambios - + 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'" @@ -2698,7 +2693,7 @@ For advanced users: this issue might be related to multiple sync database files , - + Download %1/s Example text: "Download 24Kb/s" (%1 is replaced by 24Kb (translated)) @@ -2715,7 +2710,7 @@ For advanced users: this issue might be related to multiple sync database files - + Upload %1/s Example text: "Upload 24Kb/s" (%1 is replaced by 24Kb (translated)) @@ -2766,12 +2761,12 @@ For advanced users: this issue might be related to multiple sync database files archivo %1 de %2 - + File %1 of %2 - + About to start syncing @@ -3137,7 +3132,7 @@ For advanced users: this issue might be related to multiple sync database files - + Show chat notification dialogs. @@ -3176,17 +3171,17 @@ Note that this selects only what pool upgrades are taken from, and that there ar - + daily - + enterprise - + - beta: contains versions with new features that may not be tested thoroughly - daily: contains versions created daily only for testing and development @@ -3195,7 +3190,7 @@ 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. @@ -3203,12 +3198,12 @@ 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 @@ -4246,30 +4241,30 @@ This is a new, experimental mode. If you decide to use it, please report any iss - + 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. @@ -4324,22 +4319,22 @@ This is a new, experimental mode. If you decide to use it, please report any iss - + 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). @@ -4374,7 +4369,7 @@ This is a new, experimental mode. If you decide to use it, please report any iss - + Could not upload file, because it is open in "%1". @@ -4457,18 +4452,18 @@ This is a new, experimental mode. If you decide to use it, please report any iss - - - - - - + + + + + + The folder %1 cannot be made read-only: %2 - - + + unknown exception @@ -4642,12 +4637,6 @@ This is a new, experimental mode. If you decide to use it, please report any iss File %1 downloaded but it resulted in a local file name clash! - - - - Could not get file %1 from local DB - - @@ -4655,6 +4644,13 @@ This is a new, experimental mode. If you decide to use it, please report any iss could not get file %1 from local DB + + + + + Could not get file %1 from local DB + + @@ -4756,13 +4752,13 @@ This is a new, experimental mode. If you decide to use it, please report any iss Código equivocado de HTTP regresado por el servidor. Se esperaba 201, pero se recibió "%1 %2". - - Could not get file %1 from local DB + + could not get file %1 from local DB - - could not get file %1 from local DB + + Could not get file %1 from local DB @@ -5013,7 +5009,7 @@ This is a new, experimental mode. If you decide to use it, please report any iss OCC::ShareManager - + Error @@ -5021,17 +5017,17 @@ This is a new, experimental mode. If you decide to use it, please report any iss OCC::ShareModel - + %1 days - + 1 day - + Today @@ -5061,7 +5057,7 @@ This is a new, experimental mode. If you decide to use it, please report any iss - + Could not find local folder for %1 @@ -5182,11 +5178,6 @@ Server replied with error: %2 Resharing this folder is not allowed - - - Copy internal link - - Copy secure file drop link @@ -5198,6 +5189,11 @@ Server replied with error: %2 Copy public link + + + Copy internal link + + Copy secure filedrop link @@ -5230,13 +5226,13 @@ Server replied with error: %2 - - Open in browser + + Edit - - Edit + + Open in browser @@ -5771,10 +5767,10 @@ Server replied with error: %2 - - - - + + + + Error updating metadata for a folder %1 @@ -5794,7 +5790,7 @@ Server replied with error: %2 - + Failed to unlock a folder. @@ -5812,7 +5808,7 @@ Server replied with error: %2 - + %1 notifications @@ -5828,17 +5824,17 @@ Server replied with error: %2 - + Rename file - + Open Nextcloud Assistant in browser - + Open Nextcloud Talk in browser @@ -5972,7 +5968,7 @@ Server replied with error: %2 - The Virtual filesystem feature does not support a drive as sync root + The Virtual filesystem feature requires a NTFS file system, %1 is using %2 @@ -5980,21 +5976,11 @@ Server replied with error: %2 Please choose a different location. %1 isn't a NTFS file system. It doesn't support virtual files. - - - The Virtual filesystem feature requires a NTFS file system, %1 is using %2 - - Please choose a different location. %1 is a network drive. It doesn't support virtual files. - - - The Virtual filesystem feature is not supported on network drives - - OCC::VfsDownloadErrorDialog @@ -6134,12 +6120,12 @@ Server replied with error: %2 - + 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. @@ -6215,23 +6201,23 @@ Server replied with error: %2 No se han configurado carpetas de sincronización - + %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. @@ -6677,7 +6663,7 @@ Server replied with error: %2 - + Sharing is not available for this folder @@ -7088,11 +7074,6 @@ Server replied with error: %2 downloading descargando - - - Downloading - - uploading @@ -7100,7 +7081,7 @@ Server replied with error: %2 - Uploading + Downloading @@ -7110,7 +7091,7 @@ Server replied with error: %2 - Deleting + Uploading @@ -7119,8 +7100,8 @@ Server replied with error: %2 moviendo - - Moving + + Deleting @@ -7130,7 +7111,7 @@ Server replied with error: %2 - Ignoring + Moving @@ -7138,18 +7119,23 @@ Server replied with error: %2 error error + + + Ignoring + + updating local metadata actualizando los metadatos locales - + Updating local metadata - + Updating local virtual files metadata @@ -7308,19 +7294,6 @@ Server replied with error: %2 Borrar menú de mensaje de estado - - OCC::FormatWarningsWizardPage - - - <b>Warning:</b> %1 - <b>Advertencia:</b> %1 - - - - <b>Warning:</b> - 1 - - OCC::AbstractPropagateRemoteDeleteEncrypted @@ -7334,6 +7307,19 @@ Server replied with error: %2 + + OCC::FormatWarningsWizardPage + + + <b>Warning:</b> %1 + <b>Advertencia:</b> %1 + + + + <b>Warning:</b> + 1 + + OCC::OAuth diff --git a/translations/client_es_HN.ts b/translations/client_es_HN.ts index 6f198d58d3e84..a668d46056245 100644 --- a/translations/client_es_HN.ts +++ b/translations/client_es_HN.ts @@ -172,13 +172,13 @@ - + Resume sync for all - + Pause sync for all @@ -193,32 +193,32 @@ - + Settings - + Exit - + Current account avatar - + Current account status is online - + Current account status is do not disturb - + Account switcher and settings menu @@ -307,17 +307,17 @@ FileProviderEvictionDialog - + Evict materialised files - + Materialised items - + Reload @@ -493,17 +493,17 @@ MainWindow - + Nextcloud desktop main dialog - + Unified search results list - + New activities @@ -553,13 +553,13 @@ Should an account import be attempted? - + %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? @@ -572,12 +572,12 @@ Should the account be imported? - + Import - + Skip @@ -672,12 +672,12 @@ Should the account be imported? - + 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> @@ -708,17 +708,17 @@ Should the account be imported? Advertencia - + 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 @@ -968,7 +968,7 @@ This action will abort any currently running synchronization. No hay conexión a %1 en %2. - + Unable to connect to %1. @@ -978,7 +978,7 @@ This action will abort any currently running synchronization. - + You need to accept the terms of service @@ -1008,7 +1008,7 @@ This action will abort any currently running synchronization. Hay carpetas que no fueron sincronizadas porque son demasiado grandes o son de almacenamiento externo: - + There are folders that have grown in size beyond %1MB: %2 @@ -1210,34 +1210,39 @@ This action will abort any currently running synchronization. - + + Quit %1 + + + + %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. @@ -1253,11 +1258,6 @@ This action will abort any currently running synchronization. There was an error while accessing the configuration file at %1. Please make sure the file can be accessed by your system account. - - - Quit %1 - - OCC::AuthenticationDialog @@ -1720,13 +1720,13 @@ This action will abort any currently running synchronization. - - + + Encrypted metadata setup error! - + Encrypted metadata setup error: initial signature from server is empty. @@ -2276,28 +2276,28 @@ If this was an accident and you decide to keep your files, they will be re-synce Mantener archivos - + 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? @@ -2321,41 +2321,41 @@ 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 @@ -2426,32 +2426,32 @@ Alternatively, you can restore all deleted files by downloading them from the se Preparando para sincronizar. - + 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 @@ -2495,16 +2495,6 @@ Alternatively, you can restore all deleted files by downloading them from the se No valid folder selected! ¡No se ha seleccionado una carpeta válida! - - - The folder %1 is used in a folder sync connection! - - - - - Please choose a different location. The selected folder isn't valid. - - The selected path does not exist! @@ -2515,17 +2505,37 @@ Alternatively, you can restore all deleted files by downloading them from the se The selected path is not a folder! ¡La ruta seleccionada no es de una carpeta! + + + You have no permission to write to the selected folder! + ¡No tienes permisos para escribir en la carpeta seleccionada! + + + + The local folder %1 already contains a folder used in a folder sync connection. Please pick another one! + La carpeta local %1 contiene una carpeta ya usada en una conexión de sincronización de carpeta. ¡Por favor elige otra! + + + + The local folder %1 is already contained in a folder used in a folder sync connection. Please pick another one! + La carpeta local %1 ya está contenida en una carpeta usada en una conexión de sincronización de carpeta. ¡Por favor elige otra! + + + + There is already a sync from the server to this local folder. Please pick another local folder! + Ya existe una sincronización desde el servidor a esta carpeta local. ¡Por favor elige otra carpeta local! + + + + 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. - - - You have no permission to write to the selected folder! - ¡No tienes permisos para escribir en la carpeta seleccionada! - Please choose a different location. The path %1 doesn't exist. @@ -2543,26 +2553,11 @@ Alternatively, you can restore all deleted files by downloading them from the se folder location - - - The local folder %1 already contains a folder used in a folder sync connection. Please pick another one! - La carpeta local %1 contiene una carpeta ya usada en una conexión de sincronización de carpeta. ¡Por favor elige otra! - - - - The local folder %1 is already contained in a folder used in a folder sync connection. Please pick another one! - La carpeta local %1 ya está contenida en una carpeta usada en una conexión de sincronización de carpeta. ¡Por favor elige otra! - Please choose a different location. %1 is already contained in a folder used as a sync folder. - - - There is already a sync from the server to this local folder. Please pick another local folder! - Ya existe una sincronización desde el servidor a esta carpeta local. ¡Por favor elige otra carpeta local! - Please choose a different location. %1 is already being used as a sync folder for %2. @@ -2570,7 +2565,7 @@ Alternatively, you can restore all deleted files by downloading them from the se - + 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. @@ -2675,12 +2670,12 @@ For advanced users: this issue might be related to multiple sync database files Reconciliando los cambios - + 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'" @@ -2698,7 +2693,7 @@ For advanced users: this issue might be related to multiple sync database files , - + Download %1/s Example text: "Download 24Kb/s" (%1 is replaced by 24Kb (translated)) @@ -2715,7 +2710,7 @@ For advanced users: this issue might be related to multiple sync database files - + Upload %1/s Example text: "Upload 24Kb/s" (%1 is replaced by 24Kb (translated)) @@ -2766,12 +2761,12 @@ For advanced users: this issue might be related to multiple sync database files archivo %1 de %2 - + File %1 of %2 - + About to start syncing @@ -3137,7 +3132,7 @@ For advanced users: this issue might be related to multiple sync database files - + Show chat notification dialogs. @@ -3176,17 +3171,17 @@ Note that this selects only what pool upgrades are taken from, and that there ar - + daily - + enterprise - + - beta: contains versions with new features that may not be tested thoroughly - daily: contains versions created daily only for testing and development @@ -3195,7 +3190,7 @@ 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. @@ -3203,12 +3198,12 @@ 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 @@ -4246,30 +4241,30 @@ This is a new, experimental mode. If you decide to use it, please report any iss - + 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. @@ -4324,22 +4319,22 @@ This is a new, experimental mode. If you decide to use it, please report any iss - + 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). @@ -4374,7 +4369,7 @@ This is a new, experimental mode. If you decide to use it, please report any iss - + Could not upload file, because it is open in "%1". @@ -4457,18 +4452,18 @@ This is a new, experimental mode. If you decide to use it, please report any iss - - - - - - + + + + + + The folder %1 cannot be made read-only: %2 - - + + unknown exception @@ -4642,12 +4637,6 @@ This is a new, experimental mode. If you decide to use it, please report any iss File %1 downloaded but it resulted in a local file name clash! - - - - Could not get file %1 from local DB - - @@ -4655,6 +4644,13 @@ This is a new, experimental mode. If you decide to use it, please report any iss could not get file %1 from local DB + + + + + Could not get file %1 from local DB + + @@ -4756,13 +4752,13 @@ This is a new, experimental mode. If you decide to use it, please report any iss Código equivocado de HTTP regresado por el servidor. Se esperaba 201, pero se recibió "%1 %2". - - Could not get file %1 from local DB + + could not get file %1 from local DB - - could not get file %1 from local DB + + Could not get file %1 from local DB @@ -5013,7 +5009,7 @@ This is a new, experimental mode. If you decide to use it, please report any iss OCC::ShareManager - + Error @@ -5021,17 +5017,17 @@ This is a new, experimental mode. If you decide to use it, please report any iss OCC::ShareModel - + %1 days - + 1 day - + Today @@ -5061,7 +5057,7 @@ This is a new, experimental mode. If you decide to use it, please report any iss - + Could not find local folder for %1 @@ -5182,11 +5178,6 @@ Server replied with error: %2 Resharing this folder is not allowed - - - Copy internal link - - Copy secure file drop link @@ -5198,6 +5189,11 @@ Server replied with error: %2 Copy public link + + + Copy internal link + + Copy secure filedrop link @@ -5230,13 +5226,13 @@ Server replied with error: %2 - - Open in browser + + Edit - - Edit + + Open in browser @@ -5771,10 +5767,10 @@ Server replied with error: %2 - - - - + + + + Error updating metadata for a folder %1 @@ -5794,7 +5790,7 @@ Server replied with error: %2 - + Failed to unlock a folder. @@ -5812,7 +5808,7 @@ Server replied with error: %2 - + %1 notifications @@ -5828,17 +5824,17 @@ Server replied with error: %2 - + Rename file - + Open Nextcloud Assistant in browser - + Open Nextcloud Talk in browser @@ -5972,7 +5968,7 @@ Server replied with error: %2 - The Virtual filesystem feature does not support a drive as sync root + The Virtual filesystem feature requires a NTFS file system, %1 is using %2 @@ -5980,21 +5976,11 @@ Server replied with error: %2 Please choose a different location. %1 isn't a NTFS file system. It doesn't support virtual files. - - - The Virtual filesystem feature requires a NTFS file system, %1 is using %2 - - Please choose a different location. %1 is a network drive. It doesn't support virtual files. - - - The Virtual filesystem feature is not supported on network drives - - OCC::VfsDownloadErrorDialog @@ -6134,12 +6120,12 @@ Server replied with error: %2 - + 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. @@ -6215,23 +6201,23 @@ Server replied with error: %2 No se han configurado carpetas de sincronización - + %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. @@ -6677,7 +6663,7 @@ Server replied with error: %2 - + Sharing is not available for this folder @@ -7088,11 +7074,6 @@ Server replied with error: %2 downloading descargando - - - Downloading - - uploading @@ -7100,7 +7081,7 @@ Server replied with error: %2 - Uploading + Downloading @@ -7110,7 +7091,7 @@ Server replied with error: %2 - Deleting + Uploading @@ -7119,8 +7100,8 @@ Server replied with error: %2 moviendo - - Moving + + Deleting @@ -7130,7 +7111,7 @@ Server replied with error: %2 - Ignoring + Moving @@ -7138,18 +7119,23 @@ Server replied with error: %2 error error + + + Ignoring + + updating local metadata actualizando los metadatos locales - + Updating local metadata - + Updating local virtual files metadata @@ -7308,19 +7294,6 @@ Server replied with error: %2 - - OCC::FormatWarningsWizardPage - - - <b>Warning:</b> %1 - <b>Advertencia:</b> %1 - - - - <b>Warning:</b> - 1 - - OCC::AbstractPropagateRemoteDeleteEncrypted @@ -7334,6 +7307,19 @@ Server replied with error: %2 + + OCC::FormatWarningsWizardPage + + + <b>Warning:</b> %1 + <b>Advertencia:</b> %1 + + + + <b>Warning:</b> + 1 + + OCC::OAuth diff --git a/translations/client_es_MX.ts b/translations/client_es_MX.ts index 20b0f2aa596f6..00c6628f18e79 100644 --- a/translations/client_es_MX.ts +++ b/translations/client_es_MX.ts @@ -172,13 +172,13 @@ - + Resume sync for all Reanudar sincronización para todos - + Pause sync for all Pausar sincronización para todos @@ -193,32 +193,32 @@ Añadir nueva cuenta - + Settings Configuraciones - + Exit Salir - + Current account avatar Avatar de la cuenta actual - + Current account status is online - + Current account status is do not disturb - + Account switcher and settings menu @@ -307,17 +307,17 @@ FileProviderEvictionDialog - + Evict materialised files Desahuciar archivos materializados - + Materialised items Elementos materializados - + Reload Recargar @@ -493,17 +493,17 @@ MainWindow - + Nextcloud desktop main dialog - + Unified search results list - + New activities @@ -554,14 +554,14 @@ Should an account import be attempted? ¿Se debería intentar la importación de una cuenta? - + %1 accounts were detected from a legacy desktop client. Should the accounts be imported? %1 cuentas se detectaron desde un cliente de escritorio antiguo. ¿Se deberían importar estas cuentas? - + 1 account was detected from a legacy desktop client. Should the account be imported? 1 cuenta se detectó desde un cliente de escritorio antiguo. @@ -575,12 +575,12 @@ Should the account be imported? Importación antigua - + Import Importar - + Skip Omitir @@ -675,12 +675,12 @@ Should the account be imported? Cifrar la carpeta - + End-to-end Encryption Cifrado punto a punto - + 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 llave mnemotécnica de cifrado. @@ -712,17 +712,17 @@ Should the account be imported? Advertencia - + 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 problema de sincronización menor. 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. @@ -978,7 +978,7 @@ This action will abort any currently running synchronization. No hay conexión a %1 en %2. - + Unable to connect to %1. No se pudo conectar a %1. @@ -988,7 +988,7 @@ This action will abort any currently running synchronization. Error de configuración del servidor: %1 en %2. - + You need to accept the terms of service @@ -1018,7 +1018,7 @@ This action will abort any currently running synchronization. Hay carpetas que no fueron sincronizadas porque son demasiado grandes o son de almacenamiento externo: - + 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 @@ -1220,34 +1220,39 @@ This action will abort any currently running synchronization. Continuar - + + Quit %1 + Salir de %1 + + + %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 antigua - + Imported %1 and %2 from a legacy desktop client. %3 number of accounts and folders imported. list of users. @@ -1264,11 +1269,6 @@ This action will abort any currently running synchronization. There was an error while accessing the configuration file at %1. Please make sure the file can be accessed by your system account. Ocurrió un error al acceder al archivo de configuración en %1. Por favor, revise que su cuenta de sistema pueda acceder al archivo. - - - Quit %1 - Salir de %1 - OCC::AuthenticationDialog @@ -1733,13 +1733,13 @@ This action will abort any currently running synchronization. Error del servidor: ¡La respuesta 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. @@ -2295,29 +2295,29 @@ Si esto ha sido un accidente y decide mantener sus archivos, serán resincroniza Mantener archivos - + 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? @@ -2345,41 +2345,41 @@ Esto significa que el cliente de sincronización podría no cargar los cambios l %1 - + Virtual file download failed with code "%1", status "%2" and error message "%3" La descarga del archivo virtual falló con el 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. 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? ¿Eliminar todos los archivos? - + Proceed with Deletion - + Restore Files to Server - + Restore Files from Server @@ -2450,32 +2450,32 @@ Alternatively, you can restore all deleted files by downloading them from the se Preparando para sincronizar. - + 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 @@ -2519,16 +2519,6 @@ Alternatively, you can restore all deleted files by downloading them from the se No valid folder selected! ¡No se ha seleccionado una carpeta válida! - - - The folder %1 is used in a folder sync connection! - - - - - Please choose a different location. The selected folder isn't valid. - - The selected path does not exist! @@ -2539,17 +2529,37 @@ Alternatively, you can restore all deleted files by downloading them from the se The selected path is not a folder! ¡La ruta seleccionada no es de una carpeta! + + + You have no permission to write to the selected folder! + ¡No tienes permisos para escribir en la carpeta seleccionada! + + + + The local folder %1 already contains a folder used in a folder sync connection. Please pick another one! + La carpeta local %1 contiene una carpeta ya usada en una conexión de sincronización de carpeta. ¡Por favor elige otra! + + + + The local folder %1 is already contained in a folder used in a folder sync connection. Please pick another one! + La carpeta local %1 ya está contenida en una carpeta usada en una conexión de sincronización de carpeta. ¡Por favor elige otra! + + + + There is already a sync from the server to this local folder. Please pick another local folder! + Ya existe una sincronización desde el servidor a esta carpeta local. ¡Por favor elige otra carpeta local! + + + + 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. - - - You have no permission to write to the selected folder! - ¡No tienes permisos para escribir en la carpeta seleccionada! - Please choose a different location. The path %1 doesn't exist. @@ -2567,26 +2577,11 @@ Alternatively, you can restore all deleted files by downloading them from the se folder location - - - The local folder %1 already contains a folder used in a folder sync connection. Please pick another one! - La carpeta local %1 contiene una carpeta ya usada en una conexión de sincronización de carpeta. ¡Por favor elige otra! - - - - The local folder %1 is already contained in a folder used in a folder sync connection. Please pick another one! - La carpeta local %1 ya está contenida en una carpeta usada en una conexión de sincronización de carpeta. ¡Por favor elige otra! - Please choose a different location. %1 is already contained in a folder used as a sync folder. - - - There is already a sync from the server to this local folder. Please pick another local folder! - Ya existe una sincronización desde el servidor a esta carpeta local. ¡Por favor elige otra carpeta local! - Please choose a different location. %1 is already being used as a sync folder for %2. @@ -2594,7 +2589,7 @@ Alternatively, you can restore all deleted files by downloading them from the se - + 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. @@ -2699,12 +2694,12 @@ For advanced users: this issue might be related to multiple sync database files Reconciliando los cambios - + 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'" %1 %2 … @@ -2722,7 +2717,7 @@ For advanced users: this issue might be related to multiple sync database files , - + Download %1/s Example text: "Download 24Kb/s" (%1 is replaced by 24Kb (translated)) Descargando %1/s @@ -2739,7 +2734,7 @@ For advanced users: this issue might be related to multiple sync database files ↓ %1/s - + Upload %1/s Example text: "Upload 24Kb/s" (%1 is replaced by 24Kb (translated)) Cargando %1/s @@ -2790,12 +2785,12 @@ For advanced users: this issue might be related to multiple sync database files archivo %1 de %2 - + File %1 of %2 Archivo %1 de %2 - + About to start syncing A punto de comenzar la sincronización @@ -3161,7 +3156,7 @@ For advanced users: this issue might be related to multiple sync database files Notificaciones del servidor que requieren atención. - + Show chat notification dialogs. @@ -3202,17 +3197,17 @@ Note that this selects only what pool upgrades are taken from, and that there ar Tenga en cuenta que esto sólo selecciona de qué grupo se tomarán las actualizaciones y que no hay forma de regresar a una versión anterior: Por lo tanto, volver del canal beta al canal estable generalmente no se puede hacer de inmediato, y significa esperar por una versión estable que sea más reciente que la versión beta instalada actualmente. - + 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 @@ -3221,7 +3216,7 @@ 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. @@ -3229,12 +3224,12 @@ Downgrading versions is not possible immediately: changing from stable to enterp - + Changing update channel? ¿Cambiar el canal de actualizaciones? - + The channel determines which upgrades will be offered to install: - stable: contains tested versions considered reliable @@ -4285,30 +4280,30 @@ Este es un modo nuevo y experimental. Si decide usarlo, por favor informe cualqu El nombre de archivo es un nombre reservado en este sistema de archivos. - + 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 caracter "%2" no está soportado en este sistema de archivos. - + %1 name contains at least one invalid character El nombre %1 contiene al menos un caracter inválido - + %1 name is a reserved name on this file system. El nombre %1 es un nombre reservado en este sistema de archivos. @@ -4363,22 +4358,22 @@ Este es un modo nuevo y experimental. Si decide usarlo, por favor informe cualqu El nombre de archivo está prohibido en el servidor. - + 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). @@ -4413,7 +4408,7 @@ Este es un modo nuevo y experimental. Si decide usarlo, por favor informe cualqu No se puede sincronizar debido a una hora de modificación inválida - + Could not upload file, because it is open in "%1". No se puede cargar el archivo, porque está abierto en "%1". @@ -4496,18 +4491,18 @@ Este es un modo nuevo y experimental. Si decide usarlo, por favor informe cualqu Error al actualizar los metadatos debido a una hora de modificación inválida - - - - - - + + + + + + The folder %1 cannot be made read-only: %2 La carpeta %1 no se puede hacer de sólo lectura: %2 - - + + unknown exception @@ -4681,12 +4676,6 @@ Este es un modo nuevo y experimental. Si decide usarlo, por favor informe cualqu File %1 downloaded but it resulted in a local file name clash! ¡El archivo %1 se descargó pero generó un conflicto con un nombre de archivo local! - - - - Could not get file %1 from local DB - - @@ -4694,6 +4683,13 @@ Este es un modo nuevo y experimental. Si decide usarlo, por favor informe cualqu could not get file %1 from local DB no se pudo obtener el archivo %1 de la base de datos local + + + + + Could not get file %1 from local DB + + @@ -4794,16 +4790,16 @@ Este es un modo nuevo y experimental. Si decide usarlo, por favor informe cualqu Wrong HTTP code returned by server. Expected 201, but received "%1 %2". Código equivocado de HTTP regresado por el servidor. Se esperaba 201, pero se recibió "%1 %2". - - - Could not get file %1 from local DB - - could not get file %1 from local DB no se pudo obtener el archivo %1 de la base de datos local + + + Could not get file %1 from local DB + + Could not delete file record %1 from local DB @@ -5052,7 +5048,7 @@ Este es un modo nuevo y experimental. Si decide usarlo, por favor informe cualqu OCC::ShareManager - + Error Error @@ -5060,17 +5056,17 @@ Este es un modo nuevo y experimental. Si decide usarlo, por favor informe cualqu OCC::ShareModel - + %1 days - + 1 day - + Today @@ -5100,7 +5096,7 @@ Este es un modo nuevo y experimental. Si decide usarlo, por favor informe cualqu Entrega de archivos segura - + Could not find local folder for %1 No se pudo encontrar una carpeta local para %1 @@ -5223,11 +5219,6 @@ El servidor respondió con el error: %2 Resharing this folder is not allowed No se permite volver a compartir esta carpeta - - - Copy internal link - Copiar enlace interno - Copy secure file drop link @@ -5239,6 +5230,11 @@ El servidor respondió con el error: %2 Copy public link Copiar enlace público + + + Copy internal link + Copiar enlace interno + Copy secure filedrop link @@ -5270,16 +5266,16 @@ El servidor respondió con el error: %2 remaining time before lock expires Expira en %1 minutosExpira en %1 minutosExpira en %1 minutos - - - Open in browser - Abrir en el navegador - Edit Editar + + + Open in browser + Abrir en el navegador + Resolve conflict … @@ -5812,10 +5808,10 @@ El servidor respondió con el error: %2 - - - - + + + + Error updating metadata for a folder %1 Error al actualizar los metadatos de una carpeta %1 @@ -5835,7 +5831,7 @@ El servidor respondió con el error: %2 No se pudo añadir o eliminar al usuario %1 para acceder a la carpeta %2 - + Failed to unlock a folder. No se pudo desbloquear una carpeta. @@ -5853,7 +5849,7 @@ El servidor respondió con el error: %2 - + %1 notifications %1 notificaciones @@ -5869,17 +5865,17 @@ El servidor respondió con el error: %2 Resolver conflicto - + Rename file - + Open Nextcloud Assistant in browser Abrir el asistente de Nextcloud en el navegador - + Open Nextcloud Talk in browser Abrir Nextcloud Talk en el navegador @@ -6013,29 +6009,19 @@ El servidor respondió con el error: %2 - The Virtual filesystem feature does not support a drive as sync root - + The Virtual filesystem feature requires a NTFS file system, %1 is using %2 + La característica de archivos virtuales necesita un sistema de archivos NTFS, %1 está usando %2 Please choose a different location. %1 isn't a NTFS file system. It doesn't support virtual files. - - - The Virtual filesystem feature requires a NTFS file system, %1 is using %2 - La característica de archivos virtuales necesita un sistema de archivos NTFS, %1 está usando %2 - Please choose a different location. %1 is a network drive. It doesn't support virtual files. - - - The Virtual filesystem feature is not supported on network drives - - OCC::VfsDownloadErrorDialog @@ -6175,12 +6161,12 @@ El servidor respondió con el error: %2 El servidor de la cuenta %1 ejecuta una versión no soportada %2. Usar este cliente con versiones del servidor no soportadas no ha sido probado y puede ser peligroso. Proceda bajo su propio riesgo. - + 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. @@ -6256,23 +6242,23 @@ El servidor respondió con el error: %2 No se han configurado carpetas de sincronización - + %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 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: Ocurrió un problema. @@ -6718,7 +6704,7 @@ El servidor respondió con el error: %2 Buscar usuarios o grupos... - + Sharing is not available for this folder Compartir no está disponible para esta carpeta @@ -7129,11 +7115,6 @@ El servidor respondió con el error: %2 downloading descargando - - - Downloading - Descargando - uploading @@ -7141,8 +7122,8 @@ El servidor respondió con el error: %2 - Uploading - Cargando + Downloading + Descargando @@ -7151,8 +7132,8 @@ El servidor respondió con el error: %2 - Deleting - Eliminando + Uploading + Cargando @@ -7160,9 +7141,9 @@ El servidor respondió con el error: %2 moviendo - - Moving - Moviendo + + Deleting + Eliminando @@ -7171,26 +7152,31 @@ El servidor respondió con el error: %2 - Ignoring - Ignorando + Moving + Moviendo error error + + + Ignoring + Ignorando + updating local metadata actualizando los metadatos locales - + Updating local metadata Actualizando los metadatos locales - + Updating local virtual files metadata Actualizando los metadatos locales de los archivos virtuales @@ -7349,19 +7335,6 @@ El servidor respondió con el error: %2 Limpiar menú de mensajes de estado - - OCC::FormatWarningsWizardPage - - - <b>Warning:</b> %1 - <b>Advertencia:</b> %1 - - - - <b>Warning:</b> - 1 - - OCC::AbstractPropagateRemoteDeleteEncrypted @@ -7375,6 +7348,19 @@ El servidor respondió con el error: %2 "%1 No se pudo desbloquear la carpeta cifrada %2". + + OCC::FormatWarningsWizardPage + + + <b>Warning:</b> %1 + <b>Advertencia:</b> %1 + + + + <b>Warning:</b> + 1 + + OCC::OAuth diff --git a/translations/client_es_SV.ts b/translations/client_es_SV.ts index 4a2f666b895e8..798ca4d6c80e8 100644 --- a/translations/client_es_SV.ts +++ b/translations/client_es_SV.ts @@ -172,13 +172,13 @@ - + Resume sync for all - + Pause sync for all @@ -193,32 +193,32 @@ - + Settings - + Exit - + Current account avatar - + Current account status is online - + Current account status is do not disturb - + Account switcher and settings menu @@ -307,17 +307,17 @@ FileProviderEvictionDialog - + Evict materialised files - + Materialised items - + Reload @@ -493,17 +493,17 @@ MainWindow - + Nextcloud desktop main dialog - + Unified search results list - + New activities @@ -553,13 +553,13 @@ Should an account import be attempted? - + %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? @@ -572,12 +572,12 @@ Should the account be imported? - + Import - + Skip @@ -672,12 +672,12 @@ Should the account be imported? - + 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> @@ -708,17 +708,17 @@ Should the account be imported? Advertencia - + 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 @@ -968,7 +968,7 @@ This action will abort any currently running synchronization. No hay conexión a %1 en %2. - + Unable to connect to %1. @@ -978,7 +978,7 @@ This action will abort any currently running synchronization. - + You need to accept the terms of service @@ -1008,7 +1008,7 @@ This action will abort any currently running synchronization. Hay carpetas que no fueron sincronizadas porque son demasiado grandes o son de almacenamiento externo: - + There are folders that have grown in size beyond %1MB: %2 @@ -1210,34 +1210,39 @@ This action will abort any currently running synchronization. - + + Quit %1 + + + + %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. @@ -1253,11 +1258,6 @@ This action will abort any currently running synchronization. There was an error while accessing the configuration file at %1. Please make sure the file can be accessed by your system account. - - - Quit %1 - - OCC::AuthenticationDialog @@ -1720,13 +1720,13 @@ This action will abort any currently running synchronization. - - + + Encrypted metadata setup error! - + Encrypted metadata setup error: initial signature from server is empty. @@ -2276,28 +2276,28 @@ If this was an accident and you decide to keep your files, they will be re-synce Mantener archivos - + 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? @@ -2321,41 +2321,41 @@ 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 @@ -2426,32 +2426,32 @@ Alternatively, you can restore all deleted files by downloading them from the se Preparando para sincronizar. - + 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 @@ -2495,16 +2495,6 @@ Alternatively, you can restore all deleted files by downloading them from the se No valid folder selected! ¡No se ha seleccionado una carpeta válida! - - - The folder %1 is used in a folder sync connection! - - - - - Please choose a different location. The selected folder isn't valid. - - The selected path does not exist! @@ -2515,17 +2505,37 @@ Alternatively, you can restore all deleted files by downloading them from the se The selected path is not a folder! ¡La ruta seleccionada no es de una carpeta! + + + You have no permission to write to the selected folder! + ¡No tienes permisos para escribir en la carpeta seleccionada! + + + + The local folder %1 already contains a folder used in a folder sync connection. Please pick another one! + La carpeta local %1 contiene una carpeta ya usada en una conexión de sincronización de carpeta. ¡Por favor elige otra! + + + + The local folder %1 is already contained in a folder used in a folder sync connection. Please pick another one! + La carpeta local %1 ya está contenida en una carpeta usada en una conexión de sincronización de carpeta. ¡Por favor elige otra! + + + + There is already a sync from the server to this local folder. Please pick another local folder! + Ya existe una sincronización desde el servidor a esta carpeta local. ¡Por favor elige otra carpeta local! + + + + 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. - - - You have no permission to write to the selected folder! - ¡No tienes permisos para escribir en la carpeta seleccionada! - Please choose a different location. The path %1 doesn't exist. @@ -2543,26 +2553,11 @@ Alternatively, you can restore all deleted files by downloading them from the se folder location - - - The local folder %1 already contains a folder used in a folder sync connection. Please pick another one! - La carpeta local %1 contiene una carpeta ya usada en una conexión de sincronización de carpeta. ¡Por favor elige otra! - - - - The local folder %1 is already contained in a folder used in a folder sync connection. Please pick another one! - La carpeta local %1 ya está contenida en una carpeta usada en una conexión de sincronización de carpeta. ¡Por favor elige otra! - Please choose a different location. %1 is already contained in a folder used as a sync folder. - - - There is already a sync from the server to this local folder. Please pick another local folder! - Ya existe una sincronización desde el servidor a esta carpeta local. ¡Por favor elige otra carpeta local! - Please choose a different location. %1 is already being used as a sync folder for %2. @@ -2570,7 +2565,7 @@ Alternatively, you can restore all deleted files by downloading them from the se - + 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. @@ -2675,12 +2670,12 @@ For advanced users: this issue might be related to multiple sync database files Reconciliando los cambios - + 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'" @@ -2698,7 +2693,7 @@ For advanced users: this issue might be related to multiple sync database files , - + Download %1/s Example text: "Download 24Kb/s" (%1 is replaced by 24Kb (translated)) @@ -2715,7 +2710,7 @@ For advanced users: this issue might be related to multiple sync database files - + Upload %1/s Example text: "Upload 24Kb/s" (%1 is replaced by 24Kb (translated)) @@ -2766,12 +2761,12 @@ For advanced users: this issue might be related to multiple sync database files archivo %1 de %2 - + File %1 of %2 - + About to start syncing @@ -3137,7 +3132,7 @@ For advanced users: this issue might be related to multiple sync database files - + Show chat notification dialogs. @@ -3176,17 +3171,17 @@ Note that this selects only what pool upgrades are taken from, and that there ar - + daily - + enterprise - + - beta: contains versions with new features that may not be tested thoroughly - daily: contains versions created daily only for testing and development @@ -3195,7 +3190,7 @@ 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. @@ -3203,12 +3198,12 @@ 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 @@ -4246,30 +4241,30 @@ This is a new, experimental mode. If you decide to use it, please report any iss - + 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. @@ -4324,22 +4319,22 @@ This is a new, experimental mode. If you decide to use it, please report any iss - + 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). @@ -4374,7 +4369,7 @@ This is a new, experimental mode. If you decide to use it, please report any iss - + Could not upload file, because it is open in "%1". @@ -4457,18 +4452,18 @@ This is a new, experimental mode. If you decide to use it, please report any iss - - - - - - + + + + + + The folder %1 cannot be made read-only: %2 - - + + unknown exception @@ -4642,12 +4637,6 @@ This is a new, experimental mode. If you decide to use it, please report any iss File %1 downloaded but it resulted in a local file name clash! - - - - Could not get file %1 from local DB - - @@ -4655,6 +4644,13 @@ This is a new, experimental mode. If you decide to use it, please report any iss could not get file %1 from local DB + + + + + Could not get file %1 from local DB + + @@ -4756,13 +4752,13 @@ This is a new, experimental mode. If you decide to use it, please report any iss Código equivocado de HTTP regresado por el servidor. Se esperaba 201, pero se recibió "%1 %2". - - Could not get file %1 from local DB + + could not get file %1 from local DB - - could not get file %1 from local DB + + Could not get file %1 from local DB @@ -5013,7 +5009,7 @@ This is a new, experimental mode. If you decide to use it, please report any iss OCC::ShareManager - + Error @@ -5021,17 +5017,17 @@ This is a new, experimental mode. If you decide to use it, please report any iss OCC::ShareModel - + %1 days - + 1 day - + Today @@ -5061,7 +5057,7 @@ This is a new, experimental mode. If you decide to use it, please report any iss - + Could not find local folder for %1 @@ -5182,11 +5178,6 @@ Server replied with error: %2 Resharing this folder is not allowed - - - Copy internal link - - Copy secure file drop link @@ -5198,6 +5189,11 @@ Server replied with error: %2 Copy public link + + + Copy internal link + + Copy secure filedrop link @@ -5230,13 +5226,13 @@ Server replied with error: %2 - - Open in browser + + Edit - - Edit + + Open in browser @@ -5771,10 +5767,10 @@ Server replied with error: %2 - - - - + + + + Error updating metadata for a folder %1 @@ -5794,7 +5790,7 @@ Server replied with error: %2 - + Failed to unlock a folder. @@ -5812,7 +5808,7 @@ Server replied with error: %2 - + %1 notifications @@ -5828,17 +5824,17 @@ Server replied with error: %2 - + Rename file - + Open Nextcloud Assistant in browser - + Open Nextcloud Talk in browser @@ -5972,7 +5968,7 @@ Server replied with error: %2 - The Virtual filesystem feature does not support a drive as sync root + The Virtual filesystem feature requires a NTFS file system, %1 is using %2 @@ -5980,21 +5976,11 @@ Server replied with error: %2 Please choose a different location. %1 isn't a NTFS file system. It doesn't support virtual files. - - - The Virtual filesystem feature requires a NTFS file system, %1 is using %2 - - Please choose a different location. %1 is a network drive. It doesn't support virtual files. - - - The Virtual filesystem feature is not supported on network drives - - OCC::VfsDownloadErrorDialog @@ -6134,12 +6120,12 @@ Server replied with error: %2 - + 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. @@ -6215,23 +6201,23 @@ Server replied with error: %2 No se han configurado carpetas de sincronización - + %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. @@ -6677,7 +6663,7 @@ Server replied with error: %2 - + Sharing is not available for this folder @@ -7088,11 +7074,6 @@ Server replied with error: %2 downloading descargando - - - Downloading - - uploading @@ -7100,7 +7081,7 @@ Server replied with error: %2 - Uploading + Downloading @@ -7110,7 +7091,7 @@ Server replied with error: %2 - Deleting + Uploading @@ -7119,8 +7100,8 @@ Server replied with error: %2 moviendo - - Moving + + Deleting @@ -7130,7 +7111,7 @@ Server replied with error: %2 - Ignoring + Moving @@ -7138,18 +7119,23 @@ Server replied with error: %2 error error + + + Ignoring + + updating local metadata actualizando los metadatos locales - + Updating local metadata - + Updating local virtual files metadata @@ -7308,19 +7294,6 @@ Server replied with error: %2 - - OCC::FormatWarningsWizardPage - - - <b>Warning:</b> %1 - <b>Advertencia:</b> %1 - - - - <b>Warning:</b> - 1 - - OCC::AbstractPropagateRemoteDeleteEncrypted @@ -7334,6 +7307,19 @@ Server replied with error: %2 + + OCC::FormatWarningsWizardPage + + + <b>Warning:</b> %1 + <b>Advertencia:</b> %1 + + + + <b>Warning:</b> + 1 + + OCC::OAuth diff --git a/translations/client_eu.ts b/translations/client_eu.ts index 315c307393010..facd82177ac16 100644 --- a/translations/client_eu.ts +++ b/translations/client_eu.ts @@ -172,13 +172,13 @@ - + Resume sync for all Berrekin sinkronizazioa guztientzat - + Pause sync for all Pausatu sinkronizazioa guztientzat @@ -193,32 +193,32 @@ Gehitu kontu berria - + Settings Ezarpenak - + Exit Irten - + Current account avatar Uneko kontuaren avatarra - + Current account status is online Uneko kontuaren egoera: aktibo dago - + Current account status is do not disturb Uneko kontuaren egoera: ez molestatu - + Account switcher and settings menu Kontu aldatzailea eta ezarpenen menua @@ -307,17 +307,17 @@ FileProviderEvictionDialog - + Evict materialised files Materializatutako fitxategiak kanporatu - + Materialised items Materializatutako elementuak - + Reload Freskatu @@ -493,17 +493,17 @@ MainWindow - + Nextcloud desktop main dialog Mahaigaineko Nextcloud-en elkarrizketa nagusia - + Unified search results list Bilaketa-emaitzen zerrenda bateratua - + New activities Jarduera berriak @@ -554,14 +554,14 @@ Should an account import be attempted? Kontua inportatzen saiatu behar da? - + %1 accounts were detected from a legacy desktop client. Should the accounts be imported? %1 kontu hauteman dira mahaigaineko bezero zaharkitu batetik. Kontuak inportatu behar dira? - + 1 account was detected from a legacy desktop client. Should the account be imported? Kontu 1 hauteman dira mahaigaineko bezero zaharkitu batetik. @@ -575,12 +575,12 @@ Kontua inportatu behar da? Zaharraren inportazioa - + Import Inportatu - + Skip Saltatu @@ -675,12 +675,12 @@ Kontua inportatu behar da? Enkriptatu karpeta - + End-to-end Encryption Muturretik muturrerako zifratzea - + 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> Honek zure karpeta eta barruko fitxategi guztiak zifratuko ditu. Fitxategi hauek ez dira eskuragarri izango zure zifratze-gako mnemonikoaren gabe. @@ -712,17 +712,17 @@ Kontua inportatu behar da? Abisua - + Please wait for the folder to sync before trying to encrypt it. Mesedez itxaron karpeta sinkronizatu arte zifratzen saiatu baino lehen. - + The folder has a minor sync problem. Encryption of this folder will be possible once it has synced successfully Karpetak sinkronizazio arazo txikia dauka. Zifratzea ondo sinkronizatu ostean izango da posible. - + The folder has a sync error. Encryption of this folder will be possible once it has synced successfully Karpetak sinkronizazio errorea dauka. Zifratzea ondo sinkronizatu ostean izango da posible. @@ -978,7 +978,7 @@ Ekintza honek unean uneko sinkronizazioa bertan behera utziko du. Konexiorik ez %1-ekin %2-en - + Unable to connect to %1. Ezin izan da %1(e)ra konektatu. @@ -988,7 +988,7 @@ Ekintza honek unean uneko sinkronizazioa bertan behera utziko du. Zerbitzariaren konfigurazio errorea: %1 %2-n. - + You need to accept the terms of service Zerbitzuaren baldintzak onartu behar dituzu @@ -1018,7 +1018,7 @@ Ekintza honek unean uneko sinkronizazioa bertan behera utziko du. Hainbat karpeta ez dira sinkronizatu handiegiak direlako edo kanpoko biltegietan daudelako: - + There are folders that have grown in size beyond %1MB: %2 Badira %1MB baino gehiago handitu diren karpetak: %2 @@ -1220,34 +1220,39 @@ Ekintza honek unean uneko sinkronizazioa bertan behera utziko du. Jarraitu - + + Quit %1 + Irten %1(e)tik + + + %1 accounts number of accounts imported %1 kontu - + 1 account Kontu 1 - + %1 folders number of folders imported %1 karpeta - + 1 folder Karpeta 1 - + Legacy import Zaharkitutako inportazioa - + Imported %1 and %2 from a legacy desktop client. %3 number of accounts and folders imported. list of users. @@ -1264,11 +1269,6 @@ Ekintza honek unean uneko sinkronizazioa bertan behera utziko du. There was an error while accessing the configuration file at %1. Please make sure the file can be accessed by your system account. Errorea gertatu da %1 konfigurazio fitxategian sartzean. Egiaztatu zure sistemaren kontuak fitxategi hau atzitzeko baimena duela. - - - Quit %1 - Irten %1(e)tik - OCC::AuthenticationDialog @@ -1733,13 +1733,13 @@ Ekintza honek unean uneko sinkronizazioa bertan behera utziko du. Zerbitzariko errorea: PROPFINDaren erantzunak ez du XML formaturik! - - + + Encrypted metadata setup error! Zifratutako metadatuen konfigurazio errorea! - + Encrypted metadata setup error: initial signature from server is empty. Enkriptatutako metadatuen konfigurazio-errorea: zerbitzariaren hasierako sinadura hutsik dago. @@ -2295,29 +2295,29 @@ Istripua izan bada eta zure fitxategiak mantentzea erabakitzen baduzu, zerbitzar Mantendu fitxategiak - + A folder has surpassed the set folder size limit of %1MB: %2. %3 Karpeta batek ezarritako %1MB-ko karpeta-tamainaren muga gainditu du: %2. %3 - + Keep syncing Jarraitu sinkronizatzen - + Stop syncing Utzi sinkronizatzen - + The folder %1 has surpassed the set folder size limit of %2MB. % 1 karpetak ezarritako % 2MB karpeta-tamainaren muga gainditu du. - + Would you like to stop syncing this folder? Karpeta hau sinkronizatzeari utzi nahi al diozu? @@ -2345,12 +2345,12 @@ Honek esan nahi du sinkronizazio bezeroak agian ez duela berehalakoan igoko toki %1 - + Virtual file download failed with code "%1", status "%2" and error message "%3" Fitxategi birtuala deskargatzeak huts egin du "%1" kodea, "%2" egoera eta "%3" errore mezuarekin - + 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. @@ -2359,7 +2359,7 @@ Mesedez, berretsi ezabaketa hauekin jarraitu nahi duzun. Bestela, ezabatutako fitxategi guztiak leheneratu ditzakezu '%1' karpetatik zerbitzarira kargatuz. - + 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. @@ -2368,22 +2368,22 @@ Mesedez, berretsi ezabaketa hauekin jarraitu nahi duzun. Bestela, ezabatutako fitxategi guztiak leheneratu ditzakezu zerbitzaritik deskargatuta. - + Remove all files? Fitxategi guztiak ezabatu? - + Proceed with Deletion Ekin ezabaketari - + Restore Files to Server Leheneratu fitxategiak zerbitzarian - + Restore Files from Server Leheneratu fitxategiak zerbitzaritik @@ -2454,32 +2454,32 @@ Bestela, ezabatutako fitxategi guztiak leheneratu ditzakezu zerbitzaritik deskar Sinkronizazioa prestatzen. - + Syncing %1 of %2 (A few seconds left) Sinkronizatzen %2-tik %1 (segundo batzuk falta dira) - + Syncing %1 of %2 (%3 left) Sinkronizatzen %2-tik %1 (%3 segundo falta dira) - + Syncing %1 of %2 Sinkronizatzen %2-tik %1 - + Syncing %1 (A few seconds left) Sinkronizatzen %1 (segundo batzuk falta dira) - + Syncing %1 (%2 left) Sinkronizatzen %1 (%2 segundo falta dira) - + Syncing %1 Sinkronizatzen %1 @@ -2523,16 +2523,6 @@ Bestela, ezabatutako fitxategi guztiak leheneratu ditzakezu zerbitzaritik deskar No valid folder selected! Ez da baliozko karpetarik hautatu! - - - The folder %1 is used in a folder sync connection! - - - - - Please choose a different location. The selected folder isn't valid. - - The selected path does not exist! @@ -2543,17 +2533,37 @@ Bestela, ezabatutako fitxategi guztiak leheneratu ditzakezu zerbitzaritik deskar The selected path is not a folder! Hautatutako bidea ez da karpeta bat! + + + You have no permission to write to the selected folder! + Ez daukazu hautatutako karpetan idazteko baimenik! + + + + The local folder %1 already contains a folder used in a folder sync connection. Please pick another one! + Tokiko '%1' karpetak badu dagoeneko sinkronizatutako karpeta bat. Hautatu beste bat! + + + + The local folder %1 is already contained in a folder used in a folder sync connection. Please pick another one! + Tokiko '%1' karpeta dagoeneko sinkronizatutako karpeta batean dago. Hautatu beste bat! + + + + There is already a sync from the server to this local folder. Please pick another local folder! + Dagoeneko sinkronizazio bat dago zerbitzaritik karpeta lokal honetara. Aukeratu tokiko beste karpeta bat! + + + + 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. - - - You have no permission to write to the selected folder! - Ez daukazu hautatutako karpetan idazteko baimenik! - Please choose a different location. The path %1 doesn't exist. @@ -2571,26 +2581,11 @@ Bestela, ezabatutako fitxategi guztiak leheneratu ditzakezu zerbitzaritik deskar folder location - - - The local folder %1 already contains a folder used in a folder sync connection. Please pick another one! - Tokiko '%1' karpetak badu dagoeneko sinkronizatutako karpeta bat. Hautatu beste bat! - - - - The local folder %1 is already contained in a folder used in a folder sync connection. Please pick another one! - Tokiko '%1' karpeta dagoeneko sinkronizatutako karpeta batean dago. Hautatu beste bat! - Please choose a different location. %1 is already contained in a folder used as a sync folder. - - - There is already a sync from the server to this local folder. Please pick another local folder! - Dagoeneko sinkronizazio bat dago zerbitzaritik karpeta lokal honetara. Aukeratu tokiko beste karpeta bat! - Please choose a different location. %1 is already being used as a sync folder for %2. @@ -2598,7 +2593,7 @@ Bestela, ezabatutako fitxategi guztiak leheneratu ditzakezu zerbitzaritik deskar - + 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. @@ -2703,12 +2698,12 @@ For advanced users: this issue might be related to multiple sync database files Aldaketak bateratzen - + Syncing local and remote changes Tokiko eta urrutiko aldaketak sinkronizatzea - + %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 … @@ -2726,7 +2721,7 @@ For advanced users: this issue might be related to multiple sync database files , - + Download %1/s Example text: "Download 24Kb/s" (%1 is replaced by 24Kb (translated)) Deskargatu %1/s @@ -2743,7 +2738,7 @@ For advanced users: this issue might be related to multiple sync database files ↓ %1/s - + Upload %1/s Example text: "Upload 24Kb/s" (%1 is replaced by 24Kb (translated)) Igo %1/s @@ -2794,12 +2789,12 @@ For advanced users: this issue might be related to multiple sync database files %1. fitxategia %2tik - + File %1 of %2 %1. fitxategia %2tik - + About to start syncing Sinkronizatzen hastear @@ -3165,7 +3160,7 @@ For advanced users: this issue might be related to multiple sync database files Arreta eskatzen duten zerbitzariaren jakinarazpenak. - + Show chat notification dialogs. Erakutsi txat jakinarazpenen elkarrizketa-koadroak @@ -3206,17 +3201,17 @@ Note that this selects only what pool upgrades are taken from, and that there ar Kontuan izan honek bertsio berriak nondik hartu bakarrik hautatzen duela, ezin dela bertsio zaharretara itzuli: beraz, beta kanaletik batzuetan ezin da automatikoki kanal egonkorrera itzuli, jarrita dagoena baino berriagoa den bertsio egonkor bati itxaron behar zaio. - + daily egunero - + enterprise enterprise - + - beta: contains versions with new features that may not be tested thoroughly - daily: contains versions created daily only for testing and development @@ -3228,7 +3223,7 @@ Downgrading versions is not possible immediately: changing from beta to stable m Bertsioak ezin dira berehala aldatu: betatik egonkorra aldatzeak bertsio egonkor berriaren zain egotea suposatzen du. - + - enterprise: contains stable versions for customers. Downgrading versions is not possible immediately: changing from stable to enterprise means waiting for the new enterprise version. @@ -3238,12 +3233,12 @@ Downgrading versions is not possible immediately: changing from stable to enterp Bertsioak ezin dira berehala jaitsi: egonkorretik enpresara aldatzeak enpresa bertsio berriaren zain egotea dakar. - + Changing update channel? Eguneratze kanala aldatzen? - + The channel determines which upgrades will be offered to install: - stable: contains tested versions considered reliable @@ -4295,30 +4290,30 @@ Modu hau berria eta experimentala da. Erabiltzea erabakitzen baduzu, agertzen di Fitxategi-izena izen erreserbatua da fitxategi-sistema honetan. - + Folder name of folder entity to use when warning about invalid name Karpeta - + File name of folder entity to use when warning about invalid name Fitxategia - + %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 "%2" karakterea duen %1 izena ez da onartzen fitxategi-sistema honetan. - + %1 name contains at least one invalid character %1 izenak karaktere baliogabe bat du gutxienez - + %1 name is a reserved name on this file system. %1 izena erreserbatua da fitxategi-sistema honetan. @@ -4373,22 +4368,22 @@ Modu hau berria eta experimentala da. Erabiltzea erabakitzen baduzu, agertzen di Fitxategiaren izena zerrenda beltzean dago zerbitzarian. - + Reason: the entire filename is forbidden. Arrazoia: fitxategi-izen osoa debekatuta dago. - + Reason: the filename has a forbidden base name (filename start). Arrazoia: fitxategi-izenak oinarri-izen debekatua du (fitxategi-izenaren hasiera). - + Reason: the file has a forbidden extension (.%1). Arrazoia: fitxategiak luzapen debekatua du (.%1). - + Reason: the filename contains a forbidden character (%1). Arrazoia: fitxategi-izenak karaktere debekatu bat dauka (%1). @@ -4423,7 +4418,7 @@ Modu hau berria eta experimentala da. Erabiltzea erabakitzen baduzu, agertzen di Ezin da sinkronizatu aldaketa-ordu baliogabea delako - + Could not upload file, because it is open in "%1". Ezin izan da fitxategia kargatu, "%1"(e)n irekita dagoelako. @@ -4506,18 +4501,18 @@ Modu hau berria eta experimentala da. Erabiltzea erabakitzen baduzu, agertzen di Errorea metadatuak eguneratzen aldaketa-data baliogabeagatik - - - - - - + + + + + + The folder %1 cannot be made read-only: %2 %1 karpeta ezin da irakurtzeko soilik bihurtu: %2 - - + + unknown exception @@ -4691,12 +4686,6 @@ Modu hau berria eta experimentala da. Erabiltzea erabakitzen baduzu, agertzen di File %1 downloaded but it resulted in a local file name clash! %1 fitxategia deskargatu da, baina fitxategi lokal batekin gatazka du! - - - - Could not get file %1 from local DB - Ezin izan da %1 fitxategia datu-base lokaletik lortu - @@ -4704,6 +4693,13 @@ Modu hau berria eta experimentala da. Erabiltzea erabakitzen baduzu, agertzen di could not get file %1 from local DB Ezin izan da %1 fitxategia datu-base lokaletik lortu + + + + + Could not get file %1 from local DB + Ezin izan da %1 fitxategia datu-base lokaletik lortu + @@ -4805,13 +4801,13 @@ Modu hau berria eta experimentala da. Erabiltzea erabakitzen baduzu, agertzen di HTTP kode okerra erantzun du zerbitzariak. 201 espero zen, baina "%1 %2" jaso da. - - Could not get file %1 from local DB + + could not get file %1 from local DB Ezin izan da %1 fitxategia datu-base lokaletik lortu - - could not get file %1 from local DB + + Could not get file %1 from local DB Ezin izan da %1 fitxategia datu-base lokaletik lortu @@ -5062,7 +5058,7 @@ Modu hau berria eta experimentala da. Erabiltzea erabakitzen baduzu, agertzen di OCC::ShareManager - + Error Errorea @@ -5070,17 +5066,17 @@ Modu hau berria eta experimentala da. Erabiltzea erabakitzen baduzu, agertzen di OCC::ShareModel - + %1 days %1 egun - + 1 day egun 1 - + Today Gaur @@ -5110,7 +5106,7 @@ Modu hau berria eta experimentala da. Erabiltzea erabakitzen baduzu, agertzen di Fitxategi-jartze segurua - + Could not find local folder for %1 Ezin da %1 karpeta lokala aurkitu @@ -5233,11 +5229,6 @@ Zerbitzariak errorearekin erantzun du: %2 Resharing this folder is not allowed Karpeta hau berriro partekatzea ez dago onartuta - - - Copy internal link - Kopiatu barne esteka - Copy secure file drop link @@ -5249,6 +5240,11 @@ Zerbitzariak errorearekin erantzun du: %2 Copy public link Kopiatu esteka publikoa + + + Copy internal link + Kopiatu barne esteka + Copy secure filedrop link @@ -5280,16 +5276,16 @@ Zerbitzariak errorearekin erantzun du: %2 remaining time before lock expires Minutu %1ean iraungiko da%1 minututan iraungiko da - - - Open in browser - Ireki nabigatzailean - Edit Editatu + + + Open in browser + Ireki nabigatzailean + Resolve conflict … @@ -5822,10 +5818,10 @@ Zerbitzariak errorearekin erantzun du: %2 - - - - + + + + Error updating metadata for a folder %1 Errorea %1 karpetaren metadatuak eguneratzean @@ -5845,7 +5841,7 @@ Zerbitzariak errorearekin erantzun du: %2 Ezin izan dira %1 erabiltzailearen baimenak gehitu edo kendu %2 karpetara sartzeko - + Failed to unlock a folder. Ezin izan da karpeta bat desblokeatu. @@ -5863,7 +5859,7 @@ Zerbitzariak errorearekin erantzun du: %2 - + %1 notifications %1 jakinarazpen @@ -5879,17 +5875,17 @@ Zerbitzariak errorearekin erantzun du: %2 Ebatzi gatazka - + Rename file Berrizendatu fitxategia - + Open Nextcloud Assistant in browser Ireki Nextcloud Laguntzailea nabigatzailean - + Open Nextcloud Talk in browser Ireki Nextcloud Talk nabigatzailean @@ -6023,29 +6019,19 @@ Zerbitzariak errorearekin erantzun du: %2 - The Virtual filesystem feature does not support a drive as sync root - + The Virtual filesystem feature requires a NTFS file system, %1 is using %2 + Fitxategi birtualen sistemak NTFS fitxategi sistema bat behar du, %1-ek darabilena %2 da. Please choose a different location. %1 isn't a NTFS file system. It doesn't support virtual files. - - - The Virtual filesystem feature requires a NTFS file system, %1 is using %2 - Fitxategi birtualen sistemak NTFS fitxategi sistema bat behar du, %1-ek darabilena %2 da. - Please choose a different location. %1 is a network drive. It doesn't support virtual files. - - - The Virtual filesystem feature is not supported on network drives - - OCC::VfsDownloadErrorDialog @@ -6185,12 +6171,12 @@ Zerbitzariak errorearekin erantzun du: %2 %1 kontuko zerbitzariak onartzen ez den %2 bertsioa darabil. Onartzen ez diren zerbitzari bertsioekin bezero hau erabiltzea probatu gabe dago eta potentzialki arriskutsua da. Zure ardurapean jarraitu. - + Terms of service Zerbitzuaren baldintzak - + 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. Zure %1 kontuak zure zerbitzariaren zerbitzuaren baldintzak onartzea eskatzen du. %2-ra birbideratuko zaituzte irakurri duzula eta horrekin ados zaudela aitortzeko. @@ -6266,23 +6252,23 @@ Zerbitzariak errorearekin erantzun du: %2 Ez dira ezarri sinkronizatzeko karpetak - + %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. %1-rako macOS VFS: Sinkronizazioa abian da. - + macOS VFS for %1: Last sync was successful. macOS VFS % 1erako: Azken sinkronizazioa behar bezala burutu da. - + macOS VFS for %1: A problem was encountered. macOS VFS % 1erako: arazo bat aurkitu da. @@ -6728,7 +6714,7 @@ Zerbitzariak errorearekin erantzun du: %2 Bilatu erabiltzaile edo taldeak... - + Sharing is not available for this folder Partekatzea ez dago karpeta honetarako eskuragarri @@ -7139,11 +7125,6 @@ Zerbitzariak errorearekin erantzun du: %2 downloading deskargatzen - - - Downloading - Deskargatzen - uploading @@ -7151,8 +7132,8 @@ Zerbitzariak errorearekin erantzun du: %2 - Uploading - Igotzen + Downloading + Deskargatzen @@ -7161,8 +7142,8 @@ Zerbitzariak errorearekin erantzun du: %2 - Deleting - Ezabatzen + Uploading + Igotzen @@ -7170,9 +7151,9 @@ Zerbitzariak errorearekin erantzun du: %2 mugitzen - - Moving - Mugitzen + + Deleting + Ezabatzen @@ -7181,26 +7162,31 @@ Zerbitzariak errorearekin erantzun du: %2 - Ignoring - Ezikusten + Moving + Mugitzen error errorea + + + Ignoring + Ezikusten + updating local metadata metadatu lokalak eguneratzen - + Updating local metadata Metadatu lokalak eguneratzen - + Updating local virtual files metadata Fitxategi lokal birtualen metadatuak eguneratzen @@ -7359,19 +7345,6 @@ Zerbitzariak errorearekin erantzun du: %2 Garbitu egoera mezuaren menua - - OCC::FormatWarningsWizardPage - - - <b>Warning:</b> %1 - <b>Abisua:</b> %1 - - - - <b>Warning:</b> - <b>Abisua:</b> - - OCC::AbstractPropagateRemoteDeleteEncrypted @@ -7385,6 +7358,19 @@ Zerbitzariak errorearekin erantzun du: %2 "%1(e)k huts egin du %2 karpeta enkriptatua desblokeatzean". + + OCC::FormatWarningsWizardPage + + + <b>Warning:</b> %1 + <b>Abisua:</b> %1 + + + + <b>Warning:</b> + <b>Abisua:</b> + + OCC::OAuth diff --git a/translations/client_fa.ts b/translations/client_fa.ts index 8fb806363cd5d..a5d1468daf81e 100644 --- a/translations/client_fa.ts +++ b/translations/client_fa.ts @@ -172,13 +172,13 @@ - + Resume sync for all - + Pause sync for all @@ -193,32 +193,32 @@ - + Settings - + Exit - + Current account avatar - + Current account status is online - + Current account status is do not disturb - + Account switcher and settings menu @@ -307,17 +307,17 @@ FileProviderEvictionDialog - + Evict materialised files - + Materialised items - + Reload @@ -493,17 +493,17 @@ MainWindow - + Nextcloud desktop main dialog - + Unified search results list - + New activities @@ -554,13 +554,13 @@ Should an account import be attempted? Should an account import be attempted? - + %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? @@ -573,12 +573,12 @@ Should the account be imported? Legacy import - + Import - + Skip @@ -673,12 +673,12 @@ Should the account be imported? 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> @@ -709,17 +709,17 @@ Should the account be imported? هشدار - + 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 @@ -975,7 +975,7 @@ This action will abort any currently running synchronization. اتصال به 1% در 2% وجود ندارد. - + Unable to connect to %1. @@ -985,7 +985,7 @@ This action will abort any currently running synchronization. Server configuration error: %1 at %2. - + You need to accept the terms of service @@ -1015,7 +1015,7 @@ This action will abort any currently running synchronization. پوشه‌هایی وجود دارند که همگام سازی نشده اند زیرا آن ها بسیار بزرگ یا مخازن خارجی هستند: - + There are folders that have grown in size beyond %1MB: %2 There are folders that have grown in size beyond %1MB: %2 @@ -1217,34 +1217,39 @@ This action will abort any currently running synchronization. Continue - + + Quit %1 + Quit %1 + + + %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. @@ -1260,11 +1265,6 @@ This action will abort any currently running synchronization. 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. - - - Quit %1 - Quit %1 - OCC::AuthenticationDialog @@ -1729,13 +1729,13 @@ This action will abort any currently running synchronization. Server error: PROPFIND reply is not XML formatted! - - + + Encrypted metadata setup error! - + Encrypted metadata setup error: initial signature from server is empty. @@ -2291,29 +2291,29 @@ If this was an accident and you decide to keep your files, they will be re-synce نگه داشتن فایل ها - + 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? @@ -2341,41 +2341,41 @@ 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" - + 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 @@ -2446,32 +2446,32 @@ Alternatively, you can restore all deleted files by downloading them from the se آماده سازی برای همگام سازی کردن. - + 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 @@ -2515,16 +2515,6 @@ Alternatively, you can restore all deleted files by downloading them from the se No valid folder selected! هیچ پوشه‌ی معتبری انتخاب نشده است! - - - The folder %1 is used in a folder sync connection! - - - - - Please choose a different location. The selected folder isn't valid. - - The selected path does not exist! @@ -2535,17 +2525,37 @@ Alternatively, you can restore all deleted files by downloading them from the se The selected path is not a folder! مسیر انتخاب شده یک پوشه نیست! + + + You have no permission to write to the selected folder! + شما اجازه نوشتن در پوشه های انتخاب شده را ندارید! + + + + The local folder %1 already contains a folder used in a folder sync connection. Please pick another one! + پوشه محلی 1% از قبل شامل یک پوشه استفاده شده در یک اتصال همگام سازی پوشه است. لطفا یکی دیگر را انتخاب کنید! + + + + The local folder %1 is already contained in a folder used in a folder sync connection. Please pick another one! + پوشه محلی 1% از قبل یک پوشه استفاده شده در یک اتصال همگام سازی پوشه دارد. لطفا یکی دیگر را انتخاب کنید! + + + + There is already a sync from the server to this local folder. Please pick another local folder! + در حال حاضر یک همگام سازی از سرور به این پوشه محلی وجود دارد. لطفا یک پوشه محلی دیگر را انتخاب کنید! + + + + 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. - - - You have no permission to write to the selected folder! - شما اجازه نوشتن در پوشه های انتخاب شده را ندارید! - Please choose a different location. The path %1 doesn't exist. @@ -2563,26 +2573,11 @@ Alternatively, you can restore all deleted files by downloading them from the se folder location - - - The local folder %1 already contains a folder used in a folder sync connection. Please pick another one! - پوشه محلی 1% از قبل شامل یک پوشه استفاده شده در یک اتصال همگام سازی پوشه است. لطفا یکی دیگر را انتخاب کنید! - - - - The local folder %1 is already contained in a folder used in a folder sync connection. Please pick another one! - پوشه محلی 1% از قبل یک پوشه استفاده شده در یک اتصال همگام سازی پوشه دارد. لطفا یکی دیگر را انتخاب کنید! - Please choose a different location. %1 is already contained in a folder used as a sync folder. - - - There is already a sync from the server to this local folder. Please pick another local folder! - در حال حاضر یک همگام سازی از سرور به این پوشه محلی وجود دارد. لطفا یک پوشه محلی دیگر را انتخاب کنید! - Please choose a different location. %1 is already being used as a sync folder for %2. @@ -2590,7 +2585,7 @@ Alternatively, you can restore all deleted files by downloading them from the se - + 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. @@ -2695,12 +2690,12 @@ For advanced users: this issue might be related to multiple sync database files تطبیق تغییرات - + 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'" @@ -2718,7 +2713,7 @@ For advanced users: this issue might be related to multiple sync database files رشته های ترجمه نشده - + Download %1/s Example text: "Download 24Kb/s" (%1 is replaced by 24Kb (translated)) @@ -2735,7 +2730,7 @@ For advanced users: this issue might be related to multiple sync database files ↓ %1/s - + Upload %1/s Example text: "Upload 24Kb/s" (%1 is replaced by 24Kb (translated)) @@ -2786,12 +2781,12 @@ For advanced users: this issue might be related to multiple sync database files فایل %1 از %2 - + File %1 of %2 - + About to start syncing @@ -3157,7 +3152,7 @@ For advanced users: this issue might be related to multiple sync database files نمایش اعلانات سرور نیازمند تائید می باشد - + Show chat notification dialogs. @@ -3198,17 +3193,17 @@ Note that this selects only what pool upgrades are taken from, and that there ar Note that this selects only what pool upgrades are taken from, and that there are no downgrades: So going back from the beta channel to the stable channel usually cannot be done immediately and means waiting for a stable version that is newer than the currently installed beta version. - + daily - + enterprise - + - beta: contains versions with new features that may not be tested thoroughly - daily: contains versions created daily only for testing and development @@ -3217,7 +3212,7 @@ 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. @@ -3225,12 +3220,12 @@ 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 @@ -4279,30 +4274,30 @@ This is a new, experimental mode. If you decide to use it, please report any iss The file name is a reserved name 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. @@ -4357,22 +4352,22 @@ This is a new, experimental mode. If you decide to use it, please report any iss 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). @@ -4407,7 +4402,7 @@ This is a new, experimental mode. If you decide to use it, please report any iss Cannot sync due to invalid modification time - + Could not upload file, because it is open in "%1". @@ -4490,18 +4485,18 @@ This is a new, experimental mode. If you decide to use it, please report any iss Error updating metadata due to invalid modification time - - - - - - + + + + + + The folder %1 cannot be made read-only: %2 - - + + unknown exception @@ -4675,12 +4670,6 @@ This is a new, experimental mode. If you decide to use it, please report any iss 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 - - @@ -4688,6 +4677,13 @@ This is a new, experimental mode. If you decide to use it, please report any iss could not get file %1 from local DB could not get file %1 from local DB + + + + + Could not get file %1 from local DB + + @@ -4788,16 +4784,16 @@ 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". کد HTTP اشتباه توسط سرور برگردانده شد. 201 انتظار می رفت، اما "1% 2%" دریافت شد. - - - Could not get file %1 from local DB - - could not get file %1 from local DB 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 @@ -5046,7 +5042,7 @@ This is a new, experimental mode. If you decide to use it, please report any iss OCC::ShareManager - + Error @@ -5054,17 +5050,17 @@ This is a new, experimental mode. If you decide to use it, please report any iss OCC::ShareModel - + %1 days - + 1 day - + Today @@ -5094,7 +5090,7 @@ This is a new, experimental mode. If you decide to use it, please report any iss Secure file drop - + Could not find local folder for %1 @@ -5217,11 +5213,6 @@ Server replied with error: %2 Resharing this folder is not allowed بازهم‌رسانی این شاخه مجاز نیست - - - Copy internal link - Copy internal link - Copy secure file drop link @@ -5233,6 +5224,11 @@ Server replied with error: %2 Copy public link Copy public link + + + Copy internal link + Copy internal link + Copy secure filedrop link @@ -5264,16 +5260,16 @@ Server replied with error: %2 remaining time before lock expires Expires in %1 minutesExpires in %1 minutes - - - Open in browser - بازکردن در مرورگر - Edit Edit + + + Open in browser + بازکردن در مرورگر + Resolve conflict … @@ -5805,10 +5801,10 @@ Server replied with error: %2 - - - - + + + + Error updating metadata for a folder %1 @@ -5828,7 +5824,7 @@ Server replied with error: %2 - + Failed to unlock a folder. @@ -5846,7 +5842,7 @@ Server replied with error: %2 - + %1 notifications @@ -5862,17 +5858,17 @@ Server replied with error: %2 Resolve conflict - + Rename file - + Open Nextcloud Assistant in browser - + Open Nextcloud Talk in browser @@ -6006,29 +6002,19 @@ Server replied with error: %2 - The Virtual filesystem feature does not support a drive as sync root - + The Virtual filesystem feature requires a NTFS file system, %1 is using %2 + The Virtual filesystem feature requires a NTFS file system, %1 is using %2 Please choose a different location. %1 isn't a NTFS file system. It doesn't support virtual files. - - - The Virtual filesystem feature requires a NTFS file system, %1 is using %2 - The Virtual filesystem feature requires a NTFS file system, %1 is using %2 - Please choose a different location. %1 is a network drive. It doesn't support virtual files. - - - The Virtual filesystem feature is not supported on network drives - - OCC::VfsDownloadErrorDialog @@ -6168,12 +6154,12 @@ Server replied with error: %2 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. @@ -6249,23 +6235,23 @@ Server replied with error: %2 هیچ پوشه‌ همگام سازی پیکربندی شده - + %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. @@ -6711,7 +6697,7 @@ Server replied with error: %2 Search for users or groups… - + Sharing is not available for this folder @@ -7122,11 +7108,6 @@ Server replied with error: %2 downloading در حال دانلود - - - Downloading - - uploading @@ -7134,7 +7115,7 @@ Server replied with error: %2 - Uploading + Downloading @@ -7144,7 +7125,7 @@ Server replied with error: %2 - Deleting + Uploading @@ -7153,8 +7134,8 @@ Server replied with error: %2 در حال انتقال - - Moving + + Deleting @@ -7164,7 +7145,7 @@ Server replied with error: %2 - Ignoring + Moving @@ -7172,18 +7153,23 @@ Server replied with error: %2 error خطا + + + Ignoring + + updating local metadata فرا داده محلی به روز رسانی شده - + Updating local metadata - + Updating local virtual files metadata @@ -7342,19 +7328,6 @@ Server replied with error: %2 Clear status message menu - - OCC::FormatWarningsWizardPage - - - <b>Warning:</b> %1 - <b>اخطار:</b> %1 - - - - <b>Warning:</b> - <b>اخطار:</b> - - OCC::AbstractPropagateRemoteDeleteEncrypted @@ -7368,6 +7341,19 @@ Server replied with error: %2 "%1 Failed to unlock encrypted folder %2". + + OCC::FormatWarningsWizardPage + + + <b>Warning:</b> %1 + <b>اخطار:</b> %1 + + + + <b>Warning:</b> + <b>اخطار:</b> + + OCC::OAuth diff --git a/translations/client_fi.ts b/translations/client_fi.ts index e79bfa329ecfb..48ee2bc306090 100644 --- a/translations/client_fi.ts +++ b/translations/client_fi.ts @@ -172,13 +172,13 @@ - + Resume sync for all - + Pause sync for all @@ -193,32 +193,32 @@ - + Settings - + Exit - + Current account avatar - + Current account status is online - + Current account status is do not disturb - + Account switcher and settings menu @@ -307,17 +307,17 @@ FileProviderEvictionDialog - + Evict materialised files - + Materialised items - + Reload @@ -493,17 +493,17 @@ MainWindow - + Nextcloud desktop main dialog - + Unified search results list - + New activities @@ -553,13 +553,13 @@ Should an account import be attempted? - + %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? @@ -572,12 +572,12 @@ Should the account be imported? - + Import Tuo - + Skip Ohita @@ -672,12 +672,12 @@ Should the account be imported? Salaa kansio - + End-to-end Encryption Päästä päähän -salaus - + 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> @@ -708,17 +708,17 @@ Should the account be imported? Varoitus - + 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 @@ -972,7 +972,7 @@ Tämä toiminto peruu kaikki tämänhetkiset synkronoinnit. Ei yhteyttä kohteeseen %1 osoitteessa %2. - + Unable to connect to %1. @@ -982,7 +982,7 @@ Tämä toiminto peruu kaikki tämänhetkiset synkronoinnit. Palvelimen kokoonpanovirhe: %1 at %2. - + You need to accept the terms of service @@ -1012,7 +1012,7 @@ Tämä toiminto peruu kaikki tämänhetkiset synkronoinnit. Seuraavia kansioita ei synkronoitu, koska ne ovat liian suuria tai ulkoisia tallennustiloja: - + There are folders that have grown in size beyond %1MB: %2 @@ -1214,34 +1214,39 @@ Tämä toiminto peruu kaikki tämänhetkiset synkronoinnit. Jatka - + + Quit %1 + Lopeta %1 + + + %1 accounts number of accounts imported %1 tiliä - + 1 account 1 tili - + %1 folders number of folders imported %1 kansiota - + 1 folder 1 kansio - + Legacy import - + Imported %1 and %2 from a legacy desktop client. %3 number of accounts and folders imported. list of users. @@ -1257,11 +1262,6 @@ Tämä toiminto peruu kaikki tämänhetkiset synkronoinnit. There was an error while accessing the configuration file at %1. Please make sure the file can be accessed by your system account. - - - Quit %1 - Lopeta %1 - OCC::AuthenticationDialog @@ -1726,13 +1726,13 @@ Tämä toiminto peruu kaikki tämänhetkiset synkronoinnit. Palvelinvirhe: PROPFIND-vastaus ei ole XML-formaatissa! - - + + Encrypted metadata setup error! - + Encrypted metadata setup error: initial signature from server is empty. @@ -2283,28 +2283,28 @@ If this was an accident and you decide to keep your files, they will be re-synce Pidä tiedostot - + 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? @@ -2328,41 +2328,41 @@ 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 @@ -2433,32 +2433,32 @@ Alternatively, you can restore all deleted files by downloading them from the se Valmistellaan synkronointia. - + 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 @@ -2502,16 +2502,6 @@ Alternatively, you can restore all deleted files by downloading them from the se No valid folder selected! Kelvollista kansiota ei ole valittu! - - - The folder %1 is used in a folder sync connection! - - - - - Please choose a different location. The selected folder isn't valid. - - The selected path does not exist! @@ -2522,17 +2512,37 @@ Alternatively, you can restore all deleted files by downloading them from the se The selected path is not a folder! Valittu polku ei ole kansio! + + + You have no permission to write to the selected folder! + Sinulla ei ole kirjoitusoikeutta valittuun kansioon! + + + + The local folder %1 already contains a folder used in a folder sync connection. Please pick another one! + Paikallinen kansio %1 sisältää kansion, jota käytetään kansion synkronointiyhteydessä. Valitse toinen kansio! + + + + The local folder %1 is already contained in a folder used in a folder sync connection. Please pick another one! + + + + + There is already a sync from the server to this local folder. Please pick another local folder! + Palvelimelta synkronoidaan jo tähän paikalliseen kansioon. Valitse toinen sijainti! + + + + 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. - - - You have no permission to write to the selected folder! - Sinulla ei ole kirjoitusoikeutta valittuun kansioon! - Please choose a different location. The path %1 doesn't exist. @@ -2550,26 +2560,11 @@ Alternatively, you can restore all deleted files by downloading them from the se folder location - - - The local folder %1 already contains a folder used in a folder sync connection. Please pick another one! - Paikallinen kansio %1 sisältää kansion, jota käytetään kansion synkronointiyhteydessä. Valitse toinen kansio! - - - - The local folder %1 is already contained in a folder used in a folder sync connection. Please pick another one! - - Please choose a different location. %1 is already contained in a folder used as a sync folder. - - - There is already a sync from the server to this local folder. Please pick another local folder! - Palvelimelta synkronoidaan jo tähän paikalliseen kansioon. Valitse toinen sijainti! - Please choose a different location. %1 is already being used as a sync folder for %2. @@ -2577,7 +2572,7 @@ Alternatively, you can restore all deleted files by downloading them from the se - + 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. @@ -2682,12 +2677,12 @@ For advanced users: this issue might be related to multiple sync database files Täsmäytetään muutoksia - + 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'" @@ -2705,7 +2700,7 @@ For advanced users: this issue might be related to multiple sync database files , - + Download %1/s Example text: "Download 24Kb/s" (%1 is replaced by 24Kb (translated)) @@ -2722,7 +2717,7 @@ For advanced users: this issue might be related to multiple sync database files ↓ %1/s - + Upload %1/s Example text: "Upload 24Kb/s" (%1 is replaced by 24Kb (translated)) @@ -2773,12 +2768,12 @@ For advanced users: this issue might be related to multiple sync database files tiedosto %1/%2 - + File %1 of %2 - + About to start syncing @@ -3144,7 +3139,7 @@ For advanced users: this issue might be related to multiple sync database files Palvelinilmoitukset jotka vaativat huomiota. - + Show chat notification dialogs. @@ -3183,17 +3178,17 @@ Note that this selects only what pool upgrades are taken from, and that there ar - + daily - + enterprise - + - beta: contains versions with new features that may not be tested thoroughly - daily: contains versions created daily only for testing and development @@ -3202,7 +3197,7 @@ 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. @@ -3210,12 +3205,12 @@ 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 @@ -4257,30 +4252,30 @@ This is a new, experimental mode. If you decide to use it, please report any iss Tiedostonimi on varattu tämän tiedostojärjestelmän käyttöön. - + 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. @@ -4335,22 +4330,22 @@ This is a new, experimental mode. If you decide to use it, please report any iss Tiedostonimi on palvelimella mustalla listalla. - + 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). @@ -4385,7 +4380,7 @@ This is a new, experimental mode. If you decide to use it, please report any iss Ei voida synkronoida virheellisen muokkausajan vuoksi - + Could not upload file, because it is open in "%1". @@ -4468,18 +4463,18 @@ This is a new, experimental mode. If you decide to use it, please report any iss - - - - - - + + + + + + The folder %1 cannot be made read-only: %2 - - + + unknown exception @@ -4653,12 +4648,6 @@ This is a new, experimental mode. If you decide to use it, please report any iss File %1 downloaded but it resulted in a local file name clash! - - - - Could not get file %1 from local DB - - @@ -4666,6 +4655,13 @@ This is a new, experimental mode. If you decide to use it, please report any iss could not get file %1 from local DB + + + + + Could not get file %1 from local DB + + @@ -4767,13 +4763,13 @@ This is a new, experimental mode. If you decide to use it, please report any iss HTTP-palvelin palautti väärän koodin. Odotettiin koodia 201, vastaanotettiin "%1 %2". - - Could not get file %1 from local DB + + could not get file %1 from local DB - - could not get file %1 from local DB + + Could not get file %1 from local DB @@ -5024,7 +5020,7 @@ This is a new, experimental mode. If you decide to use it, please report any iss OCC::ShareManager - + Error @@ -5032,17 +5028,17 @@ This is a new, experimental mode. If you decide to use it, please report any iss OCC::ShareModel - + %1 days - + 1 day - + Today @@ -5072,7 +5068,7 @@ This is a new, experimental mode. If you decide to use it, please report any iss - + Could not find local folder for %1 @@ -5193,11 +5189,6 @@ Server replied with error: %2 Resharing this folder is not allowed Tämän kansion uudelleenjakaminen ei ole sallittu - - - Copy internal link - Kopioi sisäinen linkki - Copy secure file drop link @@ -5209,6 +5200,11 @@ Server replied with error: %2 Copy public link Kopioi julkinen linkki + + + Copy internal link + Kopioi sisäinen linkki + Copy secure filedrop link @@ -5240,16 +5236,16 @@ Server replied with error: %2 remaining time before lock expires Vanhenee %1 minuutin kuluttuaVanhenee %1 minuutin kuluttua - - - Open in browser - Avaa selaimessa - Edit Muokkaa + + + Open in browser + Avaa selaimessa + Resolve conflict … @@ -5782,10 +5778,10 @@ Server replied with error: %2 - - - - + + + + Error updating metadata for a folder %1 @@ -5805,7 +5801,7 @@ Server replied with error: %2 - + Failed to unlock a folder. @@ -5823,7 +5819,7 @@ Server replied with error: %2 - + %1 notifications @@ -5839,17 +5835,17 @@ Server replied with error: %2 Selvitä ristiriita - + Rename file - + Open Nextcloud Assistant in browser - + Open Nextcloud Talk in browser @@ -5983,7 +5979,7 @@ Server replied with error: %2 - The Virtual filesystem feature does not support a drive as sync root + The Virtual filesystem feature requires a NTFS file system, %1 is using %2 @@ -5991,21 +5987,11 @@ Server replied with error: %2 Please choose a different location. %1 isn't a NTFS file system. It doesn't support virtual files. - - - The Virtual filesystem feature requires a NTFS file system, %1 is using %2 - - Please choose a different location. %1 is a network drive. It doesn't support virtual files. - - - The Virtual filesystem feature is not supported on network drives - - OCC::VfsDownloadErrorDialog @@ -6145,12 +6131,12 @@ Server replied with error: %2 - + 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. @@ -6226,23 +6212,23 @@ Server replied with error: %2 Synkronointikansioita ei ole määritelty - + %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. @@ -6688,7 +6674,7 @@ Server replied with error: %2 Etsi käyttäjiä tai ryhmiä… - + Sharing is not available for this folder @@ -7099,11 +7085,6 @@ Server replied with error: %2 downloading ladataan - - - Downloading - - uploading @@ -7111,7 +7092,7 @@ Server replied with error: %2 - Uploading + Downloading @@ -7121,7 +7102,7 @@ Server replied with error: %2 - Deleting + Uploading @@ -7130,8 +7111,8 @@ Server replied with error: %2 siirretään - - Moving + + Deleting @@ -7141,7 +7122,7 @@ Server replied with error: %2 - Ignoring + Moving @@ -7149,18 +7130,23 @@ Server replied with error: %2 error virhe + + + Ignoring + + updating local metadata päivitetään paikallisia metatietoja - + Updating local metadata - + Updating local virtual files metadata @@ -7319,19 +7305,6 @@ Server replied with error: %2 Tyhjennä tilaviestien valikko - - OCC::FormatWarningsWizardPage - - - <b>Warning:</b> %1 - <b>Varoitus:</b> %1 - - - - <b>Warning:</b> - <b>Varoitus:</b> - - OCC::AbstractPropagateRemoteDeleteEncrypted @@ -7345,6 +7318,19 @@ Server replied with error: %2 "%1 Salatun hakemiston avaaminen epäonnistui %2". + + OCC::FormatWarningsWizardPage + + + <b>Warning:</b> %1 + <b>Varoitus:</b> %1 + + + + <b>Warning:</b> + <b>Varoitus:</b> + + OCC::OAuth diff --git a/translations/client_fr.ts b/translations/client_fr.ts index 5d93838b600f8..026eca60582ff 100644 --- a/translations/client_fr.ts +++ b/translations/client_fr.ts @@ -172,13 +172,13 @@ - + Resume sync for all Reprendre la synchronisation pour tous - + Pause sync for all Mettre en pause la synchronisation pour tous @@ -193,32 +193,32 @@ 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 @@ -307,17 +307,17 @@ FileProviderEvictionDialog - + Evict materialised files Supprimer les fichiers matérialisés - + Materialised items Éléments matérialisés - + Reload Recharger @@ -493,17 +493,17 @@ 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 @@ -554,14 +554,14 @@ Should an account import be attempted? Faut-il tenter d'importer un compte ? - + %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. @@ -575,12 +575,12 @@ Le compte doit-il être importé ? Importation de l'héritage - + Import Importer - + Skip Ignorer @@ -675,12 +675,12 @@ Le compte doit-il être importé ? 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. @@ -712,17 +712,17 @@ Le compte doit-il être importé ? 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. @@ -976,7 +976,7 @@ Vous prenez vos propres risques. Aucune connexion au serveur %1 à l'adresse %2. - + Unable to connect to %1. Impossible de se connecter à %1. @@ -986,7 +986,7 @@ Vous prenez vos propres risques. Erreur de configuration serveur : %1 à %2. - + You need to accept the terms of service Vous devez accepter les conditions générales d'utilisation @@ -1016,7 +1016,7 @@ Vous prenez vos propres risques. 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 have grown in size beyond %1MB: %2 Il y a des dossiers qui ont augmenté de taille au-delà de %1MB: %2 @@ -1218,34 +1218,39 @@ Vous prenez vos propres risques. Continuer - + + Quit %1 + Quitter %1 + + + %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. @@ -1262,11 +1267,6 @@ Vous prenez vos propres risques. 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. - - - Quit %1 - Quitter %1 - OCC::AuthenticationDialog @@ -1731,13 +1731,13 @@ Vous prenez vos propres risques. 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. @@ -2132,17 +2132,17 @@ Cela peut être un problème avec vos bibliothèques OpenSSL. 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. @@ -2294,29 +2294,29 @@ S'il s'agissait d'un accident et que vous choisissiez de conserve Conserver les fichiers - + A folder has surpassed the set folder size limit of %1MB: %2. %3 Un dossier a dépassé la taille limite fixée de %1MB: %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 %2MB. - + Would you like to stop syncing this folder? Voulez vous arrêter la synchronisation de ce dossier ? @@ -2344,12 +2344,12 @@ Cela signifie que le client de synchronisation ne va pas téléverser immédiate %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. Alternatively, you can restore all deleted files by uploading from '%1' folder to the server. @@ -2358,7 +2358,7 @@ 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. Alternatively, you can restore all deleted files by downloading them from the server. @@ -2367,22 +2367,22 @@ 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 @@ -2453,32 +2453,32 @@ Vous pouvez également restaurer tous les fichiers supprimés en les télécharg 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 @@ -2522,16 +2522,6 @@ Vous pouvez également restaurer tous les fichiers supprimés en les télécharg No valid folder selected! Aucun dossier valable sélectionné ! - - - The folder %1 is used in a folder sync connection! - Le dossier %1 est utilisé dans une connexion de synchronisation de dossiers ! - - - - Please choose a different location. The selected folder isn't valid. - - The selected path does not exist! @@ -2542,62 +2532,67 @@ Vous pouvez également restaurer tous les fichiers supprimés en les télécharg The selected path is not a folder! Le chemin sélectionné n'est pas un dossier ! - - - - Please choose a different location. %1 is already being used as a sync folder. - - You have no permission to write to the selected folder! Vous n'avez pas la permission d'écrire dans le dossier sélectionné ! + + + The local folder %1 already contains a folder used in a folder sync connection. Please pick another one! + Le dossier local %1 contient un dossier déjà utilisé pour une synchronisation de dossiers. Veuillez en choisir un autre ! + + + + The local folder %1 is already contained in a folder used in a folder sync connection. Please pick another one! + Le dossier local %1 se trouve dans un dossier déjà configuré pour une synchronisation de dossier. Veuillez en choisir un autre ! + + + + There is already a sync from the server to this local folder. Please pick another local folder! + Il y a déjà une synchronisation depuis le serveur vers ce dossier local. Merci de choisir un autre dossier local ! + + + + 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 - - - - - The local folder %1 already contains a folder used in a folder sync connection. Please pick another one! - Le dossier local %1 contient un dossier déjà utilisé pour une synchronisation de dossiers. Veuillez en choisir un autre ! - - - - The local folder %1 is already contained in a folder used in a folder sync connection. Please pick another one! - Le dossier local %1 se trouve dans un dossier déjà configuré pour une synchronisation de dossier. Veuillez en choisir un autre ! + 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. - - - - - There is already a sync from the server to this local folder. Please pick another local folder! - Il y a déjà une synchronisation depuis le serveur vers ce dossier local. Merci de choisir un autre dossier local ! + 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. @@ -2705,12 +2700,12 @@ Pour les utilisateurs avancés: ce problème peut aussi venir de plusieurs fichi Rapprochement des modifications - + 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'" %1 %2 … @@ -2728,7 +2723,7 @@ Pour les utilisateurs avancés: ce problème peut aussi venir de plusieurs fichi , - + Download %1/s Example text: "Download 24Kb/s" (%1 is replaced by 24Kb (translated)) Télécharger %1/s @@ -2745,7 +2740,7 @@ Pour les utilisateurs avancés: ce problème peut aussi venir de plusieurs fichi ↓ %1/s - + Upload %1/s Example text: "Upload 24Kb/s" (%1 is replaced by 24Kb (translated)) Téléverser %1/s @@ -2796,12 +2791,12 @@ Pour les utilisateurs avancés: ce problème peut aussi venir de plusieurs fichi fichier %1 sur %2 - + File %1 of %2 Fichier %1 sur %2 - + About to start syncing Sur le point de démarrer la synchronisation @@ -2910,7 +2905,7 @@ 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. @@ -2955,7 +2950,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é @@ -3167,7 +3162,7 @@ Pour les utilisateurs avancés: ce problème peut aussi venir de plusieurs fichi Notifications du serveur requérant votre attention. - + Show chat notification dialogs. Afficher les boîtes de dialogue de notification de chat. @@ -3208,17 +3203,17 @@ Note that this selects only what pool upgrades are taken from, and that there ar Notez que cela ne permet seulement que de sélectionner où sont récupérées les mises à jour et qu'il n'y a pas de possibilité de rétrograder : ainsi, le retour du canal "bêta" au canal "stable" ne peut généralement pas être fait immédiatement, et implique d'attendre une version stable plus récente que la version bêta actuellement installée. - + 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 @@ -3230,7 +3225,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. @@ -3240,12 +3235,12 @@ 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 @@ -3940,7 +3935,7 @@ Notez que l'utilisation de toute option de ligne de commande de journalisat Virtual files are not supported at the selected location - + Les fichiers virtuels ne sont pas pris en charge à l'emplacement sélectionné @@ -4297,30 +4292,30 @@ Il s'agit d'un nouveau mode expérimental. Si vous décidez de l' Le nom du fichier est un nom réservé dans le système de fichier - + 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. - + %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. @@ -4375,22 +4370,22 @@ Il s'agit d'un nouveau mode expérimental. Si vous décidez de l' 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). @@ -4425,7 +4420,7 @@ Il s'agit d'un nouveau mode expérimental. Si vous décidez de l' Impossible de synchroniser à cause d'une date de modification invalide - + Could not upload file, because it is open in "%1". Impossible de téléverser le fichier, car il est ouvert dans « %1 ». @@ -4508,18 +4503,18 @@ Il s'agit d'un nouveau mode expérimental. Si vous décidez de l' 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 @@ -4693,12 +4688,6 @@ Il s'agit d'un nouveau mode expérimental. Si vous décidez de l' 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 - @@ -4706,6 +4695,13 @@ Il s'agit d'un nouveau mode expérimental. Si vous décidez de l' 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 get file %1 from local DB + Impossible de récupérer le fichier %1 depuis la base de données locale + @@ -4807,13 +4803,13 @@ Il s'agit d'un nouveau mode expérimental. Si vous décidez de l' 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 + + 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 get file %1 from local DB + + Could not get file %1 from local DB Impossible de récupérer le fichier %1 depuis la base de données locale @@ -5064,7 +5060,7 @@ Il s'agit d'un nouveau mode expérimental. Si vous décidez de l' OCC::ShareManager - + Error Erreur @@ -5072,17 +5068,17 @@ 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 @@ -5112,7 +5108,7 @@ Il s'agit d'un nouveau mode expérimental. Si vous décidez de l' Dépôt de fichier sécurisé - + Could not find local folder for %1 Impossible de trouver le dossier local pour %1 @@ -5235,11 +5231,6 @@ Le serveur a répondu avec l'erreur : %2 Resharing this folder is not allowed Repartager ce dossier est interdit - - - Copy internal link - Copier le lien interne - Copy secure file drop link @@ -5251,6 +5242,11 @@ Le serveur a répondu avec l'erreur : %2 Copy public link Copier le lien public + + + Copy internal link + Copier le lien interne + Copy secure filedrop link @@ -5282,16 +5278,16 @@ Le serveur a répondu avec l'erreur : %2 remaining time before lock expires Expire dans %1 minuteExpire dans %1 minutesExpire dans %1 minutes - - - Open in browser - Ouvrir dans le navigateur - Edit Éditer + + + Open in browser + Ouvrir dans le navigateur + Resolve conflict … @@ -5824,10 +5820,10 @@ Le serveur a répondu avec l'erreur : %2 - - - - + + + + Error updating metadata for a folder %1 Erreur lors de la mise à jour des métadonnées pour un dossier %1 @@ -5847,7 +5843,7 @@ Le serveur a répondu avec l'erreur : %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. @@ -5865,7 +5861,7 @@ Le serveur a répondu avec l'erreur : %2 Déclencher la migration - + %1 notifications %1 notifications @@ -5881,17 +5877,17 @@ Le serveur a répondu avec l'erreur : %2 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 @@ -6021,32 +6017,22 @@ Le serveur a répondu avec l'erreur : %2 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. - The Virtual filesystem feature does not support a drive as sync root - La fonction de système de fichiers virtuel ne prend pas en charge un lecteur en tant que racine de synchronisation. + The Virtual filesystem feature requires a NTFS file system, %1 is using %2 + La fonctionnalité système de fichiers virtuels requiert un système de fichiers de type NTFS alors que %1 utilise %2. Please choose a different location. %1 isn't a NTFS file system. It doesn't support virtual files. - - - - - The Virtual filesystem feature requires a NTFS file system, %1 is using %2 - La fonctionnalité système de fichiers virtuels requiert un système de fichiers de type NTFS alors que %1 utilise %2. + 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. - - - - - The Virtual filesystem feature is not supported on network drives - La fonction de système de fichiers virtuel n'est pas prise en charge sur les lecteurs réseau. + Veuillez choisir un emplacement différent. %1 est un lecteur réseau. Il ne prend pas en charge les fichiers virtuels. @@ -6187,12 +6173,12 @@ Le serveur a répondu avec l'erreur : %2 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. @@ -6268,23 +6254,23 @@ Le serveur a répondu avec l'erreur : %2 Aucun dossier de synchronisation configuré - + %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. @@ -6730,7 +6716,7 @@ Le serveur a répondu avec l'erreur : %2 Rechercher des utilisateurs ou des groupes... - + Sharing is not available for this folder Le partage n'est pas disponible pour ce dossier @@ -7141,11 +7127,6 @@ Le serveur a répondu avec l'erreur : %2 downloading téléchargement de - - - Downloading - Téléchargement - uploading @@ -7153,8 +7134,8 @@ Le serveur a répondu avec l'erreur : %2 - Uploading - Téléversement + Downloading + Téléchargement @@ -7163,8 +7144,8 @@ Le serveur a répondu avec l'erreur : %2 - Deleting - Suppression + Uploading + Téléversement @@ -7172,9 +7153,9 @@ Le serveur a répondu avec l'erreur : %2 déplacement - - Moving - Déplacement + + Deleting + Suppression @@ -7183,26 +7164,31 @@ Le serveur a répondu avec l'erreur : %2 - Ignoring - Ignoré + Moving + Déplacement error erreur + + + Ignoring + Ignoré + updating local metadata Mise à jour des métadonnées locales - + 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 @@ -7361,19 +7347,6 @@ Le serveur a répondu avec l'erreur : %2 Menu d'effacement du message de statut - - OCC::FormatWarningsWizardPage - - - <b>Warning:</b> %1 - <b>Avertissement :</b> %1 - - - - <b>Warning:</b> - <b>Avertissement :</b> - - OCC::AbstractPropagateRemoteDeleteEncrypted @@ -7387,6 +7360,19 @@ Le serveur a répondu avec l'erreur : %2 "%1 Impossible de déverrouiller le dossier chiffré %2". + + OCC::FormatWarningsWizardPage + + + <b>Warning:</b> %1 + <b>Avertissement :</b> %1 + + + + <b>Warning:</b> + <b>Avertissement :</b> + + OCC::OAuth diff --git a/translations/client_ga.ts b/translations/client_ga.ts index 9b8695137596d..9dd421c7fd6b3 100644 --- a/translations/client_ga.ts +++ b/translations/client_ga.ts @@ -172,13 +172,13 @@ - + Resume sync for all Lean an sioncronú do chách - + Pause sync for all Cuir sioncrónú ar sos do chách @@ -193,32 +193,32 @@ Cuir cuntas nua leis - + Settings Socruithe - + Exit Scoir - + Current account avatar Avatar cuntas reatha - + Current account status is online Tá stádas cuntais reatha ar líne - + Current account status is do not disturb Níl aon chur isteach ar stádas an chuntais reatha - + Account switcher and settings menu Malartóir cuntais agus roghchlár socruithe @@ -307,17 +307,17 @@ FileProviderEvictionDialog - + Evict materialised files Díshealbhaigh comhaid ábhartha - + Materialised items Míreanna ábharaithe - + Reload Athlódáil @@ -493,17 +493,17 @@ MainWindow - + Nextcloud desktop main dialog Príomhdhialóg deisce Nextcloud - + Unified search results list Liosta torthaí cuardaigh aontaithe - + New activities Gníomhaíochtaí nua @@ -554,14 +554,14 @@ Should an account import be attempted? Ar cheart iarracht a dhéanamh iompórtáil cuntais? - + %1 accounts were detected from a legacy desktop client. Should the accounts be imported? Braitheadh ​​% 1 cuntas ó chliant deisce oidhreachta. Ar cheart na cuntais a iompórtáil? - + 1 account was detected from a legacy desktop client. Should the account be imported? Braitheadh ​​1 chuntas ó chliant deisce oidhreachta. @@ -575,12 +575,12 @@ Ar cheart an cuntas a iompórtáil? Iompórtáil oidhreachta - + Import Iompórtáil - + Skip Scipeáil @@ -675,12 +675,12 @@ Ar cheart an cuntas a iompórtáil? Criptigh fillteán - + End-to-end Encryption Criptiú ceann go ceann - + 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> Cripteoidh sé seo d'fhillteán agus gach comhad laistigh de. Ní bheidh rochtain ar na comhaid seo a thuilleadh gan d'eochair chuimhneacháin criptithe. @@ -712,17 +712,17 @@ Ar cheart an cuntas a iompórtáil? Rabhadh - + Please wait for the folder to sync before trying to encrypt it. Fán le do thoil go ndéanfaidh tú an fillteán a shioncronú sula ndéanfaidh tú iarracht é a chriptiú. - + The folder has a minor sync problem. Encryption of this folder will be possible once it has synced successfully Tá mionfhadhb sioncronaithe ag an bhfillteán. Beifear in ann an fillteán seo a chriptiú nuair a bheidh sé sioncronaithe go rathúil - + The folder has a sync error. Encryption of this folder will be possible once it has synced successfully Tá earráid shioncronaithe san fhillteán. Beifear in ann an fillteán seo a chriptiú nuair a bheidh sé sioncronaithe go rathúil @@ -978,7 +978,7 @@ Cuirfidh an gníomh seo deireadh le haon sioncrónú atá ar siúl faoi láthair Gan ceangal le % 1 ag % 2. - + Unable to connect to %1. Ní féidir ceangal le % 1. @@ -988,7 +988,7 @@ Cuirfidh an gníomh seo deireadh le haon sioncrónú atá ar siúl faoi láthair Earráid chumraíocht an fhreastalaí: % 1 ag % 2. - + You need to accept the terms of service Ní mór duit glacadh leis na téarmaí seirbhíse @@ -1018,7 +1018,7 @@ Cuirfidh an gníomh seo deireadh le haon sioncrónú atá ar siúl faoi láthair Tá fillteáin ann nár sioncronaíodh toisc go bhfuil siad rómhór nó mar stórais sheachtracha: - + There are folders that have grown in size beyond %1MB: %2 Tá fillteáin ann a d'fhás i méid thar % 1MB: % 2 @@ -1220,34 +1220,39 @@ Cuirfidh an gníomh seo deireadh le haon sioncrónú atá ar siúl faoi láthair Lean ar aghaidh - + + Quit %1 + Scoir % 1 + + + %1 accounts number of accounts imported % 1 cuntas - + 1 account 1 chuntas - + %1 folders number of folders imported % 1 fillteán - + 1 folder 1 fillteán - + Legacy import Iompórtáil oidhreachta - + Imported %1 and %2 from a legacy desktop client. %3 number of accounts and folders imported. list of users. @@ -1264,11 +1269,6 @@ Cuirfidh an gníomh seo deireadh le haon sioncrónú atá ar siúl faoi láthair There was an error while accessing the configuration file at %1. Please make sure the file can be accessed by your system account. Tharla earráid agus an comhad cumraíochta ag % 1 á rochtain. Cinntigh le do thoil gur féidir an comhad a rochtain ag do chuntas córais. - - - Quit %1 - Scoir % 1 - OCC::AuthenticationDialog @@ -1733,13 +1733,13 @@ Cuirfidh an gníomh seo deireadh le haon sioncrónú atá ar siúl faoi láthair Earráid fhreastalaí: Níl an freagra PROPFIND formáidithe XML! - - + + Encrypted metadata setup error! Earráid socraithe meiteashonraí criptithe! - + Encrypted metadata setup error: initial signature from server is empty. Earráid socraithe meiteashonraí criptithe: tá síniú tosaigh an fhreastalaí folamh. @@ -2295,29 +2295,29 @@ Más timpiste a bhí ann agus má shocraíonn tú do chuid comhad a choinneáil, Coinnigh comhaid - + A folder has surpassed the set folder size limit of %1MB: %2. %3 Sháraigh fillteán an teorainn mhéid fillteáin de % 1MB: % 2. % 3 - + Keep syncing Coinnigh sioncronú - + Stop syncing Stop sioncronú - + The folder %1 has surpassed the set folder size limit of %2MB. Sháraigh fillteán % 1 an teorainn méide fillteáin de % 2MB. - + Would you like to stop syncing this folder? Ar mhaith leat stop a chur le sioncronú an fhillteáin seo? @@ -2345,12 +2345,12 @@ Ciallaíonn sé seo go bhféadfadh sé nach ndéanfaidh an cliant sioncrónaithe % 1 - + Virtual file download failed with code "%1", status "%2" and error message "%3" Theip ar íosluchtú an chomhaid fhíorúil le cód "% 1", stádas "% 2" agus teachtaireacht earráide "% 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. @@ -2359,7 +2359,7 @@ Deimhnigh le do thoil ar mhaith leat leanúint ar aghaidh leis na scriosanna seo Nó, is féidir leat gach comhad scriosta a chur ar ais trí uaslódáil ó fhillteán '%1' go dtí an freastalaí. - + 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. @@ -2368,22 +2368,22 @@ Deimhnigh le do thoil ar mhaith leat leanúint ar aghaidh leis na scriosanna seo De rogha air sin, is féidir leat gach comhad a scriosadh a chur ar ais trína n-íoslódáil ón bhfreastalaí. - + Remove all files? Bain gach comhad? - + Proceed with Deletion Lean ar aghaidh leis an Scriosadh - + Restore Files to Server Athchóirigh Comhaid go Freastalaí - + Restore Files from Server Athchóirigh Comhaid ón bhfreastalaí @@ -2454,32 +2454,32 @@ De rogha air sin, is féidir leat gach comhad a scriosadh a chur ar ais trína n Ag ullmhú le haghaidh sioncronaithe. - + Syncing %1 of %2 (A few seconds left) %1 de %2 á shioncronú (cúpla soicind fágtha) - + Syncing %1 of %2 (%3 left) %1 de %2 á shioncronú (%3 fágtha) - + Syncing %1 of %2 %1 de %2 á shioncronú - + Syncing %1 (A few seconds left) %1 á shioncronú (cúpla soicind fágtha) - + Syncing %1 (%2 left) %1 á shioncronú (%2 fágtha) - + Syncing %1 %1 á shioncronú @@ -2523,16 +2523,6 @@ De rogha air sin, is féidir leat gach comhad a scriosadh a chur ar ais trína n No valid folder selected! Níl aon fhillteán bailí roghnaithe! - - - The folder %1 is used in a folder sync connection! - Úsáidtear fillteán %1 i gceangal sioncronaithe fillteáin! - - - - Please choose a different location. The selected folder isn't valid. - - The selected path does not exist! @@ -2543,17 +2533,37 @@ De rogha air sin, is féidir leat gach comhad a scriosadh a chur ar ais trína n The selected path is not a folder! Ní fillteán é an cosán roghnaithe! + + + You have no permission to write to the selected folder! + Níl aon chead agat scríobh chuig an bhfillteán roghnaithe! + + + + The local folder %1 already contains a folder used in a folder sync connection. Please pick another one! + Tá fillteán san fhillteán logánta % 1 cheana a úsáidtear i gceangal sioncronaithe fillteáin. Roghnaigh ceann eile le do thoil! + + + + The local folder %1 is already contained in a folder used in a folder sync connection. Please pick another one! + Tá fillteán logánta % 1 i bhfillteán a úsáidtear i gceangal sioncronaithe fillteáin cheana. Roghnaigh ceann eile le do thoil! + + + + There is already a sync from the server to this local folder. Please pick another local folder! + Tá sioncronú ann cheana ón bhfreastalaí leis an bhfillteán logánta seo. Roghnaigh fillteán áitiúil eile le do thoil! + + + + 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. - - - You have no permission to write to the selected folder! - Níl aon chead agat scríobh chuig an bhfillteán roghnaithe! - Please choose a different location. The path %1 doesn't exist. @@ -2571,26 +2581,11 @@ De rogha air sin, is féidir leat gach comhad a scriosadh a chur ar ais trína n folder location - - - The local folder %1 already contains a folder used in a folder sync connection. Please pick another one! - Tá fillteán san fhillteán logánta % 1 cheana a úsáidtear i gceangal sioncronaithe fillteáin. Roghnaigh ceann eile le do thoil! - - - - The local folder %1 is already contained in a folder used in a folder sync connection. Please pick another one! - Tá fillteán logánta % 1 i bhfillteán a úsáidtear i gceangal sioncronaithe fillteáin cheana. Roghnaigh ceann eile le do thoil! - Please choose a different location. %1 is already contained in a folder used as a sync folder. - - - There is already a sync from the server to this local folder. Please pick another local folder! - Tá sioncronú ann cheana ón bhfreastalaí leis an bhfillteán logánta seo. Roghnaigh fillteán áitiúil eile le do thoil! - Please choose a different location. %1 is already being used as a sync folder for %2. @@ -2598,7 +2593,7 @@ De rogha air sin, is féidir leat gach comhad a scriosadh a chur ar ais trína n - + 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. @@ -2706,12 +2701,12 @@ D'úsáideoirí ardleibhéil: d'fhéadfadh an cheist seo a bheith bain Athruithe a réiteach - + Syncing local and remote changes Athruithe áitiúla agus cianda a shioncronú - + %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 … @@ -2729,7 +2724,7 @@ D'úsáideoirí ardleibhéil: d'fhéadfadh an cheist seo a bheith bain , - + Download %1/s Example text: "Download 24Kb/s" (%1 is replaced by 24Kb (translated)) Íoslódáil % 1/s @@ -2746,7 +2741,7 @@ D'úsáideoirí ardleibhéil: d'fhéadfadh an cheist seo a bheith bain ↓ %1/s - + Upload %1/s Example text: "Upload 24Kb/s" (%1 is replaced by 24Kb (translated)) Uaslódáil % 1/s @@ -2797,12 +2792,12 @@ D'úsáideoirí ardleibhéil: d'fhéadfadh an cheist seo a bheith bain comhad % 1 de % 2 - + File %1 of %2 Comhad % 1 de % 2 - + About to start syncing Ar tí sioncronú a thosú @@ -3168,7 +3163,7 @@ D'úsáideoirí ardleibhéil: d'fhéadfadh an cheist seo a bheith bain Fógraí freastalaí a dteastaíonn aird uathu. - + Show chat notification dialogs. Taispeáin dialóga fógraí comhrá. @@ -3209,17 +3204,17 @@ Note that this selects only what pool upgrades are taken from, and that there ar Tabhair faoi deara nach roghnaíonn sé seo ach na huasghráduithe linne a bhaintear as, agus nach bhfuil aon íosghrádú ann: Mar sin ní féidir dul ar ais ón gcainéal béite go dtí an cainéal cobhsaí láithreach agus ciallaíonn sé seo fanacht ar leagan cobhsaí atá níos nuaí ná an béite atá suiteáilte faoi láthair leagan. - + daily laethúil - + enterprise fiontar - + - beta: contains versions with new features that may not be tested thoroughly - daily: contains versions created daily only for testing and development @@ -3231,7 +3226,7 @@ Downgrading versions is not possible immediately: changing from beta to stable m Ní féidir leaganacha a íosghrádú láithreach: ciallaíonn athrú ó beta go cobhsaí fanacht leis an leagan cobhsaí nua. - + - enterprise: contains stable versions for customers. Downgrading versions is not possible immediately: changing from stable to enterprise means waiting for the new enterprise version. @@ -3241,12 +3236,12 @@ Downgrading versions is not possible immediately: changing from stable to enterp Ní féidir leaganacha a íosghrádú láithreach: ciallaíonn athrú ó chobhsaí go fiontar fanacht leis an leagan fiontair nua. - + Changing update channel? Cainéal nuashonraithe á athrú? - + The channel determines which upgrades will be offered to install: - stable: contains tested versions considered reliable @@ -4299,30 +4294,30 @@ Is modh turgnamhach nua é seo. Má shocraíonn tú é a úsáid, cuir in iúl l Is ainm forchoimeádta é an t-ainm comhaid ar an gcóras comhad seo. - + Folder name of folder entity to use when warning about invalid name Fillteán - + File name of folder entity to use when warning about invalid name Comhad - + %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 Ní thacaítear le % 1 ainm ina bhfuil an carachtar "% 2" ar an gcóras comhad seo. - + %1 name contains at least one invalid character Tá carachtar neamhbhailí amháin ar a laghad in ainm % 1 - + %1 name is a reserved name on this file system. Is ainm forchoimeádta é % 1 ar an gcóras comhad seo. @@ -4377,22 +4372,22 @@ Is modh turgnamhach nua é seo. Má shocraíonn tú é a úsáid, cuir in iúl l Tá ainm an chomhaid ar an liosta dubh ar an bhfreastalaí. - + Reason: the entire filename is forbidden. Cúis: tá an comhadainm iomlán toirmiscthe. - + Reason: the filename has a forbidden base name (filename start). Cúis: tá bonnainm toirmiscthe ag an gcomhad (tús ainm an chomhaid). - + Reason: the file has a forbidden extension (.%1). Cúis: tá iarmhír toirmiscthe (.%1 ar an gcomhad. - + Reason: the filename contains a forbidden character (%1). Cúis: tá carachtar toirmiscthe (%1) san ainm comhaid. @@ -4427,7 +4422,7 @@ Is modh turgnamhach nua é seo. Má shocraíonn tú é a úsáid, cuir in iúl l Ní féidir sioncronú a dhéanamh mar gheall ar am modhnuithe neamhbhailí - + Could not upload file, because it is open in "%1". Níorbh fhéidir an comhad a uaslódáil toisc go bhfuil sé oscailte i "% 1". @@ -4510,18 +4505,18 @@ Is modh turgnamhach nua é seo. Má shocraíonn tú é a úsáid, cuir in iúl l Earráid agus meiteashonraí á nuashonrú mar gheall ar am modhnuithe neamhbhailí - - - - - - + + + + + + The folder %1 cannot be made read-only: %2 Ní féidir fillteán % 1 a dhéanamh inléite amháin: % 2 - - + + unknown exception eisceacht anaithnid @@ -4695,12 +4690,6 @@ Is modh turgnamhach nua é seo. Má shocraíonn tú é a úsáid, cuir in iúl l File %1 downloaded but it resulted in a local file name clash! Íoslódáilte comhad % 1 ach bhí clash ainm comhaid logánta mar thoradh air! - - - - Could not get file %1 from local DB - Níorbh fhéidir comhad %1 a fháil ó DB logánta - @@ -4708,6 +4697,13 @@ Is modh turgnamhach nua é seo. Má shocraíonn tú é a úsáid, cuir in iúl l could not get file %1 from local DB Níorbh fhéidir comhad % 1 a fháil ó DB logánta + + + + + Could not get file %1 from local DB + Níorbh fhéidir comhad %1 a fháil ó DB logánta + @@ -4808,16 +4804,16 @@ Is modh turgnamhach nua é seo. Má shocraíonn tú é a úsáid, cuir in iúl l Wrong HTTP code returned by server. Expected 201, but received "%1 %2". Cód HTTP mícheart curtha ar ais ag an bhfreastalaí. Bhíothas ag súil le 201, ach fuarthas "% 1 % 2". - - - Could not get file %1 from local DB - Níorbh fhéidir comhad %1 a fháil ó DB logánta - could not get file %1 from local DB Níorbh fhéidir comhad % 1 a fháil ó DB logánta + + + Could not get file %1 from local DB + Níorbh fhéidir comhad %1 a fháil ó DB logánta + Could not delete file record %1 from local DB @@ -5066,7 +5062,7 @@ Is modh turgnamhach nua é seo. Má shocraíonn tú é a úsáid, cuir in iúl l OCC::ShareManager - + Error Earráid @@ -5074,17 +5070,17 @@ Is modh turgnamhach nua é seo. Má shocraíonn tú é a úsáid, cuir in iúl l OCC::ShareModel - + %1 days %1 laethanta - + 1 day 1 lá - + Today Inniu @@ -5114,7 +5110,7 @@ Is modh turgnamhach nua é seo. Má shocraíonn tú é a úsáid, cuir in iúl l Titim comhad slán - + Could not find local folder for %1 Níorbh fhéidir fillteán logánta le haghaidh % 1 a aimsiú @@ -5237,11 +5233,6 @@ D'fhreagair an freastalaí le hearráid: % 2 Resharing this folder is not allowed Ní cheadaítear an fillteán seo a athroinnt - - - Copy internal link - Cóipeáil an nasc inmheánach - Copy secure file drop link @@ -5253,6 +5244,11 @@ D'fhreagair an freastalaí le hearráid: % 2 Copy public link Cóipeáil nasc poiblí + + + Copy internal link + Cóipeáil an nasc inmheánach + Copy secure filedrop link @@ -5284,16 +5280,16 @@ D'fhreagair an freastalaí le hearráid: % 2 remaining time before lock expires Rachaidh sé in éag i gceann % 1 nóiméadRachaidh sé in éag i gceann % 1 nóiméadRachaidh sé in éag i gceann % 1 nóiméadRachaidh sé in éag i gceann % 1 nóiméadRachaidh sé in éag i gceann % 1 nóiméad - - - Open in browser - Oscail sa bhrabhsálaí - Edit Cuir in eagar + + + Open in browser + Oscail sa bhrabhsálaí + Resolve conflict … @@ -5826,10 +5822,10 @@ D'fhreagair an freastalaí le hearráid: % 2 - - - - + + + + Error updating metadata for a folder %1 Earráid agus meiteashonraí á nuashonrú d'fhillteán % 1 @@ -5849,7 +5845,7 @@ D'fhreagair an freastalaí le hearráid: % 2 Níorbh fhéidir úsáideoir % 1 a chur leis nó a bhaint chun fillteán % 2 a rochtain - + Failed to unlock a folder. Theip ar dhíghlasáil fillteán. @@ -5867,7 +5863,7 @@ D'fhreagair an freastalaí le hearráid: % 2 Spreag an imirce - + %1 notifications % 1 fógra @@ -5883,17 +5879,17 @@ D'fhreagair an freastalaí le hearráid: % 2 Réitigh coinbhleacht - + Rename file Athainmnigh an comhad - + Open Nextcloud Assistant in browser Oscail Nextcloud Assistant sa bhrabhsálaí - + Open Nextcloud Talk in browser Oscail Nextcloud Talk sa bhrabhsálaí @@ -6027,29 +6023,19 @@ D'fhreagair an freastalaí le hearráid: % 2 - The Virtual filesystem feature does not support a drive as sync root - Ní thacaíonn gné an chórais comhaid fhíorúil le tiomántán mar fhréamh sioncronaithe + The Virtual filesystem feature requires a NTFS file system, %1 is using %2 + Teastaíonn córas comhaid NTFS ón ngné Chórais Fíorúil, tá % 1 ag úsáid % 2 Please choose a different location. %1 isn't a NTFS file system. It doesn't support virtual files. - - - The Virtual filesystem feature requires a NTFS file system, %1 is using %2 - Teastaíonn córas comhaid NTFS ón ngné Chórais Fíorúil, tá % 1 ag úsáid % 2 - Please choose a different location. %1 is a network drive. It doesn't support virtual files. - - - The Virtual filesystem feature is not supported on network drives - Ní thacaítear leis an ngné córas comhaid Fíorúil ar thiomáineann líonra - OCC::VfsDownloadErrorDialog @@ -6189,12 +6175,12 @@ D'fhreagair an freastalaí le hearráid: % 2 Ritheann an freastalaí ar chuntas % 1 leagan % 2 nach dtacaítear leis. Tá úsáid an chliaint seo le leaganacha freastalaí nach dtacaítear leo gan tástáil agus d'fhéadfadh sé a bheith contúirteach. Lean ar aghaidh ar do phriacal féin. - + Terms of service Téarmaí seirbhíse - + 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. Éilíonn do chuntas %1 go nglacann tú le téarmaí seirbhíse do fhreastalaí. Déanfar tú a atreorú chuig %2 chun a admháil gur léigh tú é agus go n-aontaíonn tú leis. @@ -6270,23 +6256,23 @@ D'fhreagair an freastalaí le hearráid: % 2 Níl aon fhillteán sioncronaithe cumraithe - + %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 le haghaidh % 1: Tá Sync ag rith. - + macOS VFS for %1: Last sync was successful. macOS VFS le haghaidh % 1: D'éirigh leis an sioncronú deireanach. - + macOS VFS for %1: A problem was encountered. macOS VFS le haghaidh % 1: Thángthas ar fhadhb. @@ -6732,7 +6718,7 @@ D'fhreagair an freastalaí le hearráid: % 2 Cuardaigh úsáideoirí nó grúpaí… - + Sharing is not available for this folder Níl roinnt ar fáil don fhillteán seo @@ -7143,11 +7129,6 @@ D'fhreagair an freastalaí le hearráid: % 2 downloading ag íoslódáil - - - Downloading - Ag íosluchtú - uploading @@ -7155,8 +7136,8 @@ D'fhreagair an freastalaí le hearráid: % 2 - Uploading - Ag uaslódáil + Downloading + Ag íosluchtú @@ -7165,8 +7146,8 @@ D'fhreagair an freastalaí le hearráid: % 2 - Deleting - Ag scriosadh + Uploading + Ag uaslódáil @@ -7174,9 +7155,9 @@ D'fhreagair an freastalaí le hearráid: % 2 ag gluaiseacht - - Moving - Ag bogadh + + Deleting + Ag scriosadh @@ -7185,26 +7166,31 @@ D'fhreagair an freastalaí le hearráid: % 2 - Ignoring - Ag neamhaird + Moving + Ag bogadh error earráid + + + Ignoring + Ag neamhaird + updating local metadata meiteashonraí áitiúla a nuashonrú - + Updating local metadata Meiteashonraí áitiúla á nuashonrú - + Updating local virtual files metadata Meiteashonraí comhaid fhíorúla áitiúla á nuashonrú @@ -7363,19 +7349,6 @@ D'fhreagair an freastalaí le hearráid: % 2 Glan an roghchlár teachtaireacht stádais - - OCC::FormatWarningsWizardPage - - - <b>Warning:</b> %1 - <b>Rabhadh:</b> %1 - - - - <b>Warning:</b> - <b>Rabhadh:</b> - - OCC::AbstractPropagateRemoteDeleteEncrypted @@ -7389,6 +7362,19 @@ D'fhreagair an freastalaí le hearráid: % 2 msgstr "Theip ar % 1 fillteán criptithe % 2 a dhíghlasáil." + + OCC::FormatWarningsWizardPage + + + <b>Warning:</b> %1 + <b>Rabhadh:</b> %1 + + + + <b>Warning:</b> + <b>Rabhadh:</b> + + OCC::OAuth diff --git a/translations/client_gl.ts b/translations/client_gl.ts index a28b2b89b5a91..6a7eb5c179d4a 100644 --- a/translations/client_gl.ts +++ b/translations/client_gl.ts @@ -172,13 +172,13 @@ - + Resume sync for all Continuar coa sincronización para todos - + Pause sync for all Por en pausa a sincronización para todos @@ -193,32 +193,32 @@ Engadir unha conta nova - + Settings Axustes - + Exit Saír - + Current account avatar Avatar actual da conta - + Current account status is online O estado da conta actual é conectado - + Current account status is do not disturb O estado actual da conta é non molestar - + Account switcher and settings menu Cambiador de contas e menú de axustes @@ -307,17 +307,17 @@ FileProviderEvictionDialog - + Evict materialised files Desaloxar os ficheiros materializados - + Materialised items Elementos materializados - + Reload Volver cargar @@ -493,17 +493,17 @@ MainWindow - + Nextcloud desktop main dialog Diálogo principal do escritorio Nextcloud - + Unified search results list Lista de resultados da busca unificada - + New activities Novas actividades @@ -554,14 +554,14 @@ Should an account import be attempted? Deberíase tentar importar unha conta? - + %1 accounts were detected from a legacy desktop client. Should the accounts be imported? Detectáronse % 1 contas dun cliente de escritorio estilo antigo. Deberían importarse as contas? - + 1 account was detected from a legacy desktop client. Should the account be imported? Detectouse 1 conta dun cliente de escritorio estilo antigo. @@ -575,12 +575,12 @@ Debería importarse a conta? Importar estilo antigo - + Import Importar - + Skip Omitir @@ -675,12 +675,12 @@ Debería importarse a conta? Cifrar cartafol - + 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> Isto cifrará o seu cartafol e todos os ficheiros que conteña. Estes ficheiros xa non serán accesíbeis sen a súa chave mnemónica de cifrado. @@ -712,17 +712,17 @@ Debería importarse a conta? Advertencia - + Please wait for the folder to sync before trying to encrypt it. Agarde ata que se sincronice o cartafol antes de tentar cifralo. - + The folder has a minor sync problem. Encryption of this folder will be possible once it has synced successfully O cartafol ten un pequeno problema de sincronización. O cifrado deste cartafol será posíbel unha vez que se sincronice correctamente - + The folder has a sync error. Encryption of this folder will be possible once it has synced successfully O cartafol ten un erro de sincronización. O cifrado deste cartafol será posíbel unha vez que se sincronice correctamente @@ -978,7 +978,7 @@ Esta acción interromperá calquera sincronización que estea a executarse actua Non hai conexión con %1 en %2. - + Unable to connect to %1. Non é posíbel conectar con %1. @@ -988,7 +988,7 @@ Esta acción interromperá calquera sincronización que estea a executarse actua Produciuse un erro de configuración do servidor: %1 en %2. - + You need to accept the terms of service É preciso que Vde. acepte as condicións de servizo @@ -1018,7 +1018,7 @@ Esta acción interromperá calquera sincronización que estea a executarse actua Hai cartafoles que non se sincronizaron porque son demasiado grandes ou almacenamentos externos: - + There are folders that have grown in size beyond %1MB: %2 Hai cartafoles que creceron máis aló de %1MB: %2 @@ -1220,34 +1220,39 @@ Esta acción interromperá calquera sincronización que estea a executarse actua Continuar - + + Quit %1 + Saír de %1 + + + %1 accounts number of accounts imported %1 contas - + 1 account 1 conta - + %1 folders number of folders imported %1 cartafoles - + 1 folder 1 cartafol - + Legacy import Importar estilo antigo - + Imported %1 and %2 from a legacy desktop client. %3 number of accounts and folders imported. list of users. @@ -1264,11 +1269,6 @@ Esta acción interromperá calquera sincronización que estea a executarse actua There was an error while accessing the configuration file at %1. Please make sure the file can be accessed by your system account. Produciuse un erro ao acceder ao ficheiro de configuración en %1. Comprobe que é posíbel acceder ao ficheiro coa súa conta do sistema. - - - Quit %1 - Saír de %1 - OCC::AuthenticationDialog @@ -1733,13 +1733,13 @@ Esta acción interromperá calquera sincronización que estea a executarse actua Erro do servidor: a resposta PROPFIND non está formatada en XML. - - + + Encrypted metadata setup error! Produciuse un erro na configuración dos metadatos cifrados! - + Encrypted metadata setup error: initial signature from server is empty. Produciuse un erro de configuración dos metadatos cifrados: a sinatura inicial do servidor está baleira. @@ -2134,17 +2134,17 @@ Isto pode ser un problema coas súas bibliotecas OpenSSL. Please choose a different location. The folder %1 doesn't exist. - + Escolla unha localización diferente. O cartafol %1 non existe. Please choose a different location. %1 isn't a valid folder. - + Escolla unha localización diferente. O cartafol %1 non é válido. Please choose a different location. %1 isn't a readable folder. - + Escolla unha localización diferente. O cartafol %1 non é lexíbel. @@ -2295,29 +2295,29 @@ Se isto foi un accidente e decide manter os seus ficheiros, volveranse sincroniz Conservar os ficheiros - + A folder has surpassed the set folder size limit of %1MB: %2. %3 Un cartafol superou o límite de tamaño de cartafol establecido de %1MB: %2. %3 - + Keep syncing Manter sincronizado - + Stop syncing Deixar de sincronizar - + The folder %1 has surpassed the set folder size limit of %2MB. O cartafol %1 superou o límite de tamaño de cartafol estabelecido de %2MB. - + Would you like to stop syncing this folder? Quere deixar de sincronizar este cartafol? @@ -2345,12 +2345,12 @@ Isto significa que o cliente de sincronización podería non enviar os cambios i %1 - + Virtual file download failed with code "%1", status "%2" and error message "%3" Produciuse un fallo na descarga do ficheiro virtual co código «%1», o estado «%2» e a mensaxe de erro «%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. @@ -2359,7 +2359,7 @@ Confirme que quere proceder a estas eliminacións. Como alternativa, pode restaurar todos os ficheiros eliminados enviándoos desde o cartafol «%1» ao 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. @@ -2368,22 +2368,22 @@ Confirme que quere proceder a estas eliminacións. Como alternativa, pode restaurar todos os ficheiros eliminados descargándoos do servidor. - + Remove all files? Quere retirar todos os ficheiros? - + Proceed with Deletion Proceder á eliminación - + Restore Files to Server Restaurar os ficheiros no servidor - + Restore Files from Server Restaurar os ficheiros do servidor @@ -2454,32 +2454,32 @@ Como alternativa, pode restaurar todos os ficheiros eliminados descargándoos do Preparando para sincronizar. - + Syncing %1 of %2 (A few seconds left) Sincronizando %1 de %2 (restan uns segundos) - + Syncing %1 of %2 (%3 left) Sincronizando %1 de %2 (restan %3) - + Syncing %1 of %2 Sincronizando %1 de %2 - + Syncing %1 (A few seconds left) Sincronizando %1 (restan uns segundos) - + Syncing %1 (%2 left) Sincronizando %1 (restan %2) - + Syncing %1 Sincronizando %1 @@ -2523,16 +2523,6 @@ Como alternativa, pode restaurar todos os ficheiros eliminados descargándoos do No valid folder selected! Non seleccionou ningún cartafol correcto! - - - The folder %1 is used in a folder sync connection! - O cartafol %1 úsase nunha conexión de sincronización de cartafoles! - - - - Please choose a different location. The selected folder isn't valid. - - The selected path does not exist! @@ -2543,62 +2533,67 @@ Como alternativa, pode restaurar todos os ficheiros eliminados descargándoos do The selected path is not a folder! A ruta seleccionada non é un cartafol! - - - - Please choose a different location. %1 is already being used as a sync folder. - - You have no permission to write to the selected folder! Vde. non ten permiso para escribir neste cartafol! + + + The local folder %1 already contains a folder used in a folder sync connection. Please pick another one! + O cartafol local %1 xa contén un cartafol usado nunha conexión de sincronización de cartafoles. Escolla outro! + + + + The local folder %1 is already contained in a folder used in a folder sync connection. Please pick another one! + O cartafol local %1 está dentro dun cartafol usado nunha conexión de sincronización de cartafoles. Escolla outro! + + + + There is already a sync from the server to this local folder. Please pick another local folder! + Xa existe unha tarefa de sincronización entre o servidor e este cartafol. Escolla outro cartafol local! + + + + Please choose a different location. The selected folder isn't valid. + Escolla unha localización diferente. O cartafol seleccionado non é válido. + + + + + Please choose a different location. %1 is already being used as a sync folder. + Escolla unha localización diferente. %1 xa está a se usar como cartafol de sincronización. + Please choose a different location. The path %1 doesn't exist. - + Escolla unha localización diferente. A ruta %1 non existe. Please choose a different location. The path %1 isn't a folder. - + Escolla unha localización diferente. A ruta %1 non é un cartafol. Please choose a different location. You don't have enough permissions to write to %1. folder location - - - - - The local folder %1 already contains a folder used in a folder sync connection. Please pick another one! - O cartafol local %1 xa contén un cartafol usado nunha conexión de sincronización de cartafoles. Escolla outro! - - - - The local folder %1 is already contained in a folder used in a folder sync connection. Please pick another one! - O cartafol local %1 está dentro dun cartafol usado nunha conexión de sincronización de cartafoles. Escolla outro! + Escolla unha localización diferente. Non ten permisos abondo para escribir en %1. Please choose a different location. %1 is already contained in a folder used as a sync folder. - - - - - There is already a sync from the server to this local folder. Please pick another local folder! - Xa existe unha tarefa de sincronización entre o servidor e este cartafol. Escolla outro cartafol local! + Escolla unha localización diferente. %1 xa está contido nun cartafol usado como cartafol de sincronización. Please choose a different location. %1 is already being used as a sync folder for %2. folder location, server url - + Escolla unha situación diferente. %1 xa se está a usar como cartafol 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. @@ -2706,12 +2701,12 @@ Para usuarios avanzados: este problema pode estar relacionado con varios ficheir Reconciliando os cambios - + Syncing local and remote changes Sincronizando cambios locais e 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'" %1 %2 … @@ -2729,7 +2724,7 @@ Para usuarios avanzados: este problema pode estar relacionado con varios ficheir , - + Download %1/s Example text: "Download 24Kb/s" (%1 is replaced by 24Kb (translated)) Descargar %1/s @@ -2746,7 +2741,7 @@ Para usuarios avanzados: este problema pode estar relacionado con varios ficheir ↓ %1/s - + Upload %1/s Example text: "Upload 24Kb/s" (%1 is replaced by 24Kb (translated)) Enviar %1/s @@ -2797,12 +2792,12 @@ Para usuarios avanzados: este problema pode estar relacionado con varios ficheir ficheiro %1 de %2 - + File %1 of %2 Ficheiro %1 de %2 - + About to start syncing A piques de comezar a sincronización @@ -2911,7 +2906,7 @@ Para usuarios avanzados: este problema pode estar relacionado con varios ficheir Please choose a different location. %1 is already being synced to %2. - + Escolla unha localización diferente. %1 xa está a se sincronizar con %2 @@ -2956,7 +2951,7 @@ Para usuarios avanzados: este problema pode estar relacionado con varios ficheir Virtual files are not supported at the selected location - + Os ficheiros virtuais non son compatíbeis coa localización seleccionada @@ -3168,7 +3163,7 @@ Para usuarios avanzados: este problema pode estar relacionado con varios ficheir Notificacións do servidor que precisan atención. - + Show chat notification dialogs. Amosar os diálogos de notificación de parolas. @@ -3209,17 +3204,17 @@ Note that this selects only what pool upgrades are taken from, and that there ar Teña en conta que isto só selecciona de que grupo se toman as anovacións e que non hai reversións: por tanto, reverter da canle beta á canle estábel normalmente non se pode facer inmediatamente e significa agardar por unha versión estábel que sexa máis recente que a versión beta instalada actualmente. - + daily diario - + enterprise empresarial - + - beta: contains versions with new features that may not be tested thoroughly - daily: contains versions created daily only for testing and development @@ -3231,7 +3226,7 @@ Downgrading versions is not possible immediately: changing from beta to stable m Non é posíbel reverter versións inmediatamente: cambiar de beta a estábel implica agardar pola nova versión estábel. - + - enterprise: contains stable versions for customers. Downgrading versions is not possible immediately: changing from stable to enterprise means waiting for the new enterprise version. @@ -3241,12 +3236,12 @@ Downgrading versions is not possible immediately: changing from stable to enterp Non é posíbel reverter as versións inmediatamente: cambiar de estábel estable a empresarial implica agardar pola nova versión empresarial. - + Changing update channel? Quere cambiar a canle de actualización? - + The channel determines which upgrades will be offered to install: - stable: contains tested versions considered reliable @@ -3941,7 +3936,7 @@ Teña en conta que o uso de calquera opción da liña de ordes anulara este axus Virtual files are not supported at the selected location - + Os ficheiros virtuais non son compatíbeis coa localización seleccionada @@ -4298,30 +4293,30 @@ Este é un novo modo experimental. Se decide usalo, agradecémoslle que informe O nome do ficheiro é un nome reservado neste sistema de ficheiros. - + Folder name of folder entity to use when warning about invalid name Cartafol - + File name of folder entity to use when warning about invalid name Ficheiro - + %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 O nome %1 que contén o carácter «%2» non está admitido neste sistema de ficheiros. - + %1 name contains at least one invalid character O nome %1 contén algún carácter incorrecto - + %1 name is a reserved name on this file system. O nome %1 é un nome reservado neste sistema de ficheiros. @@ -4376,22 +4371,22 @@ Este é un novo modo experimental. Se decide usalo, agradecémoslle que informe O nome do ficheiro está na lista de bloqueo no servidor. - + Reason: the entire filename is forbidden. Motivo: está prohibido todo o nome do ficheiro. - + Reason: the filename has a forbidden base name (filename start). Motivo: o nome do ficheiro ten un nome base prohibido (inicio do nome de ficheiro). - + Reason: the file has a forbidden extension (.%1). Motivo: o ficheiro ten unha extensión prohibida (.%1). - + Reason: the filename contains a forbidden character (%1). Motivo: o nome do ficheiro contén un carácter prohibido (%1). @@ -4426,7 +4421,7 @@ Este é un novo modo experimental. Se decide usalo, agradecémoslle que informe Non é posíbel sincronizar por mor dunha hora de modificación incorrecta - + Could not upload file, because it is open in "%1". Non foi posíbel enviar o ficheiro porque está aberto en «%1». @@ -4509,18 +4504,18 @@ Este é un novo modo experimental. Se decide usalo, agradecémoslle que informe Produciuse un erro ao actualizar os metadatos por mor dunha hora de modificación incorrecta - - - - - - + + + + + + The folder %1 cannot be made read-only: %2 Non é posíbel facer que o cartafol %1 sexa de só lectura: %2 - - + + unknown exception excepción descoñecida @@ -4694,12 +4689,6 @@ Este é un novo modo experimental. Se decide usalo, agradecémoslle que informe File %1 downloaded but it resulted in a local file name clash! Descargouse o ficheiro %1 mais provocou unha colisión no nome do ficheiro local! - - - - Could not get file %1 from local DB - Non foi posíbel obter o ficheiro %1 da BD local - @@ -4707,6 +4696,13 @@ Este é un novo modo experimental. Se decide usalo, agradecémoslle que informe could not get file %1 from local DB non foi posíbel obter o ficheiro %1 da base de datos local + + + + + Could not get file %1 from local DB + Non foi posíbel obter o ficheiro %1 da BD local + @@ -4807,16 +4803,16 @@ Este é un novo modo experimental. Se decide usalo, agradecémoslle que informe Wrong HTTP code returned by server. Expected 201, but received "%1 %2". O servidor devolveu código HTTP erróneo. Agardábase 201, mais recibiuse «%1 %2». - - - Could not get file %1 from local DB - Non foi posíbel obter o ficheiro %1 da BD local - could not get file %1 from local DB non foi posíbel obter o ficheiro %1 da base de datos local + + + Could not get file %1 from local DB + Non foi posíbel obter o ficheiro %1 da BD local + Could not delete file record %1 from local DB @@ -5065,7 +5061,7 @@ Este é un novo modo experimental. Se decide usalo, agradecémoslle que informe OCC::ShareManager - + Error Erro @@ -5073,17 +5069,17 @@ Este é un novo modo experimental. Se decide usalo, agradecémoslle que informe OCC::ShareModel - + %1 days %1 días - + 1 day 1 día - + Today Hoxe @@ -5113,7 +5109,7 @@ Este é un novo modo experimental. Se decide usalo, agradecémoslle que informe Entrega segura de ficheiros - + Could not find local folder for %1 Non foi posíbel atopar o cartafol local para %1 @@ -5236,11 +5232,6 @@ O servidor respondeu co erro: %2 Resharing this folder is not allowed Non está permitido volver compartir este cartafol - - - Copy internal link - Copiar a ligazón interna - Copy secure file drop link @@ -5252,6 +5243,11 @@ O servidor respondeu co erro: %2 Copy public link Copiar a ligazón pública + + + Copy internal link + Copiar a ligazón interna + Copy secure filedrop link @@ -5283,16 +5279,16 @@ O servidor respondeu co erro: %2 remaining time before lock expires Caduca en %1 minutosCaduca en %1 minutos - - - Open in browser - Abrir no navegador - Edit Editar + + + Open in browser + Abrir no navegador + Resolve conflict … @@ -5825,10 +5821,10 @@ O servidor respondeu co erro: %2 - - - - + + + + Error updating metadata for a folder %1 Produciuse un erro ao actualizar os metadatos dun cartafol %1 @@ -5848,7 +5844,7 @@ O servidor respondeu co erro: %2 Non foi posíbel engadir ou retirar o usuario %1 do acceso ao cartafol %2 - + Failed to unlock a folder. Produciuse un fallo ao desbloquear un cartafol. @@ -5866,7 +5862,7 @@ O servidor respondeu co erro: %2 Activar a migración - + %1 notifications %1 notificacións @@ -5882,17 +5878,17 @@ O servidor respondeu co erro: %2 Resolver conflitos - + Rename file Cambiar o nome do ficheiro - + Open Nextcloud Assistant in browser Abrir o Asistente de Nextcloud no navegador - + Open Nextcloud Talk in browser Abrir Parladoiro de Nextcloud no navegador @@ -6022,32 +6018,22 @@ O servidor respondeu co erro: %2 Please choose a different location. %1 is a drive. It doesn't support virtual files. - + Escolla unha localización diferente. %1 é unha unidade. Non admite ficheiros virtuais - The Virtual filesystem feature does not support a drive as sync root - A funcionalidade do sistema de ficheiros virtual non admite unha unidade como raíz de sincronización + The Virtual filesystem feature requires a NTFS file system, %1 is using %2 + A funcionalidade do sistema de ficheiros virtual precisa dun sistema de ficheiros NTFS, %1 está a usar %2 Please choose a different location. %1 isn't a NTFS file system. It doesn't support virtual files. - - - - - The Virtual filesystem feature requires a NTFS file system, %1 is using %2 - A funcionalidade do sistema de ficheiros virtual precisa dun sistema de ficheiros NTFS, %1 está a usar %2 + Escolla unha localización diferente. %1 non é un sistema de ficheiros NTFS. Non admite ficheiros virtuais Please choose a different location. %1 is a network drive. It doesn't support virtual files. - - - - - The Virtual filesystem feature is not supported on network drives - A funcionalidade do sistema de ficheiros virtual non é compatíbel coas unidades de rede + Escolla unha localización diferente. %1 é unha unidade de rede. Non admite ficheiros virtuais @@ -6188,12 +6174,12 @@ O servidor respondeu co erro: %2 O servidor na conta %1 executa unha versión non admitida (%2). O uso deste cliente con versións de servidor non admitidas non está probado e é potencialmente perigoso. Proceda baixo a súa propia responsabilidade. - + Terms of service Condicións de servizo - + 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. A súa conta %1 require que acepte as condicións de servizo do seu servidor. Vai ser redirixido a %2 para que confirme que as leu e que está conforme con elas. @@ -6269,23 +6255,23 @@ O servidor respondeu co erro: %2 Non hai cartafoles de sincronización configurados - + %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: a sincronización está a executarse. - + macOS VFS for %1: Last sync was successful. macOS VFS para %1: a última sincronización fíxose correctamente. - + macOS VFS for %1: A problem was encountered. macOS VFS para %1: atopouse un problema. @@ -6731,7 +6717,7 @@ O servidor respondeu co erro: %2 Buscar usuarios ou grupos… - + Sharing is not available for this folder Non está dispoñíbel a compartición deste cartafol @@ -7142,11 +7128,6 @@ O servidor respondeu co erro: %2 downloading descargando - - - Downloading - Descargando - uploading @@ -7154,8 +7135,8 @@ O servidor respondeu co erro: %2 - Uploading - Enviando + Downloading + Descargando @@ -7164,8 +7145,8 @@ O servidor respondeu co erro: %2 - Deleting - Eliminando + Uploading + Enviando @@ -7173,9 +7154,9 @@ O servidor respondeu co erro: %2 movendo - - Moving - Movendo + + Deleting + Eliminando @@ -7184,26 +7165,31 @@ O servidor respondeu co erro: %2 - Ignoring - Ignorando + Moving + Movendo error erro + + + Ignoring + Ignorando + updating local metadata actualizando os metadatos locais - + Updating local metadata Actualizando os metadatos locais - + Updating local virtual files metadata Actualizando os metadatos dos ficheiros virtuais locais @@ -7362,19 +7348,6 @@ O servidor respondeu co erro: %2 Limpar o menú de mensaxes de estado - - OCC::FormatWarningsWizardPage - - - <b>Warning:</b> %1 - <b>Advertencia:</b> %1 - - - - <b>Warning:</b> - <b>Advertencia:</b> - - OCC::AbstractPropagateRemoteDeleteEncrypted @@ -7388,6 +7361,19 @@ O servidor respondeu co erro: %2 «%1 Produciuse un fallo ao desbloquear o cartafol cifrado %2». + + OCC::FormatWarningsWizardPage + + + <b>Warning:</b> %1 + <b>Advertencia:</b> %1 + + + + <b>Warning:</b> + <b>Advertencia:</b> + + OCC::OAuth diff --git a/translations/client_he.ts b/translations/client_he.ts index 649c0eafccce8..c0579f8fbcca5 100644 --- a/translations/client_he.ts +++ b/translations/client_he.ts @@ -172,13 +172,13 @@ - + Resume sync for all - + Pause sync for all @@ -193,32 +193,32 @@ - + Settings - + Exit - + Current account avatar - + Current account status is online - + Current account status is do not disturb - + Account switcher and settings menu @@ -307,17 +307,17 @@ FileProviderEvictionDialog - + Evict materialised files - + Materialised items - + Reload @@ -493,17 +493,17 @@ MainWindow - + Nextcloud desktop main dialog - + Unified search results list - + New activities @@ -553,13 +553,13 @@ Should an account import be attempted? - + %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? @@ -572,12 +572,12 @@ Should the account be imported? - + Import - + Skip @@ -672,12 +672,12 @@ Should the account be imported? הצפנת תיקייה - + 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> @@ -708,17 +708,17 @@ Should the account be imported? אזהרה - + 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 @@ -969,7 +969,7 @@ This action will abort any currently running synchronization. אין חיבור אל %1 ב־%2. - + Unable to connect to %1. @@ -979,7 +979,7 @@ This action will abort any currently running synchronization. שגיאה בתצורת השרת: %1 ב־%2. - + You need to accept the terms of service @@ -1009,7 +1009,7 @@ This action will abort any currently running synchronization. ישנן תיקיות שלא סונכרנו כיוון שהן גדולות מדי או באחסון חיצוני: - + There are folders that have grown in size beyond %1MB: %2 @@ -1211,34 +1211,39 @@ This action will abort any currently running synchronization. המשך - + + Quit %1 + צא מ %1 + + + %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. @@ -1254,11 +1259,6 @@ This action will abort any currently running synchronization. There was an error while accessing the configuration file at %1. Please make sure the file can be accessed by your system account. - - - Quit %1 - צא מ %1 - OCC::AuthenticationDialog @@ -1723,13 +1723,13 @@ This action will abort any currently running synchronization. - - + + Encrypted metadata setup error! - + Encrypted metadata setup error: initial signature from server is empty. @@ -2279,28 +2279,28 @@ If this was an accident and you decide to keep your files, they will be re-synce לשמור על הקבצים - + 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? @@ -2324,41 +2324,41 @@ 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 @@ -2429,32 +2429,32 @@ Alternatively, you can restore all deleted files by downloading them from the se בהכנות לסנכרון. - + 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 @@ -2498,16 +2498,6 @@ Alternatively, you can restore all deleted files by downloading them from the se No valid folder selected! לא נבחרה תיקיית תקנית! - - - The folder %1 is used in a folder sync connection! - - - - - Please choose a different location. The selected folder isn't valid. - - The selected path does not exist! @@ -2518,17 +2508,37 @@ Alternatively, you can restore all deleted files by downloading them from the se The selected path is not a folder! הנתיב שנבחר אינו מצביע על תיקייה! + + + You have no permission to write to the selected folder! + אין לך הרשאות לכתוב לתיקייה הנבחרת! + + + + The local folder %1 already contains a folder used in a folder sync connection. Please pick another one! + + + + + The local folder %1 is already contained in a folder used in a folder sync connection. Please pick another one! + + + + + There is already a sync from the server to this local folder. Please pick another local folder! + + + + + 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. - - - You have no permission to write to the selected folder! - אין לך הרשאות לכתוב לתיקייה הנבחרת! - Please choose a different location. The path %1 doesn't exist. @@ -2546,26 +2556,11 @@ Alternatively, you can restore all deleted files by downloading them from the se folder location - - - The local folder %1 already contains a folder used in a folder sync connection. Please pick another one! - - - - - The local folder %1 is already contained in a folder used in a folder sync connection. Please pick another one! - - Please choose a different location. %1 is already contained in a folder used as a sync folder. - - - There is already a sync from the server to this local folder. Please pick another local folder! - - Please choose a different location. %1 is already being used as a sync folder for %2. @@ -2573,7 +2568,7 @@ Alternatively, you can restore all deleted files by downloading them from the se - + 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. @@ -2678,12 +2673,12 @@ For advanced users: this issue might be related to multiple sync database files - + 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'" @@ -2701,7 +2696,7 @@ For advanced users: this issue might be related to multiple sync database files - + Download %1/s Example text: "Download 24Kb/s" (%1 is replaced by 24Kb (translated)) @@ -2718,7 +2713,7 @@ For advanced users: this issue might be related to multiple sync database files ↓ %1 לשנייה - + Upload %1/s Example text: "Upload 24Kb/s" (%1 is replaced by 24Kb (translated)) @@ -2769,12 +2764,12 @@ For advanced users: this issue might be related to multiple sync database files קובץ %1 מתוך %2 - + File %1 of %2 - + About to start syncing @@ -3140,7 +3135,7 @@ For advanced users: this issue might be related to multiple sync database files התראות שרת שדורשות תשומת לב. - + Show chat notification dialogs. @@ -3179,17 +3174,17 @@ Note that this selects only what pool upgrades are taken from, and that there ar - + daily - + enterprise - + - beta: contains versions with new features that may not be tested thoroughly - daily: contains versions created daily only for testing and development @@ -3198,7 +3193,7 @@ 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. @@ -3206,12 +3201,12 @@ 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 @@ -4251,30 +4246,30 @@ This is a new, experimental mode. If you decide to use it, please report any iss - + 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. @@ -4329,22 +4324,22 @@ This is a new, experimental mode. If you decide to use it, please report any iss - + 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). @@ -4379,7 +4374,7 @@ This is a new, experimental mode. If you decide to use it, please report any iss - + Could not upload file, because it is open in "%1". @@ -4462,18 +4457,18 @@ This is a new, experimental mode. If you decide to use it, please report any iss - - - - - - + + + + + + The folder %1 cannot be made read-only: %2 - - + + unknown exception @@ -4647,12 +4642,6 @@ This is a new, experimental mode. If you decide to use it, please report any iss File %1 downloaded but it resulted in a local file name clash! - - - - Could not get file %1 from local DB - - @@ -4660,6 +4649,13 @@ This is a new, experimental mode. If you decide to use it, please report any iss could not get file %1 from local DB + + + + + Could not get file %1 from local DB + + @@ -4761,13 +4757,13 @@ This is a new, experimental mode. If you decide to use it, please report any iss הוחזר קוד HTTP שגוי על ידי השרת. אמור היה להיות 201 אבל התקבל „%1 %2”. - - Could not get file %1 from local DB + + could not get file %1 from local DB - - could not get file %1 from local DB + + Could not get file %1 from local DB @@ -5018,7 +5014,7 @@ This is a new, experimental mode. If you decide to use it, please report any iss OCC::ShareManager - + Error @@ -5026,17 +5022,17 @@ This is a new, experimental mode. If you decide to use it, please report any iss OCC::ShareModel - + %1 days - + 1 day - + Today @@ -5066,7 +5062,7 @@ This is a new, experimental mode. If you decide to use it, please report any iss - + Could not find local folder for %1 @@ -5187,11 +5183,6 @@ Server replied with error: %2 Resharing this folder is not allowed - - - Copy internal link - העתקת קישור פנימי - Copy secure file drop link @@ -5203,6 +5194,11 @@ Server replied with error: %2 Copy public link העתקת קישור ציבורי + + + Copy internal link + העתקת קישור פנימי + Copy secure filedrop link @@ -5234,16 +5230,16 @@ Server replied with error: %2 remaining time before lock expires - - - Open in browser - פתיחה בדפדפן - Edit עריכה + + + Open in browser + פתיחה בדפדפן + Resolve conflict … @@ -5776,10 +5772,10 @@ Server replied with error: %2 - - - - + + + + Error updating metadata for a folder %1 @@ -5799,7 +5795,7 @@ Server replied with error: %2 - + Failed to unlock a folder. @@ -5817,7 +5813,7 @@ Server replied with error: %2 - + %1 notifications @@ -5833,17 +5829,17 @@ Server replied with error: %2 - + Rename file - + Open Nextcloud Assistant in browser - + Open Nextcloud Talk in browser @@ -5977,7 +5973,7 @@ Server replied with error: %2 - The Virtual filesystem feature does not support a drive as sync root + The Virtual filesystem feature requires a NTFS file system, %1 is using %2 @@ -5985,21 +5981,11 @@ Server replied with error: %2 Please choose a different location. %1 isn't a NTFS file system. It doesn't support virtual files. - - - The Virtual filesystem feature requires a NTFS file system, %1 is using %2 - - Please choose a different location. %1 is a network drive. It doesn't support virtual files. - - - The Virtual filesystem feature is not supported on network drives - - OCC::VfsDownloadErrorDialog @@ -6139,12 +6125,12 @@ Server replied with error: %2 - + 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. @@ -6220,23 +6206,23 @@ Server replied with error: %2 לא הוגדרו תיקיות סנכרון - + %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. @@ -6682,7 +6668,7 @@ Server replied with error: %2 - + Sharing is not available for this folder @@ -7093,11 +7079,6 @@ Server replied with error: %2 downloading - - - Downloading - - uploading @@ -7105,7 +7086,7 @@ Server replied with error: %2 - Uploading + Downloading @@ -7115,7 +7096,7 @@ Server replied with error: %2 - Deleting + Uploading @@ -7124,8 +7105,8 @@ Server replied with error: %2 - - Moving + + Deleting @@ -7135,7 +7116,7 @@ Server replied with error: %2 - Ignoring + Moving @@ -7143,18 +7124,23 @@ Server replied with error: %2 error שגיאה + + + Ignoring + + updating local metadata נתוני העל המקומיים מתעדכנים - + Updating local metadata - + Updating local virtual files metadata @@ -7313,19 +7299,6 @@ Server replied with error: %2 - - OCC::FormatWarningsWizardPage - - - <b>Warning:</b> %1 - <b>אזהרה:</b> %1 - - - - <b>Warning:</b> - <b>אזהרה:</b> - - OCC::AbstractPropagateRemoteDeleteEncrypted @@ -7339,6 +7312,19 @@ Server replied with error: %2 "%1 שחרור הצפנת התיקייה נכשל %2". + + OCC::FormatWarningsWizardPage + + + <b>Warning:</b> %1 + <b>אזהרה:</b> %1 + + + + <b>Warning:</b> + <b>אזהרה:</b> + + OCC::OAuth diff --git a/translations/client_hr.ts b/translations/client_hr.ts index c3606768d30fa..a3b7c6f0b8066 100644 --- a/translations/client_hr.ts +++ b/translations/client_hr.ts @@ -172,13 +172,13 @@ - + Resume sync for all - + Pause sync for all @@ -193,32 +193,32 @@ - + Settings - + Exit - + Current account avatar - + Current account status is online - + Current account status is do not disturb - + Account switcher and settings menu @@ -307,17 +307,17 @@ FileProviderEvictionDialog - + Evict materialised files - + Materialised items - + Reload @@ -493,17 +493,17 @@ MainWindow - + Nextcloud desktop main dialog - + Unified search results list - + New activities @@ -553,13 +553,13 @@ Should an account import be attempted? - + %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? @@ -572,12 +572,12 @@ Should the account be imported? - + Import - + Skip @@ -672,12 +672,12 @@ Should the account be imported? Šifriraj mapu - + 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> @@ -708,17 +708,17 @@ Should the account be imported? Upozorenje - + 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 @@ -973,7 +973,7 @@ Ova će radnja prekinuti bilo koju trenutačnu sinkronizaciju. Ne postoji veza s %1 na %2. - + Unable to connect to %1. @@ -983,7 +983,7 @@ Ova će radnja prekinuti bilo koju trenutačnu sinkronizaciju. Pogreška konfiguracije poslužitelja: %1 na %2. - + You need to accept the terms of service @@ -1013,7 +1013,7 @@ Ova će radnja prekinuti bilo koju trenutačnu sinkronizaciju. Ove mape nisu sinkronizirane jer su prevelike ili su vanjski prostori za pohranu: - + There are folders that have grown in size beyond %1MB: %2 @@ -1215,34 +1215,39 @@ Ova će radnja prekinuti bilo koju trenutačnu sinkronizaciju. Nastavi - + + Quit %1 + Zatvori %1 + + + %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. @@ -1258,11 +1263,6 @@ Ova će radnja prekinuti bilo koju trenutačnu sinkronizaciju. There was an error while accessing the configuration file at %1. Please make sure the file can be accessed by your system account. - - - Quit %1 - Zatvori %1 - OCC::AuthenticationDialog @@ -1727,13 +1727,13 @@ Ova će radnja prekinuti bilo koju trenutačnu sinkronizaciju. Pogreška poslužitelja: PROPFIND odgovor nije formatiran u XML-u! - - + + Encrypted metadata setup error! - + Encrypted metadata setup error: initial signature from server is empty. @@ -2289,28 +2289,28 @@ Ako ste slučajno odabrali ovu radnju i želite zadržati svoje datoteke, ponovn Zadrži datoteke - + 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? @@ -2338,41 +2338,41 @@ To znači da klijent za sinkronizaciju možda neće odmah otpremiti lokalne prom %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. 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 @@ -2443,32 +2443,32 @@ Alternatively, you can restore all deleted files by downloading them from the se Priprema za sinkronizaciju. - + 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 @@ -2512,16 +2512,6 @@ Alternatively, you can restore all deleted files by downloading them from the se No valid folder selected! Nije odabrana nijedna valjana mapa! - - - The folder %1 is used in a folder sync connection! - - - - - Please choose a different location. The selected folder isn't valid. - - The selected path does not exist! @@ -2532,17 +2522,37 @@ Alternatively, you can restore all deleted files by downloading them from the se The selected path is not a folder! Odabran put nije mapa! + + + You have no permission to write to the selected folder! + Nemate dopuštenje za pisanje u odabranu mapu! + + + + The local folder %1 already contains a folder used in a folder sync connection. Please pick another one! + Lokalna mapa %1 već sadrži mapu koja se upotrebljava u poveznici za sinkronizaciju mape. Odaberite drugu mapu! + + + + The local folder %1 is already contained in a folder used in a folder sync connection. Please pick another one! + Lokalna mapa %1 već je sadržana u mapi koja se upotrebljava u poveznici za sinkronizaciju mape. Odaberite drugu mapu! + + + + There is already a sync from the server to this local folder. Please pick another local folder! + Već postoji sinkronizacija između poslužitelja i te lokalne mape. Odaberite drugu lokalnu mapu! + + + + 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. - - - You have no permission to write to the selected folder! - Nemate dopuštenje za pisanje u odabranu mapu! - Please choose a different location. The path %1 doesn't exist. @@ -2560,26 +2570,11 @@ Alternatively, you can restore all deleted files by downloading them from the se folder location - - - The local folder %1 already contains a folder used in a folder sync connection. Please pick another one! - Lokalna mapa %1 već sadrži mapu koja se upotrebljava u poveznici za sinkronizaciju mape. Odaberite drugu mapu! - - - - The local folder %1 is already contained in a folder used in a folder sync connection. Please pick another one! - Lokalna mapa %1 već je sadržana u mapi koja se upotrebljava u poveznici za sinkronizaciju mape. Odaberite drugu mapu! - Please choose a different location. %1 is already contained in a folder used as a sync folder. - - - There is already a sync from the server to this local folder. Please pick another local folder! - Već postoji sinkronizacija između poslužitelja i te lokalne mape. Odaberite drugu lokalnu mapu! - Please choose a different location. %1 is already being used as a sync folder for %2. @@ -2587,7 +2582,7 @@ Alternatively, you can restore all deleted files by downloading them from the se - + 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. @@ -2692,12 +2687,12 @@ For advanced users: this issue might be related to multiple sync database files Usklađivanje promjena - + 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'" @@ -2715,7 +2710,7 @@ For advanced users: this issue might be related to multiple sync database files , - + Download %1/s Example text: "Download 24Kb/s" (%1 is replaced by 24Kb (translated)) @@ -2732,7 +2727,7 @@ For advanced users: this issue might be related to multiple sync database files ↓ %1/s - + Upload %1/s Example text: "Upload 24Kb/s" (%1 is replaced by 24Kb (translated)) @@ -2783,12 +2778,12 @@ For advanced users: this issue might be related to multiple sync database files datoteka %1 od %2 - + File %1 of %2 - + About to start syncing @@ -3154,7 +3149,7 @@ For advanced users: this issue might be related to multiple sync database files Obavijesti poslužitelja koje zahtijevaju pažnju. - + Show chat notification dialogs. @@ -3195,17 +3190,17 @@ Note that this selects only what pool upgrades are taken from, and that there ar Imajte na umu da se ovime odabire samo kategorija iz koje dolaze nadogradnje i da nema vraćanja na stare inačice: stoga se povratak s beta kanala na stabilni kanal obično ne može odmah izvršiti, već je potrebno pričekati stabilnu inačicu koja je novija od trenutačno instalirane beta inačice. - + daily - + enterprise - + - beta: contains versions with new features that may not be tested thoroughly - daily: contains versions created daily only for testing and development @@ -3214,7 +3209,7 @@ 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. @@ -3222,12 +3217,12 @@ 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 @@ -4278,30 +4273,30 @@ Ovo je novi, eksperimentalni način rada. Ako se odlučite aktivirati ga, prijav Naziv datoteke je rezervirani naziv u ovom datotečnom sustavu. - + 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. @@ -4356,22 +4351,22 @@ Ovo je novi, eksperimentalni način rada. Ako se odlučite aktivirati ga, prijav Ovaj naziv datoteke je blokiran na poslužitelju. - + 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). @@ -4406,7 +4401,7 @@ Ovo je novi, eksperimentalni način rada. Ako se odlučite aktivirati ga, prijav - + Could not upload file, because it is open in "%1". @@ -4489,18 +4484,18 @@ Ovo je novi, eksperimentalni način rada. Ako se odlučite aktivirati ga, prijav - - - - - - + + + + + + The folder %1 cannot be made read-only: %2 - - + + unknown exception @@ -4674,12 +4669,6 @@ Ovo je novi, eksperimentalni način rada. Ako se odlučite aktivirati ga, prijav File %1 downloaded but it resulted in a local file name clash! - - - - Could not get file %1 from local DB - - @@ -4687,6 +4676,13 @@ Ovo je novi, eksperimentalni način rada. Ako se odlučite aktivirati ga, prijav could not get file %1 from local DB + + + + + Could not get file %1 from local DB + + @@ -4788,13 +4784,13 @@ Ovo je novi, eksperimentalni način rada. Ako se odlučite aktivirati ga, prijav Poslužitelj je vratio pogrešnu HTTP šifru. Očekivana je 201, ali je primljena „%1 %2”. - - Could not get file %1 from local DB + + could not get file %1 from local DB - - could not get file %1 from local DB + + Could not get file %1 from local DB @@ -5045,7 +5041,7 @@ Ovo je novi, eksperimentalni način rada. Ako se odlučite aktivirati ga, prijav OCC::ShareManager - + Error @@ -5053,17 +5049,17 @@ Ovo je novi, eksperimentalni način rada. Ako se odlučite aktivirati ga, prijav OCC::ShareModel - + %1 days - + 1 day - + Today @@ -5093,7 +5089,7 @@ Ovo je novi, eksperimentalni način rada. Ako se odlučite aktivirati ga, prijav - + Could not find local folder for %1 @@ -5214,11 +5210,6 @@ Server replied with error: %2 Resharing this folder is not allowed Ponovno dijeljenje ove mape nije dopušteno - - - Copy internal link - Kopiraj internu poveznicu - Copy secure file drop link @@ -5230,6 +5221,11 @@ Server replied with error: %2 Copy public link Kopiraj javnu poveznicu + + + Copy internal link + Kopiraj internu poveznicu + Copy secure filedrop link @@ -5261,16 +5257,16 @@ Server replied with error: %2 remaining time before lock expires - - - Open in browser - Otvori u pregledniku - Edit Uredi + + + Open in browser + Otvori u pregledniku + Resolve conflict … @@ -5803,10 +5799,10 @@ Server replied with error: %2 - - - - + + + + Error updating metadata for a folder %1 @@ -5826,7 +5822,7 @@ Server replied with error: %2 - + Failed to unlock a folder. @@ -5844,7 +5840,7 @@ Server replied with error: %2 - + %1 notifications @@ -5860,17 +5856,17 @@ Server replied with error: %2 - + Rename file - + Open Nextcloud Assistant in browser - + Open Nextcloud Talk in browser @@ -6004,29 +6000,19 @@ Server replied with error: %2 - The Virtual filesystem feature does not support a drive as sync root - + The Virtual filesystem feature requires a NTFS file system, %1 is using %2 + Značajka virtualnog datotečnog sustava zahtijeva datotečni sustav NTFS, %1 upotrebljava %2 Please choose a different location. %1 isn't a NTFS file system. It doesn't support virtual files. - - - The Virtual filesystem feature requires a NTFS file system, %1 is using %2 - Značajka virtualnog datotečnog sustava zahtijeva datotečni sustav NTFS, %1 upotrebljava %2 - Please choose a different location. %1 is a network drive. It doesn't support virtual files. - - - The Virtual filesystem feature is not supported on network drives - - OCC::VfsDownloadErrorDialog @@ -6166,12 +6152,12 @@ Server replied with error: %2 Poslužitelj na računu %1 koristi se nepodržanom inačicom %2. Upotreba ovog klijenta s nepodržanim inačicama poslužitelja nije testirana i potencijalno je opasna. Nastavite na vlastitu odgovornost. - + 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. @@ -6247,23 +6233,23 @@ Server replied with error: %2 Nije konfigurirana nijedna mapa za sinkronizaciju - + %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. @@ -6709,7 +6695,7 @@ Server replied with error: %2 - + Sharing is not available for this folder @@ -7120,11 +7106,6 @@ Server replied with error: %2 downloading preuzimanje - - - Downloading - - uploading @@ -7132,7 +7113,7 @@ Server replied with error: %2 - Uploading + Downloading @@ -7142,7 +7123,7 @@ Server replied with error: %2 - Deleting + Uploading @@ -7151,8 +7132,8 @@ Server replied with error: %2 premještanje - - Moving + + Deleting @@ -7162,7 +7143,7 @@ Server replied with error: %2 - Ignoring + Moving @@ -7170,18 +7151,23 @@ Server replied with error: %2 error pogreška + + + Ignoring + + updating local metadata ažuriranje lokalnih metapodataka - + Updating local metadata - + Updating local virtual files metadata @@ -7340,19 +7326,6 @@ Server replied with error: %2 - - OCC::FormatWarningsWizardPage - - - <b>Warning:</b> %1 - <b>Upozorenje:</b> %1 - - - - <b>Warning:</b> - <b>Upozorenje:</ b> - - OCC::AbstractPropagateRemoteDeleteEncrypted @@ -7366,6 +7339,19 @@ Server replied with error: %2 „%1 Nije uspjelo otključavanje šifrirane mape %2.” + + OCC::FormatWarningsWizardPage + + + <b>Warning:</b> %1 + <b>Upozorenje:</b> %1 + + + + <b>Warning:</b> + <b>Upozorenje:</ b> + + OCC::OAuth diff --git a/translations/client_hu.ts b/translations/client_hu.ts index b375a09d9f816..18391954650c3 100644 --- a/translations/client_hu.ts +++ b/translations/client_hu.ts @@ -172,13 +172,13 @@ - + Resume sync for all Szinkronizálás folytatása mindenhova - + Pause sync for all Mindenhova szinkronizálás szüneteltetése @@ -193,32 +193,32 @@ Új fiók hozzáadása - + Settings Beállítások - + Exit Kilépés - + Current account avatar Jelenlegi fiókprofilkép - + Current account status is online Jelenlegi fiókállapot: online - + Current account status is do not disturb Jelenlegi fiókállapot: ne zavarjanak - + Account switcher and settings menu Fiókváltó és beállítások menü @@ -307,17 +307,17 @@ FileProviderEvictionDialog - + Evict materialised files Materializált fájlok kilakoltatása - + Materialised items Materializált elemek - + Reload Újratöltés @@ -493,17 +493,17 @@ MainWindow - + Nextcloud desktop main dialog A Nextcloud asztali alkalmazás főablaka - + Unified search results list Egyesített keresési találatlista - + New activities Új tevékenységek @@ -554,14 +554,14 @@ Should an account import be attempted? Megpróbálja importálni a fiókot? - + %1 accounts were detected from a legacy desktop client. Should the accounts be imported? %1 fiók észlelve egy régi asztali ügyfélről. Be kell importálni a fiókokat? - + 1 account was detected from a legacy desktop client. Should the account be imported? 1 fiók észlelve egy régi asztali ügyfélről. @@ -575,12 +575,12 @@ Be kell importálni a fiókot? Importálás örökölt kliensből - + Import Importálás - + Skip Kihagyás @@ -675,12 +675,12 @@ Be kell importálni a fiókot? Mappa titkosítása - + End-to-end Encryption Végpontok közti titkosítás - + 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> Ez titkosítja a mappát és a benne lévő összes fájlt. Ezek a fájlok többé nem lesznek elérhetők a titkosítási emlékeztető kulcs nélkül. @@ -712,17 +712,17 @@ Be kell importálni a fiókot? Figyelmeztetés - + Please wait for the folder to sync before trying to encrypt it. Kérjük, várja meg a mappa szinkronizálását, mielőtt megpróbálná titkosítani. - + The folder has a minor sync problem. Encryption of this folder will be possible once it has synced successfully A mappának van egy kisebb szinkronizálási problémája. A mappa titkosítása a sikeres szinkronizálás után lesz lehetséges. - + The folder has a sync error. Encryption of this folder will be possible once it has synced successfully A mappának szinkronizálási hibája van. A mappa titkosítása a sikeres szinkronizálás után lesz lehetséges. @@ -978,7 +978,7 @@ Ez a művelet megszakítja a jelenleg futó szinkronizálást. Nincs kapcsolat ehhez: %1, itt: %2. - + Unable to connect to %1. Nem lehetséges a csatlakozás a következőhöz: %1. @@ -988,7 +988,7 @@ Ez a művelet megszakítja a jelenleg futó szinkronizálást. Kiszolgáló konfigurációs hiba: %1, itt: %2. - + You need to accept the terms of service El kell fogadnia a szolgáltatási feltételeket @@ -1018,7 +1018,7 @@ Ez a művelet megszakítja a jelenleg futó szinkronizálást. Az alábbi mappák nem lettek szinkronizálva, mert túl nagyok, vagy külső tárolók: - + There are folders that have grown in size beyond %1MB: %2 Vannak olyan mappák, amelyek mérete meghaladta a(z) %1 MB-ot: %2 @@ -1220,34 +1220,39 @@ Ez a művelet megszakítja a jelenleg futó szinkronizálást. Folytatás - + + Quit %1 + %1 kilépés + + + %1 accounts number of accounts imported %1 fiók - + 1 account 1 fiók - + %1 folders number of folders imported %1 mappa - + 1 folder 1 mappa - + Legacy import Importálás örökölt kliensből - + Imported %1 and %2 from a legacy desktop client. %3 number of accounts and folders imported. list of users. @@ -1264,11 +1269,6 @@ Ez a művelet megszakítja a jelenleg futó szinkronizálást. There was an error while accessing the configuration file at %1. Please make sure the file can be accessed by your system account. Hiba történt a következő konfigurációs fájl elérésekor: %1. Győződjön meg róla, hogy a fájlt eléri a rendszerfiók. - - - Quit %1 - %1 kilépés - OCC::AuthenticationDialog @@ -1733,13 +1733,13 @@ Ez a művelet megszakítja a jelenleg futó szinkronizálást. Kiszolgálóhiba: A PROPFIND válasz nem XML formátumú! - - + + Encrypted metadata setup error! Titkosított metaadatok beállítási hibája! - + Encrypted metadata setup error: initial signature from server is empty. Titkosított metaadatok beállítási hibája: a kiszolgáló kezdeti aláírása üres. @@ -2295,29 +2295,29 @@ Ha ez véletlen volt, és úgy dönt, hogy megtartja ezeket a fájlokat, akkor Fájlok megtartása - + A folder has surpassed the set folder size limit of %1MB: %2. %3 Egy mappa túllépte a beállított %1 MB-os mappamérethatárt: %2. %3 - + Keep syncing Tovább szinkronizálás - + Stop syncing Szinkronizálás megszakítása - + The folder %1 has surpassed the set folder size limit of %2MB. A mappa túllépte a beállított %2MB-os mappamérethatárt: %1 - + Would you like to stop syncing this folder? Leállítja a mappa szinkronizációját? @@ -2345,12 +2345,12 @@ Ez azt jelenti, hogy a szinkronizációs kliens lehet, hogy nem fogja azonnal fe %1 - + Virtual file download failed with code "%1", status "%2" and error message "%3" A virtuális fájl letöltése „%1” kóddal, „%2” állapottal és „%3” hibaüzenettel sikertelen volt. - + 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. @@ -2359,7 +2359,7 @@ Kérjük, erősítse meg, hogy szeretné-e folytatni ezeket a törléseket. Alternatívaként az összes törölt fájlt visszaállíthatja a(z) „%1” mappából a kiszolgálóra történő feltöltéssel. - + 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. @@ -2368,22 +2368,22 @@ Kérjük, erősítse meg, hogy szeretné-e folytatni ezeket a törléseket. Alternatívaként az összes törölt fájlt visszaállíthatja a kiszolgálóról történő letöltéssel. - + Remove all files? Eltávolítja az összes fájlt? - + Proceed with Deletion Törlés folytatása - + Restore Files to Server Fájlok visszaállítása a kiszolgálóra - + Restore Files from Server Fájlok visszaállítása a kiszolgálóról @@ -2454,32 +2454,32 @@ Alternatívaként az összes törölt fájlt visszaállíthatja a kiszolgálór Előkészítés a szinkronizáláshoz. - + Syncing %1 of %2 (A few seconds left) %1 / %2 szinkronizálása (néhány másodperc maradt) - + Syncing %1 of %2 (%3 left) %1 / %2 szinkronizálása (%3 maradt) - + Syncing %1 of %2 %1 / %2 szinkronizálása - + Syncing %1 (A few seconds left) %1 szinkronizálása (néhány másodperc maradt) - + Syncing %1 (%2 left) %1 szinkronizálása (%2 maradt) - + Syncing %1 %1 szinkronizálása @@ -2523,16 +2523,6 @@ Alternatívaként az összes törölt fájlt visszaállíthatja a kiszolgálór No valid folder selected! Nincs érvényes mappa kiválasztva! - - - The folder %1 is used in a folder sync connection! - A(z) %1 mappát egy mappaszinkronizációs kapcsolat használja! - - - - Please choose a different location. The selected folder isn't valid. - - The selected path does not exist! @@ -2543,17 +2533,37 @@ Alternatívaként az összes törölt fájlt visszaállíthatja a kiszolgálór The selected path is not a folder! A kiválasztott elérési út nem mappa! + + + You have no permission to write to the selected folder! + Nincs joga a kiválasztott mappa írásához! + + + + The local folder %1 already contains a folder used in a folder sync connection. Please pick another one! + A(z) %1 helyi mappa már tartalmaz olyan mappát, amely mappa szinkronizálási kapcsolathoz használt. Válasszon egy másikat. + + + + The local folder %1 is already contained in a folder used in a folder sync connection. Please pick another one! + A(z) %1 helyi mappa már egy olyan mappában van, amely mappa szinkronizálási kapcsolathoz használt. Válasszon egy másikat. + + + + There is already a sync from the server to this local folder. Please pick another local folder! + Már van egy szinkronizálási mappa a kiszolgálóról ebben a helyi mappában. Válasszon egy másik mappát. + + + + 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. - - - You have no permission to write to the selected folder! - Nincs joga a kiválasztott mappa írásához! - Please choose a different location. The path %1 doesn't exist. @@ -2571,26 +2581,11 @@ Alternatívaként az összes törölt fájlt visszaállíthatja a kiszolgálór folder location - - - The local folder %1 already contains a folder used in a folder sync connection. Please pick another one! - A(z) %1 helyi mappa már tartalmaz olyan mappát, amely mappa szinkronizálási kapcsolathoz használt. Válasszon egy másikat. - - - - The local folder %1 is already contained in a folder used in a folder sync connection. Please pick another one! - A(z) %1 helyi mappa már egy olyan mappában van, amely mappa szinkronizálási kapcsolathoz használt. Válasszon egy másikat. - Please choose a different location. %1 is already contained in a folder used as a sync folder. - - - There is already a sync from the server to this local folder. Please pick another local folder! - Már van egy szinkronizálási mappa a kiszolgálóról ebben a helyi mappában. Válasszon egy másik mappát. - Please choose a different location. %1 is already being used as a sync folder for %2. @@ -2598,7 +2593,7 @@ Alternatívaként az összes törölt fájlt visszaállíthatja a kiszolgálór - + 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. @@ -2706,12 +2701,12 @@ Haladó felhasználók számára: Ez a probléma az egy mappában található t Változások egyeztetése - + Syncing local and remote changes Helyi és távoli változások szinkronizálása - + %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 … @@ -2729,7 +2724,7 @@ Haladó felhasználók számára: Ez a probléma az egy mappában található t , - + Download %1/s Example text: "Download 24Kb/s" (%1 is replaced by 24Kb (translated)) Letöltés: %1/s @@ -2746,7 +2741,7 @@ Haladó felhasználók számára: Ez a probléma az egy mappában található t ↓ %1/s - + Upload %1/s Example text: "Upload 24Kb/s" (%1 is replaced by 24Kb (translated)) Feltöltés: %1/s @@ -2797,12 +2792,12 @@ Haladó felhasználók számára: Ez a probléma az egy mappában található t %1 / %2 fájl - + File %1 of %2 %1 / %2 fájl - + About to start syncing Szinkronizálás megkezdése @@ -3168,7 +3163,7 @@ Haladó felhasználók számára: Ez a probléma az egy mappában található t Kiszolgálóértesítések, melyek a figyelmét kérik. - + Show chat notification dialogs. Csevegésértesítési párbeszédablakok megjelenítése @@ -3209,17 +3204,17 @@ Note that this selects only what pool upgrades are taken from, and that there ar Ne feledje, hogy ez csak azt választja ki, hogy a frissítések milyen készletből származnak, és hogy régebbi verzióra nem lehet visszaállni: tehát a béta csatornáról a stabil csatornára való visszatérés általában nem azonnali, vagyis várni kell egy stabil verzióra, amely újabb, mint a jelenleg telepített béta változat. - + daily napi - + enterprise vállalati - + - beta: contains versions with new features that may not be tested thoroughly - daily: contains versions created daily only for testing and development @@ -3231,7 +3226,7 @@ Downgrading versions is not possible immediately: changing from beta to stable m A verziók visszaváltása nem lehetséges azonnal: a bétáról stabilra való váltás az új stabil verzióra való várakozást jelenti. - + - enterprise: contains stable versions for customers. Downgrading versions is not possible immediately: changing from stable to enterprise means waiting for the new enterprise version. @@ -3241,12 +3236,12 @@ Downgrading versions is not possible immediately: changing from stable to enterp A verziók visszaváltása nem lehetséges azonnal: a stabilról vállalatira való váltás az új vállalati verzióra való várakozást jelenti. - + Changing update channel? Módosítja a frissítési csatornát? - + The channel determines which upgrades will be offered to install: - stable: contains tested versions considered reliable @@ -4300,30 +4295,30 @@ Ez egy új, kísérleti mód. Ha úgy dönt, hogy használja, akkor jelezze nek A fájlnév egy fenntartott név ezen a fájlrendszeren. - + Folder name of folder entity to use when warning about invalid name Mappa - + File name of folder entity to use when warning about invalid name Fájl - + %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 A(z) „%2” karaktert tartalmazó %1 nevek nem támogatottak ezen a fájlrendszeren. - + %1 name contains at least one invalid character A %1név legalább egy érvénytelen karaktert tartalmaz. - + %1 name is a reserved name on this file system. A %1név egy fenntartott név ezen a fájlrendszeren. @@ -4378,22 +4373,22 @@ Ez egy új, kísérleti mód. Ha úgy dönt, hogy használja, akkor jelezze nek A fájlnév feketelistára került a kiszolgálón. - + Reason: the entire filename is forbidden. Indoklás: a teljes fájlnév tiltott. - + Reason: the filename has a forbidden base name (filename start). Indoklás: a fájlnévnek tiltott alapneve van (fájlnév kezdete). - + Reason: the file has a forbidden extension (.%1). Indoklás: a fájl tiltott kiterjesztésű (.%1). - + Reason: the filename contains a forbidden character (%1). Indoklás: a fájlnév tiltott karaktert (%1) tartalmaz. @@ -4428,7 +4423,7 @@ Ez egy új, kísérleti mód. Ha úgy dönt, hogy használja, akkor jelezze nek Az érvénytelen módosítási idő miatt nem lehet szinkronizálni - + Could not upload file, because it is open in "%1". Nem sikerült feltölteni a fájlt, mert meg van nyitva itt: „%1”. @@ -4511,18 +4506,18 @@ Ez egy új, kísérleti mód. Ha úgy dönt, hogy használja, akkor jelezze nek Az érvénytelen módosítási idő miatt hiba történt a metaadatok frissítése során - - - - - - + + + + + + The folder %1 cannot be made read-only: %2 A(z) %1 mappa nem tehető csak olvashatóvá: %2 - - + + unknown exception ismeretlen kivétel @@ -4696,12 +4691,6 @@ Ez egy új, kísérleti mód. Ha úgy dönt, hogy használja, akkor jelezze nek File %1 downloaded but it resulted in a local file name clash! A(z) %1 fájl le lett töltve, de helyi fájlnévvel való ütközést eredményezett. - - - - Could not get file %1 from local DB - A(z) %1 fájl lekérése a helyi adatbázisból nem sikerült - @@ -4709,6 +4698,13 @@ Ez egy új, kísérleti mód. Ha úgy dönt, hogy használja, akkor jelezze nek could not get file %1 from local DB a(z) %1 fájl lekérése a helyi adatbázisból nem sikerült + + + + + Could not get file %1 from local DB + A(z) %1 fájl lekérése a helyi adatbázisból nem sikerült + @@ -4809,16 +4805,16 @@ Ez egy új, kísérleti mód. Ha úgy dönt, hogy használja, akkor jelezze nek Wrong HTTP code returned by server. Expected 201, but received "%1 %2". A kiszolgáló hibás HTTP kódot adott vissza. 201-es kód várt, de ez érkezett: „%1 %2”. - - - Could not get file %1 from local DB - A(z) %1 fájl lekérése a helyi adatbázisból nem sikerült - could not get file %1 from local DB a(z) %1 fájl lekérése a helyi adatbázisból nem sikerült + + + Could not get file %1 from local DB + A(z) %1 fájl lekérése a helyi adatbázisból nem sikerült + Could not delete file record %1 from local DB @@ -5067,7 +5063,7 @@ Ez egy új, kísérleti mód. Ha úgy dönt, hogy használja, akkor jelezze nek OCC::ShareManager - + Error Hiba @@ -5075,17 +5071,17 @@ Ez egy új, kísérleti mód. Ha úgy dönt, hogy használja, akkor jelezze nek OCC::ShareModel - + %1 days %1 nap - + 1 day 1 nap - + Today Ma @@ -5115,7 +5111,7 @@ Ez egy új, kísérleti mód. Ha úgy dönt, hogy használja, akkor jelezze nek Biztonságos fájllerakat - + Could not find local folder for %1 A helyi mappa nem található a(z) %1 számára @@ -5238,11 +5234,6 @@ A kiszolgáló hibával válaszolt: %2 Resharing this folder is not allowed A mappa továbbosztása nem megengedett - - - Copy internal link - Belső hivatkozás másolása - Copy secure file drop link @@ -5254,6 +5245,11 @@ A kiszolgáló hibával válaszolt: %2 Copy public link Nyilvános hivatkozás másolása + + + Copy internal link + Belső hivatkozás másolása + Copy secure filedrop link @@ -5285,16 +5281,16 @@ A kiszolgáló hibával válaszolt: %2 remaining time before lock expires %1 perc múlva lejár%1 perc múlva lejár - - - Open in browser - Megnyitás böngészőben - Edit Szerkesztés + + + Open in browser + Megnyitás böngészőben + Resolve conflict … @@ -5827,10 +5823,10 @@ A kiszolgáló hibával válaszolt: %2 - - - - + + + + Error updating metadata for a folder %1 Hiba a mappa metaadatainak frissítésekor: %1 @@ -5850,7 +5846,7 @@ A kiszolgáló hibával válaszolt: %2 Nem sikerült hozzáadni vagy eltávolítani %1 felhasználót a(a) %2 mappa eléréséhez - + Failed to unlock a folder. Nem sikerült feloldani egy mappát. @@ -5868,7 +5864,7 @@ A kiszolgáló hibával válaszolt: %2 - + %1 notifications %1 értesítés @@ -5884,17 +5880,17 @@ A kiszolgáló hibával válaszolt: %2 Ütközés feloldása - + Rename file Fájl átnevezése - + Open Nextcloud Assistant in browser Nextcloud Asszisztens megnyitása böngészőben - + Open Nextcloud Talk in browser Nextcloud Beszélgetés megnyitása böngészőben @@ -6028,29 +6024,19 @@ A kiszolgáló hibával válaszolt: %2 - The Virtual filesystem feature does not support a drive as sync root - A virtuális fájlrendszer funkció nem támogatja a meghajtót szinkronizálási gyökérként + The Virtual filesystem feature requires a NTFS file system, %1 is using %2 + A virtuális fájlrendszer szolgáltatáshoz NTFS fájlrendszerre van szükség, a(z) %1 a következőt használja: %2 Please choose a different location. %1 isn't a NTFS file system. It doesn't support virtual files. - - - The Virtual filesystem feature requires a NTFS file system, %1 is using %2 - A virtuális fájlrendszer szolgáltatáshoz NTFS fájlrendszerre van szükség, a(z) %1 a következőt használja: %2 - Please choose a different location. %1 is a network drive. It doesn't support virtual files. - - - The Virtual filesystem feature is not supported on network drives - A virtuális fájlrendszer funkció nem támogatott hálózati meghajtókon - OCC::VfsDownloadErrorDialog @@ -6190,12 +6176,12 @@ A kiszolgáló hibával válaszolt: %2 A(z) %1 fiók kiszolgálója nem támogatott verziót (%2) futtat. Ennek a kliensnek a nem támogatott kiszolgálóverziókkal történő használata nem tesztelt és potenciálisan veszélyes. Folytatás kizárólag saját felelősségére. - + Terms of service Szolgáltatási feltételek - + 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 fiókja megköveteli, hogy elfogadja a kiszolgáló szolgáltatási feltételeit. A rendszer átirányítja Önt, hogy elismerje, hogy elolvasta és elfogadja azt: %2 @@ -6271,23 +6257,23 @@ A kiszolgáló hibával válaszolt: %2 Nincs szinkronizációs könyvtár beállítva - + %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. %1 macOS VFS: A szinkronizálás fut. - + macOS VFS for %1: Last sync was successful. %1 macOS VFS: A legutolsó szinkronizálás sikeres volt. - + macOS VFS for %1: A problem was encountered. %1 macOS VFS: Probléma merült fel. @@ -6733,7 +6719,7 @@ A kiszolgáló hibával válaszolt: %2 Felhasználók vagy csoportok keresése... - + Sharing is not available for this folder A megosztás nem elérhető el ebben a mappában @@ -7144,11 +7130,6 @@ A kiszolgáló hibával válaszolt: %2 downloading letöltés - - - Downloading - Letöltés - uploading @@ -7156,8 +7137,8 @@ A kiszolgáló hibával válaszolt: %2 - Uploading - Feltöltés + Downloading + Letöltés @@ -7166,8 +7147,8 @@ A kiszolgáló hibával válaszolt: %2 - Deleting - Törlés + Uploading + Feltöltés @@ -7175,9 +7156,9 @@ A kiszolgáló hibával válaszolt: %2 áthelyezés - - Moving - Áthelyezés + + Deleting + Törlés @@ -7186,26 +7167,31 @@ A kiszolgáló hibával válaszolt: %2 - Ignoring - Kihagyás + Moving + Áthelyezés error hiba + + + Ignoring + Kihagyás + updating local metadata helyi metaadatok frissítése - + Updating local metadata Helyi metaadatok frissítése - + Updating local virtual files metadata A helyi virtuális fájlok metaadatainak frissítése @@ -7364,19 +7350,6 @@ A kiszolgáló hibával válaszolt: %2 Állapotüzenet-menü ürítése - - OCC::FormatWarningsWizardPage - - - <b>Warning:</b> %1 - <b>Figyelmeztetés:</b> %1 - - - - <b>Warning:</b> - <b>Figyelmeztetés:</b> - - OCC::AbstractPropagateRemoteDeleteEncrypted @@ -7390,6 +7363,19 @@ A kiszolgáló hibával válaszolt: %2 „%1 nem sikerült feloldani a(z) %2 titkosított mappát”. + + OCC::FormatWarningsWizardPage + + + <b>Warning:</b> %1 + <b>Figyelmeztetés:</b> %1 + + + + <b>Warning:</b> + <b>Figyelmeztetés:</b> + + OCC::OAuth diff --git a/translations/client_is.ts b/translations/client_is.ts index a4f075d4a40fa..61720114bc60c 100644 --- a/translations/client_is.ts +++ b/translations/client_is.ts @@ -172,13 +172,13 @@ - + Resume sync for all - + Pause sync for all @@ -193,32 +193,32 @@ - + Settings - + Exit - + Current account avatar - + Current account status is online - + Current account status is do not disturb - + Account switcher and settings menu @@ -307,17 +307,17 @@ FileProviderEvictionDialog - + Evict materialised files - + Materialised items - + Reload @@ -493,17 +493,17 @@ MainWindow - + Nextcloud desktop main dialog - + Unified search results list - + New activities @@ -554,14 +554,14 @@ Should an account import be attempted? Ætti að reyna að flytja aðganginn inn? - + %1 accounts were detected from a legacy desktop client. Should the accounts be imported? %1 aðgangar fundust úr eldri gerð vinnutölvuforrits. Ætti að flytja aðgangiana inn? - + 1 account was detected from a legacy desktop client. Should the account be imported? 1 aðgangur fannst úr eldri gerð vinnutölvuforrits. @@ -575,12 +575,12 @@ Should the account be imported? Eldri gerð innflutnings - + Import Flytja inn - + Skip Sleppa @@ -676,12 +676,12 @@ Should the account be imported? Dulrita möppu - + 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> @@ -712,17 +712,17 @@ Should the account be imported? Aðvörun - + 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 @@ -974,7 +974,7 @@ skráakerfið eða sameignarmöppur, gætu verið með önnur takmörk.Engin tenging við %1 á %2. - + Unable to connect to %1. @@ -984,7 +984,7 @@ skráakerfið eða sameignarmöppur, gætu verið með önnur takmörk. - + You need to accept the terms of service @@ -1015,7 +1015,7 @@ skráakerfið eða sameignarmöppur, gætu verið með önnur takmörk. - + There are folders that have grown in size beyond %1MB: %2 @@ -1217,34 +1217,39 @@ gagnageymslur: Halda áfram - + + Quit %1 + Hætta í %1 + + + %1 accounts number of accounts imported %1 notandaaðgangar - + 1 account 1 notandaaðgangur - + %1 folders number of folders imported %1 möppur - + 1 folder 1 mappa - + Legacy import Eldri gerð innflutnings - + Imported %1 and %2 from a legacy desktop client. %3 number of accounts and folders imported. list of users. @@ -1261,11 +1266,6 @@ gagnageymslur: There was an error while accessing the configuration file at %1. Please make sure the file can be accessed by your system account. Það kom upp villa við að nálgast stillingaskrána á %1. Gakktu úr skugga um að kerfisaðgangurinn hafi heimild til að vinna með skrána. - - - Quit %1 - Hætta í %1 - OCC::AuthenticationDialog @@ -1730,13 +1730,13 @@ gagnageymslur: - - + + Encrypted metadata setup error! - + Encrypted metadata setup error: initial signature from server is empty. @@ -2287,28 +2287,28 @@ If this was an accident and you decide to keep your files, they will be re-synce Halda skrám - + A folder has surpassed the set folder size limit of %1MB: %2. %3 - + Keep syncing Halda samstillingu áfram - + Stop syncing Stöðva samstillingu - + The folder %1 has surpassed the set folder size limit of %2MB. - + Would you like to stop syncing this folder? @@ -2332,41 +2332,41 @@ 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 @@ -2437,32 +2437,32 @@ Alternatively, you can restore all deleted files by downloading them from the se Undirbý samstillingu. - + 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 @@ -2506,16 +2506,6 @@ Alternatively, you can restore all deleted files by downloading them from the se No valid folder selected! Engin gild mappa valin! - - - The folder %1 is used in a folder sync connection! - - - - - Please choose a different location. The selected folder isn't valid. - - The selected path does not exist! @@ -2526,17 +2516,37 @@ Alternatively, you can restore all deleted files by downloading them from the se The selected path is not a folder! Valin slóð er ekki mappa! + + + You have no permission to write to the selected folder! + Þú hefur ekki réttindi til að skrifa í valda möppu! + + + + The local folder %1 already contains a folder used in a folder sync connection. Please pick another one! + + + + + The local folder %1 is already contained in a folder used in a folder sync connection. Please pick another one! + + + + + There is already a sync from the server to this local folder. Please pick another local folder! + + + + + 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. - - - You have no permission to write to the selected folder! - Þú hefur ekki réttindi til að skrifa í valda möppu! - Please choose a different location. The path %1 doesn't exist. @@ -2554,26 +2564,11 @@ Alternatively, you can restore all deleted files by downloading them from the se folder location - - - The local folder %1 already contains a folder used in a folder sync connection. Please pick another one! - - - - - The local folder %1 is already contained in a folder used in a folder sync connection. Please pick another one! - - Please choose a different location. %1 is already contained in a folder used as a sync folder. - - - There is already a sync from the server to this local folder. Please pick another local folder! - - Please choose a different location. %1 is already being used as a sync folder for %2. @@ -2581,7 +2576,7 @@ Alternatively, you can restore all deleted files by downloading them from the se - + 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. @@ -2686,12 +2681,12 @@ For advanced users: this issue might be related to multiple sync database files Samþætti breytingar - + 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'" @@ -2709,7 +2704,7 @@ For advanced users: this issue might be related to multiple sync database files , - + Download %1/s Example text: "Download 24Kb/s" (%1 is replaced by 24Kb (translated)) @@ -2726,7 +2721,7 @@ For advanced users: this issue might be related to multiple sync database files ↓ %1/s - + Upload %1/s Example text: "Upload 24Kb/s" (%1 is replaced by 24Kb (translated)) @@ -2777,12 +2772,12 @@ For advanced users: this issue might be related to multiple sync database files skrá %1 af %2 - + File %1 of %2 - + About to start syncing @@ -3148,7 +3143,7 @@ For advanced users: this issue might be related to multiple sync database files Tilkynningar frá þjóni sem krefjast athugunar. - + Show chat notification dialogs. @@ -3187,17 +3182,17 @@ Note that this selects only what pool upgrades are taken from, and that there ar - + daily - + enterprise - + - beta: contains versions with new features that may not be tested thoroughly - daily: contains versions created daily only for testing and development @@ -3206,7 +3201,7 @@ 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. @@ -3214,12 +3209,12 @@ 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 @@ -4259,30 +4254,30 @@ This is a new, experimental mode. If you decide to use it, please report any iss Skráarheitið er frátekið fyrir annað í þessu skráakerfi. - + 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. @@ -4337,22 +4332,22 @@ This is a new, experimental mode. If you decide to use it, please report any iss - + 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). @@ -4387,7 +4382,7 @@ This is a new, experimental mode. If you decide to use it, please report any iss - + Could not upload file, because it is open in "%1". @@ -4470,18 +4465,18 @@ This is a new, experimental mode. If you decide to use it, please report any iss Villa við að uppfæra lýsigögn: vegna ógilds breytingatíma - - - - - - + + + + + + The folder %1 cannot be made read-only: %2 - - + + unknown exception @@ -4655,12 +4650,6 @@ This is a new, experimental mode. If you decide to use it, please report any iss File %1 downloaded but it resulted in a local file name clash! - - - - Could not get file %1 from local DB - - @@ -4668,6 +4657,13 @@ This is a new, experimental mode. If you decide to use it, please report any iss could not get file %1 from local DB + + + + + Could not get file %1 from local DB + + @@ -4769,13 +4765,13 @@ This is a new, experimental mode. If you decide to use it, please report any iss Fékk rangan HTTP-kóða frá þjóni. Átti von á 201, en fékk "%1 %2". - - Could not get file %1 from local DB + + could not get file %1 from local DB - - could not get file %1 from local DB + + Could not get file %1 from local DB @@ -5026,7 +5022,7 @@ This is a new, experimental mode. If you decide to use it, please report any iss OCC::ShareManager - + Error @@ -5034,17 +5030,17 @@ This is a new, experimental mode. If you decide to use it, please report any iss OCC::ShareModel - + %1 days - + 1 day - + Today @@ -5074,7 +5070,7 @@ This is a new, experimental mode. If you decide to use it, please report any iss - + Could not find local folder for %1 @@ -5195,11 +5191,6 @@ Server replied with error: %2 Resharing this folder is not allowed Endurdeiling þessarar möppu er ekki leyfð - - - Copy internal link - Afrita innri tengil - Copy secure file drop link @@ -5211,6 +5202,11 @@ Server replied with error: %2 Copy public link Afrita opinberan tengil + + + Copy internal link + Afrita innri tengil + Copy secure filedrop link @@ -5242,16 +5238,16 @@ Server replied with error: %2 remaining time before lock expires Rennur út eftir %1 mínútuRennur út eftir %1 mínútur - - - Open in browser - Opna í vafra - Edit Breyta + + + Open in browser + Opna í vafra + Resolve conflict … @@ -5784,10 +5780,10 @@ Server replied with error: %2 - - - - + + + + Error updating metadata for a folder %1 @@ -5807,7 +5803,7 @@ Server replied with error: %2 - + Failed to unlock a folder. @@ -5825,7 +5821,7 @@ Server replied with error: %2 - + %1 notifications @@ -5841,17 +5837,17 @@ Server replied with error: %2 Leysa árekstur - + Rename file - + Open Nextcloud Assistant in browser - + Open Nextcloud Talk in browser @@ -5986,7 +5982,7 @@ Server replied with error: %2 - The Virtual filesystem feature does not support a drive as sync root + The Virtual filesystem feature requires a NTFS file system, %1 is using %2 @@ -5994,21 +5990,11 @@ Server replied with error: %2 Please choose a different location. %1 isn't a NTFS file system. It doesn't support virtual files. - - - The Virtual filesystem feature requires a NTFS file system, %1 is using %2 - - Please choose a different location. %1 is a network drive. It doesn't support virtual files. - - - The Virtual filesystem feature is not supported on network drives - - OCC::VfsDownloadErrorDialog @@ -6148,12 +6134,12 @@ Server replied with error: %2 - + 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. @@ -6229,23 +6215,23 @@ Server replied with error: %2 Engar samstillingarmöppur stilltar - + %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. @@ -6691,7 +6677,7 @@ Server replied with error: %2 - + Sharing is not available for this folder @@ -7102,11 +7088,6 @@ Server replied with error: %2 downloading sæki - - - Downloading - - uploading @@ -7114,7 +7095,7 @@ Server replied with error: %2 - Uploading + Downloading @@ -7124,7 +7105,7 @@ Server replied with error: %2 - Deleting + Uploading @@ -7133,8 +7114,8 @@ Server replied with error: %2 færi - - Moving + + Deleting @@ -7144,7 +7125,7 @@ Server replied with error: %2 - Ignoring + Moving @@ -7152,18 +7133,23 @@ Server replied with error: %2 error villa + + + Ignoring + + updating local metadata uppfæri staðvær lýsigögn - + Updating local metadata - + Updating local virtual files metadata @@ -7325,19 +7311,6 @@ sjálfgefið? Hreinsa valmynd stöðuskilaboða - - OCC::FormatWarningsWizardPage - - - <b>Warning:</b> %1 - <b>Aðvörun:</b> %1 - - - - <b>Warning:</b> - <b>Aðvörun:</b> - - OCC::AbstractPropagateRemoteDeleteEncrypted @@ -7351,6 +7324,19 @@ sjálfgefið? + + OCC::FormatWarningsWizardPage + + + <b>Warning:</b> %1 + <b>Aðvörun:</b> %1 + + + + <b>Warning:</b> + <b>Aðvörun:</b> + + OCC::OAuth diff --git a/translations/client_it.ts b/translations/client_it.ts index 81b826c84cbbb..40e846173562d 100644 --- a/translations/client_it.ts +++ b/translations/client_it.ts @@ -35,7 +35,7 @@ Scroll to top - + Scorri verso l'alto @@ -172,13 +172,13 @@ - + Resume sync for all Riprendi la sincronizzazione per tutti - + Pause sync for all Sospendi la sincronizzazione per tutti @@ -193,32 +193,32 @@ Aggiungi nuovo account - + Settings Impostazioni - + Exit Uscita - + Current account avatar Avatar dell'account corrente - + Current account status is online Lo stato attuale dell'account è online - + Current account status is do not disturb Lo stato attuale dell'account è "non disturbare" - + Account switcher and settings menu Menu di cambio account e impostazioni @@ -307,17 +307,17 @@ FileProviderEvictionDialog - + Evict materialised files Rimuovi i download dei file scaricati - + Materialised items File scaricati - + Reload Ricarica @@ -493,17 +493,17 @@ MainWindow - + Nextcloud desktop main dialog Finestra di dialogo principale del desktop Nextcloud - + Unified search results list Elenco dei risultati di ricerca unificato - + New activities Nuove attività @@ -554,14 +554,14 @@ Should an account import be attempted? Tentare un'importazione di account? - + %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? - + 1 account was detected from a legacy desktop client. Should the account be imported? 1 account trovatoda una versione precedente del client desktop. @@ -575,12 +575,12 @@ Importare l'account? Importazione obsoleta - + Import Importa - + Skip Salta @@ -675,12 +675,12 @@ Importare l'account? Cifra cartella - + End-to-end Encryption Cifratura end-to-end - + 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. @@ -712,17 +712,17 @@ Importare l'account? Avviso - + Please wait for the folder to sync before trying to encrypt it. Attendi che la cartella si sincronizzi prima di tentare di cifrarla. - + The folder has a minor sync problem. Encryption of this folder will be possible once it has synced successfully La cartella ha un problema minore di sincronizzazione. La cifratura di questa cartella sarà possibile dopo la sincronizzazione - + The folder has a sync error. Encryption of this folder will be possible once it has synced successfully La cartella ha un errore di sincronizzazione. La cifratura di questa cartella sarà possibile dopo la sincronizzazione @@ -978,7 +978,7 @@ Questa azione interromperà qualsiasi sincronizzazione attualmente in esecuzione Nessuna connessione a %1 su %2. - + Unable to connect to %1. Connessione non riuscita a %1. @@ -988,7 +988,7 @@ Questa azione interromperà qualsiasi sincronizzazione attualmente in esecuzione Errore di configurazione del server: %1 in %2. - + You need to accept the terms of service Devi accettare i termini del servizio @@ -1018,7 +1018,7 @@ Questa azione interromperà qualsiasi sincronizzazione attualmente in esecuzione Ci sono nuove cartelle che non sono state sincronizzate poiché sono troppo grandi o archiviazioni esterne: - + There are folders that have grown in size beyond %1MB: %2 Ci sono cartelle che sono cresciute di spazio superando %1MB: %2 @@ -1220,34 +1220,39 @@ Questa azione interromperà qualsiasi sincronizzazione attualmente in esecuzione Continua - + + Quit %1 + Esci da %1 + + + %1 accounts number of accounts imported %1 account - + 1 account 1 account - + %1 folders number of folders imported %1 cartelle - + 1 folder 1 cartella - + Legacy import Importazione obsoleta - + Imported %1 and %2 from a legacy desktop client. %3 number of accounts and folders imported. list of users. @@ -1264,11 +1269,6 @@ Questa azione interromperà qualsiasi sincronizzazione attualmente in esecuzione There was an error while accessing the configuration file at %1. Please make sure the file can be accessed by your system account. Si è verificato un errore durante l'accesso al file di configurazione su %1. Assicurati che il file sia accessibile dal tuo account di sistema. - - - Quit %1 - Esci da %1 - OCC::AuthenticationDialog @@ -1733,13 +1733,13 @@ Questa azione interromperà qualsiasi sincronizzazione attualmente in esecuzione Errore del server: la risposta PROPFIND non è in formato XML! - - + + Encrypted metadata setup error! Eerrore nell'impostazione dei metadati di crittografia! - + Encrypted metadata setup error: initial signature from server is empty. Errore di configurazione dei metadati crittografati: la firma iniziale del server è vuota. @@ -2134,17 +2134,17 @@ Questo può essere un problema delle le tue librerie OpenSSL. Please choose a different location. The folder %1 doesn't exist. - + Si prega di scegliere una posizione diversa. La cartella %1 non esiste. Please choose a different location. %1 isn't a valid folder. - + Si prega di scegliere una posizione diversa. %1 non è una cartella valida. Please choose a different location. %1 isn't a readable folder. - + Si prega di scegliere una posizione diversa.. %1 non è una cartella leggibile. @@ -2296,29 +2296,29 @@ Se è stato un errore e decidi di tenere i file, saranno sincronizzati nuovament Mantieni i file - + A folder has surpassed the set folder size limit of %1MB: %2. %3 Una cartella ha superato il limite di dimensione impostato per la cartella di %1MB: %2. %3 - + Keep syncing Continua a sincronizzare - + Stop syncing Ferma la sincronizzazione - + The folder %1 has surpassed the set folder size limit of %2MB. La cartella %1 ha superato il limite di dimensione impostato di %2MB. - + Would you like to stop syncing this folder? Vuoi interrompere la sincronizzazione di questa cartella? @@ -2346,12 +2346,12 @@ Questo significa che il client di sincronizzazione potrebbe non caricare le modi %1 - + Virtual file download failed with code "%1", status "%2" and error message "%3" Download del file virtuale fallito con codice "%1", stato "%2" e messaggio di errore "%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. @@ -2360,7 +2360,7 @@ 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. @@ -2369,22 +2369,22 @@ Si prega di confermare se si desidera procedere con queste eliminazioni. In alternativa, è possibile ripristinare tutti i file eliminati scaricandoli dal server. - + Remove all files? Rimuovere tutti i file? - + Proceed with Deletion Procedi con la cancellazione - + Restore Files to Server Ripristina i file sul server - + Restore Files from Server Ripristina i file dal server @@ -2455,32 +2455,32 @@ In alternativa, è possibile ripristinare tutti i file eliminati scaricandoli da Preparazione della sincronizzazione. - + Syncing %1 of %2 (A few seconds left) Sincronizzazione %1 di %2(Mancano pochi secondi) - + Syncing %1 of %2 (%3 left) Sincronizzazione%1 di %2 (%3 rimasto) - + Syncing %1 of %2 Sincronizzazione %1 di %2 - + Syncing %1 (A few seconds left) Sincronizzazione %1 (Mancano pochi secondi) - + Syncing %1 (%2 left) Sincronizzazione %1 (%2 rimasto) - + Syncing %1 Sincronizzazione %1 @@ -2524,16 +2524,6 @@ In alternativa, è possibile ripristinare tutti i file eliminati scaricandoli da No valid folder selected! Nessuna cartella valida selezionata! - - - The folder %1 is used in a folder sync connection! - La cartella%1 viene usata in una connessione di sincronizzazione delle cartelle! - - - - Please choose a different location. The selected folder isn't valid. - - The selected path does not exist! @@ -2544,62 +2534,67 @@ In alternativa, è possibile ripristinare tutti i file eliminati scaricandoli da The selected path is not a folder! Il percorso selezionato non è una cartella! - - - - Please choose a different location. %1 is already being used as a sync folder. - - You have no permission to write to the selected folder! Non hai i permessi di scrittura per la cartella selezionata! + + + The local folder %1 already contains a folder used in a folder sync connection. Please pick another one! + La cartella locale %1 contiene già una cartella utilizzata in una connessione di sincronizzazione delle cartelle. Selezionane un'altra! + + + + The local folder %1 is already contained in a folder used in a folder sync connection. Please pick another one! + La cartella locale %1 è già contenuta in una cartella utilizzata in una connessione di sincronizzazione delle cartelle. Selezionane un'altra! + + + + There is already a sync from the server to this local folder. Please pick another local folder! + Esiste già una sincronizzazione dal server a questa cartella locale. Seleziona un'altra cartella locale! + + + + Please choose a different location. The selected folder isn't valid. + Seleziona una posizione diversa. La cartella selezionata non è valida. + + + + + Please choose a different location. %1 is already being used as a sync folder. + Si prega di scegliere una posizione diversa. %1 è già utilizzata come cartella di sincronizzazione. + Please choose a different location. The path %1 doesn't exist. - + Si prega di scegliere una posizione diversa. Il percorso %1 non esiste. Please choose a different location. The path %1 isn't a folder. - + Si prega di scegliere una posizione diversa. Il percorso %1 non è una cartella. Please choose a different location. You don't have enough permissions to write to %1. folder location - - - - - The local folder %1 already contains a folder used in a folder sync connection. Please pick another one! - La cartella locale %1 contiene già una cartella utilizzata in una connessione di sincronizzazione delle cartelle. Selezionane un'altra! - - - - The local folder %1 is already contained in a folder used in a folder sync connection. Please pick another one! - La cartella locale %1 è già contenuta in una cartella utilizzata in una connessione di sincronizzazione delle cartelle. Selezionane un'altra! + Seleziona una posizione diversa. Non hai abbastanza permessi per scrivere %1. Please choose a different location. %1 is already contained in a folder used as a sync folder. - - - - - There is already a sync from the server to this local folder. Please pick another local folder! - Esiste già una sincronizzazione dal server a questa cartella locale. Seleziona un'altra cartella locale! + Si prega di scegliere una posizione diversa. %1è già contenuto in una cartella utilizzata come cartella di sincronizzazione. Please choose a different location. %1 is already being used as a sync folder for %2. folder location, server url - + Si prega di scegliere una posizione diversa. %1 è già utilizzato come cartella di sincronizzazione per %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. @@ -2708,12 +2703,12 @@ Per utenti avanzati: questo problema potrebbe essere correlato a più file di da Riconciliazione delle modifiche - + Syncing local and remote changes Sincronizzazione delle modifiche locali e remote - + %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 … @@ -2731,7 +2726,7 @@ Per utenti avanzati: questo problema potrebbe essere correlato a più file di da , - + Download %1/s Example text: "Download 24Kb/s" (%1 is replaced by 24Kb (translated)) Download %1/s @@ -2748,7 +2743,7 @@ Per utenti avanzati: questo problema potrebbe essere correlato a più file di da ↓ %1/s - + Upload %1/s Example text: "Upload 24Kb/s" (%1 is replaced by 24Kb (translated)) Upload %1/s @@ -2799,12 +2794,12 @@ Per utenti avanzati: questo problema potrebbe essere correlato a più file di da file %1 di %2 - + File %1 of %2 File %1 di %2 - + About to start syncing Pronto per iniziare la sincronizzazione @@ -2913,7 +2908,7 @@ Per utenti avanzati: questo problema potrebbe essere correlato a più file di da Please choose a different location. %1 is already being synced to %2. - + Si prega di scegliere una posizione diversa. %1 è già sincronizzato su %2. @@ -2958,7 +2953,7 @@ Per utenti avanzati: questo problema potrebbe essere correlato a più file di da Virtual files are not supported at the selected location - + I file virtuali non sono supportati nella posizione selezionata @@ -3170,7 +3165,7 @@ Per utenti avanzati: questo problema potrebbe essere correlato a più file di da Notifiche del server che richiedono attenzione. - + Show chat notification dialogs. Mostra la finestra di dialogo di notifica della chat. @@ -3209,17 +3204,17 @@ Note that this selects only what pool upgrades are taken from, and that there ar Il canale di aggiornamento determina quali aggiornamenti del client saranno offerti per l'installazione. Il canale "stabile" contiene solo aggiornamenti considerati affidabili, mentre le versioni nel canale "beta" possono contenere nuove funzionalità e correzioni di bug, ma non sono state ancora provate a fondo. Nota che questo seleziona solo da quale pool vengono prelevati gli aggiornamenti e che non ci sono downgrade: per cui tornare dal canale beta al canale stabile di solito non può essere fatto immediatamente e significa aspettare una versione stabile che sia più recente della versione beta attualmente installata. - + daily giornaliero - + enterprise enterprise - + - beta: contains versions with new features that may not be tested thoroughly - daily: contains versions created daily only for testing and development @@ -3231,7 +3226,7 @@ Downgrading versions is not possible immediately: changing from beta to stable m Non è possibile effettuare il downgrade delle versioni immediatamente: passare da beta a stabile significa attendere la nuova versione stabile. - + - enterprise: contains stable versions for customers. Downgrading versions is not possible immediately: changing from stable to enterprise means waiting for the new enterprise version. @@ -3241,12 +3236,12 @@ Downgrading versions is not possible immediately: changing from stable to enterp Il downgrade delle versioni non è possibile immediatamente: passare da stabile a enterprise significa attendere la nuova versione enterprise. - + Changing update channel? Vuoi cambiare canale di aggiornamento? - + The channel determines which upgrades will be offered to install: - stable: contains tested versions considered reliable @@ -3940,7 +3935,7 @@ Nota che l'utilizzo di qualsiasi opzione della riga di comando di registraz Virtual files are not supported at the selected location - + I file virtuali non sono supportati nella posizione selezionata @@ -4291,30 +4286,30 @@ This is a new, experimental mode. If you decide to use it, please report any iss Il nome del file è un nome riservato su questo file system. - + Folder name of folder entity to use when warning about invalid name Cartella - + 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 Il nome %1 che contiene il carattere "%2" non è supportato su questo file system. - + %1 name contains at least one invalid character Il nome %1 contiene almeno un carattere non valido - + %1 name is a reserved name on this file system. Il nome %1 è un nome riservato su questo file system. @@ -4369,22 +4364,22 @@ This is a new, experimental mode. If you decide to use it, please report any iss Il nome del file è nella lista nera sul server. - + Reason: the entire filename is forbidden. Motivo: è vietato l'intero nome del file. - + Reason: the filename has a forbidden base name (filename start). Motivo: il nome del file ha un nome di base vietato (inizio del nome del file). - + Reason: the file has a forbidden extension (.%1). Motivo: il file ha un'estensione vietata(.%1). - + Reason: the filename contains a forbidden character (%1). Motivo: il nome del file contiene un carattere vietato (%1). @@ -4419,7 +4414,7 @@ This is a new, experimental mode. If you decide to use it, please report any iss Impossibile sincronizzare a causa di un orario di modifica non valido - + Could not upload file, because it is open in "%1". Impossibile caricare il file, perché è aperto in "%1". @@ -4502,18 +4497,18 @@ This is a new, experimental mode. If you decide to use it, please report any iss Errore di aggiornamento dei metadati a causa dell'orario di modifica non valido - - - - - - + + + + + + The folder %1 cannot be made read-only: %2 La cartella %1 non può essere resa in sola lettura: %2 - - + + unknown exception eccezione sconosciuta @@ -4687,12 +4682,6 @@ This is a new, experimental mode. If you decide to use it, please report any iss File %1 downloaded but it resulted in a local file name clash! File %1 è stato scaricato ma ha causato un conflitto nei nomi di file! - - - - Could not get file %1 from local DB - Impossibile ottenere il file %1 dal DB locale - @@ -4700,6 +4689,13 @@ This is a new, experimental mode. If you decide to use it, please report any iss could not get file %1 from local DB impossibile ottenere il file %1 dal DB locale + + + + + Could not get file %1 from local DB + Impossibile ottenere il file %1 dal DB locale + @@ -4800,16 +4796,16 @@ 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". Codice HTTP errato restituito dal server. Atteso 201, ma ricevuto "%1 %2". - - - Could not get file %1 from local DB - Impossibile ottenere il file %1 dal DB locale - could not get file %1 from local DB impossibile ottenere il file %1 dal DB locale + + + Could not get file %1 from local DB + Impossibile ottenere il file %1 dal DB locale + Could not delete file record %1 from local DB @@ -5058,7 +5054,7 @@ This is a new, experimental mode. If you decide to use it, please report any iss OCC::ShareManager - + Error Errore @@ -5066,17 +5062,17 @@ This is a new, experimental mode. If you decide to use it, please report any iss OCC::ShareModel - + %1 days %1 giorni - + 1 day 1 giorno - + Today Oggi @@ -5106,7 +5102,7 @@ This is a new, experimental mode. If you decide to use it, please report any iss File drop sicuro - + Could not find local folder for %1 Impossibile trovare la cartella locale per %1 @@ -5229,11 +5225,6 @@ Il server ha risposto con errore: %2 Resharing this folder is not allowed La ri-condivisione di questa cartella non è consentita - - - Copy internal link - Copia collegamento interno - Copy secure file drop link @@ -5245,6 +5236,11 @@ Il server ha risposto con errore: %2 Copy public link Copia collegamento pubblico + + + Copy internal link + Copia collegamento interno + Copy secure filedrop link @@ -5276,16 +5272,16 @@ Il server ha risposto con errore: %2 remaining time before lock expires Scade fra %1 minutiScade fra %1 minutiScade fra %1 minuti - - - Open in browser - Apri nel browser - Edit Modifica + + + Open in browser + Apri nel browser + Resolve conflict … @@ -5818,10 +5814,10 @@ Il server ha risposto con errore: %2 - - - - + + + + Error updating metadata for a folder %1 Errore durante l'aggiornamento dei metadati per una cartella %1 @@ -5841,7 +5837,7 @@ Il server ha risposto con errore: %2 Impossibile aggiungere o rimuovere l'utente %1 per accedere alla cartella %2 - + Failed to unlock a folder. Impossibile sbloccare una cartella. @@ -5859,7 +5855,7 @@ Il server ha risposto con errore: %2 Avviare la migrazione - + %1 notifications %1 notifiche @@ -5875,17 +5871,17 @@ Il server ha risposto con errore: %2 Risolvi il conflitto - + Rename file Rinominare il file - + Open Nextcloud Assistant in browser Apri Nextcloud Assistant nel browser - + Open Nextcloud Talk in browser Apri Nextcloud Talk nel browser @@ -6015,32 +6011,22 @@ Il server ha risposto con errore: %2 Please choose a different location. %1 is a drive. It doesn't support virtual files. - + Si prega di scegliere una posizione diversa. %1 è un'unità. Non supporta file virtuali. - The Virtual filesystem feature does not support a drive as sync root - La funzionalità del file system virtuale non supporta un'unità come root di sincronizzazione + The Virtual filesystem feature requires a NTFS file system, %1 is using %2 + La funzionalità di filesystem virtuale richiede un file system NTFS, %1 sta utilizzando %2 Please choose a different location. %1 isn't a NTFS file system. It doesn't support virtual files. - - - - - The Virtual filesystem feature requires a NTFS file system, %1 is using %2 - La funzionalità di filesystem virtuale richiede un file system NTFS, %1 sta utilizzando %2 + Si prega di scegliere una posizione diversa. %1non è un file system NTFS. Non supporta file virtuali. Please choose a different location. %1 is a network drive. It doesn't support virtual files. - - - - - The Virtual filesystem feature is not supported on network drives - La funzionalità del file system virtuale non è supportata sulle unità di rete + Si prega di scegliere una posizione diversa. %1 è un'unità di rete. Non supporta file virtuali. @@ -6181,12 +6167,12 @@ Il server ha risposto con errore: %2 Il server sull'account %1 esegue una versione non supportata %2. L'utilizzo di questo client con versioni del server non supportate non è stato verificato e è potenzialmente pericoloso. Procedi a tuo rischio. - + Terms of service Termini di servizio - + 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. Il tuo account %1 richiede di accettare i termini di servizio del tuo server. Verrai reindirizzato a %2 per confermare di averlo letto e di accettarlo. @@ -6262,23 +6248,23 @@ Il server ha risposto con errore: %2 Nessuna cartella configurata per la sincronizzazione - + %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 per %1: La sincronizzazione è in esecuzione. - + macOS VFS for %1: Last sync was successful. macOS VFS per %1: L'ultima sincronizzazione è riuscita. - + macOS VFS for %1: A problem was encountered. macOS VFS per %1: Si è verificato un problema. @@ -6724,7 +6710,7 @@ Il server ha risposto con errore: %2 Cerca utenti o gruppi… - + Sharing is not available for this folder La condivisione non è disponibile per questa cartella @@ -7135,11 +7121,6 @@ Il server ha risposto con errore: %2 downloading scaricamento in corso - - - Downloading - Scaricamento - uploading @@ -7147,8 +7128,8 @@ Il server ha risposto con errore: %2 - Uploading - Caricamento + Downloading + Scaricamento @@ -7157,8 +7138,8 @@ Il server ha risposto con errore: %2 - Deleting - Cancellazione + Uploading + Caricamento @@ -7166,9 +7147,9 @@ Il server ha risposto con errore: %2 spostamento - - Moving - Spostamento + + Deleting + Cancellazione @@ -7177,26 +7158,31 @@ Il server ha risposto con errore: %2 - Ignoring - Ignorare + Moving + Spostamento error errore + + + Ignoring + Ignorare + updating local metadata metadati locali aggiornati - + Updating local metadata Aggiornamento dei metadati locali - + Updating local virtual files metadata Aggiornamento dei metadati dei file virtuali locali @@ -7355,19 +7341,6 @@ Il server ha risposto con errore: %2 Cancella il messaggio di stato - - OCC::FormatWarningsWizardPage - - - <b>Warning:</b> %1 - <b>Avviso:</b> %1 - - - - <b>Warning:</b> - <b>Avviso:</b> - - OCC::AbstractPropagateRemoteDeleteEncrypted @@ -7381,6 +7354,19 @@ Il server ha risposto con errore: %2 "%1 Impossibile sbloccare la cartella cifrata %2". + + OCC::FormatWarningsWizardPage + + + <b>Warning:</b> %1 + <b>Avviso:</b> %1 + + + + <b>Warning:</b> + <b>Avviso:</b> + + OCC::OAuth diff --git a/translations/client_ja.ts b/translations/client_ja.ts index a9a97fdb2b9ad..6a1187f489f59 100644 --- a/translations/client_ja.ts +++ b/translations/client_ja.ts @@ -172,13 +172,13 @@ - + Resume sync for all 全ての同期を再開 - + Pause sync for all 全ての同期を一時停止 @@ -193,32 +193,32 @@ 新しいアカウントを追加 - + Settings 設定 - + Exit 終了 - + Current account avatar 現在のアバター - + Current account status is online 現在のステータスはオンラインです - + Current account status is do not disturb 現在のステータスは取り込み中です - + Account switcher and settings menu アカウントスイッチャーと設定メニュー @@ -307,17 +307,17 @@ FileProviderEvictionDialog - + Evict materialised files 実体ファイルの削除 - + Materialised items 具現化された項目 - + Reload 更新 @@ -493,17 +493,17 @@ MainWindow - + Nextcloud desktop main dialog Nextcloudデスクトップのメインダイアログ - + Unified search results list 統合検索結果 - + New activities 新しいアクティビティ @@ -554,14 +554,14 @@ Should an account import be attempted? アカウントのインポートを試みますか? - + %1 accounts were detected from a legacy desktop client. Should the accounts be imported? %1 アカウントが古いデスクトプクライアントから検出されました。 アカウントをインポートしますか? - + 1 account was detected from a legacy desktop client. Should the account be imported? 1 アカウントが古いデスクトプクライアントから検出されました。 @@ -575,12 +575,12 @@ Should the account be imported? レガシーインポート(過去設定の取り込み) - + Import インポート - + Skip スキップ @@ -675,12 +675,12 @@ Should the account be imported? フォルダーの暗号化 - + End-to-end Encryption End-to-End 暗号化 - + 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> これにより、フォルダとその中のすべてのファイルが暗号化されます。これらのファイルは、暗号化 mnemonic キーなしではアクセスできなくなります。 @@ -712,17 +712,17 @@ Should the account be imported? 警告 - + 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 このフォルダには同期エラーがあります。このフォルダの暗号化は、同期が成功した後に可能になります。 @@ -978,7 +978,7 @@ This action will abort any currently running synchronization. %2 の %1 への接続がありません。 - + Unable to connect to %1. %1 に接続できません。 @@ -988,7 +988,7 @@ This action will abort any currently running synchronization. サーバー設定エラー: %2 の %1 - + You need to accept the terms of service 利用規約に同意する必要があります @@ -1018,7 +1018,7 @@ This action will abort any currently running synchronization. 大きすぎたか、外部ストレージにあるため同期されなかったフォルダーがあります: - + There are folders that have grown in size beyond %1MB: %2 サイズが %1 MB を超えて大きくなったフォルダがあります: %2 @@ -1220,34 +1220,39 @@ This action will abort any currently running synchronization. 続ける - + + Quit %1 + %1 を終了 + + + %1 accounts number of accounts imported %1 アカウント - + 1 account 1 アカウント - + %1 folders number of folders imported %1 フォルダ - + 1 folder 1 フォルダ - + Legacy import レガシーインポート(過去設定の取り込み) - + Imported %1 and %2 from a legacy desktop client. %3 number of accounts and folders imported. list of users. @@ -1264,11 +1269,6 @@ This action will abort any currently running synchronization. There was an error while accessing the configuration file at %1. Please make sure the file can be accessed by your system account. %1 の設定ファイルへのアクセス中にエラーが発生しました。 システム・アカウントでファイルにアクセスできることを確認してください。 - - - Quit %1 - %1 を終了 - OCC::AuthenticationDialog @@ -1733,13 +1733,13 @@ This action will abort any currently running synchronization. サーバーエラーが発生しました。PROPFIND応答がXML形式ではありません! - - + + Encrypted metadata setup error! 暗号化されたメタデータのセットアップエラー! - + Encrypted metadata setup error: initial signature from server is empty. 暗号化メタデータのセットアップエラー:サーバーからの初期署名が空です。 @@ -2295,29 +2295,29 @@ If this was an accident and you decide to keep your files, they will be re-synce ファイルを保持 - + A folder has surpassed the set folder size limit of %1MB: %2. %3 フォルダに設定されたフォルダサイズ制限値 %1MB を超えました: %2. %3 - + Keep syncing 同期を維持する - + Stop syncing 同期を停止する - + The folder %1 has surpassed the set folder size limit of %2MB. フォルダ %1 が設定されたフォルダサイズの制限値 %2MB を超えました。 - + Would you like to stop syncing this folder? このフォルダの同期を停止しますか? @@ -2345,12 +2345,12 @@ 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" 仮想のファイルのダウンロードは、コード "%1"、ステータス "%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. @@ -2359,7 +2359,7 @@ Alternatively, you can restore all deleted files by uploading from '%1&apos または、'%1' フォルダからサーバにアップロードすることで、削除されたファイルをすべて復元できます。 - + 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. @@ -2368,22 +2368,22 @@ Alternatively, you can restore all deleted files by downloading them from the se または、削除されたファイルをサーバーからダウンロードして復元することもできます。 - + Remove all files? 全てのファイルを削除しますか? - + Proceed with Deletion 削除を進める - + Restore Files to Server ファイルをサーバーに復元する - + Restore Files from Server サーバーからファイルを復元する @@ -2454,32 +2454,32 @@ Alternatively, you can restore all deleted files by downloading them from the se 同期の準備中。 - + Syncing %1 of %2 (A few seconds left) 同期中 %2 中 %1 (あと数秒) - + Syncing %1 of %2 (%3 left) 同期中 %2 中 %1 (残り %3) - + Syncing %1 of %2 %2 の %1 を同期しています - + Syncing %1 (A few seconds left) 同期中 %1 (あと数秒) - + Syncing %1 (%2 left) 同期中 %1 (残り %2) - + Syncing %1 同期中 %1 @@ -2523,16 +2523,6 @@ Alternatively, you can restore all deleted files by downloading them from the se No valid folder selected! 有効なフォルダーが選択されていません! - - - The folder %1 is used in a folder sync connection! - フォルダ %1 は、フォルダ同期接続で使用される! - - - - Please choose a different location. The selected folder isn't valid. - - The selected path does not exist! @@ -2543,17 +2533,37 @@ Alternatively, you can restore all deleted files by downloading them from the se The selected path is not a folder! 指定のパスは、フォルダーではありません! + + + You have no permission to write to the selected folder! + 選択されたフォルダーに書き込み権限がありません + + + + The local folder %1 already contains a folder used in a folder sync connection. Please pick another one! + ローカルフォルダー %1 にはすでに同期フォルダーとして利用されてるフォルダーを含んでいます。他のフォルダーを選択してください。 + + + + The local folder %1 is already contained in a folder used in a folder sync connection. Please pick another one! + ローカルフォルダー %1 には同期フォルダーとして利用されているフォルダーがあります。他のフォルダーを選択してください。 + + + + There is already a sync from the server to this local folder. Please pick another local folder! + すでに同期されたフォルダーがあります。別のフォルダーを選択してください! + + + + 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. - - - You have no permission to write to the selected folder! - 選択されたフォルダーに書き込み権限がありません - Please choose a different location. The path %1 doesn't exist. @@ -2571,26 +2581,11 @@ Alternatively, you can restore all deleted files by downloading them from the se folder location - - - The local folder %1 already contains a folder used in a folder sync connection. Please pick another one! - ローカルフォルダー %1 にはすでに同期フォルダーとして利用されてるフォルダーを含んでいます。他のフォルダーを選択してください。 - - - - The local folder %1 is already contained in a folder used in a folder sync connection. Please pick another one! - ローカルフォルダー %1 には同期フォルダーとして利用されているフォルダーがあります。他のフォルダーを選択してください。 - Please choose a different location. %1 is already contained in a folder used as a sync folder. - - - There is already a sync from the server to this local folder. Please pick another local folder! - すでに同期されたフォルダーがあります。別のフォルダーを選択してください! - Please choose a different location. %1 is already being used as a sync folder for %2. @@ -2598,7 +2593,7 @@ Alternatively, you can restore all deleted files by downloading them from the se - + 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. @@ -2706,12 +2701,12 @@ For advanced users: this issue might be related to multiple sync database files 変更の調整 - + 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'" %1 %2 … @@ -2729,7 +2724,7 @@ For advanced users: this issue might be related to multiple sync database files , - + Download %1/s Example text: "Download 24Kb/s" (%1 is replaced by 24Kb (translated)) ダウンロード %1/s @@ -2746,7 +2741,7 @@ For advanced users: this issue might be related to multiple sync database files ↓ %1/s - + Upload %1/s Example text: "Upload 24Kb/s" (%1 is replaced by 24Kb (translated)) アップロード %1/s @@ -2797,12 +2792,12 @@ For advanced users: this issue might be related to multiple sync database files %1 / %2 ファイル - + File %1 of %2 ファイル %2 の %1 - + About to start syncing 同期開始について @@ -3169,7 +3164,7 @@ For advanced users: this issue might be related to multiple sync database files 注意が必要なサーバー通知を表示する - + Show chat notification dialogs. チャットの通知ダイアログを表示する @@ -3210,17 +3205,17 @@ Note that this selects only what pool upgrades are taken from, and that there ar これはアップデートをどちらのチャネルからダウンロードするのかを決めるだけで、パッケージをダウングレードすることはできないことに注意してください。その為、ベータ版から安定版へ変更しても、通常はすぐに古いパッケージに戻されるわけではありません。現在インストールされているベータ版よりも新しい安定版が出るまで待つ必要があります。 - + 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 @@ -3232,7 +3227,7 @@ 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. @@ -3242,12 +3237,12 @@ 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 @@ -4298,30 +4293,30 @@ This is a new, experimental mode. If you decide to use it, please report any iss ファイル名はファイルシステムに予約されています。 - + 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 文字 "%2" を含む名前 %1 は、このファイルシステムではサポートされていません。 - + %1 name contains at least one invalid character 名前 %1 に無効な文字が 1 つ以上含まれています。 - + %1 name is a reserved name on this file system. 名前 %1 はこのファイルシステム上で予約された名前です。 @@ -4376,22 +4371,22 @@ This is a new, experimental mode. If you decide to use it, please report any iss このファイル名はサーバーにブロックされました。 - + Reason: the entire filename is forbidden. 理由:ファイル名全体が禁止されています。 - + Reason: the filename has a forbidden base name (filename start). 理由:ファイル名に禁止されているベース名(ファイル名の先頭)があります。 - + Reason: the file has a forbidden extension (.%1). 理由: ファイルには禁止されている拡張子 (.%1) があります。 - + Reason: the filename contains a forbidden character (%1). 理由: ファイル名に禁止文字 (%1) が含まれています。 @@ -4426,7 +4421,7 @@ This is a new, experimental mode. If you decide to use it, please report any iss 修正日時が無効なため同期できません - + Could not upload file, because it is open in "%1". "%1" で開いているので、ファイルをアップロードできませんでした。 @@ -4509,18 +4504,18 @@ This is a new, experimental mode. If you decide to use it, please report any iss 修正日時が無効なためメタデータの更新時にエラーが発生 - - - - - - + + + + + + The folder %1 cannot be made read-only: %2 フォルダ %1 を読み取り専用にできません: %2 - - + + unknown exception 不明な例外 @@ -4694,12 +4689,6 @@ This is a new, experimental mode. If you decide to use it, please report any iss File %1 downloaded but it resulted in a local file name clash! ファイル %1 がダウンロードされましたが、ローカルファイル名の衝突が発生しました! - - - - Could not get file %1 from local DB - ローカルDBからファイル %1 を取得できませんでした - @@ -4707,6 +4696,13 @@ This is a new, experimental mode. If you decide to use it, please report any iss could not get file %1 from local DB ローカルDBからファイル %1 を取得できませんでした + + + + + Could not get file %1 from local DB + ローカルDBからファイル %1 を取得できませんでした + @@ -4808,13 +4804,13 @@ This is a new, experimental mode. If you decide to use it, please report any iss 誤ったHTTPコードがサーバーから返されました。201のはずが、"%1 %2"が返りました。 - - Could not get file %1 from local DB + + could not get file %1 from local DB ローカルDBからファイル %1 を取得できませんでした - - could not get file %1 from local DB + + Could not get file %1 from local DB ローカルDBからファイル %1 を取得できませんでした @@ -5065,7 +5061,7 @@ This is a new, experimental mode. If you decide to use it, please report any iss OCC::ShareManager - + Error エラー @@ -5073,17 +5069,17 @@ This is a new, experimental mode. If you decide to use it, please report any iss OCC::ShareModel - + %1 days %1 日 - + 1 day 1日 - + Today 今日 @@ -5113,7 +5109,7 @@ This is a new, experimental mode. If you decide to use it, please report any iss セキュアなファイルドロップ - + Could not find local folder for %1 %1 のローカルフォルダが見つかりませんでした @@ -5236,11 +5232,6 @@ Server replied with error: %2 Resharing this folder is not allowed このフォルダーの再共有は許可されていません - - - Copy internal link - 内部リンクをコピー - Copy secure file drop link @@ -5252,6 +5243,11 @@ Server replied with error: %2 Copy public link 公開リンクのコピー + + + Copy internal link + 内部リンクをコピー + Copy secure filedrop link @@ -5283,16 +5279,16 @@ Server replied with error: %2 remaining time before lock expires %1 分で期限切れ - - - Open in browser - ブラウザーで開く - Edit 編集 + + + Open in browser + ブラウザーで開く + Resolve conflict … @@ -5825,10 +5821,10 @@ Server replied with error: %2 - - - - + + + + Error updating metadata for a folder %1 フォルダ %1 のメタデータの更新でエラーが発生しました @@ -5848,7 +5844,7 @@ Server replied with error: %2 アクセスフォルダー %2 にユーザー %1 を追加または削除できませんでした。 - + Failed to unlock a folder. フォルダのロック解除に失敗しました。 @@ -5866,7 +5862,7 @@ Server replied with error: %2 - + %1 notifications %1 通知 @@ -5882,17 +5878,17 @@ Server replied with error: %2 競合の解決 - + Rename file ファイル名の変更 - + Open Nextcloud Assistant in browser ブラウザでNextcloud Assistantを開く - + Open Nextcloud Talk in browser Nextcloud Talkをブラウザーで開く @@ -6026,29 +6022,19 @@ Server replied with error: %2 - The Virtual filesystem feature does not support a drive as sync root - 仮想ファイルシステム機能は、同期ルートとしてドライブをサポートしていません + The Virtual filesystem feature requires a NTFS file system, %1 is using %2 + ヴァーチャルファイルシステム機能にはNTFSファイルシステムが必要です。%1 は %2 を使用しています。 Please choose a different location. %1 isn't a NTFS file system. It doesn't support virtual files. - - - The Virtual filesystem feature requires a NTFS file system, %1 is using %2 - ヴァーチャルファイルシステム機能にはNTFSファイルシステムが必要です。%1 は %2 を使用しています。 - Please choose a different location. %1 is a network drive. It doesn't support virtual files. - - - The Virtual filesystem feature is not supported on network drives - 仮想ファイルシステム機能は、ネットワークドライブではサポートされていません - OCC::VfsDownloadErrorDialog @@ -6188,12 +6174,12 @@ Server replied with error: %2 アカウント %1 のサーバーは、サポートされていない古いバージョン %2 で実行しています。サポートされていないサーバーバージョンでこのクライアントを使用することはテストされておらず、潜在的な危険をはらんでいます。ご利用は自己責任でお願いいたします。 - + 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にリダイレクトされ、利用規約を読み、同意したことを確認します。 @@ -6269,23 +6255,23 @@ Server replied with error: %2 同期フォルダーが設定されていません - + %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: 同期が実行されています。 - + macOS VFS for %1: Last sync was successful. macOS VFS for %1: 最後の同期に成功しました。 - + macOS VFS for %1: A problem was encountered. macOS VFS for %1: 問題が発生しました。 @@ -6731,7 +6717,7 @@ Server replied with error: %2 ユーザーまたはグループを検索する ... - + Sharing is not available for this folder このフォルダでは共有は利用できません @@ -7142,11 +7128,6 @@ Server replied with error: %2 downloading ダウンロード中 - - - Downloading - ダウンロード中 - uploading @@ -7154,8 +7135,8 @@ Server replied with error: %2 - Uploading - アップロード中 + Downloading + ダウンロード中 @@ -7164,8 +7145,8 @@ Server replied with error: %2 - Deleting - 削除しています + Uploading + アップロード中 @@ -7173,9 +7154,9 @@ Server replied with error: %2 移動しています - - Moving - 移動しています + + Deleting + 削除しています @@ -7184,26 +7165,31 @@ Server replied with error: %2 - Ignoring - 無視する + Moving + 移動しています error エラー + + + Ignoring + 無視する + updating local metadata ローカルメタデータの更新中 - + Updating local metadata ローカルメタデータの更新中 - + Updating local virtual files metadata ローカル仮想ファイルメタデータの更新 @@ -7362,19 +7348,6 @@ Server replied with error: %2 メニューのステータスメッセージの削除 - - OCC::FormatWarningsWizardPage - - - <b>Warning:</b> %1 - <b>警告:</b> %1 - - - - <b>Warning:</b> - <b>警告:</b> - - OCC::AbstractPropagateRemoteDeleteEncrypted @@ -7388,6 +7361,19 @@ Server replied with error: %2 "%1 暗号化されたフォルダー %2 のロックを解除できませんでした。” + + OCC::FormatWarningsWizardPage + + + <b>Warning:</b> %1 + <b>警告:</b> %1 + + + + <b>Warning:</b> + <b>警告:</b> + + OCC::OAuth diff --git a/translations/client_ko.ts b/translations/client_ko.ts index 1871e24c4df61..d9934ac2da61b 100644 --- a/translations/client_ko.ts +++ b/translations/client_ko.ts @@ -172,13 +172,13 @@ - + Resume sync for all 전체 동기화 재개 - + Pause sync for all 전체 동기화 일시 정지 @@ -193,32 +193,32 @@ 새 계정 추가 - + Settings 설정 - + Exit 나가기 - + Current account avatar 현재 계정 아바타 - + Current account status is online 현재 계정 상태가 온라인입니다. - + Current account status is do not disturb 현재 계정 상태가 방해 금지 상태입니다. - + Account switcher and settings menu 계정 전환 및 설정 메뉴 @@ -307,17 +307,17 @@ FileProviderEvictionDialog - + Evict materialised files 실체화된 파일 제거 - + Materialised items 실체화된 파일 - + Reload 새로고침 @@ -493,17 +493,17 @@ MainWindow - + Nextcloud desktop main dialog Nextcloud 데스크톱 주 대화상자 - + Unified search results list 통합 검색 결과 목록 - + New activities 새 활동 @@ -554,14 +554,14 @@ Should an account import be attempted? 계정을 가져오기를 시도할까요? - + %1 accounts were detected from a legacy desktop client. Should the accounts be imported? %1개 계정이 예전의 데스크톱 클라이언트에서 발견되었습니다. 이 계정들을 가져올까요? - + 1 account was detected from a legacy desktop client. Should the account be imported? 하나의 계정이 예전의 데스크톱 클라이언트에서 발견되었습니다. @@ -575,12 +575,12 @@ Should the account be imported? 예전 버전에서 가져오기 - + Import 가져오기 - + Skip 건너뛰기 @@ -675,12 +675,12 @@ Should the account be imported? 폴더 암호화 - + 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> 폴더와 안의 파일을 암호화합니다. 암호화 니모닉 키가 없으면 파일에 더 이상 접근할 수 없습니다. @@ -712,17 +712,17 @@ Should the account be imported? 경고 - + 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 폴더에 동기화 오류가 있습니다. 이 폴더를 성공적으로 동기화 한 후 암호화할 수 있습니다. @@ -977,7 +977,7 @@ This action will abort any currently running synchronization. %1와 %2에 연결이 없습니다. - + Unable to connect to %1. %1에 연결할 수 없습니다. @@ -987,7 +987,7 @@ This action will abort any currently running synchronization. 서버 설정 오류: %2에 있는 %1 - + You need to accept the terms of service 이용 약관에 동의해야 합니다. @@ -1017,7 +1017,7 @@ This action will abort any currently running synchronization. 사이즈가 너무 크거나 외부 저장소이므로 동기화되지 않은 폴더가 있습니다: - + There are folders that have grown in size beyond %1MB: %2 크기가 %1MB보다 더 커진 폴더가 있습니다: %2 @@ -1219,34 +1219,39 @@ This action will abort any currently running synchronization. 계속 - + + Quit %1 + %1 끝내기 + + + %1 accounts number of accounts imported %1개 계정 - + 1 account 1개 계정 - + %1 folders number of folders imported %1개 폴더 - + 1 folder 1개 폴더 - + Legacy import 레거시 불러오기 - + Imported %1 and %2 from a legacy desktop client. %3 number of accounts and folders imported. list of users. @@ -1263,11 +1268,6 @@ This action will abort any currently running synchronization. There was an error while accessing the configuration file at %1. Please make sure the file can be accessed by your system account. %1의 구성 파일에 액세스하는 동안 오류가 발생했습니다. 시스템 계정으로 파일에 액세스할 수 있는지 확인하십시오. - - - Quit %1 - %1 끝내기 - OCC::AuthenticationDialog @@ -1732,13 +1732,13 @@ This action will abort any currently running synchronization. 서버 오류: PROPFIND 응답이 XML 형식이 아닙니다! - - + + Encrypted metadata setup error! 암호화된 메타데이터 구성 오류! - + Encrypted metadata setup error: initial signature from server is empty. 암호화된 메타데이터 설정 오류: 서버로부터의 초기 서명이 비어있습니다. @@ -2294,29 +2294,29 @@ If this was an accident and you decide to keep your files, they will be re-synce 파일 유지 - + A folder has surpassed the set folder size limit of %1MB: %2. %3 폴더가 설정된 크기 제한인 %1MB를 초과했습니다: %2. %3 - + Keep syncing 계속 동기화 - + Stop syncing 동기화 중지 - + The folder %1 has surpassed the set folder size limit of %2MB. %1 폴더가 설정된 크기 제한인 %2MB를 초과했습니다. - + Would you like to stop syncing this folder? 이 폴더의 동기화를 중단하겠습니까? @@ -2344,12 +2344,12 @@ 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" 가상 파일 다운로드에 실패했으며, 코드는 "%1", 상태는 "%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. @@ -2358,7 +2358,7 @@ Alternatively, you can restore all deleted files by uploading from '%1&apos 아니면 '%1' 폴더를 업로드하여 삭제된 모든 파일들을 복원할 수 있습니다. - + 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. @@ -2367,22 +2367,22 @@ Alternatively, you can restore all deleted files by downloading them from the se 아니면 서버에서 이들을 다운로드하여 삭제된 모든 파일들을 복원할 수 있습니다. - + Remove all files? 파일을 모두 제거합니까? - + Proceed with Deletion 삭제 진행 - + Restore Files to Server 서버로 파일을 복원 - + Restore Files from Server 서버로부터 파일을 복원 @@ -2453,32 +2453,32 @@ Alternatively, you can restore all deleted files by downloading them from the se 동기화 준비 중 - + Syncing %1 of %2 (A few seconds left) %2 중 %1 동기화 중(수 초 남음) - + Syncing %1 of %2 (%3 left) %2 중 %1 동기화 중(%3 남음) - + Syncing %1 of %2 %2 중 %1 동기화 중 - + Syncing %1 (A few seconds left) %1 동기화 중(수 초 남음) - + Syncing %1 (%2 left) %1 동기화 중(%2 남음) - + Syncing %1 %1 동기화 중 @@ -2522,16 +2522,6 @@ Alternatively, you can restore all deleted files by downloading them from the se No valid folder selected! 올바른 폴더가 선택되지 않았습니다! - - - The folder %1 is used in a folder sync connection! - %1 폴더는 폴더 동기화 연결에 사용됩니다! - - - - Please choose a different location. The selected folder isn't valid. - - The selected path does not exist! @@ -2542,17 +2532,37 @@ Alternatively, you can restore all deleted files by downloading them from the se The selected path is not a folder! 선택된 경로는 폴더가 아닙니다! + + + You have no permission to write to the selected folder! + 선택된 폴더에 쓸 권한이 없습니다. + + + + The local folder %1 already contains a folder used in a folder sync connection. Please pick another one! + 로컬 폴더 %1에 폴더 동기화 연결에 사용된 폴더가 이미 있습니다. 다른 폴더를 선택해주세요! + + + + The local folder %1 is already contained in a folder used in a folder sync connection. Please pick another one! + 로컬 폴더 %1에 폴더 동기화 연결에 사용된 폴더에 이미 포함되어 있습니다. 다른 폴더를 선택해주세요! + + + + There is already a sync from the server to this local folder. Please pick another local folder! + 서버에서 이 로컬 폴더로의 동기화가 이미 있습니다. 다른 로컬 폴더를 선택하십시오! + + + + 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. - - - You have no permission to write to the selected folder! - 선택된 폴더에 쓸 권한이 없습니다. - Please choose a different location. The path %1 doesn't exist. @@ -2570,26 +2580,11 @@ Alternatively, you can restore all deleted files by downloading them from the se folder location - - - The local folder %1 already contains a folder used in a folder sync connection. Please pick another one! - 로컬 폴더 %1에 폴더 동기화 연결에 사용된 폴더가 이미 있습니다. 다른 폴더를 선택해주세요! - - - - The local folder %1 is already contained in a folder used in a folder sync connection. Please pick another one! - 로컬 폴더 %1에 폴더 동기화 연결에 사용된 폴더에 이미 포함되어 있습니다. 다른 폴더를 선택해주세요! - Please choose a different location. %1 is already contained in a folder used as a sync folder. - - - There is already a sync from the server to this local folder. Please pick another local folder! - 서버에서 이 로컬 폴더로의 동기화가 이미 있습니다. 다른 로컬 폴더를 선택하십시오! - Please choose a different location. %1 is already being used as a sync folder for %2. @@ -2597,7 +2592,7 @@ Alternatively, you can restore all deleted files by downloading them from the se - + 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. @@ -2702,12 +2697,12 @@ For advanced users: this issue might be related to multiple sync database files 변경 사항 조정 중 - + 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'" @@ -2725,7 +2720,7 @@ For advanced users: this issue might be related to multiple sync database files , - + Download %1/s Example text: "Download 24Kb/s" (%1 is replaced by 24Kb (translated)) 다운로드 %1/s @@ -2742,7 +2737,7 @@ For advanced users: this issue might be related to multiple sync database files ↓ %1/s - + Upload %1/s Example text: "Upload 24Kb/s" (%1 is replaced by 24Kb (translated)) 업로드 %1/s @@ -2793,12 +2788,12 @@ For advanced users: this issue might be related to multiple sync database files %2개 파일 중 %1개 - + File %1 of %2 %2개 파일 중 %1개 - + About to start syncing 동기화를 시작하려는 중 @@ -3165,7 +3160,7 @@ For advanced users: this issue might be related to multiple sync database files 주의가 필요한 서버 알림 - + Show chat notification dialogs. 채팅 알림 대화상자를 표시합니다. @@ -3206,17 +3201,17 @@ Note that this selects only what pool upgrades are taken from, and that there ar 채널 선택은 무엇으로 업그레이드를 할 지 결정하며 다운그레이드는 없습니다. 따라서, 베타 체널에서 안정화 채널로 변경할 경우 대개 버전을 즉시 변경할 수 없으며 현재 설치된 베타 버전보다 더 최신인 안정화 버전이 출시될 때까지 기다려야 합니다. - + daily 일간 - + enterprise 엔터프라이즈 - + - beta: contains versions with new features that may not be tested thoroughly - daily: contains versions created daily only for testing and development @@ -3228,7 +3223,7 @@ 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. @@ -3238,12 +3233,12 @@ 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 @@ -4297,30 +4292,30 @@ This is a new, experimental mode. If you decide to use it, please report any iss 해당 파일 이름은 이 파일 시스템에서 예약된 이름입니다. - + 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 "%2" 문자가 포함된 %1 이름은 이 파일 시스템에서 지원되지 않습니다. - + %1 name contains at least one invalid character %1 이름에 잘못된 문자가 하나 이상 포함되어 있습니다. - + %1 name is a reserved name on this file system. %1 이름은 이 파일 시스템에서 예약된 이름입니다. @@ -4375,22 +4370,22 @@ This is a new, experimental mode. If you decide to use it, please report any iss 파일 이름이 서버 블랙리스트에 있습니다. - + Reason: the entire filename is forbidden. 사유: 파일 이름 전체가 금지되어 있습니다. - + Reason: the filename has a forbidden base name (filename start). 사유: 파일 이름의 베이스 네임이 금지되어 있습니다. (파일 이름의 시작) - + Reason: the file has a forbidden extension (.%1). 사유: 파일의 확장자가 금지되어 있습니다. (%1) - + Reason: the filename contains a forbidden character (%1). 사유: 파일 이름에 금지된 문자가 포함되어 있습니다. (%1) @@ -4425,7 +4420,7 @@ This is a new, experimental mode. If you decide to use it, please report any iss 유효하지 않은 수정 시간으로 인해 동기화할 수 없습니다. - + Could not upload file, because it is open in "%1". 파일이 "%1"에서 열려있기 때문에 업로드할 수 없습니다. @@ -4508,18 +4503,18 @@ This is a new, experimental mode. If you decide to use it, please report any iss 유효하지 않은 수정 시간으로 인한 메타데이터 업데이트 오류 - - - - - - + + + + + + The folder %1 cannot be made read-only: %2 %1 폴더를 읽기 전용으로 만들 수 없습니다: %2 - - + + unknown exception @@ -4693,12 +4688,6 @@ This is a new, experimental mode. If you decide to use it, please report any iss File %1 downloaded but it resulted in a local file name clash! %1 파일을 다운로드 했지만 로컬 파일과 이름이 충돌합니다! - - - - Could not get file %1 from local DB - 로컬 데이터베이스에서 파일 %1을(를) 불러올 수 없음 - @@ -4706,6 +4695,13 @@ This is a new, experimental mode. If you decide to use it, please report any iss could not get file %1 from local DB 로컬 데이터베이스에서 파일 %1을(를) 불러올 수 없음 + + + + + Could not get file %1 from local DB + 로컬 데이터베이스에서 파일 %1을(를) 불러올 수 없음 + @@ -4807,13 +4803,13 @@ This is a new, experimental mode. If you decide to use it, please report any iss 서버에서 잘못된 HTTP 코드를 반환했습니다. 201가 받아지는 대신 "1 %2"을 받았습니다. - - Could not get file %1 from local DB + + could not get file %1 from local DB 로컬 데이터베이스에서 파일 %1을(를) 불러올 수 없음 - - could not get file %1 from local DB + + Could not get file %1 from local DB 로컬 데이터베이스에서 파일 %1을(를) 불러올 수 없음 @@ -5064,7 +5060,7 @@ This is a new, experimental mode. If you decide to use it, please report any iss OCC::ShareManager - + Error 오류 @@ -5072,17 +5068,17 @@ This is a new, experimental mode. If you decide to use it, please report any iss OCC::ShareModel - + %1 days %1일 - + 1 day 1일 - + Today 오늘 @@ -5112,7 +5108,7 @@ This is a new, experimental mode. If you decide to use it, please report any iss 안전한 파일 드롭 - + Could not find local folder for %1 %1의 로컬 폴더를 찾을 수 없습니다. @@ -5235,11 +5231,6 @@ Server replied with error: %2 Resharing this folder is not allowed 이 폴더를 다시 공유할 수 없습니다. - - - Copy internal link - 내부 링크 복사 - Copy secure file drop link @@ -5251,6 +5242,11 @@ Server replied with error: %2 Copy public link 공개 링크 복사 + + + Copy internal link + 내부 링크 복사 + Copy secure filedrop link @@ -5282,16 +5278,16 @@ Server replied with error: %2 remaining time before lock expires %1분 내에 만료됨 - - - Open in browser - 브라우저에서 열기 - Edit 편집 + + + Open in browser + 브라우저에서 열기 + Resolve conflict … @@ -5824,10 +5820,10 @@ Server replied with error: %2 - - - - + + + + Error updating metadata for a folder %1 %1 폴더의 메타데이터를 갱신하는 중 오류가 발생했습니다. @@ -5847,7 +5843,7 @@ Server replied with error: %2 %1님에게 %2 폴더에 접근하도록 추가하거나 제거할 수 없습니다. - + Failed to unlock a folder. 폴더의 잠금을 풀지 못했습니다. @@ -5865,7 +5861,7 @@ Server replied with error: %2 - + %1 notifications %1개 알림 @@ -5881,17 +5877,17 @@ Server replied with error: %2 충돌 해결 - + Rename file 파일 이름 바꾸기 - + Open Nextcloud Assistant in browser 브라우저에서 Nextcloud 어시스턴트 열기 - + Open Nextcloud Talk in browser 브라우저에서 Nextcloud 토크 열기 @@ -6025,29 +6021,19 @@ Server replied with error: %2 - The Virtual filesystem feature does not support a drive as sync root - 가상 파일 시스템은 동기화 최상위 경로를 드라이브로 지정하는 것을 지원하지 않습니다. + The Virtual filesystem feature requires a NTFS file system, %1 is using %2 + 가상 파일시스템 기능은 NTFS 파일 시스템이 요구됩니다. %1은(는) %2을(를) 사용중 Please choose a different location. %1 isn't a NTFS file system. It doesn't support virtual files. - - - The Virtual filesystem feature requires a NTFS file system, %1 is using %2 - 가상 파일시스템 기능은 NTFS 파일 시스템이 요구됩니다. %1은(는) %2을(를) 사용중 - Please choose a different location. %1 is a network drive. It doesn't support virtual files. - - - The Virtual filesystem feature is not supported on network drives - 가상 파일 시스템은 네트워크 드라이브에서 지원되지 않습니다. - OCC::VfsDownloadErrorDialog @@ -6187,12 +6173,12 @@ Server replied with error: %2 계정 %1의 서버가 지원되지 않는 이전 버전 %2을 실행합니다. 지원되지 않는 서버 버전으로 이 클라이언트를 사용하는 것은 테스트되지 않았으며 잠재적으로 위험합니다. 자신의 책임하에 진행하십시오. - + 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(으)로 이동합니다. @@ -6268,23 +6254,23 @@ Server replied with error: %2 설정된 동기화 폴더가 없음 - + %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. @@ -6730,7 +6716,7 @@ Server replied with error: %2 사용자나 그룹 검색... - + Sharing is not available for this folder 이 폴더에서 공유를 사용할 수 없습니다. @@ -7141,11 +7127,6 @@ Server replied with error: %2 downloading 다운로드 중 - - - Downloading - 다운로드 중 - uploading @@ -7153,8 +7134,8 @@ Server replied with error: %2 - Uploading - 업로드 중 + Downloading + 다운로드 중 @@ -7163,8 +7144,8 @@ Server replied with error: %2 - Deleting - 삭제 중 + Uploading + 업로드 중 @@ -7172,9 +7153,9 @@ Server replied with error: %2 이동 중 - - Moving - 이동 중 + + Deleting + 삭제 중 @@ -7183,26 +7164,31 @@ Server replied with error: %2 - Ignoring - 무시 중 + Moving + 이동 중 error 오류 + + + Ignoring + 무시 중 + updating local metadata 로컬 메타데이터 업데이트 중 - + Updating local metadata 로컬 메타데이터 업데이트 중 - + Updating local virtual files metadata 로컬 가상 파일 메타데이터 업데이트함 @@ -7361,19 +7347,6 @@ Server replied with error: %2 상태 메시지 메뉴 지우기 - - OCC::FormatWarningsWizardPage - - - <b>Warning:</b> %1 - <b>경고:</b> %1 - - - - <b>Warning:</b> - <b>경고:</b> - - OCC::AbstractPropagateRemoteDeleteEncrypted @@ -7387,6 +7360,19 @@ Server replied with error: %2 %1이(가) 암호화된 폴더 %2 해제에 실패함 + + OCC::FormatWarningsWizardPage + + + <b>Warning:</b> %1 + <b>경고:</b> %1 + + + + <b>Warning:</b> + <b>경고:</b> + + OCC::OAuth diff --git a/translations/client_lt_LT.ts b/translations/client_lt_LT.ts index ffeeb26822a50..06cfb61fc8e68 100644 --- a/translations/client_lt_LT.ts +++ b/translations/client_lt_LT.ts @@ -172,13 +172,13 @@ - + Resume sync for all - + Pause sync for all @@ -193,32 +193,32 @@ Pridėti naują paskyrą - + Settings Nustatymai - + Exit Išeiti - + Current account avatar - + Current account status is online - + Current account status is do not disturb - + Account switcher and settings menu @@ -307,17 +307,17 @@ FileProviderEvictionDialog - + Evict materialised files - + Materialised items - + Reload Įkelti iš naujo @@ -493,17 +493,17 @@ MainWindow - + Nextcloud desktop main dialog - + Unified search results list - + New activities Naujos veiklos @@ -553,13 +553,13 @@ Should an account import be attempted? - + %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? @@ -572,12 +572,12 @@ Should the account be imported? - + Import - + Skip Praleisti @@ -672,12 +672,12 @@ Should the account be imported? Šifruoti aplanką - + End-to-end Encryption Ištisinis šifravimas - + 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> @@ -708,17 +708,17 @@ Should the account be imported? Įspėjimas - + 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 @@ -969,7 +969,7 @@ This action will abort any currently running synchronization. %2 neturi ryšio su %1. - + Unable to connect to %1. Nepavyko prisijungti prie %1. @@ -979,7 +979,7 @@ This action will abort any currently running synchronization. Serverio konfigūracijos klaida: %1 ties %2. - + You need to accept the terms of service @@ -1009,7 +1009,7 @@ This action will abort any currently running synchronization. Yra aplankų, kurie nebuvo sinchronizuoti dėl to, kad buvo per dideli arba yra išorinės saugyklos: - + There are folders that have grown in size beyond %1MB: %2 @@ -1211,34 +1211,39 @@ This action will abort any currently running synchronization. Tęsti - + + Quit %1 + Išjungti %1 + + + %1 accounts number of accounts imported - + 1 account 1 paskyra - + %1 folders number of folders imported - + 1 folder 1 aplankas - + Legacy import - + Imported %1 and %2 from a legacy desktop client. %3 number of accounts and folders imported. list of users. @@ -1254,11 +1259,6 @@ This action will abort any currently running synchronization. There was an error while accessing the configuration file at %1. Please make sure the file can be accessed by your system account. - - - Quit %1 - Išjungti %1 - OCC::AuthenticationDialog @@ -1723,13 +1723,13 @@ This action will abort any currently running synchronization. - - + + Encrypted metadata setup error! Šifruotų metaduomenų sąrankos klaida! - + Encrypted metadata setup error: initial signature from server is empty. @@ -2278,28 +2278,28 @@ If this was an accident and you decide to keep your files, they will be re-synce Palikti failus - + 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? @@ -2325,41 +2325,41 @@ This means that the synchronization client might not upload local changes immedi Tai reiškia, kad sinchronizacijos klientas gali iš karto neįkelti lokalių pakeitimų, o tik juos nuskaityti. Įkėlimas bus atliekamas tam tikrais laiko tarpais (pagal numatytuosius nustatymus kas dvi valandas). - + 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? Pašalinti visus failus? - + Proceed with Deletion - + Restore Files to Server - + Restore Files from Server @@ -2430,32 +2430,32 @@ Alternatively, you can restore all deleted files by downloading them from the se Ruošiamasi sinchronizavimui. - + Syncing %1 of %2 (A few seconds left) Sinchronizuojama %1 iš %2 (liko kelios sekundės) - + Syncing %1 of %2 (%3 left) Sinchronizuojama %1 iš %2 (liko %3) - + Syncing %1 of %2 Sinchronizuojama %1 iš %2 - + Syncing %1 (A few seconds left) Sinchronizuojama %1 (liko kelios sekundės) - + Syncing %1 (%2 left) Sinchronizuojama %1 (liko %2) - + Syncing %1 Sinchronizuojama %1 @@ -2499,16 +2499,6 @@ Alternatively, you can restore all deleted files by downloading them from the se No valid folder selected! Nepasirinktas galiojantis failas! - - - The folder %1 is used in a folder sync connection! - - - - - Please choose a different location. The selected folder isn't valid. - - The selected path does not exist! @@ -2519,17 +2509,37 @@ Alternatively, you can restore all deleted files by downloading them from the se The selected path is not a folder! Pasirinktas kelias nėra aplankas! + + + You have no permission to write to the selected folder! + Jūs neturite leidimų rašyti į pasirinktą aplanką! + + + + The local folder %1 already contains a folder used in a folder sync connection. Please pick another one! + Vietiniame aplanke %1 jau yra aplankas, kuris naudojamas aplanko sinchronizavimo ryšyje. Prašome pasirinkti kitą! + + + + The local folder %1 is already contained in a folder used in a folder sync connection. Please pick another one! + Vietinis aplankas %1 jau yra aplanke, naudojamame aplanko sinchronizavimo ryšyje. Prašome pasirinkti kitą! + + + + There is already a sync from the server to this local folder. Please pick another local folder! + Šis lokalus aplankas jau turi sinchronizaciją su serveriu. Pasirinkite kitą aplanką. + + + + 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. - - - You have no permission to write to the selected folder! - Jūs neturite leidimų rašyti į pasirinktą aplanką! - Please choose a different location. The path %1 doesn't exist. @@ -2547,26 +2557,11 @@ Alternatively, you can restore all deleted files by downloading them from the se folder location - - - The local folder %1 already contains a folder used in a folder sync connection. Please pick another one! - Vietiniame aplanke %1 jau yra aplankas, kuris naudojamas aplanko sinchronizavimo ryšyje. Prašome pasirinkti kitą! - - - - The local folder %1 is already contained in a folder used in a folder sync connection. Please pick another one! - Vietinis aplankas %1 jau yra aplanke, naudojamame aplanko sinchronizavimo ryšyje. Prašome pasirinkti kitą! - Please choose a different location. %1 is already contained in a folder used as a sync folder. - - - There is already a sync from the server to this local folder. Please pick another local folder! - Šis lokalus aplankas jau turi sinchronizaciją su serveriu. Pasirinkite kitą aplanką. - Please choose a different location. %1 is already being used as a sync folder for %2. @@ -2574,7 +2569,7 @@ Alternatively, you can restore all deleted files by downloading them from the se - + 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. @@ -2679,12 +2674,12 @@ For advanced users: this issue might be related to multiple sync database files Pakeitimų suderinimas - + 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'" %1 %2… @@ -2702,7 +2697,7 @@ For advanced users: this issue might be related to multiple sync database files , - + Download %1/s Example text: "Download 24Kb/s" (%1 is replaced by 24Kb (translated)) Atsiuntimas %1/s @@ -2719,7 +2714,7 @@ For advanced users: this issue might be related to multiple sync database files ↓ %1/s - + Upload %1/s Example text: "Upload 24Kb/s" (%1 is replaced by 24Kb (translated)) Išsiuntimas %1/s @@ -2771,12 +2766,12 @@ For advanced users: this issue might be related to multiple sync database files %1 failas(-ai) iš %2 - + File %1 of %2 - + About to start syncing @@ -3142,7 +3137,7 @@ For advanced users: this issue might be related to multiple sync database files Serverio perspėjimai, reikalaujantys imtis veiksmų. - + Show chat notification dialogs. @@ -3181,17 +3176,17 @@ Note that this selects only what pool upgrades are taken from, and that there ar - + daily kasdien - + enterprise - + - beta: contains versions with new features that may not be tested thoroughly - daily: contains versions created daily only for testing and development @@ -3200,7 +3195,7 @@ 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. @@ -3208,12 +3203,12 @@ 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 @@ -4255,30 +4250,30 @@ This is a new, experimental mode. If you decide to use it, please report any iss - + Folder name of folder entity to use when warning about invalid name Aplankas - + File name of folder entity to use when warning about invalid name Failas - + %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. @@ -4333,22 +4328,22 @@ This is a new, experimental mode. If you decide to use it, please report any iss - + 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). @@ -4383,7 +4378,7 @@ This is a new, experimental mode. If you decide to use it, please report any iss - + Could not upload file, because it is open in "%1". @@ -4466,18 +4461,18 @@ This is a new, experimental mode. If you decide to use it, please report any iss - - - - - - + + + + + + The folder %1 cannot be made read-only: %2 - - + + unknown exception @@ -4651,12 +4646,6 @@ This is a new, experimental mode. If you decide to use it, please report any iss File %1 downloaded but it resulted in a local file name clash! - - - - Could not get file %1 from local DB - - @@ -4664,6 +4653,13 @@ This is a new, experimental mode. If you decide to use it, please report any iss could not get file %1 from local DB nepavyko iš vietinės duomenų bazės gauti failo %1 + + + + + Could not get file %1 from local DB + + @@ -4764,16 +4760,16 @@ 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". Serveris grąžino neteisingą HTTP kodą. Tikimasi 201, gauta "%1 %2". - - - Could not get file %1 from local DB - - could not get file %1 from local DB nepavyko iš vietinės duomenų bazės gauti failo %1 + + + Could not get file %1 from local DB + + Could not delete file record %1 from local DB @@ -5022,7 +5018,7 @@ This is a new, experimental mode. If you decide to use it, please report any iss OCC::ShareManager - + Error Klaida @@ -5030,17 +5026,17 @@ This is a new, experimental mode. If you decide to use it, please report any iss OCC::ShareModel - + %1 days - + 1 day - + Today Šiandien @@ -5070,7 +5066,7 @@ This is a new, experimental mode. If you decide to use it, please report any iss - + Could not find local folder for %1 @@ -5191,11 +5187,6 @@ Server replied with error: %2 Resharing this folder is not allowed - - - Copy internal link - Kopijuoti vidinę nuorodą - Copy secure file drop link @@ -5207,6 +5198,11 @@ Server replied with error: %2 Copy public link Kopijuoti viešąją nuorodą + + + Copy internal link + Kopijuoti vidinę nuorodą + Copy secure filedrop link @@ -5238,16 +5234,16 @@ Server replied with error: %2 remaining time before lock expires Baigia galioti po %1 minutėsBaigia galioti po %1 minučiųBaigia galioti po %1 minučiųBaigia galioti po %1 minutės - - - Open in browser - Atverti naršyklėje - Edit Taisyti + + + Open in browser + Atverti naršyklėje + Resolve conflict … @@ -5780,10 +5776,10 @@ Server replied with error: %2 - - - - + + + + Error updating metadata for a folder %1 @@ -5803,7 +5799,7 @@ Server replied with error: %2 - + Failed to unlock a folder. Nepavyko atrakinti aplanko. @@ -5821,7 +5817,7 @@ Server replied with error: %2 - + %1 notifications @@ -5837,17 +5833,17 @@ Server replied with error: %2 - + Rename file Pervadinti failą - + Open Nextcloud Assistant in browser - + Open Nextcloud Talk in browser @@ -5981,7 +5977,7 @@ Server replied with error: %2 - The Virtual filesystem feature does not support a drive as sync root + The Virtual filesystem feature requires a NTFS file system, %1 is using %2 @@ -5989,21 +5985,11 @@ Server replied with error: %2 Please choose a different location. %1 isn't a NTFS file system. It doesn't support virtual files. - - - The Virtual filesystem feature requires a NTFS file system, %1 is using %2 - - Please choose a different location. %1 is a network drive. It doesn't support virtual files. - - - The Virtual filesystem feature is not supported on network drives - - OCC::VfsDownloadErrorDialog @@ -6143,12 +6129,12 @@ Server replied with error: %2 - + 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. @@ -6224,23 +6210,23 @@ Server replied with error: %2 Sinchronizuojamų aplankų nėra - + %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. @@ -6686,7 +6672,7 @@ Server replied with error: %2 Ieškoti naudotojų ar grupių… - + Sharing is not available for this folder @@ -7097,11 +7083,6 @@ Server replied with error: %2 downloading atsisiunčiama - - - Downloading - - uploading @@ -7109,7 +7090,7 @@ Server replied with error: %2 - Uploading + Downloading @@ -7119,7 +7100,7 @@ Server replied with error: %2 - Deleting + Uploading @@ -7128,8 +7109,8 @@ Server replied with error: %2 perkeliama - - Moving + + Deleting @@ -7139,7 +7120,7 @@ Server replied with error: %2 - Ignoring + Moving @@ -7147,18 +7128,23 @@ Server replied with error: %2 error klaida + + + Ignoring + + updating local metadata naujinami metaduomenys kompiuteryje - + Updating local metadata - + Updating local virtual files metadata @@ -7317,19 +7303,6 @@ Server replied with error: %2 - - OCC::FormatWarningsWizardPage - - - <b>Warning:</b> %1 - <b>Įspėjimas:</b> %1 - - - - <b>Warning:</b> - <b>Įspėjimas:</b> - - OCC::AbstractPropagateRemoteDeleteEncrypted @@ -7343,6 +7316,19 @@ Server replied with error: %2 „%1 Nepavyko atrakinti šifruoto aplanko %2“. + + OCC::FormatWarningsWizardPage + + + <b>Warning:</b> %1 + <b>Įspėjimas:</b> %1 + + + + <b>Warning:</b> + <b>Įspėjimas:</b> + + OCC::OAuth diff --git a/translations/client_lv.ts b/translations/client_lv.ts index 0ba34ce3d0f65..fb6c4f7d96bce 100644 --- a/translations/client_lv.ts +++ b/translations/client_lv.ts @@ -172,13 +172,13 @@ - + Resume sync for all - + Pause sync for all @@ -193,32 +193,32 @@ - + Settings - + Exit - + Current account avatar - + Current account status is online - + Current account status is do not disturb - + Account switcher and settings menu @@ -307,17 +307,17 @@ FileProviderEvictionDialog - + Evict materialised files - + Materialised items - + Reload @@ -493,17 +493,17 @@ MainWindow - + Nextcloud desktop main dialog - + Unified search results list - + New activities @@ -554,14 +554,14 @@ Should an account import be attempted? Vai jāmēģina importēt konts? - + %1 accounts were detected from a legacy desktop client. Should the accounts be imported? %1 konti tika konstatēti no vecāka tipa darbvirsmas klienta. Vai konti jāimportē? - + 1 account was detected from a legacy desktop client. Should the account be imported? 1 konts tika konstatēts no vecāka tipa darbvirsmas klienta. @@ -575,12 +575,12 @@ Vai konts jāimportē? Mantojuma imports - + Import Importēt - + Skip Izlaist @@ -675,12 +675,12 @@ Vai konts jāimportē? Šifrēt mapi - + End-to-end Encryption End-to-end šifrēšana - + 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> Tiks šifrēta Tava mape un visas tajā esošās datnes. Šīs datnes vairs nebūs pieejamas bez šifrēšanas mnemoniskās atslēgas. @@ -712,17 +712,17 @@ Vai konts jāimportē? Brīdinājums - + Please wait for the folder to sync before trying to encrypt it. Lūdzu, pagaidiet, kamēr mape sinhronizējas, pirms mēģināt to šifrēt. - + The folder has a minor sync problem. Encryption of this folder will be possible once it has synced successfully Mapei ir neliela sinhronizācijas problēma. Šīs mapes šifrēšana būs iespējama tikai tad, kad tā būs veiksmīgi sinhronizēta. - + The folder has a sync error. Encryption of this folder will be possible once it has synced successfully Mapei ir sinhronizācijas kļūda. Šīs mapes šifrēšana būs iespējama tikai pēc veiksmīgas sinhronizācijas. @@ -978,7 +978,7 @@ Vienīgā priekšrocība, izslēdzot virtuālo datņu atbalstu, ir tas, ka atkal Nav savienojuma ar %1 pie %2. - + Unable to connect to %1. @@ -988,7 +988,7 @@ Vienīgā priekšrocība, izslēdzot virtuālo datņu atbalstu, ir tas, ka atkal Servera konfigurācijas kļūda: %1 pie %2. - + You need to accept the terms of service @@ -1018,7 +1018,7 @@ Vienīgā priekšrocība, izslēdzot virtuālo datņu atbalstu, ir tas, ka atkal Šīs mapes netika sinhronizētas, jo tās ir pārāk lielas, vai atrodas ārējās krātuvēs: - + There are folders that have grown in size beyond %1MB: %2 Ir mapes, kas ir palielinājušās izmērā pāri %1MB: %2 @@ -1220,34 +1220,39 @@ Vienīgā priekšrocība, izslēdzot virtuālo datņu atbalstu, ir tas, ka atkal Turpināt - + + Quit %1 + Iziet %1 + + + %1 accounts number of accounts imported %1 konti - + 1 account 1 konts - + %1 folders number of folders imported %1 mapes - + 1 folder 1 mape - + Legacy import Mantojuma imports - + Imported %1 and %2 from a legacy desktop client. %3 number of accounts and folders imported. list of users. @@ -1264,11 +1269,6 @@ Vienīgā priekšrocība, izslēdzot virtuālo datņu atbalstu, ir tas, ka atkal There was an error while accessing the configuration file at %1. Please make sure the file can be accessed by your system account. Notika kļūda, piekļūstot konfigurācijas datnei %1. Lūdzu, pārliecinieties, vai datne ir pieejama jūsu sistēmas kontam. - - - Quit %1 - Iziet %1 - OCC::AuthenticationDialog @@ -1733,13 +1733,13 @@ Vienīgā priekšrocība, izslēdzot virtuālo datņu atbalstu, ir tas, ka atkal Servera kļūda: PROPFIND atbilde nav XML formātā! - - + + Encrypted metadata setup error! - + Encrypted metadata setup error: initial signature from server is empty. @@ -2290,28 +2290,28 @@ If this was an accident and you decide to keep your files, they will be re-synce Saglabāt datnes - + A folder has surpassed the set folder size limit of %1MB: %2. %3 - + Keep syncing Turpināt sinhronizāciju - + Stop syncing Pārtraukt sinhronizāciju - + The folder %1 has surpassed the set folder size limit of %2MB. - + Would you like to stop syncing this folder? @@ -2335,41 +2335,41 @@ 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 @@ -2440,32 +2440,32 @@ Alternatively, you can restore all deleted files by downloading them from the se Sagatavojas sinhronizācijai. - + 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 @@ -2510,24 +2510,39 @@ Alternatively, you can restore all deleted files by downloading them from the se Nav izvēlēta derīga mape! - - The folder %1 is used in a folder sync connection! + + The selected path does not exist! - - Please choose a different location. The selected folder isn't valid. + + The selected path is not a folder! + Atlasītais ceļš nav mape! + + + + You have no permission to write to the selected folder! + Tev nav rakstīšanas piekļuves izvēlētai mapei! + + + + The local folder %1 already contains a folder used in a folder sync connection. Please pick another one! - - The selected path does not exist! + + The local folder %1 is already contained in a folder used in a folder sync connection. Please pick another one! - - The selected path is not a folder! - Atlasītais ceļš nav mape! + + There is already a sync from the server to this local folder. Please pick another local folder! + + + + + Please choose a different location. The selected folder isn't valid. + @@ -2535,11 +2550,6 @@ Alternatively, you can restore all deleted files by downloading them from the se Please choose a different location. %1 is already being used as a sync folder. - - - You have no permission to write to the selected folder! - Tev nav rakstīšanas piekļuves izvēlētai mapei! - Please choose a different location. The path %1 doesn't exist. @@ -2557,26 +2567,11 @@ Alternatively, you can restore all deleted files by downloading them from the se folder location - - - The local folder %1 already contains a folder used in a folder sync connection. Please pick another one! - - - - - The local folder %1 is already contained in a folder used in a folder sync connection. Please pick another one! - - Please choose a different location. %1 is already contained in a folder used as a sync folder. - - - There is already a sync from the server to this local folder. Please pick another local folder! - - Please choose a different location. %1 is already being used as a sync folder for %2. @@ -2584,7 +2579,7 @@ Alternatively, you can restore all deleted files by downloading them from the se - + 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. @@ -2689,12 +2684,12 @@ For advanced users: this issue might be related to multiple sync database files - + 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'" @@ -2712,7 +2707,7 @@ For advanced users: this issue might be related to multiple sync database files , - + Download %1/s Example text: "Download 24Kb/s" (%1 is replaced by 24Kb (translated)) @@ -2729,7 +2724,7 @@ For advanced users: this issue might be related to multiple sync database files - + Upload %1/s Example text: "Upload 24Kb/s" (%1 is replaced by 24Kb (translated)) @@ -2780,12 +2775,12 @@ For advanced users: this issue might be related to multiple sync database files datne %1 no %2 - + File %1 of %2 - + About to start syncing @@ -3151,7 +3146,7 @@ For advanced users: this issue might be related to multiple sync database files Serveru paziņojumi, kas prasa uzmanību. - + Show chat notification dialogs. @@ -3192,17 +3187,17 @@ Note that this selects only what pool upgrades are taken from, and that there ar Ņemiet vērā, ka tas nosaka tikai no kura kopuma atjauninājumi tiek ņemti, un nav iespējams veikt versijas pazemināšanu: Tāpēc atgriešanās no beta kanāla uz stabilo kanālu parasti nevar tikt veikta nekavējoties un nozīmē gaidīt stabilo versiju, kas ir jaunāka par pašreiz instalēto beta versiju. - + daily - + enterprise - + - beta: contains versions with new features that may not be tested thoroughly - daily: contains versions created daily only for testing and development @@ -3211,7 +3206,7 @@ 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. @@ -3219,12 +3214,12 @@ 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 @@ -4266,30 +4261,30 @@ This is a new, experimental mode. If you decide to use it, please report any iss - + 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. @@ -4344,22 +4339,22 @@ This is a new, experimental mode. If you decide to use it, please report any iss - + 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). @@ -4394,7 +4389,7 @@ This is a new, experimental mode. If you decide to use it, please report any iss - + Could not upload file, because it is open in "%1". @@ -4477,18 +4472,18 @@ This is a new, experimental mode. If you decide to use it, please report any iss - - - - - - + + + + + + The folder %1 cannot be made read-only: %2 - - + + unknown exception @@ -4662,12 +4657,6 @@ This is a new, experimental mode. If you decide to use it, please report any iss File %1 downloaded but it resulted in a local file name clash! - - - - Could not get file %1 from local DB - - @@ -4675,6 +4664,13 @@ This is a new, experimental mode. If you decide to use it, please report any iss could not get file %1 from local DB + + + + + Could not get file %1 from local DB + + @@ -4776,13 +4772,13 @@ This is a new, experimental mode. If you decide to use it, please report any iss - - Could not get file %1 from local DB + + could not get file %1 from local DB - - could not get file %1 from local DB + + Could not get file %1 from local DB @@ -5033,7 +5029,7 @@ This is a new, experimental mode. If you decide to use it, please report any iss OCC::ShareManager - + Error @@ -5041,17 +5037,17 @@ This is a new, experimental mode. If you decide to use it, please report any iss OCC::ShareModel - + %1 days - + 1 day - + Today @@ -5081,7 +5077,7 @@ This is a new, experimental mode. If you decide to use it, please report any iss - + Could not find local folder for %1 @@ -5202,11 +5198,6 @@ Server replied with error: %2 Resharing this folder is not allowed - - - Copy internal link - - Copy secure file drop link @@ -5218,6 +5209,11 @@ Server replied with error: %2 Copy public link + + + Copy internal link + + Copy secure filedrop link @@ -5249,16 +5245,16 @@ Server replied with error: %2 remaining time before lock expires - - - Open in browser - - Edit Labot + + + Open in browser + + Resolve conflict … @@ -5789,10 +5785,10 @@ Server replied with error: %2 - - - - + + + + Error updating metadata for a folder %1 @@ -5812,7 +5808,7 @@ Server replied with error: %2 - + Failed to unlock a folder. @@ -5830,7 +5826,7 @@ Server replied with error: %2 - + %1 notifications @@ -5846,17 +5842,17 @@ Server replied with error: %2 - + Rename file - + Open Nextcloud Assistant in browser - + Open Nextcloud Talk in browser @@ -5990,7 +5986,7 @@ Server replied with error: %2 - The Virtual filesystem feature does not support a drive as sync root + The Virtual filesystem feature requires a NTFS file system, %1 is using %2 @@ -5998,21 +5994,11 @@ Server replied with error: %2 Please choose a different location. %1 isn't a NTFS file system. It doesn't support virtual files. - - - The Virtual filesystem feature requires a NTFS file system, %1 is using %2 - - Please choose a different location. %1 is a network drive. It doesn't support virtual files. - - - The Virtual filesystem feature is not supported on network drives - - OCC::VfsDownloadErrorDialog @@ -6152,12 +6138,12 @@ Server replied with error: %2 - + 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. @@ -6233,23 +6219,23 @@ Server replied with error: %2 Nav konfigurētas sinhronizācijas mapes - + %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. @@ -6695,7 +6681,7 @@ Server replied with error: %2 Meklēt lietotājus vai grupas... - + Sharing is not available for this folder @@ -7106,11 +7092,6 @@ Server replied with error: %2 downloading lejupielādē - - - Downloading - - uploading @@ -7118,7 +7099,7 @@ Server replied with error: %2 - Uploading + Downloading @@ -7128,7 +7109,7 @@ Server replied with error: %2 - Deleting + Uploading @@ -7137,8 +7118,8 @@ Server replied with error: %2 pārvieto - - Moving + + Deleting @@ -7148,7 +7129,7 @@ Server replied with error: %2 - Ignoring + Moving @@ -7156,18 +7137,23 @@ Server replied with error: %2 error kļūda + + + Ignoring + + updating local metadata atjauno lokālos metadatus - + Updating local metadata - + Updating local virtual files metadata @@ -7326,19 +7312,6 @@ Server replied with error: %2 Notīrīt statusa ziņojumu izvēlni - - OCC::FormatWarningsWizardPage - - - <b>Warning:</b> %1 - - - - - <b>Warning:</b> - - - OCC::AbstractPropagateRemoteDeleteEncrypted @@ -7352,6 +7325,19 @@ Server replied with error: %2 "%1 Neizdevās atslēgt šifrēto mapi %2". + + OCC::FormatWarningsWizardPage + + + <b>Warning:</b> %1 + + + + + <b>Warning:</b> + + + OCC::OAuth diff --git a/translations/client_mk.ts b/translations/client_mk.ts index a9c1a28014f82..e98be400d99ff 100644 --- a/translations/client_mk.ts +++ b/translations/client_mk.ts @@ -172,13 +172,13 @@ - + Resume sync for all - + Pause sync for all @@ -193,32 +193,32 @@ - + Settings - + Exit - + Current account avatar - + Current account status is online - + Current account status is do not disturb - + Account switcher and settings menu @@ -307,17 +307,17 @@ FileProviderEvictionDialog - + Evict materialised files - + Materialised items - + Reload @@ -493,17 +493,17 @@ MainWindow - + Nextcloud desktop main dialog - + Unified search results list - + New activities @@ -553,13 +553,13 @@ Should an account import be attempted? - + %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? @@ -572,12 +572,12 @@ Should the account be imported? - + Import - + Skip @@ -672,12 +672,12 @@ Should the account be imported? - + 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> @@ -708,17 +708,17 @@ Should the account be imported? Предупредување - + 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 @@ -968,7 +968,7 @@ This action will abort any currently running synchronization. Нема врска со %1 на %2. - + Unable to connect to %1. @@ -978,7 +978,7 @@ This action will abort any currently running synchronization. Грешка во конфигурацијата на серверот: %1 во %2. - + You need to accept the terms of service @@ -1008,7 +1008,7 @@ This action will abort any currently running synchronization. Има папки кој не се синхронизирани бидејќи се премногу големи или се надворешни складишта: - + There are folders that have grown in size beyond %1MB: %2 @@ -1210,34 +1210,39 @@ This action will abort any currently running synchronization. Продолжи - + + Quit %1 + Излези %1 + + + %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. @@ -1253,11 +1258,6 @@ This action will abort any currently running synchronization. There was an error while accessing the configuration file at %1. Please make sure the file can be accessed by your system account. Настана грешка при пристапувањето до конфигурациската датотека на %1. Бидете сигурни дека вашата сметка може да пристапи до конфигурациската датотека. - - - Quit %1 - Излези %1 - OCC::AuthenticationDialog @@ -1722,13 +1722,13 @@ This action will abort any currently running synchronization. - - + + Encrypted metadata setup error! - + Encrypted metadata setup error: initial signature from server is empty. @@ -2278,28 +2278,28 @@ If this was an accident and you decide to keep your files, they will be re-synce Задржи ги датотеките - + 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? @@ -2323,41 +2323,41 @@ 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 @@ -2428,32 +2428,32 @@ Alternatively, you can restore all deleted files by downloading them from the se Подготовка за синхронизација. - + 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 @@ -2497,16 +2497,6 @@ Alternatively, you can restore all deleted files by downloading them from the se No valid folder selected! Не е избрана папка! - - - The folder %1 is used in a folder sync connection! - - - - - Please choose a different location. The selected folder isn't valid. - - The selected path does not exist! @@ -2517,17 +2507,37 @@ Alternatively, you can restore all deleted files by downloading them from the se The selected path is not a folder! Избраната патека не е папка! + + + You have no permission to write to the selected folder! + Немате дозвола за запишување во избраната папка! + + + + The local folder %1 already contains a folder used in a folder sync connection. Please pick another one! + Локалната папка %1 веќе е во папка која се синхронизира. Изберете друга папка! + + + + The local folder %1 is already contained in a folder used in a folder sync connection. Please pick another one! + Локалната папка %1 веќе е во папка која се синхронизира. Изберете друга папка! + + + + There is already a sync from the server to this local folder. Please pick another local folder! + Веќе постои синхронизација од серверот до оваа локална папка. Изберете друга локална папка! + + + + 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. - - - You have no permission to write to the selected folder! - Немате дозвола за запишување во избраната папка! - Please choose a different location. The path %1 doesn't exist. @@ -2545,26 +2555,11 @@ Alternatively, you can restore all deleted files by downloading them from the se folder location - - - The local folder %1 already contains a folder used in a folder sync connection. Please pick another one! - Локалната папка %1 веќе е во папка која се синхронизира. Изберете друга папка! - - - - The local folder %1 is already contained in a folder used in a folder sync connection. Please pick another one! - Локалната папка %1 веќе е во папка која се синхронизира. Изберете друга папка! - Please choose a different location. %1 is already contained in a folder used as a sync folder. - - - There is already a sync from the server to this local folder. Please pick another local folder! - Веќе постои синхронизација од серверот до оваа локална папка. Изберете друга локална папка! - Please choose a different location. %1 is already being used as a sync folder for %2. @@ -2572,7 +2567,7 @@ Alternatively, you can restore all deleted files by downloading them from the se - + 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. @@ -2677,12 +2672,12 @@ For advanced users: this issue might be related to multiple sync database files Усогласување на промените - + 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'" @@ -2700,7 +2695,7 @@ For advanced users: this issue might be related to multiple sync database files , - + Download %1/s Example text: "Download 24Kb/s" (%1 is replaced by 24Kb (translated)) @@ -2717,7 +2712,7 @@ For advanced users: this issue might be related to multiple sync database files ↓ %1/s - + Upload %1/s Example text: "Upload 24Kb/s" (%1 is replaced by 24Kb (translated)) @@ -2768,12 +2763,12 @@ For advanced users: this issue might be related to multiple sync database files датотека %1 од %2 - + File %1 of %2 - + About to start syncing @@ -3139,7 +3134,7 @@ For advanced users: this issue might be related to multiple sync database files Известувања од серверот за кој е потребно внимание. - + Show chat notification dialogs. @@ -3179,17 +3174,17 @@ Note that this selects only what pool upgrades are taken from, and that there ar Имајте во предвид дека ова само избира врзии што ќе се преземат од базенот и дека нема враќање назад: Значи, враќањето од бета-каналот до стабилниот канал обично не може да се направи веднаш и треба да се чека стабилна верзија која е понова од тековно инсталираната бета-верзија. - + daily - + enterprise - + - beta: contains versions with new features that may not be tested thoroughly - daily: contains versions created daily only for testing and development @@ -3198,7 +3193,7 @@ 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. @@ -3206,12 +3201,12 @@ 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 @@ -4253,30 +4248,30 @@ This is a new, experimental mode. If you decide to use it, please report any iss Ова име на датотека е резервирано име на системот. - + 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. @@ -4331,22 +4326,22 @@ This is a new, experimental mode. If you decide to use it, please report any iss Името на датотеката е на црна листа на серверот. - + 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). @@ -4381,7 +4376,7 @@ This is a new, experimental mode. If you decide to use it, please report any iss - + Could not upload file, because it is open in "%1". @@ -4464,18 +4459,18 @@ This is a new, experimental mode. If you decide to use it, please report any iss - - - - - - + + + + + + The folder %1 cannot be made read-only: %2 - - + + unknown exception @@ -4649,12 +4644,6 @@ This is a new, experimental mode. If you decide to use it, please report any iss File %1 downloaded but it resulted in a local file name clash! - - - - Could not get file %1 from local DB - - @@ -4662,6 +4651,13 @@ This is a new, experimental mode. If you decide to use it, please report any iss could not get file %1 from local DB + + + + + Could not get file %1 from local DB + + @@ -4763,13 +4759,13 @@ This is a new, experimental mode. If you decide to use it, please report any iss Серверот одговори со погрешен HTTP код. Очевуван одговор 201, но серверот одговори со "%1 %2". - - Could not get file %1 from local DB + + could not get file %1 from local DB - - could not get file %1 from local DB + + Could not get file %1 from local DB @@ -5020,7 +5016,7 @@ This is a new, experimental mode. If you decide to use it, please report any iss OCC::ShareManager - + Error @@ -5028,17 +5024,17 @@ This is a new, experimental mode. If you decide to use it, please report any iss OCC::ShareModel - + %1 days - + 1 day - + Today @@ -5068,7 +5064,7 @@ This is a new, experimental mode. If you decide to use it, please report any iss - + Could not find local folder for %1 @@ -5189,11 +5185,6 @@ Server replied with error: %2 Resharing this folder is not allowed Повторно споделување на оваа папка не е дозволено - - - Copy internal link - Копирај внатрешен линк - Copy secure file drop link @@ -5205,6 +5196,11 @@ Server replied with error: %2 Copy public link Копирај јавен линк + + + Copy internal link + Копирај внатрешен линк + Copy secure filedrop link @@ -5236,16 +5232,16 @@ Server replied with error: %2 remaining time before lock expires - - - Open in browser - Отвори во прелистувач - Edit Уреди + + + Open in browser + Отвори во прелистувач + Resolve conflict … @@ -5778,10 +5774,10 @@ Server replied with error: %2 - - - - + + + + Error updating metadata for a folder %1 @@ -5801,7 +5797,7 @@ Server replied with error: %2 - + Failed to unlock a folder. @@ -5819,7 +5815,7 @@ Server replied with error: %2 - + %1 notifications @@ -5835,17 +5831,17 @@ Server replied with error: %2 Решете конфликт - + Rename file - + Open Nextcloud Assistant in browser - + Open Nextcloud Talk in browser @@ -5979,7 +5975,7 @@ Server replied with error: %2 - The Virtual filesystem feature does not support a drive as sync root + The Virtual filesystem feature requires a NTFS file system, %1 is using %2 @@ -5987,21 +5983,11 @@ Server replied with error: %2 Please choose a different location. %1 isn't a NTFS file system. It doesn't support virtual files. - - - The Virtual filesystem feature requires a NTFS file system, %1 is using %2 - - Please choose a different location. %1 is a network drive. It doesn't support virtual files. - - - The Virtual filesystem feature is not supported on network drives - - OCC::VfsDownloadErrorDialog @@ -6141,12 +6127,12 @@ Server replied with error: %2 Серверот каде што се наоѓа %1 е премногу застарен и не ја поддржува верзијата %2. Користењето клиент со неподдржана верзија на сервер не е тестирано и потенцијално опасно. Продолжете на ваша одговорност. - + 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. @@ -6222,23 +6208,23 @@ Server replied with error: %2 Нема папки за синхронизација. - + %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. @@ -6684,7 +6670,7 @@ Server replied with error: %2 - + Sharing is not available for this folder @@ -7095,11 +7081,6 @@ Server replied with error: %2 downloading преземање - - - Downloading - - uploading @@ -7107,7 +7088,7 @@ Server replied with error: %2 - Uploading + Downloading @@ -7117,7 +7098,7 @@ Server replied with error: %2 - Deleting + Uploading @@ -7126,8 +7107,8 @@ Server replied with error: %2 поместување - - Moving + + Deleting @@ -7137,7 +7118,7 @@ Server replied with error: %2 - Ignoring + Moving @@ -7145,18 +7126,23 @@ Server replied with error: %2 error грешка + + + Ignoring + + updating local metadata ажурирање на локалната метадата - + Updating local metadata - + Updating local virtual files metadata @@ -7315,19 +7301,6 @@ Server replied with error: %2 - - OCC::FormatWarningsWizardPage - - - <b>Warning:</b> %1 - <b>Предупредување:</b> %1 - - - - <b>Warning:</b> - <b>Предупредување:</b> - - OCC::AbstractPropagateRemoteDeleteEncrypted @@ -7341,6 +7314,19 @@ Server replied with error: %2 "%1 Неуспешно отклучување на шифрираната папка %2". + + OCC::FormatWarningsWizardPage + + + <b>Warning:</b> %1 + <b>Предупредување:</b> %1 + + + + <b>Warning:</b> + <b>Предупредување:</b> + + OCC::OAuth diff --git a/translations/client_nb_NO.ts b/translations/client_nb_NO.ts index 93a713f89d772..b6ff2b4521e7c 100644 --- a/translations/client_nb_NO.ts +++ b/translations/client_nb_NO.ts @@ -172,13 +172,13 @@ - + Resume sync for all - + Pause sync for all @@ -193,32 +193,32 @@ - + Settings - + Exit - + Current account avatar - + Current account status is online - + Current account status is do not disturb - + Account switcher and settings menu @@ -307,17 +307,17 @@ FileProviderEvictionDialog - + Evict materialised files Kast ut materialiserte filer - + Materialised items Materialiserte elementer - + Reload Last inn på nytt @@ -493,17 +493,17 @@ MainWindow - + Nextcloud desktop main dialog - + Unified search results list - + New activities @@ -554,14 +554,14 @@ Should an account import be attempted? Bør en kontoimport forsøkes? - + %1 accounts were detected from a legacy desktop client. Should the accounts be imported? %1 kontoer ble oppdaget fra en eldre skrivebordsklient. Skal kontoene importeres? - + 1 account was detected from a legacy desktop client. Should the account be imported? 1 konto ble oppdaget fra en eldre skrivebordsklient. @@ -575,12 +575,12 @@ Skal kontoen importeres? Eldre import - + Import Importer - + Skip Hopp over @@ -675,12 +675,12 @@ Skal kontoen importeres? Krypter mappe - + End-to-end Encryption Ende-til-ende-kryptering - + 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> Dette vil kryptere mappen din og alle filene i den. Disse filene vil ikke lenger være tilgjengelige uten din krypteringsminnenøkkel. @@ -712,17 +712,17 @@ Skal kontoen importeres? Advarsel - + Please wait for the folder to sync before trying to encrypt it. Vent til mappen synkroniseres før du prøver å kryptere den. - + The folder has a minor sync problem. Encryption of this folder will be possible once it has synced successfully Mappen har et mindre synkroniseringsproblem. Kryptering av denne mappen vil være mulig når den har synkronisert vellykket - + The folder has a sync error. Encryption of this folder will be possible once it has synced successfully Mappen har en synkroniseringsfeil. Kryptering av denne mappen vil være mulig når den har synkronisert vellykket @@ -978,7 +978,7 @@ Denne handlingen vil avbryte enhver synkronisering som kjører. Ingen tilkobling til %1 på %2. - + Unable to connect to %1. Ikke i stand til å koble til %1. @@ -988,7 +988,7 @@ Denne handlingen vil avbryte enhver synkronisering som kjører. Server konfigurasjons-feil: %1 ved %2. - + You need to accept the terms of service @@ -1018,7 +1018,7 @@ Denne handlingen vil avbryte enhver synkronisering som kjører. Noen mapper ble ikke synkronisert fordi de er for store eller de er eksterne lagringsplasser: - + There are folders that have grown in size beyond %1MB: %2 Det er mapper som har vokst i størrelse utover %1MB: %2 @@ -1220,34 +1220,39 @@ Denne handlingen vil avbryte enhver synkronisering som kjører. Fortsett - + + Quit %1 + Avslutt %1 + + + %1 accounts number of accounts imported %1 kontoer - + 1 account 1 konto - + %1 folders number of folders imported %1 mapper - + 1 folder 1 mappe - + Legacy import Eldre import - + Imported %1 and %2 from a legacy desktop client. %3 number of accounts and folders imported. list of users. @@ -1264,11 +1269,6 @@ Denne handlingen vil avbryte enhver synkronisering som kjører. There was an error while accessing the configuration file at %1. Please make sure the file can be accessed by your system account. Det oppsto en feil under tilgang til konfigurasjonsfilen på %1. Sørg for at filen er tilgjengelig for systemkontoen din. - - - Quit %1 - Avslutt %1 - OCC::AuthenticationDialog @@ -1733,13 +1733,13 @@ Denne handlingen vil avbryte enhver synkronisering som kjører. Serverfeil: PROPFIND-svaret er ikke XML-formatert! - - + + Encrypted metadata setup error! Feil ved oppsett av kryptert metadata! - + Encrypted metadata setup error: initial signature from server is empty. @@ -2294,29 +2294,29 @@ Hvis dette var et uhell og du bestemmer deg for å beholde filene dine, vil de s Behold filer - + A folder has surpassed the set folder size limit of %1MB: %2. %3 En mappe har overskredet den angitte mappestørrelsesgrensen på %1MB: %2. %3 - + Keep syncing Fortsett å synkronisere - + Stop syncing Stopp synkroniseringen - + The folder %1 has surpassed the set folder size limit of %2MB. Mappen %1 har overskredet den angitte mappestørrelsesgrensen på %2MB. - + Would you like to stop syncing this folder? Vil du slutte å synkronisere denne mappen? @@ -2344,41 +2344,41 @@ Dette betyr at synkroniseringsklienten kanskje ikke laster opp lokale endringer %1 - + Virtual file download failed with code "%1", status "%2" and error message "%3" Virtuell nedlasting av filen feilet med kode "%1", status "%2" og feilmelding "%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? Fjerne alle filer? - + Proceed with Deletion - + Restore Files to Server - + Restore Files from Server @@ -2449,32 +2449,32 @@ Alternatively, you can restore all deleted files by downloading them from the se Forbereder synkronisering. - + 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 @@ -2518,16 +2518,6 @@ Alternatively, you can restore all deleted files by downloading them from the se No valid folder selected! Ingen gyldig mappe valgt! - - - The folder %1 is used in a folder sync connection! - - - - - Please choose a different location. The selected folder isn't valid. - - The selected path does not exist! @@ -2538,17 +2528,37 @@ Alternatively, you can restore all deleted files by downloading them from the se The selected path is not a folder! Den valgte stien er ikke en mappe! + + + You have no permission to write to the selected folder! + Du har ikke skrivetilgang til den valgte mappen! + + + + The local folder %1 already contains a folder used in a folder sync connection. Please pick another one! + Den lokale mappen %1 inneholder allerede en mappe brukt i en mappe-synkronisering. Velg en annen! + + + + The local folder %1 is already contained in a folder used in a folder sync connection. Please pick another one! + Den lokale mappen %1 er allerede en undermappe av en mappe brukt i en mappe-synkronisering. Velg en annen! + + + + There is already a sync from the server to this local folder. Please pick another local folder! + Det er allerede en synkronisering fra serveren til denne lokale mappen. Velg en annen mappe! + + + + 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. - - - You have no permission to write to the selected folder! - Du har ikke skrivetilgang til den valgte mappen! - Please choose a different location. The path %1 doesn't exist. @@ -2566,26 +2576,11 @@ Alternatively, you can restore all deleted files by downloading them from the se folder location - - - The local folder %1 already contains a folder used in a folder sync connection. Please pick another one! - Den lokale mappen %1 inneholder allerede en mappe brukt i en mappe-synkronisering. Velg en annen! - - - - The local folder %1 is already contained in a folder used in a folder sync connection. Please pick another one! - Den lokale mappen %1 er allerede en undermappe av en mappe brukt i en mappe-synkronisering. Velg en annen! - Please choose a different location. %1 is already contained in a folder used as a sync folder. - - - There is already a sync from the server to this local folder. Please pick another local folder! - Det er allerede en synkronisering fra serveren til denne lokale mappen. Velg en annen mappe! - Please choose a different location. %1 is already being used as a sync folder for %2. @@ -2593,7 +2588,7 @@ Alternatively, you can restore all deleted files by downloading them from the se - + 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. @@ -2698,12 +2693,12 @@ For advanced users: this issue might be related to multiple sync database files Sammenslår endringer - + Syncing local and remote changes Synkroniserer lokale og eksterne endringer - + %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 … @@ -2721,7 +2716,7 @@ For advanced users: this issue might be related to multiple sync database files , - + Download %1/s Example text: "Download 24Kb/s" (%1 is replaced by 24Kb (translated)) Nedlasting %1/s @@ -2738,7 +2733,7 @@ For advanced users: this issue might be related to multiple sync database files ↓ %1/s - + Upload %1/s Example text: "Upload 24Kb/s" (%1 is replaced by 24Kb (translated)) Opplasting %1/s @@ -2789,12 +2784,12 @@ For advanced users: this issue might be related to multiple sync database files fil %1 av %2 - + File %1 of %2 Fil %1 av %2 - + About to start syncing I ferd med å starte synkroniseringen @@ -3160,7 +3155,7 @@ For advanced users: this issue might be related to multiple sync database files Servervarsler som krever oppmerksomhet. - + Show chat notification dialogs. @@ -3201,17 +3196,17 @@ Note that this selects only what pool upgrades are taken from, and that there ar Merk at dette kun velger hvilke oppgraderinger av bassenget er hentet fra, og at det ikke er noen nedgraderinger: Så å gå tilbake fra betakanalen til den stabile kanalen kan vanligvis ikke gjøres umiddelbart og betyr at man venter på en stabil versjon som er nyere enn den installerte betaen. versjon. - + daily daglig - + enterprise foretagende - + - beta: contains versions with new features that may not be tested thoroughly - daily: contains versions created daily only for testing and development @@ -3220,7 +3215,7 @@ 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. @@ -3228,12 +3223,12 @@ Downgrading versions is not possible immediately: changing from stable to enterp - + Changing update channel? Bytte oppdateringskanal? - + The channel determines which upgrades will be offered to install: - stable: contains tested versions considered reliable @@ -4284,30 +4279,30 @@ Dette er en ny, eksperimentell modus. Hvis du bestemmer deg for å bruke den, ve Filnavnet er et reservert navn på dette filsystemet. - + Folder name of folder entity to use when warning about invalid name Mappe - + File name of folder entity to use when warning about invalid name Fil - + %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 navn som inneholder tegnet "%2" støttes ikke på dette filsystemet. - + %1 name contains at least one invalid character %1 navn inneholder minst ett ugyldig tegn - + %1 name is a reserved name on this file system. %1 navn er reservert på dette filsystemet. @@ -4362,22 +4357,22 @@ Dette er en ny, eksperimentell modus. Hvis du bestemmer deg for å bruke den, ve Filnavnet er svartelistet på serveren. - + 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). @@ -4412,7 +4407,7 @@ Dette er en ny, eksperimentell modus. Hvis du bestemmer deg for å bruke den, ve Kan ikke synkronisere på grunn av ugyldig endringstid - + Could not upload file, because it is open in "%1". Kunne ikke laste opp filen, fordi den er åpen i "%1". @@ -4495,18 +4490,18 @@ Dette er en ny, eksperimentell modus. Hvis du bestemmer deg for å bruke den, ve Feil under oppdatering av metadata på grunn av ugyldig endringstid - - - - - - + + + + + + The folder %1 cannot be made read-only: %2 Mappen %1 kan ikke gjøres skrivebeskyttet: %2 - - + + unknown exception @@ -4680,12 +4675,6 @@ Dette er en ny, eksperimentell modus. Hvis du bestemmer deg for å bruke den, ve File %1 downloaded but it resulted in a local file name clash! Filen %1 ble lastet ned, men det resulterte i en lokal filnavnsammenstøt! - - - - Could not get file %1 from local DB - - @@ -4693,6 +4682,13 @@ Dette er en ny, eksperimentell modus. Hvis du bestemmer deg for å bruke den, ve could not get file %1 from local DB kunne ikke hente filen %1 fra lokal DB + + + + + Could not get file %1 from local DB + + @@ -4793,16 +4789,16 @@ Dette er en ny, eksperimentell modus. Hvis du bestemmer deg for å bruke den, ve Wrong HTTP code returned by server. Expected 201, but received "%1 %2". Feil HTTP-kode returnert fra server. Ventet 201, men mottok "%1 %2". - - - Could not get file %1 from local DB - - could not get file %1 from local DB kunne ikke hente filen %1 fra lokal DB + + + Could not get file %1 from local DB + + Could not delete file record %1 from local DB @@ -5051,7 +5047,7 @@ Dette er en ny, eksperimentell modus. Hvis du bestemmer deg for å bruke den, ve OCC::ShareManager - + Error Feil @@ -5059,17 +5055,17 @@ Dette er en ny, eksperimentell modus. Hvis du bestemmer deg for å bruke den, ve OCC::ShareModel - + %1 days - + 1 day - + Today @@ -5099,7 +5095,7 @@ Dette er en ny, eksperimentell modus. Hvis du bestemmer deg for å bruke den, ve Sikker filslipp - + Could not find local folder for %1 Kunne ikke finne lokal mappe for %1 @@ -5222,11 +5218,6 @@ Server svarte med feil: %2 Resharing this folder is not allowed Videredeling av denne mappen er ikke tillatt - - - Copy internal link - Kopier intern lenke - Copy secure file drop link @@ -5238,6 +5229,11 @@ Server svarte med feil: %2 Copy public link Kopier offentlig lenke + + + Copy internal link + Kopier intern lenke + Copy secure filedrop link @@ -5269,16 +5265,16 @@ Server svarte med feil: %2 remaining time before lock expires Utløper om %1 minutterUtløper om %1 minutter - - - Open in browser - Åpne i nettleser - Edit Rediger + + + Open in browser + Åpne i nettleser + Resolve conflict … @@ -5811,10 +5807,10 @@ Server svarte med feil: %2 - - - - + + + + Error updating metadata for a folder %1 Feil under oppdatering av metadata for en mappe %1 @@ -5834,7 +5830,7 @@ Server svarte med feil: %2 Kan ikke legge til eller fjerne bruker %1 for tilgang til mappe %2 - + Failed to unlock a folder. Opplåsing av en mappe feilet. @@ -5852,7 +5848,7 @@ Server svarte med feil: %2 - + %1 notifications %1 varslinger @@ -5868,17 +5864,17 @@ Server svarte med feil: %2 Løs konflikt - + Rename file Omdøp fil - + Open Nextcloud Assistant in browser Åpne Nextcloud Assistant i nettleser - + Open Nextcloud Talk in browser Åpne Nextcloud Talk i nettleser @@ -6012,29 +6008,19 @@ Server svarte med feil: %2 - The Virtual filesystem feature does not support a drive as sync root - + The Virtual filesystem feature requires a NTFS file system, %1 is using %2 + Funksjonen virtuelt filsystem krever et NTFS-filsystem, %1 bruker %2 Please choose a different location. %1 isn't a NTFS file system. It doesn't support virtual files. - - - The Virtual filesystem feature requires a NTFS file system, %1 is using %2 - Funksjonen virtuelt filsystem krever et NTFS-filsystem, %1 bruker %2 - Please choose a different location. %1 is a network drive. It doesn't support virtual files. - - - The Virtual filesystem feature is not supported on network drives - - OCC::VfsDownloadErrorDialog @@ -6174,12 +6160,12 @@ Server svarte med feil: %2 Serveren på kontoen %1 kjører en versjon %2 som ikke støttes. Å bruke denne klienten med ikke-støttede serverversjoner er uprøvd og potensielt farlig. Fortsett på egen risiko. - + 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. @@ -6255,23 +6241,23 @@ Server svarte med feil: %2 Ingen synkroniseringsmapper er konfigurert - + %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: Synkronisering kjører. - + macOS VFS for %1: Last sync was successful. macOS VFS for %1: Siste synkronisering var vellykket. - + macOS VFS for %1: A problem was encountered. macOS VFS for %1: Et problem oppstod. @@ -6717,7 +6703,7 @@ Server svarte med feil: %2 Søk etter brukere eller grupper... - + Sharing is not available for this folder Deling av denne mappen er ikke tilgjengelig @@ -7128,11 +7114,6 @@ Server svarte med feil: %2 downloading laster ned - - - Downloading - Laster ned - uploading @@ -7140,8 +7121,8 @@ Server svarte med feil: %2 - Uploading - Laster opp + Downloading + Laster ned @@ -7150,8 +7131,8 @@ Server svarte med feil: %2 - Deleting - Sletter + Uploading + Laster opp @@ -7159,9 +7140,9 @@ Server svarte med feil: %2 flytter - - Moving - Flytter + + Deleting + Sletter @@ -7170,26 +7151,31 @@ Server svarte med feil: %2 - Ignoring - Ignorerer + Moving + Flytter error feil + + + Ignoring + Ignorerer + updating local metadata oppdaterer lokale metadata - + Updating local metadata Oppdaterer lokal metadata - + Updating local virtual files metadata Oppdaterer metadata for lokale virtuelle filer @@ -7348,19 +7334,6 @@ Server svarte med feil: %2 Slett statusmeldingsmeny - - OCC::FormatWarningsWizardPage - - - <b>Warning:</b> %1 - <b>Advarsel:</b> %1 - - - - <b>Warning:</b> - <b>Advarsel:</b> - - OCC::AbstractPropagateRemoteDeleteEncrypted @@ -7374,6 +7347,19 @@ Server svarte med feil: %2 "%1 feilet med å låse opp kryptert mappe %2". + + OCC::FormatWarningsWizardPage + + + <b>Warning:</b> %1 + <b>Advarsel:</b> %1 + + + + <b>Warning:</b> + <b>Advarsel:</b> + + OCC::OAuth diff --git a/translations/client_nl.ts b/translations/client_nl.ts index 5aaf862651009..e549b5cda68dd 100644 --- a/translations/client_nl.ts +++ b/translations/client_nl.ts @@ -172,13 +172,13 @@ - + Resume sync for all - + Pause sync for all @@ -193,32 +193,32 @@ - + Settings - + Exit - + Current account avatar - + Current account status is online - + Current account status is do not disturb - + Account switcher and settings menu @@ -307,17 +307,17 @@ FileProviderEvictionDialog - + Evict materialised files Gecreëerde items verwijderen - + Materialised items Gecreëerde items - + Reload Herlaad @@ -493,17 +493,17 @@ MainWindow - + Nextcloud desktop main dialog - + Unified search results list - + New activities @@ -553,13 +553,13 @@ Should an account import be attempted? Een bestaande configuratie van een eerdere desktop cliënt is gevonden. Een import van het account proberen? - + %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? - + 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? @@ -572,12 +572,12 @@ Should the account be imported? Legacy import - + Import Import - + Skip Overslaan @@ -672,12 +672,12 @@ Should the account be imported? 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. @@ -709,17 +709,17 @@ Should the account be imported? 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. @@ -974,7 +974,7 @@ Dit zal alle synchronisaties, die op dit moment bezig zijn, afbreken.Geen verbinding met %1 op %2. - + Unable to connect to %1. Kan niet verbinden met %1. @@ -984,7 +984,7 @@ Dit zal alle synchronisaties, die op dit moment bezig zijn, afbreken.Serverconfiguratiefout: %1 op %2. - + You need to accept the terms of service @@ -1014,7 +1014,7 @@ Dit zal alle synchronisaties, die op dit moment bezig zijn, afbreken.Er zijn mappen die niet gesynchroniseerd zijn, omdat ze te groot zijn of op externe opslag staan: - + There are folders that have grown in size beyond %1MB: %2 Er zijn bestanden die groter zijn geworden dan %1MB: %2 @@ -1216,34 +1216,39 @@ Dit zal alle synchronisaties, die op dit moment bezig zijn, afbreken.Doorgaan - + + Quit %1 + Afsluiten %1 + + + %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. @@ -1260,11 +1265,6 @@ Dit zal alle synchronisaties, die op dit moment bezig zijn, afbreken.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. - - - Quit %1 - Afsluiten %1 - OCC::AuthenticationDialog @@ -1729,13 +1729,13 @@ Dit zal alle synchronisaties, die op dit moment bezig zijn, afbreken.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. @@ -2290,29 +2290,29 @@ Als dit een ongelukje was en je de bestanden wilt behouden, worden ze opnieuw ge Bestanden bewaren - + 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? @@ -2340,41 +2340,41 @@ 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. 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? Alle bestanden verwijderen? - + Proceed with Deletion - + Restore Files to Server - + Restore Files from Server @@ -2445,32 +2445,32 @@ Alternatively, you can restore all deleted files by downloading them from the se Synchronisatie wordt voorbereid - + 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 @@ -2514,16 +2514,6 @@ Alternatively, you can restore all deleted files by downloading them from the se No valid folder selected! Geen geldige map geselecteerd! - - - The folder %1 is used in a folder sync connection! - - - - - Please choose a different location. The selected folder isn't valid. - - The selected path does not exist! @@ -2534,17 +2524,37 @@ Alternatively, you can restore all deleted files by downloading them from the se The selected path is not a folder! Het geselecteerde pad is geen map! + + + You have no permission to write to the selected folder! + U heeft geen machtiging om te schrijven naar de geselecteerde map! + + + + The local folder %1 already contains a folder used in a folder sync connection. Please pick another one! + Lokale map %1 bevat al een map die wordt gebruikt voor een mapsync verbinding. Kies een andere! + + + + The local folder %1 is already contained in a folder used in a folder sync connection. Please pick another one! + Lokale map %1 zit al in een map die wordt gebruikt voor een mapsync verbinding. Kies een andere! + + + + There is already a sync from the server to this local folder. Please pick another local folder! + Er wordt vanaf de server al naar deze lokale map gesynchroniseerd. Kies een andere lokale map! + + + + 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. - - - You have no permission to write to the selected folder! - U heeft geen machtiging om te schrijven naar de geselecteerde map! - Please choose a different location. The path %1 doesn't exist. @@ -2562,26 +2572,11 @@ Alternatively, you can restore all deleted files by downloading them from the se folder location - - - The local folder %1 already contains a folder used in a folder sync connection. Please pick another one! - Lokale map %1 bevat al een map die wordt gebruikt voor een mapsync verbinding. Kies een andere! - - - - The local folder %1 is already contained in a folder used in a folder sync connection. Please pick another one! - Lokale map %1 zit al in een map die wordt gebruikt voor een mapsync verbinding. Kies een andere! - Please choose a different location. %1 is already contained in a folder used as a sync folder. - - - There is already a sync from the server to this local folder. Please pick another local folder! - Er wordt vanaf de server al naar deze lokale map gesynchroniseerd. Kies een andere lokale map! - Please choose a different location. %1 is already being used as a sync folder for %2. @@ -2589,7 +2584,7 @@ Alternatively, you can restore all deleted files by downloading them from the se - + 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. @@ -2695,12 +2690,12 @@ For advanced users: this issue might be related to multiple sync database files Wijzigingen in overeenstemming brengen - + 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'" %1 %2 ... @@ -2718,7 +2713,7 @@ For advanced users: this issue might be related to multiple sync database files , - + Download %1/s Example text: "Download 24Kb/s" (%1 is replaced by 24Kb (translated)) Download %1/s @@ -2735,7 +2730,7 @@ For advanced users: this issue might be related to multiple sync database files ↓ %1/s - + Upload %1/s Example text: "Upload 24Kb/s" (%1 is replaced by 24Kb (translated)) Upload %1/s @@ -2786,12 +2781,12 @@ For advanced users: this issue might be related to multiple sync database files bestand %1 van %2 - + File %1 of %2 Bestand %1 van %2 - + About to start syncing In afwachting van synchronisatie @@ -3157,7 +3152,7 @@ For advanced users: this issue might be related to multiple sync database files Servermeldingen die aandacht nodig hebben. - + Show chat notification dialogs. @@ -3198,17 +3193,17 @@ Note that this selects only what pool upgrades are taken from, and that there ar Merk op dat dit alleen selecteert van welke pool upgrades worden overgenomen en dat er geen downgrades zijn: teruggaan van het betakanaal naar het stabiele kanaal kan meestal niet onmiddellijk worden gedaan en dat betekent wachten op een stabiele versie die nieuwer is dan de momenteel geïnstalleerde betaversie. - + 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 @@ -3217,7 +3212,7 @@ 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. @@ -3225,12 +3220,12 @@ Downgrading versions is not possible immediately: changing from stable to enterp - + Changing update channel? Wijzigen bijwerkkanaal? - + The channel determines which upgrades will be offered to install: - stable: contains tested versions considered reliable @@ -4281,30 +4276,30 @@ Dit is een nieuwe, experimentele modus. Als je besluit het te gebruiken, vragen De bestandsnaam is een gereserveerde naam op dit bestandssysteem. - + 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. - + %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. @@ -4359,22 +4354,22 @@ Dit is een nieuwe, experimentele modus. Als je besluit het te gebruiken, vragen 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). @@ -4409,7 +4404,7 @@ Dit is een nieuwe, experimentele modus. Als je besluit het te gebruiken, vragen Kan niet synchroniseren door ongeldig wijzigingstijdstip - + Could not upload file, because it is open in "%1". Kan bestand niet uploaden, omdat het geopend is in "%1". @@ -4492,18 +4487,18 @@ Dit is een nieuwe, experimentele modus. Als je besluit het te gebruiken, vragen 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 @@ -4677,12 +4672,6 @@ Dit is een nieuwe, experimentele modus. Als je besluit het te gebruiken, vragen 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 - - @@ -4690,6 +4679,13 @@ Dit is een nieuwe, experimentele modus. Als je besluit het te gebruiken, vragen could not get file %1 from local DB kon bestand %1 niet ophalen uit de lokale DB + + + + + Could not get file %1 from local DB + + @@ -4790,16 +4786,16 @@ 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". - - - Could not get file %1 from local DB - - could not get file %1 from local DB kon bestand %1 niet ophalen uit de lokale DB + + + Could not get file %1 from local DB + + Could not delete file record %1 from local DB @@ -5048,7 +5044,7 @@ Dit is een nieuwe, experimentele modus. Als je besluit het te gebruiken, vragen OCC::ShareManager - + Error Fout @@ -5056,17 +5052,17 @@ Dit is een nieuwe, experimentele modus. Als je besluit het te gebruiken, vragen OCC::ShareModel - + %1 days - + 1 day - + Today @@ -5096,7 +5092,7 @@ Dit is een nieuwe, experimentele modus. Als je besluit het te gebruiken, vragen Beveiligde bestands-drop - + Could not find local folder for %1 Kan lokale map niet vinden voor %1 @@ -5219,11 +5215,6 @@ Server antwoordde met fout: %2 Resharing this folder is not allowed Verder delen van deze map is niet toegestaan - - - Copy internal link - Kopieer interne link - Copy secure file drop link @@ -5235,6 +5226,11 @@ Server antwoordde met fout: %2 Copy public link Kopieer openbare link + + + Copy internal link + Kopieer interne link + Copy secure filedrop link @@ -5266,16 +5262,16 @@ Server antwoordde met fout: %2 remaining time before lock expires Vervalt over %n maandenVervalt over %1 minuut/minuten - - - Open in browser - Openen in browser - Edit Bewerken + + + Open in browser + Openen in browser + Resolve conflict … @@ -5808,10 +5804,10 @@ Server antwoordde met fout: %2 - - - - + + + + Error updating metadata for a folder %1 Fout bij bijwerken metadata voor een map: %1 @@ -5831,7 +5827,7 @@ Server antwoordde met fout: %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. @@ -5849,7 +5845,7 @@ Server antwoordde met fout: %2 - + %1 notifications %1 meldingen @@ -5865,17 +5861,17 @@ Server antwoordde met fout: %2 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 @@ -6009,29 +6005,19 @@ Server antwoordde met fout: %2 - The Virtual filesystem feature does not support a drive as sync root - + The Virtual filesystem feature requires a NTFS file system, %1 is using %2 + De Virtuele bestandssysteemfunctie vereist een NTFS bestandssysteem, %1 gebruikt %2 Please choose a different location. %1 isn't a NTFS file system. It doesn't support virtual files. - - - The Virtual filesystem feature requires a NTFS file system, %1 is using %2 - De Virtuele bestandssysteemfunctie vereist een NTFS bestandssysteem, %1 gebruikt %2 - Please choose a different location. %1 is a network drive. It doesn't support virtual files. - - - The Virtual filesystem feature is not supported on network drives - - OCC::VfsDownloadErrorDialog @@ -6171,12 +6157,12 @@ Server antwoordde met fout: %2 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. @@ -6252,23 +6238,23 @@ Server antwoordde met fout: %2 Geen syncmappen geconfigureerd - + %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. @@ -6714,7 +6700,7 @@ Server antwoordde met fout: %2 Zoeken naar gebruikers of groepen ... - + Sharing is not available for this folder Delen is niet beschikbaar voor deze map @@ -7125,11 +7111,6 @@ Server antwoordde met fout: %2 downloading downloaden - - - Downloading - Downloaden - uploading @@ -7137,8 +7118,8 @@ Server antwoordde met fout: %2 - Uploading - Uploaden + Downloading + Downloaden @@ -7147,8 +7128,8 @@ Server antwoordde met fout: %2 - Deleting - Verwijderen + Uploading + Uploaden @@ -7156,9 +7137,9 @@ Server antwoordde met fout: %2 verplaatsen - - Moving - Verplaatsen + + Deleting + Verwijderen @@ -7167,26 +7148,31 @@ Server antwoordde met fout: %2 - Ignoring - Negeren + Moving + Verplaatsen error fout + + + Ignoring + Negeren + updating local metadata Bijwerken lokale metadata - + Updating local metadata Bijwerken lokale metadata - + Updating local virtual files metadata Bijwerken lokale virtuele bestanden metadata @@ -7345,19 +7331,6 @@ Server antwoordde met fout: %2 Menu Statusbericht wissen - - OCC::FormatWarningsWizardPage - - - <b>Warning:</b> %1 - <b>Waarschuwing:</b> %1 - - - - <b>Warning:</b> - <b>Waarschuwing:</b> - - OCC::AbstractPropagateRemoteDeleteEncrypted @@ -7371,6 +7344,19 @@ Server antwoordde met fout: %2 "%1 kon versleutelde map %2" niet ontgrendelen. + + OCC::FormatWarningsWizardPage + + + <b>Warning:</b> %1 + <b>Waarschuwing:</b> %1 + + + + <b>Warning:</b> + <b>Waarschuwing:</b> + + OCC::OAuth diff --git a/translations/client_oc.ts b/translations/client_oc.ts index 323efff163ff4..f873c9ac16228 100644 --- a/translations/client_oc.ts +++ b/translations/client_oc.ts @@ -172,13 +172,13 @@ - + Resume sync for all - + Pause sync for all @@ -193,32 +193,32 @@ - + Settings - + Exit - + Current account avatar - + Current account status is online - + Current account status is do not disturb - + Account switcher and settings menu @@ -307,17 +307,17 @@ FileProviderEvictionDialog - + Evict materialised files - + Materialised items - + Reload @@ -493,17 +493,17 @@ MainWindow - + Nextcloud desktop main dialog - + Unified search results list - + New activities @@ -553,13 +553,13 @@ Should an account import be attempted? - + %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? @@ -572,12 +572,12 @@ Should the account be imported? - + Import Importar - + Skip Passar @@ -672,12 +672,12 @@ Should the account be imported? Chifrar lo dossièr - + 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> @@ -708,17 +708,17 @@ Should the account be imported? Atencion - + 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 @@ -968,7 +968,7 @@ This action will abort any currently running synchronization. Cap de connexion a %1 a %2. - + Unable to connect to %1. @@ -978,7 +978,7 @@ This action will abort any currently running synchronization. Error de configuracion servidor : %1 a %2. - + You need to accept the terms of service @@ -1008,7 +1008,7 @@ This action will abort any currently running synchronization. - + There are folders that have grown in size beyond %1MB: %2 @@ -1210,34 +1210,39 @@ This action will abort any currently running synchronization. Contunhar - + + Quit %1 + Quitar %1 + + + %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. @@ -1253,11 +1258,6 @@ This action will abort any currently running synchronization. There was an error while accessing the configuration file at %1. Please make sure the file can be accessed by your system account. - - - Quit %1 - Quitar %1 - OCC::AuthenticationDialog @@ -1720,13 +1720,13 @@ This action will abort any currently running synchronization. - - + + Encrypted metadata setup error! - + Encrypted metadata setup error: initial signature from server is empty. @@ -2274,28 +2274,28 @@ If this was an accident and you decide to keep your files, they will be re-synce Gardar los fichièrs - + 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? @@ -2319,41 +2319,41 @@ 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 @@ -2424,32 +2424,32 @@ Alternatively, you can restore all deleted files by downloading them from the se Preparacion per sincronizar. - + 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 @@ -2494,34 +2494,44 @@ Alternatively, you can restore all deleted files by downloading them from the se - - The folder %1 is used in a folder sync connection! + + The selected path does not exist! - - Please choose a different location. The selected folder isn't valid. + + The selected path is not a folder! - - The selected path does not exist! + + You have no permission to write to the selected folder! - - The selected path is not a folder! + + The local folder %1 already contains a folder used in a folder sync connection. Please pick another one! - - - Please choose a different location. %1 is already being used as a sync folder. + + The local folder %1 is already contained in a folder used in a folder sync connection. Please pick another one! - - You have no permission to write to the selected folder! + + There is already a sync from the server to this local folder. Please pick another local folder! + + + + + 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. @@ -2541,26 +2551,11 @@ Alternatively, you can restore all deleted files by downloading them from the se folder location - - - The local folder %1 already contains a folder used in a folder sync connection. Please pick another one! - - - - - The local folder %1 is already contained in a folder used in a folder sync connection. Please pick another one! - - Please choose a different location. %1 is already contained in a folder used as a sync folder. - - - There is already a sync from the server to this local folder. Please pick another local folder! - - Please choose a different location. %1 is already being used as a sync folder for %2. @@ -2568,7 +2563,7 @@ Alternatively, you can restore all deleted files by downloading them from the se - + 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. @@ -2673,12 +2668,12 @@ For advanced users: this issue might be related to multiple sync database files - + 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'" @@ -2696,7 +2691,7 @@ For advanced users: this issue might be related to multiple sync database files , - + Download %1/s Example text: "Download 24Kb/s" (%1 is replaced by 24Kb (translated)) @@ -2713,7 +2708,7 @@ For advanced users: this issue might be related to multiple sync database files ↓ %1/s - + Upload %1/s Example text: "Upload 24Kb/s" (%1 is replaced by 24Kb (translated)) @@ -2764,12 +2759,12 @@ For advanced users: this issue might be related to multiple sync database files fichièr %1 sus %2 - + File %1 of %2 - + About to start syncing @@ -3135,7 +3130,7 @@ For advanced users: this issue might be related to multiple sync database files Las notificacions del servidor que demanda vòstra atencion. - + Show chat notification dialogs. @@ -3174,17 +3169,17 @@ Note that this selects only what pool upgrades are taken from, and that there ar - + daily - + enterprise - + - beta: contains versions with new features that may not be tested thoroughly - daily: contains versions created daily only for testing and development @@ -3193,7 +3188,7 @@ 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. @@ -3201,12 +3196,12 @@ 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 @@ -4244,30 +4239,30 @@ This is a new, experimental mode. If you decide to use it, please report any iss - + 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. @@ -4322,22 +4317,22 @@ This is a new, experimental mode. If you decide to use it, please report any iss - + 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). @@ -4372,7 +4367,7 @@ This is a new, experimental mode. If you decide to use it, please report any iss - + Could not upload file, because it is open in "%1". @@ -4455,18 +4450,18 @@ This is a new, experimental mode. If you decide to use it, please report any iss - - - - - - + + + + + + The folder %1 cannot be made read-only: %2 - - + + unknown exception @@ -4640,12 +4635,6 @@ This is a new, experimental mode. If you decide to use it, please report any iss File %1 downloaded but it resulted in a local file name clash! - - - - Could not get file %1 from local DB - - @@ -4653,6 +4642,13 @@ This is a new, experimental mode. If you decide to use it, please report any iss could not get file %1 from local DB + + + + + Could not get file %1 from local DB + + @@ -4754,13 +4750,13 @@ This is a new, experimental mode. If you decide to use it, please report any iss - - Could not get file %1 from local DB + + could not get file %1 from local DB - - could not get file %1 from local DB + + Could not get file %1 from local DB @@ -5011,7 +5007,7 @@ This is a new, experimental mode. If you decide to use it, please report any iss OCC::ShareManager - + Error @@ -5019,17 +5015,17 @@ This is a new, experimental mode. If you decide to use it, please report any iss OCC::ShareModel - + %1 days - + 1 day - + Today @@ -5059,7 +5055,7 @@ This is a new, experimental mode. If you decide to use it, please report any iss - + Could not find local folder for %1 @@ -5180,11 +5176,6 @@ Server replied with error: %2 Resharing this folder is not allowed - - - Copy internal link - Copiar lo ligam intèrn - Copy secure file drop link @@ -5196,6 +5187,11 @@ Server replied with error: %2 Copy public link Copiar lo ligam public + + + Copy internal link + Copiar lo ligam intèrn + Copy secure filedrop link @@ -5227,16 +5223,16 @@ Server replied with error: %2 remaining time before lock expires - - - Open in browser - Dobrir dins lo navegador - Edit Modificar + + + Open in browser + Dobrir dins lo navegador + Resolve conflict … @@ -5769,10 +5765,10 @@ Server replied with error: %2 - - - - + + + + Error updating metadata for a folder %1 @@ -5792,7 +5788,7 @@ Server replied with error: %2 - + Failed to unlock a folder. @@ -5810,7 +5806,7 @@ Server replied with error: %2 - + %1 notifications @@ -5826,17 +5822,17 @@ Server replied with error: %2 - + Rename file - + Open Nextcloud Assistant in browser - + Open Nextcloud Talk in browser @@ -5970,7 +5966,7 @@ Server replied with error: %2 - The Virtual filesystem feature does not support a drive as sync root + The Virtual filesystem feature requires a NTFS file system, %1 is using %2 @@ -5978,21 +5974,11 @@ Server replied with error: %2 Please choose a different location. %1 isn't a NTFS file system. It doesn't support virtual files. - - - The Virtual filesystem feature requires a NTFS file system, %1 is using %2 - - Please choose a different location. %1 is a network drive. It doesn't support virtual files. - - - The Virtual filesystem feature is not supported on network drives - - OCC::VfsDownloadErrorDialog @@ -6132,12 +6118,12 @@ Server replied with error: %2 - + 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. @@ -6213,23 +6199,23 @@ Server replied with error: %2 - + %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. @@ -6675,7 +6661,7 @@ Server replied with error: %2 - + Sharing is not available for this folder @@ -7086,11 +7072,6 @@ Server replied with error: %2 downloading teledescargament - - - Downloading - - uploading @@ -7098,7 +7079,7 @@ Server replied with error: %2 - Uploading + Downloading @@ -7108,7 +7089,7 @@ Server replied with error: %2 - Deleting + Uploading @@ -7117,8 +7098,8 @@ Server replied with error: %2 desplaçament - - Moving + + Deleting @@ -7128,7 +7109,7 @@ Server replied with error: %2 - Ignoring + Moving @@ -7136,18 +7117,23 @@ Server replied with error: %2 error error + + + Ignoring + + updating local metadata actualizacion de las metadonadas localas - + Updating local metadata - + Updating local virtual files metadata @@ -7306,19 +7292,6 @@ Server replied with error: %2 Escafar lo menú de messatge d’estatut - - OCC::FormatWarningsWizardPage - - - <b>Warning:</b> %1 - <b>Atencion :</b> %1 - - - - <b>Warning:</b> - <b>Atencion :</b> - - OCC::AbstractPropagateRemoteDeleteEncrypted @@ -7332,6 +7305,19 @@ Server replied with error: %2 « %1 Fracàs del desverrolhatge del dossièr chifrat %2 » + + OCC::FormatWarningsWizardPage + + + <b>Warning:</b> %1 + <b>Atencion :</b> %1 + + + + <b>Warning:</b> + <b>Atencion :</b> + + OCC::OAuth diff --git a/translations/client_pl.ts b/translations/client_pl.ts index dab906686adc1..59765a7ecd9d6 100644 --- a/translations/client_pl.ts +++ b/translations/client_pl.ts @@ -172,13 +172,13 @@ - + Resume sync for all - + Pause sync for all @@ -193,32 +193,32 @@ - + Settings - + Exit - + Current account avatar - + Current account status is online - + Current account status is do not disturb - + Account switcher and settings menu @@ -307,17 +307,17 @@ FileProviderEvictionDialog - + Evict materialised files - + Materialised items - + Reload @@ -493,17 +493,17 @@ MainWindow - + Nextcloud desktop main dialog - + Unified search results list - + New activities @@ -554,14 +554,14 @@ Should an account import be attempted? Czy podjąć próbę zaimportowania konta? - + %1 accounts were detected from a legacy desktop client. Should the accounts be imported? Wykryto %1 kont w starszym kliencie desktopowym. Czy importować konta? - + 1 account was detected from a legacy desktop client. Should the account be imported? Wykryto 1 konto w starszym kliencie desktopowym. @@ -575,12 +575,12 @@ Czy importować konto? Starszy import - + Import Import - + Skip Pomiń @@ -675,12 +675,12 @@ Czy importować konto? Zaszyfruj katalog - + End-to-end Encryption Szyfrowanie End-to-End - + 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> Spowoduje to zaszyfrowanie Twojego katalogu i wszystkich znajdujących się w nim plików. Te pliki nie będą już dostępne bez klucza mnemonicznego szyfrowania. @@ -712,17 +712,17 @@ Czy importować konto? Ostrzeżenie - + Please wait for the folder to sync before trying to encrypt it. Poczekaj na synchronizację katalogu, zanim spróbujesz go zaszyfrować. - + The folder has a minor sync problem. Encryption of this folder will be possible once it has synced successfully Katalog ma niewielki problem z synchronizacją. Szyfrowanie tego katalogu będzie możliwe po pomyślnej synchronizacji - + The folder has a sync error. Encryption of this folder will be possible once it has synced successfully Katalog zawiera błąd synchronizacji. Szyfrowanie tego katalogu będzie możliwe po pomyślnej synchronizacji @@ -978,7 +978,7 @@ Ta czynność spowoduje przerwanie aktualnie uruchomionej synchronizacji.Brak połączenia do %1 z %2. - + Unable to connect to %1. Nie można połączyć się z %@ @@ -988,7 +988,7 @@ Ta czynność spowoduje przerwanie aktualnie uruchomionej synchronizacji.Błąd konfiguracji serwera: %1 w %2. - + You need to accept the terms of service @@ -1018,7 +1018,7 @@ Ta czynność spowoduje przerwanie aktualnie uruchomionej synchronizacji.Katalogi te nie zostały zsynchronizowane, ponieważ są zbyt duże lub znajdują się w magazynach zewnętrznych: - + There are folders that have grown in size beyond %1MB: %2 Istnieją katalogi, których rozmiar przekracza %1MB: %2 @@ -1220,34 +1220,39 @@ Ta czynność spowoduje przerwanie aktualnie uruchomionej synchronizacji.Kontynuuj - + + Quit %1 + Zamknij %1 + + + %1 accounts number of accounts imported %1 kont - + 1 account 1 konto - + %1 folders number of folders imported %1 katalogów - + 1 folder 1 katalog - + Legacy import Import ze starszej wersji - + Imported %1 and %2 from a legacy desktop client. %3 number of accounts and folders imported. list of users. @@ -1264,11 +1269,6 @@ Ta czynność spowoduje przerwanie aktualnie uruchomionej synchronizacji.There was an error while accessing the configuration file at %1. Please make sure the file can be accessed by your system account. Wystąpił błąd podczas dostępu do pliku konfiguracyjnego w %1. Upewnij się, że dostęp do pliku jest możliwy z Twojego konta systemowego. - - - Quit %1 - Zamknij %1 - OCC::AuthenticationDialog @@ -1733,13 +1733,13 @@ Ta czynność spowoduje przerwanie aktualnie uruchomionej synchronizacji.Błąd serwera: odpowiedź PROPFIND nie ma formatu XML! - - + + Encrypted metadata setup error! - + Encrypted metadata setup error: initial signature from server is empty. @@ -2295,29 +2295,29 @@ Jeśli to był przypadek i zdecydujesz się zachować swoje pliki, zostaną one Zachowaj pliki - + A folder has surpassed the set folder size limit of %1MB: %2. %3 Katalog przekroczył ustawiony limit rozmiaru katalogu wynoszący %1MB: %2. %3 - + Keep syncing Kontynuuj synchronizację - + Stop syncing Zatrzymaj synchronizację - + The folder %1 has surpassed the set folder size limit of %2MB. Katalog %1 przekroczył ustawiony limit rozmiaru katalogu wynoszący %2MB. - + Would you like to stop syncing this folder? Czy chcesz zatrzymać synchronizację tego katalogu? @@ -2345,41 +2345,41 @@ Oznacza to, że klient synchronizacji może nie przesyłać natychmiast zmian lo %1 - + Virtual file download failed with code "%1", status "%2" and error message "%3" Pobieranie pliku wirtualnego nie powiodło się z powodu kodu "%1", status "%2" i komunikatu o błędzie "%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? Usunąć wszystkie pliki? - + Proceed with Deletion - + Restore Files to Server - + Restore Files from Server @@ -2450,32 +2450,32 @@ Alternatively, you can restore all deleted files by downloading them from the se Przygotowanie do synchronizacji. - + 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 @@ -2519,16 +2519,6 @@ Alternatively, you can restore all deleted files by downloading them from the se No valid folder selected! Nie wybrano prawidłowego katalogu! - - - The folder %1 is used in a folder sync connection! - - - - - Please choose a different location. The selected folder isn't valid. - - The selected path does not exist! @@ -2539,17 +2529,37 @@ Alternatively, you can restore all deleted files by downloading them from the se The selected path is not a folder! Wybrana ścieżka nie jest katalogiem! + + + You have no permission to write to the selected folder! + Nie masz uprawnień do zapisu w wybranym katalogu! + + + + The local folder %1 already contains a folder used in a folder sync connection. Please pick another one! + Katalog lokalny %1 zawiera już katalog używany w połączeniu do synchronizacji katalogów. Wybierz inny! + + + + The local folder %1 is already contained in a folder used in a folder sync connection. Please pick another one! + W katalogu lokalnym %1 jest już zawarty katalog używany w obsłudze do synchronizacji katalogów. Wybierz inny! + + + + There is already a sync from the server to this local folder. Please pick another local folder! + Ten katalog jest już wybrany do synchronizacji z serwerem. Wybierz inny katalog lokalny! + + + + 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. - - - You have no permission to write to the selected folder! - Nie masz uprawnień do zapisu w wybranym katalogu! - Please choose a different location. The path %1 doesn't exist. @@ -2567,26 +2577,11 @@ Alternatively, you can restore all deleted files by downloading them from the se folder location - - - The local folder %1 already contains a folder used in a folder sync connection. Please pick another one! - Katalog lokalny %1 zawiera już katalog używany w połączeniu do synchronizacji katalogów. Wybierz inny! - - - - The local folder %1 is already contained in a folder used in a folder sync connection. Please pick another one! - W katalogu lokalnym %1 jest już zawarty katalog używany w obsłudze do synchronizacji katalogów. Wybierz inny! - Please choose a different location. %1 is already contained in a folder used as a sync folder. - - - There is already a sync from the server to this local folder. Please pick another local folder! - Ten katalog jest już wybrany do synchronizacji z serwerem. Wybierz inny katalog lokalny! - Please choose a different location. %1 is already being used as a sync folder for %2. @@ -2594,7 +2589,7 @@ Alternatively, you can restore all deleted files by downloading them from the se - + 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. @@ -2699,12 +2694,12 @@ For advanced users: this issue might be related to multiple sync database files Sprawdzanie zmian - + 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'" @@ -2722,7 +2717,7 @@ For advanced users: this issue might be related to multiple sync database files , - + Download %1/s Example text: "Download 24Kb/s" (%1 is replaced by 24Kb (translated)) @@ -2739,7 +2734,7 @@ For advanced users: this issue might be related to multiple sync database files ↓ %1/s - + Upload %1/s Example text: "Upload 24Kb/s" (%1 is replaced by 24Kb (translated)) @@ -2790,12 +2785,12 @@ For advanced users: this issue might be related to multiple sync database files plik %1 z %2 - + File %1 of %2 - + About to start syncing @@ -3161,7 +3156,7 @@ For advanced users: this issue might be related to multiple sync database files Powiadomienia serwera, które wymagają uwagi. - + Show chat notification dialogs. @@ -3202,17 +3197,17 @@ Note that this selects only what pool upgrades are taken from, and that there ar Zwróć uwagę, że wybiera to tylko, z której puli aktualizacje są pobierane oraz że nie można powrócić do niższej wersji. Więc powrót z kanału beta do stabilnego zwykle nie może być wykonany natychmiast i oznacza to oczekiwanie na stabilną wersję, która jest nowsza niż aktualnie zainstalowana wersja beta. - + daily codziennie - + enterprise komercyjna - + - beta: contains versions with new features that may not be tested thoroughly - daily: contains versions created daily only for testing and development @@ -3221,7 +3216,7 @@ 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. @@ -3229,12 +3224,12 @@ 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 @@ -4285,30 +4280,30 @@ To nowy, eksperymentalny tryb. Jeśli zdecydujesz się z niego skorzystać, zgł Nazwa pliku jest nazwą zarezerwowaną w tym systemie plików. - + Folder name of folder entity to use when warning about invalid name Katalog - + File name of folder entity to use when warning about invalid name Plik - + %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. @@ -4363,22 +4358,22 @@ To nowy, eksperymentalny tryb. Jeśli zdecydujesz się z niego skorzystać, zgł Nazwa pliku jest na czarnej liście na serwerze. - + 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). @@ -4413,7 +4408,7 @@ To nowy, eksperymentalny tryb. Jeśli zdecydujesz się z niego skorzystać, zgł Nie można zsynchronizować z powodu nieprawidłowego czasu modyfikacji - + Could not upload file, because it is open in "%1". Nie można przesłać pliku, ponieważ jest on otwarty w „%1”. @@ -4496,18 +4491,18 @@ To nowy, eksperymentalny tryb. Jeśli zdecydujesz się z niego skorzystać, zgł Błąd podczas aktualizacji metadanych z powodu nieprawidłowego czasu modyfikacji - - - - - - + + + + + + The folder %1 cannot be made read-only: %2 - - + + unknown exception @@ -4681,12 +4676,6 @@ To nowy, eksperymentalny tryb. Jeśli zdecydujesz się z niego skorzystać, zgł File %1 downloaded but it resulted in a local file name clash! Plik %1 został pobrany, ale spowodowało to lokalną kolizję nazwy pliku! - - - - Could not get file %1 from local DB - - @@ -4694,6 +4683,13 @@ To nowy, eksperymentalny tryb. Jeśli zdecydujesz się z niego skorzystać, zgł could not get file %1 from local DB Nie można pobrać pliku %1 z lokalnej bazy danych + + + + + Could not get file %1 from local DB + + @@ -4794,16 +4790,16 @@ To nowy, eksperymentalny tryb. Jeśli zdecydujesz się z niego skorzystać, zgł Wrong HTTP code returned by server. Expected 201, but received "%1 %2". Serwer zwrócił nieprawidłowy kod HTTP. Oczekiwano 201, a otrzymano "%1 %2". - - - Could not get file %1 from local DB - - could not get file %1 from local DB Nie można pobrać pliku %1 z lokalnej bazy danych + + + Could not get file %1 from local DB + + Could not delete file record %1 from local DB @@ -5052,7 +5048,7 @@ To nowy, eksperymentalny tryb. Jeśli zdecydujesz się z niego skorzystać, zgł OCC::ShareManager - + Error Błąd @@ -5060,17 +5056,17 @@ To nowy, eksperymentalny tryb. Jeśli zdecydujesz się z niego skorzystać, zgł OCC::ShareModel - + %1 days - + 1 day - + Today @@ -5100,7 +5096,7 @@ To nowy, eksperymentalny tryb. Jeśli zdecydujesz się z niego skorzystać, zgł Bezpieczne upuszczanie plików - + Could not find local folder for %1 @@ -5223,11 +5219,6 @@ Serwer odpowiedział błędem: %2 Resharing this folder is not allowed Udostępnianie dalej tego katalogu jest niedozwolone - - - Copy internal link - Kopiuj link wewnętrzny - Copy secure file drop link @@ -5239,6 +5230,11 @@ Serwer odpowiedział błędem: %2 Copy public link Kopiuj link publiczny + + + Copy internal link + Kopiuj link wewnętrzny + Copy secure filedrop link @@ -5270,16 +5266,16 @@ Serwer odpowiedział błędem: %2 remaining time before lock expires Wygasa za %1 minutęWygasa za %1 minutyWygasa za %1 minutWygasa za %1 minut - - - Open in browser - Otwórz w przeglądarce - Edit Edytuj + + + Open in browser + Otwórz w przeglądarce + Resolve conflict … @@ -5812,10 +5808,10 @@ Serwer odpowiedział błędem: %2 - - - - + + + + Error updating metadata for a folder %1 @@ -5835,7 +5831,7 @@ Serwer odpowiedział błędem: %2 - + Failed to unlock a folder. Nie udało się odblokować katalogu. @@ -5853,7 +5849,7 @@ Serwer odpowiedział błędem: %2 - + %1 notifications @@ -5869,17 +5865,17 @@ Serwer odpowiedział błędem: %2 Rozwiąż konflikt - + Rename file Zmień nazwę pliku - + Open Nextcloud Assistant in browser Otwórz Nextcloud Assistant w przeglądarce - + Open Nextcloud Talk in browser Otwórz Nextcloud Talk w przeglądarce @@ -6013,29 +6009,19 @@ Serwer odpowiedział błędem: %2 - The Virtual filesystem feature does not support a drive as sync root - + The Virtual filesystem feature requires a NTFS file system, %1 is using %2 + Funkcja wirtualnego systemu plików wymaga systemu plików NTFS, %1 używa %2 Please choose a different location. %1 isn't a NTFS file system. It doesn't support virtual files. - - - The Virtual filesystem feature requires a NTFS file system, %1 is using %2 - Funkcja wirtualnego systemu plików wymaga systemu plików NTFS, %1 używa %2 - Please choose a different location. %1 is a network drive. It doesn't support virtual files. - - - The Virtual filesystem feature is not supported on network drives - - OCC::VfsDownloadErrorDialog @@ -6175,12 +6161,12 @@ Serwer odpowiedział błędem: %2 Serwer na koncie %1 uruchomiony jest na starej i niewspieranej wersji %2. Używanie klienta z niewspieraną wersją serwera nie zostało przetestowane i jest potencjalnie niebezpieczne. Kontynuujesz na własne ryzyko. - + 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. @@ -6256,23 +6242,23 @@ Serwer odpowiedział błędem: %2 Nie skonfigurowano katalogów do synchronizacji - + %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. @@ -6718,7 +6704,7 @@ Serwer odpowiedział błędem: %2 Wyszukaj użytkowników lub grupy… - + Sharing is not available for this folder Udostępnianie nie jest dostępne w tym katalogu @@ -7129,11 +7115,6 @@ Serwer odpowiedział błędem: %2 downloading pobiernie - - - Downloading - - uploading @@ -7141,7 +7122,7 @@ Serwer odpowiedział błędem: %2 - Uploading + Downloading @@ -7151,7 +7132,7 @@ Serwer odpowiedział błędem: %2 - Deleting + Uploading @@ -7160,8 +7141,8 @@ Serwer odpowiedział błędem: %2 przenoszenie - - Moving + + Deleting @@ -7171,7 +7152,7 @@ Serwer odpowiedział błędem: %2 - Ignoring + Moving @@ -7179,18 +7160,23 @@ Serwer odpowiedział błędem: %2 error błąd + + + Ignoring + + updating local metadata aktualizacja lokalnych metadanych - + Updating local metadata - + Updating local virtual files metadata @@ -7349,19 +7335,6 @@ Serwer odpowiedział błędem: %2 Wyczyść menu komunikatu statusu - - OCC::FormatWarningsWizardPage - - - <b>Warning:</b> %1 - <b>Ostrzeżenie:</b> %1 - - - - <b>Warning:</b> - <b>Ostrzeżenie:</b> - - OCC::AbstractPropagateRemoteDeleteEncrypted @@ -7375,6 +7348,19 @@ Serwer odpowiedział błędem: %2 "%1 Nie udało się odblokować zaszyfrowanego katalogu %2". + + OCC::FormatWarningsWizardPage + + + <b>Warning:</b> %1 + <b>Ostrzeżenie:</b> %1 + + + + <b>Warning:</b> + <b>Ostrzeżenie:</b> + + OCC::OAuth diff --git a/translations/client_pt.ts b/translations/client_pt.ts index 16cb2ea1d37c6..150a31909a733 100644 --- a/translations/client_pt.ts +++ b/translations/client_pt.ts @@ -172,13 +172,13 @@ - + Resume sync for all - + Pause sync for all @@ -193,32 +193,32 @@ - + Settings - + Exit - + Current account avatar - + Current account status is online - + Current account status is do not disturb - + Account switcher and settings menu @@ -307,17 +307,17 @@ FileProviderEvictionDialog - + Evict materialised files - + Materialised items - + Reload @@ -493,17 +493,17 @@ MainWindow - + Nextcloud desktop main dialog - + Unified search results list - + New activities @@ -554,13 +554,13 @@ Should an account import be attempted? Pretende tentar uma importação de conta? - + %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? @@ -573,12 +573,12 @@ Should the account be imported? - + Import - + Skip @@ -673,12 +673,12 @@ Should the account be imported? Criptografar pasta - + 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> @@ -709,17 +709,17 @@ Should the account be imported? Aviso - + 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 @@ -969,7 +969,7 @@ This action will abort any currently running synchronization. Sem ligação para %1 em %2. - + Unable to connect to %1. @@ -979,7 +979,7 @@ This action will abort any currently running synchronization. - + You need to accept the terms of service @@ -1009,7 +1009,7 @@ This action will abort any currently running synchronization. Existem pastas que não foram sincronizadas por serem demasiado grandes ou armazenamento externo: - + There are folders that have grown in size beyond %1MB: %2 @@ -1211,34 +1211,39 @@ This action will abort any currently running synchronization. Continuar - + + Quit %1 + Sair do %1 + + + %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. @@ -1254,11 +1259,6 @@ This action will abort any currently running synchronization. There was an error while accessing the configuration file at %1. Please make sure the file can be accessed by your system account. - - - Quit %1 - Sair do %1 - OCC::AuthenticationDialog @@ -1721,13 +1721,13 @@ This action will abort any currently running synchronization. - - + + Encrypted metadata setup error! - + Encrypted metadata setup error: initial signature from server is empty. @@ -2277,28 +2277,28 @@ If this was an accident and you decide to keep your files, they will be re-synce Manter ficheiros - + 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? @@ -2322,41 +2322,41 @@ 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 @@ -2427,32 +2427,32 @@ Alternatively, you can restore all deleted files by downloading them from the se A preparar para sincronizar. - + 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 @@ -2496,16 +2496,6 @@ Alternatively, you can restore all deleted files by downloading them from the se No valid folder selected! Não foi selecionada nenhuma pasta válida! - - - The folder %1 is used in a folder sync connection! - - - - - Please choose a different location. The selected folder isn't valid. - - The selected path does not exist! @@ -2516,17 +2506,37 @@ Alternatively, you can restore all deleted files by downloading them from the se The selected path is not a folder! O caminho selecionado não é uma pasta! + + + You have no permission to write to the selected folder! + Não tem permissão para gravar para a pasta selecionada! + + + + The local folder %1 already contains a folder used in a folder sync connection. Please pick another one! + A pasta local %1 já contém uma pasta utilizada numa ligação de sincronização de pasta. Por favor, escolha outra! + + + + The local folder %1 is already contained in a folder used in a folder sync connection. Please pick another one! + A pasta local %1 já contém uma pasta usada numa ligação de sincronização de pasta. Por favor, escolha outra! + + + + There is already a sync from the server to this local folder. Please pick another local folder! + Já existe uma sincronização do servidor para esta pasta local. Por favor escolha outra pasta local! + + + + 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. - - - You have no permission to write to the selected folder! - Não tem permissão para gravar para a pasta selecionada! - Please choose a different location. The path %1 doesn't exist. @@ -2544,26 +2554,11 @@ Alternatively, you can restore all deleted files by downloading them from the se folder location - - - The local folder %1 already contains a folder used in a folder sync connection. Please pick another one! - A pasta local %1 já contém uma pasta utilizada numa ligação de sincronização de pasta. Por favor, escolha outra! - - - - The local folder %1 is already contained in a folder used in a folder sync connection. Please pick another one! - A pasta local %1 já contém uma pasta usada numa ligação de sincronização de pasta. Por favor, escolha outra! - Please choose a different location. %1 is already contained in a folder used as a sync folder. - - - There is already a sync from the server to this local folder. Please pick another local folder! - Já existe uma sincronização do servidor para esta pasta local. Por favor escolha outra pasta local! - Please choose a different location. %1 is already being used as a sync folder for %2. @@ -2571,7 +2566,7 @@ Alternatively, you can restore all deleted files by downloading them from the se - + 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. @@ -2676,12 +2671,12 @@ For advanced users: this issue might be related to multiple sync database files Reconciliar alterações - + 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'" @@ -2699,7 +2694,7 @@ For advanced users: this issue might be related to multiple sync database files , - + Download %1/s Example text: "Download 24Kb/s" (%1 is replaced by 24Kb (translated)) Transferir %1/s @@ -2716,7 +2711,7 @@ For advanced users: this issue might be related to multiple sync database files ↓ %1/s - + Upload %1/s Example text: "Upload 24Kb/s" (%1 is replaced by 24Kb (translated)) @@ -2767,12 +2762,12 @@ For advanced users: this issue might be related to multiple sync database files ficheiro %1 de %2 - + File %1 of %2 - + About to start syncing @@ -3138,7 +3133,7 @@ For advanced users: this issue might be related to multiple sync database files Notificações do Servidor que requerem atenção. - + Show chat notification dialogs. @@ -3177,17 +3172,17 @@ Note that this selects only what pool upgrades are taken from, and that there ar - + daily - + enterprise - + - beta: contains versions with new features that may not be tested thoroughly - daily: contains versions created daily only for testing and development @@ -3196,7 +3191,7 @@ 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. @@ -3204,12 +3199,12 @@ 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 @@ -4249,30 +4244,30 @@ This is a new, experimental mode. If you decide to use it, please report any iss - + 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. @@ -4327,22 +4322,22 @@ This is a new, experimental mode. If you decide to use it, please report any iss - + 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). @@ -4377,7 +4372,7 @@ This is a new, experimental mode. If you decide to use it, please report any iss - + Could not upload file, because it is open in "%1". @@ -4460,18 +4455,18 @@ This is a new, experimental mode. If you decide to use it, please report any iss - - - - - - + + + + + + The folder %1 cannot be made read-only: %2 - - + + unknown exception @@ -4645,12 +4640,6 @@ This is a new, experimental mode. If you decide to use it, please report any iss File %1 downloaded but it resulted in a local file name clash! - - - - Could not get file %1 from local DB - - @@ -4658,6 +4647,13 @@ This is a new, experimental mode. If you decide to use it, please report any iss could not get file %1 from local DB + + + + + Could not get file %1 from local DB + + @@ -4759,13 +4755,13 @@ This is a new, experimental mode. If you decide to use it, please report any iss Código HTTP errado devolvido pelo servidor. Esperado 201, mas foi recebido "%1 %2". - - Could not get file %1 from local DB + + could not get file %1 from local DB - - could not get file %1 from local DB + + Could not get file %1 from local DB @@ -5016,7 +5012,7 @@ This is a new, experimental mode. If you decide to use it, please report any iss OCC::ShareManager - + Error @@ -5024,17 +5020,17 @@ This is a new, experimental mode. If you decide to use it, please report any iss OCC::ShareModel - + %1 days - + 1 day - + Today @@ -5064,7 +5060,7 @@ This is a new, experimental mode. If you decide to use it, please report any iss - + Could not find local folder for %1 @@ -5185,11 +5181,6 @@ Server replied with error: %2 Resharing this folder is not allowed - - - Copy internal link - Copiar ligação interna - Copy secure file drop link @@ -5201,6 +5192,11 @@ Server replied with error: %2 Copy public link Copiar link publico + + + Copy internal link + Copiar ligação interna + Copy secure filedrop link @@ -5232,16 +5228,16 @@ Server replied with error: %2 remaining time before lock expires - - - Open in browser - Abrir no navegador - Edit Editar + + + Open in browser + Abrir no navegador + Resolve conflict … @@ -5774,10 +5770,10 @@ Server replied with error: %2 - - - - + + + + Error updating metadata for a folder %1 @@ -5797,7 +5793,7 @@ Server replied with error: %2 - + Failed to unlock a folder. @@ -5815,7 +5811,7 @@ Server replied with error: %2 - + %1 notifications @@ -5831,17 +5827,17 @@ Server replied with error: %2 - + Rename file - + Open Nextcloud Assistant in browser - + Open Nextcloud Talk in browser @@ -5975,7 +5971,7 @@ Server replied with error: %2 - The Virtual filesystem feature does not support a drive as sync root + The Virtual filesystem feature requires a NTFS file system, %1 is using %2 @@ -5983,21 +5979,11 @@ Server replied with error: %2 Please choose a different location. %1 isn't a NTFS file system. It doesn't support virtual files. - - - The Virtual filesystem feature requires a NTFS file system, %1 is using %2 - - Please choose a different location. %1 is a network drive. It doesn't support virtual files. - - - The Virtual filesystem feature is not supported on network drives - - OCC::VfsDownloadErrorDialog @@ -6137,12 +6123,12 @@ Server replied with error: %2 - + 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. @@ -6218,23 +6204,23 @@ Server replied with error: %2 Não há pastas de sincronização configuradas - + %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. @@ -6680,7 +6666,7 @@ Server replied with error: %2 - + Sharing is not available for this folder @@ -7091,11 +7077,6 @@ Server replied with error: %2 downloading a transferir - - - Downloading - - uploading @@ -7103,7 +7084,7 @@ Server replied with error: %2 - Uploading + Downloading @@ -7113,7 +7094,7 @@ Server replied with error: %2 - Deleting + Uploading @@ -7122,8 +7103,8 @@ Server replied with error: %2 a mover - - Moving + + Deleting @@ -7133,7 +7114,7 @@ Server replied with error: %2 - Ignoring + Moving @@ -7141,18 +7122,23 @@ Server replied with error: %2 error erro + + + Ignoring + + updating local metadata a atualizar metadados locais - + Updating local metadata - + Updating local virtual files metadata @@ -7311,19 +7297,6 @@ Server replied with error: %2 Limpar menu de mensagem de estado - - OCC::FormatWarningsWizardPage - - - <b>Warning:</b> %1 - <b>Aviso:</b> %1 - - - - <b>Warning:</b> - <b>Aviso:</b> - - OCC::AbstractPropagateRemoteDeleteEncrypted @@ -7337,6 +7310,19 @@ Server replied with error: %2 "%1 Falha ao desbloquear a pasta criptografada %2". + + OCC::FormatWarningsWizardPage + + + <b>Warning:</b> %1 + <b>Aviso:</b> %1 + + + + <b>Warning:</b> + <b>Aviso:</b> + + OCC::OAuth diff --git a/translations/client_pt_BR.ts b/translations/client_pt_BR.ts index 3bf63a4beee52..4221c858be994 100644 --- a/translations/client_pt_BR.ts +++ b/translations/client_pt_BR.ts @@ -172,13 +172,13 @@ - + Resume sync for all Retomar a sincronização para todos - + Pause sync for all Pausar a sincronização para todos @@ -193,32 +193,32 @@ Adicionar nova conta - + Settings Configurações - + Exit Sair - + Current account avatar Avatar atual da conta - + Current account status is online O status atual da conta é online - + Current account status is do not disturb O status da conta atual é não perturbe - + Account switcher and settings menu Alternador de conta e menu de configurações @@ -307,17 +307,17 @@ FileProviderEvictionDialog - + Evict materialised files Despejar arquivos materializados - + Materialised items Itens materializados - + Reload Recarregar @@ -493,17 +493,17 @@ MainWindow - + Nextcloud desktop main dialog Caixa de diálogo principal do desktop Nextcloud - + Unified search results list Lista unificada de resultados de pesquisa - + New activities Novas atividades @@ -553,13 +553,13 @@ Should an account import be attempted? Foi detectada uma configuração existente de um cliente de desktop herdado.Deve-se tentar uma importação de conta? - + %1 accounts were detected from a legacy desktop client. Should the accounts be imported? %1 contas foram detectadas em um cliente de desktop legado. As contas devem ser importadas? - + 1 account was detected from a legacy desktop client. Should the account be imported? 1 conta foi detectada em um cliente de desktop legado. A conta deve ser importada? @@ -572,12 +572,12 @@ Should the account be imported? Importação herdada - + Import Importar - + Skip Pular @@ -672,12 +672,12 @@ Should the account be imported? Criptografar pasta - + End-to-end Encryption Criptografia ponta a ponta - + 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> Isso criptografará sua pasta e todos os arquivos dentro dela. Esses arquivos não estarão mais acessíveis sem sua chave mnemônica de criptografia. @@ -709,17 +709,17 @@ Should the account be imported? Aviso - + Please wait for the folder to sync before trying to encrypt it. Aguarde a sincronização da pasta antes de tentar criptografá-la. - + The folder has a minor sync problem. Encryption of this folder will be possible once it has synced successfully A pasta tem um pequeno problema de sincronização. A criptografia desta pasta será possível assim que ela for sincronizada com sucesso - + The folder has a sync error. Encryption of this folder will be possible once it has synced successfully A pasta apresenta um erro de sincronização. A criptografia desta pasta será possível assim que ela for sincronizada com sucesso @@ -975,7 +975,7 @@ Esta ação irá cancelar qualquer sincronização atualmente em execução.Sem conexão para %1 em %2. - + Unable to connect to %1. Não foi possível conectar-se a %1. @@ -985,7 +985,7 @@ Esta ação irá cancelar qualquer sincronização atualmente em execução.Erro na configuração do servidor: %1 em %2. - + You need to accept the terms of service Você precisa aceitar os termos de serviço @@ -1015,7 +1015,7 @@ Esta ação irá cancelar qualquer sincronização atualmente em execução.Existem pastas que não foram sincronizadas porque são muito grandes ou são armazenamentos externos: - + There are folders that have grown in size beyond %1MB: %2 Existem pastas cujo tamanho aumentou além de %1MB: %2 @@ -1217,34 +1217,39 @@ Esta ação irá cancelar qualquer sincronização atualmente em execução.Continuar - + + Quit %1 + Sair %1 + + + %1 accounts number of accounts imported %1 contas - + 1 account 1 conta - + %1 folders number of folders imported %1 pastas - + 1 folder 1 pasta - + Legacy import Importação legada - + Imported %1 and %2 from a legacy desktop client. %3 number of accounts and folders imported. list of users. @@ -1260,11 +1265,6 @@ Esta ação irá cancelar qualquer sincronização atualmente em execução.There was an error while accessing the configuration file at %1. Please make sure the file can be accessed by your system account. Ocorreu um erro ao acessar o arquivo de configuração em %1. Certifique-se de que o arquivo pode ser acessado por sua conta do sistema. - - - Quit %1 - Sair %1 - OCC::AuthenticationDialog @@ -1729,13 +1729,13 @@ Esta ação irá cancelar qualquer sincronização atualmente em execução.Erro do servidor: a resposta PROPFIND não está formatada em XML! - - + + Encrypted metadata setup error! Erro de configuração de metadados criptografados! - + Encrypted metadata setup error: initial signature from server is empty. Erro de configuração de metadados criptografados: a assinatura inicial do servidor está vazia. @@ -2289,29 +2289,29 @@ If this was an accident and you decide to keep your files, they will be re-synce Manter arquivos - + A folder has surpassed the set folder size limit of %1MB: %2. %3 Uma pasta ultrapassou o limite de tamanho de pasta definido de %1 MB: %2. %3 - + Keep syncing Continue sincronizando - + Stop syncing Parar de sincronizar - + The folder %1 has surpassed the set folder size limit of %2MB. A pasta %1 ultrapassou o limite de tamanho de pasta definido de %2MB. - + Would you like to stop syncing this folder? Deseja interromper a sincronização desta pasta? @@ -2339,12 +2339,12 @@ Isso significa que o cliente de sincronização pode não fazer upload de altera %1 - + Virtual file download failed with code "%1", status "%2" and error message "%3" Falha no download do arquivo virtual com código "%1", status "%2" e mensagem de erro "%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. @@ -2353,7 +2353,7 @@ Por favor, confirme se você gostaria de prosseguir com essas exclusões. Alternativamente, você pode restaurar todos os arquivos excluídos enviando da pasta '%1' para o 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. @@ -2362,22 +2362,22 @@ Por favor, confirme se você gostaria de prosseguir com essas exclusões. Como alternativa, você pode restaurar todos os arquivos excluídos baixando-os do servidor. - + Remove all files? Remover todos os arquivos? - + Proceed with Deletion Prosseguir com a Exclusão - + Restore Files to Server Restaurar Arquivos para o Servidor - + Restore Files from Server Restaurar Arquivos do Servidor @@ -2448,32 +2448,32 @@ Como alternativa, você pode restaurar todos os arquivos excluídos baixando-os Preparando para a sincronização. - + Syncing %1 of %2 (A few seconds left) Sincronizando %1 de %2 (faltam alguns segundos) - + Syncing %1 of %2 (%3 left) Sincronizando %1 de %2 (faltam %3) - + Syncing %1 of %2 Sincronizando %1 de %2 - + Syncing %1 (A few seconds left) Sincronizando %1 (faltam alguns segundos) - + Syncing %1 (%2 left) Sincronizando %1 (faltam %2) - + Syncing %1 Sincronizando %1 @@ -2517,16 +2517,6 @@ Como alternativa, você pode restaurar todos os arquivos excluídos baixando-os No valid folder selected! Nenhuma pasta válida selecionada! - - - The folder %1 is used in a folder sync connection! - - - - - Please choose a different location. The selected folder isn't valid. - - The selected path does not exist! @@ -2537,17 +2527,37 @@ Como alternativa, você pode restaurar todos os arquivos excluídos baixando-os The selected path is not a folder! O caminho selecionado não é uma pasta! + + + You have no permission to write to the selected folder! + Voce não tem permissão para escrita na pasta selecionada! + + + + The local folder %1 already contains a folder used in a folder sync connection. Please pick another one! + A pasta local %1 já contém uma pasta utilizada numa ligação de sincronização de pasta. Por favor, escolha outra! + + + + The local folder %1 is already contained in a folder used in a folder sync connection. Please pick another one! + A pasta local %1 já está contida em uma pasta usada em uma conexão de sincronização de pastas. Por favor, escolha outra! + + + + There is already a sync from the server to this local folder. Please pick another local folder! + Já existe uma sincronização do servidor para esta pasta local. Por favor, escolha outra pasta local! + + + + 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. - - - You have no permission to write to the selected folder! - Voce não tem permissão para escrita na pasta selecionada! - Please choose a different location. The path %1 doesn't exist. @@ -2565,26 +2575,11 @@ Como alternativa, você pode restaurar todos os arquivos excluídos baixando-os folder location - - - The local folder %1 already contains a folder used in a folder sync connection. Please pick another one! - A pasta local %1 já contém uma pasta utilizada numa ligação de sincronização de pasta. Por favor, escolha outra! - - - - The local folder %1 is already contained in a folder used in a folder sync connection. Please pick another one! - A pasta local %1 já está contida em uma pasta usada em uma conexão de sincronização de pastas. Por favor, escolha outra! - Please choose a different location. %1 is already contained in a folder used as a sync folder. - - - There is already a sync from the server to this local folder. Please pick another local folder! - Já existe uma sincronização do servidor para esta pasta local. Por favor, escolha outra pasta local! - Please choose a different location. %1 is already being used as a sync folder for %2. @@ -2592,7 +2587,7 @@ Como alternativa, você pode restaurar todos os arquivos excluídos baixando-os - + 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. @@ -2697,12 +2692,12 @@ For advanced users: this issue might be related to multiple sync database files Reconciliando mudanças - + Syncing local and remote changes Sincronizando alterações locais e remotas - + %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 … @@ -2720,7 +2715,7 @@ For advanced users: this issue might be related to multiple sync database files , - + Download %1/s Example text: "Download 24Kb/s" (%1 is replaced by 24Kb (translated)) Baixar %1/s @@ -2737,7 +2732,7 @@ For advanced users: this issue might be related to multiple sync database files ↓ %1/s - + Upload %1/s Example text: "Upload 24Kb/s" (%1 is replaced by 24Kb (translated)) Enviar %1/s @@ -2788,12 +2783,12 @@ For advanced users: this issue might be related to multiple sync database files arquivo %1 de %2 - + File %1 of %2 Arquivo %1 de %2 - + About to start syncing Prestes a iniciar a sincronização @@ -3159,7 +3154,7 @@ For advanced users: this issue might be related to multiple sync database files Notificações do servidor que exigem atenção. - + Show chat notification dialogs. Mostrar diálogos de notificação de chamada. @@ -3200,17 +3195,17 @@ Note that this selects only what pool upgrades are taken from, and that there ar Observe que isso seleciona apenas quais upgrades de pool são retirados, e que não há downgrades: Portanto, voltar do canal beta para o canal estável geralmente não pode ser feito imediatamente e significa esperar por uma versão estável que seja mais recente que a beta instalada atualmente versão. - + daily diário - + enterprise empresa - + - beta: contains versions with new features that may not be tested thoroughly - daily: contains versions created daily only for testing and development @@ -3222,7 +3217,7 @@ Downgrading versions is not possible immediately: changing from beta to stable m As versões de downgrade não são possíveis imediatamente: mudar de beta para estável significa aguardar a nova versão estável. - + - enterprise: contains stable versions for customers. Downgrading versions is not possible immediately: changing from stable to enterprise means waiting for the new enterprise version. @@ -3232,12 +3227,12 @@ Downgrading versions is not possible immediately: changing from stable to enterp As versões de downgrade não são possíveis imediatamente: mudar de estável para empresa significa aguardar a nova versão corporativa. - + Changing update channel? Mudando o canal de atualização? - + The channel determines which upgrades will be offered to install: - stable: contains tested versions considered reliable @@ -4290,30 +4285,30 @@ Este é um novo modo experimental. Se você decidir usá-lo, relate quaisquer pr O nome do arquivo é um nome reservado neste sistema de arquivos. - + Folder name of folder entity to use when warning about invalid name Pasta - + File name of folder entity to use when warning about invalid name Arquivo - + %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 O nome %1 contendo o caractere "%2" não é suportado neste sistema de arquivos. - + %1 name contains at least one invalid character O nome %1 contém pelo menos um carácter inválido - + %1 name is a reserved name on this file system. %1 nome é um nome reservado neste sistema de arquivos. @@ -4368,22 +4363,22 @@ Este é um novo modo experimental. Se você decidir usá-lo, relate quaisquer pr O nome do arquivo está na lista negra do servidor. - + Reason: the entire filename is forbidden. Motivo: o nome inteiro do arquivo é proibido. - + Reason: the filename has a forbidden base name (filename start). Motivo: o nome do arquivo tem um nome base proibido (nome do arquivo inicial). - + Reason: the file has a forbidden extension (.%1). Motivo: o arquivo tem uma extensão proibida (.%1). - + Reason: the filename contains a forbidden character (%1). Razão: o nome do arquivo contém um caractere proibido (%1). @@ -4418,7 +4413,7 @@ Este é um novo modo experimental. Se você decidir usá-lo, relate quaisquer pr Não é possível sincronizar devido ao horário de modificação inválido - + Could not upload file, because it is open in "%1". Não foi possível fazer upload do arquivo porque ele está aberto em "%1". @@ -4501,18 +4496,18 @@ Este é um novo modo experimental. Se você decidir usá-lo, relate quaisquer pr Erro ao atualizar os metadados devido a erro na data/hora modificada - - - - - - + + + + + + The folder %1 cannot be made read-only: %2 A pasta %1 não pode ser tornada somente leitura: %2 - - + + unknown exception @@ -4686,12 +4681,6 @@ Este é um novo modo experimental. Se você decidir usá-lo, relate quaisquer pr File %1 downloaded but it resulted in a local file name clash! O arquivo %1 baixado, mas resultou em um confronto de nome de arquivo local! - - - - Could not get file %1 from local DB - Não foi possível obter de arquivo %1 do BD local - @@ -4699,6 +4688,13 @@ Este é um novo modo experimental. Se você decidir usá-lo, relate quaisquer pr could not get file %1 from local DB não foi possível obter o arquivo %1 do BD local + + + + + Could not get file %1 from local DB + Não foi possível obter de arquivo %1 do BD local + @@ -4799,16 +4795,16 @@ Este é um novo modo experimental. Se você decidir usá-lo, relate quaisquer pr Wrong HTTP code returned by server. Expected 201, but received "%1 %2". Código HTTP errado retornado pelo servidor. 201 esperado, mas recebeu "%1 %2". - - - Could not get file %1 from local DB - Não foi possível obter de arquivo %1 do BD local - could not get file %1 from local DB Não foi possível excluir o registro de arquivo %1 do BD local + + + Could not get file %1 from local DB + Não foi possível obter de arquivo %1 do BD local + Could not delete file record %1 from local DB @@ -5057,7 +5053,7 @@ Este é um novo modo experimental. Se você decidir usá-lo, relate quaisquer pr OCC::ShareManager - + Error Erro @@ -5065,17 +5061,17 @@ Este é um novo modo experimental. Se você decidir usá-lo, relate quaisquer pr OCC::ShareModel - + %1 days %1 dias - + 1 day 1 dia - + Today Hoje @@ -5105,7 +5101,7 @@ Este é um novo modo experimental. Se você decidir usá-lo, relate quaisquer pr Secure file drop - + Could not find local folder for %1 Não foi possível encontrar a pasta local para %1 @@ -5228,11 +5224,6 @@ Servidor respondeu com erro: %2 Resharing this folder is not allowed Compartilhar de novo esta pasta não é permitido - - - Copy internal link - Copiar link interno - Copy secure file drop link @@ -5244,6 +5235,11 @@ Servidor respondeu com erro: %2 Copy public link Copiar link público + + + Copy internal link + Copiar link interno + Copy secure filedrop link @@ -5275,16 +5271,16 @@ Servidor respondeu com erro: %2 remaining time before lock expires Expira em 1% minutosExpira em 1% minutosExpira em 1% minutos - - - Open in browser - Abrir no navegador - Edit Editar + + + Open in browser + Abrir no navegador + Resolve conflict … @@ -5817,10 +5813,10 @@ Servidor respondeu com erro: %2 - - - - + + + + Error updating metadata for a folder %1 Erro ao atualizar os metadados de uma pasta %1 @@ -5840,7 +5836,7 @@ Servidor respondeu com erro: %2 Não foi possível adicionar ou remover o utilizador %1 para acessar à pasta %2 - + Failed to unlock a folder. Falha ao desbloquear uma pasta. @@ -5858,7 +5854,7 @@ Servidor respondeu com erro: %2 - + %1 notifications %1 notificações @@ -5874,17 +5870,17 @@ Servidor respondeu com erro: %2 Resolver conflito - + Rename file Renomear arquivo - + Open Nextcloud Assistant in browser Abra o Nextcloud Assistant no navegador - + Open Nextcloud Talk in browser Abra o Nextcloud Talk no navegador @@ -6018,29 +6014,19 @@ Servidor respondeu com erro: %2 - The Virtual filesystem feature does not support a drive as sync root - + The Virtual filesystem feature requires a NTFS file system, %1 is using %2 + O recurso de sistema de arquivos virtual requer um sistema de arquivos NTFS, %1 está usando %2 Please choose a different location. %1 isn't a NTFS file system. It doesn't support virtual files. - - - The Virtual filesystem feature requires a NTFS file system, %1 is using %2 - O recurso de sistema de arquivos virtual requer um sistema de arquivos NTFS, %1 está usando %2 - Please choose a different location. %1 is a network drive. It doesn't support virtual files. - - - The Virtual filesystem feature is not supported on network drives - - OCC::VfsDownloadErrorDialog @@ -6180,12 +6166,12 @@ Servidor respondeu com erro: %2 O servidor na conta %1 executa uma versão não suportada %2. Usar este cliente com versões de servidor não suportadas não foi testado e é potencialmente perigoso. Prossiga por sua conta e risco. - + Terms of service Termos de Serviço - + 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. Sua conta %1 exige que você aceite os termos de serviço do seu servidor. Você será redirecionado para %2 para reconhecer que leu e concorda com ele. @@ -6261,23 +6247,23 @@ Servidor respondeu com erro: %2 Nenhuma pasta de sincronização configurada - + %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: a sincronização está em execução. - + macOS VFS for %1: Last sync was successful. macOS VFS para %1: a última sincronização foi bem-sucedida. - + macOS VFS for %1: A problem was encountered. macOS VFS para %1: foi encontrado um problema. @@ -6723,7 +6709,7 @@ Servidor respondeu com erro: %2 Pesquisar usuários ou grupos… - + Sharing is not available for this folder O compartilhamento não está disponível para esta pasta @@ -7134,11 +7120,6 @@ Servidor respondeu com erro: %2 downloading baixando - - - Downloading - Baixando - uploading @@ -7146,8 +7127,8 @@ Servidor respondeu com erro: %2 - Uploading - Enviando + Downloading + Baixando @@ -7156,8 +7137,8 @@ Servidor respondeu com erro: %2 - Deleting - Excluindo + Uploading + Enviando @@ -7165,9 +7146,9 @@ Servidor respondeu com erro: %2 movendo - - Moving - Movendo + + Deleting + Excluindo @@ -7176,26 +7157,31 @@ Servidor respondeu com erro: %2 - Ignoring - Ignorando + Moving + Movendo error erro + + + Ignoring + Ignorando + updating local metadata atualizando metadados locais - + Updating local metadata Atualizando metadados locais - + Updating local virtual files metadata Atualizando metadados de arquivos virtuais locais @@ -7354,19 +7340,6 @@ Servidor respondeu com erro: %2 Limpar menu de mensagem de status - - OCC::FormatWarningsWizardPage - - - <b>Warning:</b> %1 - <b>Alerta:</b> %1 - - - - <b>Warning:</b> - <b>Alerta:</b> - - OCC::AbstractPropagateRemoteDeleteEncrypted @@ -7380,6 +7353,19 @@ Servidor respondeu com erro: %2 "%1 Falha ao desbloquear a pasta criptografada %2". + + OCC::FormatWarningsWizardPage + + + <b>Warning:</b> %1 + <b>Alerta:</b> %1 + + + + <b>Warning:</b> + <b>Alerta:</b> + + OCC::OAuth diff --git a/translations/client_ro.ts b/translations/client_ro.ts index e1b8f55c24df3..8c97099aa4fe0 100644 --- a/translations/client_ro.ts +++ b/translations/client_ro.ts @@ -172,13 +172,13 @@ - + Resume sync for all - + Pause sync for all @@ -193,32 +193,32 @@ - + Settings - + Exit - + Current account avatar - + Current account status is online - + Current account status is do not disturb - + Account switcher and settings menu @@ -307,17 +307,17 @@ FileProviderEvictionDialog - + Evict materialised files - + Materialised items - + Reload @@ -493,17 +493,17 @@ MainWindow - + Nextcloud desktop main dialog - + Unified search results list - + New activities @@ -553,13 +553,13 @@ Should an account import be attempted? - + %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? @@ -572,12 +572,12 @@ Should the account be imported? - + Import - + Skip @@ -672,12 +672,12 @@ Should the account be imported? Criptează dosarul - + 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> @@ -708,17 +708,17 @@ Should the account be imported? Atenție - + 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 @@ -973,7 +973,7 @@ Această acțiune va opri toate sincronizările în derulare din acest moment.Nu există nici-o conexiune către %1 la %2. - + Unable to connect to %1. @@ -983,7 +983,7 @@ Această acțiune va opri toate sincronizările în derulare din acest moment.Eroare de configurare a serverulu: %1 la %2. - + You need to accept the terms of service @@ -1013,7 +1013,7 @@ Această acțiune va opri toate sincronizările în derulare din acest moment.Există dosare ce nu au fost sinscronizate deoarece acestea sunt prea mari sau se află pe stocarea externă: - + There are folders that have grown in size beyond %1MB: %2 @@ -1215,34 +1215,39 @@ Această acțiune va opri toate sincronizările în derulare din acest moment.Continuare - + + Quit %1 + Ieșire %1 + + + %1 accounts number of accounts imported - + 1 account 1 cont - + %1 folders number of folders imported 1 foldere - + 1 folder 1 folder - + Legacy import Import mostenit - + Imported %1 and %2 from a legacy desktop client. %3 number of accounts and folders imported. list of users. @@ -1258,11 +1263,6 @@ Această acțiune va opri toate sincronizările în derulare din acest moment.There was an error while accessing the configuration file at %1. Please make sure the file can be accessed by your system account. - - - Quit %1 - Ieșire %1 - OCC::AuthenticationDialog @@ -1727,13 +1727,13 @@ Această acțiune va opri toate sincronizările în derulare din acest moment.Eroare de server: PROPFIND reply is not XML formatted! - - + + Encrypted metadata setup error! - + Encrypted metadata setup error: initial signature from server is empty. @@ -2287,28 +2287,28 @@ If this was an accident and you decide to keep your files, they will be re-synce Păstrează fișierele - + 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? @@ -2336,41 +2336,41 @@ Acest lucru înseamnă că aplicația de sincronizare ar putea să nu încarce %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. 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 @@ -2441,32 +2441,32 @@ Alternatively, you can restore all deleted files by downloading them from the se Se pregătește sincronizarea. - + 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 @@ -2510,16 +2510,6 @@ Alternatively, you can restore all deleted files by downloading them from the se No valid folder selected! Nu este selectat un dosar valid! - - - The folder %1 is used in a folder sync connection! - - - - - Please choose a different location. The selected folder isn't valid. - - The selected path does not exist! @@ -2530,17 +2520,37 @@ Alternatively, you can restore all deleted files by downloading them from the se The selected path is not a folder! Calea selectaă nu este un dosar! + + + You have no permission to write to the selected folder! + Nu ai permisiunea de a scrie în dosarul selectat! + + + + The local folder %1 already contains a folder used in a folder sync connection. Please pick another one! + Dosarul local %1 conține deja un dosar folosit pentru sincronizare. Vă rugăm să alegeți un dosar diferit! + + + + The local folder %1 is already contained in a folder used in a folder sync connection. Please pick another one! + Dosarul local %1 conține deja un dosar folosit pentru sincronizare. Vă rugăm să alegeți un dosar diferit! + + + + There is already a sync from the server to this local folder. Please pick another local folder! + Deja există un dosar de sincronizare de la acest sever către acest server. Vă rugăm să selectați un dosar local diferit! + + + + 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. - - - You have no permission to write to the selected folder! - Nu ai permisiunea de a scrie în dosarul selectat! - Please choose a different location. The path %1 doesn't exist. @@ -2558,26 +2568,11 @@ Alternatively, you can restore all deleted files by downloading them from the se folder location - - - The local folder %1 already contains a folder used in a folder sync connection. Please pick another one! - Dosarul local %1 conține deja un dosar folosit pentru sincronizare. Vă rugăm să alegeți un dosar diferit! - - - - The local folder %1 is already contained in a folder used in a folder sync connection. Please pick another one! - Dosarul local %1 conține deja un dosar folosit pentru sincronizare. Vă rugăm să alegeți un dosar diferit! - Please choose a different location. %1 is already contained in a folder used as a sync folder. - - - There is already a sync from the server to this local folder. Please pick another local folder! - Deja există un dosar de sincronizare de la acest sever către acest server. Vă rugăm să selectați un dosar local diferit! - Please choose a different location. %1 is already being used as a sync folder for %2. @@ -2585,7 +2580,7 @@ Alternatively, you can restore all deleted files by downloading them from the se - + 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. @@ -2690,12 +2685,12 @@ For advanced users: this issue might be related to multiple sync database files Se reconciliază schimbările - + 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'" @@ -2713,7 +2708,7 @@ For advanced users: this issue might be related to multiple sync database files , - + Download %1/s Example text: "Download 24Kb/s" (%1 is replaced by 24Kb (translated)) @@ -2730,7 +2725,7 @@ For advanced users: this issue might be related to multiple sync database files ↓ %1/s - + Upload %1/s Example text: "Upload 24Kb/s" (%1 is replaced by 24Kb (translated)) @@ -2781,12 +2776,12 @@ For advanced users: this issue might be related to multiple sync database files fișier %1 din %2 - + File %1 of %2 - + About to start syncing @@ -3152,7 +3147,7 @@ For advanced users: this issue might be related to multiple sync database files Notificări ale serverului care necesită atenție. - + Show chat notification dialogs. @@ -3191,17 +3186,17 @@ Note that this selects only what pool upgrades are taken from, and that there ar - + daily - + enterprise - + - beta: contains versions with new features that may not be tested thoroughly - daily: contains versions created daily only for testing and development @@ -3210,7 +3205,7 @@ 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. @@ -3218,12 +3213,12 @@ 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 @@ -4261,30 +4256,30 @@ This is a new, experimental mode. If you decide to use it, please report any iss - + 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. @@ -4339,22 +4334,22 @@ This is a new, experimental mode. If you decide to use it, please report any iss - + 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). @@ -4389,7 +4384,7 @@ This is a new, experimental mode. If you decide to use it, please report any iss - + Could not upload file, because it is open in "%1". @@ -4472,18 +4467,18 @@ This is a new, experimental mode. If you decide to use it, please report any iss - - - - - - + + + + + + The folder %1 cannot be made read-only: %2 - - + + unknown exception @@ -4657,12 +4652,6 @@ This is a new, experimental mode. If you decide to use it, please report any iss File %1 downloaded but it resulted in a local file name clash! - - - - Could not get file %1 from local DB - - @@ -4670,6 +4659,13 @@ This is a new, experimental mode. If you decide to use it, please report any iss could not get file %1 from local DB + + + + + Could not get file %1 from local DB + + @@ -4771,13 +4767,13 @@ This is a new, experimental mode. If you decide to use it, please report any iss - - Could not get file %1 from local DB + + could not get file %1 from local DB - - could not get file %1 from local DB + + Could not get file %1 from local DB @@ -5028,7 +5024,7 @@ This is a new, experimental mode. If you decide to use it, please report any iss OCC::ShareManager - + Error @@ -5036,17 +5032,17 @@ This is a new, experimental mode. If you decide to use it, please report any iss OCC::ShareModel - + %1 days - + 1 day - + Today @@ -5076,7 +5072,7 @@ This is a new, experimental mode. If you decide to use it, please report any iss - + Could not find local folder for %1 @@ -5197,11 +5193,6 @@ Server replied with error: %2 Resharing this folder is not allowed - - - Copy internal link - Copiază linkul intern - Copy secure file drop link @@ -5213,6 +5204,11 @@ Server replied with error: %2 Copy public link Copiză link public + + + Copy internal link + Copiază linkul intern + Copy secure filedrop link @@ -5244,16 +5240,16 @@ Server replied with error: %2 remaining time before lock expires - - - Open in browser - Deschide în Browser - Edit + + + Open in browser + Deschide în Browser + Resolve conflict … @@ -5784,10 +5780,10 @@ Server replied with error: %2 - - - - + + + + Error updating metadata for a folder %1 @@ -5807,7 +5803,7 @@ Server replied with error: %2 - + Failed to unlock a folder. @@ -5825,7 +5821,7 @@ Server replied with error: %2 - + %1 notifications @@ -5841,17 +5837,17 @@ Server replied with error: %2 - + Rename file - + Open Nextcloud Assistant in browser - + Open Nextcloud Talk in browser @@ -5985,7 +5981,7 @@ Server replied with error: %2 - The Virtual filesystem feature does not support a drive as sync root + The Virtual filesystem feature requires a NTFS file system, %1 is using %2 @@ -5993,21 +5989,11 @@ Server replied with error: %2 Please choose a different location. %1 isn't a NTFS file system. It doesn't support virtual files. - - - The Virtual filesystem feature requires a NTFS file system, %1 is using %2 - - Please choose a different location. %1 is a network drive. It doesn't support virtual files. - - - The Virtual filesystem feature is not supported on network drives - - OCC::VfsDownloadErrorDialog @@ -6147,12 +6133,12 @@ Server replied with error: %2 - + 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. @@ -6228,23 +6214,23 @@ Server replied with error: %2 - + %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. @@ -6690,7 +6676,7 @@ Server replied with error: %2 - + Sharing is not available for this folder @@ -7101,11 +7087,6 @@ Server replied with error: %2 downloading se descarcă - - - Downloading - - uploading @@ -7113,7 +7094,7 @@ Server replied with error: %2 - Uploading + Downloading @@ -7123,7 +7104,7 @@ Server replied with error: %2 - Deleting + Uploading @@ -7132,8 +7113,8 @@ Server replied with error: %2 se mută - - Moving + + Deleting @@ -7143,7 +7124,7 @@ Server replied with error: %2 - Ignoring + Moving @@ -7151,18 +7132,23 @@ Server replied with error: %2 error eroare + + + Ignoring + + updating local metadata actualizare metadata locală - + Updating local metadata - + Updating local virtual files metadata @@ -7321,19 +7307,6 @@ Server replied with error: %2 - - OCC::FormatWarningsWizardPage - - - <b>Warning:</b> %1 - <b>Atenție</b> %1 - - - - <b>Warning:</b> - <b>Atenție:</b> - - OCC::AbstractPropagateRemoteDeleteEncrypted @@ -7347,6 +7320,19 @@ Server replied with error: %2 "%1 Nu s-a putut debloca dosarul criptat %2". + + OCC::FormatWarningsWizardPage + + + <b>Warning:</b> %1 + <b>Atenție</b> %1 + + + + <b>Warning:</b> + <b>Atenție:</b> + + OCC::OAuth diff --git a/translations/client_ru.ts b/translations/client_ru.ts index 5e81a429aad4a..0a06b42379062 100644 --- a/translations/client_ru.ts +++ b/translations/client_ru.ts @@ -172,13 +172,13 @@ - + Resume sync for all Возобновить синхронизацию - + Pause sync for all Приостановить синхронизацию @@ -193,32 +193,32 @@ Создать учётную запись - + Settings Настройки - + Exit Выйти - + Current account avatar Текущее изображение учётной записи - + Current account status is online Текущий статус пользователя: в сети - + Current account status is do not disturb Текущий статус пользователя: не беспокоить - + Account switcher and settings menu Переключение уч. записей и настройки @@ -307,17 +307,17 @@ FileProviderEvictionDialog - + Evict materialised files Удалить локальные копии файлов - + Materialised items Локальные копии - + Reload Перезагрузить @@ -493,17 +493,17 @@ MainWindow - + Nextcloud desktop main dialog Основное окно Nextcloud - + Unified search results list Единый список результатов поиска - + New activities Новые события @@ -553,14 +553,14 @@ Should an account import be attempted? Найдена существующая конфигурация из старой версии клиента для ПК. Следует ли попытаться импортировать учётную запись? - + %1 accounts were detected from a legacy desktop client. Should the accounts be imported? Обнаружено несколько (%1) учётные записи, созданные в устаревшей версии приложения. Импортировать эти учётные записи? - + 1 account was detected from a legacy desktop client. Should the account be imported? Обнаружена учётная запись, созданная в устаревшей версии приложения. @@ -574,12 +574,12 @@ Should the account be imported? Импорт из старой версии - + Import Импортировать - + Skip Пропустить @@ -674,12 +674,12 @@ Should the account be imported? Зашифровать папку - + 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> Это действие приведёт к шифрованию папки и всех находящихся в ней файлов. Эти файлы станут недоступными без использования мнемофразы шифрования. @@ -711,17 +711,17 @@ Should the account be imported? Предупреждение - + 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 При синхронизации папки произошла ошибка. Зашифровать папку станет возможно после её успешной синхронизации. @@ -976,7 +976,7 @@ This action will abort any currently running synchronization. Нет соединения с %1 в %2. - + Unable to connect to %1. Не удалось подключиться к %1. @@ -986,7 +986,7 @@ This action will abort any currently running synchronization. Ошибка конфигурации сервера: %1: %2. - + You need to accept the terms of service Вам необходимо принять условия предоставления услуг @@ -1016,7 +1016,7 @@ This action will abort any currently running synchronization. Есть папки, которые не были синхронизированы, так как их размер превышает установленное ограничение или они являются внешними хранилищами: - + There are folders that have grown in size beyond %1MB: %2 Обнаружено %2 папки, размер которых превысил %1 МБ @@ -1218,34 +1218,39 @@ This action will abort any currently running synchronization. Продолжить - + + Quit %1 + Выйти из %1 + + + %1 accounts number of accounts imported учётных записей: %1 - + 1 account одна учётная запись - + %1 folders number of folders imported папок: %1 - + 1 folder одна папка - + Legacy import Импорт из устаревшей версии - + Imported %1 and %2 from a legacy desktop client. %3 number of accounts and folders imported. list of users. @@ -1262,11 +1267,6 @@ This action will abort any currently running synchronization. There was an error while accessing the configuration file at %1. Please make sure the file can be accessed by your system account. Ошибка при обращении к файлу конфигурации «%1», убедитесь, что файл доступен для системной учётной записи. - - - Quit %1 - Выйти из %1 - OCC::AuthenticationDialog @@ -1731,13 +1731,13 @@ This action will abort any currently running synchronization. Ошибка сервера: ответ PROPFIND не в формате XML. - - + + Encrypted metadata setup error! Ошибка настройки зашифрованных метаданных! - + Encrypted metadata setup error: initial signature from server is empty. Ошибка настройки зашифрованных метаданных: первоначальная подпись с сервера пуста. @@ -2293,29 +2293,29 @@ If this was an accident and you decide to keep your files, they will be re-synce Сохранить файлы - + A folder has surpassed the set folder size limit of %1MB: %2. %3 Размер папки превысил заданное ограничение в %1 МБ: %2. %3 - + Keep syncing Продолжить синхронизировать - + Stop syncing Отключить синхронизацию - + The folder %1 has surpassed the set folder size limit of %2MB. Размер папки «%1» превысил заданное ограничение в %2 МБ. - + Would you like to stop syncing this folder? Отключить синхронизацию этой папки? @@ -2342,12 +2342,12 @@ 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" Ошибка загрузки виртуального файла с кодом "%1", статусом "%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. @@ -2356,29 +2356,29 @@ Alternatively, you can restore all deleted files by uploading from '%1&apos В качестве альтернативы вы можете восстановить все удаленные файлы, отправив их из папки '%1' на сервер. - + 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. Было удалено большое количество файлов из вашей локальной папки "%1". Пожалуйста, подтвердите, если хотите продолжить удаление. В качестве альтернативы вы можете восстановить все удаленные файлы, загрузив их с сервера. - + Remove all files? Удалить все файлы? - + Proceed with Deletion Продолжить удаление - + Restore Files to Server Восстановить файлы на сервер - + Restore Files from Server Восстановить файлы с сервера @@ -2449,32 +2449,32 @@ Alternatively, you can restore all deleted files by downloading them from the se Подготовка к синхронизации. - + Syncing %1 of %2 (A few seconds left) Синхронизация %1 из %2 (несколько секунд назад) - + Syncing %1 of %2 (%3 left) Синхронизация %1 из %2 (осталось %3) - + Syncing %1 of %2 Синхронизация %1 из %2 - + Syncing %1 (A few seconds left) Синхронизация %1 (несколько секунд назад) - + Syncing %1 (%2 left) Синхронизация %1 (осталось %2) - + Syncing %1 Синхронизация %1 @@ -2518,16 +2518,6 @@ Alternatively, you can restore all deleted files by downloading them from the se No valid folder selected! Не выбрана допустимая папка. - - - The folder %1 is used in a folder sync connection! - Папка %1 используется в соединении папки синхронизации - - - - Please choose a different location. The selected folder isn't valid. - - The selected path does not exist! @@ -2538,17 +2528,37 @@ Alternatively, you can restore all deleted files by downloading them from the se The selected path is not a folder! Выбранный путь не является папкой. + + + You have no permission to write to the selected folder! + Отсутствуют права записи в выбранную папку. + + + + The local folder %1 already contains a folder used in a folder sync connection. Please pick another one! + Локальная папка «%1» уже содержит вложенную папку, которая синхронизируется с сервером. Выберите другую папку. + + + + The local folder %1 is already contained in a folder used in a folder sync connection. Please pick another one! + Локальная папка «%1» является вложенной в папку, которая уже синхронизируется с сервером. Выберите другую папку. + + + + There is already a sync from the server to this local folder. Please pick another local folder! + Синхронизация этой локальной папки с сервером уже настроена. Выберите другую локальную папку. + + + + 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. - - - You have no permission to write to the selected folder! - Отсутствуют права записи в выбранную папку. - Please choose a different location. The path %1 doesn't exist. @@ -2566,26 +2576,11 @@ Alternatively, you can restore all deleted files by downloading them from the se folder location - - - The local folder %1 already contains a folder used in a folder sync connection. Please pick another one! - Локальная папка «%1» уже содержит вложенную папку, которая синхронизируется с сервером. Выберите другую папку. - - - - The local folder %1 is already contained in a folder used in a folder sync connection. Please pick another one! - Локальная папка «%1» является вложенной в папку, которая уже синхронизируется с сервером. Выберите другую папку. - Please choose a different location. %1 is already contained in a folder used as a sync folder. - - - There is already a sync from the server to this local folder. Please pick another local folder! - Синхронизация этой локальной папки с сервером уже настроена. Выберите другую локальную папку. - Please choose a different location. %1 is already being used as a sync folder for %2. @@ -2593,7 +2588,7 @@ Alternatively, you can restore all deleted files by downloading them from the se - + 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. @@ -2698,12 +2693,12 @@ For advanced users: this issue might be related to multiple sync database files Согласование изменений - + 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'" %1 %2 ... @@ -2721,7 +2716,7 @@ For advanced users: this issue might be related to multiple sync database files , - + Download %1/s Example text: "Download 24Kb/s" (%1 is replaced by 24Kb (translated)) Скачать %1/s @@ -2738,7 +2733,7 @@ For advanced users: this issue might be related to multiple sync database files ↓ %1/с - + Upload %1/s Example text: "Upload 24Kb/s" (%1 is replaced by 24Kb (translated)) Загрузить %1/s @@ -2789,12 +2784,12 @@ For advanced users: this issue might be related to multiple sync database files %1 из %2 файлов(а) - + File %1 of %2 Файл %1 из %2 - + About to start syncing Вот-вот начнется синхронизация @@ -3160,7 +3155,7 @@ For advanced users: this issue might be related to multiple sync database files Требующие внимания уведомления, полученные с сервера. - + Show chat notification dialogs. Показывать диалоговые окна уведомлений в чатах. @@ -3201,17 +3196,17 @@ Note that this selects only what pool upgrades are taken from, and that there ar Обратите внимание, что смена канала возможна переход только при увеличения внутренней версии приложения: переход со стабильного на бета-канал происходит моментально, а переход с бета-канала на стабильный потребует времени, пока стабильная версия станет новее установленной бета-версии. - + daily Ежедневно - + enterprise предприятие - + - beta: contains versions with new features that may not be tested thoroughly - daily: contains versions created daily only for testing and development @@ -3223,7 +3218,7 @@ 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. @@ -3233,12 +3228,12 @@ 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 @@ -4290,30 +4285,30 @@ This is a new, experimental mode. If you decide to use it, please report any iss Имя файла является зарезервированным внутренним именем в используемой файловой системе. - + 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 содержит в имени символ «%2», который не поддерживается используемой файловой системой. - + %1 name contains at least one invalid character %1 содержит как минимум один некорретный символ. - + %1 name is a reserved name on this file system. %1 использует имя, являющее в используемой файловой системе служебным зарезервированным именем. @@ -4368,22 +4363,22 @@ This is a new, experimental mode. If you decide to use it, please report any iss Имя файла внесено в чёрный список на сервере. - + Reason: the entire filename is forbidden. Причина: полное имя файла запрещено. - + Reason: the filename has a forbidden base name (filename start). Причина: имя файла содержит запрещенное базовое имя (начало имени файла). - + Reason: the file has a forbidden extension (.%1). Причина: файл имеет запрещенное расширение (.%1) - + Reason: the filename contains a forbidden character (%1). Причина: имя файла содержит запрещенный символ (%1). @@ -4418,7 +4413,7 @@ This is a new, experimental mode. If you decide to use it, please report any iss Синхронизация невозможна по причине некорректного времени изменения файла - + Could not upload file, because it is open in "%1". Не удалось загрузить файл, т.к. он открыт в "%1". @@ -4501,18 +4496,18 @@ This is a new, experimental mode. If you decide to use it, please report any iss Ошибка обновления метаданных из-за недопустимого времени модификации - - - - - - + + + + + + The folder %1 cannot be made read-only: %2 Папка %1 не может быть только для чтения: %2 - - + + unknown exception Неизвестное исключение @@ -4686,12 +4681,6 @@ This is a new, experimental mode. If you decide to use it, please report any iss File %1 downloaded but it resulted in a local file name clash! Файл «%1» загружен, но это привело к конфликту имен локальных файлов. - - - - Could not get file %1 from local DB - Не удалось получить файл %1 из локальной базы данных - @@ -4699,6 +4688,13 @@ This is a new, experimental mode. If you decide to use it, please report any iss could not get file %1 from local DB не удалось получить файл %1 из локальной базы данных + + + + + Could not get file %1 from local DB + Не удалось получить файл %1 из локальной базы данных + @@ -4799,16 +4795,16 @@ 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". Сервер ответил неправильным кодом HTTP. Ожидался 201, но получен «%1 %2». - - - Could not get file %1 from local DB - Не удалось получить файл %1 из локальной базы данных - could not get file %1 from local DB не удалось получить файл %1 из локальной базы данных + + + Could not get file %1 from local DB + Не удалось получить файл %1 из локальной базы данных + Could not delete file record %1 from local DB @@ -5057,7 +5053,7 @@ This is a new, experimental mode. If you decide to use it, please report any iss OCC::ShareManager - + Error Ошибка @@ -5065,17 +5061,17 @@ This is a new, experimental mode. If you decide to use it, please report any iss OCC::ShareModel - + %1 days %1 дней - + 1 day 1 день - + Today Сегодня @@ -5105,7 +5101,7 @@ This is a new, experimental mode. If you decide to use it, please report any iss Безопасное удаление файла - + Could not find local folder for %1 Не удалось найти локальную папку %1 @@ -5228,11 +5224,6 @@ Server replied with error: %2 Resharing this folder is not allowed Повторная публикация этой папки не разрешена - - - Copy internal link - Скопировать внутреннюю ссылку - Copy secure file drop link @@ -5244,6 +5235,11 @@ Server replied with error: %2 Copy public link Скопировать общедоступную ссылку + + + Copy internal link + Скопировать внутреннюю ссылку + Copy secure filedrop link @@ -5275,16 +5271,16 @@ Server replied with error: %2 remaining time before lock expires Блокировка будет снята через %1 минутуБлокировка будет снята через %1 минутыБлокировка будет снята через %1 минутБлокировка будет снята через %1 минуты - - - Open in browser - Открыть в браузере - Edit Редактировать + + + Open in browser + Открыть в браузере + Resolve conflict … @@ -5817,10 +5813,10 @@ Server replied with error: %2 - - - - + + + + Error updating metadata for a folder %1 Ошибка обновления метаданных папки «%1» @@ -5840,7 +5836,7 @@ Server replied with error: %2 Не удалось предоставить или закрыть пользователю %1 доступ к папке «%2» - + Failed to unlock a folder. Не удалось разблокировать папку. @@ -5858,7 +5854,7 @@ Server replied with error: %2 - + %1 notifications %1 уведомлений @@ -5874,17 +5870,17 @@ Server replied with error: %2 Разрешить конфликт - + Rename file Переименовать файл - + Open Nextcloud Assistant in browser Открыть приложение Nextcloud Assistant в браузере - + Open Nextcloud Talk in browser Открыть приложение Nextcloud Talk в браузере @@ -6018,29 +6014,19 @@ Server replied with error: %2 - The Virtual filesystem feature does not support a drive as sync root - Виртуальная файловая система не поддерживает диск в качестве корня синхронизации + The Virtual filesystem feature requires a NTFS file system, %1 is using %2 + Для использования виртуальной файловой системы требуется NTFS, %1 использует %2 Please choose a different location. %1 isn't a NTFS file system. It doesn't support virtual files. - - - The Virtual filesystem feature requires a NTFS file system, %1 is using %2 - Для использования виртуальной файловой системы требуется NTFS, %1 использует %2 - Please choose a different location. %1 is a network drive. It doesn't support virtual files. - - - The Virtual filesystem feature is not supported on network drives - Виртуальная файловая система не поддерживается на сетевых дисках - OCC::VfsDownloadErrorDialog @@ -6180,12 +6166,12 @@ Server replied with error: %2 На сервере учётной записи «%1» используется неподдерживаемая версия %2. Использование этого клиента совместно с неподдерживаемым сервером не тестировалось и может быть небезопасным. Продолжайте на свой страх и риск. - + 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 для ознакомления и подтверждения согласия с ними. @@ -6261,23 +6247,23 @@ Server replied with error: %2 Не настроено ни одного каталога для синхронизации - + %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. mac OS VFS для %1: Синхронизация запущена. - + macOS VFS for %1: Last sync was successful. mac OS VFS для %1: Синхронизация прошла успешно. - + macOS VFS for %1: A problem was encountered. macOS VFS для %1: Возникла проблема. @@ -6723,7 +6709,7 @@ Server replied with error: %2 Поиск пользователя или группы… - + Sharing is not available for this folder Публикация этой папки невозможна @@ -7134,11 +7120,6 @@ Server replied with error: %2 downloading Получение с сервера - - - Downloading - Загрузка - uploading @@ -7146,7 +7127,7 @@ Server replied with error: %2 - Uploading + Downloading Загрузка @@ -7156,8 +7137,8 @@ Server replied with error: %2 - Deleting - Удаление + Uploading + Загрузка @@ -7165,9 +7146,9 @@ Server replied with error: %2 перемещение - - Moving - Перемещение + + Deleting + Удаление @@ -7176,26 +7157,31 @@ Server replied with error: %2 - Ignoring - Игнорирование + Moving + Перемещение error ошибка + + + Ignoring + Игнорирование + updating local metadata обновление локальных метаданных - + Updating local metadata Обновление локальных метаданных - + Updating local virtual files metadata Обновление метаданных локальных виртуальных файлов @@ -7354,19 +7340,6 @@ Server replied with error: %2 Меню отчистки статуса сообщения - - OCC::FormatWarningsWizardPage - - - <b>Warning:</b> %1 - <b>Предупреждение:</b> %1 - - - - <b>Warning:</b> - <b>Предупреждение:</b> - - OCC::AbstractPropagateRemoteDeleteEncrypted @@ -7380,6 +7353,19 @@ Server replied with error: %2 %1 не удалось разблокировать зашифрованную папку «%2». + + OCC::FormatWarningsWizardPage + + + <b>Warning:</b> %1 + <b>Предупреждение:</b> %1 + + + + <b>Warning:</b> + <b>Предупреждение:</b> + + OCC::OAuth diff --git a/translations/client_sc.ts b/translations/client_sc.ts index 18980230eb8ad..173537e362381 100644 --- a/translations/client_sc.ts +++ b/translations/client_sc.ts @@ -172,13 +172,13 @@ - + Resume sync for all - + Pause sync for all @@ -193,32 +193,32 @@ - + Settings - + Exit - + Current account avatar - + Current account status is online - + Current account status is do not disturb - + Account switcher and settings menu @@ -307,17 +307,17 @@ FileProviderEvictionDialog - + Evict materialised files - + Materialised items - + Reload Torra a carrigare @@ -493,17 +493,17 @@ MainWindow - + Nextcloud desktop main dialog - + Unified search results list - + New activities Atividades noas @@ -553,13 +553,13 @@ Should an account import be attempted? - + %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? @@ -572,12 +572,12 @@ Should the account be imported? - + Import - + Skip @@ -672,12 +672,12 @@ Should the account be imported? Tzifra sa cartella - + 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> @@ -708,17 +708,17 @@ Should the account be imported? Avisu - + 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 @@ -973,7 +973,7 @@ Custa atzione at a firmare cale si siat sincronizatzione immoe in esecutzione.Peruna connessione a %1 in %2. - + Unable to connect to %1. @@ -983,7 +983,7 @@ Custa atzione at a firmare cale si siat sincronizatzione immoe in esecutzione.Ddoe at àpidu un'errore in su serbidore: %1 in %2. - + You need to accept the terms of service @@ -1013,7 +1013,7 @@ Custa atzione at a firmare cale si siat sincronizatzione immoe in esecutzione.Ddoe at cartellas chi non sunt istadas sincronizadas ca sunt tropu mannas o memòrias de archiviatziones de foras: - + There are folders that have grown in size beyond %1MB: %2 @@ -1215,34 +1215,39 @@ Custa atzione at a firmare cale si siat sincronizatzione immoe in esecutzione.Sighi - + + Quit %1 + Essi·nche %1 + + + %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. @@ -1258,11 +1263,6 @@ Custa atzione at a firmare cale si siat sincronizatzione immoe in esecutzione.There was an error while accessing the configuration file at %1. Please make sure the file can be accessed by your system account. - - - Quit %1 - Essi·nche %1 - OCC::AuthenticationDialog @@ -1727,13 +1727,13 @@ Custa atzione at a firmare cale si siat sincronizatzione immoe in esecutzione.Errore de su serbidore: sa risposta PROPFIND no est in formadu XML! - - + + Encrypted metadata setup error! - + Encrypted metadata setup error: initial signature from server is empty. @@ -2290,28 +2290,28 @@ Si custu fiat un'errore e detzides de mantènnere is archìvios tuos, custo Mantene is archìvios - + 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? @@ -2339,41 +2339,41 @@ Custu bolet nàrrere chi sa sincronizatzione de su cliente diat pòdere non carr %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. 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 @@ -2444,32 +2444,32 @@ Alternatively, you can restore all deleted files by downloading them from the se Aprontende sa sincronizatzione. - + 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 @@ -2513,16 +2513,6 @@ Alternatively, you can restore all deleted files by downloading them from the se No valid folder selected! Peruna cartella bàlida seletzionada! - - - The folder %1 is used in a folder sync connection! - - - - - Please choose a different location. The selected folder isn't valid. - - The selected path does not exist! @@ -2533,17 +2523,37 @@ Alternatively, you can restore all deleted files by downloading them from the se The selected path is not a folder! Su caminu seletzionadu non b'est!! + + + You have no permission to write to the selected folder! + Non tenes su permissu pro iscrìere in sa cartella seletzionada! + + + + The local folder %1 already contains a folder used in a folder sync connection. Please pick another one! + Sa cartella locale %1 cuntenet giai una cartella impreada in una connessione de sincronizatzione de is cartellas. Seletziona·nde un'àtera! + + + + The local folder %1 is already contained in a folder used in a folder sync connection. Please pick another one! + Sa cartella locala %1 cuntenet giai una cartella impreada in una connessione de sincronizatzione de is cartellas. Seletziona·nde un'àtera! + + + + There is already a sync from the server to this local folder. Please pick another local folder! + Esistet giai una sincronizatzione dae su serbidore a custa cartella locale. Seletziona·nde un'àtera locale! + + + + 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. - - - You have no permission to write to the selected folder! - Non tenes su permissu pro iscrìere in sa cartella seletzionada! - Please choose a different location. The path %1 doesn't exist. @@ -2561,26 +2571,11 @@ Alternatively, you can restore all deleted files by downloading them from the se folder location - - - The local folder %1 already contains a folder used in a folder sync connection. Please pick another one! - Sa cartella locale %1 cuntenet giai una cartella impreada in una connessione de sincronizatzione de is cartellas. Seletziona·nde un'àtera! - - - - The local folder %1 is already contained in a folder used in a folder sync connection. Please pick another one! - Sa cartella locala %1 cuntenet giai una cartella impreada in una connessione de sincronizatzione de is cartellas. Seletziona·nde un'àtera! - Please choose a different location. %1 is already contained in a folder used as a sync folder. - - - There is already a sync from the server to this local folder. Please pick another local folder! - Esistet giai una sincronizatzione dae su serbidore a custa cartella locale. Seletziona·nde un'àtera locale! - Please choose a different location. %1 is already being used as a sync folder for %2. @@ -2588,7 +2583,7 @@ Alternatively, you can restore all deleted files by downloading them from the se - + 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. @@ -2693,12 +2688,12 @@ For advanced users: this issue might be related to multiple sync database files Cuntzìliu torra de is modìficas - + 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'" @@ -2716,7 +2711,7 @@ For advanced users: this issue might be related to multiple sync database files , - + Download %1/s Example text: "Download 24Kb/s" (%1 is replaced by 24Kb (translated)) @@ -2733,7 +2728,7 @@ For advanced users: this issue might be related to multiple sync database files ↓ %1/s - + Upload %1/s Example text: "Upload 24Kb/s" (%1 is replaced by 24Kb (translated)) @@ -2784,12 +2779,12 @@ For advanced users: this issue might be related to multiple sync database files archìviu %1 de %2 - + File %1 of %2 - + About to start syncing @@ -3155,7 +3150,7 @@ For advanced users: this issue might be related to multiple sync database files Serbidore de notìficas chi tocat a ddis dare contu. - + Show chat notification dialogs. @@ -3196,17 +3191,17 @@ Note that this selects only what pool upgrades are taken from, and that there ar Annota chi custu seletzionat isceti dae cale grùstiu prelevare is agiornamentos e chi non ddoe apant downgrade: duncas, a su sòlitu non faghet a torrare deretu dae su canale beta a su canale istàbile e custu cheret nàrrere a isetare una versione istàbile chi siat prus reghente de sa versione beta chi ddoe est immoe. - + daily - + enterprise - + - beta: contains versions with new features that may not be tested thoroughly - daily: contains versions created daily only for testing and development @@ -3215,7 +3210,7 @@ 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. @@ -3223,12 +3218,12 @@ 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 @@ -4278,30 +4273,30 @@ Custa est una modalidade noa, isperimentale. Si detzides de dda impreare, sinnal Su nùmene de s'archìviu est unu nùmene riservadu a custu archìviu de sistema. - + 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. @@ -4356,22 +4351,22 @@ Custa est una modalidade noa, isperimentale. Si detzides de dda impreare, sinnal Su nùmene de s'archìviu est in sa lista niedda de su serbidore. - + 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). @@ -4406,7 +4401,7 @@ Custa est una modalidade noa, isperimentale. Si detzides de dda impreare, sinnal - + Could not upload file, because it is open in "%1". @@ -4489,18 +4484,18 @@ Custa est una modalidade noa, isperimentale. Si detzides de dda impreare, sinnal - - - - - - + + + + + + The folder %1 cannot be made read-only: %2 - - + + unknown exception @@ -4674,12 +4669,6 @@ Custa est una modalidade noa, isperimentale. Si detzides de dda impreare, sinnal File %1 downloaded but it resulted in a local file name clash! - - - - Could not get file %1 from local DB - - @@ -4687,6 +4676,13 @@ Custa est una modalidade noa, isperimentale. Si detzides de dda impreare, sinnal could not get file %1 from local DB + + + + + Could not get file %1 from local DB + + @@ -4788,13 +4784,13 @@ Custa est una modalidade noa, isperimentale. Si detzides de dda impreare, sinnal Còdighe HTTP isballiadu torradu dae su serbidore. Atesu 201, ma retzidu "%1 %2". - - Could not get file %1 from local DB + + could not get file %1 from local DB - - could not get file %1 from local DB + + Could not get file %1 from local DB @@ -5045,7 +5041,7 @@ Custa est una modalidade noa, isperimentale. Si detzides de dda impreare, sinnal OCC::ShareManager - + Error @@ -5053,17 +5049,17 @@ Custa est una modalidade noa, isperimentale. Si detzides de dda impreare, sinnal OCC::ShareModel - + %1 days - + 1 day - + Today @@ -5093,7 +5089,7 @@ Custa est una modalidade noa, isperimentale. Si detzides de dda impreare, sinnal - + Could not find local folder for %1 @@ -5214,11 +5210,6 @@ Server replied with error: %2 Resharing this folder is not allowed Non faghet a torrare a cumpartzire custa cartella - - - Copy internal link - Còpia ligòngiu internu - Copy secure file drop link @@ -5230,6 +5221,11 @@ Server replied with error: %2 Copy public link Còpia ligòngiu pùblicu + + + Copy internal link + Còpia ligòngiu internu + Copy secure filedrop link @@ -5261,16 +5257,16 @@ Server replied with error: %2 remaining time before lock expires - - - Open in browser - Aberi in su navigadore - Edit Modìfica + + + Open in browser + Aberi in su navigadore + Resolve conflict … @@ -5803,10 +5799,10 @@ Server replied with error: %2 - - - - + + + + Error updating metadata for a folder %1 @@ -5826,7 +5822,7 @@ Server replied with error: %2 - + Failed to unlock a folder. @@ -5844,7 +5840,7 @@ Server replied with error: %2 - + %1 notifications @@ -5860,17 +5856,17 @@ Server replied with error: %2 - + Rename file - + Open Nextcloud Assistant in browser - + Open Nextcloud Talk in browser @@ -6004,29 +6000,19 @@ Server replied with error: %2 - The Virtual filesystem feature does not support a drive as sync root - + The Virtual filesystem feature requires a NTFS file system, %1 is using %2 + Sa funtzionalidade de s'archìviu de sistema rechedet unu archìviu de sistema NTFS, %1 est impreende %2 Please choose a different location. %1 isn't a NTFS file system. It doesn't support virtual files. - - - The Virtual filesystem feature requires a NTFS file system, %1 is using %2 - Sa funtzionalidade de s'archìviu de sistema rechedet unu archìviu de sistema NTFS, %1 est impreende %2 - Please choose a different location. %1 is a network drive. It doesn't support virtual files. - - - The Virtual filesystem feature is not supported on network drives - - OCC::VfsDownloadErrorDialog @@ -6166,12 +6152,12 @@ Server replied with error: %2 Su serbidore de su contu %1 esecutat una versione non suportada %2. S'impreu de custu cliente cun versiones non suportadas non est istadu verificadu e podet èssere perigulosu. Sighi a arriscu tuo. - + 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. @@ -6247,23 +6233,23 @@ Server replied with error: %2 Peruna cartella cunfigurada pro sa sincronizatzione - + %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. @@ -6709,7 +6695,7 @@ Server replied with error: %2 - + Sharing is not available for this folder @@ -7120,11 +7106,6 @@ Server replied with error: %2 downloading iscarrighende - - - Downloading - - uploading @@ -7132,7 +7113,7 @@ Server replied with error: %2 - Uploading + Downloading @@ -7142,7 +7123,7 @@ Server replied with error: %2 - Deleting + Uploading @@ -7151,8 +7132,8 @@ Server replied with error: %2 tramudende - - Moving + + Deleting @@ -7162,7 +7143,7 @@ Server replied with error: %2 - Ignoring + Moving @@ -7170,18 +7151,23 @@ Server replied with error: %2 error errore + + + Ignoring + + updating local metadata carrighende metadatos locales - + Updating local metadata - + Updating local virtual files metadata @@ -7340,19 +7326,6 @@ Server replied with error: %2 - - OCC::FormatWarningsWizardPage - - - <b>Warning:</b> %1 - <b>Avisu:</b> %1 - - - - <b>Warning:</b> - <b>Avisu:</b> - - OCC::AbstractPropagateRemoteDeleteEncrypted @@ -7366,6 +7339,19 @@ Server replied with error: %2 "%1 No at fatu a isblocare sa cartella tzifrada %2". + + OCC::FormatWarningsWizardPage + + + <b>Warning:</b> %1 + <b>Avisu:</b> %1 + + + + <b>Warning:</b> + <b>Avisu:</b> + + OCC::OAuth diff --git a/translations/client_sk.ts b/translations/client_sk.ts index 022b6e9efcf38..78342fd6fce53 100644 --- a/translations/client_sk.ts +++ b/translations/client_sk.ts @@ -172,13 +172,13 @@ - + Resume sync for all Pokračovať v synchronizácii pre všetky účty - + Pause sync for all Pozastaviť synchronizáciu pre všetky účty @@ -193,32 +193,32 @@ Pridať nový účet - + Settings Nastavenia - + Exit Ukončiť - + Current account avatar Avatar aktuálneho účtu - + Current account status is online Stav aktuálneho účtu je pripojený - + Current account status is do not disturb Stav aktuálneho účtu je nerušiť - + Account switcher and settings menu Prepínač účtov a menu nastavení @@ -307,17 +307,17 @@ FileProviderEvictionDialog - + Evict materialised files Vypustiť materializované súbory - + Materialised items Zhmotnené položky - + Reload Znovu načítať @@ -493,17 +493,17 @@ MainWindow - + Nextcloud desktop main dialog Hlavné dialógové okno pracovnej plochy Nextcloud - + Unified search results list Jednotný zoznam výsledkov vyhľadávania - + New activities Nové aktivity @@ -554,14 +554,14 @@ Should an account import be attempted? Má sa pokúsiť o import účtu? - + %1 accounts were detected from a legacy desktop client. Should the accounts be imported? %1 účtov bolo zistených z dedikovaného desktopového klienta. Majú sa účty importovať? - + 1 account was detected from a legacy desktop client. Should the account be imported? %1 účet bol zistený z dedikovaného desktopového klienta. @@ -575,12 +575,12 @@ Má sa účet importovať? Starý import - + Import Importovať - + Skip Preskočiť @@ -675,12 +675,12 @@ Má sa účet importovať? Zašifrovať priečinok - + End-to-end Encryption Šifrovanie po celej dĺžke spojenia - + 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> Týmto sa zašifruje adresár a všetky súbory v ňom. Tieto súbory už nebudú prístupné bez vášho šifrovacieho mnemotechnického kľúča. @@ -712,17 +712,17 @@ Má sa účet importovať? Varovanie - + Please wait for the folder to sync before trying to encrypt it. Pred pokusom o šifrovanie počkajte, kým sa adresár zosynchronizuje. - + The folder has a minor sync problem. Encryption of this folder will be possible once it has synced successfully Adresár má menší problém so synchronizáciou. Šifrovanie tohto adresára bude možné po úspešnej synchronizácii - + The folder has a sync error. Encryption of this folder will be possible once it has synced successfully Adresár má chybu synchronizácie. Šifrovanie tohto priečinka bude možné po úspešnej synchronizácii @@ -978,7 +978,7 @@ Táto akcia zruší všetky prebiehajúce synchronizácie. Žiadne pripojenie k %1 na %2. - + Unable to connect to %1. Nepodarilo sa pripojiť k %1. @@ -988,7 +988,7 @@ Táto akcia zruší všetky prebiehajúce synchronizácie. Chyba konfigurácie serveru: %1 na %2. - + You need to accept the terms of service Je potrebné akceptovať zmluvné podmienky @@ -1018,7 +1018,7 @@ Táto akcia zruší všetky prebiehajúce synchronizácie. Niektoré priečinky neboli synchronizované, pretože sú príliš veľké alebo sú na externom úložisku - + There are folders that have grown in size beyond %1MB: %2 Existujú priečinky, ktorých veľkosť presiahla %1 MB: %2 @@ -1220,34 +1220,39 @@ Táto akcia zruší všetky prebiehajúce synchronizácie. Pokračovať - + + Quit %1 + Ukončiť %1 + + + %1 accounts number of accounts imported %1 účty - + 1 account 1 účet - + %1 folders number of folders imported %1 priečinkov - + 1 folder 1 priečinok - + Legacy import Starý import - + Imported %1 and %2 from a legacy desktop client. %3 number of accounts and folders imported. list of users. @@ -1264,11 +1269,6 @@ Táto akcia zruší všetky prebiehajúce synchronizácie. There was an error while accessing the configuration file at %1. Please make sure the file can be accessed by your system account. Pri prístupe ku konfiguračnému súboru na %1 sa vyskytla chyba. Uistite sa, že váš používateľ má prístup k súboru. - - - Quit %1 - Ukončiť %1 - OCC::AuthenticationDialog @@ -1733,13 +1733,13 @@ Táto akcia zruší všetky prebiehajúce synchronizácie. Chyba servera: odpoveď PROPFIND nie je vo formáte XML. - - + + Encrypted metadata setup error! Chyba nastavenia šifrovaných metadát! - + Encrypted metadata setup error: initial signature from server is empty. Chyba nastavenia šifrovaných metadát: počiatočný podpis zo servera je prázdny. @@ -2295,29 +2295,29 @@ Ak to bol omyl a rozhodnete sa tieto súbory ponechať, budú opäť synchronizo Ponechať súbory - + A folder has surpassed the set folder size limit of %1MB: %2. %3 Priečinok prekročil nastavený limit veľkosti priečinka %1 MB: %2. %3 - + Keep syncing Pokračovať v synchronizácií - + Stop syncing Zastaviť synchronizáciu - + The folder %1 has surpassed the set folder size limit of %2MB. Priečinok %1 prekročil nastavený limit veľkosti priečinka %2 MB. - + Would you like to stop syncing this folder? Chcete vypnúť synchronizáciu tohto priečinka? @@ -2345,12 +2345,12 @@ To znamená, že klient synchronizácie nemusí okamžite odovzdať lokálne zme % 1 - + Virtual file download failed with code "%1", status "%2" and error message "%3" Virtuálny súbor sa nepodarilo stiahnuť s kódom "%1", stavom "%2" a chybovou správou "%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. @@ -2359,7 +2359,7 @@ Potvrďte, či chcete pokračovať v tomto odstraňovaní. Prípadne môžete obnoviť všetky vymazané súbory ich nahraním z adresára '%1' na 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. @@ -2368,22 +2368,22 @@ Potvrďte, či chcete pokračovať v tomto odstraňovaní. Prípadne môžete obnoviť všetky odstránené súbory ich stiahnutím zo servera. - + Remove all files? Odstrániť všetky súbory? - + Proceed with Deletion Pokračovať s odstránením - + Restore Files to Server Obnoviť súbory na Serveri - + Restore Files from Server Obnoviť súbory zo Servera @@ -2454,32 +2454,32 @@ Prípadne môžete obnoviť všetky odstránené súbory ich stiahnutím zo serv Príprava na synchronizáciu. - + Syncing %1 of %2 (A few seconds left) Synchronizuje sa %1 z %2 (zostáva pár sekúnd) - + Syncing %1 of %2 (%3 left) Synchronizuje sa %1 z %2 (zostáva %3) - + Syncing %1 of %2 Synchronizuje sa %1 z %2 - + Syncing %1 (A few seconds left) Synchronizuje sa %1 (zostáva pár sekúnd) - + Syncing %1 (%2 left) Synchronizuje sa %1 (zostáva %2) - + Syncing %1 Synchronizuje sa %1 @@ -2523,16 +2523,6 @@ Prípadne môžete obnoviť všetky odstránené súbory ich stiahnutím zo serv No valid folder selected! Nebol zvolený platný priečinok. - - - The folder %1 is used in a folder sync connection! - Adresár %1 sa používa v pripojení na synchronizáciu adresára! - - - - Please choose a different location. The selected folder isn't valid. - - The selected path does not exist! @@ -2543,17 +2533,37 @@ Prípadne môžete obnoviť všetky odstránené súbory ich stiahnutím zo serv The selected path is not a folder! Zvolená cesta nie je priečinok. + + + You have no permission to write to the selected folder! + Nemáte oprávnenia pre zápis do daného priečinka! + + + + The local folder %1 already contains a folder used in a folder sync connection. Please pick another one! + Lokálny priečinok %1  už obsahuje podpriečinok použitý pre synchronizáciu. Vyberte prosím iný priečinok. + + + + The local folder %1 is already contained in a folder used in a folder sync connection. Please pick another one! + Lokálny priečinok %1 už obsahuje podpriečinok použitý pre synchronizáciu. Vyberte prosím iný priečinok. + + + + There is already a sync from the server to this local folder. Please pick another local folder! + Do tohto lokálneho priečinka sa už synchronizuje. Vyberte prosím iný priečinok. + + + + 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. - - - You have no permission to write to the selected folder! - Nemáte oprávnenia pre zápis do daného priečinka! - Please choose a different location. The path %1 doesn't exist. @@ -2571,26 +2581,11 @@ Prípadne môžete obnoviť všetky odstránené súbory ich stiahnutím zo serv folder location - - - The local folder %1 already contains a folder used in a folder sync connection. Please pick another one! - Lokálny priečinok %1  už obsahuje podpriečinok použitý pre synchronizáciu. Vyberte prosím iný priečinok. - - - - The local folder %1 is already contained in a folder used in a folder sync connection. Please pick another one! - Lokálny priečinok %1 už obsahuje podpriečinok použitý pre synchronizáciu. Vyberte prosím iný priečinok. - Please choose a different location. %1 is already contained in a folder used as a sync folder. - - - There is already a sync from the server to this local folder. Please pick another local folder! - Do tohto lokálneho priečinka sa už synchronizuje. Vyberte prosím iný priečinok. - Please choose a different location. %1 is already being used as a sync folder for %2. @@ -2598,7 +2593,7 @@ Prípadne môžete obnoviť všetky odstránené súbory ich stiahnutím zo serv - + 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. @@ -2706,12 +2701,12 @@ Pre pokročilých užívateľov: tento problém môže súvisieť s viacerými s Zosúladenie zmien - + Syncing local and remote changes Synchronizujú sa lokálne a vzdialené zmeny - + %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 … @@ -2729,7 +2724,7 @@ Pre pokročilých užívateľov: tento problém môže súvisieť s viacerými s , - + Download %1/s Example text: "Download 24Kb/s" (%1 is replaced by 24Kb (translated)) Sťahovanie %1/s @@ -2746,7 +2741,7 @@ Pre pokročilých užívateľov: tento problém môže súvisieť s viacerými s ↓ %1/s - + Upload %1/s Example text: "Upload 24Kb/s" (%1 is replaced by 24Kb (translated)) Nahrávanie %1/s @@ -2797,12 +2792,12 @@ Pre pokročilých užívateľov: tento problém môže súvisieť s viacerými s súbor %1 z %2 - + File %1 of %2 Súbor %1 z %2 - + About to start syncing O chvíľu sa spustí synchronizácia @@ -3168,7 +3163,7 @@ Pre pokročilých užívateľov: tento problém môže súvisieť s viacerými s Zobrazovať hlásenie, ktoré vyžadujú pozornosť. - + Show chat notification dialogs. Zobraziť dialógy upozornenia na Chat. @@ -3209,17 +3204,17 @@ Note that this selects only what pool upgrades are taken from, and that there ar Upozorňujeme, že sa tým vyberie iba to, odkiaľ sa aktualizácie budú sťahovať, a že nedôjde k nijakému downgrade. Takže návrat z beta kanála do stabilného kanála sa zvyčajne nedá vykonať okamžite a znamená čakať na stabilnú verziu, ktorá je novšia ako aktuálne nainštalovaná beta verzia. - + daily denne - + enterprise enterprise - + - beta: contains versions with new features that may not be tested thoroughly - daily: contains versions created daily only for testing and development @@ -3231,7 +3226,7 @@ Downgrading versions is not possible immediately: changing from beta to stable m Prechod na nižšiu verziu nie je možný okamžite: zmena z beta na stabilnú znamená čakanie na novú stabilnú verziu. - + - enterprise: contains stable versions for customers. Downgrading versions is not possible immediately: changing from stable to enterprise means waiting for the new enterprise version. @@ -3241,12 +3236,12 @@ Downgrading versions is not possible immediately: changing from stable to enterp Prechod na nižšiu verziu nie je možný okamžite: zmena zo stabilnej na podnikovú znamená čakanie na novú podnikovú verziu. - + Changing update channel? Chcete zmeniť kanál pre aktualizácie? - + The channel determines which upgrades will be offered to install: - stable: contains tested versions considered reliable @@ -4299,30 +4294,30 @@ Toto je nový experimentálny režim. Ak sa ho rozhodnete použiť, nahláste v Názov súboru je na tomto súborovom systéme rezervovaným názvom. - + Folder name of folder entity to use when warning about invalid name Adresár - + File name of folder entity to use when warning about invalid name Súbor - + %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 Názov %1 obsahuje znak "%2" ktorý nie je podporovaný na tomto súborovom systéme. - + %1 name contains at least one invalid character Názov %1 obsahuje aspoň jeden neplatný znak - + %1 name is a reserved name on this file system. Názov %1 je na tomto súborovom systéme rezervovaným názvom. @@ -4377,22 +4372,22 @@ Toto je nový experimentálny režim. Ak sa ho rozhodnete použiť, nahláste v Súbor je na tomto serveri na čiernej listine. - + Reason: the entire filename is forbidden. Dôvod: celý názov súboru je zakázaný. - + Reason: the filename has a forbidden base name (filename start). Dôvod: meno súboru obsahuje zakázaný názov (začiatok názvu súboru). - + Reason: the file has a forbidden extension (.%1). Dôvod: súbor obsahuje zakázanú príponu (.%1). - + Reason: the filename contains a forbidden character (%1). Dôvod: meno súboru obsahuje zakázaný znak (%1). @@ -4427,7 +4422,7 @@ Toto je nový experimentálny režim. Ak sa ho rozhodnete použiť, nahláste v Chyba pri synchronizácii z dôvodu neplatného času poslednej zmeny - + Could not upload file, because it is open in "%1". Súbor sa nepodarilo nahrať, pretože je otvorený v "%1". @@ -4510,18 +4505,18 @@ Toto je nový experimentálny režim. Ak sa ho rozhodnete použiť, nahláste v Chyba pri aktualizácii metadát z dôvodu neplatného času poslednej zmeny - - - - - - + + + + + + The folder %1 cannot be made read-only: %2 Priečinok %1 nemôže byť nastavený len na čítanie: %2 - - + + unknown exception neznáma chyba @@ -4695,12 +4690,6 @@ Toto je nový experimentálny režim. Ak sa ho rozhodnete použiť, nahláste v File %1 downloaded but it resulted in a local file name clash! Súbor %1 bol stiahnutý, ale došlo k kolízii názvov lokálnych súborov! - - - - Could not get file %1 from local DB - Nie je možné získať súbor %1 z lokálnej DB - @@ -4708,6 +4697,13 @@ Toto je nový experimentálny režim. Ak sa ho rozhodnete použiť, nahláste v could not get file %1 from local DB nie je možné získať súbor %1 z lokálnej DB + + + + + Could not get file %1 from local DB + Nie je možné získať súbor %1 z lokálnej DB + @@ -4808,16 +4804,16 @@ Toto je nový experimentálny režim. Ak sa ho rozhodnete použiť, nahláste v Wrong HTTP code returned by server. Expected 201, but received "%1 %2". Server vrátil neplatný HTTP kód. Očakávaný bol 201, ale vrátený bol "%1 %2". - - - Could not get file %1 from local DB - Nie je možné získať súbor %1 z lokálnej DB - could not get file %1 from local DB nie je možné získať súbor %1 z lokálnej DB + + + Could not get file %1 from local DB + Nie je možné získať súbor %1 z lokálnej DB + Could not delete file record %1 from local DB @@ -5066,7 +5062,7 @@ Toto je nový experimentálny režim. Ak sa ho rozhodnete použiť, nahláste v OCC::ShareManager - + Error Chyba @@ -5074,17 +5070,17 @@ Toto je nový experimentálny režim. Ak sa ho rozhodnete použiť, nahláste v OCC::ShareModel - + %1 days %1 dní - + 1 day 1 deň - + Today Dnes @@ -5114,7 +5110,7 @@ Toto je nový experimentálny režim. Ak sa ho rozhodnete použiť, nahláste v Zabezpečený file drop - + Could not find local folder for %1 Nepodarilo sa nájsť miestny adresár pre %1 @@ -5237,11 +5233,6 @@ Server odpovedal chybou: %2 Resharing this folder is not allowed Opätovné zdieľanie tohto priečinka je zakázané - - - Copy internal link - Kopírovať interný odkaz - Copy secure file drop link @@ -5253,6 +5244,11 @@ Server odpovedal chybou: %2 Copy public link Kopírovať verejný odkaz + + + Copy internal link + Kopírovať interný odkaz + Copy secure filedrop link @@ -5284,16 +5280,16 @@ Server odpovedal chybou: %2 remaining time before lock expires Vyprší za %1 minútuVyprší za %1 minútyVyprší za %1 minúťVyprší za %1 minúť - - - Open in browser - Otvoriť v prehliadači - Edit Upraviť + + + Open in browser + Otvoriť v prehliadači + Resolve conflict … @@ -5826,10 +5822,10 @@ Server odpovedal chybou: %2 - - - - + + + + Error updating metadata for a folder %1 Chyba pri aktualizácii metadát pre adresár %1 @@ -5849,7 +5845,7 @@ Server odpovedal chybou: %2 Nepodarilo sa pridať alebo odstrániť užívateľa %1 pre prístup k adresáru %2 - + Failed to unlock a folder. Odomknutie adresára zlyhalo. @@ -5867,7 +5863,7 @@ Server odpovedal chybou: %2 Spustiť migráciu - + %1 notifications %1 notifikácií @@ -5883,17 +5879,17 @@ Server odpovedal chybou: %2 Vyriešiť konflikt - + Rename file Premenovať súbor - + Open Nextcloud Assistant in browser Otvoriť Nextcloud Assitant v prehliadači - + Open Nextcloud Talk in browser Otvoriť Nextcloud Talk v prehliadači @@ -6027,29 +6023,19 @@ Server odpovedal chybou: %2 - The Virtual filesystem feature does not support a drive as sync root - Funkcia virtuálneho systému súborov nepodporuje jednotku ako koreňový adresár pre synchronizáciu + The Virtual filesystem feature requires a NTFS file system, %1 is using %2 + Funkcia Virtuálneho súborového systému vyžaduje NTFS, %1 používa %2 Please choose a different location. %1 isn't a NTFS file system. It doesn't support virtual files. - - - The Virtual filesystem feature requires a NTFS file system, %1 is using %2 - Funkcia Virtuálneho súborového systému vyžaduje NTFS, %1 používa %2 - Please choose a different location. %1 is a network drive. It doesn't support virtual files. - - - The Virtual filesystem feature is not supported on network drives - Funkcia virtuálneho systému súborov nie je podporovaná na sieťových jednodkách - OCC::VfsDownloadErrorDialog @@ -6189,12 +6175,12 @@ Server odpovedal chybou: %2 Server na účte %1  používa starú a nepodporovanú verziu %2. Používanie tohto klienta s nepodporovanými verziami servera nie je testované a môže byť nebezpečné. Pokračujte len na vlastné riziko. - + Terms of service Všeobecné podmienky - + 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. Váš účet %1 vyžaduje, aby ste prijali zmluvné podmienky vášho servera. Budete presmerovaní na %2, aby ste potvrdili, že ste si ho prečítali a súhlasíte s ním. @@ -6270,23 +6256,23 @@ Server odpovedal chybou: %2 Nie sú nastavené žiadne synchronizačné priečinky - + %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 pre %1: Prebieha synchronizácia. - + macOS VFS for %1: Last sync was successful. macOS VFS pre %1: Posledná synchronizácia bola úspešná. - + macOS VFS for %1: A problem was encountered. macOS VFS pre %1: Vyskytol sa problém. @@ -6732,7 +6718,7 @@ Server odpovedal chybou: %2 Hľadať používateľov alebo skupiny ... - + Sharing is not available for this folder Zdieľanie nie je prístupné pre tento adresár @@ -7143,11 +7129,6 @@ Server odpovedal chybou: %2 downloading sťahujem - - - Downloading - Sťahovanie - uploading @@ -7155,8 +7136,8 @@ Server odpovedal chybou: %2 - Uploading - Nahrávanie + Downloading + Sťahovanie @@ -7165,8 +7146,8 @@ Server odpovedal chybou: %2 - Deleting - Vymazávanie + Uploading + Nahrávanie @@ -7174,9 +7155,9 @@ Server odpovedal chybou: %2 presúvanie - - Moving - Presúvanie + + Deleting + Vymazávanie @@ -7185,26 +7166,31 @@ Server odpovedal chybou: %2 - Ignoring - Ignorovanie + Moving + Presúvanie error chyba + + + Ignoring + Ignorovanie + updating local metadata aktualizujú sa lokálne metadáta - + Updating local metadata Aktualizujú sa lokálne metadáta - + Updating local virtual files metadata Aktualizujú sa lokálne metadáta virtuálných súborov @@ -7363,19 +7349,6 @@ Server odpovedal chybou: %2 Vymazať menu správ o stave - - OCC::FormatWarningsWizardPage - - - <b>Warning:</b> %1 - <b>Upozornenie:</b> %1 - - - - <b>Warning:</b> - <b>Upozornenie:</b> - - OCC::AbstractPropagateRemoteDeleteEncrypted @@ -7389,6 +7362,19 @@ Server odpovedal chybou: %2 "%1 Zlyhalo odomknutie zašifrovaného priečinka %2". + + OCC::FormatWarningsWizardPage + + + <b>Warning:</b> %1 + <b>Upozornenie:</b> %1 + + + + <b>Warning:</b> + <b>Upozornenie:</b> + + OCC::OAuth diff --git a/translations/client_sl.ts b/translations/client_sl.ts index e19ab867c7c09..d7ca0ca5be2f1 100644 --- a/translations/client_sl.ts +++ b/translations/client_sl.ts @@ -172,13 +172,13 @@ - + Resume sync for all Nadaljuj z usklajevanjem za vse - + Pause sync for all Ustavi usklajevanje za vse @@ -193,32 +193,32 @@ Dodaj račun - + Settings Nastavitve - + Exit Končaj - + Current account avatar Trenutna podoba računa - + Current account status is online Uporabnik je trenutno povezan - + Current account status is do not disturb Uporabnik trenutno ne želi motenj - + Account switcher and settings menu Preklopnik računov in meni nastavitev @@ -307,17 +307,17 @@ FileProviderEvictionDialog - + Evict materialised files - + Materialised items - + Reload Ponovno naloži @@ -493,17 +493,17 @@ MainWindow - + Nextcloud desktop main dialog - + Unified search results list - + New activities Nove dejavnosti @@ -553,13 +553,13 @@ Should an account import be attempted? - + %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? @@ -572,12 +572,12 @@ Should the account be imported? Uvoz opuščenih podatkov - + Import Uvozi - + Skip Preskoči @@ -672,12 +672,12 @@ Should the account be imported? Šifriraj mapo - + End-to-end Encryption Celovito šifriranje E2E - + 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> @@ -708,17 +708,17 @@ Should the account be imported? Opozorilo - + 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 @@ -973,7 +973,7 @@ S tem dejanjem prav tako prekinete vsa trenutna usklajevanja v izvajanju.S strežnikom %1 ni vzpostavljene povezave (%2). - + Unable to connect to %1. Vzpostavitev povezave z %1 je spodletela. @@ -983,7 +983,7 @@ S tem dejanjem prav tako prekinete vsa trenutna usklajevanja v izvajanju.Napaka nastavitve strežnika: %1 na %2 - + You need to accept the terms of service @@ -1013,7 +1013,7 @@ S tem dejanjem prav tako prekinete vsa trenutna usklajevanja v izvajanju.Zaznane so mape, ki zaradi omejitve velikosti, ali zato, ker so del zunanje shrambe, niso bile usklajene: - + There are folders that have grown in size beyond %1MB: %2 @@ -1215,34 +1215,39 @@ S tem dejanjem prav tako prekinete vsa trenutna usklajevanja v izvajanju.Nadaljuj - + + Quit %1 + Končaj %1 + + + %1 accounts number of accounts imported %1 računov - + 1 account 1 račun - + %1 folders number of folders imported %1 map - + 1 folder 1 mapa - + Legacy import Opuščeno uvažanje - + Imported %1 and %2 from a legacy desktop client. %3 number of accounts and folders imported. list of users. @@ -1258,11 +1263,6 @@ S tem dejanjem prav tako prekinete vsa trenutna usklajevanja v izvajanju.There was an error while accessing the configuration file at %1. Please make sure the file can be accessed by your system account. Med dostopom do nastavitvene datoteke na %1 je prišlo do napake. Preverite, ali je dostopna z uporabniškim računom. - - - Quit %1 - Končaj %1 - OCC::AuthenticationDialog @@ -1727,13 +1727,13 @@ S tem dejanjem prav tako prekinete vsa trenutna usklajevanja v izvajanju.Napaka strežnika: odziv PROPFIND ni zapisan kot XML! - - + + Encrypted metadata setup error! - + Encrypted metadata setup error: initial signature from server is empty. @@ -2289,28 +2289,28 @@ Ali ste prepričani, da želite posodobiti spremembe s strežnikom? Ohrani datoteke - + A folder has surpassed the set folder size limit of %1MB: %2. %3 - + Keep syncing Nadaljuj z usklajevanjem - + Stop syncing Zaustavi usklajevanje - + The folder %1 has surpassed the set folder size limit of %2MB. - + Would you like to stop syncing this folder? Ali želite zaustaviti usklajevanje te mape? @@ -2338,41 +2338,41 @@ To pomeni, da odjemalec usklajevanja ne pošilja krajevnih sprememb takoj in mor %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. 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? Ali želite odstraniti vse datoteke? - + Proceed with Deletion - + Restore Files to Server Obnovi datoteke s strežnika - + Restore Files from Server Obnovi datoteke s strežnika @@ -2443,32 +2443,32 @@ Alternatively, you can restore all deleted files by downloading them from the se Poteka priprava na usklajevanje. - + Syncing %1 of %2 (A few seconds left) Poteka usklajevanje %1 od %2 (še nekaj sekund do konca) - + Syncing %1 of %2 (%3 left) Poteka usklajevanje %1 od %2 ( %3 do konca) - + Syncing %1 of %2 Poteka usklajevanje %1 od %2 - + Syncing %1 (A few seconds left) Poteka usklajevanje %1 (še nekaj sekund do konca) - + Syncing %1 (%2 left) Usklajevanje %1 (%2 do konca) - + Syncing %1 Usklajevanje %1 @@ -2512,16 +2512,6 @@ Alternatively, you can restore all deleted files by downloading them from the se No valid folder selected! Ni izbrane veljavne mape! - - - The folder %1 is used in a folder sync connection! - - - - - Please choose a different location. The selected folder isn't valid. - - The selected path does not exist! @@ -2532,17 +2522,37 @@ Alternatively, you can restore all deleted files by downloading them from the se The selected path is not a folder! Izbrana pot ni mapa! + + + You have no permission to write to the selected folder! + Ni ustreznih dovoljenj za pisanje v izbrano mapo! + + + + The local folder %1 already contains a folder used in a folder sync connection. Please pick another one! + Krajevna mapa %1 že vključuje mapo, ki je določena za usklajevanje. Izbrati je treba drugo. + + + + The local folder %1 is already contained in a folder used in a folder sync connection. Please pick another one! + Krajevna mapa %1 je že v določena za usklajevanje. Izbrati je treba drugo. + + + + There is already a sync from the server to this local folder. Please pick another local folder! + Za to krajevno pot je že ustvarjeno mesto za usklajevanje. Izbrati je treba drugo. + + + + 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. - - - You have no permission to write to the selected folder! - Ni ustreznih dovoljenj za pisanje v izbrano mapo! - Please choose a different location. The path %1 doesn't exist. @@ -2560,26 +2570,11 @@ Alternatively, you can restore all deleted files by downloading them from the se folder location - - - The local folder %1 already contains a folder used in a folder sync connection. Please pick another one! - Krajevna mapa %1 že vključuje mapo, ki je določena za usklajevanje. Izbrati je treba drugo. - - - - The local folder %1 is already contained in a folder used in a folder sync connection. Please pick another one! - Krajevna mapa %1 je že v določena za usklajevanje. Izbrati je treba drugo. - Please choose a different location. %1 is already contained in a folder used as a sync folder. - - - There is already a sync from the server to this local folder. Please pick another local folder! - Za to krajevno pot je že ustvarjeno mesto za usklajevanje. Izbrati je treba drugo. - Please choose a different location. %1 is already being used as a sync folder for %2. @@ -2587,7 +2582,7 @@ Alternatively, you can restore all deleted files by downloading them from the se - + 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. @@ -2692,12 +2687,12 @@ For advanced users: this issue might be related to multiple sync database files Usklajevanje sprememb - + 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'" %1 %2 … @@ -2715,7 +2710,7 @@ For advanced users: this issue might be related to multiple sync database files , - + Download %1/s Example text: "Download 24Kb/s" (%1 is replaced by 24Kb (translated)) Prejmi %1/s @@ -2732,7 +2727,7 @@ For advanced users: this issue might be related to multiple sync database files ↓ %1/s - + Upload %1/s Example text: "Upload 24Kb/s" (%1 is replaced by 24Kb (translated)) Pošlji %1/s @@ -2783,12 +2778,12 @@ For advanced users: this issue might be related to multiple sync database files datoteka %1 od %2 - + File %1 of %2 Datoteka %1 od %2 - + About to start syncing @@ -3154,7 +3149,7 @@ For advanced users: this issue might be related to multiple sync database files Prejeto je obvestilo strežnika, ki zahteva pozornost. - + Show chat notification dialogs. @@ -3195,17 +3190,17 @@ Note that this selects only what pool upgrades are taken from, and that there ar Upoštevati je treba, da izbor določa le različice programske opreme za nadgradnjo in da povrnitev na starejše različice ni več mogoča. Povrnitev iz preizkusnega kanala Beta na Stabilnega ni mogoča, dokler stabilna različica ni višja oziroma novejša od nameščene preizkusne različice. - + daily - + enterprise - + - beta: contains versions with new features that may not be tested thoroughly - daily: contains versions created daily only for testing and development @@ -3214,7 +3209,7 @@ 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. @@ -3222,12 +3217,12 @@ Downgrading versions is not possible immediately: changing from stable to enterp - + Changing update channel? Ali želite zamenjati kanal za posodobitve? - + The channel determines which upgrades will be offered to install: - stable: contains tested versions considered reliable @@ -4278,30 +4273,30 @@ To je nov preizkusni način. Če ga boste uporabili, pošljite tudi poročila o Ime datoteke je na tem sistemu zadržano za sistemsko datoteko. - + Folder name of folder entity to use when warning about invalid name Mapa - + File name of folder entity to use when warning about invalid name Datoteka - + %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. @@ -4356,22 +4351,22 @@ To je nov preizkusni način. Če ga boste uporabili, pošljite tudi poročila o Ime datoteke je na črnem seznamu strežnika. - + 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). @@ -4406,7 +4401,7 @@ To je nov preizkusni način. Če ga boste uporabili, pošljite tudi poročila o - + Could not upload file, because it is open in "%1". @@ -4489,18 +4484,18 @@ To je nov preizkusni način. Če ga boste uporabili, pošljite tudi poročila o - - - - - - + + + + + + The folder %1 cannot be made read-only: %2 - - + + unknown exception @@ -4674,12 +4669,6 @@ To je nov preizkusni način. Če ga boste uporabili, pošljite tudi poročila o File %1 downloaded but it resulted in a local file name clash! - - - - Could not get file %1 from local DB - - @@ -4687,6 +4676,13 @@ To je nov preizkusni način. Če ga boste uporabili, pošljite tudi poročila o could not get file %1 from local DB + + + + + Could not get file %1 from local DB + + @@ -4788,13 +4784,13 @@ To je nov preizkusni način. Če ga boste uporabili, pošljite tudi poročila o S strežnika je vrnjen neveljaven odziv HTTP. Pričakovan je 201, prejet pa je bil »%1 %2«. - - Could not get file %1 from local DB + + could not get file %1 from local DB - - could not get file %1 from local DB + + Could not get file %1 from local DB @@ -5045,7 +5041,7 @@ To je nov preizkusni način. Če ga boste uporabili, pošljite tudi poročila o OCC::ShareManager - + Error Napaka @@ -5053,17 +5049,17 @@ To je nov preizkusni način. Če ga boste uporabili, pošljite tudi poročila o OCC::ShareModel - + %1 days - + 1 day - + Today @@ -5093,7 +5089,7 @@ To je nov preizkusni način. Če ga boste uporabili, pošljite tudi poročila o - + Could not find local folder for %1 @@ -5214,11 +5210,6 @@ Server replied with error: %2 Resharing this folder is not allowed Nadaljnje omogočanje souporabe mape ni dovoljeno - - - Copy internal link - Kopiraj krajevno povezavo - Copy secure file drop link @@ -5230,6 +5221,11 @@ Server replied with error: %2 Copy public link Kopiraj javno povezavo + + + Copy internal link + Kopiraj krajevno povezavo + Copy secure filedrop link @@ -5261,16 +5257,16 @@ Server replied with error: %2 remaining time before lock expires Poteče čez %1 minutoPoteče čez %1 minutiPoteče čez %1 minutePoteče čez %1 minut - - - Open in browser - Odpri v brskalniku - Edit Uredi + + + Open in browser + Odpri v brskalniku + Resolve conflict … @@ -5803,10 +5799,10 @@ Server replied with error: %2 - - - - + + + + Error updating metadata for a folder %1 @@ -5826,7 +5822,7 @@ Server replied with error: %2 - + Failed to unlock a folder. @@ -5844,7 +5840,7 @@ Server replied with error: %2 - + %1 notifications @@ -5860,17 +5856,17 @@ Server replied with error: %2 - + Rename file Preimenuj datoteko - + Open Nextcloud Assistant in browser - + Open Nextcloud Talk in browser @@ -6004,29 +6000,19 @@ Server replied with error: %2 - The Virtual filesystem feature does not support a drive as sync root - + The Virtual filesystem feature requires a NTFS file system, %1 is using %2 + Navidezni datotečni sistem zahteva uporabo NTFS, Na %1 pa je v uporabi %2. Please choose a different location. %1 isn't a NTFS file system. It doesn't support virtual files. - - - The Virtual filesystem feature requires a NTFS file system, %1 is using %2 - Navidezni datotečni sistem zahteva uporabo NTFS, Na %1 pa je v uporabi %2. - Please choose a different location. %1 is a network drive. It doesn't support virtual files. - - - The Virtual filesystem feature is not supported on network drives - - OCC::VfsDownloadErrorDialog @@ -6166,12 +6152,12 @@ Server replied with error: %2 Strežnik računa %1 deluje na nepodprti različici %2. Uporaba programa za nepodprt strežnik ni preizkušena in lahko povzroči napake. Nadaljujete na lastno odgovornost. - + 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. @@ -6247,23 +6233,23 @@ Server replied with error: %2 Ni nastavljenih map za usklajevanje - + %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. @@ -6709,7 +6695,7 @@ Server replied with error: %2 - + Sharing is not available for this folder @@ -7120,11 +7106,6 @@ Server replied with error: %2 downloading prejemanje - - - Downloading - - uploading @@ -7132,7 +7113,7 @@ Server replied with error: %2 - Uploading + Downloading @@ -7142,7 +7123,7 @@ Server replied with error: %2 - Deleting + Uploading @@ -7151,8 +7132,8 @@ Server replied with error: %2 premikanje - - Moving + + Deleting @@ -7162,7 +7143,7 @@ Server replied with error: %2 - Ignoring + Moving @@ -7170,18 +7151,23 @@ Server replied with error: %2 error napaka + + + Ignoring + + updating local metadata posodabljanje krajevnih metapodatkov - + Updating local metadata - + Updating local virtual files metadata @@ -7340,19 +7326,6 @@ Server replied with error: %2 Počisti meni sporočil stanja - - OCC::FormatWarningsWizardPage - - - <b>Warning:</b> %1 - <b>Opozorilo:</b> %1 - - - - <b>Warning:</b> - <b>Opozorilo:</b> - - OCC::AbstractPropagateRemoteDeleteEncrypted @@ -7366,6 +7339,19 @@ Server replied with error: %2 »%1: odklepanje šifrirane mape %2 je spodletelo.« + + OCC::FormatWarningsWizardPage + + + <b>Warning:</b> %1 + <b>Opozorilo:</b> %1 + + + + <b>Warning:</b> + <b>Opozorilo:</b> + + OCC::OAuth diff --git a/translations/client_sr.ts b/translations/client_sr.ts index 76954a2ee1b30..4b262825be783 100644 --- a/translations/client_sr.ts +++ b/translations/client_sr.ts @@ -172,13 +172,13 @@ - + Resume sync for all Настави синхронизацију за све - + Pause sync for all Паузирај синхронизацију за све @@ -193,32 +193,32 @@ Додај нови налог - + Settings Подешавања - + Exit Изађи - + Current account avatar Тренутни аватар налога - + Current account status is online Тренутни статус налога је на мрежи - + Current account status is do not disturb Тренутни статус налога је не узнемиравај - + Account switcher and settings menu Пребацивач налога и мени подешавања @@ -307,17 +307,17 @@ FileProviderEvictionDialog - + Evict materialised files Избаци материјализоване фајлове - + Materialised items Материјализоване ставке - + Reload Поново учитај @@ -493,17 +493,17 @@ MainWindow - + Nextcloud desktop main dialog Nextcloud desktop главни дијалог - + Unified search results list Листа резултата обједињене претраге - + New activities Нове активности @@ -554,14 +554,14 @@ Should an account import be attempted? Да ли да се покуша увоз налога? - + %1 accounts were detected from a legacy desktop client. Should the accounts be imported? Откривено је %1 налога са десктоп клијента старе верзије. Да ли би требало да се увезу? - + 1 account was detected from a legacy desktop client. Should the account be imported? Откривен је 1 налог са десктоп клијента старе верзије. @@ -575,12 +575,12 @@ Should the account be imported? Увоз старе верзије - + Import Увези - + Skip Прескочи @@ -675,12 +675,12 @@ Should the account be imported? Шифрирај фолдер - + 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> Ово ће да шифрује фолдер и све фајлове у њему. Тим фајловима више неће моћи да се приступи без мнемоничког кључа шифровања. @@ -712,17 +712,17 @@ Should the account be imported? Упозорење - + 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 Овај фолдер има грешку синхронизације. Шифровање ће бити могуће тек када се успешно синхронизује @@ -978,7 +978,7 @@ This action will abort any currently running synchronization. Нема конекције на %1 са %2. - + Unable to connect to %1. Није успело повезивање са %1. @@ -988,7 +988,7 @@ This action will abort any currently running synchronization. Грешка у конфигурацији сервера: %1 у %2. - + You need to accept the terms of service Морате прихватити услове коришћења коришћења @@ -1018,7 +1018,7 @@ This action will abort any currently running synchronization. Ово су фасцикле које нису синхронизоване зато што су превелике или су на спољним складиштима: - + There are folders that have grown in size beyond %1MB: %2 Има фолдера чија је величина нарасла преко %1MB: %2 @@ -1220,34 +1220,39 @@ This action will abort any currently running synchronization. Настави - + + Quit %1 + Напусти %1 + + + %1 accounts number of accounts imported %1 налога - + 1 account 1 налог - + %1 folders number of folders imported %1 фолдера - + 1 folder 1 фолдер - + Legacy import Увоз старе верзије - + Imported %1 and %2 from a legacy desktop client. %3 number of accounts and folders imported. list of users. @@ -1264,11 +1269,6 @@ This action will abort any currently running synchronization. There was an error while accessing the configuration file at %1. Please make sure the file can be accessed by your system account. Дошло је до грешке приликом приступа конфигурационом фајлу у %1. Молимо вас да обезбедите да ваш системски налог има приступ фајлу. - - - Quit %1 - Напусти %1 - OCC::AuthenticationDialog @@ -1733,13 +1733,13 @@ This action will abort any currently running synchronization. Серверска грешка: PROPFIND одговор није XML форматиран! - - + + Encrypted metadata setup error! Грешка подешавања шифрованих метаподатака! - + Encrypted metadata setup error: initial signature from server is empty. Грешка у подешавању шифрованих метаподатака: почетни потпис са сервера је празан. @@ -2134,17 +2134,17 @@ This can be an issue with your OpenSSL libraries. Please choose a different location. The folder %1 doesn't exist. - + Молимо вас да изаберете неку другу локацију. Фолдер %1 не постоји. Please choose a different location. %1 isn't a valid folder. - + Молимо вас да изаберете неку другу локацију. %1 није исправан фолдер. Please choose a different location. %1 isn't a readable folder. - + Молимо вас да изаберете неку другу локацију. %1 није фолдер који може да се чита. @@ -2295,29 +2295,29 @@ If this was an accident and you decide to keep your files, they will be re-synce Остави фајлове - + A folder has surpassed the set folder size limit of %1MB: %2. %3 Фолдер је прешао постављено ограничење величине од %1MB: %2. %3 - + Keep syncing Настави синхронизацију - + Stop syncing Заустави синхронизацију - + The folder %1 has surpassed the set folder size limit of %2MB. Фолдер %1 је прешао постављено ограничење величине од %2MB. - + Would you like to stop syncing this folder? Желите ли да зауставите синхронизацију овог фолдера? @@ -2345,12 +2345,12 @@ 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" Није успело виртуелно преузимање фајла, кôд „%1”, статус „%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. @@ -2359,7 +2359,7 @@ Alternatively, you can restore all deleted files by uploading from '%1&apos У супротном, све обрисане фајлове можете да обновите тако што их отпремите из фолдера ’%1’ на сервер. - + 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. @@ -2368,22 +2368,22 @@ Alternatively, you can restore all deleted files by downloading them from the se У супротном, све обрисане фајлове можете да обновите тако што их поново преузмете са сервера. - + Remove all files? Желите ли да уклоните све фајлове? - + Proceed with Deletion Настави са брисањем - + Restore Files to Server Врати фајлове на сервер - + Restore Files from Server Врати фајлове са сервера @@ -2454,32 +2454,32 @@ Alternatively, you can restore all deleted files by downloading them from the se Припремам синхронизацију. - + Syncing %1 of %2 (A few seconds left) Синхронизујем %1 од %2 (преостало је неколико секунди) - + Syncing %1 of %2 (%3 left) Синхронизује се %1 од %2 (преостало %3) - + Syncing %1 of %2 Синхронизује се %1 од %2 - + Syncing %1 (A few seconds left) Синхронизује се %1 (преостало је неколико секунди) - + Syncing %1 (%2 left) Синхронизује се %1 (преостало %2) - + Syncing %1 Синхронизује се %1 @@ -2523,16 +2523,6 @@ Alternatively, you can restore all deleted files by downloading them from the se No valid folder selected! Није изабран ниједна исправна фасцикла! - - - The folder %1 is used in a folder sync connection! - Фолдер %1 се користи у вези синхронизације фолдера! - - - - Please choose a different location. The selected folder isn't valid. - - The selected path does not exist! @@ -2543,62 +2533,67 @@ Alternatively, you can restore all deleted files by downloading them from the se The selected path is not a folder! Одабрана путања није фасцикла! - - - - Please choose a different location. %1 is already being used as a sync folder. - - You have no permission to write to the selected folder! Немате дозволе за упис у изабрану фасциклу! + + + The local folder %1 already contains a folder used in a folder sync connection. Please pick another one! + Локална фасцикла %1 већ садржи фасциклу која се користи за синхронизацију. Одаберите неку другу! + + + + The local folder %1 is already contained in a folder used in a folder sync connection. Please pick another one! + Локална фасцикла %1 је већ унутар фасцикле која се користи за синхронизацију. Одаберите неку другу! + + + + There is already a sync from the server to this local folder. Please pick another local folder! + Већ постоји синхронизација са сервера у ову локалну фасциклу. Одаберите другу локалну фасциклу! + + + + 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. + Молимо вас да изаберете неку другу локацију. %1 се већ користи као фолдер за синхронизацију. + Please choose a different location. The path %1 doesn't exist. - + Молимо вас да изаберете неку другу локацију. Путања %1 не постоји. Please choose a different location. The path %1 isn't a folder. - + Молимо вас да изаберете неку другу локацију. Путања %1 није фолдер. Please choose a different location. You don't have enough permissions to write to %1. folder location - - - - - The local folder %1 already contains a folder used in a folder sync connection. Please pick another one! - Локална фасцикла %1 већ садржи фасциклу која се користи за синхронизацију. Одаберите неку другу! - - - - The local folder %1 is already contained in a folder used in a folder sync connection. Please pick another one! - Локална фасцикла %1 је већ унутар фасцикле која се користи за синхронизацију. Одаберите неку другу! + Молимо вас да изаберете неку другу локацију. Немате потребне дозволе да уписујете у %1. Please choose a different location. %1 is already contained in a folder used as a sync folder. - - - - - There is already a sync from the server to this local folder. Please pick another local folder! - Већ постоји синхронизација са сервера у ову локалну фасциклу. Одаберите другу локалну фасциклу! + Молимо вас да изаберете неку другу локацију. %1 се већ налази унутар фолдера који се користи као фолдер за синхронизацију. Please choose a different location. %1 is already being used as a sync folder for %2. folder location, server url - + Молимо вас да изаберете неку другу локацију. %1 се већ користи као фолдер за синхронизацију за %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. @@ -2706,12 +2701,12 @@ For advanced users: this issue might be related to multiple sync database files Сакупљам измене - + 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'" %1 %2 … @@ -2729,7 +2724,7 @@ For advanced users: this issue might be related to multiple sync database files , - + Download %1/s Example text: "Download 24Kb/s" (%1 is replaced by 24Kb (translated)) Преузимање %1/s @@ -2746,7 +2741,7 @@ For advanced users: this issue might be related to multiple sync database files ↓ %1/s - + Upload %1/s Example text: "Upload 24Kb/s" (%1 is replaced by 24Kb (translated)) Отпремање %1/s @@ -2797,12 +2792,12 @@ For advanced users: this issue might be related to multiple sync database files фајл %1 од %2 - + File %1 of %2 Фајл %1 од %2 - + About to start syncing Синхронизација ће управо да почне @@ -2911,7 +2906,7 @@ 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. - + Молимо вас да изаберете неку другу локацију. %1 се већ синхронизује на %2. @@ -2956,7 +2951,7 @@ For advanced users: this issue might be related to multiple sync database files Virtual files are not supported at the selected location - + Виртуелни фајлови нису доступни за изабрану локацију @@ -3168,7 +3163,7 @@ For advanced users: this issue might be related to multiple sync database files Обавештења са сервера која захтевају пажњу. - + Show chat notification dialogs. Приказује дијалоге обавештења о чету. @@ -3209,17 +3204,17 @@ Note that this selects only what pool upgrades are taken from, and that there ar Имајте на уму да ово бира само из ког складишта се преузимају ажурирања, као и да нема враћања на раније верзије: тако да враћање са бета канала на стабилни канал обично не може да се изврши тренутно и значи да је потребно чекање на стабилну верзију која је новија од тренутно инсталиране бета верзије. - + daily дневно - + enterprise предузетничка - + - beta: contains versions with new features that may not be tested thoroughly - daily: contains versions created daily only for testing and development @@ -3231,7 +3226,7 @@ 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. @@ -3241,12 +3236,12 @@ 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 @@ -3942,7 +3937,7 @@ Note that using any logging command line options will override this setting. Virtual files are not supported at the selected location - + Виртуелни фајлови нису доступни за изабрану локацију @@ -4299,30 +4294,30 @@ This is a new, experimental mode. If you decide to use it, please report any iss Име фајла је резервисано име на овом фајл систему. - + 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” које садржи карактер „%2” се не подржава на овом фајл систему. - + %1 name contains at least one invalid character Име %1 садржи бар један недозвољени карактер - + %1 name is a reserved name on this file system. Име %1 је резервисано име на овом фајл систему. @@ -4377,22 +4372,22 @@ This is a new, experimental mode. If you decide to use it, please report any iss Име фајла је на црној листи сервера. - + Reason: the entire filename is forbidden. Разлог: забрањено је комплетно име фајла. - + Reason: the filename has a forbidden base name (filename start). Разлог: име фајла поседује забрањено базно име (почетак имена фајла). - + Reason: the file has a forbidden extension (.%1). Разлог: име фајла поседује забрањену екстензију (.%1). - + Reason: the filename contains a forbidden character (%1). Разлог: име фајла поседује забрањени карактер (%1). @@ -4427,7 +4422,7 @@ This is a new, experimental mode. If you decide to use it, please report any iss Не може да се синхронизује због неисправног времена измене - + Could not upload file, because it is open in "%1". Фајл не може да се отпреми јер је отворен у „%1”. @@ -4510,18 +4505,18 @@ This is a new, experimental mode. If you decide to use it, please report any iss Грешка приликом ажурирања метаподатака услед неисправног времена измене - - - - - - + + + + + + The folder %1 cannot be made read-only: %2 Фолдер %1 не може да се буде само-за-читање: %2 - - + + unknown exception непознати изузетак @@ -4695,12 +4690,6 @@ This is a new, experimental mode. If you decide to use it, please report any iss File %1 downloaded but it resulted in a local file name clash! Фајл %1 је преузет, али је изазвао судар са називом локалног фајла! - - - - Could not get file %1 from local DB - Фајл %1 не може да се преузме из локалне базе - @@ -4708,6 +4697,13 @@ This is a new, experimental mode. If you decide to use it, please report any iss could not get file %1 from local DB фајл %1 не може да се преузме из локалне базе + + + + + Could not get file %1 from local DB + Фајл %1 не може да се преузме из локалне базе + @@ -4808,16 +4804,16 @@ 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". Сервер је вратио погрешан HTTP кôд. Очекивао се 201, а примљен је „%1 %2”. - - - Could not get file %1 from local DB - Фајл %1 не може да се преузме из локалне базе - could not get file %1 from local DB фајл %1 не може да се преузме из локалне базе + + + Could not get file %1 from local DB + Фајл %1 не може да се преузме из локалне базе + Could not delete file record %1 from local DB @@ -5066,7 +5062,7 @@ This is a new, experimental mode. If you decide to use it, please report any iss OCC::ShareManager - + Error Грешка @@ -5074,17 +5070,17 @@ This is a new, experimental mode. If you decide to use it, please report any iss OCC::ShareModel - + %1 days %1 дана - + 1 day 1 дан - + Today Данас @@ -5114,7 +5110,7 @@ This is a new, experimental mode. If you decide to use it, please report any iss Сигурно место за упуштање фајлова - + Could not find local folder for %1 Не може да се пронађе локални фолдер за %1 @@ -5237,11 +5233,6 @@ Server replied with error: %2 Resharing this folder is not allowed Поновно дељење овог фолдера није дозвољено - - - Copy internal link - Копирај интерну везу - Copy secure file drop link @@ -5253,6 +5244,11 @@ Server replied with error: %2 Copy public link Копирај јавну везу + + + Copy internal link + Копирај интерну везу + Copy secure filedrop link @@ -5284,16 +5280,16 @@ Server replied with error: %2 remaining time before lock expires Истиче за %1 минутИстиче за %1 минутаИстиче за %1 минута - - - Open in browser - Отвори у веб читачу - Edit Измени + + + Open in browser + Отвори у веб читачу + Resolve conflict … @@ -5826,10 +5822,10 @@ Server replied with error: %2 - - - - + + + + Error updating metadata for a folder %1 Грешка приликом ажурирања метаподатака за фолдер %1 @@ -5849,7 +5845,7 @@ Server replied with error: %2 Није могло да се дода или уклони право приступа кориснику %1 за фолдер %2 - + Failed to unlock a folder. Није успело откључавање фолдера. @@ -5867,7 +5863,7 @@ Server replied with error: %2 Покрени миграцију - + %1 notifications %1 обавештења @@ -5883,17 +5879,17 @@ Server replied with error: %2 Разреши конфликт - + Rename file Промени назив фајла - + Open Nextcloud Assistant in browser Отвори Nextcloud Асистент у прегледачу - + Open Nextcloud Talk in browser Отвори Nextcloud Talk у прегледачу @@ -6023,32 +6019,22 @@ Server replied with error: %2 Please choose a different location. %1 is a drive. It doesn't support virtual files. - + Молимо вас да изаберете неку другу локацију. %1 је драјв. Он не подржава виртуелне фајлове. - The Virtual filesystem feature does not support a drive as sync root - Функционалност Виртуелног фајл система не подржава диск као корен синхронизације. + The Virtual filesystem feature requires a NTFS file system, %1 is using %2 + Могућност Виртуелног фајл система захтева NTFS фајл систем, %1 користи %2 Please choose a different location. %1 isn't a NTFS file system. It doesn't support virtual files. - - - - - The Virtual filesystem feature requires a NTFS file system, %1 is using %2 - Могућност Виртуелног фајл система захтева NTFS фајл систем, %1 користи %2 + Молимо вас да изаберете неку другу локацију. %1 је NTFS фајл систем. Он не подржава виртуелне фајлове. Please choose a different location. %1 is a network drive. It doesn't support virtual files. - - - - - The Virtual filesystem feature is not supported on network drives - Функционалност Виртуелног фајл система се не подржава на мрежним дисковима + Молимо вас да изаберете неку другу локацију. %1 је мрежни драјв. Он не подржава виртуелне фајлове. @@ -6189,12 +6175,12 @@ Server replied with error: %2 Сервер на налогу %1 извршава неподржану верзију %2. Коришћење овог клијента са неподржаном верзијом сервера није тестирано и потенцијално може бити опасно. Настављате на сопствену одговорност. - + 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 да потврдите да сте их прочитали и да се слажете са њима. @@ -6270,23 +6256,23 @@ Server replied with error: %2 Нису подешене фасцикле за синхронизацију - + %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 за %1: Синхронизација у току. - + macOS VFS for %1: Last sync was successful. macOS VFS за %1: Последња синхронизација је била успешна. - + macOS VFS for %1: A problem was encountered. macOS VFS за %1: Дошло је до проблема. @@ -6732,7 +6718,7 @@ Server replied with error: %2 Претражи кориснике или групе… - + Sharing is not available for this folder Овај фолдер не може да се дели @@ -7143,11 +7129,6 @@ Server replied with error: %2 downloading преузимам - - - Downloading - Преузимање - uploading @@ -7155,8 +7136,8 @@ Server replied with error: %2 - Uploading - Отпремање + Downloading + Преузимање @@ -7165,8 +7146,8 @@ Server replied with error: %2 - Deleting - Брисање + Uploading + Отпремање @@ -7174,9 +7155,9 @@ Server replied with error: %2 премештам - - Moving - Премештање + + Deleting + Брисање @@ -7185,26 +7166,31 @@ Server replied with error: %2 - Ignoring - Игнорисање + Moving + Премештање error грешка + + + Ignoring + Игнорисање + updating local metadata ажурирам локалне метаподатке - + Updating local metadata Ажурирају се локални метаподаци - + Updating local virtual files metadata Ажурирају се метаподаци локалних виртуелних фајлова @@ -7363,19 +7349,6 @@ Server replied with error: %2 Обриши мени статусне поруке - - OCC::FormatWarningsWizardPage - - - <b>Warning:</b> %1 - <b>Упозорење:</b> %1 - - - - <b>Warning:</b> - <b>Упозорење:</b> - - OCC::AbstractPropagateRemoteDeleteEncrypted @@ -7389,6 +7362,19 @@ Server replied with error: %2 „%1 Није успело откључавање шифрованог фолдера %2”. + + OCC::FormatWarningsWizardPage + + + <b>Warning:</b> %1 + <b>Упозорење:</b> %1 + + + + <b>Warning:</b> + <b>Упозорење:</b> + + OCC::OAuth diff --git a/translations/client_sv.ts b/translations/client_sv.ts index b042f1e6f2ee8..b4fdb4f87df6a 100644 --- a/translations/client_sv.ts +++ b/translations/client_sv.ts @@ -172,13 +172,13 @@ - + Resume sync for all Återuppta synkronisering för alla - + Pause sync for all Pausa synkronisering för alla @@ -193,32 +193,32 @@ Lägg till nytt konto - + Settings Inställningar - + Exit Avsluta - + Current account avatar Avatar för aktuellt konto - + Current account status is online Aktuell kontostatus är online - + Current account status is do not disturb Aktuell kontostatus är stör ej - + Account switcher and settings menu Kontobytare och inställningsmeny @@ -307,17 +307,17 @@ FileProviderEvictionDialog - + Evict materialised files Ta bort nedladdade filer - + Materialised items Nedladdade objekt - + Reload Ladda om @@ -493,17 +493,17 @@ MainWindow - + Nextcloud desktop main dialog Nextcloud-klient huvuddialog - + Unified search results list Sammanlagda sökresultat - + New activities Nya aktiviteter @@ -554,14 +554,14 @@ Should an account import be attempted? Ska import av kontot försökas? - + %1 accounts were detected from a legacy desktop client. Should the accounts be imported? %1 konton från en äldre desktopklient hittades. Ska dessa konton importeras? - + 1 account was detected from a legacy desktop client. Should the account be imported? 1 konto från en äldre desktopklient hittades. @@ -575,12 +575,12 @@ Ska detta konto importeras? Legacyimport - + Import Importera - + Skip Hoppa över @@ -675,12 +675,12 @@ Ska detta konto importeras? Kryptera mapp - + End-to-end Encryption End-to-end-kryptering - + 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> Detta kommer att kryptera din mapp och alla filer den innehåller. Dessa filer kommer inte längre att vara tillgängliga utan dina krypteringsord. @@ -712,17 +712,17 @@ Ska detta konto importeras? Varning - + Please wait for the folder to sync before trying to encrypt it. Vänta tills mappen är synkroniserad innan du försöker kryptera den. - + The folder has a minor sync problem. Encryption of this folder will be possible once it has synced successfully Mappen har ett mindre synkroniseringsproblem. Kryptering av denna mapp kommer att vara möjlig när den väl har synkroniserats - + The folder has a sync error. Encryption of this folder will be possible once it has synced successfully Mappen har ett synkroniseringsfel. Kryptering av denna mapp kommer att vara möjlig när den väl har synkroniserats @@ -978,7 +978,7 @@ Den här åtgärden avbryter alla pågående synkroniseringar. Ingen anslutning till %1 vid %2. - + Unable to connect to %1. Kan inte ansluta till %1. @@ -988,7 +988,7 @@ Den här åtgärden avbryter alla pågående synkroniseringar. Felaktig serverkonfiguration: %1 vid %2. - + You need to accept the terms of service Du behöver acceptera användarvillkoren @@ -1018,7 +1018,7 @@ Den här åtgärden avbryter alla pågående synkroniseringar. Det finns mappar som inte blivit synkroniserade på grund av att de är för stora eller är externa lagringsytor: - + There are folders that have grown in size beyond %1MB: %2 Det finns mappar som har vuxit i storlek större än %1MB: %2 @@ -1220,34 +1220,39 @@ Den här åtgärden avbryter alla pågående synkroniseringar. Fortsätt - + + Quit %1 + Avsluta %1 + + + %1 accounts number of accounts imported %1 konton - + 1 account 1 konto - + %1 folders number of folders imported %1 mappar - + 1 folder 1 mapp - + Legacy import Legacyimport - + Imported %1 and %2 from a legacy desktop client. %3 number of accounts and folders imported. list of users. @@ -1264,11 +1269,6 @@ Den här åtgärden avbryter alla pågående synkroniseringar. There was an error while accessing the configuration file at %1. Please make sure the file can be accessed by your system account. Ett fel uppstod vid läsning av konfigurationsfilen vid %1. Kontrollera att filen kan nås av ditt datorkonto. - - - Quit %1 - Avsluta %1 - OCC::AuthenticationDialog @@ -1733,13 +1733,13 @@ Den här åtgärden avbryter alla pågående synkroniseringar. Serverfel: PROPFIND-svar är inte XML-formaterat! - - + + Encrypted metadata setup error! Inställningsfel för krypterad metadata! - + Encrypted metadata setup error: initial signature from server is empty. Inställningsfel för krypterad metadata: initial signatur från servern är tom. @@ -2295,29 +2295,29 @@ Om detta var ett misstag och du vill behålla dina filer, kommer de att synkroni Behåll filer - + A folder has surpassed the set folder size limit of %1MB: %2. %3 En mapp har överskridit den inställda mappstorleksgränsen på %1MB: %2. %3 - + Keep syncing Fortsätt synkronisera - + Stop syncing Sluta synkronisera - + The folder %1 has surpassed the set folder size limit of %2MB. Mappen %1 har överskridit den inställda mappstorleksgränsen på %2MB. - + Would you like to stop syncing this folder? Vill du sluta synkronisera den här mappen? @@ -2345,12 +2345,12 @@ Det betyder att synkroniseringsklienten inte kan ladda upp lokala ändringar ome %1 - + Virtual file download failed with code "%1", status "%2" and error message "%3" Virtuell filnedladdning misslyckades med koden "%1", status "%2" och felmeddelandet "%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. @@ -2359,7 +2359,7 @@ Bekräfta om du vill fortsätta med dessa raderingar. Alternativt kan du återställa alla raderade filer genom att ladda upp från '%1' mappen till servern. - + 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. @@ -2368,22 +2368,22 @@ Bekräfta om du vill fortsätta med dessa raderingar. Alternativt kan du återställa alla raderade filer genom att ladda ner dem från servern. - + Remove all files? Ta bort alla filer? - + Proceed with Deletion Fortsätt med radering - + Restore Files to Server Återställ filer till server - + Restore Files from Server Återställ filer från servern @@ -2454,32 +2454,32 @@ Alternativt kan du återställa alla raderade filer genom att ladda ner dem frå Förbereder synkronisering - + Syncing %1 of %2 (A few seconds left) Synkroniserar %1 av %2 (några sekunder kvar) - + Syncing %1 of %2 (%3 left) Synkroniserar %1 av %2 (%3 kvar) - + Syncing %1 of %2 Synkroniserar %1 av %2 - + Syncing %1 (A few seconds left) Synkroniserar %1 (några sekunder kvar) - + Syncing %1 (%2 left) Synkroniserar %1 (%2 kvar) - + Syncing %1 Synkroniserar %1 @@ -2523,16 +2523,6 @@ Alternativt kan du återställa alla raderade filer genom att ladda ner dem frå No valid folder selected! Ingen giltig mapp markerad! - - - The folder %1 is used in a folder sync connection! - Mappen %1 används i en synkroniseringsanslutning! - - - - Please choose a different location. The selected folder isn't valid. - - The selected path does not exist! @@ -2543,17 +2533,37 @@ Alternativt kan du återställa alla raderade filer genom att ladda ner dem frå The selected path is not a folder! Den markerade sökvägen är inte en mapp! + + + You have no permission to write to the selected folder! + Du har inga skrivrättigheter till den valda mappen! + + + + The local folder %1 already contains a folder used in a folder sync connection. Please pick another one! + Den lokala mappen %1 innehåller redan en mapp med en synkroniseringskoppling. Vänligen välj en annan mapp! + + + + The local folder %1 is already contained in a folder used in a folder sync connection. Please pick another one! + Den lokala mappen %1 finns redan inuti en mapp med en synkroniseringskoppling. Vänligen välj en annan mapp! + + + + There is already a sync from the server to this local folder. Please pick another local folder! + Det pågår redan en synkronisering från servern till denna lokala mappen. Vänligen välj en annan lokal mapp. + + + + 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. - - - You have no permission to write to the selected folder! - Du har inga skrivrättigheter till den valda mappen! - Please choose a different location. The path %1 doesn't exist. @@ -2571,26 +2581,11 @@ Alternativt kan du återställa alla raderade filer genom att ladda ner dem frå folder location - - - The local folder %1 already contains a folder used in a folder sync connection. Please pick another one! - Den lokala mappen %1 innehåller redan en mapp med en synkroniseringskoppling. Vänligen välj en annan mapp! - - - - The local folder %1 is already contained in a folder used in a folder sync connection. Please pick another one! - Den lokala mappen %1 finns redan inuti en mapp med en synkroniseringskoppling. Vänligen välj en annan mapp! - Please choose a different location. %1 is already contained in a folder used as a sync folder. - - - There is already a sync from the server to this local folder. Please pick another local folder! - Det pågår redan en synkronisering från servern till denna lokala mappen. Vänligen välj en annan lokal mapp. - Please choose a different location. %1 is already being used as a sync folder for %2. @@ -2598,7 +2593,7 @@ Alternativt kan du återställa alla raderade filer genom att ladda ner dem frå - + 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. @@ -2706,12 +2701,12 @@ För avancerade användare: det här problemet kan vara relaterat till flera syn slå ihop förärändringar - + Syncing local and remote changes Synkronisera lokala och fjärranslutna ändringar - + %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 … @@ -2729,7 +2724,7 @@ För avancerade användare: det här problemet kan vara relaterat till flera syn , - + Download %1/s Example text: "Download 24Kb/s" (%1 is replaced by 24Kb (translated)) Nedladdning %1/s @@ -2746,7 +2741,7 @@ För avancerade användare: det här problemet kan vara relaterat till flera syn ↓ %1/s - + Upload %1/s Example text: "Upload 24Kb/s" (%1 is replaced by 24Kb (translated)) Uppladdning %1/s @@ -2797,12 +2792,12 @@ För avancerade användare: det här problemet kan vara relaterat till flera syn fil %1 av %2 - + File %1 of %2 Fil %1 av %2 - + About to start syncing Ska börja synkronisera @@ -3168,7 +3163,7 @@ För avancerade användare: det här problemet kan vara relaterat till flera syn Serveraviseringar som kräver uppmärksamhet. - + Show chat notification dialogs. Visa dialogrutor för chattaviseringar. @@ -3209,17 +3204,17 @@ Note that this selects only what pool upgrades are taken from, and that there ar Observera att detta endast väljer vilken pool uppgraderingar tas från, och att det inte finns några nedgraderingar: Så att gå tillbaka från betakanalen till den stabila kanalen kan vanligtvis inte göras omedelbart och innebär att vänta på en stabil version som är nyare än den för närvarande installerade betaversionen. - + daily dagligen - + enterprise enterprise - + - beta: contains versions with new features that may not be tested thoroughly - daily: contains versions created daily only for testing and development @@ -3231,7 +3226,7 @@ Downgrading versions is not possible immediately: changing from beta to stable m Nedgradering av versioner är inte möjligt omedelbart: att byta från beta till stabil innebär att vänta på den nya stabila versionen. - + - enterprise: contains stable versions for customers. Downgrading versions is not possible immediately: changing from stable to enterprise means waiting for the new enterprise version. @@ -3241,12 +3236,12 @@ Downgrading versions is not possible immediately: changing from stable to enterp Det är inte möjligt att nedgradera versioner omedelbart: att byta från stabil till enterprise innebär att man väntar på den nya enterprise-versionen. - + Changing update channel? Ändra uppdateringskanal? - + The channel determines which upgrades will be offered to install: - stable: contains tested versions considered reliable @@ -4299,30 +4294,30 @@ Detta är ett nytt experimentellt läge. Om du bestämmer dig för att använda Detta filnamn är reserverat på detta filsystem. - + Folder name of folder entity to use when warning about invalid name Mapp - + File name of folder entity to use when warning about invalid name Fil - + %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 namn som innehåller tecknet "%2" stöds inte i det här filsystemet. - + %1 name contains at least one invalid character %1 namnet innehåller minst ett ogiltigt tecken - + %1 name is a reserved name on this file system. %1 namnet är ett reserverat namn på det här filsystemet. @@ -4377,22 +4372,22 @@ Detta är ett nytt experimentellt läge. Om du bestämmer dig för att använda Filnamnet är svartlistat på servern. - + Reason: the entire filename is forbidden. Orsak: hela filnamnet är förbjudet. - + Reason: the filename has a forbidden base name (filename start). Orsak: filnamnet har ett förbjudet basnamn (filnamnsstart). - + Reason: the file has a forbidden extension (.%1). Orsak: filen har ett förbjudet tillägg (.%1). - + Reason: the filename contains a forbidden character (%1). Orsak: filnamnet innehåller ett förbjudet tecken (%1). @@ -4427,7 +4422,7 @@ Detta är ett nytt experimentellt läge. Om du bestämmer dig för att använda Det går inte att synkronisera på grund av ogiltig ändringstid - + Could not upload file, because it is open in "%1". Kunde inte ladda upp filen eftersom den är öppen i "%1". @@ -4510,18 +4505,18 @@ Detta är ett nytt experimentellt läge. Om du bestämmer dig för att använda Fel vid uppdatering av metadata på grund av ogiltig ändringstid - - - - - - + + + + + + The folder %1 cannot be made read-only: %2 Mappen %1 kan inte göras skrivskyddad: %2 - - + + unknown exception okänt fel @@ -4695,12 +4690,6 @@ Detta är ett nytt experimentellt läge. Om du bestämmer dig för att använda File %1 downloaded but it resulted in a local file name clash! Fil %1 har laddats ner men det resulterade i en konflikt med ett lokalt filnamn! - - - - Could not get file %1 from local DB - Kunde inte hämta filen %1 från lokal DB - @@ -4708,6 +4697,13 @@ Detta är ett nytt experimentellt läge. Om du bestämmer dig för att använda could not get file %1 from local DB kunde inte hämta filen %1 från lokal DB + + + + + Could not get file %1 from local DB + Kunde inte hämta filen %1 från lokal DB + @@ -4808,16 +4804,16 @@ Detta är ett nytt experimentellt läge. Om du bestämmer dig för att använda Wrong HTTP code returned by server. Expected 201, but received "%1 %2". Felaktig HTTP-kod i svaret från servern. '201' förväntades, men "%1 %2" mottogs. - - - Could not get file %1 from local DB - Kunde inte hämta filen %1 från lokal DB - could not get file %1 from local DB kunde inte hämta filen %1 från lokal DB + + + Could not get file %1 from local DB + Kunde inte hämta filen %1 från lokal DB + Could not delete file record %1 from local DB @@ -5066,7 +5062,7 @@ Detta är ett nytt experimentellt läge. Om du bestämmer dig för att använda OCC::ShareManager - + Error Fel @@ -5074,17 +5070,17 @@ Detta är ett nytt experimentellt läge. Om du bestämmer dig för att använda OCC::ShareModel - + %1 days %1 dagar - + 1 day 1 dag - + Today Idag @@ -5114,7 +5110,7 @@ Detta är ett nytt experimentellt läge. Om du bestämmer dig för att använda Säker gömd fillista - + Could not find local folder for %1 Kunde inte hitta lokal mapp för %1 @@ -5237,11 +5233,6 @@ Servern svarade med fel: %2 Resharing this folder is not allowed Vidaredelning av denna mapp är inte tillåtet - - - Copy internal link - Kopiera intern länk - Copy secure file drop link @@ -5253,6 +5244,11 @@ Servern svarade med fel: %2 Copy public link Kopiera publik länk + + + Copy internal link + Kopiera intern länk + Copy secure filedrop link @@ -5284,16 +5280,16 @@ Servern svarade med fel: %2 remaining time before lock expires Går ut om %1 minuterGår ut om %1 minuter - - - Open in browser - Öppna i webbläsare - Edit Ändra + + + Open in browser + Öppna i webbläsare + Resolve conflict … @@ -5826,10 +5822,10 @@ Servern svarade med fel: %2 - - - - + + + + Error updating metadata for a folder %1 Fel vid uppdatering av metadata för en mapp %1 @@ -5849,7 +5845,7 @@ Servern svarade med fel: %2 Kunde inte lägga till eller ta bort användare %1 för att komma åt mappen %2 - + Failed to unlock a folder. Misslyckades att låsa upp en mapp. @@ -5867,7 +5863,7 @@ Servern svarade med fel: %2 Initiera migreringen - + %1 notifications %1 aviseringar @@ -5883,17 +5879,17 @@ Servern svarade med fel: %2 Lös konflikt - + Rename file Byt namn på fil - + Open Nextcloud Assistant in browser Öppna Nextcloud Assistant i webbläsaren - + Open Nextcloud Talk in browser Öppna Nextcloud Talk i webbläsaren @@ -6027,29 +6023,19 @@ Servern svarade med fel: %2 - The Virtual filesystem feature does not support a drive as sync root - Funktionen virtuellt filsystem stöder inte en enhet som toppnivå för synkronisering + The Virtual filesystem feature requires a NTFS file system, %1 is using %2 + Det virtuella filsystemet kräver ett NTFS-filsystem, %1 använder %2 Please choose a different location. %1 isn't a NTFS file system. It doesn't support virtual files. - - - The Virtual filesystem feature requires a NTFS file system, %1 is using %2 - Det virtuella filsystemet kräver ett NTFS-filsystem, %1 använder %2 - Please choose a different location. %1 is a network drive. It doesn't support virtual files. - - - The Virtual filesystem feature is not supported on network drives - Funktionen virtuellt filsystem stöds inte på nätverksenheter - OCC::VfsDownloadErrorDialog @@ -6189,12 +6175,12 @@ Servern svarade med fel: %2 Servern på kontot %1 kör en version %2 som inte stöds. Att använda den här klienten med serverversioner som inte stöds är oprövat och potentiellt farligt. Fortsätt på egen risk. - + Terms of service Användarvillkor - + 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. Ditt konto %1 kräver att du accepterar din servers användarvillkor. Du kommer bli omdirigerad till %2 för att bekräfta att du har läst och håller med om villkoren. @@ -6270,23 +6256,23 @@ Servern svarade med fel: %2 Inga mappar valda för synkronisering - + %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: Synkronisering körs. - + macOS VFS for %1: Last sync was successful. macOS VFS för %1: Senaste synkroniseringen lyckades. - + macOS VFS for %1: A problem was encountered. macOS VFS för %1: Ett problem påträffades. @@ -6732,7 +6718,7 @@ Servern svarade med fel: %2 Sök efter användare eller grupper... - + Sharing is not available for this folder Delning är inte tillgängligt för den här mappen @@ -7143,11 +7129,6 @@ Servern svarade med fel: %2 downloading hämta - - - Downloading - Laddar ner - uploading @@ -7155,8 +7136,8 @@ Servern svarade med fel: %2 - Uploading - Laddar upp + Downloading + Laddar ner @@ -7165,8 +7146,8 @@ Servern svarade med fel: %2 - Deleting - Raderar + Uploading + Laddar upp @@ -7174,9 +7155,9 @@ Servern svarade med fel: %2 flyttar - - Moving - Flyttar + + Deleting + Raderar @@ -7185,26 +7166,31 @@ Servern svarade med fel: %2 - Ignoring - Ignorerar + Moving + Flyttar error fel + + + Ignoring + Ignorerar + updating local metadata uppdaterar lokala metadata - + Updating local metadata Uppdaterar lokal metadata - + Updating local virtual files metadata Uppdaterar lokala virtuella filers metadata @@ -7363,19 +7349,6 @@ Servern svarade med fel: %2 Rensa statusmeddelandemenyn - - OCC::FormatWarningsWizardPage - - - <b>Warning:</b> %1 - <b>Varning:</b> %1 - - - - <b>Warning:</b> - <b>Varning:</b> - - OCC::AbstractPropagateRemoteDeleteEncrypted @@ -7389,6 +7362,19 @@ Servern svarade med fel: %2 "%1 kunde inte låsa upp den krypterade mappen %2". + + OCC::FormatWarningsWizardPage + + + <b>Warning:</b> %1 + <b>Varning:</b> %1 + + + + <b>Warning:</b> + <b>Varning:</b> + + OCC::OAuth diff --git a/translations/client_th.ts b/translations/client_th.ts index 295d2fed7dd4e..388c0cb742f9d 100644 --- a/translations/client_th.ts +++ b/translations/client_th.ts @@ -172,13 +172,13 @@ - + Resume sync for all - + Pause sync for all @@ -193,32 +193,32 @@ - + Settings - + Exit - + Current account avatar - + Current account status is online - + Current account status is do not disturb - + Account switcher and settings menu @@ -307,17 +307,17 @@ FileProviderEvictionDialog - + Evict materialised files - + Materialised items - + Reload @@ -493,17 +493,17 @@ MainWindow - + Nextcloud desktop main dialog - + Unified search results list - + New activities @@ -553,13 +553,13 @@ Should an account import be attempted? - + %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? @@ -572,12 +572,12 @@ Should the account be imported? - + Import - + Skip @@ -672,12 +672,12 @@ Should the account be imported? เข้ารหัสโฟลเดอร์ - + 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> @@ -708,17 +708,17 @@ Should the account be imported? คำเตือน - + 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 @@ -972,7 +972,7 @@ This action will abort any currently running synchronization. ไม่มีการเชื่อมต่อไปยัง %1 ที่ %2 - + Unable to connect to %1. @@ -982,7 +982,7 @@ This action will abort any currently running synchronization. การกำหนดค่าเซิร์ฟเวอร์ผิดพลาด: %1 ที่ %2 - + You need to accept the terms of service @@ -1012,7 +1012,7 @@ This action will abort any currently running synchronization. มีบางโฟลเดอร์ที่ไม่ถูกซิงโครไนซ์เพราะมีขนาดใหญ่เกินไป หรือเป็นพื้นที่จัดเก็บข้อมูลภายนอก: - + There are folders that have grown in size beyond %1MB: %2 @@ -1214,34 +1214,39 @@ This action will abort any currently running synchronization. ดำเนินการต่อ - + + Quit %1 + ออกจาก %1 + + + %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. @@ -1257,11 +1262,6 @@ This action will abort any currently running synchronization. There was an error while accessing the configuration file at %1. Please make sure the file can be accessed by your system account. - - - Quit %1 - ออกจาก %1 - OCC::AuthenticationDialog @@ -1726,13 +1726,13 @@ This action will abort any currently running synchronization. - - + + Encrypted metadata setup error! - + Encrypted metadata setup error: initial signature from server is empty. @@ -2282,28 +2282,28 @@ If this was an accident and you decide to keep your files, they will be re-synce เก็บไฟล์ไว้ - + 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? @@ -2327,41 +2327,41 @@ 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 @@ -2432,32 +2432,32 @@ Alternatively, you can restore all deleted files by downloading them from the se กำลังเตรียมการซิงค์ - + 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 @@ -2501,16 +2501,6 @@ Alternatively, you can restore all deleted files by downloading them from the se No valid folder selected! เลือกโฟลเดอร์ไม่ถูกต้อง! - - - The folder %1 is used in a folder sync connection! - - - - - Please choose a different location. The selected folder isn't valid. - - The selected path does not exist! @@ -2521,17 +2511,37 @@ Alternatively, you can restore all deleted files by downloading them from the se The selected path is not a folder! เส้นทางที่เลือกไม่ใช่โฟลเดอร์! + + + You have no permission to write to the selected folder! + คุณไม่มีสิทธิ์ที่จะเขียนไปยังโฟลเดอร์ที่เลือก! + + + + The local folder %1 already contains a folder used in a folder sync connection. Please pick another one! + โฟลเดอร์ต้นทาง %1 มีโฟลเดอร์ที่ใช้ในการเชื่อมต่อโฟลเดอร์ซิงค์อยู่แล้ว กรุณาเลือกโฟลเดอร์อื่น! + + + + The local folder %1 is already contained in a folder used in a folder sync connection. Please pick another one! + โฟลเดอร์ต้นทาง %1 มีอยู่ในโฟลเดอร์ที่ถูกใช้ในการเชื่อมต่อโฟลเดอร์ซิงค์อยู่แล้ว กรุณาเลือกโฟลเดอร์อื่น! + + + + There is already a sync from the server to this local folder. Please pick another local folder! + มีการซิงค์จากเซิร์ฟเวอร์มายังโฟลเดอร์ต้นทางนี้แล้ว กรุณาเลือกโฟลเดอร์ต้นทางอื่น! + + + + 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. - - - You have no permission to write to the selected folder! - คุณไม่มีสิทธิ์ที่จะเขียนไปยังโฟลเดอร์ที่เลือก! - Please choose a different location. The path %1 doesn't exist. @@ -2549,26 +2559,11 @@ Alternatively, you can restore all deleted files by downloading them from the se folder location - - - The local folder %1 already contains a folder used in a folder sync connection. Please pick another one! - โฟลเดอร์ต้นทาง %1 มีโฟลเดอร์ที่ใช้ในการเชื่อมต่อโฟลเดอร์ซิงค์อยู่แล้ว กรุณาเลือกโฟลเดอร์อื่น! - - - - The local folder %1 is already contained in a folder used in a folder sync connection. Please pick another one! - โฟลเดอร์ต้นทาง %1 มีอยู่ในโฟลเดอร์ที่ถูกใช้ในการเชื่อมต่อโฟลเดอร์ซิงค์อยู่แล้ว กรุณาเลือกโฟลเดอร์อื่น! - Please choose a different location. %1 is already contained in a folder used as a sync folder. - - - There is already a sync from the server to this local folder. Please pick another local folder! - มีการซิงค์จากเซิร์ฟเวอร์มายังโฟลเดอร์ต้นทางนี้แล้ว กรุณาเลือกโฟลเดอร์ต้นทางอื่น! - Please choose a different location. %1 is already being used as a sync folder for %2. @@ -2576,7 +2571,7 @@ Alternatively, you can restore all deleted files by downloading them from the se - + 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. @@ -2681,12 +2676,12 @@ For advanced users: this issue might be related to multiple sync database files กำลังคืนค่าการเปลี่ยนแปลง - + 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'" @@ -2704,7 +2699,7 @@ For advanced users: this issue might be related to multiple sync database files , - + Download %1/s Example text: "Download 24Kb/s" (%1 is replaced by 24Kb (translated)) @@ -2721,7 +2716,7 @@ For advanced users: this issue might be related to multiple sync database files ↓ %1/วิ - + Upload %1/s Example text: "Upload 24Kb/s" (%1 is replaced by 24Kb (translated)) @@ -2772,12 +2767,12 @@ For advanced users: this issue might be related to multiple sync database files ไฟล์ที่ %1 จาก %2 - + File %1 of %2 - + About to start syncing @@ -3143,7 +3138,7 @@ For advanced users: this issue might be related to multiple sync database files - + Show chat notification dialogs. @@ -3182,17 +3177,17 @@ Note that this selects only what pool upgrades are taken from, and that there ar - + daily - + enterprise - + - beta: contains versions with new features that may not be tested thoroughly - daily: contains versions created daily only for testing and development @@ -3201,7 +3196,7 @@ 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. @@ -3209,12 +3204,12 @@ 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 @@ -4254,30 +4249,30 @@ This is a new, experimental mode. If you decide to use it, please report any iss - + 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. @@ -4332,22 +4327,22 @@ This is a new, experimental mode. If you decide to use it, please report any iss - + 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). @@ -4382,7 +4377,7 @@ This is a new, experimental mode. If you decide to use it, please report any iss - + Could not upload file, because it is open in "%1". @@ -4465,18 +4460,18 @@ This is a new, experimental mode. If you decide to use it, please report any iss - - - - - - + + + + + + The folder %1 cannot be made read-only: %2 - - + + unknown exception @@ -4650,12 +4645,6 @@ This is a new, experimental mode. If you decide to use it, please report any iss File %1 downloaded but it resulted in a local file name clash! - - - - Could not get file %1 from local DB - - @@ -4663,6 +4652,13 @@ This is a new, experimental mode. If you decide to use it, please report any iss could not get file %1 from local DB + + + + + Could not get file %1 from local DB + + @@ -4764,13 +4760,13 @@ This is a new, experimental mode. If you decide to use it, please report any iss รหัส HTTP ที่ส่งคืนจากเซิร์ฟเวอร์ไม่ถูกต้อง คาดว่าจะได้รับรหัส 201 แต่ได้รับ "%1 %2" - - Could not get file %1 from local DB + + could not get file %1 from local DB - - could not get file %1 from local DB + + Could not get file %1 from local DB @@ -5021,7 +5017,7 @@ This is a new, experimental mode. If you decide to use it, please report any iss OCC::ShareManager - + Error @@ -5029,17 +5025,17 @@ This is a new, experimental mode. If you decide to use it, please report any iss OCC::ShareModel - + %1 days - + 1 day - + Today @@ -5069,7 +5065,7 @@ This is a new, experimental mode. If you decide to use it, please report any iss - + Could not find local folder for %1 @@ -5190,11 +5186,6 @@ Server replied with error: %2 Resharing this folder is not allowed - - - Copy internal link - - Copy secure file drop link @@ -5206,6 +5197,11 @@ Server replied with error: %2 Copy public link + + + Copy internal link + + Copy secure filedrop link @@ -5238,13 +5234,13 @@ Server replied with error: %2 - - Open in browser + + Edit - - Edit + + Open in browser @@ -5778,10 +5774,10 @@ Server replied with error: %2 - - - - + + + + Error updating metadata for a folder %1 @@ -5801,7 +5797,7 @@ Server replied with error: %2 - + Failed to unlock a folder. @@ -5819,7 +5815,7 @@ Server replied with error: %2 - + %1 notifications @@ -5835,17 +5831,17 @@ Server replied with error: %2 - + Rename file - + Open Nextcloud Assistant in browser - + Open Nextcloud Talk in browser @@ -5979,7 +5975,7 @@ Server replied with error: %2 - The Virtual filesystem feature does not support a drive as sync root + The Virtual filesystem feature requires a NTFS file system, %1 is using %2 @@ -5987,21 +5983,11 @@ Server replied with error: %2 Please choose a different location. %1 isn't a NTFS file system. It doesn't support virtual files. - - - The Virtual filesystem feature requires a NTFS file system, %1 is using %2 - - Please choose a different location. %1 is a network drive. It doesn't support virtual files. - - - The Virtual filesystem feature is not supported on network drives - - OCC::VfsDownloadErrorDialog @@ -6141,12 +6127,12 @@ Server replied with error: %2 - + 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. @@ -6222,23 +6208,23 @@ Server replied with error: %2 ไม่ได้กำหนดค่าโฟลเดอร์ที่จะซิงค์ - + %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. @@ -6684,7 +6670,7 @@ Server replied with error: %2 - + Sharing is not available for this folder @@ -7095,11 +7081,6 @@ Server replied with error: %2 downloading กำลังดาวน์โหลด - - - Downloading - - uploading @@ -7107,7 +7088,7 @@ Server replied with error: %2 - Uploading + Downloading @@ -7117,7 +7098,7 @@ Server replied with error: %2 - Deleting + Uploading @@ -7126,8 +7107,8 @@ Server replied with error: %2 กำลังย้าย - - Moving + + Deleting @@ -7137,7 +7118,7 @@ Server replied with error: %2 - Ignoring + Moving @@ -7145,18 +7126,23 @@ Server replied with error: %2 error ข้อผิดพลาด + + + Ignoring + + updating local metadata กำลังอัปเดตเมตาดาต้าต้นทาง - + Updating local metadata - + Updating local virtual files metadata @@ -7315,19 +7301,6 @@ Server replied with error: %2 ล้างเมนูข้อความสถานะ - - OCC::FormatWarningsWizardPage - - - <b>Warning:</b> %1 - <b>คําเตือน:</b> %1 - - - - <b>Warning:</b> - <b>คําเตือน:</b> - - OCC::AbstractPropagateRemoteDeleteEncrypted @@ -7341,6 +7314,19 @@ Server replied with error: %2 "%1 ไม่สามารถปลดล็อกโฟลเดอร์เข้ารหัส %2" + + OCC::FormatWarningsWizardPage + + + <b>Warning:</b> %1 + <b>คําเตือน:</b> %1 + + + + <b>Warning:</b> + <b>คําเตือน:</b> + + OCC::OAuth diff --git a/translations/client_tr.ts b/translations/client_tr.ts index 40aca60d232f1..87dcd4dc8d121 100644 --- a/translations/client_tr.ts +++ b/translations/client_tr.ts @@ -172,13 +172,13 @@ - + Resume sync for all Tümünü eşitlemeyi sürdür - + Pause sync for all Tümünü eşitlemeyi duraklat @@ -193,32 +193,32 @@ Yeni hesap ekle - + Settings Ayarlar - + Exit Çık - + Current account avatar Geçerli hesap görseli - + Current account status is online Hesap çevrim içi durumda - + Current account status is do not disturb Hesap rahatsız etmeyin durumunda - + Account switcher and settings menu Hesap değiştirici ve ayarlar menüsü @@ -307,17 +307,17 @@ FileProviderEvictionDialog - + Evict materialised files Sanal olmayan dosyaları ayır - + Materialised items Sanal olmayan ögeler - + Reload Yeniden yükle @@ -493,17 +493,17 @@ MainWindow - + Nextcloud desktop main dialog Nextcloud masaüstü ana penceresi - + Unified search results list Birleşik arama sonuçları listesi - + New activities Yeni işlemler @@ -554,14 +554,14 @@ Should an account import be attempted? Hesabın içe aktarılması denensin mi? - + %1 accounts were detected from a legacy desktop client. Should the accounts be imported? %1 hesap eski masaüstü istemcisini kullanıyor. Bu hesaplar içe aktarılsın mı? - + 1 account was detected from a legacy desktop client. Should the account be imported? 1 hesap eski masaüstü istemcisini kullanıyor. @@ -575,12 +575,12 @@ Bu hesap içe aktarılsın mı? Eski içe aktarma - + Import İçe aktar - + Skip Atla @@ -675,12 +675,12 @@ Bu hesap içe aktarılsın mı? Klasör şifrelensin - + End-to-end Encryption Uçtan uca şifreleme - + 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> Bu işlem, klasörünüzü ve içindeki tüm dosyaları şifreleyecek. Bu dosyalara artık şifreleme anımsatma anahtarınız olmadan erişilemeyecek. @@ -712,17 +712,17 @@ Bu hesap içe aktarılsın mı? Uyarı - + Please wait for the folder to sync before trying to encrypt it. Lütfen klasörü şifrelemeye çalışmadan önce eşitlenmesini bekleyin. - + The folder has a minor sync problem. Encryption of this folder will be possible once it has synced successfully Klasörde küçük bir eşitleme sorunu var. Eşitleme tamamlandıktan sonra bu klasör şifrelenebilecek - + The folder has a sync error. Encryption of this folder will be possible once it has synced successfully Klasörde bir eşitleme sorunu var. Eşitleme tamamlandıktan sonra bu klasör şifrelenebilecek @@ -978,7 +978,7 @@ Bu işlem şu anda yürütülmekte olan eşitleme işlemlerini durdurur.%1 ile %2 üzerinde bağlantı yok. - + Unable to connect to %1. %1 ile bağlantı kurulamadı. @@ -988,7 +988,7 @@ Bu işlem şu anda yürütülmekte olan eşitleme işlemlerini durdurur.Sunucu yapılandırma sorunu: %1 ile %2. - + You need to accept the terms of service Hizmet koşullarını kabul etmelisiniz @@ -1018,7 +1018,7 @@ Bu işlem şu anda yürütülmekte olan eşitleme işlemlerini durdurur.Çok büyük oldukları için ya da dış depolama alanında bulundukları için eşitlenmeyen klasörler var: - + There are folders that have grown in size beyond %1MB: %2 Boyutu %1MB değerini aşan klasörler var: %2 @@ -1220,34 +1220,39 @@ Bu işlem şu anda yürütülmekte olan eşitleme işlemlerini durdurur.Sürdür - + + Quit %1 + %1 uygulamasından çık + + + %1 accounts number of accounts imported %1 hesap - + 1 account 1 hesap - + %1 folders number of folders imported %1 klasör - + 1 folder 1 klasör - + Legacy import Eskileri içe aktarma - + Imported %1 and %2 from a legacy desktop client. %3 number of accounts and folders imported. list of users. @@ -1264,11 +1269,6 @@ Bu işlem şu anda yürütülmekte olan eşitleme işlemlerini durdurur.There was an error while accessing the configuration file at %1. Please make sure the file can be accessed by your system account. %1 üzerindeki yapılandırma dosyasına erişilirken bir sorun çıktı. Lütfen sistem hesabınızın yapılandırma dosyasına erişme izinlerinin olduğundan emin olun. - - - Quit %1 - %1 uygulamasından çık - OCC::AuthenticationDialog @@ -1733,13 +1733,13 @@ Bu işlem şu anda yürütülmekte olan eşitleme işlemlerini durdurur.Sunucu hatası: PROPFIND yanıtı XML biçiminde değil! - - + + Encrypted metadata setup error! Şifrelenmiş üst veri kurulumu sorunu! - + Encrypted metadata setup error: initial signature from server is empty. Şifrelenmiş üst veri kurulum hatası: Sunucudan gelen ilk imza boş. @@ -2296,29 +2296,29 @@ Bu işlemi yanlışlıkla yaptıysanız ve dosyalarınızı korumak istiyorsanı Dosyalar korunsun - + A folder has surpassed the set folder size limit of %1MB: %2. %3 Bir klasörün boyutu %1MB olan klasör boyutu sınırını aştı : %2. %3 - + Keep syncing Eşitlemeyi sürdür - + Stop syncing Eşitlemeyi durdur - + The folder %1 has surpassed the set folder size limit of %2MB. %1 klasörünün boyutu %2MB olan klasör boyutu sınırını aştı. - + Would you like to stop syncing this folder? Bu klasörün eşitlenmesini durdurmak ister misiniz? @@ -2344,12 +2344,12 @@ This means that the synchronization client might not upload local changes immedi Bunun sonucunda eşitleme istemcisi yerel değişiklikleri anında yükleyemez. Onun yerine yalnızca yerel değişiklikleri tarar ve aralıklarla yükler (varsayılan olarak iki saatte bir). - + Virtual file download failed with code "%1", status "%2" and error message "%3" Sanal dosya indirilemedi. Kod: "%1" Durum: "%2" Hata iletisi: "%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. @@ -2358,7 +2358,7 @@ Bu silme işlemlerinin tamamlanmasını isteyip istemediğinizi onaylayın. Bir yanlışlık varsa, silinen tüm dosyaları '%1' klasöründen sunucuya geri yükleyebilirsiniz. - + 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. @@ -2367,22 +2367,22 @@ Bu silme işlemlerinin tamamlanmasını isteyip istemediğinizi onaylayın. Bir yanlışlık varsa, silinen tüm dosyaları sunucudan indirerek geri yükleyebilirsiniz. - + Remove all files? Tüm dosyalar silinsin mi? - + Proceed with Deletion Silme işlemini tamamla - + Restore Files to Server Dosyaları sunucuya geri yükle - + Restore Files from Server Dosyaları sunucudan geri yükle @@ -2453,32 +2453,32 @@ Bir yanlışlık varsa, silinen tüm dosyaları sunucudan indirerek geri yükley Eşitleme için hazırlanılıyor. - + Syncing %1 of %2 (A few seconds left) %1 / %2 eşitleniyor (birkaç saniye kaldı) - + Syncing %1 of %2 (%3 left) %1 / %2 eşitleniyor (%3 kaldı) - + Syncing %1 of %2 %1 / %2 eşitleniyor - + Syncing %1 (A few seconds left) %1 eşitleniyor (birkaç saniye kaldı) - + Syncing %1 (%2 left) %1 eşitleniyor (%2 kaldı) - + Syncing %1 %1 eşitleniyor @@ -2522,16 +2522,6 @@ Bir yanlışlık varsa, silinen tüm dosyaları sunucudan indirerek geri yükley No valid folder selected! Geçerli bir klasör seçilmemiş! - - - The folder %1 is used in a folder sync connection! - %1 klasörü bir klasör eşitleme bağlantısında kullanılıyor! - - - - Please choose a different location. The selected folder isn't valid. - - The selected path does not exist! @@ -2542,17 +2532,37 @@ Bir yanlışlık varsa, silinen tüm dosyaları sunucudan indirerek geri yükley The selected path is not a folder! Seçilmiş yol bir klasör değil! + + + You have no permission to write to the selected folder! + Seçilmiş klasöre yazma izniniz yok! + + + + The local folder %1 already contains a folder used in a folder sync connection. Please pick another one! + %1 yerel klasöründe eşitleme için kullanılan bir klasör zaten var. Lütfen başka bir klasör seçin! + + + + The local folder %1 is already contained in a folder used in a folder sync connection. Please pick another one! + %1 yerel klasörü zaten eşitleme için kullanılan bir klasörün içinde. Lütfen başka bir klasör seçin! + + + + There is already a sync from the server to this local folder. Please pick another local folder! + Sunucu ile bu yerel klasör zaten eşitleniyor. Lütfen başka bir yerel klasör seçin! + + + + 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. - - - You have no permission to write to the selected folder! - Seçilmiş klasöre yazma izniniz yok! - Please choose a different location. The path %1 doesn't exist. @@ -2570,26 +2580,11 @@ Bir yanlışlık varsa, silinen tüm dosyaları sunucudan indirerek geri yükley folder location - - - The local folder %1 already contains a folder used in a folder sync connection. Please pick another one! - %1 yerel klasöründe eşitleme için kullanılan bir klasör zaten var. Lütfen başka bir klasör seçin! - - - - The local folder %1 is already contained in a folder used in a folder sync connection. Please pick another one! - %1 yerel klasörü zaten eşitleme için kullanılan bir klasörün içinde. Lütfen başka bir klasör seçin! - Please choose a different location. %1 is already contained in a folder used as a sync folder. - - - There is already a sync from the server to this local folder. Please pick another local folder! - Sunucu ile bu yerel klasör zaten eşitleniyor. Lütfen başka bir yerel klasör seçin! - Please choose a different location. %1 is already being used as a sync folder for %2. @@ -2597,7 +2592,7 @@ Bir yanlışlık varsa, silinen tüm dosyaları sunucudan indirerek geri yükley - + 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. @@ -2705,12 +2700,12 @@ Uzman kullanıcılar için: Bu sorun, bir klasörde bulunan birden fazla eşitle Değişiklikler denkleştiriliyor - + Syncing local and remote changes Yerel ve uzak değişiklikler eşitleniyor - + %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 … @@ -2728,7 +2723,7 @@ Uzman kullanıcılar için: Bu sorun, bir klasörde bulunan birden fazla eşitle , - + Download %1/s Example text: "Download 24Kb/s" (%1 is replaced by 24Kb (translated)) İndirme %1/s @@ -2745,7 +2740,7 @@ Uzman kullanıcılar için: Bu sorun, bir klasörde bulunan birden fazla eşitle ↓ %1/s - + Upload %1/s Example text: "Upload 24Kb/s" (%1 is replaced by 24Kb (translated)) Yükleme %1/s @@ -2796,12 +2791,12 @@ Uzman kullanıcılar için: Bu sorun, bir klasörde bulunan birden fazla eşitle dosya %1 / %2 - + File %1 of %2 Dosya %1 / %2 - + About to start syncing Eşitleme başlamak üzere @@ -3167,7 +3162,7 @@ Uzman kullanıcılar için: Bu sorun, bir klasörde bulunan birden fazla eşitle İlgilenmeniz gereken sunucu bildirimleri. - + Show chat notification dialogs. Sohbet bildirimi pencerelerini görüntüler. @@ -3208,17 +3203,17 @@ Note that this selects only what pool upgrades are taken from, and that there ar Bu seçenek yalnızca güncellemelerin hangi havuzdan alınacağını belirler. Güncelleme sonrası önceki sürüme geri dönülemeyeceğini unutmayın. Genellikle beta kanalından kararlı kanala geri dönmek için kurulu olan beta sürümünden daha yeni bir kararlı sürümün yayınlanmasını beklemeniz gerekeceğinden bu işlemin hemen gerçekleşmeyeceğini unutmayın. - + daily Günlük - + enterprise Kurumsal - + - beta: contains versions with new features that may not be tested thoroughly - daily: contains versions created daily only for testing and development @@ -3230,7 +3225,7 @@ Downgrading versions is not possible immediately: changing from beta to stable m Sürümler hemen düşürülemez: Beta sürümünden Kararlı sürüme geçmek için yeni bir kararlı sürümün yayınlanması beklenmelidir. - + - enterprise: contains stable versions for customers. Downgrading versions is not possible immediately: changing from stable to enterprise means waiting for the new enterprise version. @@ -3240,12 +3235,12 @@ Downgrading versions is not possible immediately: changing from stable to enterp Sürümler hemen düşürülemez: Kararlı sürümünden Enterprise sürüme geçmek için yeni bir kararlı sürümün yayınlanması beklenmelidir. - + Changing update channel? Güncelleme kanalı değiştirilsin mi? - + The channel determines which upgrades will be offered to install: - stable: contains tested versions considered reliable @@ -4298,30 +4293,30 @@ Bu yeni ve deneysel bir özelliktir. Kullanmaya karar verirseniz, lütfen karş Bu dosya adı bu dosya sisteminde ayırtılmış bir ad olduğundan kullanılamaz. - + Folder name of folder entity to use when warning about invalid name Klasör - + File name of folder entity to use when warning about invalid name Dosya - + %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 "%2" karakterinin bulunduğu %1 dosya adı bu dosya sisteminde desteklenmiyor. - + %1 name contains at least one invalid character %1 adında en az bir geçersiz karakter bulunuyor - + %1 name is a reserved name on this file system. %1 dosya adı bu dosya sisteminde ayrılmış ve kullanılamaz. @@ -4376,22 +4371,22 @@ Bu yeni ve deneysel bir özelliktir. Kullanmaya karar verirseniz, lütfen karş Dosya adı sunucu üzerinde kara listeye alınmış. - + Reason: the entire filename is forbidden. Nedeni: Dosya adına tümüyle izin verilmiyor. - + Reason: the filename has a forbidden base name (filename start). Nedeni: Dosya adının temel adına (dosya adının başlangıcı) izin verilmiyor. - + Reason: the file has a forbidden extension (.%1). Nedeni: Dosyanın uzantısına izin verilmiyor (.%1). - + Reason: the filename contains a forbidden character (%1). Nedeni: Dosya adında izin verilmeyen bir karakter var (%1). @@ -4426,7 +4421,7 @@ Bu yeni ve deneysel bir özelliktir. Kullanmaya karar verirseniz, lütfen karş Değiştirilme zamanı geçersiz olduğundan eşitlenemedi - + Could not upload file, because it is open in "%1". Dosya "%1" içinde açık olduğundan yüklenemedi. @@ -4509,18 +4504,18 @@ Bu yeni ve deneysel bir özelliktir. Kullanmaya karar verirseniz, lütfen karş Değiştirilme zamanı geçersiz olduğundan üst veriler yüklenirken sorun çıktı - - - - - - + + + + + + The folder %1 cannot be made read-only: %2 %1 klasörü salt okunur yapılamaz: %2 - - + + unknown exception bilinmeyen bir sorun çıktı @@ -4694,12 +4689,6 @@ Bu yeni ve deneysel bir özelliktir. Kullanmaya karar verirseniz, lütfen karş File %1 downloaded but it resulted in a local file name clash! %1 dosyası indirildi ancak adı yerel bir dosya ile çakışıyor! - - - - Could not get file %1 from local DB - %1 dosyası yerel veri tabanından alınamadı - @@ -4707,6 +4696,13 @@ Bu yeni ve deneysel bir özelliktir. Kullanmaya karar verirseniz, lütfen karş could not get file %1 from local DB %1 dosyası yerel veri tabanından alınamadı + + + + + Could not get file %1 from local DB + %1 dosyası yerel veri tabanından alınamadı + @@ -4808,13 +4804,13 @@ Bu yeni ve deneysel bir özelliktir. Kullanmaya karar verirseniz, lütfen karş Sunucudan alınan HTTP kodu yanlış. 201 bekleniyordu, ancak "%1 %2" alındı. - - Could not get file %1 from local DB + + could not get file %1 from local DB %1 dosyası yerel veri tabanından alınamadı - - could not get file %1 from local DB + + Could not get file %1 from local DB %1 dosyası yerel veri tabanından alınamadı @@ -5065,7 +5061,7 @@ Bu yeni ve deneysel bir özelliktir. Kullanmaya karar verirseniz, lütfen karş OCC::ShareManager - + Error Hata @@ -5073,17 +5069,17 @@ Bu yeni ve deneysel bir özelliktir. Kullanmaya karar verirseniz, lütfen karş OCC::ShareModel - + %1 days %1 gün - + 1 day 1 gün - + Today Bugün @@ -5113,7 +5109,7 @@ Bu yeni ve deneysel bir özelliktir. Kullanmaya karar verirseniz, lütfen karş Güvenli dosya bırakma - + Could not find local folder for %1 %1 için yerel klasör bulunamadı @@ -5236,11 +5232,6 @@ Sunucunun verdiği hata yanıtı: %2 Resharing this folder is not allowed Bu klasör yeniden paylaşılamaz - - - Copy internal link - İç bağlantıyı kopyala - Copy secure file drop link @@ -5252,6 +5243,11 @@ Sunucunun verdiği hata yanıtı: %2 Copy public link Herkese açık bağlantıyı kopyala + + + Copy internal link + İç bağlantıyı kopyala + Copy secure filedrop link @@ -5283,16 +5279,16 @@ Sunucunun verdiği hata yanıtı: %2 remaining time before lock expires %1 dakika sonra açılacak%1 dakika sonra açılacak - - - Open in browser - Tarayıcıda aç - Edit Düzenle + + + Open in browser + Tarayıcıda aç + Resolve conflict … @@ -5825,10 +5821,10 @@ Sunucunun verdiği hata yanıtı: %2 - - - - + + + + Error updating metadata for a folder %1 Bir klasörün üst verileri güncellenirken sorun çıktı %1 @@ -5848,7 +5844,7 @@ Sunucunun verdiği hata yanıtı: %2 %1 kullanıcısı %2 klasörü erişimine eklenemedi ya da kaldırılamadı - + Failed to unlock a folder. Bir klasörün kilidi açılamadı. @@ -5866,7 +5862,7 @@ Sunucunun verdiği hata yanıtı: %2 Aktarımı başlat - + %1 notifications %1 bildirim @@ -5882,17 +5878,17 @@ Sunucunun verdiği hata yanıtı: %2 Çakışmayı çöz - + Rename file Dosyayı yeniden adlandır - + Open Nextcloud Assistant in browser Tarayıcıda Nextcloud Assistant uygulamasını aç - + Open Nextcloud Talk in browser Tarayıcıda Nextcloud Konuş uygulamasını aç @@ -6026,29 +6022,19 @@ Sunucunun verdiği hata yanıtı: %2 - The Virtual filesystem feature does not support a drive as sync root - Sanal dosya sistemi özelliği bir sürücüyü eşitleme kök klasörü olarak desteklemiyor + The Virtual filesystem feature requires a NTFS file system, %1 is using %2 + Sanal dosya sistemi özelliği için NTFS dosya sistemi gereklidir. %1, %2 kullanıyor Please choose a different location. %1 isn't a NTFS file system. It doesn't support virtual files. - - - The Virtual filesystem feature requires a NTFS file system, %1 is using %2 - Sanal dosya sistemi özelliği için NTFS dosya sistemi gereklidir. %1, %2 kullanıyor - Please choose a different location. %1 is a network drive. It doesn't support virtual files. - - - The Virtual filesystem feature is not supported on network drives - Sanal dosya sistemi özelliği ağ sürücülerinde desteklenmiyor - OCC::VfsDownloadErrorDialog @@ -6188,12 +6174,12 @@ Sunucunun verdiği hata yanıtı: %2 %1 hesabındaki sunucu desteklenmeyen %2 sürümünü kullanıyor. Bu istemci desteklenmeyen sunucu sürümleri üzerinde denenmemiş olduğundan tehlikeli olabilir. Bu riski alıyorsanız ilerleyebilirsiniz. - + Terms of service Hizmet koşulları - + 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. Hesabınızdan %1 sunucunuzun hizmet koşullarını kabul etmeniz isteniyor. Hizmet koşulları okuyup kabul ettiğinizi onaylamak için %2 üzerine yönlendirileceksiniz. @@ -6269,23 +6255,23 @@ Sunucunun verdiği hata yanıtı: %2 Herhangi bir eşitleme klasörü yapılandırılmamış - + %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. %1 için macOS VFS: Eşitleniyor. - + macOS VFS for %1: Last sync was successful. %1 için macOS VFS: Son eşitleme sorunsuz tamamlandı. - + macOS VFS for %1: A problem was encountered. %1 için macOS VFS: Bir sorun çıktı. @@ -6731,7 +6717,7 @@ Sunucunun verdiği hata yanıtı: %2 Kullanıcı ya da grup ara… - + Sharing is not available for this folder Bu klasör için paylaşım kullanılamaz @@ -7142,11 +7128,6 @@ Sunucunun verdiği hata yanıtı: %2 downloading indiriliyor - - - Downloading - İndiriliyor - uploading @@ -7154,8 +7135,8 @@ Sunucunun verdiği hata yanıtı: %2 - Uploading - Yükleniyor + Downloading + İndiriliyor @@ -7164,8 +7145,8 @@ Sunucunun verdiği hata yanıtı: %2 - Deleting - Siliniyor + Uploading + Yükleniyor @@ -7173,9 +7154,9 @@ Sunucunun verdiği hata yanıtı: %2 taşınıyor - - Moving - Taşınıyor + + Deleting + Siliniyor @@ -7184,26 +7165,31 @@ Sunucunun verdiği hata yanıtı: %2 - Ignoring - Yok sayılıyor + Moving + Taşınıyor error sorun + + + Ignoring + Yok sayılıyor + updating local metadata yerel üst veriler güncelleniyor - + Updating local metadata Yerel üst veriler güncelleniyor - + Updating local virtual files metadata Yerel sanal dosyaların üst verileri güncelleniyor @@ -7362,19 +7348,6 @@ Sunucunun verdiği hata yanıtı: %2 Durum iletisini kaldırma menüsü - - OCC::FormatWarningsWizardPage - - - <b>Warning:</b> %1 - <b>Uyarı:</b> %1 - - - - <b>Warning:</b> - <b>Uyarı:</b> - - OCC::AbstractPropagateRemoteDeleteEncrypted @@ -7388,6 +7361,19 @@ Sunucunun verdiği hata yanıtı: %2 "%1, %2 şifrelenmiş klasörünün kilidini açamadı". + + OCC::FormatWarningsWizardPage + + + <b>Warning:</b> %1 + <b>Uyarı:</b> %1 + + + + <b>Warning:</b> + <b>Uyarı:</b> + + OCC::OAuth diff --git a/translations/client_ug.ts b/translations/client_ug.ts index 5efab73137637..5c1178c8f8c9f 100644 --- a/translations/client_ug.ts +++ b/translations/client_ug.ts @@ -172,13 +172,13 @@ - + Resume sync for all - + Pause sync for all @@ -193,32 +193,32 @@ - + Settings - + Exit - + Current account avatar - + Current account status is online - + Current account status is do not disturb - + Account switcher and settings menu @@ -307,17 +307,17 @@ FileProviderEvictionDialog - + Evict materialised files ماتېرىياللاشقان ھۆججەتلەرنى چىقىرىۋېتىش - + Materialised items ماتېرىياللاشتۇرۇلغان بۇيۇملار - + Reload قايتا يۈكلەڭ @@ -493,17 +493,17 @@ MainWindow - + Nextcloud desktop main dialog Nextcloud ئۈستەل يۈزى ئاساسىي دىئالوگى - + Unified search results list بىرلىككە كەلگەن ئىزدەش نەتىجىسى تىزىملىكى - + New activities يېڭى پائالىيەتلەر @@ -554,14 +554,14 @@ Should an account import be attempted? ھېسابات ئىمپورت قىلىشقا ئۇرۇنۇش كېرەكمۇ؟ - + %1 accounts were detected from a legacy desktop client. Should the accounts be imported? % 1 ھېسابات مىراس ئۈستەل يۈزى خېرىدارىدىن بايقالدى. ھېساباتلارنى ئىمپورت قىلىش كېرەكمۇ؟ - + 1 account was detected from a legacy desktop client. Should the account be imported? مىراس ئۈستەل يۈزى خېرىدارىدىن 1 ھېسابات بايقالدى. @@ -575,12 +575,12 @@ Should the account be imported? مىراس ئىمپورت - + Import ئەكىرىش - + Skip ئاتلاش @@ -675,12 +675,12 @@ Should the account be imported? ھۆججەت قىسقۇچنى مەخپىيلەشتۈرۈش - + 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> بۇ ھۆججەت قىسقۇچىڭىزنى ۋە ئۇنىڭدىكى بارلىق ھۆججەتلەرنى مەخپىيلەشتۈرىدۇ. شىفىرلاش mnemonic ئاچقۇچىڭىز بولمىسا بۇ ھۆججەتلەرنى ئەمدى زىيارەت قىلغىلى بولمايدۇ. @@ -712,17 +712,17 @@ Should the account be imported? ئاگاھلاندۇرۇش - + 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 ھۆججەت قىسقۇچتا ماس قەدەمدە خاتالىق بار. بۇ ھۆججەت قىسقۇچنى مەخپىيلەشتۈرۈش مۇۋەپپەقىيەتلىك ماس قەدەملەنگەندىن كېيىن مۇمكىن بولىدۇ @@ -978,7 +978,7 @@ This action will abort any currently running synchronization. % 2 دىكى% 1 گە ئۇلىنىش يوق. - + Unable to connect to %1. % 1 گە ئۇلىنالمىدى. @@ -988,7 +988,7 @@ This action will abort any currently running synchronization. مۇلازىمېتىر سەپلەش خاتالىقى:% 1 دىكى% 1. - + You need to accept the terms of service مۇلازىمەت شەرتلىرىنى قوبۇل قىلىشىڭىز كېرەك @@ -1018,7 +1018,7 @@ This action will abort any currently running synchronization. ماس كېلىدىغان ھۆججەت قىسقۇچلار بار ، چۈنكى ئۇلار بەك چوڭ ياكى تاشقى دۇكانلار: - + There are folders that have grown in size beyond %1MB: %2 چوڭلۇقى% 1MB دىن ئېشىپ كەتكەن قىسقۇچلار بار:% 2 @@ -1220,34 +1220,39 @@ This action will abort any currently running synchronization. داۋاملاشتۇر - + + Quit %1 + Quit% 1 + + + %1 accounts number of accounts imported % 1 ھېسابات - + 1 account 1 ھېسابات - + %1 folders number of folders imported % 1 ھۆججەت قىسقۇچ - + 1 folder 1 ھۆججەت قىسقۇچ - + Legacy import مىراس ئىمپورت - + Imported %1 and %2 from a legacy desktop client. %3 number of accounts and folders imported. list of users. @@ -1264,11 +1269,6 @@ This action will abort any currently running synchronization. There was an error while accessing the configuration file at %1. Please make sure the file can be accessed by your system account. % 1 دىكى سەپلىمە ھۆججىتىنى زىيارەت قىلغاندا خاتالىق كۆرۈلدى. ھۆججەتنى سىستېما ھېساباتىڭىز ئارقىلىق زىيارەت قىلىشقا كاپالەتلىك قىلىڭ. - - - Quit %1 - Quit% 1 - OCC::AuthenticationDialog @@ -1733,13 +1733,13 @@ This action will abort any currently running synchronization. مۇلازىمېتىر خاتالىقى: PROPFIND جاۋاب XML فورماتى ئەمەس! - - + + Encrypted metadata setup error! شىفىرلانغان مېتا سانلىق مەلۇمات تەڭشەش خاتالىقى! - + Encrypted metadata setup error: initial signature from server is empty. شىفىرلانغان مېتا سانلىق مەلۇمات تەڭشەش خاتالىقى: مۇلازىمېتىردىن دەسلەپكى ئىمزا قۇرۇق. @@ -2295,29 +2295,29 @@ If this was an accident and you decide to keep your files, they will be re-synce ھۆججەتلەرنى ساقلاڭ - + A folder has surpassed the set folder size limit of %1MB: %2. %3 قىسقۇچ بەلگىلەنگەن ھۆججەت قىسقۇچنىڭ چوڭلۇقى% 1MB دىن ئېشىپ كەتتى:% 2. % 3 - + Keep syncing ماسقەدەملەشنى داۋاملاشتۇرۇڭ - + Stop syncing ماسقەدەملەشنى توختىتىڭ - + The folder %1 has surpassed the set folder size limit of %2MB. % 1 ھۆججەت قىسقۇچ% 2MB لىق ھۆججەت قىسقۇچنىڭ چوڭلۇقىدىن ئېشىپ كەتتى. - + Would you like to stop syncing this folder? بۇ ھۆججەت قىسقۇچنى ماسقەدەملەشنى توختاتامسىز؟ @@ -2345,12 +2345,12 @@ 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" مەۋھۇم ھۆججەت چۈشۈرۈش «% 1» ، ھالەت «% 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. @@ -2359,7 +2359,7 @@ Alternatively, you can restore all deleted files by uploading from '%1&apos ئۇنىڭدىن باشقا ، '% 1' ھۆججەت قىسقۇچىدىن مۇلازىمېتىرغا يوللاش ئارقىلىق ئۆچۈرۈلگەن ھۆججەتلەرنىڭ ھەممىسىنى ئەسلىگە كەلتۈرەلەيسىز. - + 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. @@ -2368,22 +2368,22 @@ Alternatively, you can restore all deleted files by downloading them from the se ئۇنىڭدىن باشقا ، ئۆچۈرۈلگەن ھۆججەتلەرنىڭ ھەممىسىنى مۇلازىمېتىردىن چۈشۈرۈپ ئەسلىگە كەلتۈرەلەيسىز. - + Remove all files? بارلىق ھۆججەتلەرنى ئۆچۈرەمسىز؟ - + Proceed with Deletion ئۆچۈرۈش بىلەن داۋاملاشتۇرۇڭ - + Restore Files to Server ھۆججەتلەرنى مۇلازىمېتىرغا ئەسلىگە كەلتۈرۈڭ - + Restore Files from Server مۇلازىمېتىردىن ھۆججەتلەرنى ئەسلىگە كەلتۈرۈڭ @@ -2454,32 +2454,32 @@ Alternatively, you can restore all deleted files by downloading them from the se ماسقەدەملەشكە تەييارلىق قىلماقتا. - + Syncing %1 of %2 (A few seconds left) % 2 نىڭ% 1 ماسقەدەملىنىشى (بىر نەچچە سېكۇنت قالدى) - + Syncing %1 of %2 (%3 left) % 2 نىڭ% 1 نى ماسقەدەملەش (% 3 قالدى) - + Syncing %1 of %2 % 2 نىڭ% 1 نى ماسقەدەملەش - + Syncing %1 (A few seconds left) ماس قەدەم% 1 (بىر نەچچە سېكۇنت قالدى) - + Syncing %1 (%2 left) ماس قەدەم% 1 (% 2 سول) - + Syncing %1 ماس قەدەم% 1 @@ -2523,16 +2523,6 @@ Alternatively, you can restore all deleted files by downloading them from the se No valid folder selected! ئىناۋەتلىك ھۆججەت قىسقۇچ تاللانمىدى! - - - The folder %1 is used in a folder sync connection! - - - - - Please choose a different location. The selected folder isn't valid. - - The selected path does not exist! @@ -2543,17 +2533,37 @@ Alternatively, you can restore all deleted files by downloading them from the se The selected path is not a folder! تاللانغان يول ھۆججەت قىسقۇچ ئەمەس! + + + You have no permission to write to the selected folder! + تاللانغان ھۆججەت قىسقۇچقا يېزىش ھوقۇقىڭىز يوق! + + + + The local folder %1 already contains a folder used in a folder sync connection. Please pick another one! + يەرلىك قىسقۇچ% 1 ھۆججەت قىسقۇچ ماسقەدەملەشتە ئىشلىتىلىدىغان ھۆججەت قىسقۇچنى ئۆز ئىچىگە ئالىدۇ. باشقا بىرىنى تاللاڭ! + + + + The local folder %1 is already contained in a folder used in a folder sync connection. Please pick another one! + يەرلىك ھۆججەت قىسقۇچ% 1 ھۆججەت قىسقۇچ ماسقەدەملەشتە ئىشلىتىلىدىغان ھۆججەت قىسقۇچتا بار. باشقا بىرىنى تاللاڭ! + + + + There is already a sync from the server to this local folder. Please pick another local folder! + مۇلازىمېتىردىن بۇ يەرلىك ھۆججەت قىسقۇچقا ماسقەدەملەش بار. باشقا يەرلىك ھۆججەت قىسقۇچنى تاللاڭ! + + + + 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. - - - You have no permission to write to the selected folder! - تاللانغان ھۆججەت قىسقۇچقا يېزىش ھوقۇقىڭىز يوق! - Please choose a different location. The path %1 doesn't exist. @@ -2571,26 +2581,11 @@ Alternatively, you can restore all deleted files by downloading them from the se folder location - - - The local folder %1 already contains a folder used in a folder sync connection. Please pick another one! - يەرلىك قىسقۇچ% 1 ھۆججەت قىسقۇچ ماسقەدەملەشتە ئىشلىتىلىدىغان ھۆججەت قىسقۇچنى ئۆز ئىچىگە ئالىدۇ. باشقا بىرىنى تاللاڭ! - - - - The local folder %1 is already contained in a folder used in a folder sync connection. Please pick another one! - يەرلىك ھۆججەت قىسقۇچ% 1 ھۆججەت قىسقۇچ ماسقەدەملەشتە ئىشلىتىلىدىغان ھۆججەت قىسقۇچتا بار. باشقا بىرىنى تاللاڭ! - Please choose a different location. %1 is already contained in a folder used as a sync folder. - - - There is already a sync from the server to this local folder. Please pick another local folder! - مۇلازىمېتىردىن بۇ يەرلىك ھۆججەت قىسقۇچقا ماسقەدەملەش بار. باشقا يەرلىك ھۆججەت قىسقۇچنى تاللاڭ! - Please choose a different location. %1 is already being used as a sync folder for %2. @@ -2598,7 +2593,7 @@ Alternatively, you can restore all deleted files by downloading them from the se - + 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. @@ -2703,12 +2698,12 @@ For advanced users: this issue might be related to multiple sync database files ئۆزگەرتىشلەرنى ماسلاشتۇرۇش - + 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'" % 1% 2… @@ -2726,7 +2721,7 @@ For advanced users: this issue might be related to multiple sync database files , - + Download %1/s Example text: "Download 24Kb/s" (%1 is replaced by 24Kb (translated)) % 1 / s نى چۈشۈرۈڭ @@ -2743,7 +2738,7 @@ For advanced users: this issue might be related to multiple sync database files ↓% 1 / s - + Upload %1/s Example text: "Upload 24Kb/s" (%1 is replaced by 24Kb (translated)) % 1 / s نى يۈكلەڭ @@ -2794,12 +2789,12 @@ For advanced users: this issue might be related to multiple sync database files ھۆججەت% 1 نىڭ% 1 - + File %1 of %2 ھۆججەت% 1 نىڭ% 1 - + About to start syncing ماسقەدەملەشنى باشلىماقچى @@ -3165,7 +3160,7 @@ For advanced users: this issue might be related to multiple sync database files دىققەت قىلىشنى تەلەپ قىلىدىغان مۇلازىمېتىر ئۇقتۇرۇشى. - + Show chat notification dialogs. @@ -3206,17 +3201,17 @@ Note that this selects only what pool upgrades are taken from, and that there ar شۇنىڭغا دىققەت قىلىڭكى ، بۇ پەقەت كۆلچەكنىڭ يېڭىلىنىشىدىن ئېلىنغان ، ھەمدە تۆۋەنلەشنىڭ يوقلىقىنىلا تاللايدۇ: شۇڭلاشقا سىناق قانالدىن مۇقىم قانالغا قايتىشنى ئادەتتە دەرھال قىلغىلى بولمايدۇ ھەمدە نۆۋەتتىكى ئورنىتىلغان سىناقتىنمۇ يېڭى بولغان مۇقىم نەشرىنى ساقلاشنى كۆرسىتىدۇ. نەشرى. - + daily ھەر كۈنى - + enterprise كارخانا - + - beta: contains versions with new features that may not be tested thoroughly - daily: contains versions created daily only for testing and development @@ -3228,7 +3223,7 @@ 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. @@ -3238,12 +3233,12 @@ 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 @@ -4296,30 +4291,30 @@ This is a new, experimental mode. If you decide to use it, please report any iss ھۆججەت ئىسمى بۇ ھۆججەت سىستېمىسىدا ساقلانغان ئىسىم. - + 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 بۇ ھۆججەت سىستېمىسىدا "% 2" ھەرپنى ئۆز ئىچىگە ئالغان% 1 ئىسىم قوللىمايدۇ. - + %1 name contains at least one invalid character % 1 ئىسىم كەم دېگەندە بىر ئىناۋەتسىز ھەرپنى ئۆز ئىچىگە ئالىدۇ - + %1 name is a reserved name on this file system. % 1 ئىسىم بۇ ھۆججەت سىستېمىسىدا ساقلانغان ئىسىم. @@ -4374,22 +4369,22 @@ This is a new, experimental mode. If you decide to use it, please report any iss ھۆججەت ئىسمى مۇلازىمېتىردا قارا تىزىملىككە كىرگۈزۈلگەن. - + Reason: the entire filename is forbidden. سەۋەبى: پۈتكۈل ھۆججەت ئىسمى چەكلەنگەن. - + Reason: the filename has a forbidden base name (filename start). سەۋەبى: ھۆججەت نامىنىڭ چەكلەنگەن ئاساسى ئىسمى بار (ھۆججەت ئىسمى باشلاش). - + Reason: the file has a forbidden extension (.%1). سەۋەبى: ھۆججەتنىڭ چەكلەنگەن كېڭەيتىلمىسى بار (.% 1). - + Reason: the filename contains a forbidden character (%1). سەۋەبى: ھۆججەت نامىدا چەكلەنگەن ھەرپ (% 1) بار. @@ -4424,7 +4419,7 @@ This is a new, experimental mode. If you decide to use it, please report any iss ئۆزگەرتىش ۋاقتى ئىناۋەتسىز بولغاچقا ماسقەدەملىيەلمەيدۇ - + Could not upload file, because it is open in "%1". ھۆججەت يۈكلىيەلمىدى ، چۈنكى ئۇ «% 1» دە ئوچۇق. @@ -4507,18 +4502,18 @@ This is a new, experimental mode. If you decide to use it, please report any iss ئۆزگەرتىش ۋاقتى ئىناۋەتسىز بولغانلىقتىن مېتا سانلىق مەلۇماتنى يېڭىلاشتا خاتالىق بار - - - - - - + + + + + + The folder %1 cannot be made read-only: %2 % 1 ھۆججەت قىسقۇچنى ئوقۇشقىلا بولمايدۇ:% 2 - - + + unknown exception @@ -4692,12 +4687,6 @@ This is a new, experimental mode. If you decide to use it, please report any iss File %1 downloaded but it resulted in a local file name clash! ھۆججەت% 1 چۈشۈرۈلدى ، ئەمما يەرلىك ھۆججەت ئىسمى توقۇنۇشنى كەلتۈرۈپ چىقاردى! - - - - Could not get file %1 from local DB - - @@ -4705,6 +4694,13 @@ This is a new, experimental mode. If you decide to use it, please report any iss could not get file %1 from local DB يەرلىك DB دىن% 1 ھۆججەتكە ئېرىشەلمىدى + + + + + Could not get file %1 from local DB + + @@ -4805,16 +4801,16 @@ 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". مۇلازىمېتىر تەرىپىدىن قايتۇرۇلغان خاتا HTTP كودى. مۆلچەرلەنگەن 201 ، ئەمما «% 1% 2» گە ئېرىشتى. - - - Could not get file %1 from local DB - - could not get file %1 from local DB يەرلىك DB دىن% 1 ھۆججەتكە ئېرىشەلمىدى + + + Could not get file %1 from local DB + + Could not delete file record %1 from local DB @@ -5063,7 +5059,7 @@ This is a new, experimental mode. If you decide to use it, please report any iss OCC::ShareManager - + Error خاتالىق @@ -5071,17 +5067,17 @@ This is a new, experimental mode. If you decide to use it, please report any iss OCC::ShareModel - + %1 days - + 1 day - + Today @@ -5111,7 +5107,7 @@ This is a new, experimental mode. If you decide to use it, please report any iss بىخەتەر ھۆججەت چۈشۈرۈش - + Could not find local folder for %1 % 1 يەرلىك ھۆججەت قىسقۇچنى تاپالمىدى @@ -5234,11 +5230,6 @@ Server replied with error: %2 Resharing this folder is not allowed بۇ ھۆججەت قىسقۇچنى قايتا ئىشلىتىشكە بولمايدۇ - - - Copy internal link - ئىچكى ئۇلىنىشنى كۆچۈرۈڭ - Copy secure file drop link @@ -5250,6 +5241,11 @@ Server replied with error: %2 Copy public link ئاممىۋى ئۇلىنىشنى كۆچۈرۈڭ + + + Copy internal link + ئىچكى ئۇلىنىشنى كۆچۈرۈڭ + Copy secure filedrop link @@ -5281,16 +5277,16 @@ Server replied with error: %2 remaining time before lock expires - - - Open in browser - توركۆرگۈدە ئېچىڭ - Edit تەھرىر + + + Open in browser + توركۆرگۈدە ئېچىڭ + Resolve conflict … @@ -5823,10 +5819,10 @@ Server replied with error: %2 - - - - + + + + Error updating metadata for a folder %1 % 1 ھۆججەت قىسقۇچنىڭ مېتا سانلىق مەلۇماتلىرىنى يېڭىلاشتا خاتالىق @@ -5846,7 +5842,7 @@ Server replied with error: %2 % 2 ھۆججەت قىسقۇچنى زىيارەت قىلىش ئۈچۈن ئىشلەتكۈچى% 1 نى قوشالمىدى ياكى ئۆچۈرەلمىدى - + Failed to unlock a folder. ھۆججەت قىسقۇچنى ئېچىش مەغلۇب بولدى. @@ -5864,7 +5860,7 @@ Server replied with error: %2 - + %1 notifications % 1 ئۇقتۇرۇش @@ -5880,17 +5876,17 @@ Server replied with error: %2 توقۇنۇشنى ھەل قىلىڭ - + Rename file ھۆججەتنىڭ نامىنى ئۆزگەرتىش - + Open Nextcloud Assistant in browser توركۆرگۈدە Nextcloud ياردەمچىسىنى ئېچىڭ - + Open Nextcloud Talk in browser توركۆرگۈدە Nextcloud پاراڭنى ئېچىڭ @@ -6024,29 +6020,19 @@ Server replied with error: %2 - The Virtual filesystem feature does not support a drive as sync root - + The Virtual filesystem feature requires a NTFS file system, %1 is using %2 + مەۋھۇم ھۆججەت سىستېمىسى ئىقتىدارى NTFS ھۆججەت سىستېمىسىغا ئېھتىياجلىق ،% 1 بولسا% 2 نى ئىشلىتىۋاتىدۇ Please choose a different location. %1 isn't a NTFS file system. It doesn't support virtual files. - - - The Virtual filesystem feature requires a NTFS file system, %1 is using %2 - مەۋھۇم ھۆججەت سىستېمىسى ئىقتىدارى NTFS ھۆججەت سىستېمىسىغا ئېھتىياجلىق ،% 1 بولسا% 2 نى ئىشلىتىۋاتىدۇ - Please choose a different location. %1 is a network drive. It doesn't support virtual files. - - - The Virtual filesystem feature is not supported on network drives - - OCC::VfsDownloadErrorDialog @@ -6186,12 +6172,12 @@ Server replied with error: %2 % 1 ھېساباتىدىكى مۇلازىمېتىر قوللىمايدىغان نەشرىنى% 2 ئىجرا قىلىدۇ. قوللىمايدىغان مۇلازىمېتىر نەشرى بىلەن بۇ خېرىدارنى ئىشلىتىش سىناقتىن ئۆتمىگەن ۋە خەتەرلىك بولۇشى مۇمكىن. ئۆزىڭىزنىڭ خەتىرىگە قاراپ ئىلگىرىلەڭ. - + 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 گە قايتا نىشانلىنىسىز. @@ -6267,23 +6253,23 @@ Server replied with error: %2 ماس قەدەملىك ھۆججەت قىسقۇچ سەپلەنمىدى - + %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. % 1 ئۈچۈن macOS VFS: ماسقەدەملەش ئىجرا بولۇۋاتىدۇ. - + macOS VFS for %1: Last sync was successful. % 1 ئۈچۈن macOS VFS: ئاخىرقى ماسقەدەملەش مۇۋەپپەقىيەتلىك بولدى. - + macOS VFS for %1: A problem was encountered. % 1 ئۈچۈن macOS VFS: مەسىلە كۆرۈلدى. @@ -6729,7 +6715,7 @@ Server replied with error: %2 ئىشلەتكۈچى ياكى گۇرۇپپىلارنى ئىزدە… - + Sharing is not available for this folder بۇ قىسقۇچ ئۈچۈن ئورتاقلىشىش مۇمكىن ئەمەس @@ -7140,11 +7126,6 @@ Server replied with error: %2 downloading چۈشۈرۈش - - - Downloading - چۈشۈرۈش - uploading @@ -7152,8 +7133,8 @@ Server replied with error: %2 - Uploading - يۈكلەش + Downloading + چۈشۈرۈش @@ -7162,8 +7143,8 @@ Server replied with error: %2 - Deleting - ئۆچۈرۈش + Uploading + يۈكلەش @@ -7171,9 +7152,9 @@ Server replied with error: %2 يۆتكىلىش - - Moving - يۆتكىلىش + + Deleting + ئۆچۈرۈش @@ -7182,26 +7163,31 @@ Server replied with error: %2 - Ignoring - پەرۋا قىلماسلىق + Moving + يۆتكىلىش error خاتالىق + + + Ignoring + پەرۋا قىلماسلىق + updating local metadata يەرلىك مېتا سانلىق مەلۇماتنى يېڭىلاش - + Updating local metadata يەرلىك مېتا سانلىق مەلۇماتنى يېڭىلاش - + Updating local virtual files metadata يەرلىك مەۋھۇم ھۆججەتلەرنىڭ مېتا سانلىق مەلۇماتلىرىنى يېڭىلاش @@ -7360,19 +7346,6 @@ Server replied with error: %2 ھالەت ئۇچۇر تىزىملىكىنى تازىلاش - - OCC::FormatWarningsWizardPage - - - <b>Warning:</b> %1 - <b> ئاگاھلاندۇرۇش: </b>% 1 - - - - <b>Warning:</b> - <b> ئاگاھلاندۇرۇش: </b> - - OCC::AbstractPropagateRemoteDeleteEncrypted @@ -7386,6 +7359,19 @@ Server replied with error: %2 "% 1 شىفىرلانغان ھۆججەت قىسقۇچنى ئېچىش مەغلۇب بولدى". + + OCC::FormatWarningsWizardPage + + + <b>Warning:</b> %1 + <b> ئاگاھلاندۇرۇش: </b>% 1 + + + + <b>Warning:</b> + <b> ئاگاھلاندۇرۇش: </b> + + OCC::OAuth diff --git a/translations/client_uk.ts b/translations/client_uk.ts index 52e3e52d059c1..0142864896a08 100644 --- a/translations/client_uk.ts +++ b/translations/client_uk.ts @@ -172,13 +172,13 @@ - + Resume sync for all Відновити синхронізацію для всіх - + Pause sync for all Призупинити синхронізацію для всіх @@ -193,32 +193,32 @@ Додати новий обліковий запис - + Settings Налаштування - + Exit Вийти - + Current account avatar Піктограма поточного користувача - + Current account status is online Статус в мережі поточного користувача - + Current account status is do not disturb Поточний статус "не турбувати" - + Account switcher and settings menu Перемикання користувачів та меню налаштувань @@ -307,17 +307,17 @@ FileProviderEvictionDialog - + Evict materialised files Вилучити звантажені файли - + Materialised items Фізично присутні дані - + Reload Перезавантажити @@ -493,17 +493,17 @@ MainWindow - + Nextcloud desktop main dialog Діалогове вікно Nextcloud - + Unified search results list Результати пошуку - + New activities Нові події @@ -554,14 +554,14 @@ Should an account import be attempted? Чи спробувати імпортувати дані облікового запису? - + %1 accounts were detected from a legacy desktop client. Should the accounts be imported? %1 облікових записів знайдено із застарілого настільного клієнта. Чи імпортувати ці облікові записи? - + 1 account was detected from a legacy desktop client. Should the account be imported? 1 обліковий запис знайдено із застарілого настільного клієнта. @@ -575,12 +575,12 @@ Should the account be imported? Імпорт зі збереженням сумісности - + Import Імпорт - + Skip Пропустити @@ -675,12 +675,12 @@ Should the account be imported? Шифрувати каталог - + 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> Це призведе до шифрування вашого каталогу та всіх файлів в ньому. Ці файли більше не будуть доступні без парольної фрази-ключа. @@ -712,17 +712,17 @@ Should the account be imported? Увага - + 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 Виявлено проблему під час синхронізації каталогу. Шифрування цієї каталоги буде виконано лише після успішного завершення синхронізації. @@ -978,7 +978,7 @@ This action will abort any currently running synchronization. Відсутнє з'єднання між %2 та %1. - + Unable to connect to %1. Не вдалося з'єднатися із %1. @@ -988,7 +988,7 @@ This action will abort any currently running synchronization. Помилка у налаштуванні сервера: %1, див. %2. - + You need to accept the terms of service Потрібно прийняти умови користування @@ -1018,7 +1018,7 @@ This action will abort any currently running synchronization. Окремі каталоги не було синхронізовано, оскільки їхній розмір завеликий або розміщені у зовнішніх сховищах: - + There are folders that have grown in size beyond %1MB: %2 Виявлено %2 каталогів, розмір яких збільшився поза встановленим обмеженням %1MB @@ -1220,34 +1220,39 @@ This action will abort any currently running synchronization. Продовжити - + + Quit %1 + Вийти %1 + + + %1 accounts number of accounts imported %1 облікових записів - + 1 account 1 обліковий запис - + %1 folders number of folders imported %1 каталогів - + 1 folder 1 каталог - + Legacy import Імпорт застарілих записів - + Imported %1 and %2 from a legacy desktop client. %3 number of accounts and folders imported. list of users. @@ -1264,11 +1269,6 @@ This action will abort any currently running synchronization. There was an error while accessing the configuration file at %1. Please make sure the file can be accessed by your system account. Виявлено помилку під час отримання доступу до файлу конфігурації у %1. Будь ласка, пересвідчитеся, що присутній доступ до файлу у системного облікового запису. - - - Quit %1 - Вийти %1 - OCC::AuthenticationDialog @@ -1733,13 +1733,13 @@ This action will abort any currently running synchronization. Помилка серверу: PROPFIND reply is not XML formatted! - - + + Encrypted metadata setup error! Помилка з налаштуванням шифрування метаданих! - + Encrypted metadata setup error: initial signature from server is empty. Помилка під час налаштування зашифрованих метаданих: початкова сиґнатура, отримана від сервера, є порожньою. @@ -2295,29 +2295,29 @@ If this was an accident and you decide to keep your files, they will be re-synce Зберегти файли - + A folder has surpassed the set folder size limit of %1MB: %2. %3 Каталог %2 перевищив встановлене обмеження на розмір %1MB %3 - + Keep syncing Синхронізовувати - + Stop syncing Зупинити синхронізацію - + The folder %1 has surpassed the set folder size limit of %2MB. Каталог %1 перевищив встановлене обмеження на розмір %2MB. - + Would you like to stop syncing this folder? Призупинити синхронізацію цього каталогу? @@ -2345,12 +2345,12 @@ 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" Помилка звантаженння віртульного файлу: код "%1", статус "%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. @@ -2359,7 +2359,7 @@ Alternatively, you can restore all deleted files by uploading from '%1&apos Альтернативно ви можете відновити усі вилучені файли шляхом завантаженя з каталогу "%1" на сервер хмари. - + 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. @@ -2368,22 +2368,22 @@ Alternatively, you can restore all deleted files by downloading them from the se Альтернативно ви можете відновити усі вилучені файли шляхом їхнього звантаженя з сервера хмари. - + Remove all files? Дійсно вилучити всі файли? - + Proceed with Deletion Дійсно вилучити - + Restore Files to Server Відновити файли на сервері - + Restore Files from Server Відновити файли з сервера @@ -2454,32 +2454,32 @@ Alternatively, you can restore all deleted files by downloading them from the se Підготовка до синхронізації - + Syncing %1 of %2 (A few seconds left) Синхронізація %1 із %2 (залишилося декілька секунд) - + Syncing %1 of %2 (%3 left) Синхронізація %1 із %2 (залишилося ще %3) - + Syncing %1 of %2 Синхронізація %1 із %2 - + Syncing %1 (A few seconds left) Синхронізація %1 (залишилося декілька секунд) - + Syncing %1 (%2 left) Синхронізація %1 (залишилося ще %2) - + Syncing %1 Синхронізація %1 @@ -2523,16 +2523,6 @@ Alternatively, you can restore all deleted files by downloading them from the se No valid folder selected! Не вибрано прийнятного каталогу! - - - The folder %1 is used in a folder sync connection! - Каталог %1 використовується у синхронізації каталогів! - - - - Please choose a different location. The selected folder isn't valid. - - The selected path does not exist! @@ -2543,17 +2533,37 @@ Alternatively, you can restore all deleted files by downloading them from the se The selected path is not a folder! Вибраний шлях не є каталогом! + + + You have no permission to write to the selected folder! + У вас немає прав на запис до цього каталогу! + + + + The local folder %1 already contains a folder used in a folder sync connection. Please pick another one! + Каталог %1 на пристрої вже містить каталог, який використовується для синхронізації каталогів. Будь ласка, виберіть інший каталог! + + + + The local folder %1 is already contained in a folder used in a folder sync connection. Please pick another one! + Каталог %1 на пристрої вже присутній у каталозі, який використовується для синхронізації каталогів. Будь ласка, виберіть інший каталог! + + + + There is already a sync from the server to this local folder. Please pick another local folder! + Синхронізацію між хмарою та каталогом на пристрої вже встановлено. Будь ласка, виберіть інший каталог! + + + + 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. - - - You have no permission to write to the selected folder! - У вас немає прав на запис до цього каталогу! - Please choose a different location. The path %1 doesn't exist. @@ -2571,26 +2581,11 @@ Alternatively, you can restore all deleted files by downloading them from the se folder location - - - The local folder %1 already contains a folder used in a folder sync connection. Please pick another one! - Каталог %1 на пристрої вже містить каталог, який використовується для синхронізації каталогів. Будь ласка, виберіть інший каталог! - - - - The local folder %1 is already contained in a folder used in a folder sync connection. Please pick another one! - Каталог %1 на пристрої вже присутній у каталозі, який використовується для синхронізації каталогів. Будь ласка, виберіть інший каталог! - Please choose a different location. %1 is already contained in a folder used as a sync folder. - - - There is already a sync from the server to this local folder. Please pick another local folder! - Синхронізацію між хмарою та каталогом на пристрої вже встановлено. Будь ласка, виберіть інший каталог! - Please choose a different location. %1 is already being used as a sync folder for %2. @@ -2598,7 +2593,7 @@ Alternatively, you can restore all deleted files by downloading them from the se - + 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. @@ -2706,12 +2701,12 @@ For advanced users: this issue might be related to multiple sync database files Узгодження змін - + 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'" @@ -2729,7 +2724,7 @@ For advanced users: this issue might be related to multiple sync database files , - + Download %1/s Example text: "Download 24Kb/s" (%1 is replaced by 24Kb (translated)) Звантажити %1/s @@ -2746,7 +2741,7 @@ For advanced users: this issue might be related to multiple sync database files ↓ %1/s - + Upload %1/s Example text: "Upload 24Kb/s" (%1 is replaced by 24Kb (translated)) Завантажити %1/s @@ -2797,12 +2792,12 @@ For advanced users: this issue might be related to multiple sync database files файл %1 з %2 - + File %1 of %2 Файл %1 із %2 - + About to start syncing Початок синхронізації @@ -3168,7 +3163,7 @@ For advanced users: this issue might be related to multiple sync database files Сповіщення сервера, на які треба звернути увагу. - + Show chat notification dialogs. Показувати діалог сповіщень у чаті @@ -3209,17 +3204,17 @@ Note that this selects only what pool upgrades are taken from, and that there ar Зауважте, що таким чином ви виберете набір оновлень, які буде застосовувано, і що неможливо буде повернутися до попередніх версій. Відтак повернення з "бета" до "стабільного" каналу зазвичай неможливо буде виконати одразу, натомість ви матимете зачекати на нову стабільну версію порівняно зі встановленою бета-версією. - + daily щоденно - + enterprise для бізнесу - + - beta: contains versions with new features that may not be tested thoroughly - daily: contains versions created daily only for testing and development @@ -3230,7 +3225,7 @@ 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. @@ -3239,12 +3234,12 @@ 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 @@ -4297,30 +4292,30 @@ This is a new, experimental mode. If you decide to use it, please report any iss Таке ім'я файлу є зарезервованим ім'ям у файловій системі. - + 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, що містить символ "%2" не підтримується файловою системою. - + %1 name contains at least one invalid character Ім'я %1 містить принаймні один недійсний символ - + %1 name is a reserved name on this file system. Ім'я %1 є зарезервованою назвою у файловій системі. @@ -4375,22 +4370,22 @@ This is a new, experimental mode. If you decide to use it, please report any iss Таке ім'я файлу внесено до чорного списку на сервері. - + Reason: the entire filename is forbidden. Причина: все ім'я файлу є недозволеним. - + Reason: the filename has a forbidden base name (filename start). Причина: ім'я файлу містить недозволену частину в назві (початок імени файлу) - + Reason: the file has a forbidden extension (.%1). Причина: файл містить недозволене розширення (.%1). - + Reason: the filename contains a forbidden character (%1). Причина: ім'я файлу містить недозволений символ (%1). @@ -4425,7 +4420,7 @@ This is a new, experimental mode. If you decide to use it, please report any iss Неможливо виконати синхронізацію через неправильний час модифікації - + Could not upload file, because it is open in "%1". Не вдалося завантажити файл, оскільки його відкрито у "%1". @@ -4508,18 +4503,18 @@ This is a new, experimental mode. If you decide to use it, please report any iss Помилка при завантаженні метаданих через неправильні зміни часу - - - - - - + + + + + + The folder %1 cannot be made read-only: %2 Неможливо зробити каталог %1 тільки для читання: %2 - - + + unknown exception невідомий виняток @@ -4693,12 +4688,6 @@ This is a new, experimental mode. If you decide to use it, please report any iss File %1 downloaded but it resulted in a local file name clash! Файл %1 звантажено, проте це призвело до конфлікту з файлом, який вже присутній на пристрої. - - - - Could not get file %1 from local DB - Неможливо отримати файл %1 з локальної БД - @@ -4706,6 +4695,13 @@ This is a new, experimental mode. If you decide to use it, please report any iss could not get file %1 from local DB неможливо отримати файл %1 з локальної БД + + + + + Could not get file %1 from local DB + Неможливо отримати файл %1 з локальної БД + @@ -4806,16 +4802,16 @@ 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". Сервер відповів неправильним HTTP кодом. Очікувався 201, але отримано "%1 %2". - - - Could not get file %1 from local DB - Неможливо отримати файл %1 з локальної БД - could not get file %1 from local DB неможливо отримати файл %1 з локальної БД + + + Could not get file %1 from local DB + Неможливо отримати файл %1 з локальної БД + Could not delete file record %1 from local DB @@ -5064,7 +5060,7 @@ This is a new, experimental mode. If you decide to use it, please report any iss OCC::ShareManager - + Error Помилка @@ -5072,17 +5068,17 @@ This is a new, experimental mode. If you decide to use it, please report any iss OCC::ShareModel - + %1 days %1 днів - + 1 day 1 день - + Today Сьогодні @@ -5112,7 +5108,7 @@ This is a new, experimental mode. If you decide to use it, please report any iss Безпечне копіювання файлів - + Could not find local folder for %1 Не вдалося знайти каталог на пристрої для %1 @@ -5235,11 +5231,6 @@ Server replied with error: %2 Resharing this folder is not allowed Надання цього каталогу у спільний доступ іншим не дозволено - - - Copy internal link - Копіювати посилання - Copy secure file drop link @@ -5251,6 +5242,11 @@ Server replied with error: %2 Copy public link Копіювати публічне посилання + + + Copy internal link + Копіювати посилання + Copy secure filedrop link @@ -5282,16 +5278,16 @@ Server replied with error: %2 remaining time before lock expires Спливає за %1 хвилинуСпливає за %1 хвилиниСпливає за %1 хвилинСпливає за %1 хвилин - - - Open in browser - Відкрити у бравзері - Edit Редагувати + + + Open in browser + Відкрити у бравзері + Resolve conflict … @@ -5824,10 +5820,10 @@ Server replied with error: %2 - - - - + + + + Error updating metadata for a folder %1 Помилка під час оновлення метаданих для каталогу %1 @@ -5847,7 +5843,7 @@ Server replied with error: %2 Неможливо додати або вилучити користувача %1 для доступу до каталогу %2 - + Failed to unlock a folder. Не вдалося розблокувати каталог. @@ -5865,7 +5861,7 @@ Server replied with error: %2 - + %1 notifications %1 сповіщень @@ -5881,17 +5877,17 @@ Server replied with error: %2 Розв'язати конфлікт - + Rename file Перейменувати файл - + Open Nextcloud Assistant in browser Відкрити Асистент Nextcloud в бравзері - + Open Nextcloud Talk in browser Відкрити Nextcloud Talk в бравзері @@ -6025,29 +6021,19 @@ Server replied with error: %2 - The Virtual filesystem feature does not support a drive as sync root - Функціонал віртуальної файлової системи не підтримує синхронізацію кореневого каталогу диску. + The Virtual filesystem feature requires a NTFS file system, %1 is using %2 + Функціонал віртуальної файлової системи вимагає наявності NTFS, %1 використовує %2 Please choose a different location. %1 isn't a NTFS file system. It doesn't support virtual files. - - - The Virtual filesystem feature requires a NTFS file system, %1 is using %2 - Функціонал віртуальної файлової системи вимагає наявності NTFS, %1 використовує %2 - Please choose a different location. %1 is a network drive. It doesn't support virtual files. - - - The Virtual filesystem feature is not supported on network drives - Функціонал віртуальної файлової системи не підтримується на мережевих дисках - OCC::VfsDownloadErrorDialog @@ -6187,12 +6173,12 @@ Server replied with error: %2 Сервер облікового запису %1 має версію %2, яка не підтримується. Використання цього клієнта з версією сервера, яка не підтримується, не протестовано та може принести шкоду. Продовжуйте на власний ризик. - + 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, де ви зможете переглянути та погодитися з умовами. @@ -6268,23 +6254,23 @@ Server replied with error: %2 Каталог(и) для синхронізації не налаштовано - + %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 для %1: Відбувається синхронізація. - + macOS VFS for %1: Last sync was successful. macOS VFS для %1: Остання синхронізація була успішною. - + macOS VFS for %1: A problem was encountered. macOS VFS для %1: Помилка під час синхронізації. @@ -6730,7 +6716,7 @@ Server replied with error: %2 Шукати користувачів або групи... - + Sharing is not available for this folder Для цього каталогу недоступне надання у спільний доступ @@ -7141,11 +7127,6 @@ Server replied with error: %2 downloading звантаження - - - Downloading - Отримання - uploading @@ -7153,8 +7134,8 @@ Server replied with error: %2 - Uploading - Завантаження + Downloading + Отримання @@ -7163,8 +7144,8 @@ Server replied with error: %2 - Deleting - Вилучення + Uploading + Завантаження @@ -7172,9 +7153,9 @@ Server replied with error: %2 переміщення - - Moving - Переміщення + + Deleting + Вилучення @@ -7183,26 +7164,31 @@ Server replied with error: %2 - Ignoring - Ігнорування + Moving + Переміщення error помилка + + + Ignoring + Ігнорування + updating local metadata оновлення метаданих на пристрої - + Updating local metadata Оновлення локальних метаданих - + Updating local virtual files metadata Оновлення метаданих віртуальних файлів на пристрої @@ -7361,19 +7347,6 @@ Server replied with error: %2 Очистити меню статусних повідомлень - - OCC::FormatWarningsWizardPage - - - <b>Warning:</b> %1 - <b>Попередження</b> %1 - - - - <b>Warning:</b> - <b>Попередження</b> - - OCC::AbstractPropagateRemoteDeleteEncrypted @@ -7387,6 +7360,19 @@ Server replied with error: %2 "%1 Не вдалося розблокувати зашифрований каталог %2". + + OCC::FormatWarningsWizardPage + + + <b>Warning:</b> %1 + <b>Попередження</b> %1 + + + + <b>Warning:</b> + <b>Попередження</b> + + OCC::OAuth diff --git a/translations/client_zh_CN.ts b/translations/client_zh_CN.ts index b2c53f80be2a5..2928ce426c5b9 100644 --- a/translations/client_zh_CN.ts +++ b/translations/client_zh_CN.ts @@ -172,13 +172,13 @@ - + Resume sync for all 恢复所有同步 - + Pause sync for all 暂停所有同步 @@ -193,32 +193,32 @@ 添加新账号 - + Settings 设置 - + Exit 退出 - + Current account avatar 当前账号头像 - + Current account status is online 当前账号状态为在线 - + Current account status is do not disturb 当前账号状态为请勿打扰 - + Account switcher and settings menu 账号切换和设置菜单 @@ -307,17 +307,17 @@ FileProviderEvictionDialog - + Evict materialised files 移除实例化副本 - + Materialised items 实例化项目 - + Reload 重载 @@ -493,17 +493,17 @@ MainWindow - + Nextcloud desktop main dialog Nextcloud 桌面主对话框 - + Unified search results list 统一搜索结果列表 - + New activities 新动态 @@ -553,14 +553,14 @@ Should an account import be attempted? 检测到有来自旧版本桌面客户端的配置,是否应该尝试导入账号? - + %1 accounts were detected from a legacy desktop client. Should the accounts be imported? 检测到来自老版本桌面客户端的 %1 个账号。 是否需要导入这些账号? - + 1 account was detected from a legacy desktop client. Should the account be imported? 检测到来自老版本桌面客户端的 1 个账号。 @@ -574,12 +574,12 @@ Should the account be imported? 旧版本导入 - + Import 导入 - + Skip 跳过 @@ -674,12 +674,12 @@ Should the account be imported? 加密文件夹 - + 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> 这将加密您的文件夹和其中的所有文件。如果没有加密助记符密钥,这些文件将无法访问。 @@ -712,17 +712,17 @@ Should the account be imported? 警告 - + 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 文件夹有同步错误。同步成功后即可加密该文件夹。 @@ -974,7 +974,7 @@ This action will abort any currently running synchronization. 没有到位于%2中的%1的连接 - + Unable to connect to %1. 无法连接至 %1。 @@ -984,7 +984,7 @@ This action will abort any currently running synchronization. 服务器配置错误:%1 于 %2. - + You need to accept the terms of service 你需要接受服务条款 @@ -1014,7 +1014,7 @@ This action will abort any currently running synchronization. 以下目录由于太大或是外部存储而没有同步: - + There are folders that have grown in size beyond %1MB: %2 有些文件夹的大小已超过 %1MB: %2 @@ -1216,34 +1216,39 @@ This action will abort any currently running synchronization. 继续 - + + Quit %1 + 退出 %1 + + + %1 accounts number of accounts imported %1 个账号 - + 1 account 1 个账号 - + %1 folders number of folders imported %1 个文件夹 - + 1 folder 1 个文件夹 - + Legacy import 旧版导入 - + Imported %1 and %2 from a legacy desktop client. %3 number of accounts and folders imported. list of users. @@ -1260,11 +1265,6 @@ This action will abort any currently running synchronization. There was an error while accessing the configuration file at %1. Please make sure the file can be accessed by your system account. 访问 %1 的配置文件时发生错误,请确保您的系统账号可以访问该文件。 - - - Quit %1 - 退出 %1 - OCC::AuthenticationDialog @@ -1729,13 +1729,13 @@ This action will abort any currently running synchronization. 服务器错误:PROPFIND 回复的格式不是 XML! - - + + Encrypted metadata setup error! 已加密的元数据设置错误! - + Encrypted metadata setup error: initial signature from server is empty. 加密元数据设置错误:来自服务器的初始签名为空。 @@ -2291,29 +2291,29 @@ If this was an accident and you decide to keep your files, they will be re-synce 保留文件 - + A folder has surpassed the set folder size limit of %1MB: %2. %3 文件夹已超过设置的文件夹大小限制 %1MB:%2。 %3 - + Keep syncing 保持同步 - + Stop syncing 停止同步 - + The folder %1 has surpassed the set folder size limit of %2MB. 文件夹 %1 已超过设置的文件夹大小限制 %2MB - + Would you like to stop syncing this folder? 你想要停止同步此文件夹吗? @@ -2341,12 +2341,12 @@ 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" 虚拟文件下载失败,错误代码 “%1”,状态 “%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. @@ -2355,7 +2355,7 @@ Alternatively, you can restore all deleted files by uploading from '%1&apos 或者,你可以通过从 “%1” 文件夹上传到服务器来还原所有已删除的文件。 - + 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. @@ -2364,22 +2364,22 @@ Alternatively, you can restore all deleted files by downloading them from the se 或者,你可以通过从服务器重新下载以恢复删除的文件。 - + Remove all files? 删除所有文件? - + Proceed with Deletion 继续删除 - + Restore Files to Server 恢复文件至服务器 - + Restore Files from Server 从服务器恢复文件 @@ -2450,32 +2450,32 @@ Alternatively, you can restore all deleted files by downloading them from the se 准备同步。 - + Syncing %1 of %2 (A few seconds left) 正在同步 %1/%2(还剩几秒) - + Syncing %1 of %2 (%3 left) 正在同步 %1/%2 (剩余 %3 个) - + Syncing %1 of %2 同步 %1/%2 - + Syncing %1 (A few seconds left) 正在同步 %1(剩余几秒) - + Syncing %1 (%2 left) 正在同步 %1(剩余 %2) - + Syncing %1 正在同步 %1 @@ -2519,16 +2519,6 @@ Alternatively, you can restore all deleted files by downloading them from the se No valid folder selected! 没有选择有效的文件夹! - - - The folder %1 is used in a folder sync connection! - 文件夹 %1 用于文件夹同步连接! - - - - Please choose a different location. The selected folder isn't valid. - - The selected path does not exist! @@ -2539,17 +2529,37 @@ Alternatively, you can restore all deleted files by downloading them from the se The selected path is not a folder! 选择的路径不是一个文件夹! + + + You have no permission to write to the selected folder! + 您没有写入所选文件夹的权限! + + + + The local folder %1 already contains a folder used in a folder sync connection. Please pick another one! + 本地文件夹 %1 包含有正在使用的同步文件夹,请选择另一个! + + + + The local folder %1 is already contained in a folder used in a folder sync connection. Please pick another one! + 本地文件夹 %1 是正在使用的同步文件夹,请选择另一个! + + + + There is already a sync from the server to this local folder. Please pick another local folder! + 已经有一个从服务器到此文件夹的同步设置。请选择其他本地文件夹! + + + + 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. - - - You have no permission to write to the selected folder! - 您没有写入所选文件夹的权限! - Please choose a different location. The path %1 doesn't exist. @@ -2567,26 +2577,11 @@ Alternatively, you can restore all deleted files by downloading them from the se folder location - - - The local folder %1 already contains a folder used in a folder sync connection. Please pick another one! - 本地文件夹 %1 包含有正在使用的同步文件夹,请选择另一个! - - - - The local folder %1 is already contained in a folder used in a folder sync connection. Please pick another one! - 本地文件夹 %1 是正在使用的同步文件夹,请选择另一个! - Please choose a different location. %1 is already contained in a folder used as a sync folder. - - - There is already a sync from the server to this local folder. Please pick another local folder! - 已经有一个从服务器到此文件夹的同步设置。请选择其他本地文件夹! - Please choose a different location. %1 is already being used as a sync folder for %2. @@ -2594,7 +2589,7 @@ Alternatively, you can restore all deleted files by downloading them from the se - + 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. @@ -2702,12 +2697,12 @@ For advanced users: this issue might be related to multiple sync database files 状态发生变化 - + 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'" %1 %2 … @@ -2725,7 +2720,7 @@ For advanced users: this issue might be related to multiple sync database files - + Download %1/s Example text: "Download 24Kb/s" (%1 is replaced by 24Kb (translated)) 下载 %1/s @@ -2742,7 +2737,7 @@ For advanced users: this issue might be related to multiple sync database files ↓ %1 每秒 - + Upload %1/s Example text: "Upload 24Kb/s" (%1 is replaced by 24Kb (translated)) 上传 %1/s @@ -2793,12 +2788,12 @@ For advanced users: this issue might be related to multiple sync database files 第 %1 个文件,共 %2 个 - + File %1 of %2 文件 %1/%2 - + About to start syncing 即将开始同步 @@ -3164,7 +3159,7 @@ For advanced users: this issue might be related to multiple sync database files 需要注意的服务器通知。 - + Show chat notification dialogs. 显示聊天通知对话框 @@ -3205,17 +3200,17 @@ Note that this selects only what pool upgrades are taken from, and that there ar 请注意,这只会选择从何种中池升级,并且没有降级:因此,通常无法立即从测试版通道返回到稳定版通道,这意味着您需要等待比当前安装的测试版更新的稳定版。 - + daily 每天 - + enterprise 企业 - + - beta: contains versions with new features that may not be tested thoroughly - daily: contains versions created daily only for testing and development @@ -3227,7 +3222,7 @@ 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. @@ -3237,12 +3232,12 @@ 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 @@ -4287,30 +4282,30 @@ This is a new, experimental mode. If you decide to use it, please report any iss 此文件名是这个文件系统上的保留名。 - + 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 此文件系统不支持包含字符 "%2" 的名称。 - + %1 name contains at least one invalid character %1 名称至少包含一个无效字符 - + %1 name is a reserved name on this file system. %1 名称是此文件系统上的保留名称。 @@ -4365,22 +4360,22 @@ This is a new, experimental mode. If you decide to use it, please report any iss 该文件名在服务器上被列入黑名单 - + Reason: the entire filename is forbidden. 原因:整个文件名被禁止。 - + Reason: the filename has a forbidden base name (filename start). 原因:文件名包含禁止的基本名称(文件名开头)。 - + Reason: the file has a forbidden extension (.%1). 原因:文件包含禁止的扩展名(.%1)。 - + Reason: the filename contains a forbidden character (%1). 原因:文件名包含禁止的字符(%1)。 @@ -4415,7 +4410,7 @@ This is a new, experimental mode. If you decide to use it, please report any iss 由于修改时间无效,因此无法同步 - + Could not upload file, because it is open in "%1". 无法上传文件,因为此文件已在 “%1” 中被打开。 @@ -4498,18 +4493,18 @@ This is a new, experimental mode. If you decide to use it, please report any iss 由于修改时间无效,更新元数据时出错 - - - - - - + + + + + + The folder %1 cannot be made read-only: %2 文件夹 %1 无法被设置为只读:%2 - - + + unknown exception 未知异常 @@ -4683,12 +4678,6 @@ This is a new, experimental mode. If you decide to use it, please report any iss File %1 downloaded but it resulted in a local file name clash! 已下载文件 %1,但其导致了本地文件名称冲突! - - - - Could not get file %1 from local DB - 无法从本地数据库中获取文件%1 - @@ -4696,6 +4685,13 @@ This is a new, experimental mode. If you decide to use it, please report any iss could not get file %1 from local DB 无法从本地数据库获得文件 %1 + + + + + Could not get file %1 from local DB + 无法从本地数据库中获取文件%1 + @@ -4796,16 +4792,16 @@ 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". 服务器返回的 HTTP 状态错误,应返回 201,但返回的是“%1 %2”。 - - - Could not get file %1 from local DB - 无法从本地数据库获取文件%1 - could not get file %1 from local DB 无法从本地数据库取得文件 %1 + + + Could not get file %1 from local DB + 无法从本地数据库获取文件%1 + Could not delete file record %1 from local DB @@ -5054,7 +5050,7 @@ This is a new, experimental mode. If you decide to use it, please report any iss OCC::ShareManager - + Error 错误 @@ -5062,17 +5058,17 @@ This is a new, experimental mode. If you decide to use it, please report any iss OCC::ShareModel - + %1 days %1 天 - + 1 day 1 天 - + Today 今天 @@ -5102,7 +5098,7 @@ This is a new, experimental mode. If you decide to use it, please report any iss 安全文件拖放 - + Could not find local folder for %1 无法在本地找到名为 %1 的文件夹 @@ -5225,11 +5221,6 @@ Server replied with error: %2 Resharing this folder is not allowed 不允许重新分享这个文件夹 - - - Copy internal link - 复制内部链接 - Copy secure file drop link @@ -5241,6 +5232,11 @@ Server replied with error: %2 Copy public link 复制公开链接 + + + Copy internal link + 复制内部链接 + Copy secure filedrop link @@ -5272,16 +5268,16 @@ Server replied with error: %2 remaining time before lock expires %1 分钟后过期 - - - Open in browser - 在浏览器中打开 - Edit 编辑 + + + Open in browser + 在浏览器中打开 + Resolve conflict … @@ -5814,10 +5810,10 @@ Server replied with error: %2 - - - - + + + + Error updating metadata for a folder %1 更新 %1 文件夹时出现错误 @@ -5837,7 +5833,7 @@ Server replied with error: %2 无法添加或移除用户 %1 以访问文件夹 %2 - + Failed to unlock a folder. 无法解锁文件夹。 @@ -5855,7 +5851,7 @@ Server replied with error: %2 触发迁移 - + %1 notifications %1 条通知 @@ -5871,17 +5867,17 @@ Server replied with error: %2 解决冲突 - + Rename file 重命名文件 - + Open Nextcloud Assistant in browser 在浏览器中打开 Nextcloud Assistant - + Open Nextcloud Talk in browser 在浏览器中打开 Nextcloud Talk @@ -6015,29 +6011,19 @@ Server replied with error: %2 - The Virtual filesystem feature does not support a drive as sync root - 虚拟文件系统功能不支持将驱动器作为同步根目录 + The Virtual filesystem feature requires a NTFS file system, %1 is using %2 + 虚拟文件系统特性需要一个NTFS文件系统,%1 正使用 %2 Please choose a different location. %1 isn't a NTFS file system. It doesn't support virtual files. - - - The Virtual filesystem feature requires a NTFS file system, %1 is using %2 - 虚拟文件系统特性需要一个NTFS文件系统,%1 正使用 %2 - Please choose a different location. %1 is a network drive. It doesn't support virtual files. - - - The Virtual filesystem feature is not supported on network drives - 网络驱动器不支持虚拟文件系统功能 - OCC::VfsDownloadErrorDialog @@ -6177,12 +6163,12 @@ Server replied with error: %2 帐户 %1 上的服务器运行不支持的版本 %2。将此客户端与不支持的服务器版本一起使用是未经测试的,并且有潜在的危险。继续进行,风险自担。 - + 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,以确认你已阅读并同意。 @@ -6258,23 +6244,23 @@ Server replied with error: %2 没有配置同步目录 - + %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. %1 的 macOS VFS:正在同步。 - + macOS VFS for %1: Last sync was successful. %1 的 macOS VFS:上次同步成功。 - + macOS VFS for %1: A problem was encountered. %1 的 macOS VFS:遇到问题。 @@ -6720,7 +6706,7 @@ Server replied with error: %2 搜索用户或分组... - + Sharing is not available for this folder 此文件夹分享功能不可用 @@ -7131,11 +7117,6 @@ Server replied with error: %2 downloading 正在下载 - - - Downloading - 正在下载 - uploading @@ -7143,8 +7124,8 @@ Server replied with error: %2 - Uploading - 正在上传 + Downloading + 正在下载 @@ -7153,8 +7134,8 @@ Server replied with error: %2 - Deleting - 正在删除 + Uploading + 正在上传 @@ -7162,9 +7143,9 @@ Server replied with error: %2 移动 - - Moving - 正在移动 + + Deleting + 正在删除 @@ -7173,26 +7154,31 @@ Server replied with error: %2 - Ignoring - 正在忽略 + Moving + 正在移动 error 错误 + + + Ignoring + 正在忽略 + updating local metadata 正在更新本地元数据 - + Updating local metadata 正在更新本地元数据 - + Updating local virtual files metadata 正在更新本地虚拟文件元数据 @@ -7351,19 +7337,6 @@ Server replied with error: %2 清除状态信息菜单 - - OCC::FormatWarningsWizardPage - - - <b>Warning:</b> %1 - <b>警告:</b>%1 - - - - <b>Warning:</b> - <b>警告:</b> - - OCC::AbstractPropagateRemoteDeleteEncrypted @@ -7377,6 +7350,19 @@ Server replied with error: %2 "%1未能解锁加密的文件夹%2"。 + + OCC::FormatWarningsWizardPage + + + <b>Warning:</b> %1 + <b>警告:</b>%1 + + + + <b>Warning:</b> + <b>警告:</b> + + OCC::OAuth diff --git a/translations/client_zh_HK.ts b/translations/client_zh_HK.ts index c917d212b7553..c1ac1134a5958 100644 --- a/translations/client_zh_HK.ts +++ b/translations/client_zh_HK.ts @@ -172,13 +172,13 @@ - + Resume sync for all 為所有項目恢復同步 - + Pause sync for all 暫停所有同步 @@ -193,32 +193,32 @@ 添加新帳戶 - + Settings 設定 - + Exit 退出 - + Current account avatar 目前的帳戶虛擬化身 - + Current account status is online 目前帳戶狀態為在線 - + Current account status is do not disturb 目前帳戶狀態為請勿打擾 - + Account switcher and settings menu 帳戶切換器和設置選項單 @@ -307,17 +307,17 @@ FileProviderEvictionDialog - + Evict materialised files 驅逐已實體化的檔案 - + Materialised items 物化項目 - + Reload 重新加載 @@ -493,17 +493,17 @@ MainWindow - + Nextcloud desktop main dialog Nextcloud 桌面版主對話框 - + Unified search results list 統一搜尋結果清單 - + New activities 新活動紀錄 @@ -554,14 +554,14 @@ Should an account import be attempted? 應該嘗試匯入帳號嗎? - + %1 accounts were detected from a legacy desktop client. Should the accounts be imported? 檢測到 %1 個來自舊版桌面客戶端的帳戶。 是否應該導入這些帳戶? - + 1 account was detected from a legacy desktop client. Should the account be imported? 檢測到 1 個來自舊版桌面客戶端的帳戶。 @@ -575,12 +575,12 @@ Should the account be imported? 舊版匯入 - + Import 導入 - + Skip 略過 @@ -676,12 +676,12 @@ Should the account be imported? 加密資料夾 - + 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> 這將加密您的資料夾及其中的所有檔案。如果沒有您的加密助記符密鑰,將無法再存取這些檔案。 @@ -713,17 +713,17 @@ Should the account be imported? 警告 - + 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 該資料夾存在同步問題。同步成功後即可加密該資料夾 @@ -979,7 +979,7 @@ This action will abort any currently running synchronization. %1 沒有連線到 %2 - + Unable to connect to %1. 無法連接至 %1。 @@ -989,7 +989,7 @@ This action will abort any currently running synchronization. 伺服器設定錯誤:%1 在 %2。 - + You need to accept the terms of service 您需要接受服務條款 @@ -1019,7 +1019,7 @@ This action will abort any currently running synchronization. 有部分資料夾因為容量太大或是外部存儲沒有辦法同步: - + There are folders that have grown in size beyond %1MB: %2 有些資料夾的大小已超過 %1MB:%2 @@ -1223,34 +1223,39 @@ This action will abort any currently running synchronization. 繼續 - + + Quit %1 + 離開 %1 + + + %1 accounts number of accounts imported %1 個帳戶 - + 1 account 1 個帳戶 - + %1 folders number of folders imported %n 個資料夾 - + 1 folder 1 個資料夾 - + Legacy import 舊版匯入 - + Imported %1 and %2 from a legacy desktop client. %3 number of accounts and folders imported. list of users. @@ -1267,11 +1272,6 @@ This action will abort any currently running synchronization. There was an error while accessing the configuration file at %1. Please make sure the file can be accessed by your system account. 存取 %1 的配置檔案時出錯。請確保您的系統帳戶可以存取該檔案。 - - - Quit %1 - 離開 %1 - OCC::AuthenticationDialog @@ -1736,13 +1736,13 @@ This action will abort any currently running synchronization. 伺服器錯誤:PROPFIND回覆未採用XML格式! - - + + Encrypted metadata setup error! 已加密的元數據設置錯誤! - + Encrypted metadata setup error: initial signature from server is empty. 加密中繼資料設定錯誤:來自伺服器的初始簽章為空。 @@ -2136,17 +2136,17 @@ This can be an issue with your OpenSSL libraries. Please choose a different location. The folder %1 doesn't exist. - + 請選擇其他位置。資料夾 %1 不存在。 Please choose a different location. %1 isn't a valid folder. - + 請選擇其他位置。%1 並非有效的資料夾。 Please choose a different location. %1 isn't a readable folder. - + 請選擇其他位置。%1 並非可讀取的資料夾。 @@ -2296,29 +2296,29 @@ If this was an accident and you decide to keep your files, they will be re-synce 保留檔案 - + A folder has surpassed the set folder size limit of %1MB: %2. %3 資料夾已超出設置的資料夾大小限制 %1MB:%2。 %3 - + Keep syncing 保持同步 - + Stop syncing 停止同步 - + The folder %1 has surpassed the set folder size limit of %2MB. 資料夾已超出設置的資料夾大小限制 %2MB。 - + Would you like to stop syncing this folder? 您想停止同步此資料夾嗎? @@ -2346,12 +2346,12 @@ 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" 虛擬檔案下載失敗,代碼為“%1”,狀態為“%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. @@ -2360,7 +2360,7 @@ Alternatively, you can restore all deleted files by uploading from '%1&apos 或者,您也可以從「%1」資料夾上傳至伺服器來還原所有已刪除的檔案。 - + 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. @@ -2369,22 +2369,22 @@ Alternatively, you can restore all deleted files by downloading them from the se 或者,您也可以從伺服器下載這些檔案來還原所有已刪除的檔案。 - + Remove all files? 移除所有檔案? - + Proceed with Deletion 繼續刪除 - + Restore Files to Server 將檔案還原到伺服器 - + Restore Files from Server 從伺服器還原檔案 @@ -2455,32 +2455,32 @@ Alternatively, you can restore all deleted files by downloading them from the se 正在準備同步。 - + Syncing %1 of %2 (A few seconds left) 正在同步 %1,共 %2(還剩幾秒) - + Syncing %1 of %2 (%3 left) 正在同步 %1,共 %2(剩餘 %3) - + Syncing %1 of %2 正在同步第 %1 項,共 %2 項 - + Syncing %1 (A few seconds left) 正在同步 %1(還剩幾秒) - + Syncing %1 (%2 left) 正在同步第 %1 項(剩餘 %2 項) - + Syncing %1 正在同步 %1 @@ -2524,16 +2524,6 @@ Alternatively, you can restore all deleted files by downloading them from the se No valid folder selected! 沒有選擇有效的資料夾 - - - The folder %1 is used in a folder sync connection! - 此資料夾 %1 用於資料夾同步連接! - - - - Please choose a different location. The selected folder isn't valid. - - The selected path does not exist! @@ -2544,62 +2534,67 @@ Alternatively, you can restore all deleted files by downloading them from the se The selected path is not a folder! 所選的路徑並非資料夾! - - - - Please choose a different location. %1 is already being used as a sync folder. - - You have no permission to write to the selected folder! 您沒有權限來寫入被選擇的資料夾! + + + The local folder %1 already contains a folder used in a folder sync connection. Please pick another one! + 近端資料夾 %1 裡已經有被資料夾同步功能使用的資料夾,請選擇其他資料夾! + + + + The local folder %1 is already contained in a folder used in a folder sync connection. Please pick another one! + 近端資料夾 %1 是被包含在一個已經被資料夾同步功能使用的資料夾,請選擇其他資料夾! + + + + There is already a sync from the server to this local folder. Please pick another local folder! + 此資料夾已與Server設定同步,請選擇其他資料夾 + + + + 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. + 請選擇其他位置。%1 已用作同步資料夾。 + Please choose a different location. The path %1 doesn't exist. - + 請選擇其他位置。路徑 %1 不存在。 Please choose a different location. The path %1 isn't a folder. - + 請選擇其他位置。路徑 %1 不是資料夾。 Please choose a different location. You don't have enough permissions to write to %1. folder location - - - - - The local folder %1 already contains a folder used in a folder sync connection. Please pick another one! - 近端資料夾 %1 裡已經有被資料夾同步功能使用的資料夾,請選擇其他資料夾! - - - - The local folder %1 is already contained in a folder used in a folder sync connection. Please pick another one! - 近端資料夾 %1 是被包含在一個已經被資料夾同步功能使用的資料夾,請選擇其他資料夾! + 請選擇其他位置。您沒有權限寫入 %1。 Please choose a different location. %1 is already contained in a folder used as a sync folder. - - - - - There is already a sync from the server to this local folder. Please pick another local folder! - 此資料夾已與Server設定同步,請選擇其他資料夾 + 請選擇其他位置。%1 已包含在用作同步資料夾的資料夾中。 Please choose a different location. %1 is already being used as a sync folder for %2. folder location, server url - + 請選擇其他位置。%1 已用作 %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. @@ -2707,12 +2702,12 @@ For advanced users: this issue might be related to multiple sync database files 正在排解更動 - + 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'" %1 %2 … @@ -2730,7 +2725,7 @@ For advanced users: this issue might be related to multiple sync database files - + Download %1/s Example text: "Download 24Kb/s" (%1 is replaced by 24Kb (translated)) 下載 %1/秒 @@ -2747,7 +2742,7 @@ For advanced users: this issue might be related to multiple sync database files ↓ %1/s - + Upload %1/s Example text: "Upload 24Kb/s" (%1 is replaced by 24Kb (translated)) 上傳 %1/秒 @@ -2798,12 +2793,12 @@ For advanced users: this issue might be related to multiple sync database files 檔案 %2 之 %1 - + File %1 of %2 檔案 %2 之 %1 - + About to start syncing 將要開始同步 @@ -2912,7 +2907,7 @@ 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. - + 請選擇其他位置。%1 已同步至 %2。 @@ -2957,7 +2952,7 @@ For advanced users: this issue might be related to multiple sync database files Virtual files are not supported at the selected location - + 選定的位置不支援虛擬檔案 @@ -3169,7 +3164,7 @@ For advanced users: this issue might be related to multiple sync database files 伺服器公告,請注意 - + Show chat notification dialogs. 顯示聊天通告對話框。 @@ -3210,17 +3205,17 @@ Note that this selects only what pool upgrades are taken from, and that there ar 請注意,這僅選擇從哪個池升級中進行升級,並且沒有降級:因此通常無法立即從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 @@ -3232,7 +3227,7 @@ 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. @@ -3242,12 +3237,12 @@ 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 @@ -3943,7 +3938,7 @@ Note that using any logging command line options will override this setting. Virtual files are not supported at the selected location - + 選定的位置不支援虛擬檔案 @@ -4300,30 +4295,30 @@ This is a new, experimental mode. If you decide to use it, please report any iss 此檔案名已被此檔案系統保留所用。 - + 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 此檔案系統不支援包含字符 "%2" 的 %1 名稱。 - + %1 name contains at least one invalid character %1 名稱含有不無效的字元 - + %1 name is a reserved name on this file system. 在檔案件系統中,%1 名稱是保留的名稱,無法使用。 @@ -4378,22 +4373,22 @@ This is a new, experimental mode. If you decide to use it, please report any iss 伺服器已將此檔名列為黑名單。 - + Reason: the entire filename is forbidden. 理由:整個檔案名稱是禁止使用的。 - + Reason: the filename has a forbidden base name (filename start). 理由:檔案名稱有禁止使用的基本名稱(檔案名稱開頭)。 - + Reason: the file has a forbidden extension (.%1). 理由:檔案名稱有禁止使用的副檔名 (.%1)。 - + Reason: the filename contains a forbidden character (%1). 理由:檔案名稱包含禁止使用的字元 (%1)。 @@ -4428,7 +4423,7 @@ This is a new, experimental mode. If you decide to use it, please report any iss 由於修改時間無效,無法同步 - + Could not upload file, because it is open in "%1". 無法上傳檔案,因為其於「%1」開啟。 @@ -4511,18 +4506,18 @@ This is a new, experimental mode. If you decide to use it, please report any iss 由於修改時間無效,更新元數據時出錯。 - - - - - - + + + + + + The folder %1 cannot be made read-only: %2 無法將資料夾 %1 設為唯讀:%2 - - + + unknown exception 不詳例外 @@ -4696,12 +4691,6 @@ This is a new, experimental mode. If you decide to use it, please report any iss File %1 downloaded but it resulted in a local file name clash! 已下載檔案 %1,但其導致了近端檔案名稱衝突! - - - - Could not get file %1 from local DB - 無法從近端數據庫獲取檔案 %1 - @@ -4709,6 +4698,13 @@ This is a new, experimental mode. If you decide to use it, please report any iss could not get file %1 from local DB 無法從近端數據庫獲取檔案 %1 + + + + + Could not get file %1 from local DB + 無法從近端數據庫獲取檔案 %1 + @@ -4810,13 +4806,13 @@ This is a new, experimental mode. If you decide to use it, please report any iss 從伺服器端回傳錯誤的 HTTP 代碼, 預期是 201, 但是接收到的是 "%1 %2"。 - - Could not get file %1 from local DB + + could not get file %1 from local DB 無法從近端數據庫獲取檔案 %1 - - could not get file %1 from local DB + + Could not get file %1 from local DB 無法從近端數據庫獲取檔案 %1 @@ -5067,7 +5063,7 @@ This is a new, experimental mode. If you decide to use it, please report any iss OCC::ShareManager - + Error 錯誤 @@ -5075,17 +5071,17 @@ This is a new, experimental mode. If you decide to use it, please report any iss OCC::ShareModel - + %1 days %1 天 - + 1 day 1 日 - + Today 今日 @@ -5115,7 +5111,7 @@ This is a new, experimental mode. If you decide to use it, please report any iss 安全檔案投放 - + Could not find local folder for %1 找不到 %1 的近端資料夾 @@ -5238,11 +5234,6 @@ Server replied with error: %2 Resharing this folder is not allowed 不允許重新分享此資料夾 - - - Copy internal link - 複製內部連結 - Copy secure file drop link @@ -5254,6 +5245,11 @@ Server replied with error: %2 Copy public link 複製公共連結 + + + Copy internal link + 複製內部連結 + Copy secure filedrop link @@ -5285,16 +5281,16 @@ Server replied with error: %2 remaining time before lock expires %1 分鐘後過期 - - - Open in browser - 用瀏覽器打開 - Edit 編輯 + + + Open in browser + 用瀏覽器打開 + Resolve conflict … @@ -5827,10 +5823,10 @@ Server replied with error: %2 - - - - + + + + Error updating metadata for a folder %1 錯誤更新資料夾 %1 的元數據 @@ -5850,7 +5846,7 @@ Server replied with error: %2 無法添加或移除用戶 %1 存取資料夾 %2 的權限 - + Failed to unlock a folder. 無法解鎖資料夾。 @@ -5868,7 +5864,7 @@ Server replied with error: %2 觸發遷移 - + %1 notifications %1 個通知 @@ -5884,17 +5880,17 @@ Server replied with error: %2 解決抵觸 - + Rename file 重新命名檔案 - + Open Nextcloud Assistant in browser 在瀏覽器中開啟 Nextcloud Assistant - + Open Nextcloud Talk in browser 在瀏覽器中開啟 Nextcloud Talk @@ -6024,32 +6020,22 @@ Server replied with error: %2 Please choose a different location. %1 is a drive. It doesn't support virtual files. - + 請選擇其他位置。%1 是磁碟機。其不支援虛擬檔案。 - The Virtual filesystem feature does not support a drive as sync root - 虛擬檔案系統功能不支援磁碟機作為同步根 + The Virtual filesystem feature requires a NTFS file system, %1 is using %2 + 虛擬檔案系統功能需要一個 NTFS 檔案系統,%1 正在使用 %2 Please choose a different location. %1 isn't a NTFS file system. It doesn't support virtual files. - - - - - The Virtual filesystem feature requires a NTFS file system, %1 is using %2 - 虛擬檔案系統功能需要一個 NTFS 檔案系統,%1 正在使用 %2 + 請選擇其他位置。%1 不是 NTFS 檔案系統。其不支援虛擬檔案。 Please choose a different location. %1 is a network drive. It doesn't support virtual files. - - - - - The Virtual filesystem feature is not supported on network drives - 網路磁碟機不支援虛擬檔案系統功能 + 請選擇其他位置。%1 是網路磁碟機。其不支援虛擬檔案。 @@ -6190,12 +6176,12 @@ Server replied with error: %2 %1 帳戶所在的伺服器正運行不受支援的舊版本 %2。此客戶端在該伺服器版本上未經測試,可能會有風險。請慎行。 - + 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 以確認您已閱讀並同意。 @@ -6271,23 +6257,23 @@ Server replied with error: %2 尚未設定同步資料夾 - + %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:同步正在進行中。 - + macOS VFS for %1: Last sync was successful. macOS VFS for %1:上次同步成功。 - + macOS VFS for %1: A problem was encountered. macOS VFS for %1:遇到了一個問題。 @@ -6733,7 +6719,7 @@ Server replied with error: %2 搜尋用戶或是群組 ... - + Sharing is not available for this folder 此資料夾無法共享 @@ -7144,11 +7130,6 @@ Server replied with error: %2 downloading 下載中 - - - Downloading - 下載中 - uploading @@ -7156,8 +7137,8 @@ Server replied with error: %2 - Uploading - 上傳中 + Downloading + 下載中 @@ -7166,8 +7147,8 @@ Server replied with error: %2 - Deleting - 刪除中 + Uploading + 上傳中 @@ -7175,9 +7156,9 @@ Server replied with error: %2 搬移中 - - Moving - 移動中 + + Deleting + 刪除中 @@ -7186,26 +7167,31 @@ Server replied with error: %2 - Ignoring - 忽略中 + Moving + 移動中 error 錯誤 + + + Ignoring + 忽略中 + updating local metadata 正在更新近端元資料 - + Updating local metadata 正在更新近端元資料 - + Updating local virtual files metadata 正在更新近端虛擬元數據 @@ -7364,19 +7350,6 @@ Server replied with error: %2 清除狀態訊息選項單 - - OCC::FormatWarningsWizardPage - - - <b>Warning:</b> %1 - <b>警告:</b> %1 - - - - <b>Warning:</b> - <b>警告:</b> - - OCC::AbstractPropagateRemoteDeleteEncrypted @@ -7390,6 +7363,19 @@ Server replied with error: %2 "%1 無法解鎖已加密資料夾 %2"。 + + OCC::FormatWarningsWizardPage + + + <b>Warning:</b> %1 + <b>警告:</b> %1 + + + + <b>Warning:</b> + <b>警告:</b> + + OCC::OAuth diff --git a/translations/client_zh_TW.ts b/translations/client_zh_TW.ts index 4e36e8f3df171..f39b6fd5b0cef 100644 --- a/translations/client_zh_TW.ts +++ b/translations/client_zh_TW.ts @@ -172,13 +172,13 @@ - + Resume sync for all 繼續所有同步 - + Pause sync for all 暫停所有同步 @@ -193,32 +193,32 @@ 加入新帳號 - + Settings 設定 - + Exit 離開 - + Current account avatar 目前帳號大頭照 - + Current account status is online 目前帳號狀態為在線上 - + Current account status is do not disturb 目前帳號狀態為請勿打擾 - + Account switcher and settings menu 帳號切換器與設定選單 @@ -307,17 +307,17 @@ FileProviderEvictionDialog - + Evict materialised files 驅逐已實體化的檔案 - + Materialised items 物化項目 - + Reload 重新載入 @@ -493,17 +493,17 @@ MainWindow - + Nextcloud desktop main dialog Nextcloud 桌面主要對話方塊 - + Unified search results list 統一搜尋結果清單 - + New activities 新活動 @@ -554,14 +554,14 @@ Should an account import be attempted? 是否要嘗試匯入帳號? - + %1 accounts were detected from a legacy desktop client. Should the accounts be imported? 偵測到 %1 個舊版桌面客戶端的帳號。 是否該匯入這些帳號? - + 1 account was detected from a legacy desktop client. Should the account be imported? 偵測到 1 個舊版桌面客戶端的帳號。 @@ -575,12 +575,12 @@ Should the account be imported? 舊版匯入 - + Import 匯入 - + Skip 略過 @@ -675,12 +675,12 @@ Should the account be imported? 加密資料夾 - + 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> 這將會加密您的資料夾與其中的所有檔案。一旦丟失您的加密記憶關鍵密語,將無法再存取這些檔案。 @@ -712,17 +712,17 @@ Should the account be imported? 警告 - + 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 資料夾有同步錯誤。等同步成功後才能加密此資料夾 @@ -978,7 +978,7 @@ This action will abort any currently running synchronization. 未連線到在 %2 的 %1。 - + Unable to connect to %1. 無法連線至 %1。 @@ -988,7 +988,7 @@ This action will abort any currently running synchronization. 伺服器組態設定錯誤:%1 於 %2。 - + You need to accept the terms of service 您必須接受服務條款 @@ -1018,7 +1018,7 @@ This action will abort any currently running synchronization. 有些資料夾因為容量太大或是位在外部儲存空間而無法同步: - + There are folders that have grown in size beyond %1MB: %2 有些資料夾的大小已超過 %1MB:%2 @@ -1220,34 +1220,39 @@ This action will abort any currently running synchronization. 繼續 - + + Quit %1 + 離開 %1 + + + %1 accounts number of accounts imported %1 個帳號 - + 1 account 1 個帳號 - + %1 folders number of folders imported %1 個資料夾 - + 1 folder 1 個資料夾 - + Legacy import 舊版匯入 - + Imported %1 and %2 from a legacy desktop client. %3 number of accounts and folders imported. list of users. @@ -1264,11 +1269,6 @@ This action will abort any currently running synchronization. There was an error while accessing the configuration file at %1. Please make sure the file can be accessed by your system account. 存取位於 %1 的組態設定檔時發生錯誤。請確保您的系統帳號可以存取該檔案。 - - - Quit %1 - 離開 %1 - OCC::AuthenticationDialog @@ -1733,13 +1733,13 @@ This action will abort any currently running synchronization. 伺服器錯誤:PROPFIND 回覆未使用 XML 格式! - - + + Encrypted metadata setup error! 已加密的詮釋資料設定錯誤! - + Encrypted metadata setup error: initial signature from server is empty. 加密中繼資料設定錯誤:來自伺服器的初始簽章為空。 @@ -2134,17 +2134,17 @@ This can be an issue with your OpenSSL libraries. Please choose a different location. The folder %1 doesn't exist. - + 請選擇其他位置。資料夾 %1 不存在。 Please choose a different location. %1 isn't a valid folder. - + 請選擇其他位置。%1 並非有效的資料夾。 Please choose a different location. %1 isn't a readable folder. - + 請選擇其他位置。%1 並非可讀取的資料夾。 @@ -2295,29 +2295,29 @@ If this was an accident and you decide to keep your files, they will be re-synce 保留檔案 - + A folder has surpassed the set folder size limit of %1MB: %2. %3 資料夾已超過設定的資料夾大小限制 %1MB:%2。 %3 - + Keep syncing 保持同步 - + Stop syncing 停止同步 - + The folder %1 has surpassed the set folder size limit of %2MB. 資料夾 %1 已超過設定的資料夾大小限制 %2MB。 - + Would you like to stop syncing this folder? 您想要停止同步此資料夾嗎? @@ -2345,12 +2345,12 @@ 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" 虛擬檔案下載失敗,代碼「%1」,狀態「%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. @@ -2359,7 +2359,7 @@ Alternatively, you can restore all deleted files by uploading from '%1&apos 或者,您也可以從「%1」資料夾上傳至伺服器來還原所有已刪除的檔案。 - + 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. @@ -2368,22 +2368,22 @@ Alternatively, you can restore all deleted files by downloading them from the se 或者,您也可以從伺服器下載這些檔案來還原所有已刪除的檔案。 - + Remove all files? 移除所有檔案? - + Proceed with Deletion 繼續刪除 - + Restore Files to Server 還原檔案至伺服器 - + Restore Files from Server 從伺服器還原檔案 @@ -2454,32 +2454,32 @@ Alternatively, you can restore all deleted files by downloading them from the se 正在準備同步。 - + Syncing %1 of %2 (A few seconds left) 正在同步 %1,共 %2(還剩幾秒) - + Syncing %1 of %2 (%3 left) 正在同步 %1,共 %2(剩餘 %3) - + Syncing %1 of %2 正在同步第 %1 項,共 %2 項 - + Syncing %1 (A few seconds left) 正在同步 %1(還剩幾秒) - + Syncing %1 (%2 left) 正在同步第 %1 項(剩餘 %2 項) - + Syncing %1 正在同步 %1 @@ -2523,16 +2523,6 @@ Alternatively, you can restore all deleted files by downloading them from the se No valid folder selected! 未選取有效的資料夾! - - - The folder %1 is used in a folder sync connection! - 資料夾 %1 用於資料夾同步連線! - - - - Please choose a different location. The selected folder isn't valid. - - The selected path does not exist! @@ -2543,62 +2533,67 @@ Alternatively, you can restore all deleted files by downloading them from the se The selected path is not a folder! 所選的路徑並非資料夾! - - - - Please choose a different location. %1 is already being used as a sync folder. - - You have no permission to write to the selected folder! 您無權寫入選取的資料夾! + + + The local folder %1 already contains a folder used in a folder sync connection. Please pick another one! + 本機資料夾 %1 中,已經有個處於資料夾同步連線中的資料夾。請改選其他資料夾! + + + + The local folder %1 is already contained in a folder used in a folder sync connection. Please pick another one! + 本機資料夾 %1 位在一個已經處於資料夾同步連線中的資料夾。請改選其他資料夾! + + + + There is already a sync from the server to this local folder. Please pick another local folder! + 此本機資料夾已設為與伺服器同步。請改選其他本機資料夾! + + + + 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. + 請選擇其他位置。%1 已用作同步資料夾。 + Please choose a different location. The path %1 doesn't exist. - + 請選擇其他位置。路徑 %1 不存在。 Please choose a different location. The path %1 isn't a folder. - + 請選擇其他位置。路徑 %1 不是資料夾。 Please choose a different location. You don't have enough permissions to write to %1. folder location - - - - - The local folder %1 already contains a folder used in a folder sync connection. Please pick another one! - 本機資料夾 %1 中,已經有個處於資料夾同步連線中的資料夾。請改選其他資料夾! - - - - The local folder %1 is already contained in a folder used in a folder sync connection. Please pick another one! - 本機資料夾 %1 位在一個已經處於資料夾同步連線中的資料夾。請改選其他資料夾! + 請選擇其他位置。您沒有權限寫入 %1。 Please choose a different location. %1 is already contained in a folder used as a sync folder. - - - - - There is already a sync from the server to this local folder. Please pick another local folder! - 此本機資料夾已設為與伺服器同步。請改選其他本機資料夾! + 請選擇其他位置。%1 已包含在用作同步資料夾的資料夾中。 Please choose a different location. %1 is already being used as a sync folder for %2. folder location, server url - + 請選擇其他位置。%1 已用作 %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. @@ -2706,12 +2701,12 @@ For advanced users: this issue might be related to multiple sync database files 正在排解更動 - + 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'" %1 %2…… @@ -2729,7 +2724,7 @@ For advanced users: this issue might be related to multiple sync database files , - + Download %1/s Example text: "Download 24Kb/s" (%1 is replaced by 24Kb (translated)) 下載 %1/秒 @@ -2746,7 +2741,7 @@ For advanced users: this issue might be related to multiple sync database files ↓ %1/秒 - + Upload %1/s Example text: "Upload 24Kb/s" (%1 is replaced by 24Kb (translated)) 上傳 %1/秒 @@ -2797,12 +2792,12 @@ For advanced users: this issue might be related to multiple sync database files 檔案 %1 / %2 - + File %1 of %2 第 %1 個檔案,共 %2 個 - + About to start syncing 將要開始同步 @@ -2911,7 +2906,7 @@ 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. - + 請選擇其他位置。%1 已同步至 %2。 @@ -2956,7 +2951,7 @@ For advanced users: this issue might be related to multiple sync database files Virtual files are not supported at the selected location - + 選定的位置不支援虛擬檔案 @@ -3168,7 +3163,7 @@ For advanced users: this issue might be related to multiple sync database files 需要注意的伺服器通知。 - + Show chat notification dialogs. 顯示聊天通知對話方塊 @@ -3209,17 +3204,17 @@ Note that this selects only what pool upgrades are taken from, and that there ar 請注意,這只能選取要從哪個軟體庫中取得升級,無法降級:所以像是從測試頻道切回穩定頻道,也無法立即作用,這代表要等到穩定版推出的版本比目前安裝的測試版還新時才算切換成功。 - + daily 每日 - + enterprise 企業版 - + - beta: contains versions with new features that may not be tested thoroughly - daily: contains versions created daily only for testing and development @@ -3231,7 +3226,7 @@ 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. @@ -3241,12 +3236,12 @@ 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 @@ -3942,7 +3937,7 @@ Note that using any logging command line options will override this setting. Virtual files are not supported at the selected location - + 選定的位置不支援虛擬檔案 @@ -4299,30 +4294,30 @@ This is a new, experimental mode. If you decide to use it, please report any iss 此檔案名稱為檔案系統的保留名稱。 - + 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 此檔案系統不支援包含字元「%2」的 %1 名稱。 - + %1 name contains at least one invalid character %1 名稱至少包含一個無效字元 - + %1 name is a reserved name on this file system. %1 名稱是此檔案系統上的保留名稱。 @@ -4377,22 +4372,22 @@ This is a new, experimental mode. If you decide to use it, please report any iss 伺服器已將此檔名列為黑名單。 - + Reason: the entire filename is forbidden. 理由:整個檔案名稱被禁止。 - + Reason: the filename has a forbidden base name (filename start). 理由:檔案名稱有禁止的基本名稱(檔案名稱開頭)。 - + Reason: the file has a forbidden extension (.%1). 理由:檔案名稱有禁止的副檔名 (.%1)。 - + Reason: the filename contains a forbidden character (%1). 理由:檔案名稱包含禁止的字元 (%1)。 @@ -4427,7 +4422,7 @@ This is a new, experimental mode. If you decide to use it, please report any iss 由於修改時間無效,無法同步 - + Could not upload file, because it is open in "%1". 無法上傳檔案,因為其於「%1」開啟。 @@ -4510,18 +4505,18 @@ This is a new, experimental mode. If you decide to use it, please report any iss 因為修改時間無效,更新中介資料時發生錯誤 - - - - - - + + + + + + The folder %1 cannot be made read-only: %2 無法將資料夾 %1 設為唯讀:%2 - - + + unknown exception 未知例外 @@ -4695,12 +4690,6 @@ This is a new, experimental mode. If you decide to use it, please report any iss File %1 downloaded but it resulted in a local file name clash! 已下載檔案 %1,但它導致本機檔案名稱衝突! - - - - Could not get file %1 from local DB - 無法從本機資料庫取得檔案 %1 - @@ -4708,6 +4697,13 @@ This is a new, experimental mode. If you decide to use it, please report any iss could not get file %1 from local DB 無法從本機資料庫取得檔案 %1 + + + + + Could not get file %1 from local DB + 無法從本機資料庫取得檔案 %1 + @@ -4809,13 +4805,13 @@ This is a new, experimental mode. If you decide to use it, please report any iss 伺服器回傳錯誤的 HTTP 代碼。預期為 201,但收到的是「%1 %2」。 - - Could not get file %1 from local DB + + could not get file %1 from local DB 無法從本機資料庫取得檔案 %1 - - could not get file %1 from local DB + + Could not get file %1 from local DB 無法從本機資料庫取得檔案 %1 @@ -5066,7 +5062,7 @@ This is a new, experimental mode. If you decide to use it, please report any iss OCC::ShareManager - + Error 錯誤 @@ -5074,17 +5070,17 @@ This is a new, experimental mode. If you decide to use it, please report any iss OCC::ShareModel - + %1 days %1天 - + 1 day 1天 - + Today 今天 @@ -5114,7 +5110,7 @@ This is a new, experimental mode. If you decide to use it, please report any iss 安全檔案投放 - + Could not find local folder for %1 找不到 %1 的本機資料夾 @@ -5237,11 +5233,6 @@ Server replied with error: %2 Resharing this folder is not allowed 此資料夾不允許轉發分享 - - - Copy internal link - 複製內部連結 - Copy secure file drop link @@ -5253,6 +5244,11 @@ Server replied with error: %2 Copy public link 複製公開連結 + + + Copy internal link + 複製內部連結 + Copy secure filedrop link @@ -5284,16 +5280,16 @@ Server replied with error: %2 remaining time before lock expires %1 分鐘內過期 - - - Open in browser - 用瀏覽器打開 - Edit 編輯 + + + Open in browser + 用瀏覽器打開 + Resolve conflict … @@ -5826,10 +5822,10 @@ Server replied with error: %2 - - - - + + + + Error updating metadata for a folder %1 更新資料夾 %1 的詮釋資料時發生錯誤 @@ -5849,7 +5845,7 @@ Server replied with error: %2 無法新增或刪除使用者 %1 存取資料夾 %2 的權限 - + Failed to unlock a folder. 解鎖資料夾失敗。 @@ -5867,7 +5863,7 @@ Server replied with error: %2 觸發遷移 - + %1 notifications %1 個通知 @@ -5883,17 +5879,17 @@ Server replied with error: %2 解決衝突 - + Rename file 重新命名檔案 - + Open Nextcloud Assistant in browser 在瀏覽器中開啟 Nextcloud Assistant - + Open Nextcloud Talk in browser 在瀏覽器中開啟 Nextcloud Talk @@ -6023,32 +6019,22 @@ Server replied with error: %2 Please choose a different location. %1 is a drive. It doesn't support virtual files. - + 請選擇其他位置。%1 是磁碟機。其不支援虛擬檔案。 - The Virtual filesystem feature does not support a drive as sync root - 虛擬檔案系統功能不支援將磁碟機作為同步根目錄 + The Virtual filesystem feature requires a NTFS file system, %1 is using %2 + 虛擬檔案系統功能需要採用 NTFS 檔案系統,而 %1 正在使用 %2 Please choose a different location. %1 isn't a NTFS file system. It doesn't support virtual files. - - - - - The Virtual filesystem feature requires a NTFS file system, %1 is using %2 - 虛擬檔案系統功能需要採用 NTFS 檔案系統,而 %1 正在使用 %2 + 請選擇其他位置。%1 不是 NTFS 檔案系統。其不支援虛擬檔案。 Please choose a different location. %1 is a network drive. It doesn't support virtual files. - - - - - The Virtual filesystem feature is not supported on network drives - 網路磁碟機不支援虛擬檔案系統功能 + 請選擇其他位置。%1 是網路磁碟機。其不支援虛擬檔案。 @@ -6189,12 +6175,12 @@ Server replied with error: %2 帳號 %1 所在的伺服器執行了不支援的版本 %2。將此客戶端搭配不支援的伺服器版本一同使用,此行為未經測試且有潛在危險。若要繼續,請自負風險。 - + 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 以確認您已閱讀並同意。 @@ -6270,23 +6256,23 @@ Server replied with error: %2 未設定同步資料夾組態 - + %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. %1 的 macOS VFS:正在同步。 - + macOS VFS for %1: Last sync was successful. %1 的 macOS VFS:上次同步成功。 - + macOS VFS for %1: A problem was encountered. %1 的 macOS VFS:遇到問題。 @@ -6732,7 +6718,7 @@ Server replied with error: %2 搜尋使用者或群組… - + Sharing is not available for this folder 無法分享此資料夾 @@ -7143,11 +7129,6 @@ Server replied with error: %2 downloading 正在下載 - - - Downloading - 正在下載 - uploading @@ -7155,8 +7136,8 @@ Server replied with error: %2 - Uploading - 正在上傳 + Downloading + 正在下載 @@ -7165,8 +7146,8 @@ Server replied with error: %2 - Deleting - 正在刪除 + Uploading + 正在上傳 @@ -7174,9 +7155,9 @@ Server replied with error: %2 正在移動 - - Moving - 正在移動 + + Deleting + 正在刪除 @@ -7185,26 +7166,31 @@ Server replied with error: %2 - Ignoring - 正在忽略 + Moving + 正在移動 error 錯誤 + + + Ignoring + 正在忽略 + updating local metadata 正在更新本機中介資料 - + Updating local metadata 正在更新本機中繼資料 - + Updating local virtual files metadata 正在更新本機虛擬檔案中繼資料 @@ -7363,19 +7349,6 @@ Server replied with error: %2 清除狀態訊息選單 - - OCC::FormatWarningsWizardPage - - - <b>Warning:</b> %1 - <b>警告:</b> %1 - - - - <b>Warning:</b> - <b>警告:</b> - - OCC::AbstractPropagateRemoteDeleteEncrypted @@ -7389,6 +7362,19 @@ Server replied with error: %2 「%1 無法解鎖已加密的資料夾 %2」。 + + OCC::FormatWarningsWizardPage + + + <b>Warning:</b> %1 + <b>警告:</b> %1 + + + + <b>Warning:</b> + <b>警告:</b> + + OCC::OAuth From 90e4a53d223b087d92a1c4536d27687aaad634cd Mon Sep 17 00:00:00 2001 From: Jyrki Gadinger Date: Wed, 12 Feb 2025 16:42:30 +0100 Subject: [PATCH 002/139] fix rounded corners in the call notification also enforce a non-transparent base background colour (e.g. for Win11) Signed-off-by: Jyrki Gadinger --- src/gui/tray/CallNotificationDialog.qml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/gui/tray/CallNotificationDialog.qml b/src/gui/tray/CallNotificationDialog.qml index 8ab7bc6665f86..3050540279798 100644 --- a/src/gui/tray/CallNotificationDialog.qml +++ b/src/gui/tray/CallNotificationDialog.qml @@ -24,7 +24,7 @@ import Qt5Compat.GraphicalEffects ApplicationWindow { id: root - color: palette.base + color: "transparent" flags: Qt.Dialog | Qt.FramelessWindowHint | Qt.WindowStaysOnTopHint readonly property int windowSpacing: 10 @@ -89,7 +89,7 @@ ApplicationWindow { width: parent.width height: contentLayout.height + (root.windowSpacing * 2) radius: Systray.useNormalWindow ? 0.0 : Style.trayWindowRadius - color: palette.base + color: Style.colorWithoutTransparency(palette.base) border.width: Style.trayWindowBorderWidth border.color: palette.dark clip: true From c0ada1fc3bbcf0101d49f87a5242e43f46df8dfc Mon Sep 17 00:00:00 2001 From: Nextcloud bot Date: Fri, 14 Feb 2025 02:57:52 +0000 Subject: [PATCH 003/139] Fix(l10n): Update translations from Transifex Signed-off-by: Nextcloud bot --- translations/client_ga.ts | 34 +++++++++++++++++----------------- translations/client_zh_CN.ts | 34 +++++++++++++++++----------------- 2 files changed, 34 insertions(+), 34 deletions(-) diff --git a/translations/client_ga.ts b/translations/client_ga.ts index 9dd421c7fd6b3..1371a0cf1a192 100644 --- a/translations/client_ga.ts +++ b/translations/client_ga.ts @@ -35,7 +35,7 @@ Scroll to top - + Scrollaigh go barr @@ -2134,17 +2134,17 @@ Féadfaidh sé seo a bheith ina fhadhb le do leabharlanna OpenSSL. Please choose a different location. The folder %1 doesn't exist. - + Roghnaigh suíomh eile le do thoil. Níl fillteán %1 ann. Please choose a different location. %1 isn't a valid folder. - + Roghnaigh suíomh eile le do thoil. Ní fillteán bailí é %1. Please choose a different location. %1 isn't a readable folder. - + Roghnaigh suíomh eile le do thoil. Ní fillteán inléite é %1. @@ -2556,41 +2556,41 @@ De rogha air sin, is féidir leat gach comhad a scriosadh a chur ar ais trína n Please choose a different location. The selected folder isn't valid. - + Roghnaigh suíomh eile le do thoil. Níl an fillteán roghnaithe bailí. Please choose a different location. %1 is already being used as a sync folder. - + Roghnaigh suíomh eile le do thoil. Tá %1 á úsáid mar fhillteán sioncronaithe cheana. Please choose a different location. The path %1 doesn't exist. - + Roghnaigh suíomh eile le do thoil. Níl conair %1 ann. Please choose a different location. The path %1 isn't a folder. - + Roghnaigh suíomh eile le do thoil. Ní fillteán é conair %1. Please choose a different location. You don't have enough permissions to write to %1. folder location - + Roghnaigh suíomh eile le do thoil. Níl go leor ceadanna agat chun scríobh chuig %1. Please choose a different location. %1 is already contained in a folder used as a sync folder. - + Roghnaigh suíomh eile le do thoil. Tá %1 i bhfillteán a úsáidtear mar fhillteán sioncronaithe cheana. Please choose a different location. %1 is already being used as a sync folder for %2. folder location, server url - + Roghnaigh suíomh eile le do thoil. Tá %1 in úsáid cheana mar fhillteán sioncronaithe le haghaidh %2. @@ -2906,7 +2906,7 @@ D'úsáideoirí ardleibhéil: d'fhéadfadh an cheist seo a bheith bain Please choose a different location. %1 is already being synced to %2. - + Roghnaigh suíomh eile le do thoil. Tá %1 á shioncronú go %2 cheana féin. @@ -2951,7 +2951,7 @@ D'úsáideoirí ardleibhéil: d'fhéadfadh an cheist seo a bheith bain Virtual files are not supported at the selected location - + Ní thacaítear le comhaid fhíorúla ag an suíomh roghnaithe @@ -3937,7 +3937,7 @@ Tabhair faoi deara go sárófar an socrú seo trí úsáid a bhaint as aon rogha Virtual files are not supported at the selected location - + Ní thacaítear le comhaid fhíorúla ag an suíomh roghnaithe @@ -6019,7 +6019,7 @@ D'fhreagair an freastalaí le hearráid: % 2 Please choose a different location. %1 is a drive. It doesn't support virtual files. - + Roghnaigh suíomh eile le do thoil. Is tiomántán é %1. Ní thacaíonn sé le comhaid fhíorúla. @@ -6029,12 +6029,12 @@ D'fhreagair an freastalaí le hearráid: % 2 Please choose a different location. %1 isn't a NTFS file system. It doesn't support virtual files. - + Roghnaigh suíomh eile le do thoil. Ní córas comhaid NTFS é %1. Ní thacaíonn sé le comhaid fhíorúla. Please choose a different location. %1 is a network drive. It doesn't support virtual files. - + Roghnaigh suíomh eile le do thoil. Is tiomántán líonra é %1. Ní thacaíonn sé le comhaid fhíorúla. diff --git a/translations/client_zh_CN.ts b/translations/client_zh_CN.ts index 2928ce426c5b9..3494acbd2d7d1 100644 --- a/translations/client_zh_CN.ts +++ b/translations/client_zh_CN.ts @@ -35,7 +35,7 @@ Scroll to top - + 滚动至顶部 @@ -2130,17 +2130,17 @@ This can be an issue with your OpenSSL libraries. Please choose a different location. The folder %1 doesn't exist. - + 请选择其他位置,文件夹 %1 不存在。 Please choose a different location. %1 isn't a valid folder. - + 请选择其他位置,%1 不是有效的文件夹。 Please choose a different location. %1 isn't a readable folder. - + 请选择其他位置,%1 不是可读文件夹。 @@ -2552,41 +2552,41 @@ Alternatively, you can restore all deleted files by downloading them from the se 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. - + 请选择其他位置,%1 已被用作同步文件夹。 Please choose a different location. The path %1 doesn't exist. - + 请选择其他位置,路径 %1 不存在。 Please choose a different location. The path %1 isn't a folder. - + 请选择其他位置,路径 %1 不是文件夹。 Please choose a different location. You don't have enough permissions to write to %1. folder location - + 请选择其他位置,您没有足够的权限写入 %1。 Please choose a different location. %1 is already contained in a folder used as a sync folder. - + 请选择其他位置,%1 已包含在用作同步文件夹的文件夹中。 Please choose a different location. %1 is already being used as a sync folder for %2. folder location, server url - + 请选择其他位置,%1 已被用作 %2 的同步文件夹。 @@ -2902,7 +2902,7 @@ 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. - + 请选择其他位置,%1 已同步到 %2。 @@ -2947,7 +2947,7 @@ For advanced users: this issue might be related to multiple sync database files Virtual files are not supported at the selected location - + 所选位置不支持虚拟文件 @@ -3931,7 +3931,7 @@ Note that using any logging command line options will override this setting. Virtual files are not supported at the selected location - + 所选位置不支持虚拟文件 @@ -6007,7 +6007,7 @@ Server replied with error: %2 Please choose a different location. %1 is a drive. It doesn't support virtual files. - + 请选择其他位置,%1 是驱动器,它不支持虚拟文件。 @@ -6017,12 +6017,12 @@ Server replied with error: %2 Please choose a different location. %1 isn't a NTFS file system. It doesn't support virtual files. - + 请选择其他位置,%1 不是 NTFS 文件系统,它不支持虚拟文件。 Please choose a different location. %1 is a network drive. It doesn't support virtual files. - + 请选择其他位置,%1 是网络驱动器,它不支持虚拟文件。 From 4fa42201326d4591fa834ed7496b52f9ecfd2b5e Mon Sep 17 00:00:00 2001 From: Jyrki Gadinger Date: Thu, 13 Feb 2025 14:10:36 +0100 Subject: [PATCH 004/139] don't use palette.dark for icons in share page Signed-off-by: Jyrki Gadinger --- src/gui/filedetails/NCInputTextEdit.qml | 2 +- src/gui/filedetails/NCInputTextField.qml | 2 +- src/gui/filedetails/ShareDetailsPage.qml | 8 ++++---- src/gui/tray/NCBusyIndicator.qml | 2 +- 4 files changed, 7 insertions(+), 7 deletions(-) diff --git a/src/gui/filedetails/NCInputTextEdit.qml b/src/gui/filedetails/NCInputTextEdit.qml index a2b95fc330dc6..24dacdd3a831d 100644 --- a/src/gui/filedetails/NCInputTextEdit.qml +++ b/src/gui/filedetails/NCInputTextEdit.qml @@ -23,7 +23,7 @@ TextEdit { id: root readonly property color accentColor: palette.highlight - readonly property color secondaryColor: palette.dark + readonly property color secondaryColor: palette.placeholderText readonly property alias submitButton: submitButton clip: true diff --git a/src/gui/filedetails/NCInputTextField.qml b/src/gui/filedetails/NCInputTextField.qml index 6a9b9f17023a4..be1ad2558bce5 100644 --- a/src/gui/filedetails/NCInputTextField.qml +++ b/src/gui/filedetails/NCInputTextField.qml @@ -23,7 +23,7 @@ TextField { id: root readonly property color accentColor: Style.ncBlue - readonly property color secondaryColor: palette.dark + readonly property color secondaryColor: palette.placeholderText readonly property alias submitButton: submitButton property bool validInput: true diff --git a/src/gui/filedetails/ShareDetailsPage.qml b/src/gui/filedetails/ShareDetailsPage.qml index 2b2eb0b45ef15..79897f73f44bd 100644 --- a/src/gui/filedetails/ShareDetailsPage.qml +++ b/src/gui/filedetails/ShareDetailsPage.qml @@ -277,7 +277,7 @@ Page { horizontalAlignment: Image.AlignHCenter fillMode: Image.Pad - source: "image://svgimage-custom-color/edit.svg/" + palette.dark + source: "image://svgimage-custom-color/edit.svg/" + palette.windowText sourceSize.width: scrollContentsColumn.rowIconWidth sourceSize.height: scrollContentsColumn.rowIconWidth } @@ -501,7 +501,7 @@ Page { horizontalAlignment: Image.AlignHCenter fillMode: Image.Pad - source: "image://svgimage-custom-color/lock-https.svg/" + palette.dark + source: "image://svgimage-custom-color/lock-https.svg/" + palette.windowText sourceSize.width: scrollContentsColumn.rowIconWidth sourceSize.height: scrollContentsColumn.rowIconWidth } @@ -607,7 +607,7 @@ Page { horizontalAlignment: Image.AlignHCenter fillMode: Image.Pad - source: "image://svgimage-custom-color/calendar.svg/" + palette.dark + source: "image://svgimage-custom-color/calendar.svg/" + palette.windowText sourceSize.width: scrollContentsColumn.rowIconWidth sourceSize.height: scrollContentsColumn.rowIconWidth } @@ -692,7 +692,7 @@ Page { horizontalAlignment: Image.AlignHCenter fillMode: Image.Pad - source: "image://svgimage-custom-color/edit.svg/" + palette.dark + source: "image://svgimage-custom-color/edit.svg/" + palette.windowText sourceSize.width: scrollContentsColumn.rowIconWidth sourceSize.height: scrollContentsColumn.rowIconWidth } diff --git a/src/gui/tray/NCBusyIndicator.qml b/src/gui/tray/NCBusyIndicator.qml index e57161897eef0..583b787bcbe9d 100644 --- a/src/gui/tray/NCBusyIndicator.qml +++ b/src/gui/tray/NCBusyIndicator.qml @@ -19,7 +19,7 @@ import Style BusyIndicator { id: root - property color color: palette.dark + property color color: palette.windowText property string imageSource: "image://svgimage-custom-color/change.svg/" property int imageSourceSizeWidth: 64 From 7e819b3c045dcf7e90de44ea928aa4ec60397a0a Mon Sep 17 00:00:00 2001 From: Jyrki Gadinger Date: Thu, 13 Feb 2025 14:14:30 +0100 Subject: [PATCH 005/139] use TextArea instead of TextEdit for share note field it's already styled properly as it's part of Qt Quick Controls, **and** it allows for a placeholder text! also changed the logic for displaying the text field a bit ... Fixes #7847 Signed-off-by: Jyrki Gadinger --- resources.qrc | 2 +- ...CInputTextEdit.qml => NCInputTextArea.qml} | 21 ++++-------- src/gui/filedetails/ShareDelegate.qml | 2 -- src/gui/filedetails/ShareDetailsPage.qml | 33 +++++++++---------- src/gui/filedetails/ShareView.qml | 1 - src/gui/filedetails/sharemodel.cpp | 20 ----------- src/gui/filedetails/sharemodel.h | 2 -- test/testsharemodel.cpp | 6 ++-- 8 files changed, 26 insertions(+), 61 deletions(-) rename src/gui/filedetails/{NCInputTextEdit.qml => NCInputTextArea.qml} (77%) diff --git a/resources.qrc b/resources.qrc index 715f7cf8174bc..6036fa0e1bff0 100644 --- a/resources.qrc +++ b/resources.qrc @@ -13,7 +13,7 @@ src/gui/filedetails/FileDetailsWindow.qml src/gui/filedetails/FileTag.qml src/gui/filedetails/NCInputDateField.qml - src/gui/filedetails/NCInputTextEdit.qml + src/gui/filedetails/NCInputTextArea.qml src/gui/filedetails/NCInputTextField.qml src/gui/filedetails/NCTabButton.qml src/gui/filedetails/ShareeDelegate.qml diff --git a/src/gui/filedetails/NCInputTextEdit.qml b/src/gui/filedetails/NCInputTextArea.qml similarity index 77% rename from src/gui/filedetails/NCInputTextEdit.qml rename to src/gui/filedetails/NCInputTextArea.qml index 24dacdd3a831d..d3e917ff5113f 100644 --- a/src/gui/filedetails/NCInputTextEdit.qml +++ b/src/gui/filedetails/NCInputTextArea.qml @@ -19,28 +19,20 @@ import QtQuick.Layouts import com.nextcloud.desktopclient import Style -TextEdit { +TextArea { id: root readonly property color accentColor: palette.highlight readonly property color secondaryColor: palette.placeholderText readonly property alias submitButton: submitButton - clip: true - textMargin: Style.smallSpacing - wrapMode: TextEdit.Wrap + // no implicitHeight here -- let the textarea take as much as it needs + // otherwise it will cut off some text vertically on multi-line strings... + selectByMouse: true - height: Math.max(Style.talkReplyTextFieldPreferredHeight, contentHeight) + rightPadding: submitButton.width - Rectangle { - id: textFieldBorder - anchors.fill: parent - radius: Style.trayWindowRadius - border.width: Style.normalBorderWidth - border.color: root.activeFocus ? root.accentColor : root.secondaryColor - color: palette.base - z: -1 - } + wrapMode: TextEdit.Wrap Button { id: submitButton @@ -61,4 +53,3 @@ TextEdit { onClicked: root.editingFinished() } } - diff --git a/src/gui/filedetails/ShareDelegate.qml b/src/gui/filedetails/ShareDelegate.qml index 895153fba632a..d6bb454a94090 100644 --- a/src/gui/filedetails/ShareDelegate.qml +++ b/src/gui/filedetails/ShareDelegate.qml @@ -38,7 +38,6 @@ GridLayout { signal toggleAllowResharing(bool enable) signal togglePasswordProtect(bool enable) signal toggleExpirationDate(bool enable) - signal toggleNoteToRecipient(bool enable) signal permissionModeChanged(int permissionMode) signal setLinkShareLabel(string label) @@ -252,7 +251,6 @@ GridLayout { onToggleHideDownload: root.toggleHideDownload(enable) onTogglePasswordProtect: root.togglePasswordProtect(enable) onToggleExpirationDate: root.toggleExpirationDate(enable) - onToggleNoteToRecipient: root.toggleNoteToRecipient(enable) onPermissionModeChanged: root.permissionModeChanged(permissionMode) onSetLinkShareLabel: root.setLinkShareLabel(label) diff --git a/src/gui/filedetails/ShareDetailsPage.qml b/src/gui/filedetails/ShareDetailsPage.qml index 79897f73f44bd..8035b40d9d195 100644 --- a/src/gui/filedetails/ShareDetailsPage.qml +++ b/src/gui/filedetails/ShareDetailsPage.qml @@ -87,7 +87,6 @@ Page { readonly property bool isFolderItem: shareModelData.sharedItemType === ShareModel.SharedItemTypeFolder readonly property bool isEncryptedItem: shareModelData.sharedItemType === ShareModel.SharedItemTypeEncryptedFile || shareModelData.sharedItemType === ShareModel.SharedItemTypeEncryptedFolder || shareModelData.sharedItemType === ShareModel.SharedItemTypeEncryptedTopLevelFolder - property bool waitingForNoteEnabledChange: false property bool waitingForExpireDateEnabledChange: false property bool waitingForPasswordProtectEnabledChange: false property bool waitingForExpireDateChange: false @@ -101,7 +100,7 @@ Page { } function resetNoteField() { - noteTextEdit.text = note; + noteTextArea.text = note; waitingForNoteChange = false; } @@ -133,7 +132,7 @@ Page { function resetNoteEnabledField() { noteEnabledMenuItem.checked = noteEnabled; - waitingForNoteEnabledChange = false; + waitingForNoteChange = false; } function resetExpireDateEnabledField() { @@ -662,16 +661,18 @@ Page { checkable: true checked: root.noteEnabled text: qsTr("Note to recipient") - enabled: !root.waitingForNoteEnabledChange + enabled: !root.waitingForNoteChange onClicked: { - root.toggleNoteToRecipient(checked); - root.waitingForNoteEnabledChange = true; + if (!checked && root.note !== "") { + root.setNote(""); + root.waitingForNoteChange = true; + } } NCBusyIndicator { anchors.fill: parent - visible: root.waitingForNoteEnabledChange + visible: root.waitingForNoteChange && !noteEnabledMenuItem.checked running: visible z: 1 } @@ -682,7 +683,7 @@ Page { height: visible ? implicitHeight : 0 spacing: scrollContentsColumn.indicatorSpacing - visible: root.noteEnabled + visible: noteEnabledMenuItem.checked Image { Layout.preferredWidth: scrollContentsColumn.indicatorItemWidth @@ -697,27 +698,25 @@ Page { sourceSize.height: scrollContentsColumn.rowIconWidth } - NCInputTextEdit { - id: noteTextEdit + NCInputTextArea { + id: noteTextArea Layout.fillWidth: true - height: visible ? Math.max(Style.talkReplyTextFieldPreferredHeight, contentHeight) : 0 + // no height here -- let the textarea figure it out how much it needs submitButton.height: Math.min(Style.talkReplyTextFieldPreferredHeight, height - 2) text: root.note - enabled: root.noteEnabled && - !root.waitingForNoteChange && - !root.waitingForNoteEnabledChange + placeholderText: qsTr("Enter a note for the recipient") + enabled: noteEnabledMenuItem.checked && !root.waitingForNoteChange - onEditingFinished: if(text !== root.note) { + onEditingFinished: if (text !== "" && text !== root.note) { root.setNote(text); root.waitingForNoteChange = true; } NCBusyIndicator { anchors.fill: parent - visible: root.waitingForNoteChange || - root.waitingForNoteEnabledChange + visible: root.waitingForNoteChange && noteEnabledMenuItem.checked running: visible z: 1 } diff --git a/src/gui/filedetails/ShareView.qml b/src/gui/filedetails/ShareView.qml index 51bbb891a8897..1b7b9ca7de067 100644 --- a/src/gui/filedetails/ShareView.qml +++ b/src/gui/filedetails/ShareView.qml @@ -263,7 +263,6 @@ ColumnLayout { onToggleHideDownload: shareModel.toggleHideDownloadFromQml(model.share, enable) onTogglePasswordProtect: shareModel.toggleSharePasswordProtectFromQml(model.share, enable) onToggleExpirationDate: shareModel.toggleShareExpirationDateFromQml(model.share, enable) - onToggleNoteToRecipient: shareModel.toggleShareNoteToRecipientFromQml(model.share, enable) onPermissionModeChanged: shareModel.changePermissionModeFromQml(model.share, permissionMode) onSetLinkShareLabel: shareModel.setLinkShareLabelFromQml(model.share, label) diff --git a/src/gui/filedetails/sharemodel.cpp b/src/gui/filedetails/sharemodel.cpp index e3be7122aea61..c23ed0b05aeb3 100644 --- a/src/gui/filedetails/sharemodel.cpp +++ b/src/gui/filedetails/sharemodel.cpp @@ -1088,26 +1088,6 @@ void ShareModel::toggleShareExpirationDateFromQml(const QVariant &share, const b toggleShareExpirationDate(ptr, enable); } -void ShareModel::toggleShareNoteToRecipient(const SharePtr &share, const bool enable) const -{ - if (share.isNull()) { - return; - } - - const QString note = enable ? tr("Enter a note for the recipient") : QString(); - if (const auto linkShare = share.objectCast()) { - linkShare->setNote(note); - } else if (const auto userGroupShare = share.objectCast()) { - userGroupShare->setNote(note); - } -} - -void ShareModel::toggleShareNoteToRecipientFromQml(const QVariant &share, const bool enable) const -{ - const auto ptr = share.value(); - toggleShareNoteToRecipient(ptr, enable); -} - void ShareModel::changePermissionModeFromQml(const QVariant &share, const OCC::ShareModel::SharePermissionsMode permissionMode) { const auto sharePtr = share.value(); diff --git a/src/gui/filedetails/sharemodel.h b/src/gui/filedetails/sharemodel.h index 12b262bde7a5a..c40329b3cf3b3 100644 --- a/src/gui/filedetails/sharemodel.h +++ b/src/gui/filedetails/sharemodel.h @@ -190,8 +190,6 @@ public slots: void toggleSharePasswordProtectFromQml(const QVariant &share, const bool enable); void toggleShareExpirationDate(const OCC::SharePtr &share, const bool enable) const; void toggleShareExpirationDateFromQml(const QVariant &share, const bool enable) const; - void toggleShareNoteToRecipient(const OCC::SharePtr &share, const bool enable) const; - void toggleShareNoteToRecipientFromQml(const QVariant &share, const bool enable) const; void changePermissionModeFromQml(const QVariant &share, const OCC::ShareModel::SharePermissionsMode permissionMode); void setLinkShareLabel(const QSharedPointer &linkShare, const QString &label) const; diff --git a/test/testsharemodel.cpp b/test/testsharemodel.cpp index 1385dc73dc06c..c1e92bba66cb6 100644 --- a/test/testsharemodel.cpp +++ b/test/testsharemodel.cpp @@ -820,7 +820,7 @@ private slots: helper.resetTestData(); // Test with an existing link share. - // This one has a pre-existing password + // This one has a pre-existing note helper.appendShareReplyData(_testLinkShareDefinition); QCOMPARE(helper.shareCount(), 1); @@ -844,7 +844,7 @@ private slots: const auto linkSharePtr = sharePtr.dynamicCast(); // Need to connect to signal QSignalSpy noteSet(linkSharePtr.data(), &LinkShare::noteSet); - model.toggleShareNoteToRecipient(sharePtr, false); + model.setShareNote(sharePtr, QStringLiteral("")); QVERIFY(noteSet.wait(3000)); QCOMPARE(shareIndex.data(ShareModel::NoteEnabledRole).toBool(), false); @@ -852,7 +852,7 @@ private slots: model.setShareNote(sharePtr, note); QVERIFY(noteSet.wait(3000)); QCOMPARE(shareIndex.data(ShareModel::NoteEnabledRole).toBool(), true); - // The model stores the recently set password. + // The model stores the recently set note. // We want to present the user with it in the UI while the model is alive QCOMPARE(shareIndex.data(ShareModel::NoteRole).toString(), note); } From 80445b4ff8938944a736b611c8ee35962d36af83 Mon Sep 17 00:00:00 2001 From: Matthieu Gallien Date: Fri, 14 Feb 2025 11:40:00 +0100 Subject: [PATCH 006/139] provide consistent version info including human readable version should avoid displaying to an user a version number like 3.15.81 will remove some duplicated code should allow to always use same way to display to an user the version number will make "3.15.81" be shown as "3.16.0 rc1" Signed-off-by: Matthieu Gallien --- VERSION.cmake | 5 +++++ src/libsync/theme.cpp | 30 +++++++++++++++--------------- src/libsync/theme.h | 2 ++ version.h.in | 1 + 4 files changed, 23 insertions(+), 15 deletions(-) diff --git a/VERSION.cmake b/VERSION.cmake index 899ac62b47440..69ecf788f7f13 100644 --- a/VERSION.cmake +++ b/VERSION.cmake @@ -33,6 +33,11 @@ set( MIRALL_VERSION_STRING ${MIRALL_VERSION} ) set( MIRALL_VERSION_FULL "${MIRALL_VERSION_FULL}.${MIRALL_VERSION_BUILD}" ) set( MIRALL_VERSION_STRING "${MIRALL_VERSION}${MIRALL_VERSION_SUFFIX}" ) +if(MIRALL_VERSION_PATCH VERSION_GREATER_EQUAL "50") + set (MIRALL_HUMAN_VERSION_STRING "3.17.0 alpha") +else() + set (MIRALL_HUMAN_VERSION_STRING ${MIRALL_VERSION_STRING}) +endif() if( MIRALL_VERSION_BUILD ) set( MIRALL_VERSION_STRING "${MIRALL_VERSION_STRING} (build ${MIRALL_VERSION_BUILD})" ) diff --git a/src/libsync/theme.cpp b/src/libsync/theme.cpp index f25ff9b58f079..8927f117f6e5a 100644 --- a/src/libsync/theme.cpp +++ b/src/libsync/theme.cpp @@ -410,6 +410,18 @@ Theme::Theme() #endif } +QString Theme::developerStringInfo() const +{ + // Shorten Qt's OS name: "macOS Mojave (10.14)" -> "macOS" + const auto osStringList = Utility::platformName().split(QLatin1Char(' ')); + const auto osName = osStringList.at(0); + + const auto devString = QString(tr("

%1 Desktop Client Version %2 (%3). For more information please click here.

", "%1 is application name. %2 is the human version string. %3 is the operating system name. %4 is the help URL")) + .arg(APPLICATION_NAME, QString::fromLatin1(MIRALL_HUMAN_VERSION_STRING), osName, helpUrl()); + + return devString; +} + // If this option returns true, the client only supports one folder to sync. // The Add-Button is removed accordingly. bool Theme::singleSyncFolder() const @@ -592,13 +604,8 @@ QString Theme::gitSHA1() const QString Theme::aboutInfo() const { - // Shorten Qt's OS name: "macOS Mojave (10.14)" -> "macOS" - QStringList osStringList = Utility::platformName().split(QLatin1Char(' ')); - QString osName = osStringList.at(0); - //: Example text: "

Nextcloud Desktop Client

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

%1 Desktop Client

Version %1. For more information please click here.

") + QStringLiteral(" (%3)")) - .arg(APPLICATION_NAME, QString::fromLatin1(MIRALL_STRINGIFY(MIRALL_VERSION)), helpUrl(), osName); + auto devString = developerStringInfo(); devString += tr("

Using virtual files plugin: %1

").arg(Vfs::modeToString(bestAvailableVfsMode())); @@ -609,12 +616,7 @@ QString Theme::aboutInfo() const QString Theme::about() const { - // Shorten Qt's OS name: "macOS Mojave (10.14)" -> "macOS" - QStringList osStringList = Utility::platformName().split(QLatin1Char(' ')); - QString osName = osStringList.at(0); - - //: Example text: "

Nextcloud Desktop Client

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

%1 desktop client %2

").arg(APPLICATION_NAME, QString::fromLatin1(MIRALL_STRINGIFY(MIRALL_VERSION))); + const auto devString = developerStringInfo(); return devString; } @@ -622,9 +624,7 @@ QString Theme::about() const QString Theme::aboutDetails() const { QString devString; - devString = tr("

Version %1. For more information please click here.

") - .arg(MIRALL_VERSION_STRING) - .arg(helpUrl()); + devString = developerStringInfo(); devString += tr("

This release was supplied by %1.

") .arg(APPLICATION_VENDOR); diff --git a/src/libsync/theme.h b/src/libsync/theme.h index 1c1416ef64cdf..092fc112b4c65 100644 --- a/src/libsync/theme.h +++ b/src/libsync/theme.h @@ -645,6 +645,8 @@ public slots: Theme(Theme const &); Theme &operator=(Theme const &); + [[nodiscard]] QString developerStringInfo() const; + void updateMultipleOverrideServers(); void connectToPaletteSignal() const; #if defined(Q_OS_WIN) diff --git a/version.h.in b/version.h.in index ba53a6545f7a1..3c80a99141625 100644 --- a/version.h.in +++ b/version.h.in @@ -35,6 +35,7 @@ constexpr auto MIRALL_VERSION_SUFFIX = "@MIRALL_VERSION_SUFFIX@"; #cmakedefine MIRALL_VERSION_FULL @MIRALL_VERSION_FULL@ #cmakedefine MIRALL_VERSION_STRING "@MIRALL_VERSION_STRING@" +#cmakedefine MIRALL_HUMAN_VERSION_STRING "@MIRALL_HUMAN_VERSION_STRING@" constexpr int NEXTCLOUD_SERVER_VERSION_MIN_SUPPORTED_MAJOR = @NEXTCLOUD_SERVER_VERSION_MIN_SUPPORTED_MAJOR@; constexpr int NEXTCLOUD_SERVER_VERSION_MIN_SUPPORTED_MINOR = @NEXTCLOUD_SERVER_VERSION_MIN_SUPPORTED_MINOR@; From ffd95d022afffb6edc482bd6d09d245debf9308e Mon Sep 17 00:00:00 2001 From: Nextcloud bot Date: Sat, 15 Feb 2025 02:58:11 +0000 Subject: [PATCH 007/139] Fix(l10n): Update translations from Transifex Signed-off-by: Nextcloud bot --- .../uk_translation.desktop | 2 +- translations/client_ar.ts | 15 +++- translations/client_bg.ts | 15 +++- translations/client_br.ts | 15 +++- translations/client_ca.ts | 15 +++- translations/client_cs.ts | 15 +++- translations/client_da.ts | 15 +++- translations/client_de.ts | 15 +++- translations/client_el.ts | 15 +++- translations/client_en_GB.ts | 15 +++- translations/client_eo.ts | 15 +++- translations/client_es.ts | 15 +++- translations/client_es_CL.ts | 15 +++- translations/client_es_CO.ts | 15 +++- translations/client_es_CR.ts | 15 +++- translations/client_es_DO.ts | 15 +++- translations/client_es_EC.ts | 15 +++- translations/client_es_GT.ts | 15 +++- translations/client_es_HN.ts | 15 +++- translations/client_es_MX.ts | 15 +++- translations/client_es_SV.ts | 15 +++- translations/client_eu.ts | 15 +++- translations/client_fa.ts | 15 +++- translations/client_fi.ts | 15 +++- translations/client_fr.ts | 15 +++- translations/client_ga.ts | 15 +++- translations/client_gl.ts | 15 +++- translations/client_he.ts | 15 +++- translations/client_hr.ts | 15 +++- translations/client_hu.ts | 15 +++- translations/client_is.ts | 15 +++- translations/client_it.ts | 15 +++- translations/client_ja.ts | 15 +++- translations/client_ko.ts | 15 +++- translations/client_lt_LT.ts | 15 +++- translations/client_lv.ts | 15 +++- translations/client_mk.ts | 15 +++- translations/client_nb_NO.ts | 15 +++- translations/client_nl.ts | 15 +++- translations/client_oc.ts | 15 +++- translations/client_pl.ts | 15 +++- translations/client_pt.ts | 15 +++- translations/client_pt_BR.ts | 15 +++- translations/client_ro.ts | 15 +++- translations/client_ru.ts | 15 +++- translations/client_sc.ts | 15 +++- translations/client_sk.ts | 49 +++++++----- translations/client_sl.ts | 15 +++- translations/client_sr.ts | 15 +++- translations/client_sv.ts | 47 ++++++----- translations/client_th.ts | 15 +++- translations/client_tr.ts | 15 +++- translations/client_ug.ts | 15 +++- translations/client_uk.ts | 79 +++++++++++-------- translations/client_zh_CN.ts | 15 +++- translations/client_zh_HK.ts | 15 +++- translations/client_zh_TW.ts | 15 +++- 57 files changed, 794 insertions(+), 178 deletions(-) diff --git a/nextcloud.client-desktop/uk_translation.desktop b/nextcloud.client-desktop/uk_translation.desktop index 77254b17c6a54..8155bb905c04a 100644 --- a/nextcloud.client-desktop/uk_translation.desktop +++ b/nextcloud.client-desktop/uk_translation.desktop @@ -22,7 +22,7 @@ Icon=@APPLICATION_EXECUTABLE@ # Translations -Name[uk]=@APPLICATION_NAME@ Desktop +Name[uk]=@APPLICATION_NAME@ Настільний клієнт Comment[uk]=Клієнт синхронізації @APPLICATION_NAME@ для ПК GenericName[uk]=Синхронізація каталогів Icon[uk]=@APPLICATION_ICON_NAME@ diff --git a/translations/client_ar.ts b/translations/client_ar.ts index 9804bed9cd300..6f5dee9a42936 100644 --- a/translations/client_ar.ts +++ b/translations/client_ar.ts @@ -5712,6 +5712,12 @@ Server replied with error: %2
OCC::Theme + + + <p>%1 Desktop Client Version %2 (%3). For more information please click <a href='%4'>here</a>.</p> + %1 is application name. %2 is the human version string. %3 is the operating system name. %4 is the help URL + + <p>%1 Desktop Client</p> @@ -6596,7 +6602,7 @@ Server replied with error: %2 إفلات ملف (للرفع فقط) - + Allow resharing السماح بإعادة المشاركة @@ -6606,7 +6612,7 @@ Server replied with error: %2 إخفاء التنزيل - + Password protection حماية بكلمة مرور @@ -6625,6 +6631,11 @@ Server replied with error: %2 Note to recipient ملاحظة للمُتلَقّي + + + Enter a note for the recipient + + Unshare diff --git a/translations/client_bg.ts b/translations/client_bg.ts index fb58a0716be42..03892ae0bd5fb 100644 --- a/translations/client_bg.ts +++ b/translations/client_bg.ts @@ -5718,6 +5718,12 @@ Server replied with error: %2 OCC::Theme + + + <p>%1 Desktop Client Version %2 (%3). For more information please click <a href='%4'>here</a>.</p> + %1 is application name. %2 is the human version string. %3 is the operating system name. %4 is the help URL + + <p>%1 Desktop Client</p> @@ -6602,7 +6608,7 @@ Server replied with error: %2 Изпускане на файл (само за качване) - + Allow resharing @@ -6612,7 +6618,7 @@ Server replied with error: %2 Скриване на изтеглянето - + Password protection @@ -6631,6 +6637,11 @@ Server replied with error: %2 Note to recipient Бележка за получателя + + + Enter a note for the recipient + + Unshare diff --git a/translations/client_br.ts b/translations/client_br.ts index ed1d76486c1e9..b51b4cc2e8c54 100644 --- a/translations/client_br.ts +++ b/translations/client_br.ts @@ -5692,6 +5692,12 @@ Server replied with error: %2 OCC::Theme + + + <p>%1 Desktop Client Version %2 (%3). For more information please click <a href='%4'>here</a>.</p> + %1 is application name. %2 is the human version string. %3 is the operating system name. %4 is the help URL + + <p>%1 Desktop Client</p> @@ -6576,7 +6582,7 @@ Server replied with error: %2 - + Allow resharing @@ -6586,7 +6592,7 @@ Server replied with error: %2 - + Password protection @@ -6605,6 +6611,11 @@ Server replied with error: %2 Note to recipient + + + Enter a note for the recipient + + Unshare diff --git a/translations/client_ca.ts b/translations/client_ca.ts index b201558c91aa7..5557ad0559659 100644 --- a/translations/client_ca.ts +++ b/translations/client_ca.ts @@ -5693,6 +5693,12 @@ Server replied with error: %2 OCC::Theme + + + <p>%1 Desktop Client Version %2 (%3). For more information please click <a href='%4'>here</a>.</p> + %1 is application name. %2 is the human version string. %3 is the operating system name. %4 is the help URL + + <p>%1 Desktop Client</p> @@ -6577,7 +6583,7 @@ Server replied with error: %2 - + Allow resharing @@ -6587,7 +6593,7 @@ Server replied with error: %2 - + Password protection @@ -6606,6 +6612,11 @@ Server replied with error: %2 Note to recipient + + + Enter a note for the recipient + + Unshare diff --git a/translations/client_cs.ts b/translations/client_cs.ts index 5d8c8224e9511..fcd3465b1e0c3 100644 --- a/translations/client_cs.ts +++ b/translations/client_cs.ts @@ -5736,6 +5736,12 @@ Server odpověděl chybou: %2 OCC::Theme + + + <p>%1 Desktop Client Version %2 (%3). For more information please click <a href='%4'>here</a>.</p> + %1 is application name. %2 is the human version string. %3 is the operating system name. %4 is the help URL + + <p>%1 Desktop Client</p> @@ -6620,7 +6626,7 @@ Server odpověděl chybou: %2 Předání souboru (pouze nahrání) - + Allow resharing Povolit sdílet dál dalším @@ -6630,7 +6636,7 @@ Server odpověděl chybou: %2 Skrýt stažení - + Password protection Ochrana heslem @@ -6649,6 +6655,11 @@ Server odpověděl chybou: %2 Note to recipient Poznámka pro příjemce + + + Enter a note for the recipient + + Unshare diff --git a/translations/client_da.ts b/translations/client_da.ts index 9aa62cec7b3f4..ccbc3e3e5a9df 100644 --- a/translations/client_da.ts +++ b/translations/client_da.ts @@ -5702,6 +5702,12 @@ Server replied with error: %2 OCC::Theme + + + <p>%1 Desktop Client Version %2 (%3). For more information please click <a href='%4'>here</a>.</p> + %1 is application name. %2 is the human version string. %3 is the operating system name. %4 is the help URL + + <p>%1 Desktop Client</p> @@ -6586,7 +6592,7 @@ Server replied with error: %2 - + Allow resharing @@ -6596,7 +6602,7 @@ Server replied with error: %2 - + Password protection @@ -6615,6 +6621,11 @@ Server replied with error: %2 Note to recipient + + + Enter a note for the recipient + + Unshare diff --git a/translations/client_de.ts b/translations/client_de.ts index 845423bccd8ba..8df962f679fd9 100644 --- a/translations/client_de.ts +++ b/translations/client_de.ts @@ -5736,6 +5736,12 @@ Server antwortete mit Fehler: %2 OCC::Theme + + + <p>%1 Desktop Client Version %2 (%3). For more information please click <a href='%4'>here</a>.</p> + %1 is application name. %2 is the human version string. %3 is the operating system name. %4 is the help URL + + <p>%1 Desktop Client</p> @@ -6620,7 +6626,7 @@ Server antwortete mit Fehler: %2 Dateien ablegen (nur Hochladen) - + Allow resharing Weiterteilen erlauben @@ -6630,7 +6636,7 @@ Server antwortete mit Fehler: %2 Download verbergen - + Password protection Passwortschutz @@ -6649,6 +6655,11 @@ Server antwortete mit Fehler: %2 Note to recipient Notiz an Empfänger + + + Enter a note for the recipient + + Unshare diff --git a/translations/client_el.ts b/translations/client_el.ts index e1c8dcec8ff67..0acfc034c14b5 100644 --- a/translations/client_el.ts +++ b/translations/client_el.ts @@ -5700,6 +5700,12 @@ Server replied with error: %2 OCC::Theme + + + <p>%1 Desktop Client Version %2 (%3). For more information please click <a href='%4'>here</a>.</p> + %1 is application name. %2 is the human version string. %3 is the operating system name. %4 is the help URL + + <p>%1 Desktop Client</p> @@ -6584,7 +6590,7 @@ Server replied with error: %2 - + Allow resharing @@ -6594,7 +6600,7 @@ Server replied with error: %2 - + Password protection @@ -6613,6 +6619,11 @@ Server replied with error: %2 Note to recipient + + + Enter a note for the recipient + + Unshare diff --git a/translations/client_en_GB.ts b/translations/client_en_GB.ts index 9d5e7bcc35def..25fb6881a3232 100644 --- a/translations/client_en_GB.ts +++ b/translations/client_en_GB.ts @@ -5738,6 +5738,12 @@ Server replied with error: %2 OCC::Theme + + + <p>%1 Desktop Client Version %2 (%3). For more information please click <a href='%4'>here</a>.</p> + %1 is application name. %2 is the human version string. %3 is the operating system name. %4 is the help URL + + <p>%1 Desktop Client</p> @@ -6622,7 +6628,7 @@ Server replied with error: %2 File drop (upload only) - + Allow resharing Allow resharing @@ -6632,7 +6638,7 @@ Server replied with error: %2 Hide download - + Password protection Password protection @@ -6651,6 +6657,11 @@ Server replied with error: %2 Note to recipient Note to recipient + + + Enter a note for the recipient + + Unshare diff --git a/translations/client_eo.ts b/translations/client_eo.ts index 431873cac67aa..7b42b3f4fbe87 100644 --- a/translations/client_eo.ts +++ b/translations/client_eo.ts @@ -5690,6 +5690,12 @@ Server replied with error: %2 OCC::Theme + + + <p>%1 Desktop Client Version %2 (%3). For more information please click <a href='%4'>here</a>.</p> + %1 is application name. %2 is the human version string. %3 is the operating system name. %4 is the help URL + + <p>%1 Desktop Client</p> @@ -6574,7 +6580,7 @@ Server replied with error: %2 - + Allow resharing @@ -6584,7 +6590,7 @@ Server replied with error: %2 - + Password protection @@ -6603,6 +6609,11 @@ Server replied with error: %2 Note to recipient + + + Enter a note for the recipient + + Unshare diff --git a/translations/client_es.ts b/translations/client_es.ts index 47dffb5794d2c..5b13a57f88493 100644 --- a/translations/client_es.ts +++ b/translations/client_es.ts @@ -5737,6 +5737,12 @@ El servidor respondió con el error: %2 OCC::Theme + + + <p>%1 Desktop Client Version %2 (%3). For more information please click <a href='%4'>here</a>.</p> + %1 is application name. %2 is the human version string. %3 is the operating system name. %4 is the help URL + + <p>%1 Desktop Client</p> @@ -6621,7 +6627,7 @@ El servidor respondió con el error: %2 Soltar archivo (solo carga) - + Allow resharing Permitir que los otros compartan @@ -6631,7 +6637,7 @@ El servidor respondió con el error: %2 Ocultar descarga - + Password protection @@ -6650,6 +6656,11 @@ El servidor respondió con el error: %2 Note to recipient Nota para el destinatario + + + Enter a note for the recipient + + Unshare diff --git a/translations/client_es_CL.ts b/translations/client_es_CL.ts index e25e27339136f..252c9029986d7 100644 --- a/translations/client_es_CL.ts +++ b/translations/client_es_CL.ts @@ -5683,6 +5683,12 @@ Server replied with error: %2 OCC::Theme + + + <p>%1 Desktop Client Version %2 (%3). For more information please click <a href='%4'>here</a>.</p> + %1 is application name. %2 is the human version string. %3 is the operating system name. %4 is the help URL + + <p>%1 Desktop Client</p> @@ -6567,7 +6573,7 @@ Server replied with error: %2 - + Allow resharing @@ -6577,7 +6583,7 @@ Server replied with error: %2 - + Password protection @@ -6596,6 +6602,11 @@ Server replied with error: %2 Note to recipient + + + Enter a note for the recipient + + Unshare diff --git a/translations/client_es_CO.ts b/translations/client_es_CO.ts index 1c89084da0b2f..ced28b14d1967 100644 --- a/translations/client_es_CO.ts +++ b/translations/client_es_CO.ts @@ -5683,6 +5683,12 @@ Server replied with error: %2 OCC::Theme + + + <p>%1 Desktop Client Version %2 (%3). For more information please click <a href='%4'>here</a>.</p> + %1 is application name. %2 is the human version string. %3 is the operating system name. %4 is the help URL + + <p>%1 Desktop Client</p> @@ -6567,7 +6573,7 @@ Server replied with error: %2 - + Allow resharing @@ -6577,7 +6583,7 @@ Server replied with error: %2 - + Password protection @@ -6596,6 +6602,11 @@ Server replied with error: %2 Note to recipient + + + Enter a note for the recipient + + Unshare diff --git a/translations/client_es_CR.ts b/translations/client_es_CR.ts index e13b28353c676..b02110f7a56ca 100644 --- a/translations/client_es_CR.ts +++ b/translations/client_es_CR.ts @@ -5683,6 +5683,12 @@ Server replied with error: %2 OCC::Theme + + + <p>%1 Desktop Client Version %2 (%3). For more information please click <a href='%4'>here</a>.</p> + %1 is application name. %2 is the human version string. %3 is the operating system name. %4 is the help URL + + <p>%1 Desktop Client</p> @@ -6567,7 +6573,7 @@ Server replied with error: %2 - + Allow resharing @@ -6577,7 +6583,7 @@ Server replied with error: %2 - + Password protection @@ -6596,6 +6602,11 @@ Server replied with error: %2 Note to recipient + + + Enter a note for the recipient + + Unshare diff --git a/translations/client_es_DO.ts b/translations/client_es_DO.ts index f8d9c3cc3b6d4..63c504829cbab 100644 --- a/translations/client_es_DO.ts +++ b/translations/client_es_DO.ts @@ -5683,6 +5683,12 @@ Server replied with error: %2 OCC::Theme + + + <p>%1 Desktop Client Version %2 (%3). For more information please click <a href='%4'>here</a>.</p> + %1 is application name. %2 is the human version string. %3 is the operating system name. %4 is the help URL + + <p>%1 Desktop Client</p> @@ -6567,7 +6573,7 @@ Server replied with error: %2 - + Allow resharing @@ -6577,7 +6583,7 @@ Server replied with error: %2 - + Password protection @@ -6596,6 +6602,11 @@ Server replied with error: %2 Note to recipient + + + Enter a note for the recipient + + Unshare diff --git a/translations/client_es_EC.ts b/translations/client_es_EC.ts index 15fce9f84325b..0b7dfdb08ec74 100644 --- a/translations/client_es_EC.ts +++ b/translations/client_es_EC.ts @@ -5718,6 +5718,12 @@ Server replied with error: %2 OCC::Theme + + + <p>%1 Desktop Client Version %2 (%3). For more information please click <a href='%4'>here</a>.</p> + %1 is application name. %2 is the human version string. %3 is the operating system name. %4 is the help URL + + <p>%1 Desktop Client</p> @@ -6602,7 +6608,7 @@ Server replied with error: %2 Soltar archivo (solo carga) - + Allow resharing @@ -6612,7 +6618,7 @@ Server replied with error: %2 Ocultar descarga - + Password protection @@ -6631,6 +6637,11 @@ Server replied with error: %2 Note to recipient Nota para el destinatario + + + Enter a note for the recipient + + Unshare diff --git a/translations/client_es_GT.ts b/translations/client_es_GT.ts index 0f06b4e5655ad..562587bfe67bc 100644 --- a/translations/client_es_GT.ts +++ b/translations/client_es_GT.ts @@ -5683,6 +5683,12 @@ Server replied with error: %2 OCC::Theme + + + <p>%1 Desktop Client Version %2 (%3). For more information please click <a href='%4'>here</a>.</p> + %1 is application name. %2 is the human version string. %3 is the operating system name. %4 is the help URL + + <p>%1 Desktop Client</p> @@ -6567,7 +6573,7 @@ Server replied with error: %2 - + Allow resharing @@ -6577,7 +6583,7 @@ Server replied with error: %2 - + Password protection @@ -6596,6 +6602,11 @@ Server replied with error: %2 Note to recipient + + + Enter a note for the recipient + + Unshare diff --git a/translations/client_es_HN.ts b/translations/client_es_HN.ts index a668d46056245..535f7409e9f81 100644 --- a/translations/client_es_HN.ts +++ b/translations/client_es_HN.ts @@ -5683,6 +5683,12 @@ Server replied with error: %2 OCC::Theme + + + <p>%1 Desktop Client Version %2 (%3). For more information please click <a href='%4'>here</a>.</p> + %1 is application name. %2 is the human version string. %3 is the operating system name. %4 is the help URL + + <p>%1 Desktop Client</p> @@ -6567,7 +6573,7 @@ Server replied with error: %2 - + Allow resharing @@ -6577,7 +6583,7 @@ Server replied with error: %2 - + Password protection @@ -6596,6 +6602,11 @@ Server replied with error: %2 Note to recipient + + + Enter a note for the recipient + + Unshare diff --git a/translations/client_es_MX.ts b/translations/client_es_MX.ts index 00c6628f18e79..96832b3ab4339 100644 --- a/translations/client_es_MX.ts +++ b/translations/client_es_MX.ts @@ -5724,6 +5724,12 @@ El servidor respondió con el error: %2 OCC::Theme + + + <p>%1 Desktop Client Version %2 (%3). For more information please click <a href='%4'>here</a>.</p> + %1 is application name. %2 is the human version string. %3 is the operating system name. %4 is the help URL + + <p>%1 Desktop Client</p> @@ -6608,7 +6614,7 @@ El servidor respondió con el error: %2 Soltar archivo (sólo carga) - + Allow resharing Permitir volver a compartir @@ -6618,7 +6624,7 @@ El servidor respondió con el error: %2 Ocultar descarga - + Password protection @@ -6637,6 +6643,11 @@ El servidor respondió con el error: %2 Note to recipient Nota al destinatario + + + Enter a note for the recipient + + Unshare diff --git a/translations/client_es_SV.ts b/translations/client_es_SV.ts index 798ca4d6c80e8..02b94dc8a9169 100644 --- a/translations/client_es_SV.ts +++ b/translations/client_es_SV.ts @@ -5683,6 +5683,12 @@ Server replied with error: %2 OCC::Theme + + + <p>%1 Desktop Client Version %2 (%3). For more information please click <a href='%4'>here</a>.</p> + %1 is application name. %2 is the human version string. %3 is the operating system name. %4 is the help URL + + <p>%1 Desktop Client</p> @@ -6567,7 +6573,7 @@ Server replied with error: %2 - + Allow resharing @@ -6577,7 +6583,7 @@ Server replied with error: %2 - + Password protection @@ -6596,6 +6602,11 @@ Server replied with error: %2 Note to recipient + + + Enter a note for the recipient + + Unshare diff --git a/translations/client_eu.ts b/translations/client_eu.ts index facd82177ac16..f636f408610d4 100644 --- a/translations/client_eu.ts +++ b/translations/client_eu.ts @@ -5734,6 +5734,12 @@ Zerbitzariak errorearekin erantzun du: %2 OCC::Theme + + + <p>%1 Desktop Client Version %2 (%3). For more information please click <a href='%4'>here</a>.</p> + %1 is application name. %2 is the human version string. %3 is the operating system name. %4 is the help URL + + <p>%1 Desktop Client</p> @@ -6618,7 +6624,7 @@ Zerbitzariak errorearekin erantzun du: %2 Fitxategia jaregitea (igotzeko soilik) - + Allow resharing Baimendu birpartekatzea @@ -6628,7 +6634,7 @@ Zerbitzariak errorearekin erantzun du: %2 Ezkutuko deskarga - + Password protection @@ -6647,6 +6653,11 @@ Zerbitzariak errorearekin erantzun du: %2 Note to recipient Oharra hartzaileari + + + Enter a note for the recipient + + Unshare diff --git a/translations/client_fa.ts b/translations/client_fa.ts index a5d1468daf81e..b3e428429ed76 100644 --- a/translations/client_fa.ts +++ b/translations/client_fa.ts @@ -5717,6 +5717,12 @@ Server replied with error: %2 OCC::Theme + + + <p>%1 Desktop Client Version %2 (%3). For more information please click <a href='%4'>here</a>.</p> + %1 is application name. %2 is the human version string. %3 is the operating system name. %4 is the help URL + + <p>%1 Desktop Client</p> @@ -6601,7 +6607,7 @@ Server replied with error: %2 File drop (upload only) - + Allow resharing Allow resharing @@ -6611,7 +6617,7 @@ Server replied with error: %2 Hide download - + Password protection @@ -6630,6 +6636,11 @@ Server replied with error: %2 Note to recipient Note to recipient + + + Enter a note for the recipient + + Unshare diff --git a/translations/client_fi.ts b/translations/client_fi.ts index 48ee2bc306090..1f4a6144dbde1 100644 --- a/translations/client_fi.ts +++ b/translations/client_fi.ts @@ -5694,6 +5694,12 @@ Server replied with error: %2 OCC::Theme + + + <p>%1 Desktop Client Version %2 (%3). For more information please click <a href='%4'>here</a>.</p> + %1 is application name. %2 is the human version string. %3 is the operating system name. %4 is the help URL + + <p>%1 Desktop Client</p> @@ -6578,7 +6584,7 @@ Server replied with error: %2 - + Allow resharing @@ -6588,7 +6594,7 @@ Server replied with error: %2 - + Password protection @@ -6607,6 +6613,11 @@ Server replied with error: %2 Note to recipient Viesti vastaanottajalle + + + Enter a note for the recipient + + Unshare diff --git a/translations/client_fr.ts b/translations/client_fr.ts index 026eca60582ff..26e9000efa36c 100644 --- a/translations/client_fr.ts +++ b/translations/client_fr.ts @@ -5736,6 +5736,12 @@ Le serveur a répondu avec l'erreur : %2 OCC::Theme + + + <p>%1 Desktop Client Version %2 (%3). For more information please click <a href='%4'>here</a>.</p> + %1 is application name. %2 is the human version string. %3 is the operating system name. %4 is the help URL + + <p>%1 Desktop Client</p> @@ -6620,7 +6626,7 @@ Le serveur a répondu avec l'erreur : %2 Dépôt de fichiers (téléversement seulement) - + Allow resharing Permettre le repartage @@ -6630,7 +6636,7 @@ Le serveur a répondu avec l'erreur : %2 Masquer le téléchargement - + Password protection Protection par mot de passe @@ -6649,6 +6655,11 @@ Le serveur a répondu avec l'erreur : %2 Note to recipient Note au destinataire + + + Enter a note for the recipient + + Unshare diff --git a/translations/client_ga.ts b/translations/client_ga.ts index 1371a0cf1a192..08a3c8486ecba 100644 --- a/translations/client_ga.ts +++ b/translations/client_ga.ts @@ -5738,6 +5738,12 @@ D'fhreagair an freastalaí le hearráid: % 2 OCC::Theme + + + <p>%1 Desktop Client Version %2 (%3). For more information please click <a href='%4'>here</a>.</p> + %1 is application name. %2 is the human version string. %3 is the operating system name. %4 is the help URL + + <p>%1 Desktop Client</p> @@ -6622,7 +6628,7 @@ D'fhreagair an freastalaí le hearráid: % 2 Scaoileadh comhaid (uaslódáil amháin) - + Allow resharing Ceadaigh athroinnt @@ -6632,7 +6638,7 @@ D'fhreagair an freastalaí le hearráid: % 2 Folaigh íoslódáil - + Password protection Cosaint pasfhocal @@ -6651,6 +6657,11 @@ D'fhreagair an freastalaí le hearráid: % 2 Note to recipient Nóta don fhaighteoir + + + Enter a note for the recipient + + Unshare diff --git a/translations/client_gl.ts b/translations/client_gl.ts index 6a7eb5c179d4a..324c91733a525 100644 --- a/translations/client_gl.ts +++ b/translations/client_gl.ts @@ -5737,6 +5737,12 @@ O servidor respondeu co erro: %2 OCC::Theme + + + <p>%1 Desktop Client Version %2 (%3). For more information please click <a href='%4'>here</a>.</p> + %1 is application name. %2 is the human version string. %3 is the operating system name. %4 is the help URL + + <p>%1 Desktop Client</p> @@ -6621,7 +6627,7 @@ O servidor respondeu co erro: %2 Soltar ficheiro (só envíos) - + Allow resharing Permitir volver compartir @@ -6631,7 +6637,7 @@ O servidor respondeu co erro: %2 Agochar a descarga - + Password protection Protección por contrasinal @@ -6650,6 +6656,11 @@ O servidor respondeu co erro: %2 Note to recipient Nota para o destinatario + + + Enter a note for the recipient + + Unshare diff --git a/translations/client_he.ts b/translations/client_he.ts index c0579f8fbcca5..78925d821e4ba 100644 --- a/translations/client_he.ts +++ b/translations/client_he.ts @@ -5688,6 +5688,12 @@ Server replied with error: %2 OCC::Theme + + + <p>%1 Desktop Client Version %2 (%3). For more information please click <a href='%4'>here</a>.</p> + %1 is application name. %2 is the human version string. %3 is the operating system name. %4 is the help URL + + <p>%1 Desktop Client</p> @@ -6572,7 +6578,7 @@ Server replied with error: %2 - + Allow resharing @@ -6582,7 +6588,7 @@ Server replied with error: %2 - + Password protection @@ -6601,6 +6607,11 @@ Server replied with error: %2 Note to recipient + + + Enter a note for the recipient + + Unshare diff --git a/translations/client_hr.ts b/translations/client_hr.ts index a3b7c6f0b8066..b5419431657fb 100644 --- a/translations/client_hr.ts +++ b/translations/client_hr.ts @@ -5715,6 +5715,12 @@ Server replied with error: %2 OCC::Theme + + + <p>%1 Desktop Client Version %2 (%3). For more information please click <a href='%4'>here</a>.</p> + %1 is application name. %2 is the human version string. %3 is the operating system name. %4 is the help URL + + <p>%1 Desktop Client</p> @@ -6599,7 +6605,7 @@ Server replied with error: %2 - + Allow resharing @@ -6609,7 +6615,7 @@ Server replied with error: %2 - + Password protection @@ -6628,6 +6634,11 @@ Server replied with error: %2 Note to recipient + + + Enter a note for the recipient + + Unshare diff --git a/translations/client_hu.ts b/translations/client_hu.ts index 18391954650c3..b99ae21a57aaa 100644 --- a/translations/client_hu.ts +++ b/translations/client_hu.ts @@ -5739,6 +5739,12 @@ A kiszolgáló hibával válaszolt: %2 OCC::Theme + + + <p>%1 Desktop Client Version %2 (%3). For more information please click <a href='%4'>here</a>.</p> + %1 is application name. %2 is the human version string. %3 is the operating system name. %4 is the help URL + + <p>%1 Desktop Client</p> @@ -6623,7 +6629,7 @@ A kiszolgáló hibával válaszolt: %2 Fájlelhelyezés (csak feltöltés) - + Allow resharing Újra-megosztás engedélyezése @@ -6633,7 +6639,7 @@ A kiszolgáló hibával válaszolt: %2 Letöltés elrejtése - + Password protection Jelszavas védelem @@ -6652,6 +6658,11 @@ A kiszolgáló hibával válaszolt: %2 Note to recipient Jegyzet a címzettnek + + + Enter a note for the recipient + + Unshare diff --git a/translations/client_is.ts b/translations/client_is.ts index 61720114bc60c..2c2a4f4cbd38a 100644 --- a/translations/client_is.ts +++ b/translations/client_is.ts @@ -5696,6 +5696,12 @@ Server replied with error: %2 OCC::Theme + + + <p>%1 Desktop Client Version %2 (%3). For more information please click <a href='%4'>here</a>.</p> + %1 is application name. %2 is the human version string. %3 is the operating system name. %4 is the help URL + + <p>%1 Desktop Client</p> @@ -6581,7 +6587,7 @@ Server replied with error: %2 Slepping skráa (einungis innsending) - + Allow resharing Leyfa endurdeilingu @@ -6591,7 +6597,7 @@ Server replied with error: %2 Fela niðurhal - + Password protection @@ -6610,6 +6616,11 @@ Server replied with error: %2 Note to recipient Minnispunktur til viðtakanda + + + Enter a note for the recipient + + Unshare diff --git a/translations/client_it.ts b/translations/client_it.ts index 40e846173562d..71bae44942313 100644 --- a/translations/client_it.ts +++ b/translations/client_it.ts @@ -5730,6 +5730,12 @@ Il server ha risposto con errore: %2 OCC::Theme + + + <p>%1 Desktop Client Version %2 (%3). For more information please click <a href='%4'>here</a>.</p> + %1 is application name. %2 is the human version string. %3 is the operating system name. %4 is the help URL + + <p>%1 Desktop Client</p> @@ -6614,7 +6620,7 @@ Il server ha risposto con errore: %2 File drop (solo invio) - + Allow resharing Consenti la ri-condivisione @@ -6624,7 +6630,7 @@ Il server ha risposto con errore: %2 Nascondi scaricamento - + Password protection Protezione con password @@ -6643,6 +6649,11 @@ Il server ha risposto con errore: %2 Note to recipient Nota al destinatario + + + Enter a note for the recipient + + Unshare diff --git a/translations/client_ja.ts b/translations/client_ja.ts index 6a1187f489f59..30d6b2e57dd98 100644 --- a/translations/client_ja.ts +++ b/translations/client_ja.ts @@ -5737,6 +5737,12 @@ Server replied with error: %2 OCC::Theme + + + <p>%1 Desktop Client Version %2 (%3). For more information please click <a href='%4'>here</a>.</p> + %1 is application name. %2 is the human version string. %3 is the operating system name. %4 is the help URL + + <p>%1 Desktop Client</p> @@ -6621,7 +6627,7 @@ Server replied with error: %2 ファイルドロップ(アップロードのみ) - + Allow resharing 再共有を許可する @@ -6631,7 +6637,7 @@ Server replied with error: %2 ダウンロードを隠す - + Password protection パスワード保護 @@ -6650,6 +6656,11 @@ Server replied with error: %2 Note to recipient 受信者へのメモ + + + Enter a note for the recipient + + Unshare diff --git a/translations/client_ko.ts b/translations/client_ko.ts index d9934ac2da61b..c2f806931ba67 100644 --- a/translations/client_ko.ts +++ b/translations/client_ko.ts @@ -5736,6 +5736,12 @@ Server replied with error: %2 OCC::Theme + + + <p>%1 Desktop Client Version %2 (%3). For more information please click <a href='%4'>here</a>.</p> + %1 is application name. %2 is the human version string. %3 is the operating system name. %4 is the help URL + + <p>%1 Desktop Client</p> @@ -6620,7 +6626,7 @@ Server replied with error: %2 파일 업로드 전용 - + Allow resharing 재공유 허용 @@ -6630,7 +6636,7 @@ Server replied with error: %2 다운로드 숨기기 - + Password protection @@ -6649,6 +6655,11 @@ Server replied with error: %2 Note to recipient 받는이에게 메모 + + + Enter a note for the recipient + + Unshare diff --git a/translations/client_lt_LT.ts b/translations/client_lt_LT.ts index 06cfb61fc8e68..e17c1fd56d39a 100644 --- a/translations/client_lt_LT.ts +++ b/translations/client_lt_LT.ts @@ -5692,6 +5692,12 @@ Server replied with error: %2 OCC::Theme + + + <p>%1 Desktop Client Version %2 (%3). For more information please click <a href='%4'>here</a>.</p> + %1 is application name. %2 is the human version string. %3 is the operating system name. %4 is the help URL + + <p>%1 Desktop Client</p> @@ -6576,7 +6582,7 @@ Server replied with error: %2 - + Allow resharing @@ -6586,7 +6592,7 @@ Server replied with error: %2 Slėpti atsiuntimą - + Password protection @@ -6605,6 +6611,11 @@ Server replied with error: %2 Note to recipient + + + Enter a note for the recipient + + Unshare diff --git a/translations/client_lv.ts b/translations/client_lv.ts index fb6c4f7d96bce..0a3e83555a16c 100644 --- a/translations/client_lv.ts +++ b/translations/client_lv.ts @@ -5701,6 +5701,12 @@ Server replied with error: %2 OCC::Theme + + + <p>%1 Desktop Client Version %2 (%3). For more information please click <a href='%4'>here</a>.</p> + %1 is application name. %2 is the human version string. %3 is the operating system name. %4 is the help URL + + <p>%1 Desktop Client</p> @@ -6585,7 +6591,7 @@ Server replied with error: %2 - + Allow resharing Atļaut atkārtotu koplietošanu @@ -6595,7 +6601,7 @@ Server replied with error: %2 Paslēpt lejupielādi - + Password protection @@ -6614,6 +6620,11 @@ Server replied with error: %2 Note to recipient + + + Enter a note for the recipient + + Unshare diff --git a/translations/client_mk.ts b/translations/client_mk.ts index e98be400d99ff..533db207f4bcf 100644 --- a/translations/client_mk.ts +++ b/translations/client_mk.ts @@ -5690,6 +5690,12 @@ Server replied with error: %2 OCC::Theme + + + <p>%1 Desktop Client Version %2 (%3). For more information please click <a href='%4'>here</a>.</p> + %1 is application name. %2 is the human version string. %3 is the operating system name. %4 is the help URL + + <p>%1 Desktop Client</p> @@ -6574,7 +6580,7 @@ Server replied with error: %2 Испуши датотека (само за прикачување) - + Allow resharing @@ -6584,7 +6590,7 @@ Server replied with error: %2 Сокриј преземање - + Password protection @@ -6603,6 +6609,11 @@ Server replied with error: %2 Note to recipient Белешка до примачот + + + Enter a note for the recipient + + Unshare diff --git a/translations/client_nb_NO.ts b/translations/client_nb_NO.ts index b6ff2b4521e7c..f6a8f3df82f57 100644 --- a/translations/client_nb_NO.ts +++ b/translations/client_nb_NO.ts @@ -5723,6 +5723,12 @@ Server svarte med feil: %2 OCC::Theme + + + <p>%1 Desktop Client Version %2 (%3). For more information please click <a href='%4'>here</a>.</p> + %1 is application name. %2 is the human version string. %3 is the operating system name. %4 is the help URL + + <p>%1 Desktop Client</p> @@ -6607,7 +6613,7 @@ Server svarte med feil: %2 Filslipp (kun opplasting) - + Allow resharing Tillat videredeling @@ -6617,7 +6623,7 @@ Server svarte med feil: %2 Skjul nedlasting - + Password protection @@ -6636,6 +6642,11 @@ Server svarte med feil: %2 Note to recipient Merknad til mottaker + + + Enter a note for the recipient + + Unshare diff --git a/translations/client_nl.ts b/translations/client_nl.ts index e549b5cda68dd..a2e763e2b7891 100644 --- a/translations/client_nl.ts +++ b/translations/client_nl.ts @@ -5720,6 +5720,12 @@ Server antwoordde met fout: %2 OCC::Theme + + + <p>%1 Desktop Client Version %2 (%3). For more information please click <a href='%4'>here</a>.</p> + %1 is application name. %2 is the human version string. %3 is the operating system name. %4 is the help URL + + <p>%1 Desktop Client</p> @@ -6604,7 +6610,7 @@ Server antwoordde met fout: %2 Bestands-drop (alleen uploaden) - + Allow resharing Verder delen toestaan @@ -6614,7 +6620,7 @@ Server antwoordde met fout: %2 Verberg download - + Password protection @@ -6633,6 +6639,11 @@ Server antwoordde met fout: %2 Note to recipient Notitie voor ontvanger + + + Enter a note for the recipient + + Unshare diff --git a/translations/client_oc.ts b/translations/client_oc.ts index f873c9ac16228..89c0bcf0f893c 100644 --- a/translations/client_oc.ts +++ b/translations/client_oc.ts @@ -5681,6 +5681,12 @@ Server replied with error: %2 OCC::Theme + + + <p>%1 Desktop Client Version %2 (%3). For more information please click <a href='%4'>here</a>.</p> + %1 is application name. %2 is the human version string. %3 is the operating system name. %4 is the help URL + + <p>%1 Desktop Client</p> @@ -6565,7 +6571,7 @@ Server replied with error: %2 - + Allow resharing @@ -6575,7 +6581,7 @@ Server replied with error: %2 - + Password protection @@ -6594,6 +6600,11 @@ Server replied with error: %2 Note to recipient Nòta pel destinari + + + Enter a note for the recipient + + Unshare diff --git a/translations/client_pl.ts b/translations/client_pl.ts index 59765a7ecd9d6..5117b455af60a 100644 --- a/translations/client_pl.ts +++ b/translations/client_pl.ts @@ -5724,6 +5724,12 @@ Serwer odpowiedział błędem: %2 OCC::Theme + + + <p>%1 Desktop Client Version %2 (%3). For more information please click <a href='%4'>here</a>.</p> + %1 is application name. %2 is the human version string. %3 is the operating system name. %4 is the help URL + + <p>%1 Desktop Client</p> @@ -6608,7 +6614,7 @@ Serwer odpowiedział błędem: %2 Upuszczanie pliku (tylko wysyłanie) - + Allow resharing Zezwalaj na udostępnianie @@ -6618,7 +6624,7 @@ Serwer odpowiedział błędem: %2 Ukryj pobieranie - + Password protection @@ -6637,6 +6643,11 @@ Serwer odpowiedział błędem: %2 Note to recipient Notatka dla odbiorcy + + + Enter a note for the recipient + + Unshare diff --git a/translations/client_pt.ts b/translations/client_pt.ts index 150a31909a733..87ac93a914836 100644 --- a/translations/client_pt.ts +++ b/translations/client_pt.ts @@ -5686,6 +5686,12 @@ Server replied with error: %2 OCC::Theme + + + <p>%1 Desktop Client Version %2 (%3). For more information please click <a href='%4'>here</a>.</p> + %1 is application name. %2 is the human version string. %3 is the operating system name. %4 is the help URL + + <p>%1 Desktop Client</p> @@ -6570,7 +6576,7 @@ Server replied with error: %2 - + Allow resharing @@ -6580,7 +6586,7 @@ Server replied with error: %2 - + Password protection @@ -6599,6 +6605,11 @@ Server replied with error: %2 Note to recipient + + + Enter a note for the recipient + + Unshare diff --git a/translations/client_pt_BR.ts b/translations/client_pt_BR.ts index 4221c858be994..2b38dde7e3223 100644 --- a/translations/client_pt_BR.ts +++ b/translations/client_pt_BR.ts @@ -5729,6 +5729,12 @@ Servidor respondeu com erro: %2 OCC::Theme + + + <p>%1 Desktop Client Version %2 (%3). For more information please click <a href='%4'>here</a>.</p> + %1 is application name. %2 is the human version string. %3 is the operating system name. %4 is the help URL + + <p>%1 Desktop Client</p> @@ -6613,7 +6619,7 @@ Servidor respondeu com erro: %2 Descarte de arquivo (somente enviar) - + Allow resharing Permitir recompartilhar @@ -6623,7 +6629,7 @@ Servidor respondeu com erro: %2 Ocultar enviar - + Password protection @@ -6642,6 +6648,11 @@ Servidor respondeu com erro: %2 Note to recipient Nota para o destinatário + + + Enter a note for the recipient + + Unshare diff --git a/translations/client_ro.ts b/translations/client_ro.ts index 8c97099aa4fe0..0500b2c1fd98f 100644 --- a/translations/client_ro.ts +++ b/translations/client_ro.ts @@ -5696,6 +5696,12 @@ Server replied with error: %2 OCC::Theme + + + <p>%1 Desktop Client Version %2 (%3). For more information please click <a href='%4'>here</a>.</p> + %1 is application name. %2 is the human version string. %3 is the operating system name. %4 is the help URL + + <p>%1 Desktop Client</p> @@ -6580,7 +6586,7 @@ Server replied with error: %2 - + Allow resharing @@ -6590,7 +6596,7 @@ Server replied with error: %2 - + Password protection @@ -6609,6 +6615,11 @@ Server replied with error: %2 Note to recipient + + + Enter a note for the recipient + + Unshare diff --git a/translations/client_ru.ts b/translations/client_ru.ts index 0a06b42379062..1745cc3fe870e 100644 --- a/translations/client_ru.ts +++ b/translations/client_ru.ts @@ -5729,6 +5729,12 @@ Server replied with error: %2 OCC::Theme + + + <p>%1 Desktop Client Version %2 (%3). For more information please click <a href='%4'>here</a>.</p> + %1 is application name. %2 is the human version string. %3 is the operating system name. %4 is the help URL + + <p>%1 Desktop Client</p> @@ -6613,7 +6619,7 @@ Server replied with error: %2 Хранилище (только приём файлов) - + Allow resharing Разрешить повторную публикацию @@ -6623,7 +6629,7 @@ Server replied with error: %2 Скрыть закачку - + Password protection Защита пароля @@ -6642,6 +6648,11 @@ Server replied with error: %2 Note to recipient Примечание для получателя + + + Enter a note for the recipient + + Unshare diff --git a/translations/client_sc.ts b/translations/client_sc.ts index 173537e362381..17ba97b915286 100644 --- a/translations/client_sc.ts +++ b/translations/client_sc.ts @@ -5715,6 +5715,12 @@ Server replied with error: %2 OCC::Theme + + + <p>%1 Desktop Client Version %2 (%3). For more information please click <a href='%4'>here</a>.</p> + %1 is application name. %2 is the human version string. %3 is the operating system name. %4 is the help URL + + <p>%1 Desktop Client</p> @@ -6599,7 +6605,7 @@ Server replied with error: %2 - + Allow resharing @@ -6609,7 +6615,7 @@ Server replied with error: %2 - + Password protection @@ -6628,6 +6634,11 @@ Server replied with error: %2 Note to recipient + + + Enter a note for the recipient + + Unshare diff --git a/translations/client_sk.ts b/translations/client_sk.ts index 78342fd6fce53..9fc3db9f5ed45 100644 --- a/translations/client_sk.ts +++ b/translations/client_sk.ts @@ -35,7 +35,7 @@ Scroll to top - + Prejisť na začiatok @@ -2134,17 +2134,17 @@ Môže to byť problém s knižnicami OpenSSL. Please choose a different location. The folder %1 doesn't exist. - + Prosím, vyberte iné umiestnenie. Adresár %1 neexistuje. Please choose a different location. %1 isn't a valid folder. - + Prosím, vyberte iné umiestnenie.. %1 nie je platným adresárom. Please choose a different location. %1 isn't a readable folder. - + Prosím, vyberte iné umiestnenie. %1 nie je čitateľný adresár. @@ -2556,41 +2556,41 @@ Prípadne môžete obnoviť všetky odstránené súbory ich stiahnutím zo serv Please choose a different location. The selected folder isn't valid. - + Prosím, vyberte iné umiestnenie. Vybraný adresár nie je platný. Please choose a different location. %1 is already being used as a sync folder. - + Prosím, vyberte iné umiestnenie. %1 sa už používa ako adresár pre synchronizáciu. Please choose a different location. The path %1 doesn't exist. - + Prosím, vyberte iné umiestnenie. Cesta %1 neexistuje. Please choose a different location. The path %1 isn't a folder. - + Prosím, vyberte iné umiestnenie. Cesta %1 nie je adresárom. Please choose a different location. You don't have enough permissions to write to %1. folder location - + Prosím, vyberte iné umiestnenie. Nemáte dostatočné práva pre zápis do %1. Please choose a different location. %1 is already contained in a folder used as a sync folder. - + Prosím, vyberte iné umiestnenie. %1 už je časťou adresára používaného pre synchronizáciu Please choose a different location. %1 is already being used as a sync folder for %2. folder location, server url - + Prosím, vyberte iné umiestnenie. %1 už je časťou adresára používaného pre synchronizáciu pre %2. @@ -2906,7 +2906,7 @@ Pre pokročilých užívateľov: tento problém môže súvisieť s viacerými s Please choose a different location. %1 is already being synced to %2. - + Prosím, vyberte iné umiestnenie. %1 už je synchronizované do %2. @@ -2951,7 +2951,7 @@ Pre pokročilých užívateľov: tento problém môže súvisieť s viacerými s Virtual files are not supported at the selected location - + Virtuálne súbory nie sú podporované vo vybranom mieste. @@ -3937,7 +3937,7 @@ Upozorňujeme, že použitie akýchkoľvek príkazov pre logovanie z príkazové Virtual files are not supported at the selected location - + Virtuálne súbory nie sú podporované vo vybranom mieste. @@ -5738,6 +5738,12 @@ Server odpovedal chybou: %2 OCC::Theme + + + <p>%1 Desktop Client Version %2 (%3). For more information please click <a href='%4'>here</a>.</p> + %1 is application name. %2 is the human version string. %3 is the operating system name. %4 is the help URL + + <p>%1 Desktop Client</p> @@ -6019,7 +6025,7 @@ Server odpovedal chybou: %2 Please choose a different location. %1 is a drive. It doesn't support virtual files. - + Prosím, vyberte iné umiestnenie. %1 je disk. Nepodporuje virtuálne súbory. @@ -6029,12 +6035,12 @@ Server odpovedal chybou: %2 Please choose a different location. %1 isn't a NTFS file system. It doesn't support virtual files. - + Prosím, vyberte iné umiestnenie. %1 nie je súborový systém NTFS. Nedpodporuje virtuálne súbory. Please choose a different location. %1 is a network drive. It doesn't support virtual files. - + Prosím, vyberte iné umiestnenie. %1 je sieťový disk. Nepodporuje virtuálne súbory. @@ -6622,7 +6628,7 @@ Server odpovedal chybou: %2 File drop (len nahrávanie) - + Allow resharing Povoliť opakované zdieľanie @@ -6632,7 +6638,7 @@ Server odpovedal chybou: %2 Skryť sťahovanie - + Password protection Ochrana heslom @@ -6651,6 +6657,11 @@ Server odpovedal chybou: %2 Note to recipient Poznámka pre príjemcu + + + Enter a note for the recipient + + Unshare diff --git a/translations/client_sl.ts b/translations/client_sl.ts index d7ca0ca5be2f1..989b2af393e5a 100644 --- a/translations/client_sl.ts +++ b/translations/client_sl.ts @@ -5715,6 +5715,12 @@ Server replied with error: %2 OCC::Theme + + + <p>%1 Desktop Client Version %2 (%3). For more information please click <a href='%4'>here</a>.</p> + %1 is application name. %2 is the human version string. %3 is the operating system name. %4 is the help URL + + <p>%1 Desktop Client</p> @@ -6599,7 +6605,7 @@ Server replied with error: %2 - + Allow resharing @@ -6609,7 +6615,7 @@ Server replied with error: %2 - + Password protection @@ -6628,6 +6634,11 @@ Server replied with error: %2 Note to recipient + + + Enter a note for the recipient + + Unshare diff --git a/translations/client_sr.ts b/translations/client_sr.ts index 4b262825be783..7e38fc05dfd9b 100644 --- a/translations/client_sr.ts +++ b/translations/client_sr.ts @@ -5738,6 +5738,12 @@ Server replied with error: %2 OCC::Theme + + + <p>%1 Desktop Client Version %2 (%3). For more information please click <a href='%4'>here</a>.</p> + %1 is application name. %2 is the human version string. %3 is the operating system name. %4 is the help URL + + <p>%1 Desktop Client</p> @@ -6622,7 +6628,7 @@ Server replied with error: %2 Превлачење фајлова (само за отпремање) - + Allow resharing Дозволи поновно дељење @@ -6632,7 +6638,7 @@ Server replied with error: %2 Сакриј преузимање - + Password protection Заштита лозинком @@ -6651,6 +6657,11 @@ Server replied with error: %2 Note to recipient Напомена примаоцу + + + Enter a note for the recipient + + Unshare diff --git a/translations/client_sv.ts b/translations/client_sv.ts index b4fdb4f87df6a..ba747db2fe512 100644 --- a/translations/client_sv.ts +++ b/translations/client_sv.ts @@ -2134,17 +2134,17 @@ Det kan vara problem med dina OpenSSL-bibliotek. Please choose a different location. The folder %1 doesn't exist. - + Välj en annan plats. Mappen %1 finns inte. Please choose a different location. %1 isn't a valid folder. - + Välj en annan plats. %1 är inte en giltig mapp. Please choose a different location. %1 isn't a readable folder. - + Välj en annan plats. %1 är inte en läsbar mapp. @@ -2556,41 +2556,41 @@ Alternativt kan du återställa alla raderade filer genom att ladda ner dem frå Please choose a different location. The selected folder isn't valid. - + Välj en annan plats. Den valda mappen är inte giltig. Please choose a different location. %1 is already being used as a sync folder. - + Välj en annan plats. %1 används redan som en synkroniseringsmapp. Please choose a different location. The path %1 doesn't exist. - + Välj en annan plats. Sökvägen %1 finns inte. Please choose a different location. The path %1 isn't a folder. - + Välj en annan plats. Sökvägen %1 är inte en mapp. Please choose a different location. You don't have enough permissions to write to %1. folder location - + Välj en annan plats. Du har inte tillräckliga behörigheter för att skriva till %1. Please choose a different location. %1 is already contained in a folder used as a sync folder. - + Välj en annan plats. %1 finns redan i en mapp som används som en synkroniseringsmapp. Please choose a different location. %1 is already being used as a sync folder for %2. folder location, server url - + Välj en annan plats.. %1 används redan som en synkroniseringsmapp för %2. @@ -2906,7 +2906,7 @@ För avancerade användare: det här problemet kan vara relaterat till flera syn Please choose a different location. %1 is already being synced to %2. - + Välj en annan plats. %1 synkroniseras redan till %2. @@ -2951,7 +2951,7 @@ För avancerade användare: det här problemet kan vara relaterat till flera syn Virtual files are not supported at the selected location - + Virtuella filer stöds inte på den valda platsen @@ -3937,7 +3937,7 @@ Observera att om du använder kommandoradsalternativ för loggning kommer den h Virtual files are not supported at the selected location - + Virtuella filer stöds inte på den valda platsen @@ -5738,6 +5738,12 @@ Servern svarade med fel: %2 OCC::Theme + + + <p>%1 Desktop Client Version %2 (%3). For more information please click <a href='%4'>here</a>.</p> + %1 is application name. %2 is the human version string. %3 is the operating system name. %4 is the help URL + + <p>%1 Desktop Client</p> @@ -6019,7 +6025,7 @@ Servern svarade med fel: %2 Please choose a different location. %1 is a drive. It doesn't support virtual files. - + Välj en annan plats. %1 är en enhet. Den stöder inte virtuella filer. @@ -6029,12 +6035,12 @@ Servern svarade med fel: %2 Please choose a different location. %1 isn't a NTFS file system. It doesn't support virtual files. - + Välj en annan plats. %1 är inte ett NTFS-filsystem. Det stöder inte virtuella filer. Please choose a different location. %1 is a network drive. It doesn't support virtual files. - + Välj en annan plats. %1 är en nätverksenhet. Den stöder inte virtuella filer. @@ -6622,7 +6628,7 @@ Servern svarade med fel: %2 Gömd fillista (endast uppladdning) - + Allow resharing Tillåt vidaredelning @@ -6632,7 +6638,7 @@ Servern svarade med fel: %2 Dölj nedladdning - + Password protection Lösenordsskydd @@ -6651,6 +6657,11 @@ Servern svarade med fel: %2 Note to recipient Notering till mottagare + + + Enter a note for the recipient + + Unshare diff --git a/translations/client_th.ts b/translations/client_th.ts index 388c0cb742f9d..8838f2d41d8b9 100644 --- a/translations/client_th.ts +++ b/translations/client_th.ts @@ -5690,6 +5690,12 @@ Server replied with error: %2 OCC::Theme + + + <p>%1 Desktop Client Version %2 (%3). For more information please click <a href='%4'>here</a>.</p> + %1 is application name. %2 is the human version string. %3 is the operating system name. %4 is the help URL + + <p>%1 Desktop Client</p> @@ -6574,7 +6580,7 @@ Server replied with error: %2 - + Allow resharing @@ -6584,7 +6590,7 @@ Server replied with error: %2 - + Password protection @@ -6603,6 +6609,11 @@ Server replied with error: %2 Note to recipient + + + Enter a note for the recipient + + Unshare diff --git a/translations/client_tr.ts b/translations/client_tr.ts index 87dcd4dc8d121..c943a3a85a2da 100644 --- a/translations/client_tr.ts +++ b/translations/client_tr.ts @@ -5737,6 +5737,12 @@ Sunucunun verdiği hata yanıtı: %2 OCC::Theme + + + <p>%1 Desktop Client Version %2 (%3). For more information please click <a href='%4'>here</a>.</p> + %1 is application name. %2 is the human version string. %3 is the operating system name. %4 is the help URL + + <p>%1 Desktop Client</p> @@ -6621,7 +6627,7 @@ Sunucunun verdiği hata yanıtı: %2 Dosya bırakma (yalnızca yükleme) - + Allow resharing Yeniden paylaşılabilsin @@ -6631,7 +6637,7 @@ Sunucunun verdiği hata yanıtı: %2 İndirme gizlensin - + Password protection Parola koruması @@ -6650,6 +6656,11 @@ Sunucunun verdiği hata yanıtı: %2 Note to recipient Alıcıya not + + + Enter a note for the recipient + + Unshare diff --git a/translations/client_ug.ts b/translations/client_ug.ts index 5c1178c8f8c9f..5acd49207811f 100644 --- a/translations/client_ug.ts +++ b/translations/client_ug.ts @@ -5735,6 +5735,12 @@ Server replied with error: %2 OCC::Theme + + + <p>%1 Desktop Client Version %2 (%3). For more information please click <a href='%4'>here</a>.</p> + %1 is application name. %2 is the human version string. %3 is the operating system name. %4 is the help URL + + <p>%1 Desktop Client</p> @@ -6619,7 +6625,7 @@ Server replied with error: %2 ھۆججەت چۈشۈرۈش (پەقەت يوللاش) - + Allow resharing قايتا تولۇقلاشقا يول قويۇڭ @@ -6629,7 +6635,7 @@ Server replied with error: %2 چۈشۈرۈشنى يوشۇرۇش - + Password protection @@ -6648,6 +6654,11 @@ Server replied with error: %2 Note to recipient تاپشۇرۇۋالغۇچىغا دىققەت قىلىڭ + + + Enter a note for the recipient + + Unshare diff --git a/translations/client_uk.ts b/translations/client_uk.ts index 0142864896a08..add467ab530b3 100644 --- a/translations/client_uk.ts +++ b/translations/client_uk.ts @@ -35,7 +35,7 @@ Scroll to top - + Перейти догори @@ -244,7 +244,7 @@ Discovering the certificates stored on your USB token - + Виявлення сертифікатів, збережених на вашому USB-токені @@ -252,22 +252,22 @@ Token Encryption Key Chooser - + Вибір ключа шифрування токену Available Keys for end-to-end Encryption: - + Доступні ключі для наскрізного шифрування: Choose - + Вибрати Cancel - + Скасувати @@ -1000,7 +1000,7 @@ This action will abort any currently running synchronization. Migrate certificate to a new one - + Перенести сертифікат до нового сертифікату @@ -1528,22 +1528,22 @@ This action will abort any currently running synchronization. PIN needed to login to token - + Потрібний PIN для входу до токену Enter Certificate USB Token PIN: - + Введіть PIN токену USB для сертифікату: Invalid PIN. Login failed - + Неправильний PIN. Не вдалося увійти Login to the token failed after providing the user PIN. It may be invalid or wrong. Please try again ! - + Не вдалося увійти до токену після надання PIN користувача. Він може бути неправильний або помилковий. Спробуйте ще раз! @@ -2134,17 +2134,17 @@ This can be an issue with your OpenSSL libraries. Please choose a different location. The folder %1 doesn't exist. - + Виберіть інше розташування. Каталог %1 відсутній. Please choose a different location. %1 isn't a valid folder. - + Виберіть інше розташування. Каталог %1 недійсний. Please choose a different location. %1 isn't a readable folder. - + Виберіть інше розташування. Каталог %1 неможливо прочитати. @@ -2556,41 +2556,41 @@ Alternatively, you can restore all deleted files by downloading them from the se 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. - + Виберіть інше розташування. Каталог %1 вже використовується для синхронізації. Please choose a different location. The path %1 doesn't exist. - + Виберіть інше розташування. Шлях %1 відсутній. Please choose a different location. The path %1 isn't a folder. - + Виберіть інше розташування. Щлях %1 не є каталогом. Please choose a different location. You don't have enough permissions to write to %1. folder location - + Виберіть інше розташування. У вас недостатньо повноважень для запису до каталогу %1. Please choose a different location. %1 is already contained in a folder used as a sync folder. - + Виберіть інше розташування. Каталог %1 вже міститься у каталозі, який використовується для синхронізації. Please choose a different location. %1 is already being used as a sync folder for %2. folder location, server url - + Виберіть інше розташування. Каталог %1 вже використовується для синхронізації користувачем %2. @@ -2906,7 +2906,7 @@ 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. - + Виберіть інше розташування. Каталог %1 вже синхронізується із %2. @@ -2951,7 +2951,7 @@ For advanced users: this issue might be related to multiple sync database files Virtual files are not supported at the selected location - + Віртуальні файли не підтримуються у вибраному місці розташування @@ -3935,7 +3935,7 @@ Note that using any logging command line options will override this setting. Virtual files are not supported at the selected location - + Віртуальні файли не підтримуються у вибраному місці розташування @@ -4447,7 +4447,7 @@ This is a new, experimental mode. If you decide to use it, please report any iss Cannot modify encrypted item because the selected certificate is not valid. - + Не вдалося змінити зашифрованій об'єкт, оскільки вибраний сертифікат недійсний. @@ -5736,6 +5736,12 @@ Server replied with error: %2 OCC::Theme + + + <p>%1 Desktop Client Version %2 (%3). For more information please click <a href='%4'>here</a>.</p> + %1 is application name. %2 is the human version string. %3 is the operating system name. %4 is the help URL + + <p>%1 Desktop Client</p> @@ -5853,12 +5859,12 @@ Server replied with error: %2 End-to-end certificate needs to be migrated to a new one - + Сертифікат наскрізного шифрування потрібно перенести до нового сертифікату. Trigger the migration - + Почати перенесення @@ -6017,7 +6023,7 @@ Server replied with error: %2 Please choose a different location. %1 is a drive. It doesn't support virtual files. - + Виберіть інше розташування. %1 є диском, який не підтримує віртуальні файли. @@ -6027,12 +6033,12 @@ Server replied with error: %2 Please choose a different location. %1 isn't a NTFS file system. It doesn't support virtual files. - + Виберіть інше розташування. %1 не містить файлову систему NTFS та не підтримує віртуальні файли. Please choose a different location. %1 is a network drive. It doesn't support virtual files. - + Виберіть інше розташування. %1 є мережевим диском, який не підтримує віртуальні файли. @@ -6620,7 +6626,7 @@ Server replied with error: %2 Сховище (тільки завантажування) - + Allow resharing Дозволити передавати у спільний доступ іншим @@ -6630,7 +6636,7 @@ Server replied with error: %2 Приховати звантаження - + Password protection Захист паролем @@ -6649,6 +6655,11 @@ Server replied with error: %2 Note to recipient Примітка отримувачу + + + Enter a note for the recipient + + Unshare @@ -7114,7 +7125,7 @@ Server replied with error: %2 Updated end-to-end encryption metadata - + Оновлено метадані наскрізного шифрування @@ -7195,7 +7206,7 @@ Server replied with error: %2 Updating end-to-end encryption metadata - + Оновлення метаданих наскрізного шифрування diff --git a/translations/client_zh_CN.ts b/translations/client_zh_CN.ts index 3494acbd2d7d1..343a864e1aa7b 100644 --- a/translations/client_zh_CN.ts +++ b/translations/client_zh_CN.ts @@ -5726,6 +5726,12 @@ Server replied with error: %2 OCC::Theme + + + <p>%1 Desktop Client Version %2 (%3). For more information please click <a href='%4'>here</a>.</p> + %1 is application name. %2 is the human version string. %3 is the operating system name. %4 is the help URL + + <p>%1 Desktop Client</p> @@ -6610,7 +6616,7 @@ Server replied with error: %2 文件拖放(仅上传) - + Allow resharing 允许再次共享 @@ -6620,7 +6626,7 @@ Server replied with error: %2 隐藏下载 - + Password protection 密码保护 @@ -6639,6 +6645,11 @@ Server replied with error: %2 Note to recipient 给收件人的备注 + + + Enter a note for the recipient + + Unshare diff --git a/translations/client_zh_HK.ts b/translations/client_zh_HK.ts index c1ac1134a5958..ffd260e44bbe0 100644 --- a/translations/client_zh_HK.ts +++ b/translations/client_zh_HK.ts @@ -5739,6 +5739,12 @@ Server replied with error: %2 OCC::Theme + + + <p>%1 Desktop Client Version %2 (%3). For more information please click <a href='%4'>here</a>.</p> + %1 is application name. %2 is the human version string. %3 is the operating system name. %4 is the help URL + + <p>%1 Desktop Client</p> @@ -6623,7 +6629,7 @@ Server replied with error: %2 拖曳檔案(僅供上傳) - + Allow resharing 允許轉貼分享 @@ -6633,7 +6639,7 @@ Server replied with error: %2 隱藏下載 - + Password protection 密碼保護 @@ -6652,6 +6658,11 @@ Server replied with error: %2 Note to recipient 給收件人的訊息 + + + Enter a note for the recipient + + Unshare diff --git a/translations/client_zh_TW.ts b/translations/client_zh_TW.ts index f39b6fd5b0cef..487e927378119 100644 --- a/translations/client_zh_TW.ts +++ b/translations/client_zh_TW.ts @@ -5738,6 +5738,12 @@ Server replied with error: %2 OCC::Theme + + + <p>%1 Desktop Client Version %2 (%3). For more information please click <a href='%4'>here</a>.</p> + %1 is application name. %2 is the human version string. %3 is the operating system name. %4 is the help URL + + <p>%1 Desktop Client</p> @@ -6622,7 +6628,7 @@ Server replied with error: %2 檔案投遞(僅供上傳) - + Allow resharing 允許轉發分享 @@ -6632,7 +6638,7 @@ Server replied with error: %2 隱藏下載 - + Password protection 密碼保護 @@ -6651,6 +6657,11 @@ Server replied with error: %2 Note to recipient 給收件人的備註 + + + Enter a note for the recipient + + Unshare From 5a4a6da80fd721424c29d40f4fb33ac9b8d3bb87 Mon Sep 17 00:00:00 2001 From: Nextcloud bot Date: Sun, 16 Feb 2025 03:27:08 +0000 Subject: [PATCH 008/139] Fix(l10n): Update translations from Transifex Signed-off-by: Nextcloud bot --- translations/client_de.ts | 4 ++-- translations/client_en_GB.ts | 4 ++-- translations/client_gl.ts | 6 +++--- translations/client_it.ts | 5 +++-- translations/client_zh_CN.ts | 6 +++--- translations/client_zh_HK.ts | 4 ++-- 6 files changed, 15 insertions(+), 14 deletions(-) diff --git a/translations/client_de.ts b/translations/client_de.ts index 8df962f679fd9..3cb479e6abd9d 100644 --- a/translations/client_de.ts +++ b/translations/client_de.ts @@ -5740,7 +5740,7 @@ Server antwortete mit Fehler: %2 <p>%1 Desktop Client Version %2 (%3). For more information please click <a href='%4'>here</a>.</p> %1 is application name. %2 is the human version string. %3 is the operating system name. %4 is the help URL - + <p>%1 Desktop-Client Version %2 (%3). Für weitere Informationen bitte <a href='%4'>hier</a> klicken.</p> @@ -6658,7 +6658,7 @@ Server antwortete mit Fehler: %2 Enter a note for the recipient - + Eine Notiz für den Empfänger eingeben diff --git a/translations/client_en_GB.ts b/translations/client_en_GB.ts index 25fb6881a3232..a1c13c0f9f07a 100644 --- a/translations/client_en_GB.ts +++ b/translations/client_en_GB.ts @@ -5742,7 +5742,7 @@ Server replied with error: %2 <p>%1 Desktop Client Version %2 (%3). For more information please click <a href='%4'>here</a>.</p> %1 is application name. %2 is the human version string. %3 is the operating system name. %4 is the help URL - + <p>%1 Desktop Client Version %2 (%3). For more information please click <a href='%4'>here</a>.</p> @@ -6660,7 +6660,7 @@ Server replied with error: %2 Enter a note for the recipient - + Enter a note for the recipient diff --git a/translations/client_gl.ts b/translations/client_gl.ts index 324c91733a525..df7c0a9142c41 100644 --- a/translations/client_gl.ts +++ b/translations/client_gl.ts @@ -5741,7 +5741,7 @@ O servidor respondeu co erro: %2 <p>%1 Desktop Client Version %2 (%3). For more information please click <a href='%4'>here</a>.</p> %1 is application name. %2 is the human version string. %3 is the operating system name. %4 is the help URL - + <p>Cliente de escritorio de %1, versión %2 (%3). Para obter máis información prema <a href='%4'>aquí</a>.</p> @@ -5914,7 +5914,7 @@ O servidor respondeu co erro: %2 Remove connection - Retirar conexión + Retirar a conexión @@ -6659,7 +6659,7 @@ O servidor respondeu co erro: %2 Enter a note for the recipient - + Introduza unha nota para o destinatario diff --git a/translations/client_it.ts b/translations/client_it.ts index 71bae44942313..1b5a79d2935d2 100644 --- a/translations/client_it.ts +++ b/translations/client_it.ts @@ -5734,7 +5734,8 @@ Il server ha risposto con errore: %2 <p>%1 Desktop Client Version %2 (%3). For more information please click <a href='%4'>here</a>.</p> %1 is application name. %2 is the human version string. %3 is the operating system name. %4 is the help URL - + <p>%1 Versione Client desktop %2 (%3). Per maggiori informazioni clicca <a href='%4'>qui</a>. +</p> @@ -6652,7 +6653,7 @@ Il server ha risposto con errore: %2 Enter a note for the recipient - + Inserisci una nota per il destinatario diff --git a/translations/client_zh_CN.ts b/translations/client_zh_CN.ts index 343a864e1aa7b..954d3dae48708 100644 --- a/translations/client_zh_CN.ts +++ b/translations/client_zh_CN.ts @@ -5730,7 +5730,7 @@ Server replied with error: %2 <p>%1 Desktop Client Version %2 (%3). For more information please click <a href='%4'>here</a>.</p> %1 is application name. %2 is the human version string. %3 is the operating system name. %4 is the help URL - + <p>%1 桌面客户端版本 %2(%3)。如需更多信息,请点击<a href='%4'>此处</a>。</p> @@ -6643,12 +6643,12 @@ Server replied with error: %2 Note to recipient - 给收件人的备注 + 给接收者的备注 Enter a note for the recipient - + 为接收者输入备注 diff --git a/translations/client_zh_HK.ts b/translations/client_zh_HK.ts index ffd260e44bbe0..9e575b62b21a0 100644 --- a/translations/client_zh_HK.ts +++ b/translations/client_zh_HK.ts @@ -5743,7 +5743,7 @@ Server replied with error: %2 <p>%1 Desktop Client Version %2 (%3). For more information please click <a href='%4'>here</a>.</p> %1 is application name. %2 is the human version string. %3 is the operating system name. %4 is the help URL - + <p>%1 桌面客戶端版本 %2 (%3)。如需更多資訊,請點擊 <a href='%4'>此處</a>。</p> @@ -6661,7 +6661,7 @@ Server replied with error: %2 Enter a note for the recipient - + 輸入給收件人的訊息 From 45efc32e1e4baacc67872206c10a304080186421 Mon Sep 17 00:00:00 2001 From: Nextcloud bot Date: Mon, 17 Feb 2025 02:56:50 +0000 Subject: [PATCH 009/139] Fix(l10n): Update translations from Transifex Signed-off-by: Nextcloud bot --- translations/client_ar.ts | 4 ++-- translations/client_da.ts | 6 +++--- translations/client_sv.ts | 4 ++-- translations/client_zh_TW.ts | 4 ++-- 4 files changed, 9 insertions(+), 9 deletions(-) diff --git a/translations/client_ar.ts b/translations/client_ar.ts index 6f5dee9a42936..5ae6ef74c6a3a 100644 --- a/translations/client_ar.ts +++ b/translations/client_ar.ts @@ -5716,7 +5716,7 @@ Server replied with error: %2 <p>%1 Desktop Client Version %2 (%3). For more information please click <a href='%4'>here</a>.</p> %1 is application name. %2 is the human version string. %3 is the operating system name. %4 is the help URL - + <p>%1 إصدار عميل سطح المكتب %2 (%3). لمزيد من المعلومات، أنقُر <a href='%4'>هنا</a>.</p> @@ -6634,7 +6634,7 @@ Server replied with error: %2 Enter a note for the recipient - + أكتُب ملاحظة للمُستَلِم diff --git a/translations/client_da.ts b/translations/client_da.ts index ccbc3e3e5a9df..b95387f945a76 100644 --- a/translations/client_da.ts +++ b/translations/client_da.ts @@ -174,13 +174,13 @@ Resume sync for all - + Genoptag synkronisering for alle Pause sync for all - + Pause synkronisering for alle @@ -205,7 +205,7 @@ Current account avatar - + Aktuel kontoavatar diff --git a/translations/client_sv.ts b/translations/client_sv.ts index ba747db2fe512..605a8b135c0c1 100644 --- a/translations/client_sv.ts +++ b/translations/client_sv.ts @@ -5742,7 +5742,7 @@ Servern svarade med fel: %2 <p>%1 Desktop Client Version %2 (%3). For more information please click <a href='%4'>here</a>.</p> %1 is application name. %2 is the human version string. %3 is the operating system name. %4 is the help URL - + <p>%1 Skrivbordsklient version %2 (%3). För mer information klicka <a href='%4'>här</a>.</p> @@ -6660,7 +6660,7 @@ Servern svarade med fel: %2 Enter a note for the recipient - + Ange en notering till mottagaren diff --git a/translations/client_zh_TW.ts b/translations/client_zh_TW.ts index 487e927378119..89e89dde123d9 100644 --- a/translations/client_zh_TW.ts +++ b/translations/client_zh_TW.ts @@ -5742,7 +5742,7 @@ Server replied with error: %2 <p>%1 Desktop Client Version %2 (%3). For more information please click <a href='%4'>here</a>.</p> %1 is application name. %2 is the human version string. %3 is the operating system name. %4 is the help URL - + <p>%1 桌面客戶端版本 %2 (%3)。更多資訊請點選<a href='%4'>此處</a>。</p> @@ -6660,7 +6660,7 @@ Server replied with error: %2 Enter a note for the recipient - + 輸入要給收件者的備註 From 50f421e4ff938790b40eff144aef76382633497f Mon Sep 17 00:00:00 2001 From: Emil Bohleber Date: Thu, 21 Nov 2024 14:13:25 +0100 Subject: [PATCH 010/139] use IONOS cmake instead of nextcloud MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Christopher Hätty --- CMakeLists.txt | 6 +--- CPackOptions.cmake.in | 2 +- IONOS.cmake | 82 +++++++++++++++++++++++++++++++++++++++++++ NEXTCLOUD~~.cmake | 82 +++++++++++++++++++++++++++++++++++++++++++ NextcloudCPack.cmake | 4 +-- 5 files changed, 168 insertions(+), 8 deletions(-) create mode 100644 IONOS.cmake create mode 100644 NEXTCLOUD~~.cmake diff --git a/CMakeLists.txt b/CMakeLists.txt index 5b7448b2e3625..4230fc6db02d7 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -21,7 +21,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") @@ -62,10 +62,6 @@ string(REPLACE "&" "&" APPLICATION_NAME_XML_ESCAPED "${APPLICATION_NAME}") string(REPLACE "<" "<" APPLICATION_NAME_XML_ESCAPED "${APPLICATION_NAME_XML_ESCAPED}") string(REPLACE ">" ">" APPLICATION_NAME_XML_ESCAPED "${APPLICATION_NAME_XML_ESCAPED}") -string(REPLACE "&" "&" APPLICATION_VENDOR_XML_ESCAPED "${APPLICATION_VENDOR}") -string(REPLACE "<" "<" APPLICATION_VENDOR_XML_ESCAPED "${APPLICATION_VENDOR_XML_ESCAPED}") -string(REPLACE ">" ">" APPLICATION_VENDOR_XML_ESCAPED "${APPLICATION_VENDOR_XML_ESCAPED}") - if (NOT DEFINED LINUX_PACKAGE_SHORTNAME) set(LINUX_PACKAGE_SHORTNAME "${APPLICATION_SHORTNAME}") endif() 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/IONOS.cmake b/IONOS.cmake new file mode 100644 index 0000000000000..c6f81f9a00d80 --- /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://updates.nextcloud.org/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() diff --git a/NEXTCLOUD~~.cmake b/NEXTCLOUD~~.cmake new file mode 100644 index 0000000000000..ab93325d011ba --- /dev/null +++ b/NEXTCLOUD~~.cmake @@ -0,0 +1,82 @@ +set( APPLICATION_NAME "HiDrvie Next" ) +set( APPLICATION_SHORTNAME "Easystorage" ) +set( APPLICATION_EXECUTABLE "hidrivenext" ) +set( APPLICATION_CONFIG_NAME "${APPLICATION_EXECUTABLE}" ) +set( APPLICATION_DOMAIN "nextcloud.com" ) +set( APPLICATION_VENDOR "IONOS Group SE" ) +set( APPLICATION_UPDATE_URL "https://updates.nextcloud.org/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.nextcloud.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 "easystorage" ) +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 "{BC6988AB-ACE2-4B81-84DC-DC34F9B24401}" ) + + # Overlays + set( WIN_SHELLEXT_OVERLAY_GUID_ERROR "{E0342B74-7593-4C70-9D61-22F294AAFE05}" ) + set( WIN_SHELLEXT_OVERLAY_GUID_OK "{E1094E94-BE93-4EA2-9639-8475C68F3886}" ) + set( WIN_SHELLEXT_OVERLAY_GUID_OK_SHARED "{E243AD85-F71B-496B-B17E-B8091CBE93D2}" ) + set( WIN_SHELLEXT_OVERLAY_GUID_SYNC "{E3D6DB20-1D83-4829-B5C9-941B31C0C35A}" ) + set( WIN_SHELLEXT_OVERLAY_GUID_WARNING "{E4977F33-F93A-4A0A-9D3C-83DEA0EE8483}" ) + + # MSI Upgrade Code (without brackets) + set( WIN_MSI_UPGRADE_CODE "FD2FCCA9-BB8F-4485-8F70-A0621B84A7F4" ) + + # 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() diff --git a/NextcloudCPack.cmake b/NextcloudCPack.cmake index 0682090c06d4c..96bc665a274f3 100644 --- a/NextcloudCPack.cmake +++ b/NextcloudCPack.cmake @@ -1,8 +1,8 @@ include( InstallRequiredSystemLibraries ) -set( CPACK_PACKAGE_CONTACT "Dominik Schmidt " ) +# 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 1a4a89435d65f2d54d3e32d3de61d78aae53e13f Mon Sep 17 00:00:00 2001 From: Emil Bohleber Date: Thu, 21 Nov 2024 14:14:11 +0100 Subject: [PATCH 011/139] add vscode configuration MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Christopher Hätty --- .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 343a52fbfad621d2607e6b6a78a1cdf04b73555f Mon Sep 17 00:00:00 2001 From: Emil Bohleber Date: Thu, 21 Nov 2024 14:15:05 +0100 Subject: [PATCH 012/139] add licence and notice MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Christopher Hätty --- 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 b208474e135a4803bff6053b6bdb28da2bea744e Mon Sep 17 00:00:00 2001 From: Emil Bohleber Date: Thu, 21 Nov 2024 14:16:22 +0100 Subject: [PATCH 013/139] add ionos fonts MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Christopher Hätty --- 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 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

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 bdcf7d6bc829821720593d082dbf0b05740ee1ab Mon Sep 17 00:00:00 2001 From: Emil Bohleber Date: Thu, 21 Nov 2024 14:20:14 +0100 Subject: [PATCH 014/139] add ionos logos and icons MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Christopher Hätty --- 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 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 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 1606c2e142738fd1c4a9127b9c56cafec4b9604a 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 015/139] add style sizes and colors MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit cherry-pick 205b5055302a65b375efb6f6751402dab2eea290 Signed-off-by: Christopher Hätty --- 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 acfb3dfbca35a51f5da01ed1a1af1281a6e675d8 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 016/139] add custom components and themes MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit cherry-pick a969cadf461a1e29ba9217adcf9658bdcfbd5e2d Signed-off-by: Christopher Hätty --- src/gui/CMakeLists.txt | 1 + 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, 948 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 4bd77fabad294..b86a9a37e1499 100644 --- a/src/gui/CMakeLists.txt +++ b/src/gui/CMakeLists.txt @@ -147,6 +147,7 @@ set(client_SRCS systray.h systray.cpp EncryptionTokenSelectionWindow.qml + buttonstyle.h thumbnailjob.h thumbnailjob.cpp userinfo.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 8927f117f6e5a..fbc05d0e4bdae 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 017/139] style gui/wizzard welcome pages MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit cherry-pick eda88dc35c6228308b94525b663b640e2244d4c3 Signed-off-by: Christopher Hätty --- 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 | 184 ++- 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 | 46 +- 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 e03b9a50faba5..c086d1835243f 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 bb51e447438d0..c40c53cea314a 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 namespace OCC { @@ -46,15 +48,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); @@ -67,12 +76,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); @@ -84,7 +93,6 @@ OwncloudAdvancedSetupPage::OwncloudAdvancedSetupPage(OwncloudWizard *wizard) _selectiveSyncBlacklist.clear(); } }); - connect(_ui.bSelectiveSync, &QAbstractButton::clicked, this, &OwncloudAdvancedSetupPage::slotSelectiveSyncClicked); const auto theme = Theme::instance(); const auto appIcon = theme->applicationIcon(); @@ -102,7 +110,6 @@ OwncloudAdvancedSetupPage::OwncloudAdvancedSetupPage(OwncloudWizard *wizard) } _ui.rVirtualFileSync->setText(tr("Use &virtual files instead of downloading content immediately %1").arg(bestAvailableVfsMode() == Vfs::WindowsCfApi ? QString() : tr("(experimental)"))); - #ifdef Q_OS_WIN if (bestAvailableVfsMode() == Vfs::WindowsCfApi) { _ui.wSyncStrategy->addLayout(_ui.lVirtualFileSync); @@ -191,7 +198,7 @@ void OwncloudAdvancedSetupPage::initializePage() _ui.confSpinBox->setValue(newFolderLimit.second); _ui.confCheckBoxExternal->setChecked(cfgFile.confirmExternalStorage()); - fetchUserAvatar(); + SetAvatarIcon(); setUserInformation(); customizeStyle(); @@ -214,6 +221,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 @@ -313,7 +326,6 @@ void OwncloudAdvancedSetupPage::updateStatus() _ui.lFreeSpace->setText(QString(tr("%1 free space", "%1 gets replaced with the size and a matching unit. Example: 3 MB or 5 GB")).arg(lfreeSpaceStr)); _ui.syncModeLabel->setText(t); - _ui.syncModeLabel->setFixedHeight(_ui.syncModeLabel->sizeHint().height()); qint64 rSpace = _ui.rSyncEverything->isChecked() ? _rSize : _rSelectedSize; @@ -331,6 +343,7 @@ void OwncloudAdvancedSetupPage::setResolutionGuiVisible(bool value) _ui.syncModeLabel->setVisible(value); _ui.rKeepLocal->setVisible(value); _ui.cbSyncFromScratch->setVisible(value); + _ocWizard->adjustSize(); } /* obsolete */ @@ -410,13 +423,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; @@ -437,6 +455,7 @@ void OwncloudAdvancedSetupPage::setErrorString(const QString &err) _ui.errorLabel->setVisible(true); _ui.errorLabel->setText(err); } + _ocWizard->adjustSize(); _checking = false; emit completeChanged(); } @@ -459,6 +478,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); @@ -477,6 +501,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(); @@ -489,6 +514,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; @@ -516,6 +549,8 @@ void OwncloudAdvancedSetupPage::slotSelectiveSyncClicked() }); dlg->open(); + + } void OwncloudAdvancedSetupPage::slotVirtualFileSyncClicked() @@ -527,6 +562,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() @@ -537,8 +581,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(); @@ -578,16 +630,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) @@ -606,8 +748,10 @@ void OwncloudAdvancedSetupPage::setRadioChecked(QRadioButton *radio) 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 2c0f23bb42b37..d078222de5768 100644 --- a/src/gui/wizard/owncloudadvancedsetuppage.h +++ b/src/gui/wizard/owncloudadvancedsetuppage.h @@ -82,6 +82,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 9368b3d162800..7a89f3a0ee5d4 100644 --- a/src/gui/wizard/owncloudwizard.cpp +++ b/src/gui/wizard/owncloudwizard.cpp @@ -23,13 +23,14 @@ #include "foregroundbackground_interface.h" #endif -#include "wizard/owncloudwizard.h" -#include "wizard/welcomepage.h" -#include "wizard/owncloudsetuppage.h" -#include "wizard/owncloudhttpcredspage.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" @@ -124,6 +125,9 @@ OwncloudWizard::OwncloudWizard(QWidget *parent) adjustWizardSize(); centerWindow(); + + // Set focus policy to prevent initial focus on the button + setFocusPolicy(Qt::StrongFocus); } void OwncloudWizard::centerWindow() @@ -138,20 +142,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 @@ -330,6 +323,10 @@ void OwncloudWizard::slotCurrentPageChanged(int id) #endif // WITH_WEBENGINE id == WizardCommon::Page_Flow2AuthCreds) { 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(); @@ -340,6 +337,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) { @@ -353,7 +355,7 @@ void OwncloudWizard::displayError(const QString &msg, bool retryHTTPonly) { switch (currentId()) { case WizardCommon::Page_ServerSetup: - _setupPage->setErrorString(msg, retryHTTPonly); + _setupPage->setConnectionError(msg, retryHTTPonly); break; case WizardCommon::Page_HttpCreds: @@ -429,8 +431,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 51974dab0d6ab5a247e2ba21221ad955890b3b56 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 018/139] style tray MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit cherry-pick ee74a6f6744d69f904eeb2411d960085470ad6a9 Signed-off-by: Christopher Hätty --- 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 | 158 +++--- src/gui/tray/Window.qml | 497 ++++++++++++++++++ src/gui/tray/activitylistmodel.cpp | 22 +- src/gui/tray/asyncimageresponse.h | 4 +- src/gui/tray/usermodel.cpp | 48 +- src/gui/tray/usermodel.h | 2 + 28 files changed, 1490 insertions(+), 160 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 6bdcb28768efa..e313c9c09f47e 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 @@ -34,6 +34,51 @@ Button { icon.height: Style.headerButtonIconSize 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 b482c5586dab7..5539859b2a1ef 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 f98cad514b920..27b8b7953f589 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() } @@ -63,23 +68,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 @@ -89,11 +85,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 } @@ -102,12 +99,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 @@ -116,9 +116,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 @@ -146,9 +154,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 010a9391b08b9..917da63b6c5fc 100644 --- a/src/gui/tray/UserLine.qml +++ b/src/gui/tray/UserLine.qml @@ -19,60 +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 - 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 @@ -83,8 +69,7 @@ AbstractButton { verticalAlignment: Text.AlignBottom text: name elide: Text.ElideRight - font.pixelSize: Style.topLinePixelSize - font.bold: true + font: root.font } RowLayout { @@ -108,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 4adf4d5b30837..c66b1feded3ae 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 b24ae990df338..102fa509dedac 100644 --- a/src/gui/tray/usermodel.cpp +++ b/src/gui/tray/usermodel.cpp @@ -19,6 +19,7 @@ #include "tray/talkreply.h" #include "userstatusconnector.h" #include "thumbnailjob.h" +#include "buttonstyle.h" #include #include @@ -26,6 +27,10 @@ #include #include #include +#include +#include +#include +#include // time span in milliseconds which has to be between two // refreshes of the notifications @@ -1481,15 +1486,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; } @@ -1635,6 +1643,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 3f2170ab0748e..42aaeee5cbc22 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" @@ -274,6 +275,7 @@ public slots: bool _init = true; void buildUserList(); + void styleMessageBox(QMessageBox &messageBox, QPushButton *yesButton); }; class ImageProvider : public QQuickAsyncImageProvider From a52432075d5bb0c60707e7050442b31dc25df5af 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 019/139] Fixed Tray by adjusting import MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Christopher Hätty --- .../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 41670fe557a8d..64303fa45a76e 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 0c3e444a9abbc..446b5e9a64f7d 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 9ce7043d0cea6..17168ca6b8704 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 35c72b1ed5ef1..1bd2c490b4938 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 eb385d1c42858..2451f7c9f3564 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 86e6128bf441a..3b9fa68a5854f 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 0e8ad2549cc35..ddd5869b4d0c6 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 11f093bbcd88b..21284d1a00c1d 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 872635352bb56..8ae48153e6b85 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 ac9d88a65e1f3..7be1374f8df73 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 5539859b2a1ef..97363d12f47dd 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 9ba808e5b7019..83fca79dd9a47 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 db8bf37cc1cacd3a616118ffd04b5c3af4bc0fce 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 020/139] Fixed some merge issues MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Christopher Hätty --- 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 97363d12f47dd..c5989c939db9d 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 c3fd5ef5de8c3db90e31f49edcf39664e4725960 Mon Sep 17 00:00:00 2001 From: Emil Bohleber Date: Thu, 21 Nov 2024 15:27:52 +0100 Subject: [PATCH 021/139] add ses style helpers MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Christopher Hätty --- 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 8355547716f54293ebf1ba46900dc6e2f75eabb4 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 022/139] Merge Fix MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Christopher Hätty --- 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 6df3a046caf22b886b9cdf7a569decf6829689cf 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 023/139] style activity view and shares view MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 3cd6e826d113bbaa969a5bb176d811068b9370b2 Signed-off-by: Christopher Hätty --- 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 1bd2c490b4938..0310a6dfe75b2 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 c23ed0b05aeb3..86b6c12511695 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) @@ -779,11 +779,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 48307eb8464070e0de5ecc684c1e4b7a039c3940 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 024/139] style credentials MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 610aa56efe5a55f9cbc90d401e2864421ddf6c2b Signed-off-by: Christopher Hätty --- 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 bd2eb458eb07c..879b067062ccd 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 fbfc415bddb45..555234a5f9524 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 eddb77c90510a..25d404508224e 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 dbe23a258b477da1a99a7f1bd61047902119c61c 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 025/139] style settings - account-settings MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 4c098926161b45c8144aae31d048b03234e85d88 Signed-off-by: Christopher Hätty --- 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 579b053a0dcaa..4022e0960ba91 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) { @@ -163,7 +162,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); @@ -189,6 +188,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); @@ -209,6 +210,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; @@ -233,6 +236,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, @@ -275,11 +282,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); @@ -292,6 +294,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, @@ -559,14 +563,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) { @@ -576,9 +583,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); @@ -640,11 +666,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; @@ -675,6 +746,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")); @@ -721,6 +799,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(); @@ -735,6 +815,7 @@ void AccountSettings::slotCustomContextMenuRequested(const QPoint &pos) } } + styleCustomContextMenu(menu); menu->popup(treeView->mapToGlobal(pos)); } @@ -743,16 +824,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(); @@ -885,8 +956,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) { @@ -1004,7 +1088,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(); @@ -1150,25 +1247,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) @@ -1195,9 +1293,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; } @@ -1267,6 +1386,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({}); @@ -1442,6 +1562,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) @@ -1674,12 +1799,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(); @@ -1755,6 +1907,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 f8d038fcc55d52c400161254e686150091ab8d73 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 026/139] style settings - added files MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 4c098926161b45c8144aae31d048b03234e85d88 Signed-off-by: Christopher Hätty --- 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 b86a9a37e1499..3ec9ab1e3fa9a 100644 --- a/src/gui/CMakeLists.txt +++ b/src/gui/CMakeLists.txt @@ -225,6 +225,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 bcaa9fa6b98938312fc88f1a568e35649ce20848 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 027/139] style settings - minor dialog changes MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 4c098926161b45c8144aae31d048b03234e85d88 Signed-off-by: Christopher Hätty --- 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 4be454c19d9549b3c9c8654fd6338f63c4ff548f 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 028/139] style settings - more dialog changes MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 4c098926161b45c8144aae31d048b03234e85d88 Signed-off-by: Christopher Hätty --- 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 f26a5161abcda..f99a174c4b36a 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("/"); @@ -134,6 +137,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); @@ -144,6 +149,8 @@ InvalidFilenameDialog::InvalidFilenameDialog(AccountPtr account, } else { checkIfAllowedToRename(); } + + customizeStyle(); } InvalidFilenameDialog::~InvalidFilenameDialog() = default; @@ -185,6 +192,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) { @@ -221,6 +229,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(); @@ -256,8 +266,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() @@ -279,6 +290,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) @@ -318,4 +330,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 af8deeb90c7d7..b26a78e6b8165 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 8b7a610126811b4385b5442d6e7339d5d9b67257 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 029/139] style settings - stettingsdialog & generalsettings MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 4c098926161b45c8144aae31d048b03234e85d88 Signed-off-by: Christopher Hätty --- src/gui/CMakeLists.txt | 2 + src/gui/generalsettings.cpp | 91 ++- src/gui/generalsettings.h | 4 + src/gui/generalsettings.ui | 1091 ++++++++++++++++++++--------------- src/gui/settingsdialog.cpp | 107 ++-- 5 files changed, 791 insertions(+), 504 deletions(-) diff --git a/src/gui/CMakeLists.txt b/src/gui/CMakeLists.txt index 3ec9ab1e3fa9a..51581ee161eb8 100644 --- a/src/gui/CMakeLists.txt +++ b/src/gui/CMakeLists.txt @@ -229,6 +229,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 843be0dd568b6..b4a968d13935e 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" #if defined(BUILD_UPDATER) #include "updater/updater.h" @@ -48,6 +50,7 @@ #include #include #include +#include #include @@ -191,9 +194,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); @@ -223,7 +226,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())); @@ -262,8 +265,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 @@ -274,7 +277,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 @@ -287,6 +293,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 { @@ -302,8 +328,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()); @@ -545,7 +571,7 @@ void GeneralSettings::slotToggleOptionalServerNotifications(bool enable) { ConfigFile cfgFile; cfgFile.setOptionalServerNotifications(enable); - _ui->chatNotificationsCheckBox->setEnabled(enable); + // _ui->chatNotificationsCheckBox->setEnabled(enable); _ui->callNotificationsCheckBox->setEnabled(enable); } @@ -625,6 +651,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 83067799a9753..c2fb478ea8477 100644 --- a/src/gui/generalsettings.h +++ b/src/gui/generalsettings.h @@ -59,6 +59,10 @@ private slots: void slotCreateDebugArchive(); void loadMiscSettings(); void slotShowLegalNotice(); + void slotOpenMoreInformationLink(); + void slotOpenLegalNoticeLink(); + void slotOpenPrivacyLink(); + void slotOpenOpenSourceLink(); #if defined(BUILD_UPDATER) void slotUpdateInfo(); void slotUpdateChannelChanged(); diff --git a/src/gui/generalsettings.ui b/src/gui/generalsettings.ui index f444a4cdca2a9..59f3cbb8f3079 100644 --- a/src/gui/generalsettings.ui +++ b/src/gui/generalsettings.ui @@ -1,463 +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::Horizontal - - - QSizePolicy::Fixed - - - - 10 - 20 - - - - - - - - 999999 + + + + 24 - - 99 + + 32 - - - - - - MB + + 24 - - - - - - - - - - Qt::Horizontal + + 24 - - 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 - - - - - - - - - - - - - Info - - - - - - - 0 - 0 - - - - Desktop client x.x.x - - - - - - - - - - - - - 0 - 0 - - - - Update channel - - - - - - - - 0 - 0 - - - - - - - - - - - true - - - true - - - - - - - - 0 - 0 - - - - &Restart && Update - - - - - - - - - - - - 0 - 0 - - - - &Automatically check for updates - - - true - - - - - - - - 0 - 0 - - - - Check Now - - - - - - - Qt::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::Horizontal - - - - 40 - 20 - - - - - - - - - - - - Qt::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 7b4d778946f22..6de729d72b745 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) + ); Q_FOREACH (QAction *a, _actionGroup->actions()) { - QIcon icon = Theme::createColorAwareIcon(a->property("iconPath").toString(), palette()); + QIcon icon = Theme::createColorAwareIcon(a->property("iconPath").toString()); 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 2b1dce25c4ee49fbcf10ca4b6dc272725ad8f723 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 030/139] style settings - systray, main & owncloudgui MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 4c098926161b45c8144aae31d048b03234e85d88 Signed-off-by: Christopher Hätty --- src/gui/main.cpp | 19 ++++++++++++------- src/gui/owncloudgui.cpp | 5 ++++- src/gui/systray.cpp | 7 +++++++ 3 files changed, 23 insertions(+), 8 deletions(-) diff --git a/src/gui/main.cpp b/src/gui/main.cpp index 46fcfcc4dfcf0..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,15 +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"); - } 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")); @@ -201,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 8ae48153e6b85..4005233739205 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 bcf683658e7e2..c8a9a3278ea98 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" @@ -205,6 +206,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 bef48560246056fbb6797099e91ed23c03ff640b 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 031/139] style settings - ignorelisttablewidget MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 4c098926161b45c8144aae31d048b03234e85d88 Signed-off-by: Christopher Hätty --- 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 f6dd7347fe14b..91fd1ea1b74a3 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 a92390f11ab1c8ec3ad81a975510730dd54dd5df 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 032/139] style settings - folderwizard dialog MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 4c098926161b45c8144aae31d048b03234e85d88 Signed-off-by: Christopher Hätty --- 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 3561699d610ee..22468a77ccb17 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()->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 95fff164396c85c5a0ed95ed8b28cbe5123bf3b4 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 033/139] style settings - folderstatusdelegate (treeview) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 4c098926161b45c8144aae31d048b03234e85d88 Signed-off-by: Christopher Hätty --- 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 dc2bf00d838c43f3cb753a98fb2d7128284f63e2 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 034/139] style settings - CMake Variable MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 4c098926161b45c8144aae31d048b03234e85d88 Signed-off-by: Christopher Hätty --- src/gui/CMakeLists.txt | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/gui/CMakeLists.txt b/src/gui/CMakeLists.txt index 51581ee161eb8..9d06f7c6aba07 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 07b82aaabdb24d90cace6477e2c6980776054fbf 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 035/139] add stylings in libsync MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 0c7ae74e69be0e4c2caba5831e229c6f9eec31ec Signed-off-by: Christopher Hätty --- 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 6c00e6b6d745d..9821a8b6f2695 100644 --- a/src/gui/application.cpp +++ b/src/gui/application.cpp @@ -739,7 +739,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 4005233739205..dfd1bf1d45962 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 555234a5f9524..c3c10e28b824c 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 b1cb4268d1059..d1b76f176f85c 100644 --- a/src/libsync/configfile.cpp +++ b/src/libsync/configfile.cpp @@ -994,13 +994,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(); } @@ -1059,7 +1059,7 @@ bool ConfigFile::showMainDialogAsNormalWindow() const { bool ConfigFile::promptDeleteFiles() const { QSettings settings(configFile(), QSettings::IniFormat); - return settings.value(QLatin1String(promptDeleteC), false).toBool(); + return settings.value(QLatin1String(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 4ad97fc1e6a8fb74aedb068732f321f1e64c0e08 Mon Sep 17 00:00:00 2001 From: Emil Bohleber Date: Thu, 21 Nov 2024 15:30:52 +0100 Subject: [PATCH 036/139] add ga4 tracking MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Christopher Hätty --- 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 fdca2416592d59997c37a32a5c02cdaf045f9a85 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 037/139] usage of ga4 tracking MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Christopher Hätty --- src/gui/CMakeLists.txt | 6 ++++ src/gui/application.cpp | 38 +++++++++++++++++++++++- src/gui/application.h | 3 +- src/gui/generalsettings.cpp | 58 ++++++++++++++++++++++++++++++++++++- src/gui/generalsettings.h | 6 ++-- src/gui/main.cpp | 2 ++ src/libsync/configfile.cpp | 11 +++++++ src/libsync/configfile.h | 4 +++ 8 files changed, 123 insertions(+), 5 deletions(-) diff --git a/src/gui/CMakeLists.txt b/src/gui/CMakeLists.txt index 9d06f7c6aba07..c410be35baa73 100644 --- a/src/gui/CMakeLists.txt +++ b/src/gui/CMakeLists.txt @@ -228,6 +228,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 9821a8b6f2695..7b6a17c361831 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 @@ -487,6 +489,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); @@ -634,6 +660,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 @@ -655,6 +689,8 @@ void Application::slotAccountStateAdded(AccountState *accountState) connect(accountState->account().data(), &Account::serverVersionChanged, _folderManager.data(), &FolderMan::slotServerVersionChanged); + startTracking(); + _gui->slotTrayMessageIfServerUnsupported(accountState->account().data()); } @@ -741,7 +777,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 b4a968d13935e..72f0353662abd 100644 --- a/src/gui/generalsettings.cpp +++ b/src/gui/generalsettings.cpp @@ -243,6 +243,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); #ifndef WITH_CRASHREPORTER _ui->crashreporterCheckBox->setVisible(false); @@ -277,14 +278,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(); } @@ -293,6 +296,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/")); @@ -337,6 +385,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); @@ -550,6 +599,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); @@ -636,6 +686,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 c2fb478ea8477..4248b91b8d11b 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; @@ -63,6 +63,7 @@ private slots: void slotOpenLegalNoticeLink(); void slotOpenPrivacyLink(); void slotOpenOpenSourceLink(); + void slotToggleSendData(); #if defined(BUILD_UPDATER) void slotUpdateInfo(); void slotUpdateChannelChanged(); @@ -71,8 +72,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 d1b76f176f85c..9dba419d50249 100644 --- a/src/libsync/configfile.cpp +++ b/src/libsync/configfile.cpp @@ -101,6 +101,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"; @@ -1032,6 +1033,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 f38fba1f11ab0..434d42cfdf68a 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 ae78f227a938fb5cc9a43f930409ddc70ca509bf Mon Sep 17 00:00:00 2001 From: Emil Bohleber Date: Thu, 21 Nov 2024 15:32:19 +0100 Subject: [PATCH 038/139] add a space in shellext for windows MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Christopher Hätty --- 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 cd9ad93ae35241735cf3324730fe4817e456969a Mon Sep 17 00:00:00 2001 From: Emil Bohleber Date: Thu, 21 Nov 2024 15:32:48 +0100 Subject: [PATCH 039/139] update windows build scripts MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Christopher Hätty --- 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 933037dac1151..297336ae8d324 100644 --- a/admin/win/msi/CMakeLists.txt +++ b/admin/win/msi/CMakeLists.txt @@ -26,7 +26,7 @@ install(FILES ${CMAKE_CURRENT_BINARY_DIR}/collect-transform.xsl ${CMAKE_CURRENT_BINARY_DIR}/make-msi.bat 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 520eb36232cab27710fa8af2c3a17a945f773d84 Mon Sep 17 00:00:00 2001 From: Emil Bohleber Date: Thu, 21 Nov 2024 15:33:03 +0100 Subject: [PATCH 040/139] add adr documentation MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Christopher Hätty --- 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 78edf04a94eca05ca88b873466fbba5baf349571 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 041/139] add mac specific styles and shell extension changes MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 6ee58b9834da6a6a678e55e4156d4def57075694 Signed-off-by: Christopher Hätty --- 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 21284d1a00c1d..d24c80967d429 100644 --- a/src/gui/macOS/ui/FileProviderSyncStatus.qml +++ b/src/gui/macOS/ui/FileProviderSyncStatus.qml @@ -53,8 +53,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 e756cab94bf9832298e51d8faeb15b18ca8a07f7 Mon Sep 17 00:00:00 2001 From: Emil Bohleber Date: Thu, 21 Nov 2024 15:34:41 +0100 Subject: [PATCH 042/139] add mac build script MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Christopher Hätty --- 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 53897543aeee9937db5598a14f2f039371f44412 Mon Sep 17 00:00:00 2001 From: Emil Bohleber Date: Thu, 21 Nov 2024 15:35:27 +0100 Subject: [PATCH 043/139] change windows ci script to manual trigger MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Christopher Hätty --- .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 b21cac1075df1d81a35efa8f7a4121d0460eee56 Mon Sep 17 00:00:00 2001 From: Emil Bohleber Date: Thu, 21 Nov 2024 16:31:38 +0100 Subject: [PATCH 044/139] replace all ses icons with some other icon from nextcloud MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Christopher Hätty --- 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 6de729d72b745..4e48609ce6490 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 c66b1feded3ae..edb002d6318dc 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 8681129ff32f8193ef337471d7c6ccbceeb79f77 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 045/139] replaced link icons with simliar icon MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Christopher Hätty --- 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 86b6c12511695..f492a1ee4699d 100644 --- a/src/gui/filedetails/sharemodel.cpp +++ b/src/gui/filedetails/sharemodel.cpp @@ -779,11 +779,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 8fe36c15248532aec8243dfaa8dafe3adc0a1ab9 Mon Sep 17 00:00:00 2001 From: Kevin Beraz Date: Tue, 3 Dec 2024 14:29:47 +0100 Subject: [PATCH 046/139] SES-186 replace installer banner with white image MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Christopher Hätty --- 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 d06f487b2ee1b0862a4a4cd017b76b0d77fa4f2a 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 047/139] SES-161 Use AppShortName for Update URL MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 6958ca6deaf55e530065bf9f7e495d326786f0c8 Signed-off-by: Christopher Hätty --- 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 fbc05d0e4bdae..d37d015169e9d 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 90574b2bb9141..3dc376b425adf 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 84d215a16bb637b2675c4c48305a06474410e6a4 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 048/139] SES-161 Use correct Update Server MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Christopher Hätty --- IONOS.cmake | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/IONOS.cmake b/IONOS.cmake index c6f81f9a00d80..1ccf59eff473c 100644 --- a/IONOS.cmake +++ b/IONOS.cmake @@ -4,7 +4,7 @@ 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://updates.nextcloud.org/client/" CACHE STRING "URL for updater" ) +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") From 79fe37e204fa24561748ffd11897b96ce9d626f1 Mon Sep 17 00:00:00 2001 From: Boris Baltes Date: Thu, 12 Dec 2024 13:17:40 +0100 Subject: [PATCH 049/139] SES-228 validate manual input in FolderWizardLocalPath MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Christopher Hätty --- src/gui/folderwizard.cpp | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/src/gui/folderwizard.cpp b/src/gui/folderwizard.cpp index 22468a77ccb17..1cc7d4b90b9f3 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 23e37b265ee466fa7191d7a9f79c6996bb98f7f0 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 050/139] adjusted .vscode files to VM Directory MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Christopher Hätty --- .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 666aa3b00180a67af58631b756b690e17775431d Mon Sep 17 00:00:00 2001 From: Kevin Beraz Date: Thu, 12 Dec 2024 13:20:59 +0100 Subject: [PATCH 051/139] move build directory out of respository MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit so we do not scan this directory while generating translation files Signed-off-by: Christopher Hätty --- .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 bf9182c6fa5d4b53b7aea705ad958e60c0a53a61 Mon Sep 17 00:00:00 2001 From: Boris Baltes Date: Thu, 12 Dec 2024 13:50:59 +0100 Subject: [PATCH 052/139] SES-228 cleanup - moved validation one step up MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Christopher Hätty --- 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 1cc7d4b90b9f3..e5cddba74f223 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 03a8aaf39fa0ead52b70d7b3f32440631f74c43d 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 053/139] SES-213 replace nextcloud with hidrivenext in logfile names MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit a02c85258ed7a30e852e6c8d7ffd0247c12a73ff Signed-off-by: Christopher Hätty --- 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 fb9427c7d284f..016ccd32a995f 100644 --- a/src/gui/folder.cpp +++ b/src/gui/folder.cpp @@ -1660,7 +1660,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 3fd1c06f9751c88dcf4b336602dc56f6e6d17716 Mon Sep 17 00:00:00 2001 From: Kevin Beraz Date: Fri, 13 Dec 2024 16:16:10 +0100 Subject: [PATCH 054/139] SES-212 style buttons in conflict dialog according to Tray Menu Style MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Christopher Hätty --- 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 3de2efba65e74f6baf0c79cc79131ca5f4a07c77 Mon Sep 17 00:00:00 2001 From: Boris Baltes Date: Mon, 16 Dec 2024 14:44:47 +0100 Subject: [PATCH 055/139] SES-225 prevent error message if folderpicker was canceled MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Christopher Hätty --- 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 e5cddba74f223..28dcbee6161d2 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 254ddc1b3396214c43c3462d5cd178c1e28c7399 Mon Sep 17 00:00:00 2001 From: Boris Baltes Date: Tue, 17 Dec 2024 09:42:42 +0100 Subject: [PATCH 056/139] SES-227 do not show context menu on text input fields MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Christopher Hätty --- 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 62683fb325de4067fc0cdc5bf5c10dd1105522fc Mon Sep 17 00:00:00 2001 From: Boris Baltes Date: Wed, 18 Dec 2024 08:27:30 +0100 Subject: [PATCH 057/139] SES-223 do not turn path seperator into slashes for communication reason MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Christopher Hätty --- 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 28dcbee6161d2..1cb49745df83f 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 42d6d254e370d859b824861537cceee51b5c7fbe Mon Sep 17 00:00:00 2001 From: Boris Baltes Date: Wed, 18 Dec 2024 09:59:59 +0100 Subject: [PATCH 058/139] SES-223 reworked path validation MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Christopher Hätty --- 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 1cb49745df83f..38f8e59afc093 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 53a32cb780f00035954c7e7a4b7c668d0f8b3f38 Mon Sep 17 00:00:00 2001 From: Kevin Beraz Date: Wed, 18 Dec 2024 14:41:13 +0100 Subject: [PATCH 059/139] SES-218 style toolbar overflow menu MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Christopher Hätty --- src/gui/settingsdialog.cpp | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/gui/settingsdialog.cpp b/src/gui/settingsdialog.cpp index 4e48609ce6490..a6aa66d2a4166 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 de7d98b6194198677314042382e35295f4739352 Mon Sep 17 00:00:00 2001 From: Kevin Beraz Date: Wed, 18 Dec 2024 14:42:42 +0100 Subject: [PATCH 060/139] SES-218 set font color for checkbox labels to black MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Christopher Hätty --- 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 5134a26f475d692dc419085aef751519b4028685 Mon Sep 17 00:00:00 2001 From: Kevin Beraz Date: Wed, 18 Dec 2024 14:43:47 +0100 Subject: [PATCH 061/139] SES-218 prevent highlighting of ExpandMemoryButton MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Christopher Hätty --- src/gui/accountsettings.cpp | 1 + 1 file changed, 1 insertion(+) diff --git a/src/gui/accountsettings.cpp b/src/gui/accountsettings.cpp index 4022e0960ba91..44e6bddb0abf5 100644 --- a/src/gui/accountsettings.cpp +++ b/src/gui/accountsettings.cpp @@ -238,6 +238,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 ed9c4b4dded64ae48c86fb4a45744070a359d44d Mon Sep 17 00:00:00 2001 From: Emil Bohleber Date: Fri, 20 Dec 2024 11:16:07 +0100 Subject: [PATCH 062/139] SES-215 replace installer background for mac with empty image MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Christopher Hätty --- 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 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 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 f18421bd2e20db260ff6f289280ba005c4f6dabf 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 063/139] SES-223 Merge Fix for 2bb2ae68aee451b9cff27e6dd8fc8fa50cb1890f MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Christopher Hätty --- 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 34d1cfbebd87b80b7ab5890f580278826d99bf27 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 064/139] SES-216 adjust color of CustomButtons MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 84224beb83a34266749ffa625ef06fdc5959d5d1 Signed-off-by: Christopher Hätty --- 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 c5989c939db9d..0e98d833984de 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 8e76700882e83cc92d67636665820adfcfcbf98f Mon Sep 17 00:00:00 2001 From: Kevin Beraz Date: Tue, 7 Jan 2025 15:25:50 +0100 Subject: [PATCH 065/139] SES-256 replace nextcloud offline state icon MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Christopher Hätty --- 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 7835ce8383f923ad0b4f6a1c86fe46a962aa7261 Mon Sep 17 00:00:00 2001 From: Kevin Beraz Date: Thu, 9 Jan 2025 15:44:47 +0100 Subject: [PATCH 066/139] SES-256 replace app icon MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Christopher Hätty --- 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 9024a15da589ba0687e24b6e51ecc20b1dc01f4d 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 067/139] SES-214 replace help URL MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 350180865ee86f5255ac9c19512e4ecca9b6d231 Signed-off-by: Christopher Hätty --- 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 d37d015169e9d..e95c456d2aaf9 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/#desktop"); + return QString::fromLatin1("https://wl.hidrive.com/%1").arg(tr("easy/0118", "Redirect URL Parameter")); #endif } From cebc5b6e1125ae664cca29b3e85f845ed2ecfce3 Mon Sep 17 00:00:00 2001 From: Kevin Beraz Date: Fri, 10 Jan 2025 15:54:35 +0100 Subject: [PATCH 068/139] SES-256 change offline icon back to standord nextcloud icon MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Christopher Hätty --- 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 77f619df53bba935dcb6d3de009009f61ce12ec8 Mon Sep 17 00:00:00 2001 From: Kevin Beraz Date: Wed, 15 Jan 2025 09:54:48 +0100 Subject: [PATCH 069/139] SES-257 add macOS specific app icon MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Christopher Hätty --- 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 950502b488e3ffaf6c8d1b9a5c4e1e04ea2cecf8 Mon Sep 17 00:00:00 2001 From: Kevin Beraz Date: Wed, 15 Jan 2025 09:55:25 +0100 Subject: [PATCH 070/139] SES-257 set correct APPLICATION_ICON_NAME for macOS MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Christopher Hätty --- 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 4a5516fc16e24ae8e4ad92f863b51a3309690f9c Mon Sep 17 00:00:00 2001 From: Kevin Beraz Date: Wed, 15 Jan 2025 15:35:05 +0100 Subject: [PATCH 071/139] SES-224 set default value of 'promptDeleteAllFiles' to false MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Christopher Hätty --- 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 9dba419d50249..b27a4082910f6 100644 --- a/src/libsync/configfile.cpp +++ b/src/libsync/configfile.cpp @@ -1070,7 +1070,7 @@ bool ConfigFile::showMainDialogAsNormalWindow() const { bool ConfigFile::promptDeleteFiles() const { QSettings settings(configFile(), QSettings::IniFormat); - return settings.value(QLatin1String(promptDeleteC), true).toBool(); + return settings.value(QLatin1String(promptDeleteC), false).toBool(); } void ConfigFile::setPromptDeleteFiles(bool promptDeleteFiles) From ed92ecf94397a8e95e8a966bd5c13ac5bd9e0a78 Mon Sep 17 00:00:00 2001 From: Emil Bohleber Date: Fri, 17 Jan 2025 18:32:00 +0100 Subject: [PATCH 072/139] SES-248 replace sparkle key wich our new one MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Christopher Hätty --- 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 4e79cc740194a..688e60ae82c7a 100644 --- a/cmake/modules/MacOSXBundleInfo.plist.in +++ b/cmake/modules/MacOSXBundleInfo.plist.in @@ -36,10 +36,8 @@ SUShowReleaseNotes - SUPublicDSAKeyFile - dsa_pub.pem SUPublicEDKey - c3RcfDWDayvsYSZW8FhZN1UOJhvPVN30zleb4zOqbtU= + FQ8Dq6AiSDDv4XpnyJ3b6mQBFYLPKgj9ziEg/+VNGHg= UTExportedTypeDeclarations From 03ea74f516697ecddfb3a511a76b206cef2f3112 Mon Sep 17 00:00:00 2001 From: Emil Bohleber Date: Fri, 17 Jan 2025 18:33:00 +0100 Subject: [PATCH 073/139] SES-248 make start.sh executable MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Christopher Hätty --- 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 36bbc49c8abd932caf8df15bd37151b21a6355bb Mon Sep 17 00:00:00 2001 From: Emil Bohleber Date: Fri, 17 Jan 2025 20:21:16 +0100 Subject: [PATCH 074/139] SES-275 set inactive tab text to black MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Christopher Hätty --- src/gui/accountsettings.cpp | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/src/gui/accountsettings.cpp b/src/gui/accountsettings.cpp index 44e6bddb0abf5..088a20fc61228 100644 --- a/src/gui/accountsettings.cpp +++ b/src/gui/accountsettings.cpp @@ -210,6 +210,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 dd782bdc6205a1558e04530678b545493661d529 Mon Sep 17 00:00:00 2001 From: Kevin Beraz Date: Tue, 21 Jan 2025 11:38:22 +0100 Subject: [PATCH 075/139] SES-229 add new icons MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Christopher Hätty --- 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 f8028c8d912b63a6e1f6e195ac7c545b852e918d Mon Sep 17 00:00:00 2001 From: Kevin Beraz Date: Tue, 21 Jan 2025 11:39:05 +0100 Subject: [PATCH 076/139] SES-229 use icons in ionostheme.h and style.qml MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Christopher Hätty --- 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 e4156950ee477155e0f4bacc0b5d56c1e1282a40 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 077/139] SES-229 use new icons in UI Components MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit ce17c8bc8056bbc03506105b6a55a4d64a702538 Signed-off-by: Christopher Hätty --- 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 dfd1bf1d45962..9196c1e211609 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 a6aa66d2a4166..384763a88d2af 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 27b8b7953f589..8604ef9715d43 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 edb002d6318dc..bcb78544fc8fc 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 c8a11bd44b6f788a924bcb302a9507a3aaa9524a Mon Sep 17 00:00:00 2001 From: Emil Bohleber Date: Tue, 21 Jan 2025 15:50:33 +0100 Subject: [PATCH 078/139] SES-248 remove fileprovider param from updater call MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Christopher Hätty --- 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 367170dfd05192a3690ad34c83dc8df4c60b721c Mon Sep 17 00:00:00 2001 From: Emil Bohleber Date: Tue, 21 Jan 2025 15:51:29 +0100 Subject: [PATCH 079/139] SES-248 move sparkle sign up so it will be signed bevore integration into bundle MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Christopher Hätty --- 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 89876f8688a0268a089b6d54971bf92b4f02470c 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 080/139] Merge translations changes MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Christopher Hätty --- 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 e95c456d2aaf9..e52031b5540b0 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 c893b7b0638ae726abde6d702d909b97b86ab1df 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 081/139] Merge fix MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Christopher Hätty --- 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 c40c53cea314a..7de9ab2ffbaa1 100644 --- a/src/gui/wizard/owncloudadvancedsetuppage.cpp +++ b/src/gui/wizard/owncloudadvancedsetuppage.cpp @@ -638,7 +638,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 cc7a1b9a25283d62bb88e82f1c1c7518f7616037 Mon Sep 17 00:00:00 2001 From: Kevin Beraz Date: Thu, 23 Jan 2025 17:46:24 +0100 Subject: [PATCH 082/139] updatet translations MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Christopher Hätty --- translations/client_de.ts | 8688 ++++++++++++++++++------------------ translations/client_en.ts | 8860 ++++++++++++++++++++++++++----------- translations/client_es.ts | 8692 ++++++++++++++++++------------------ translations/client_fr.ts | 8738 ++++++++++++++++++------------------ translations/client_nl.ts | 8720 ++++++++++++++++++------------------ 5 files changed, 24122 insertions(+), 19576 deletions(-) diff --git a/translations/client_de.ts b/translations/client_de.ts index 3cb479e6abd9d..0730d5bacc83f 100644 --- a/translations/client_de.ts +++ b/translations/client_de.ts @@ -1,36 +1,149 @@ - - + + + + + + &Launch on system startup + Beim &Systemstart starten + + + + can edit + + + + + could not create folder %1 + + + + + Create debug archive + Debug-Archiv erstellen + + + + Create Folder + + + + + File Drop (Upload Only) + + + + + Last Sync was successful. + + + + + New %1 Update Ready + + + + + ok + + + + + Open %1 in Browser + + + + + Open Local Folder + + + + + Password Protect + + + + + Server Address + + + + + Setup Error. + + + + + share label + + + + + Show call notifications + Anrufbenachrichtigungen anzeigen + + + + Show server &notifications + Server-&Benachrichtigungen anzeigen + + + + There was an invalid response to an authenticated webdav request + + + + + timeout + + + + + Undefined State. + + + + + updating local virtual files metadata + Aktualisierung der Metadaten lokaler virtueller Dateien + + + + Use &monochrome icons + &Monochrome Symbole verwenden + + + ActivityItem - - Open %1 locally - %1 lokal öffnen + + In %1 + In %1 - - In %1 - In %1 + + Open %1 locally + %1 lokal öffnen - - + + ActivityItemContent - - Open file details - Dateidetails öffnen + + Dismiss + Ablehnen - - Dismiss - Ablehnen + + Open file details + Dateidetails öffnen - - + + ActivityList - - Activity list - Aktivitätenliste + + Activity list + Aktivitätenliste @@ -46,129 +159,133 @@ CallNotificationDialog - - Talk notification caller avatar - Avatar zu Benachrichtigung über Talk-Anrufer + + Answer Talk call notification + Benachrichtigung zu Talk-Anruf beantworten - - Answer Talk call notification - Benachrichtigung zu Talk-Anruf beantworten + + Decline + Ablehnen - - Decline - Ablehnen + + Decline Talk call notification + Benachrichtigung zu Talk-Anruf ablehnen - - Decline Talk call notification - Benachrichtigung zu Talk-Anruf ablehnen + + Talk notification caller avatar + Avatar zu Benachrichtigung über Talk-Anrufer - - + + CloudProviderWrapper - - %1 (%2, %3) - %1 (%2, %3) + + %1 (%2, %3) + %1 (%2, %3) - - Checking for changes in "%1" - Nach Änderungen suchen in "%1" + + Checking for changes in '%1' + - - Syncing %1 of %2 (%3 left) - Synchronisiere %1 von %2 (%3 übrig) + + Checking for changes in "%1" + Nach Änderungen suchen in "%1" - - Syncing %1 of %2 - Synchronisiere %1 von %2 + + Help + Hilfe - - Syncing %1 (%2 left) - Synchronisiere %1 (%2 übrig) + + Log out + Abmelden - - Syncing %1 - Synchronisiere %1 + + No recently changed files + Keine kürzlich geänderte Dateien - - - No recently changed files - Keine kürzlich geänderte Dateien + + Open website + Webseite öffnen - - Sync paused - Synchronisierung pausiert + + Pause synchronization + Synchronisierung pausieren - - Syncing - Synchronisiere + + Quit sync client + Sync-Client beenden - - Open website - Webseite öffnen + + Recently changed + Zuletzt geändert - - Recently changed - Zuletzt geändert + + Settings + Einstellungen - - Pause synchronization - Synchronisierung pausieren + + Sync paused + Synchronisierung pausiert - - Help - Hilfe + + Syncing + Synchronisiere - - Settings - Einstellungen + + Syncing %1 + Synchronisiere %1 - - Log out - Abmelden + + Syncing %1 (%2 left) + Synchronisiere %1 (%2 übrig) - - Quit sync client - Sync-Client beenden + + Syncing %1 of %2 + Synchronisiere %1 von %2 - - + + + Syncing %1 of %2 (%3 left) + Synchronisiere %1 von %2 (%3 übrig) + + + ConflictDelegate - - Local version - Lokale Version + + Local version + Lokale Version - - Server version - Serverversion + + Server version + Serverversion - - + + CurrentAccountHeaderButton - - Current account - Aktuelles Konto + + Account switcher and settings menu + Konto-Umschalter und Einstellungsmenü @@ -183,14 +300,14 @@ Synchronisierung für alle pausieren - - Add account - Konto hinzufügen + + Current account + Aktuelles Konto - - Add new account - Neues Konto hinzufügen + + Current account avatar + Avatar des aktuellen Kontos @@ -226,17 +343,17 @@ EditFileLocallyLoadingDialog - - Opening file for local editing - Datei wird für die lokale Bearbeitung geöffnet + + Opening file for local editing + Datei wird für die lokale Bearbeitung geöffnet - - + + EmojiPicker - - No recent emojis - Keine aktuellen Emojis + + No recent emojis + Keine aktuellen Emojis @@ -273,38 +390,39 @@ ErrorBox - - Error - Fehler + + Error + Fehler - - - FileDetailsPage + + + FakeHangingReply - - Dismiss - Ablehnen + + Operation canceled + Vorgang abgebrochen + + + FileDetailsPage - - Activity - Aktivität + Activity + Aktivität - - Sharing - Teilen + Sharing + Teilen - - + + FileDetailsWindow - - File details of %1 · %2 - Dateidetails von %1 · %2 + + File details of %1 · %2 + Dateidetails von %1 · %2 - - + + FileProviderEvictionDialog @@ -321,176 +439,212 @@ Reload Neu laden - - + + FileProviderFastEnumerationSettings - - Enable fast sync - Schnelle Synchronisierung altivieren + + Enable fast sync + Schnelle Synchronisierung altivieren - - 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. + 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 + + Delete + Löschen - - + + FileProviderSettings - - Virtual files settings - Einstellungen für virtuelle Dateien + + Advanced + Erweitert - - General settings - Allgemeine Einstellungen + + Enable virtual files + Virtuelle Dateien aktivieren - - Enable virtual files - Virtuelle Dateien aktivieren + + General settings + Allgemeine Einstellungen - - Advanced - Erweitert + + Signal file provider domain + Domain des Signaldateianbieters - - Signal file provider domain - Domain des Signaldateianbieters + + 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 - - %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… - - + + FileProviderSyncStatus - - Syncing - Synchronisiere + + All synced! + Alles synchronisiert! + + + FileSystem - - All synced! - Alles synchronisiert! + Could not make directories in trash + Verzeichnisse konnten im Papierkorb nicht erstellt werden - - - FileSystem - - Error removing "%1": %2 - Fehler beim Entfernen "%1": %2 + + Could not move '%1' to '%2' + - - Could not remove folder "%1" - Der Ordner "%1" konnte nicht gelöscht werden + Could not move "%1" to "%2" + Konnte "%1" nicht nach "%2" verschieben - - Could not make directories in trash - Verzeichnisse konnten im Papierkorb nicht erstellt werden + + Could not remove folder "%1" + Der Ordner "%1" konnte nicht gelöscht werden - - - Could not move "%1" to "%2" - Konnte "%1" nicht nach "%2" verschieben + + Error removing "%1": %2 + Fehler beim Entfernen "%1": %2 - - Moving to the trash is not implemented on this platform - Verschieben in den Papierkorb ist auf dieser Plattform nicht möglich + Moving to the trash is not implemented on this platform + Verschieben in den Papierkorb ist auf dieser Plattform nicht möglich - - + + Flow2AuthWidget - - Browser Authentication - Browser-Authentifizierung + + An error occurred while connecting. Please try again. + Es ist ein Fehler beim Herstellen der Verbindung aufgetreten. Bitte erneut versuchen. - - Logo - Logo + + Browser Authentication + Browser-Authentifizierung - - Switch to your browser to connect your account - Wechseln Sie zu Ihrem Browser, um Ihr Konto zu verbinden + + Logo + Logo - - An error occurred while connecting. Please try again. - Es ist ein Fehler beim Herstellen der Verbindung aufgetreten. Bitte erneut versuchen. + + Switch to your browser to connect your account + Wechseln Sie zu Ihrem Browser um Ihr Konto zu verbinden - - + + + FolderWizardSelectiveSync + + + Add Folder Sync + Ordner Sync hinzufügen + + + + Step 3 of 3: Selektive Synchronisation + Schritt 3 von 3: Selektive Synchronisierung + + + FolderWizardSourcePage - - Pick a local folder on your computer to sync - Wählen Sie einen lokalen Ordner zum Synchronisieren aus + + &Choose + &Wählen - - &Choose … - &Wählen … + &Choose … + &Wählen … - - + + 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 + 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 - - Select a remote destination folder - Einen entfernten Zielordner auswählen + + 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 + + Create folder + Ordner erstellen - - Refresh - Aktualisieren + + Folders + Ordner - - 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 + + + Select a remote destination folder + Einen entfernten Zielordner auswählen + + + + Step 2 of 3: Directory in your %1 + Schritt 2 von 3: Verzeichnis in Ihrem %1 + + + MainWindow @@ -507,44 +661,55 @@ New activities Neue Aktivitäten - - + + OCC::AbstractNetworkJob - - Connection timed out - Zeitüberschreitung bei der Verbindung + + 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 - - 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::AbstractPropagateRemoteDeleteEncrypted + + "%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. 204 erwartet, aber "%1 %2" erhalten. + + + OCC::Account - - File %1 is already locked by %2. - Datei %1 ist bereits von %2 gesperrt. + + 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 + + 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 + + Unlock operation on %1 failed with error %2 + Das Entsperren von %1 ist mit Fehler %2 fehlgeschlagen - - + + OCC::AccountManager @@ -557,22 +722,21 @@ Soll ein Kontoimport versucht werden? %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? 1 account was detected from a legacy desktop client. Should the account be imported? - 1 Konto wurde von einem älteren Desktop-Client erkannt. + 1 Konto wurde von einem älteren Desktop-Client erkannt. Soll das Konto importiert werden? - - - - Legacy import - Import früherer Konfiguration + An existing configuration from a legacy desktop client was detected. +Should an account import be attempted? + Es wurde eine vorhandene Konfiguration eines früheren Desktop-Clients erkannt. +Soll ein Kontoimport versucht werden? @@ -585,94 +749,91 @@ Soll das Konto importiert werden? Überspringen - - Successfully imported account from legacy client: %1 - Konto von älterem Client importiert: %1 + + Import + Importieren - - Could not import accounts from legacy client configuration. - Konten von älterer Client-Konfiguration konnten nicht importiert werden. + + Legacy import + Import früherer Konfiguration - - - OCC::AccountSettings - - Storage space: … - Speicherplatz: … + + Skip + Überspringen - - 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 + Successfully imported account from legacy client: %1 + Konto von älterem Client importiert: %1 + + + OCC::AccountSettings - - - - Cancel - Abbrechen + + (experimental) + (experimentell) - - Apply - Anwenden + + %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. - - Connected with <server> as <user> - Verbunden mit <server> als <user> + + %1 as %2 + %1 als %2 - - Synchronize all - Alles synchronisieren + + %1 as <i>%2</i> + - - 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 + + <p>Could not create local folder <i>%1</i>.</p> + <p>Konnte lokalen Ordner <i>%1</i> nicht anle‏gen.‎</p> - - Virtual file sync - Virtuelle Dateisynchronisierung + + <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> - - Connection settings - Verbindungseinstellungen + + Apply + Anwenden - - End-to-end Encryption with Virtual Files - Ende-zu-Ende-Verschlüsselung mit virtuellen Dateien + + Apply manual changes + Manuelle Änderungen anwenden - - 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. + + Availability + Verfügbarkeit - - Do not encrypt folder - Ordner nicht verschlüsseln + + Cancel + Abbrechen - - Encrypt folder - Ordner verschlüsseln + + Choose what to sync + Zu synchronisierende Elemente auswählen @@ -687,29 +848,29 @@ Soll das Konto importiert werden? <b>Dies kann nicht rückgängig gemacht werden. Sind Sie sicher, dass Sie fortfahren möchten?</b> - - No account configured. - Kein Konto konfiguriert. + + Connected with <server> as <user> + Verbunden mit <server> als <user> - - Disable encryption - Verschlüsselung deaktivieren + + Connecting to %1 … + Verbinde zu %1 … - - Display mnemonic - Gedächtnisstütze anzeigen + + Connection settings + Verbindungseinstellungen - - End-to-end encryption has been enabled for this account - Für dieses Konto wurde die Ende-zu-Ende-Verschlüsselung aktiviert + + Could not encrypt folder because the folder does not exist anymore + Der Ordner konnte nicht verschlüsselt werden, da er nicht mehr existiert - - Warning - Warnung + + Create new folder + Neuen Ordner erstellen @@ -727,254 +888,238 @@ Soll das Konto importiert werden? Der Ordner weist einen Synchronisierungsfehler auf. Die Verschlüsselung dieses Ordners ist möglich, sobald er erfolgreich synchronisiert wurde - - 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? + + Disable end-to-end encryption for %1? + Ende-zu-Ende-Verschlüsselung für %1 deaktivieren? - - 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. + + Disable support + Unterstützung deaktivieren - - Encryption failed - Verschlüsselung fehlgeschlagen + + Disable virtual file support … + Unterstützung für virtuelle Dateien deaktivieren - - Could not encrypt folder because the folder does not exist anymore - Der Ordner konnte nicht verschlüsselt werden, da er nicht mehr existiert + + Disable virtual file support? + Unterstützung für virtuelle Dateien deaktivieren? - - - Open folder - Ordner öffnen + + Display mnemonic + Gedächtnisstütze anzeigen - - Encrypt - Verschlüsseln + + Do not encrypt folder + Ordner nicht verschlüsseln - - - Edit Ignored Files - Ignorierte Dateien bearbeiten + + Edit Ignored Files + Ignorierte Dateien bearbeiten - - - Create new folder - Neuen Ordner erstellen + + Enable encryption + - - - Availability - Verfügbarkeit + + Enable virtual file support %1 … + Unterstützung für virtuelle Dateien aktivieren %1 … - - Choose what to sync - Zu synchronisierende Elemente auswählen + + Encrypt + Verschlüsseln - - Force sync now - Synchronisierung jetzt erzwingen + + Encrypt folder + Ordner verschlüsseln - - Restart sync - Synchronisierung neustarten + + Encryption failed + Verschlüsselung fehlgeschlagen - - Resume sync - Synchronisierung fortsetzen + + End-to-end Encryption + Ende-zu-Ende-Verschlüsselung - - Pause sync - Synchronisierung pausieren + + End-to-end encryption has been enabled for this account + Für dieses Konto wurde die Ende-zu-Ende-Verschlüsselung aktiviert - - Remove folder sync connection - Ordner-Synchronisierung entfernen + + 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 Mnemonik aktiviert werden.<br>Dadurch wird die Synchronisierung vorhandener verschlüsselter Ordner aktiviert. - - 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? - - Enable virtual file support %1 … - Unterstützung für virtuelle Dateien aktivieren %1 … + + End-to-end encryption mnemonic + Gedächtnisstütze für Ende-zu-Ende Verschlüsselung - - (experimental) - (experimentell) + + End-to-end Encryption with Virtual Files + Ende-zu-Ende-Verschlüsselung mit virtuellen Dateien - - Folder creation failed - Anlegen des Ordners fehlgeschlagen + + Expand Memory + Speicher erweitern - - <p>Could not create local folder <i>%1</i>.</p> - <p>Konnte lokalen Ordner <i>%1</i> nicht anle‏gen.‎</p> + + Folder creation failed + Anlegen des Ordners fehlgeschlagen - - Confirm Folder Sync Connection Removal - Bestätigen Sie die Löschung der Ordner-Synchronisierung + + Force sync now + Synchronisierung jetzt erzwingen - - <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> + + https://wl.hidrive.com/easy/0057 + https://wl.hidrive.com/easy/0067 - - Remove Folder Sync Connection - Ordner-Synchronisierung entfernen + + No %1 connection configured. + Keine %1-Verbindung konfiguriert. - - Disable virtual file support? - Unterstützung für virtuelle Dateien deaktivieren? + + No account configured. + Kein Konto konfiguriert. - - 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 connection to %1 at %2. + Keine Verbindung zu %1 auf %2 - - Disable support - Unterstützung deaktivieren + Obtaining authorization from the browser. <a href='%1'>Click here</a> to re-open the browser. + Berechtigung vom Browser einholen. <a href='%1'> Klicken Sie hier </a>, um den Browser erneut zu öffnen. - - End-to-end encryption mnemonic - Gedächtnisstütze für die Ende-zu-Ende-Verschlüsselung + + Open folder + Ordner öffnen - - 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). + + Pause sync + Synchronisierung pausieren - - Disable end-to-end encryption - Ende-zu-Ende-Verschlüsselung 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 end-to-end encryption for %1? - Ende-zu-Ende-Verschlüsselung für %1 deaktivieren? + + 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. + + Remove Folder Sync Connection + Ordner-Synchronisierung entfernen - - Sync Running - Synchronisierung läuft + + 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. - - The syncing operation is running.<br/>Do you want to terminate it? - Die Synchronisierung läuft gerade.<br/>Wollen Sie diese beenden? + + Restart sync + Synchronisierung neustarten - - %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. + + Resume sync + Synchronisierung fortsetzen - - %1 of %2 in use - %1 von %2 Serverkapazität verwendet + + 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. - - Currently there is no storage usage information available. - Derzeit sind keine Speichernutzungsinformationen verfügbar. + + Server %1 is currently in maintenance mode. + Server %1 befindet sich im Wartungsmodus. - - %1 in use - %1 wird verwendet + + Server %1 is temporarily unavailable. + Server %1 ist derzeit nicht verfügbar. - - %1 as %2 - %1 als %2 + + Server configuration error: %1 at %2. + Konfigurationsfehler des Servers: %1 auf %2. - - The server version %1 is unsupported! Proceed at your own risk. - Die Serverversion %1 wird nicht unterstützt! Fortfahren auf eigenes Risiko. + + Set up encryption + Verschlüsselung einrichten - - Connected to %1. - Verbunden mit %1. + + Signed out from %1. + Abgemeldet von %1. - - Server %1 is temporarily unavailable. - Server %1 ist derzeit nicht verfügbar. + + Standard file sync + Standard Dateisynchronisierung - - Server %1 is currently in maintenance mode. - Server %1 befindet sich im Wartungsmodus. + + Storage space %1% occupied + Speicherplatz %1% belegt - - 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. + + Storage space: … + Speicherplatz: … - - Signed out from %1. - Abgemeldet von %1. + + Sync Running + Synchronisierung läuft - - Obtaining authorization from the browser. <a href='%1'>Click here</a> to re-open the browser. - Berechtigung mittels Browser erteilen. <a href='%1'> Klicken Sie hier </a>, um den Browser erneut zu öffnen. + + Synchronize all + Alles synchronisieren - - Connecting to %1 … - Verbinde zu %1 … + + Synchronize none + Nichts synchronisieren - - No connection to %1 at %2. - Keine Verbindung zu %1 auf %2 + + 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 erfolgreich synchronisiert wurde @@ -982,9 +1127,9 @@ Diese Aktion bricht jede derzeit laufende Synchronisierung ab. Verbindung zu %1 kann nicht hergestellt werden. - - Server configuration error: %1 at %2. - Konfigurationsfehler des Servers: %1 auf %2. + + The server version %1 is old and unsupported! Proceed at your own risk. + @@ -992,9 +1137,9 @@ Diese Aktion bricht jede derzeit laufende Synchronisierung ab. Sie müssen die Nutzungsbedingungen akzeptieren - - No %1 connection configured. - Keine %1-Verbindung konfiguriert. + + The syncing operation is running.<br/>Do you want to terminate it? + Die Synchronisierung läuft gerade.<br/>Wollen Sie diese beenden? @@ -1007,14 +1152,14 @@ Diese Aktion bricht jede derzeit laufende Synchronisierung ab. 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 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 or external storages: + Es gibt Ordner, die nicht synchronisiert werden konnten, da sie zu groß oder externe Speicher sind: @@ -1022,201 +1167,207 @@ Diese Aktion bricht jede derzeit laufende Synchronisierung ab. Es gibt Ordner, deren Größe über %1 MB hinaus gewachsen ist: %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. - 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 + Dieses Konto unterstützt Ende-zu-Ende-Verschlüsselung - - 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. + +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. - - Set up encryption - Verschlüsselung einrichten + 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. Diese Dateien sind ohne Ihren Schlüssel nicht mehr zugänglich. +<b>Dieser Vorgang ist nicht umkehrbar. Sind Sie sicher, dass Sie fortfahren möchten?</b> - - - 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. + + 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). - - There was an invalid response to an authenticated WebDAV request - Es gab eine ungültige Antwort auf eine authentifizierte WebDAV-Anfrage + + Unable to connect to %1. + Verbindung zu %1 kann nicht hergestellt werden. - - - OCC::AccountState - - Signed out - Abgemeldet + + 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 - - Disconnected - Getrennt + + Virtual file sync + Virtuelle Dateisynchronisierung - - Connected - Verbunden + + Warning + Warnung - - Service unavailable - Dienst nicht verfügbar + + 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. - - Maintenance mode - Wartungsmodus + + You need to accept the terms of service + Sie müssen die Nutzungsbedingungen akzeptieren - - Redirect detected - Umleitung erkannt + + 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 - - Network error - Netzwerkfehler + + 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. - - Configuration error - Konfigurationsfehler + + 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. - - Asking Credentials - Zugangsdaten werden abgefragt + + There was an invalid response to an authenticated WebDAV request + Es gab eine ungültige Antwort auf eine authentifizierte WebDAV-Anfrage + + + OCC::AccountState - - Need the user to accept the terms of service - Der Benutzer muss die Nutzungsbedingungen akzeptieren + + Asking Credentials + Zugangsdaten werden abgefragt - - Unknown account state - Unbekannter Konto-Zustand + + Configuration error + Konfigurationsfehler - - - OCC::ActivityListModel - - For more activities please open the Activity app. - Um weitere Aktivitäten anzusehen, bitte die Activity-App öffnen. + + Connected + Verbunden - - Fetching activities … - Aktivitäten abrufen… + + Disconnected + Getrennt - - Network error occurred: client will retry syncing. - Netzwerkfehler aufgetreten: Client startet die Synchronisation neu + + Maintenance mode + Wartungsmodus - - Files from the ignore list as well as symbolic links are not synced. - Dateien aus der Ignorierliste sowie symbolische Links werden nicht synchronisiert. + + Need the user to accept the terms of service + Der Benutzer muss die Nutzungsbedingungen akzeptieren - - - OCC::AddCertificateDialog - - SSL client certificate authentication - SSL-Client-Zertifikat-Authentifizierung + + Network error + Netzwerkfehler - - This server probably requires a SSL client certificate. - Der Server benötigt vermutlich ein SSL-Client-Zertifikat + + Redirect detected + Umleitung erkannt - - Certificate & Key (pkcs12): - Zertifikat & Schlüssel (pkcs12): + + Service unavailable + Dienst nicht verfügbar - - Browse … - Durchsuchen … + + Signed out + Abgemeldet - - Certificate password: - Zertifikatspasswort: + + Unknown account state + Unbekannter Konto-Zustand + + + OCC::ActivityListModel - - 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. + + Fetching activities … + Aktivitäten abrufen… - - Select a certificate - Zertifikat auswählen + + Files from the ignore list as well as symbolic links are not synced. + Dateien aus der Ignorierliste sowie symbolische Links werden nicht synchronisiert. - - Certificate files (*.p12 *.pfx) - Zertifikatsdateien (*.p12 *.pfx) + + Files from the ignore list as well as symbolic links are not synced. This includes: + - - - 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. + + For more activities please open the Activity app. + Um weitere Aktivitäten anzusehen bitte die Activity-App öffnen. - - newer - newer software version - Neuer + + Network error occurred: client will retry syncing. + Netzwerkfehler aufgetreten: Client startet die Synchronisation neu + + + OCC::AddCertificateDialog - - older - older software version - Älter + + 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. - - ignoring - Ignoriere + + Browse … + Durchsuchen … - - deleting - Lösche + + Certificate & Key (pkcs12) : + - - Quit - Beenden + + Certificate & Key (pkcs12): + Zertifikat & Schlüssel (pkcs12): - - Continue - Fortsetzen + + Certificate files (*.p12 *.pfx) + Zertifikatsdateien (*.p12 *.pfx) @@ -1250,6 +1401,9 @@ Diese Aktion bricht jede derzeit laufende Synchronisierung ab. Legacy import Import früherer Konfiguration + + + OCC::Application Imported %1 and %2 from a legacy desktop client. @@ -1259,271 +1413,262 @@ Diese Aktion bricht jede derzeit laufende Synchronisierung ab. %3 - - Error accessing the configuration file - Fehler beim Zugriff auf die Konfigurationsdatei + + %1 folders + %1 Ordner - - 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. + + 1 account + 1 Konto OCC::AuthenticationDialog - - Authentication Required - Authentifizierung erforderlich + + Continue + Fortsetzen - - Enter username and password for "%1" at %2. - Benutzername und Passwort für "%1" auf %2 eingeben. + + deleting + Lösche - - &Username: - &Benutzername: + + Error accessing the configuration file + Fehler beim Zugriff auf die Konfigurationsdatei - - &Password: - &Passwort: + + ignoring + Ignoriere - - - OCC::BasePropagateRemoteDeleteEncrypted - - "%1 Failed to unlock encrypted folder %2". - "%1 Der verschlüsselte Ordner %2 konnte nicht entsperrt werden". + + Imported %1 and %2 from a legacy desktop client. +%3 + %1 und %2 wurden von einem älteren Desktop-Client importiert. +%3 - - 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. + + newer + Neuer - - - 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 + + older + Älter - - 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. + + Quit + Beenden - - File Removed (start upload) %1 - Datei entfernt (starte das Hochladen) %1 + + Quit %1 + Beende %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. + + 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. - - Local file changed during syncing. It will be resumed. - Lokale Datei hat sich während der Synchronisierung geändert. Die Synchronisierung wird wieder aufgenommen. + + 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. - - - Local file changed during sync. - Lokale Datei wurde während der Synchronisierung geändert. + + There was an error while accessing the configuration file at %1. Please make sure the file can be accessed by your user. + + + + OCC::AuthenticationDialog - - Network error: %1 - Netzwerkfehler: %1 + + &Password: + &Passwort: - - Error updating metadata: %1 - Fehler beim Aktualisieren der Metadaten: %1 + + &User: + - - The file %1 is currently in use - Die Datei %1 wird aktuell verwendet + + &Username: + &Benutzername: - - The local file was removed during sync. - Die lokale Datei wurde während der Synchronisierung gelöscht. + + Authentication Required + Authentifizierung erforderlich - - Restoration failed: %1 - Wiederherstellung fehlgeschlagen: %1 + + Enter username and password for '%1' at %2. + - - - 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. + + Enter username and password for "%1" at %2. + Benutzername und Passwort für "%1" auf %2 eingeben. + + + OCC::BulkPropagatorJob - - 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. + + Error updating metadata: %1 + Fehler beim Aktualisieren der Metadaten: %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 zum Umbenennen der Datei an deren Ersteller. + + 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 - - Failed to fetch permissions with error %1 - Fehler beim Abrufen der Berechtigungen. Fehler %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. - - Filename contains leading and trailing spaces. - Dateiname enthält Leerzeichen am Anfang und am Ende. + + 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. - - Filename contains leading spaces. - Dateiname enthält Leerzeichen am Anfang. + + File Removed (start upload) %1 + Datei entfernt (starte das Hochladen) %1 - - Filename contains trailing spaces. - Dateiname enthält Leerzeichen am Ende. + + Local file changed during sync. + Lokale Datei wurde während der Synchronisierung geändert. - - - OCC::CaseClashFilenameDialog - - Case Clash Conflict - Konflikt mit der Groß- und Kleinschreibung + + Local file changed during syncing. It will be resumed. + Lokale Datei hat sich während der Synchronisierung geändert. Die Synchronisierung wird wieder aufgenommen. - - 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. + + Network error: %1 + Netzwerkfehler: %1 - - Error - Fehler + + Restoration failed: %1 + Wiederherstellung fehlgeschlagen: %1 - - Existing file - Vorhandene Datei + + The file %1 is currently in use + Die Datei %1 wird aktuell verwendet - - file A - Datei A + + The local file was removed during sync. + Die lokale Datei wurde während der Synchronisierung gelöscht. + + + OCC::CaseClashConflictSolver - - - today - Heute + + 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 selben Namen bereits auf dem Server existiert. Bitte einen anderen Namen wählen. - - - 0 byte - 0 Byte + + 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. - - - Open existing file - Existierende Datei öffnen + + Failed to fetch permissions with error %1 + Fehler beim Abrufen der Berechtigungen. Fehler %1 - - Case clashing file - Datei mit dem Problem der Groß- und Kleinschreibung + + Filename contains leading and trailing spaces. + Dateiname enthält Leerzeichen am Anfang und am Ende. - - file B - Datei B + + Filename contains leading spaces. + Dateiname enthält Leerzeichen am Anfang. - - - Open clashing file - Datei mit dem Problem der Groß- und Kleinschreibung öffnen + + Filename contains trailing spaces. + Dateiname enthält Leerzeichen am Ende. - - 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: + + 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 dereren Ersteller. + + + OCC::CaseClashFilenameDialog - - New filename - Neuer Dateiname + + %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. - - Rename file - Datei umbenennen + + 0 byte + 0 Byte - - 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. + + Case Clash Conflict + Konflikt mit der Groß- und Kleinschreibung - - %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. + + Case clashing file + Datei mit dem Problem der Groß- und Kleinschreibung - - Filename contains leading and trailing spaces. - Dateiname enthält Leerzeichen am Anfang und am Ende. + + Existing file + Vorhandene Datei - - Filename contains leading spaces. - Dateiname enthält Leerzeichen am Anfang. + + file A + Datei A - - Filename contains trailing spaces. - Dateiname enthält Leerzeichen am Ende. + + file B + Datei B - - Use invalid name - Ungültigen Namen verwenden + + Filename contains illegal characters: %1 + Dateiname enthält unzulässige Zeichen: %1 - - Filename contains illegal characters: %1 - Dateiname enthält unzulässige Zeichen: %1 + + New filename + Neuer Dateiname - - - OCC::CleanupPollsJob - - Error writing metadata to the database - Fehler beim Schreiben der Metadaten in die Datenbank + + Open clashing file + Datei mit dem Problem der Groß- und Kleinschreibung öffnen - - - OCC::ClientSideEncryption PIN needed to login to token @@ -1550,186 +1695,178 @@ Diese Aktion bricht jede derzeit laufende Synchronisierung ab. 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 + + 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: - - - OCC::ConflictDialog - - Sync Conflict - Synchronisations-Konflikt + + Rename file + Datei umbenennen - - - Conflicting versions of %1. - Konflikt-Versionen von %1. + + 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. - - 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. + + 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. - - Local version - Lokale Version + + today + Heute - - - Click to open the file - Klicken um die Datei zu öffnen + + Use invalid name + Ungültigen Namen verwenden + + + OCC::CleanupPollsJob - - - today - Heute + + Error writing metadata to the database + Fehler beim Schreiben der Metadaten in die Datenbank + + + OCC::ClientSideEncryption - - - 0 byte - 0 Byte + + Enter E2E passphrase + E2E-Passphrase eingeben - - <a href="%1">Open local version</a> - <a href="%1">Lokale Version öffnen</a> + + Please enter your end to end encryption passphrase:<br><br>User: %2<br>Account: %3<br> + - - Server version - Serverversion + + 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 - - <a href="%1">Open server version</a> - <a href="%1">Serverversion öffnen</a> + + <a href="%1">Open local version</a> + <a href="%1">Lokale Version öffnen</a> - - - Keep selected version - Ausgewählte Version behalten + + <a href="%1">Open server version</a> + <a href="%1">Serverversion öffnen</a> - - Open local version - Lokale Version öffnen + + Click to open the file + Klicken um die Datei zu öffnen - - Open server version - Serverversion öffnen + + Conflicting versions of %1. + Konflikt-Versionen von %1. - - Keep both versions - Beide Versionen behalten + + Keep both versions + Beide Versionen behalten - - Keep local version - Lokale Version behalten + + Keep local version + Lokale Version behalten - - Keep server version - Serverversion behalten + + Keep selected version + Ausgewählte Version behalten - - - OCC::ConflictSolver - - 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? + + Keep server version + Serverversion behalten - - Do you want to delete the file <i>%1</i> permanently? - Möchten Sie die Datei <i>%1</i> dauerhaft löschen? + + Open local version + Lokale Version öffnen - - Confirm deletion - Löschen bestätigen + + Open server version + Serverversion öffnen - - - Error - Fehler + + Sync Conflict + Synchronisations-Konflikt - - - Moving file failed: - -%1 - Verschieben der Datei fehlgeschlagen: - -%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. - - - OCC::ConnectionValidator + + + OCC::ConflictSolver - - No Nextcloud account configured - Kein Nextcloud-Konto konfiguriert + + Confirm deletion + Löschen bestätigen - - Authentication error: Either username or password are wrong. - Authentifizierungsfehler: Benutzername oder Passwort ist falsch. + + 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? - - Timeout - Zeitüberschreitung + + Do you want to delete the file <i>%1</i> permanently? + Möchten Sie die Datei <i>%1</i> dauerhaft löschen? - - The provided credentials are not correct - Die zur Verfügung gestellten Anmeldeinformationen sind nicht korrekt + + Moving file failed: + +%1 + Verschieben der Datei fehlgeschlagen: + +%1 + + + OCC::ConnectionValidator - - The configured server for this client is too old - Der konfigurierte Server ist für diesen Client zu alt + + Authentication error: Either username or password are wrong. + Authentifizierungsfehler: Benutzername oder Passwort ist falsch. - - Please update to the latest server and restart the client. - Aktualisieren Sie auf die neueste Server-Version und starten Sie den Client neu. + + Connection issue + Verbindungsproblem - - - OCC::DiscoveryPhase - - Error while canceling deletion of a file - Fehler beim Abbrechen des Löschens einer Datei + + No Nextcloud account configured + Kein Nextcloud-Konto konfiguriert - - Error while canceling deletion of %1 - Fehler beim Abbrechen des Löschens von %1 + + Please update to the latest server and restart the client. + Aktualisieren Sie auf die neueste Server-Version und starten Sie den Client neu. - - - OCC::DiscoverySingleDirectoryJob - - - Server error: PROPFIND reply is not XML formatted! - Serverantwort: PROPFIND-Antwort ist nicht im XML-Format! + + The configured server for this client is too old + Der konfigurierte Server ist für diesen Client zu alt @@ -1742,365 +1879,348 @@ 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. - - - OCC::DiscoverySingleLocalDirectoryJob + + + OCC::DiscoveryMainThread - - Error while opening directory %1 - Fehler beim Öffnen des Ordners %1 + + Aborted by the user + + + + OCC::DiscoveryPhase - - Directory not accessible on client, permission denied - Verzeichnis auf dem Client nicht zugreifbar, Berechtigung verweigert + + Error while canceling deletion of %1 + Fehler beim Abbrechen des Löschens von %1 - - Directory not found: %1 - Ordner nicht gefunden: %1 + + Error while canceling deletion of a file + Fehler beim Abbrechen des Löschens einer Datei + + + OCC::DiscoverySingleDirectoryJob - - Filename encoding is not valid - Dateinamenkodierung ist ungültig + + 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. - - Error while reading directory %1 - Fehler beim Lesen des Ordners %1 + + Encrypted metadata setup error! + Einrichtungsfehler für verschlüsselte Metadaten! - - - OCC::EditLocallyJob - - - - - - - - - Could not start editing locally. - Lokale Bearbeitung konnte nicht gestartet werden. + + Server error: PROPFIND reply is not XML formatted! + Serverantwort: PROPFIND-Antwort ist nicht im XML-Format! - - An error occurred during setup. - Es ist ein Fehler während der Einrichtung aufgetreten. + + The server file discovery reply is missing data. + + + + OCC::DiscoverySingleLocalDirectoryJob - - - 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. + + Directory not accessible on client, permission denied + Verzeichnis auf dem Client nicht zugreifbar, Berechtigung verweigert - - Invalid token received. - Ungültiges Token empfangen. + + Directory not found: %1 + Ordner nicht gefunden: %1 - - - - - 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. + + Error while opening directory %1 + Fehler beim Öffnen des Ordners %1 - - Invalid file path was provided. - Ungültiger Dateipfad wurde angegeben. + + Error while reading directory %1 + Fehler beim Lesen des Ordners %1 - - Could not find an account for local editing. - Es konnte kein Konto für die lokale Bearbeitung gefunden werden. + + Filename encoding is not valid + Dateinamenkodierung ist ungültig + + + OCC::EditLocallyJob - - 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. + + An error occurred during data retrieval. + Es ist ein Fehler beim Datenabruf aufgetreten. - - - - 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 validate the request to open a file from server. - Die Anforderung zum Öffnen einer Datei vom Server konnte nicht validiert werden. + + 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. - - - 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. + + 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. - - 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 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 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 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. - - Invalid local file path. - Ungültiger lokaler Dateipfad. + + 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 find an account for local editing. + Es konnte kein Konto für die lokale Bearbeitung gefunden werden. - - - - - - - Please try again. - Bitte erneut versuchen. + + Could not open %1 + %1 konnte nicht geöffnet werden - - File %1 already locked. - Datei %1 bereits gesperrt. + + Could not start editing locally. + Lokale Bearbeitung konnte nicht gestartet werden. - - - 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. + + Could not validate the request to open a file from server. + Die Anforderung zum Öffnen einer Datei vom Server konnte nicht validiert werden. - - File %1 now locked. - Datei %1 ist jetzt gesperrt. + + File %1 already locked. + Datei %1 bereits gesperrt. - - File %1 could not be locked. - Datei %1 konnte nicht gesperrt werden. + + File %1 could not be locked. + Datei %1 konnte nicht gesperrt werden. - - - 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. + + File %1 now locked. + Datei %1 ist jetzt gesperrt. - - Please try again. - Bitte erneut versuchen. + + Invalid file path was provided. + Ungültiger Dateipfad wurde angegeben. - - - OCC::EditLocallyVerificationJob - - Invalid token received. - Ungültiges Token empfangen. + + Invalid local file path. + Ungültiger lokaler Dateipfad. - - - - Please try again. - Bitte erneut versuchen. + + Invalid token received. + Ungültiges Token empfangen. - - Invalid file path was provided. - Ungültiger Dateipfad wurde angegeben. + + 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. - - Could not find an account for local editing. - Es konnte kein Konto für die lokale Bearbeitung gefunden werden. + + Please try again. + Bitte erneut versuchen. - - - 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. - - - + + OCC::EncryptFolderJob - - Could not generate the metadata for encryption, Unlocking the folder. + + 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. + Die Metadaten für die Verschlüsselung konnten nicht generiert werden. Entsperren des Ordners. Dies kann ein Problem mit Ihren OpenSSL-Bibliotheken sein. - - + + OCC::EncryptedFolderMetadataHandler - - - - - - - Error fetching metadata. - Fehler beim Abrufen der Metadaten. + + Error fetching encrypted folder ID. + Fehler beim Abrufen der verschlüsselten Ordner-ID. - - - - Error locking folder. - Fehler beim Sperren des Ordners. + + Error fetching metadata. + Fehler beim Abrufen der Metadaten. - - Error fetching encrypted folder ID. - Fehler beim Abrufen der verschlüsselten Ordner-ID. + + Error locking folder. + Fehler beim Sperren des Ordners. - - Error parsing or decrypting metadata. - Fehler beim Lesen oder Entschlüsseln von Metadaten. + + Error parsing or decrypting metadata. + Fehler beim Lesen oder Entschlüsseln von Metadaten. - - Failed to upload metadata - Fehler beim Hochladen der Metadaten + + Failed to upload metadata + Fehler beim Hochladen der Metadaten - - + + OCC::FileDetails - - %1 second(s) ago - seconds elapsed since file last modified - Vor %1 SekundeVor %1 Sekunden + + %1 day(s) ago + + + + vor %1 Tag(e) + - - %1 minute(s) ago - minutes elapsed since file last modified - Vor %1 MinuteVor %1 Minuten + + %1 hour(s) ago + + + + vor %1 Stunde(n) + - - %1 hour(s) ago - hours elapsed since file last modified - Vor %1 StundeVor %1 Stunden + + %1 minute(s) ago + + + + vor %1 Minute(n) + - - %1 day(s) ago - days elapsed since file last modified - Vor %1 TagVor %1 Tagen + + %1 month(s) ago + + + + vor %1 Monat(en) + - - %1 month(s) ago - months elapsed since file last modified - Vor %1 MonatVor %1 Monaten + + %1 second(s) ago + + + + vor %1 Sekunde(n) + - - %1 year(s) ago - years elapsed since file last modified - Vor %1 JahrVor %1 Jahren + + %1 year(s) ago + + + + vor %1 Jahr(en) + - - 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 - - - + + Locked by %1 - Expires in %2 minute(s) + + + + Gesperrt durch %1 - Läuft in %2 Minute(n) ab + + + + OCC::Flow2Auth - - 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 Ihren Administrator. + + 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> + + Error returned from the server: <em>%1</em> + Vom Server zurückgegebener Fehler: <em>%1</em> - - - There was an error accessing the "token" endpoint: <br><em>%1</em> - Fehler beim Zugriff auf den "Token"-Endpunkt: <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. + 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 Ihren Administrator. - - - 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 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 - 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 Ihren 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. - 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 Ihren 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. - Der Browser kann nicht geöffnet werden. Bitte kopieren Sie den Link in Ihren Browser. + + There was an error accessing the "token" endpoint: <br><em>%1</em> + Fehler beim Zugriff auf den "Token"-Endpunkt: <br><em>%1</em> + + + OCC::Flow2AuthCredsPage - - Waiting for authorization - Warte auf Autorisierung + + Login in your browser (Login Flow v2) + + + + OCC::Flow2AuthWidget - - Polling for authorization - Abruf der Autorisierung + + Copy Link + Link kopieren - - Starting authorization - Starte Autorisierung + + Link copied to clipboard. + Link in die Zwischenablage kopiert. - - Link copied to clipboard. - Link in die Zwischenablage kopiert. + + Open Browser + Im Browser öffnen - - Reopen Browser - Browser erneut öffnen + + Polling for authorization + Abruf der Autorisierung @@ -2112,23 +2232,20 @@ Dies kann ein Problem mit Ihren OpenSSL-Bibliotheken sein. Copy Link Link kopieren - - - OCC::Folder - - Local folder %1 does not exist. - Lokaler Ordner %1 existiert nicht. + + Starting authorization + Starte Autorisierung - - %1 should be a folder but is not. - %1 sollte ein Ordner sein, ist es aber nicht. + + 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. - - %1 is not readable. - %1 ist nicht lesbar. + + Waiting for authorization + Warte auf Autorisierung @@ -2146,152 +2263,257 @@ Dies kann ein Problem mit Ihren OpenSSL-Bibliotheken sein. Bitte wählen Sie einen anderen Speicherort. %1 ist kein lesbarer Ordner. - - %1 and %n other file(s) have been removed. - %1 und %n andere Datei wurde gelöscht.%1 und %n andere Dateien wurden gelöscht. + + %1 and %n other file(s) are currently locked. + + + + + - - - %1 has been removed. - %1 names a file. - %1 wurde gelöscht. + + + %1 and %n other file(s) could not be synced due to errors. See the log for details. + + + + + - - %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 added. + + + + + - - - %1 has been added. - %1 names a file. - %1 wurde hinzugefügt. + + + %1 and %n other file(s) have been downloaded. + + + + + + + + + %1 and %n other file(s) have been removed. + + + + + - - %1 and %n other file(s) have been updated. - %1 und %n andere Datei wurde aktualisiert.%1 und %n andere Dateien wurden aktualisiert. + + %1 and %n other file(s) have been updated. + + + + + + + + + %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 been updated. - %1 names a file. - %1 wurde aktualisiert. + + %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 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 has and %n other file(s) have sync conflicts. + + + + + + + + + %1 has been added. + %1 wurde hinzugefügt. - - %1 has been renamed to %2. - %1 and %2 name files. - %1 wurde in %2 umbenannt. + + %1 has been downloaded. + - - %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 been moved to %2 and %n other file(s) have been moved. + + + + + + + + + %1 has been moved to %2. + %1 wurde in %2 verschoben. - - %1 has been moved to %2. - %1 wurde in %2 verschoben. + + %1 has been removed. + %1 wurde gelöscht. - - %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 been renamed to %2 and %n other file(s) have been renamed. + + + + + - - %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 been renamed to %2. + %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 updated. + %1 wurde aktualisiert. - - %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 is currently locked. + %1 ist aktuell gesperrt. - - - %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 is not readable. + %1 ist nicht lesbar. - - %1 is currently locked. - %1 ist aktuell gesperrt. + + %1 should be a folder but is not. + %1 sollte ein Ordner sein, ist es aber nicht. - - Sync Activity - Synchronisierungsaktivität + + A folder from an external storage has been added. + Ein Ordner von einem externen Speicher wurde hinzugefügt. - - Could not read system exclude file - Systemeigene Ausschlussdatei kann nicht gelesen werden + + 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 new folder larger than %1 MB has been added: %2. - - Ein neuer Ordner größer als %1 MB wurde hinzugefügt: %2. - + + 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 folder from an external storage has been added. - - Ein Ordner von einem externen Speicher wurde hinzugefügt. - + + 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. + Ein neuer Ordner größer als %1 MB wurde hinzugefügt: %2. + + + + All files got deleted from your local sync folder '%1'. +These files will be deleted from the server and will not be available on your other devices if they will not be restored. +If this action was unintended you can restore the lost data now. + + + + All files in the local folder "%1" were deleted. + +If you restore the files, they will be downloaded again from the server. + Alle Dateien im lokalen Ordner "%1" wurden gelöscht. + +Wenn Sie die Dateien wiederherstellen, werden sie erneut vom Server heruntergeladen. + + + All files in the server folder "%1" were deleted. + +If you restore the files, they will be uploaded again to the server. + Alle Dateien im Serverordner "%1" wurden gelöscht. + +Wenn Sie die Dateien wiederherstellen, werden sie erneut auf den Server hochgeladen. + + + + All files in the sync folder '%1' were deleted on the server. +These deletes will be synchronized to your local sync folder, making such files unavailable unless you have a right to restore. +If you decide to restore the files, they will be re-synced with the server if you have rights to do so. +If you decide to delete the files, they will be unavailable to you, unless you are the owner. + - - 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. + All files in the sync folder "%1" folder were deleted on the server. +These deletes will be synchronized to your local sync folder, making such files unavailable unless you have a right to restore. +If you decide to restore the files, they will be re-synced with the server if you have rights to do so. +If you decide to delete the files, they will be unavailable to you, unless you are the owner. + Alle Dateien im Synchronisationsordner "%1" wurden auf dem Server gelöscht. +Diese Löschungen werden mit Ihrem lokalen Synchronisationsordner synchronisiert, so dass diese Dateien nicht mehr verfügbar sind, es sei denn, Sie haben das Recht, sie wiederherzustellen. +Wenn Sie sich entscheiden, die Dateien wiederherzustellen, werden sie erneut mit dem Server synchronisiert, sofern Sie dazu berechtigt sind. +Wenn Sie sich entscheiden, die Dateien zu löschen, sind sie für Sie nicht mehr verfügbar, es sei denn, Sie sind der Eigentümer. - - All files in the sync folder "%1" folder were deleted on the server. + All files in the sync folder "%1" folder were deleted on the server. These deletes will be synchronized to your local sync folder, making such files unavailable unless you have a right to restore. If you decide to restore the files, they will be re-synced with the server if you have rights to do so. If you decide to delete the files, they will be unavailable to you, unless you are the owner. - Alle Dateien im Sync-Ordner "%1" wurden auf dem Server gelöscht. -Diese Löschungen werden mit Ihrem lokalen Sync-Ordner synchronisiert, wodurch diese Dateien nicht verfügbar sind, es sei denn, Sie haben das Recht, sie wiederherzustellen. -Wenn Sie sich entscheiden, die Dateien wiederherzustellen, werden sie erneut mit dem Server synchronisiert, wenn Sie das Recht dazu haben. + Alle Dateien im Synchronisationsordner "%1" wurden auf dem Server gelöscht. +Diese Löschungen werden mit Ihrem lokalen Synchronisationsordner synchronisiert, so dass diese Dateien nicht mehr verfügbar sind, es sei denn, Sie haben das Recht, sie wiederherzustellen. +Wenn Sie sich entscheiden, die Dateien wiederherzustellen, werden sie erneut mit dem Server synchronisiert, sofern Sie dazu berechtigt sind. Wenn Sie sich entscheiden, die Dateien zu löschen, sind sie für Sie nicht mehr verfügbar, es sei denn, Sie sind der Eigentümer. - - All the files in your local sync folder "%1" were deleted. These deletes will be synchronized with your server, making such files unavailable unless restored. + All the files in your local sync folder "%1" were deleted. These deletes will be synchronized with your server, making such files unavailable unless restored. Are you sure you want to sync those actions with the server? If this was an accident and you decide to keep your files, they will be re-synced from the server. - Alle Dateien im lokalen Synchronisierungs-Ordner "%1" wurden gelöscht. Diese Löschung wird mit Ihrem Server synchronisiert, wodurch die Dateien nicht mehr verfügbar sind, es sei denn, diese werden wiederhergestellt. + Alle Dateien im lokalen Synchronisierungs-Ordner "%1" wurden gelöscht. Diese Löschung wird mit Ihrem Server synchronisiert, wodurch die Dateien nicht mehr verfügbar sind, es sei denn, diese werden wiederhergestellt. Sind Sie sich sicher, dass Sie diese Aktion mit Ihrem Server synchronisieren möchten? Falls dies ein Missgeschick war und Sie sich zum Behalten der Dateien entscheiden, werden diese wieder vom Server synchronisiert. - - Remove All Files? - Alle Dateien entfernen? + + Backup detected + - - Remove all files - Alle Dateien entfernen + + 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). + +%1 + Änderungen in synchronisierten Ordnern konnten nicht zuverlässig nachverfolgt werden. + +Dies bedeutet, dass der Synchronisierungs-Client lokale Änderungen möglicherweise nicht sofort hochlädt, sondern nur nach lokalen Änderungen sucht und diese gelegentlich hochlädt (standardmäßig alle zwei Stunden). + +%1 - - Keep files - Dateien behalten + + Could not read system exclude file + Systemeigene Ausschlussdatei kann nicht gelesen werden @@ -2321,27 +2543,19 @@ Falls dies ein Missgeschick war und Sie sich zum Behalten der Dateien entscheide 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. + + Local folder %1 does not exist. + Lokaler Ordner %1 existiert nicht. - - 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. + + Normal Synchronisation + - - 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). - -%1 - Änderungen in synchronisierten Ordnern konnten nicht zuverlässig nachverfolgt werden. - -Dies bedeutet, dass der Synchronisierungs-Client lokale Änderungen möglicherweise nicht sofort hochlädt, sondern nur nach lokalen Änderungen sucht und diese gelegentlich hochlädt (standardmäßig alle zwei Stunden). - -%1 + + 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. @@ -2386,71 +2600,70 @@ Alternativ können Sie auch alle gelöschten Dateien wiederherstellen, indem Sie Restore Files from Server Dateien vom Server wiederherstellen - - - OCC::FolderCreationDialog - - Create new folder - Neuen Ordner erstellen + + Restore Files from Server + Dateien vom Server wiederherstellen - - Enter folder name - Ordnernamen eingeben + + Restore Files to Server + Dateien auf dem Server wiederherstellen - - Folder already exists - Ordner existiert bereits + + Stop syncing + Synchronisation stoppen - - Error - Fehler + + Sync Activity + Synchronisierungsaktivität - - Could not create a folder! Check your write permissions. - Ordner konnte nicht erstellt werden! Prüfen Sie die Schreibberechtigungen. + + 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. - - - OCC::FolderMan - - Could not reset folder state - Konnte Ordner-Zustand nicht zurücksetzen + + 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. - - 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. + + 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. - - (backup) - (Sicherung) + + This sync would reset the files to an earlier time in the sync folder '%1'. +This might be because a backup was restored on the server. +Continuing the sync as normal will cause all your files to be overwritten by an older file in an earlier state. Do you want to keep your local most recent files as conflict files? + - - (backup %1) - (Sicherung %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. - - Undefined state. - Undefinierter Zustand. + + Would you like to stop syncing this folder? + Möchten Sie die Synchronisierung dieses Ordners stoppen? + + + OCC::FolderCreationDialog - - Waiting to start syncing. - Wartet auf Beginn der Synchronisierung. + + %1 Create new folder + %1 Neuen Ordner erstellen - - Preparing for sync. - Synchronisierung wird vorbereitet. + + Could not create a folder! Check your write permissions. + Ordner konnte nicht erstellt werden! Prüfen Sie die Schreibberechtigungen. @@ -2462,6 +2675,9 @@ Alternativ können Sie auch alle gelöschten Dateien wiederherstellen, indem Sie Syncing %1 of %2 (%3 left) Synchronisiere %1 von %2 (%3 übrig) + + + OCC::FolderMan Syncing %1 of %2 @@ -2483,44 +2699,44 @@ Alternativ können Sie auch alle gelöschten Dateien wiederherstellen, indem Sie Synchronisiere %1 - - Sync is running. - Synchronisierung läuft. + + 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. - - Sync finished with unresolved conflicts. - Synchronisierung mit ungelösten Konflikten beendet. + + Could not reset folder state + Konnte Ordner-Zustand nicht zurücksetzen - - Last sync was successful. - Die letzte Synchronisierung war erfolgreich. + + Last sync was successful. + Die letzte Synchronisierung war erfolgreich. - - Setup error. - Einrichtungsfehler. + + No valid folder selected! + Kein gültiger Ordner gewählt! - - Sync request was cancelled. - Synchronisierungsanfrage wurde abgebrochen. + + Preparing for sync. + Synchronisierung wird vorbereitet. - - Sync is paused. - Synchronisierung ist pausiert. + + Setup error. + Einrichtungsfehler. - - %1 (Sync is paused) - %1 (Synchronisierung ist pausiert) + + Sync finished with unresolved conflicts. + Synchronisierung mit ungelösten Konflikten beendet. - - No valid folder selected! - Kein gültiger Ordner gewählt! + + Sync is paused. + Synchronisierung ist pausiert. @@ -2528,9 +2744,9 @@ Alternativ können Sie auch alle gelöschten Dateien wiederherstellen, indem Sie Der gewählte Pfad existiert nicht! - - The selected path is not a folder! - Der gewählte Pfad ist kein Ordner! + + Sync was successful, unresolved conflicts. + @@ -2597,107 +2813,105 @@ Alternativ können Sie auch alle gelöschten Dateien wiederherstellen, indem Sie 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. - Der Ordner %1 ist mit mehreren Konten verknüpft. + Der Ordner %1 ist mit mehreren Konten verknüpft. Diese Konfiguration kann zu Datenverlust führen und wird nicht mehr unterstützt. So beheben Sie dieses Problem: Entfernen Sie %1 von einem der Konten und erstellen Sie einen neuen Synchronisierungsordner. 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. - - - OCC::FolderStatusDelegate - - Add Folder Sync Connection - Ordner-Synchronisierung hinzufügen + + The folder %1 is used in a folder sync connection! + Der Ordner %1 wird in einer Ordner-Synchronisationsverbindung verwendet! - - File - Datei + + The local folder %1 already contains a folder used in a folder sync connection. Please pick another one! + Der lokale Ordner %1 liegt innerhalb eines synchronisierten Ordners. Bitte wählen Sie einen anderen aus! - - - OCC::FolderStatusModel - - You need to be connected to add a folder - Sie müssen verbunden sein, um einen Ordner hinzuzufügen + + The local folder %1 is already contained in a folder used in a folder sync connection. Please pick another one! + Der lokale Ordner %1 liegt in einem Ordner, der bereits synchronisiert wird. Bitte wählen Sie einen anderen aus! - - Click this button to add a folder to synchronize. - Wählen Sie diese Schaltfläche, um einen zu synchronisierenden Ordner hinzuzufügen. + + The selected path does not exist! + Der gewählte Pfad existiert nicht! - - Could not decrypt! - Konnte nicht entschlüsseln! + + The selected path is not a folder! + Der gewählte Pfad ist kein Ordner! - - - %1 (%2) - %1 (%2) + + There is already a sync from the server to this local folder. Please pick another local folder! + Es existiert bereits eine Synchronisierung vom Server zu diesem lokalen Ordner. Bitte wählen Sie einen anderen lokalen Ordner! - - Error while loading the list of folders from the server. - Fehler beim Empfang der Ordnerliste vom Server. + + Undefined state. + Undefinierter Zustand. - - Fetching folder list from server … - Rufe Ordnerliste vom Server ab … + + User Abort. + - - There are unresolved conflicts. Click for details. - Es existieren ungelöste Konflikte. Für Details klicken. + + Waiting to start syncing. + Wartet auf Beginn der Synchronisierung. - - Virtual file support is enabled. - Unterstützung für virtuelle Dateien ist aktiviert. + + You have no permission to write to the selected folder! + Sie haben keine Schreibberechtigung für den ausgewählten Ordner! + + + OCC::FolderStatusDelegate - - Signed out - Abgemeldet + Add Folder Sync Connection + Ordner-Synchronisierung hinzufügen - - Synchronizing VirtualFiles with local folder - Synchronisiere VirtualFiles mit lokalem Ordner + + Add live backup + Ordner-Synchronisierung hinzufügen - - Synchronizing with local folder - Synchronisiere mit lokalem Ordner + + File + Datei - - Synchronizing virtual files in local folder - Virtuelle Dateien im lokalen Ordner synchronisieren + + Synchronize any other local folder with your %1 + Synchronisieren Sie jeden anderen lokalen Ordner mit Ihrem %1 - - Synchronizing files in local folder - Dateien im lokalen Ordner synchronisieren + + Synchronized with local folder (%1) + + + + OCC::FolderStatusModel - - Checking for changes in remote "%1" - Nach Änderungen in entfernten "%1" suchen + + , + , - - Checking for changes in local "%1" - Nach Änderungen in lokalem "%1" suchen + + , '%1' + - - Reconciling changes - Änderungen zusammenführen + + '%1' + @@ -2711,16 +2925,14 @@ Für fortgeschrittene Benutzer: Dieses Problem kann damit zusammenhängen, dass %1 %2 … - - Syncing %1 - Example text: "Syncing 'foo.txt', 'bar.txt'" - Synchronisiere %1 + + %1 %2 … + %1 %2 … - - - , - , + + %1 %2 (%3 of %4) + %1 %2 (%3 von %4) @@ -2729,15 +2941,14 @@ Für fortgeschrittene Benutzer: Dieses Problem kann damit zusammenhängen, dass %1/s herunterladen - - download %1/s - Example text: "download 24Kb/s" (%1 is replaced by 24Kb (translated)) - Download %1/s + + %5 left, %1 of %2, file %3 of %4 + %5 übrig, %1 von %2, Datei %3 von %4 - - ↓ %1/s - ↓ %1/s + + ↑ %1/s + ↑ %1/s @@ -2746,49 +2957,44 @@ Für fortgeschrittene Benutzer: Dieses Problem kann damit zusammenhängen, dass %1/s hochladen - - upload %1/s - Example text: "upload 24Kb/s" (%1 is replaced by 24Kb (translated)) - Upload %1/s + + A few seconds left, %1 of %2, file %3 of %4 + Noch ein paar Sekunden, %1 von %2, Datei %3 von %4 - - ↑ %1/s - ↑ %1/s + + About to start syncing + Die Synchronisierung beginnt - - %1 %2 (%3 of %4) - Example text: "uploading foobar.png (2MB of 2MB)" - %1 %2 (%3 von %4) + + Checking for changes in local '%1' + - - %1 %2 - Example text: "uploading foobar.png" - %1 %2 + + Checking for changes in local "%1" + Nach Änderungen in lokalem "%1" suchen - - 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' + - - %5 left, %1 of %2, file %3 of %4 - %5 übrig, %1 von %2, Datei %3 von %4 + + Checking for changes in remote "%1" + Nach Änderungen in entfernten "%1" suchen - - %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 + + Click this button to add a folder to synchronize. + Wählen Sie diese Schaltfläche, um einen zu synchronisierenden Ordner hinzuzufügen. - - file %1 of %2 - Datei %1 von %2 + + Could not decrypt! + Konnte nicht entschlüsseln! @@ -2800,105 +3006,85 @@ Für fortgeschrittene Benutzer: Dieses Problem kann damit zusammenhängen, dass About to start syncing Die Synchronisierung beginnt - - - Waiting for %n other folder(s) … - Warte auf %n anderen Ordner …Warte auf %n andere Ordner … - - - Waiting … - Warte … + + Error while loading the list of folders from the server. + Fehler beim Empfang der Ordnerliste vom Server. - - Preparing to sync … - Synchronisierung wird vorbereitet … + + Fetching folder list from server … + Rufe Ordnerliste vom Server ab … - - - OCC::FolderWatcher - - The watcher did not receive a test notification. - Der Beobachter hat keine Testbenachrichtigung erhalten. + + file %1 of %2 + Datei %1 von %2 - - - 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. + + File %1 of %2 + Datei %1 von %2 - - - OCC::FolderWizard - - Add Folder Sync Connection - Ordner-Synchronisierung hinzufügen + + Preparing to sync … + Synchronisierung wird vorbereitet … - - Add Sync Connection - Synchronisierung hinzufügen + + Reconciling changes + Änderungen zusammenführen - - - OCC::FolderWizardLocalPath - - Click to select a local folder to sync. - Hier klicken um einen lokalen Ordner zum Synchronisieren auszuwählen. + + Synchronizing files in local folder + Dateien im lokalen Ordner synchronisieren - - Enter the path to the local folder. - Pfad zum lokalen Ordner eingeben + + Synchronizing virtual files in local folder + Virtuelle Dateien im lokalen Ordner synchronisieren - - Select the source folder - Quellordner auswählen + + Synchronizing VirtualFiles with local folder + Synchronisiere VirtualFiles mit lokalem Ordner - - - OCC::FolderWizardRemotePath - - Create Remote Folder - Entfernten Ordner erstellen + + Synchronizing with local folder + Synchronisiere mit lokalem Ordner - - Enter the name of the new folder to be created below "%1": - Geben Sie den Namen des neuen, unter "%1" zu erstellenden Ordners ein: + + Syncing local and remote changes + Synchronisieren von lokalen und Remote-Änderungen - - Folder was successfully created on %1. - Ordner auf %1 erstellt. + + There are unresolved conflicts. Click for details. + Es existieren ungelöste Konflikte. Für Details klicken. - - Authentication failed accessing %1 - Beim Zugriff auf %1 ist die Authentifizierung fehlgeschlagen + + upload %1/s + Upload %1/s - - Failed to create the folder on %1. Please check manually. - Die Erstellung des Ordners auf %1 ist fehlgeschlagen. Bitte prüfen Sie dies manuell. + + Upload %1/s + %1/s hochladen - - Failed to list a folder. Error: %1 - Konnte Ordner nicht listen. Fehler: %1 + + Virtual file support is enabled. + Unterstützung für virtuelle Dateien ist aktiviert. - - Choose this to sync the entire account - Wählen Sie dies, um das gesamte Konto zu synchronisieren + + Waiting … + Warte … @@ -2913,39 +3099,46 @@ Für fortgeschrittene Benutzer: Dieses Problem kann damit zusammenhängen, dass Dieser Ordner wird bereits synchronisiert. - - You are already syncing <i>%1</i>, which is a parent folder of <i>%2</i>. - Sie synchronisieren bereits <i>%1</i>, der ein übergeordneter Ordner von <i>%2</i> ist. + + You need to be connected to add a folder + Sie müssen verbunden sein, um einen Ordner hinzuzufügen + + + OCC::FolderWatcher - - You are already syncing <i>%1</i>, which is a subfolder of <i>%2</i>. - Sie synchronisieren bereits <i>%1</i>, der ein Unterordner von <i>%2</i> ist. + + The watcher did not receive a test notification. + Der Beobachter hat keine Testbenachrichtigung erhalten. - - - OCC::FolderWizardSelectiveSync + + + OCC::FolderWatcherPrivate - - - Use virtual files instead of downloading content immediately %1 - Virtuelle Dateien verwenden, anstatt den Inhalt sofort herunterzuladen %1 + + 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. + + + OCC::FolderWizard - - - (experimental) - (experimentell) + + Add Sync Connection + Synchronisierung hinzufügen + + + OCC::FolderWizardLocalPath - - 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. + + Choose + Wählen Sie - - Virtual files are not available for the selected folder - Virtuelle Dateien sind für den ausgewählten Ordner nicht verfügbar + + Click to select a local folder to sync. + Hier klicken um einen lokalen Ordner zum Synchronisieren auszuwählen. @@ -2956,210 +3149,218 @@ 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 + + Authentication failed accessing %1 + Beim Zugriff auf %1 ist die Authentifizierung fehlgeschlagen - - 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. + + Choose this to sync the entire account + Wählen Sie dies, um das gesamte Konto zu synchronisieren - - We received an unexpected download Content-Length. - Wir haben eine unerwartete Download-Content-Länge erhalten. + + Create Remote Folder + Entfernten Ordner erstellen - - Server returned wrong content-range - Server hat falschen Bereich für den Inhalt zurückgegeben + + Enter the name of the new folder to be created below '%1': + - - Connection Timeout - Zeitüberschreitung der Verbindung + + 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::GeneralSettings - - General Settings - Allgemeine Einstellungen + + Failed to create the folder on %1. Please check manually. + Die Erstellung des Ordners auf %1 ist fehlgeschlagen. Bitte prüfen Sie dies manuell. - - - About - Über + + Failed to list a folder. Error: %1 + Konnte Ordner nicht listen. Fehler: %1 - - &Launch on System Startup - Beim &Systemstart starten + + Folder was successfully created on %1. + Ordner auf %1 erstellt. - - Show Call Notifications - Anrufbenachrichtigungen anzeigen + + This folder is already being synced. + Dieser Ordner wird bereits synchronisiert. - - For System Tray - Für das Systembenachrichtungsfeld + + You are already syncing <i>%1</i>, which is a parent folder of <i>%2</i>. + Sie synchronisieren bereits <i>%1</i>, der ein übergeordneter Ordner von <i>%2</i> ist. - - Legal notice - Impressum + + You are already syncing <i>%1</i>, which is a subfolder of <i>%2</i>. + Sie synchronisieren bereits <i>%1</i>, der ein Unterordner von <i>%2</i> ist. + + + OCC::FolderWizardSelectiveSync - - Use &Monochrome Icons - &Monochrome Symbole verwenden + + Use virtual files instead of downloading content immediately %1 + Virtuelle Dateien verwenden, anstatt den Inhalt sofort herunterzuladen %1 - - Show Chat Notifications - Chatbenachrichtigungen anzeigen + + Virtual files are not available for the selected folder + Virtuelle Dateien sind für den ausgewählten Ordner nicht verfügbar Show Server &Notifications Server&benachrichtigungen anzeigen + + + OCC::FormatWarningsWizardPage - - Advanced - Erweitert + <b>Warning:</b> + <b>Warnung:</b> - - Ask for confirmation before synchronizing new folders larger than - Um eine Bestätigung bitten, bevor Sie neue Ordner synchronisieren, die größer sind als + <b>Warning:</b> %1 + <b>Warnung:</b> %1 + + + OCC::GETFileJob - - Updates - Aktualisierungen + + Connection Timeout + Zeitüberschreitung der Verbindung - - &Automatically check for Updates - &Automatisch auf Aktualisierungen prüfen + + No E-Tag received from server, check Proxy/Gateway + Kein E-Tag vom Server empfangen, bitte Proxy/Gateway überprüfen - - MB - Trailing part of "Ask confirmation before syncing folder larger than" - MB + + Server returned wrong content-range + Server hat falschen Bereich für den Inhalt zurückgegeben - - &Channel - &Kanal + + 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. - - Notify when synchronised folders grow larger than specified limit - Benachrichtigen, wenn synchronisierte Ordner größer werden als die angegebene Grenze + + We received an unexpected download Content-Length. + Wir haben eine unerwartete Download-Content-Länge erhalten. + + + OCC::GeneralSettings - - Automatically disable synchronisation of folders that overcome limit - Automatisch die Synchronisierung von Ordnern beenden, die das Limit überschreiten + + - 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. + - 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. - - Ask for confirmation before synchronizing external storages - Bestätigung erfragen, bevor externe Speicher synchronisiert werden + + - enterprise: contains stable versions for customers. + +Downgrading versions is not possible immediately: changing from stable to enterprise means waiting for the new enterprise version. + - 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. - - Move removed files to trash - Gelöschte Dateien in den Papierkorb verschieben + + &Analysis data collection for needs-based design + &Analyse der Datenerhebung für bedarfsgerechte Gestaltung - - &Check for Update now - &Jetzt auf Aktualisierungen prüfen + &Automatically check for Updates + &Automatisch auf Aktualisierungen prüfen - - Show sync folders in &Explorer's navigation pane - Synchronisierungsordner im Navigationsbereich des &Explorers anzeigen + + &Automatically check for updates + &Automatisch auf Aktualisierungen prüfen - - S&how crash reporter - &Crash-Reporter anzeigen + &Channel + &Kanal - - Ask for confirmation before synchronizing folders larger than - Bestätigung erfragen, bevor Ordner synchronisiert werden, die größer sind als + &Check for Update now + &Jetzt auf Aktualisierungen prüfen - - Edit &Ignored Files - I&gnorierte Dateien bearbeiten + &Launch on System Startup + Beim &Systemstart starten - - - Create Debug Archive - Debug-Archiv erstellen + + &Restart && Update + &Neustarten && aktualisieren - - Info - Info + About + Über - - Desktop client x.x.x - Desktop-Client x.x.x + + Ask for confirmation before + synchronizing new folders larger than + Fragen Sie nach einer Bestätigung, bevor Sie neue Ordner synchronisieren, die größer sind als - - Show sync folders in &Explorer's Navigation Pane - Synchronisierungsordner im Navigationsbereich des &Explorers anzeigen + + Ask for confirmation before synchronizing + external storages + Vor der Synchronisierung externer Speicher nach einer Bestätigung fragen - - Update channel - Update-Kanal + Ask for confirmation before synchronizing external storages + Bestätigung erfragen, bevor externe Speicher synchronisiert werden - - &Restart && Update - &Neustarten && aktualisieren + Ask for confirmation before synchronizing folders larger than + Bestätigung erfragen, bevor Ordner synchronisiert werden. Grenze: - - &Automatically check for updates - &Automatisch auf Aktualisierungen prüfen + Ask for confirmation before synchronizing new folders larger than + Um eine Bestätigung bitten, bevor Sie neue Ordner synchronisieren, die größer sind als - - Check Now - Jetzt prüfen + + Automatically disable synchronisation of + folders that overcome limit + Automatisches Deaktivieren der Synchronisierung von Ordnern, die das Limit überschreiten - - Usage Documentation - Nutzungsdokumentation + Automatically disable synchronisation of folders that overcome limit + Automatisch die Synchronisierung von Ordnern beenden, die das Limit überschreiten - - Legal Notice - Impressum + + beta + Beta - - Server notifications that require attention. - Server-Benachrichtigungen, die Aufmerksamkeit erfordern. + + Change update channel + Update-Kanal ändern @@ -3167,40 +3368,34 @@ Für fortgeschrittene Benutzer: Dieses Problem kann damit zusammenhängen, dass Dialog zu Chatbenachrichtigungen anzeigen - - Show call notification dialogs. - Dialog zu Anrufbenachrichtigungen anzeigen + + Changing update channel? + Update-Kanal ändern? - - You cannot disable autostart because system-wide autostart is enabled. - Sie können den Autostart nicht deaktivieren, da der systemweite Autostart aktiviert ist. + + Check Now + Jetzt prüfen - - - stable - Stabil + + Create Debug Archive + Debug-Archiv erstellen - - - beta - Beta + + daily + Täglich - - Change update channel? - Update-Kanal ändern? + + Data Protection + Datenschutzbestimmungen - - The update channel determines which client updates will be offered for installation. The "stable" channel contains only upgrades that are considered reliable, while the versions in the "beta" channel may contain newer features and bugfixes, but have not yet been tested thoroughly. - -Note that this selects only what pool upgrades are taken from, and that there are no downgrades: So going back from the beta channel to the stable channel usually cannot be done immediately and means waiting for a stable version that is newer than the currently installed beta version. - Der Update-Kanal bestimmt, welche Client-Updates zur Installation angeboten werden. Der "stabile" Kanal enthält nur Upgrades, die als zuverlässig gelten, während die Versionen im "Beta" -Kanal unter Umständen neuere Funktionen und Bugfixes enthalten, die jedoch noch nicht gründlich getestet wurden. - -Beachten Sie bitte, dass hierdurch nur ausgewählt wird, aus welchem Pool Upgrades heruntergeladen werden und dass Downgrades nicht möglich sind. Die Rückkehr vom Beta- zum stabilen Kanal kann daher zumeist nicht sofort erfolgen, sondern es muss auf eine neue stabile Version gewartet werden, die neuer als die aktuell installierte Beta ist. + + Debug Archive Created + Debug-Archiv erstellt @@ -3249,207 +3444,188 @@ 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 + Info + Info - - Zip Archives - Zip-Archive + Legal notice + Impressum - - Debug Archive Created - Debug-Archiv erstellt + + Legal Notice + Impressum - - Debug archive is created at %1 - Debug-Archiv erstellt in %1 + MB + MB - - - OCC::GetOrCreatePublicLinkShare - - Password for share required - Passwort für die Freigabe erforderlich + + More Information + Mehr Informationen - - Please enter a password for your link share: - Bitte Passwort für die Link-Freigabe eingeben: + + Move removed files to trash + Gelöschte Dateien in den Papierkorb verschieben - - Sharing error - Fehler beim Teilen + + Notify when synchronised folders grow + larger than specified limit + Benachrichtigung, wenn synchronisierte Ordner größer als die angegebene Grenze werden. - - Could not retrieve or create the public link share. Error: - -%1 - Der Link für das öffentliche Teilen konnte nicht erstellt oder empfangen werden. Fehler: - -%1 + Notify when synchronised folders grow larger than specified limit + Benachrichtigen, wenn synchronisierte Ordner größer werden als die angegebene Grenze - - - 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 + + Open Source Software + Open-Source-Software - - Reading from keychain failed with error: "%1" - Lesen vom Schlüsselbund fehlgeschlagen mit Fehler: "%1" + + Privacy Policy + Datenschutzerklärung - - Enter Password - Passwort eingeben + + S&how crash reporter + &Crash-Reporter anzeigen - - <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. + + Server notifications that require attention. + Server-Benachrichtigungen, die Aufmerksamkeit erfordern. - - - OCC::IgnoreListEditor - - Ignored Files Editor - Editor für ignorierte Dateien + + Show call notification dialogs. + Dialog zu Anrufbenachrichtigungen anzeigen - - Global Ignore Settings - Globale Ignorier-Einstellungen + Show Call Notifications + Anrufbenachrichtigungen anzeigen - - Sync hidden files - Synchronisiere versteckte Dateien + + Show chat notification dialogs. + Dialog zu Chatbenachrichtigungen anzeigen - - Files Ignored by Patterns - Nach Muster ignorierte Dateien + + Show Chat Notifications + Chatbenachrichtigungen anzeigen - - 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. + Show Server &Notifications + Server-&Benachrichtigungen anzeigen - - - OCC::IgnoreListTableWidget - - Pattern - Muster + + Show sync folders in &Explorer's navigation + pane + Sync-Ordner im Navigationsbereich von &Explorer anzeigen - - Allow Deletion - Löschen erlauben + Show sync folders in &Explorer's navigation pane + Synchronisierungsordner im Navigationsbereich des &Explorers anzeigen - - Add - Hinzufügen + Show sync folders in &Explorer's Navigation Pane + Synchronisierungsordner im Navigationsbereich des &Explorers anzeigen - - Remove - Entfernen + + stable + Stabil - - Remove all - Alle entfernen + + The channel determines which upgrades will be offered to install: +- stable: contains tested versions considered reliable + Der Kanal bestimmt, welche Aktualisierungen zur Installation angeboten werden: +- Stabil: enthält getestete Versionen, die als zuverlässig gelten - - Files or folders matching a pattern will not be synchronized. + + The update channel determines which client updates will be offered for installation. The "stable" channel contains only upgrades that are considered reliable, while the versions in the "beta" channel may contain newer features and bugfixes, but have not yet been tested thoroughly. -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. +Note that this selects only what pool upgrades are taken from, and that there are no downgrades: So going back from the beta channel to the stable channel usually cannot be done immediately and means waiting for a stable version that is newer than the currently installed beta version. + Der Update-Kanal bestimmt, welche Client-Updates zur Installation angeboten werden. Der "stabile" Kanal enthält nur Upgrades, die als zuverlässig gelten, während die Versionen im "Beta" -Kanal unter Umständen neuere Funktionen und Bugfixes enthalten, die jedoch noch nicht gründlich getestet wurden. -Objekte, bei denen Löschen erlaubt ist, werden gelöscht, wenn diese das Löschen eines Ordners verhindern würden. Dies ist für Metadaten nützlich. +Beachten Sie bitte, dass hierdurch nur ausgewählt wird, aus welchem Pool Upgrades heruntergeladen werden und dass Downgrades nicht möglich sind. Die Rückkehr vom Beta- zum stabilen Kanal kann daher zumeist nicht sofort erfolgen, sondern es muss auf eine neue stabile Version gewartet werden, die neuer als die aktuell installierte Beta ist. - - Could not open file - Datei konnte nicht geöffnet werden + + Update channel + Update-Kanal - - Cannot write changes to "%1". - Konnte Änderungen nicht in "%1" schreiben. + + Updates + Aktualisierungen - - Add Ignore Pattern - Ignoriermuster hinzufügen + + Usage Documentation + Nutzungsdokumentation - - Add a new ignore pattern: - Neues Ignoriermuster hinzufügen + Use &Monochrome Icons + &Monochrome Symbole verwenden - - - OCC::InvalidFilenameDialog - - Invalid filename - Ungültiger Dateiname + + You cannot disable autostart because system-wide autostart is enabled. + Sie können den Autostart nicht deaktivieren, da der systemweite Autostart aktiviert ist. - - 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. + + Zip Archives + Zip-Archive + + + OCC::GetOrCreatePublicLinkShare - - Error - Fehler + + Could not retrieve or create the public link share. Error: + +%1 + Der Link für das öffentliche Teilen konnte nicht erstellt oder empfangen werden. Fehler: + +%1 - - Please enter a new name for the file: - Bitte geben Sie einen neuen Namen für die Datei ein: + + Password for share required + Passwort für die Freigabe erforderlich - - New filename - Neuer Dateiname + + Please enter a password for your link share: + Bitte Passwort für die Link-Freigabe eingeben: - - Rename file - Datei umbenennen + + Sharing error + Fehler beim Teilen + + + OCC::HttpCredentialsGui - - 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. + + <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. - - The following characters are not allowed on the system: * " | & ? , ; : \ / ~ < > leading/trailing spaces - Die folgenden Zeichen sind auf dem System nicht erlaubt: * " | & ? , ; : \ / ~ < > Leerzeichen am Anfang/Ende + + Enter Password + Passwort eingeben @@ -3457,93 +3633,93 @@ Objekte, bei denen Löschen erlaubt ist, werden gelöscht, wenn diese das Lösch 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 + + Please enter %1 password:<br><br>Username: %2<br>Account: %3<br> + Bitte %1 Passwort:<br><br>Benutzername: %2<br>Konto: %3<br>eingeben - - The following basenames are not allowed: %1 - Die folgenden Basisnamen sind nicht erlaubt: %1 + + Reading from keychain failed with error: '%1' + - - The following filenames are not allowed: %1 - Die folgenden Dateinamen sind nicht erlaubt: %1 + + Reading from keychain failed with error: "%1" + Lesen vom Schlüsselbund fehlgeschlagen mit Fehler: "%1" + + + OCC::IgnoreListEditor - - The following file extensions are not allowed: %1 - Die folgenden Dateierweiterungen sind nicht erlaubt: %1 + + Files Ignored by Patterns + Nach Muster ignorierte Dateien - - Checking rename permissions … - Prüfe Umbenennungs-Rechte … + + Global Ignore Settings + Globale Ignorier-Einstellungen - - 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. + + Ignored Files Editor + Editor für ignorierte Dateien - - Failed to fetch permissions with error %1 - Konnte Rechte nicht abrufen. Fehler %1 + + Sync hidden files + Synchronisiere versteckte Dateien - - Filename contains leading and trailing spaces. - Dateiname enthält Leerzeichen am Anfang und am Ende. + + This entry is provided by the system at '%1' and cannot be modified in this view. + - - Filename contains leading spaces. - Dateiname enthält Leerzeichen am Anfang. + + 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 - - Filename contains trailing spaces. - Dateiname enthält Leerzeichen am Ende. + + Add + Hinzufügen - - Use invalid name - Ungültigen Namen verwenden + Add a new ignore pattern: + Neues Ignoriermuster hinzufügen - - Filename contains illegal characters: %1 - Dateiname enthält unzulässige Zeichen: %1 + Add Ignore Pattern + Ignoriermuster hinzufügen - - 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. + + Add New Ignore Pattern + Neues Ignorieren-Muster hinzufügen - - 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. + + Allow Deletion + Löschen erlauben - - Could not rename local file. %1 - Lokale Datei konnte nicht umbenannt werden. %1 + + Cannot write changes to '%1'. + - - - OCC::LegalNotice - - - Legal notice - Impressum + + Cannot write changes to "%1". + Konnte Änderungen nicht in "%1" schreiben. - - Close - Schliessen + + Could not open file + Datei konnte nicht geöffnet werden @@ -3556,381 +3732,376 @@ Objekte, bei denen Löschen erlaubt ist, werden gelöscht, wenn diese das Lösch <p>Copyright 2017-2023 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> + + Files or folders that match this pattern will not be synchronized. + +Objects that are allowed to be deleted will be deleted if they would prevent a folder from being deleted. This is useful for metadata. + 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. - - - OCC::LogBrowser - - Log Output - Protokoll-Ausgabe + + Ignore Pattern + Muster ignorieren - - 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 - Der Client kann Debug-Protokolle in einen temporären Ordner schreiben. Diese Protokolle sind sehr hilfreich bei der Diagnose von Problemen. -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. + + Pattern + Muster - - Enable logging to temporary folder - Protokollierung in temporären Ordner aktivieren + + Remove + Entfernen - - 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. + + Remove all + Alle entfernen + + + OCC::InvalidFilenameDialog - - Open folder - Ordner öffnen + + 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. - - - OCC::Logger - - Error - Fehler + + Checking rename permissions … + Prüfe Umbenennungs-Rechte … - - <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> + + Could not rename local file. %1 + Lokale Datei konnte nicht umbenannt werden. %1 - - - OCC::Mac::FileProviderEditLocallyJob - - Could not start editing locally. - Lokale Bearbeitung konnte nicht gestartet werden. + + Invalid filename + Ungültiger Dateiname - - An error occurred during setup. - Es ist ein Fehler während der Einrichtung aufgetreten. + + Please enter a new name for the file: + Bitte geben Sie einen neuen Namen für die Datei ein: - - 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. + + 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. - - Could not get file ID. - Datei-ID konnte nicht abgerufen werden. + + 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. - - Could not get file identifier. - Dateikennung konnte nicht abgerufen werden. + + 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 file identifier is empty. - Dateikennung ist leer + + The following basenames are not allowed: %1 + Die folgenden Basisnamen sind nicht erlaubt: %1 - - - OCC::NSISUpdater - - New Version Available - Eine neue Version ist verfügbar + + The following characters are not allowed on the system: * " | & ? , ; : \ / ~ < > leading/trailing spaces + Die folgenden Zeichen sind auf dem System nicht erlaubt: * " | & ? , ; : \ / ~ < > Leerzeichen am Anfang/Ende - - <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> + + The following characters are not allowed: %1 + Die folgenden Zeichen sind nicht erlaubt: %1 - - Skip this time - Dieses Mal überspringen + + The following file extensions are not allowed: %1 + Die folgenden Dateierweiterungen sind nicht erlaubt: %1 - - Get update - Aktualisierung durchführen + + The following filenames are not allowed: %1 + Die folgenden Dateinamen sind nicht erlaubt: %1 + + + OCC::LegalNotice - - Update Failed - Aktualisierung fehlgeschlagen + + <p>Copyright 2017-2020 Nextcloud GmbH<br />Copyright 2012-2018 ownCloud GmbH</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>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>Copyright 2017-2023 Nextcloud GmbH<br />Copyright 2012-2023 ownCloud GmbH</p> + <p>Copyright 2017-2023 Nextcloud GmbH<br />Copyright 2012-2023 ownCloud GmbH</p> - - Ask again later - Versuchen Sie es später erneut + + <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> - - Restart and update - Neu starten und aktualisieren + + Close + Schliessen + + + OCC::LogBrowser - - Update manually - Manuell aktualisieren + + &Capture debug messages + - - - OCC::NetworkSettings - - Proxy Settings - Proxy-Einstellungen + + &Find + - - No Proxy - Kein Proxy + + &Search: + - - Use system proxy - System-Proxy verwenden + + Clear + - - Specify proxy manually as - Proxy manuell definieren als + + Clear the log display. + - - Host - Host + + Could not write to log file %1 + - - Proxy server requires authentication - Proxy-Server erfordert eine Authentifizierung + + Enable logging to temporary folder + Protokollierung in temporären Ordner aktivieren - - Note: proxy settings have no effects for accounts on localhost - Hinweis: Proxy-Einstellungen haben keine Auswirkungen für Konten auf localhost + + Log Output + Protokoll-Ausgabe - - Manually specify proxy - Proxy manuell festlegen + + Permanently save logs + - - No proxy - Kein Proxy + + S&ave + - - - - Use global settings - Globale Einstellungen verwenden + + Save log file + - - Download Bandwidth - Download-Bandbreite + + Save the log file to a file on disk for debugging. + - - - No limit - Keine Begrenzung + + 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 + Der Client kann Debug-Protokolle in einen temporären Ordner schreiben. Diese Protokolle sind sehr hilfreich bei der Diagnose von Problemen. +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. - - - KBytes/s - KBytes/s + + 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. - - - Limit to - Begrenzen auf + + When this option is enabled and no other logging is configured, logs will be written to a temporary folder and expire after a few hours. This setting persists across client restarts. + +Logs will be written to %1 + + + + OCC::Logger - - - Limit to 3/4 of estimated bandwidth - Auf 3/4 der geschätzten Bandbreite begrenzen + + <nobr>File '%1'<br/>cannot be opened for writing.<br/><br/>The log output can <b>not</b> be saved!</nobr> + - - - Limit automatically - Automatisch begrenzen + + <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> + + + OCC::Mac::FileProviderEditLocallyJob - - Upload Bandwidth - Upload-Bandbreite + + 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. - - Hostname of proxy server - Hostname des Proxy-Servers + + Could not get file ID. + Datei-ID konnte nicht abgerufen werden. - - Username for proxy server - Benutzername für den Proxy-Server + + Could not get file identifier. + Dateikennung konnte nicht abgerufen werden. - - Password for proxy server - Passwort für den Proxy-Server + + The file identifier is empty. + Dateikennung ist leer + + + OCC::NSISUpdater - - HTTP(S) proxy - HTTP(S)-Proxy + + <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> - - SOCKS5 proxy - SOCKS5-Proxy + + <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> - - - OCC::OCUpdater - - New %1 update ready - Neue %1 Aktualisierung verfügbar + + Ask again later + Versuchen Sie es später erneut - - 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. + + Get update + Aktualisierung durchführen - - Downloading %1 … - Lade %1 herunter … + + New Version Available + Eine neue Version ist verfügbar - - Downloading %1. Please wait … - Lade %1 herunter. Bitte warten … + + Restart and update + Neustarten und aktualisieren - - %1 available. Restart application to start the update. - %1-Version verfügbar. Anwendung zum Start der Aktualisierung neustarten. + + Skip this time + Dieses Mal überspringen - - 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. + + Skip this version + - - 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. + + Update Failed + Aktualisierung fehlgeschlagen - - Could not check for new updates. - Auf neue Aktualisierungen kann nicht geprüft werden. + + Update manually + Manuell aktualisieren + + + OCC::NetworkSettings - - 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. + + Download Bandwidth + Download-Bandbreite - - Checking update server … - Aktualisierungsserver wird überprüft … + + Host + Host - - Update status is unknown: Did not check for new updates. - Aktualisierungsstatus unbekannt: Auf neue Aktualisierungen wurde nicht geprüft. + + Hostname of proxy server + Hostname des Proxy-Servers - - No updates available. Your installation is at the latest version. - Keine Aktualisierungen verfügbar. Ihre Installation ist die aktuelle Version. + + HTTP(S) proxy + HTTP(S)-Proxy - - Update Check - Aktualitätsprüfung + + KBytes/s + KBytes/s - - - OCC::OwncloudAdvancedSetupPage - - Connect - Verbinden + + Limit automatically + Automatisch begrenzen - - - Use &virtual files instead of downloading content immediately %1 - &Virtuelle Dateien verwenden, anstatt den Inhalt sofort herunterzuladen %1 + + Limit to + Begrenzen auf - - - (experimental) - (experimentell) + + Limit to 3/4 of estimated bandwidth + Auf 3/4 der geschätzten Bandbreite begrenzen - - 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. + + Manually specify proxy + Proxy manuell festlegen - - %1 folder "%2" is synced to local folder "%3" - %1 Ordner "%2" wird mit dem lokalen Ordner "%3" synchronisiert + + No limit + Keine Begrenzung - - Sync the folder "%1" - Ordner "%1" synchronisieren + No Proxy + Kein Proxy - - 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! + + No proxy + Kein Proxy - - %1 free space - %1 gets replaced with the size and a matching unit. Example: 3 MB or 5 GB - %1 freier Platz + + Note: proxy settings have no effects for accounts on localhost + Hinweis: Proxy-Einstellungen haben keine Auswirkungen für Konten auf localhost - - Virtual files are not available for the selected folder - Virtuelle Dateien sind für den ausgewählten Ordner nicht verfügbar + + Password for proxy server + Passwort für den Proxy-Server @@ -3943,353 +4114,328 @@ Beachten Sie, dass die Verwendung von Befehlszeilenoptionen für die Protokollie Lokaler Ordner für die Synchronisierung - - - (%1) - (%1) + + Proxy Settings + Proxy-Einstellungen - - There isn't enough free space in the local folder! - Nicht genug freier Platz im lokalen Ordner vorhanden! + + SOCKS5 proxy + SOCKS5-Proxy - - - OCC::OwncloudConnectionMethodDialog - - Connection failed - Verbindung fehlgeschlagen + Specify proxy manually as + Proxy manuell definieren als - - <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> + + Upload Bandwidth + Upload-Bandbreite - - Select a different URL - Andere URL wählen + + Use global settings + Globale Einstellungen verwenden - - Retry unencrypted over HTTP (insecure) - Unverschlüsselt über HTTP versuchen (unsicher) + + Use system proxy + System-Proxy verwenden - - Configure client-side TLS certificate - Clientseitiges TLS-Zertifikat konfigurieren. + + Username for proxy server + Benutzername für den Proxy-Server + + + OCC::OAuth - - <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> + <h1>Login Error</h1><p>%1</p> + <h1>Anmeldefehler </h1><p>%1</p> - - - OCC::OwncloudHttpCredsPage - - &Email - &E-Mail + <h1>Wrong account</h1><p>You logged in with the account <em>%1</em>, but must log in with the account <em>%2</em>.<br>Please log out of %3 in another tab, then <a href='%4'>click here</a> and log in with %2.</p> + <h1>Falsches Konto</h1><p>Sie haben sich mit dem Konto <em>%1</em> angemeldet, müssen aber das Konto <em>%2</em> verwenden.<br>Bitte melden von %3 in einem anderen Tab abmelden und <a href='%4'>klicken Sie hier</a> um sich mit %2 anzumelden</p> - - Connect to %1 - Verbinden mit %1 + + <h1>Wrong user</h1><p>You logged-in with user <em>%1</em>, but must login with user <em>%2</em>.<br>Please log out of %3 in another tab, then <a href='%4'>click here</a> and log in as user %2</p> + - - Enter user credentials - Geben Sie Ihre Benutzer-Anmeldeinformationen ein + Empty JSON from OAuth2 redirect + Leeres JSON aus OAuth2-Redirect - - - OCC::OwncloudPropagator + + + OCC::OCUpdater - - Error with the metadata. Getting unexpected metadata format. - Fehler bei den Metadaten. Unerwartetes Metadatenformat erhalten. + + %1 available. Restart application to start the update. + %1-Version verfügbar. Anwendung zum Start der Aktualisierung neustarten. - - - 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 + + %1 version %2 available. Restart application to start the update. + - - - 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. + + A new update for %1 is about to be installed. The updater may ask +for additional privileges during the process. + - - &Next > - &Weiter > + + 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. - - Server address does not seem to be valid - Serveradresse scheint nicht gültig zu sein + + Checking update server … + Aktualisierungsserver wird überprüft … - - Could not load certificate. Maybe wrong password? - Das Zertifikat konnte nicht geladen werden. Vielleicht ein falsches Passwort? + + Could not check for new updates. + Auf neue Aktualisierungen kann nicht geprüft werden. - - - 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/> + + Could not download update. Please click <a href='%1'>here</a> to download the update manually. + - - Invalid URL - Ungültige URL + + Could not download update. Please open %1 to download the update manually. + Aktualisierung kann nicht herunter geladen werden. Bitte öffnen Sie %1 um die Aktualisierung manuell herunterzuladen. - - Failed to connect to %1 at %2:<br/>%3 - Die Verbindung zu %1 auf %2 konnte nicht hergestellt werden: <br/>%3 + + Could not download update. Please open <a href='%1'>%1</a> to download the update manually. + Aktualisierung kann nicht herunter geladen werden. Bitte öffnen Sie <a href='%1'>%1</a>, um die Aktualisierung manuell herunterzuladen. - - Timeout while trying to connect to %1 at %2. - Zeitüberschreitung beim Verbindungsversuch mit %1 unter %2. + + Downloading %1 … + Lade %1 herunter … - - Trying to connect to %1 at %2 … - Verbindungsversuch mit %1 unter %2 … + + Downloading %1. Please wait … + Lade %1 herunter. Bitte warten … - - 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. + + Downloading version %1. Please wait … + - - 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. + + New %1 is available. Please open %2 to download the update. + Neue Version von %1 vorhanden. Bitte öffnen Sie %2 um die Aktualisierung herunterzuladen. - - There was an invalid response to an authenticated WebDAV request - Ungültige Antwort auf eine WebDAV-Authentifizierungs-Anfrage + + 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. - - Local sync folder %1 already exists, setting it up for sync.<br/><br/> - Lokaler Sync-Ordner %1 existiert bereits, aktiviere Synchronistation.<br/><br/> + + New %1 update ready + Neue %1 Aktualisierung verfügbar - - Creating local sync folder %1 … - Lokaler Ordner %1 für die Synchronisierung wird erstellt … + + New %1 version %2 is available. Please click <a href='%3'>here</a> to download the update. + - - OK - OK + + No updates available. Your installation is at the latest version. + Keine Aktualisierungen verfügbar. Ihre Installation ist die aktuelle Version. - - failed. - fehlgeschlagen. + + Update Check + Aktualitätsprüfung - - Could not create local folder %1 - Der lokale Ordner %1 konnte nicht erstellt werden + + Update status is unknown: Did not check for new updates. + Aktualisierungsstatus unbekannt: Auf neue Aktualisierungen wurde nicht geprüft. + + + OCC::OwncloudAdvancedSetupPage - - No remote folder specified! - Kein entfernter Ordner angegeben! + + (%1) + (%1) - - Error: %1 - Fehler: %1 + + %1 folder '%2' is synced to local folder '%3' + - - creating folder on Nextcloud: %1 - Erstelle Ordner auf Nextcloud: %1 + + %1 folder "%2" is synced to local folder "%3" + %1 Ordner "%2" wird mit dem lokalen Ordner "%3" synchronisiert - - Remote folder %1 created successfully. - Entfernter Ordner %1 erfolgreich erstellt. + + %1 free space + %1 freier Platz - - The remote folder %1 already exists. Connecting it for syncing. - Der Ordner %1 ist auf dem Server bereits vorhanden. Verbinde zur Synchronisierung. + + <p><small><strong>Warning:</strong> The local folder is not empty. Pick a resolution!</small></p> + - - - The folder creation resulted in HTTP error code %1 - Das Erstellen des Ordners erzeugte den HTTP-Fehler-Code %1 + + Connect + Verbinden - - 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> + + Connect … + - - <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> + + Free space: %1 + - - - Remote folder %1 creation failed with error <tt>%2</tt>. - Entfernter Ordner %1 konnte mit folgendem Fehler nicht erstellt werden: <tt>%2</tt>. + + Local Sync Folder + Lokaler Ordner für die Synchronisierung - - A sync connection from %1 to remote directory %2 was set up. - Eine Synchronisierungsverbindung für Ordner %1 zum entfernten Ordner %2 wurde eingerichtet. + + Setup local folder options + - - Successfully connected to %1! - Erfolgreich verbunden mit %1! + + Sync the folder '%1' + - - 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. + + Sync the folder "%1" + Ordner "%1" synchronisieren - - Folder rename failed - Ordner umbenennen fehlgeschlagen. + + There isn't enough free space in the local folder! + Nicht genug freier Platz im lokalen Ordner vorhanden! - - 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. + + Use &virtual files instead of downloading content immediately %1 + &Virtuelle Dateien verwenden, anstatt den Inhalt sofort herunterzuladen %1 - - <font color="green"><b>Local sync folder %1 successfully created!</b></font> - <font color="green"><b>Lokaler Sync-Ordner %1 erfolgreich erstellt!</b></font> + + 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::OwncloudWizard + + + OCC::OwncloudConnectionMethodDialog - - Add %1 account - %1 Konto hinzufügen + + <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> - - Skip folders configuration - Ordner-Konfiguration überspringen + + <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> - - Cancel - Abbrechen + + Configure client-side TLS certificate + Clientseitiges TLS-Zertifikat konfigurieren. - - Enable experimental feature? - Experimentelle Funktion aktivieren? + + Connection failed + Verbindung fehlgeschlagen - - 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. - -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. - Wenn der Modus "Virtuelle Dateien" aktiviert ist, werden zunächst keine Dateien heruntergeladen. Stattdessen wird für jede Datei, die auf dem Server existiert, eine winzige "%1"-Datei erstellt. Der Inhalt kann heruntergeladen werden, indem diese Dateien ausgeführt werden oder indem deren Kontextmenü verwendet wird. - -Der Modus "Virtuelle Dateien" schließt sich mit der ausgewählten Synchronisierung gegenseitig aus. Derzeit nicht ausgewählte Ordner werden in reine Online-Ordner umgewandelt und Ihre Einstellungen für die selektive Synchronisierung werden zurückgesetzt. - -Wenn Sie in diesen Modus wechseln, wird eine aktuell laufende Synchronisierung abgebrochen. - -Dies ist ein neuer, experimenteller Modus. Wenn Sie sich entscheiden, ihn zu verwenden, melden Sie bitte alle auftretenden Probleme. + + Retry unencrypted over HTTP (insecure) + Unverschlüsselt über HTTP versuchen (unsicher) - - Enable experimental placeholder mode - Experimentellen Platzhaltermodus aktivieren + + Select a different URL + Andere URL wählen + + + OCC::OwncloudHttpCredsPage - - Stay safe - Bleiben Sie sicher + + &Email + &E-Mail - - - OCC::PasswordInputDialog - - Password for share required - Passwort für die Freigabe erforderlich + + Connect to %1 + Verbinden mit %1 - - Please enter a password for your share: - Bitte vergeben sie für die Freigabe ein Passwort: + + Enter user credentials + Geben Sie Ihre Benutzer-Anmeldeinformationen ein - - - OCC::PollJob + + + OCC::OwncloudOAuthCredsPage - - Invalid JSON reply from the poll URL - Ungültige JSON-Antwort von der Poll-URL + Login in your browser + Melden Sie sich in Ihrem Browser an - - - OCC::ProcessDirectoryJob + + + OCC::OwncloudPropagator - - Symbolic links are not supported in syncing. - Symbolische Verknüpfungen werden bei der Synchronisierung nicht unterstützt. + Error with the metadata. Getting unexpected metadata format. + Fehler bei den Metadaten. Unerwartetes Metadatenformat erhalten. - - File is listed on the ignore list. - Die Datei ist in der Ignorierliste aufgeführt. + + 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 + + + OCC::OwncloudSetupPage - - 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. + + &Next > + &Weiter > - - File names containing the character "%1" are not supported on this file system. - Dateinamen, die das Zeichen "%1" enthalten, werden von diesem Dateisystem nicht unterstützt. + + Could not load certificate. Maybe wrong password? + Das Zertifikat konnte nicht geladen werden. Vielleicht ein falsches Passwort? - - File name contains at least one invalid character - Der Dateiname enthält mindestens ein ungültiges Zeichen + + Server address does not seem to be valid + Serveradresse scheint nicht gültig zu sein - - The file name is a reserved name on this file system. - Der Dateiname ist ein reservierter Name für dieses Dateisystem. + + Setup %1 server + @@ -4309,6 +4455,9 @@ Dies ist ein neuer, experimenteller Modus. Wenn Sie sich entscheiden, ihn zu ver 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. + + + OCC::OwncloudSetupWizard %1 name contains at least one invalid character @@ -4320,54 +4469,54 @@ Dies ist ein neuer, experimenteller Modus. Wenn Sie sich entscheiden, ihn zu ver %1 Der Name ist in diesem Dateisystem ein reservierter Name. - - Filename contains trailing spaces. - Dateiname enthält Leerzeichen am Ende. + + <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> - - Filename contains leading spaces. - Dateiname enthält Leerzeichen am Anfang. + + A sync connection from %1 to remote directory %2 was set up. + Eine Synchronisierungsverbindung für Ordner %1 zum entfernten Ordner %2 wurde eingerichtet. - - Filename contains leading and trailing spaces. - Dateiname enthält Leerzeichen am Anfang und am Ende. + + Can't 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. + - - Filename is too long. - Der Dateiname ist zu lang. + + 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. - - File/Folder is ignored because it's hidden. - Datei/Ordner wird ignoriert, weil sie unsichtbar ist. + + 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. - - Stat failed. - Stat fehlgeschlagen. + + Could not create local folder %1 + Der lokale Ordner %1 konnte nicht erstellt werden - - Conflict: Server version downloaded, local copy renamed and not uploaded. - Konflikt: Serverversion heruntergeladen, lokale Kopie umbenannt und nicht hochgeladen. + + creating folder on Nextcloud: %1 + Erstelle Ordner auf Nextcloud: %1 - - Case Clash Conflict: Server file downloaded and renamed to avoid clash. - Problem der Groß- und Kleinschreibung: Serverdatei heruntergeladen und umbenannt, um Konflikte zu vermeiden. + + Creating local sync folder %1 … + Lokaler Ordner %1 für die Synchronisierung wird erstellt … - - The filename cannot be encoded on your file system. - Der Dateiname kann auf Ihrem Dateisystem nicht entschlüsselt werden. + + Error: %1 + Fehler: %1 - - The filename is blacklisted on the server. - Der Dateiname steht auf dem Server auf einer schwarzen Liste. + + Failed to connect to %1 at %2:<br/>%3 + Die Verbindung zu %1 auf %2 konnte nicht hergestellt werden: <br/>%3 @@ -4390,34 +4539,34 @@ Dies ist ein neuer, experimenteller Modus. Wenn Sie sich entscheiden, ihn zu ver 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. + + No remote folder specified! + Kein entfernter Ordner angegeben! - - size - Größe + + OK + OK - - permission - Berechtigung + + Remote folder %1 created successfully. + Entfernter Ordner %1 erfolgreich erstellt. - - file id - Datei-ID + + Remote folder %1 creation failed with error <tt>%2</tt>. + Entfernter Ordner %1 konnte mit folgendem Fehler nicht erstellt werden: <tt>%2</tt>. - - Server reported no %1 - Server meldet keine %1 + + Successfully connected to %1! + Erfolgreich verbunden mit %1! - - Cannot sync due to invalid modification time - Synchronisierung wegen ungültiger Änderungszeit nicht möglich + + The authenticated request to the server was redirected to '%1'. The URL is bad, the server is misconfigured. + @@ -4425,24 +4574,24 @@ Dies ist ein neuer, experimenteller Modus. Wenn Sie sich entscheiden, ihn zu ver 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 Dateisatzes %1 aus der Datenbank + + The remote folder %1 already exists. Connecting it for syncing. + Der Ordner %1 ist auf dem Server bereits vorhanden. Verbinde zur Synchronisierung. - - Conflict when uploading a folder. It's going to get cleared! - Konflikt beim Hochladen eines Ordners. Er wird gelöscht! + + 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> - - Conflict when uploading a file. It's going to get removed! - Konflikt beim Hochladen einer Datei. Sie wird entfernt! + + The server reported the following error: + - - Moved to invalid target, restoring - Auf ungültiges Ziel verschoben, wiederherstellen. + + Timeout while trying to connect to %1 at %2. + Zeitüberschreitung beim Verbindungsversuch mit %1 unter %2. @@ -4454,44 +4603,47 @@ Dies ist ein neuer, experimenteller Modus. Wenn Sie sich entscheiden, ihn zu ver Ignored because of the "choose what to sync" blacklist Ignoriert wegen der "Choose what to sync"-Blacklist + + + OCC::OwncloudWizard - - 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. + + %1 Connection Wizard + - - 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. + + Add %1 account + %1 Konto hinzufügen - - 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. + + Enable experimental feature? + Experimentelle Funktion aktivieren? - - Not allowed to remove, restoring - Entfernen nicht erlaubt, wiederherstellen. + + Enable experimental placeholder mode + Experimentellen Platzhaltermodus aktivieren - - Error while reading the database - Fehler beim Lesen der Datenbank + + Skip folders configuration + Ordner-Konfiguration überspringen - - 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 + + Stay safe + Bleiben Sie sicher - - - OCC::PropagateDirectory could not delete file %1 from local DB Datei %1 konnte nicht aus lokaler Datenbank gelöscht werden + + + OCC::PasswordInputDialog Could not delete file %1 from local DB @@ -4502,6 +4654,9 @@ 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 + + + OCC::PollJob @@ -4512,6 +4667,9 @@ Dies ist ein neuer, experimenteller Modus. Wenn Sie sich entscheiden, ihn zu ver The folder %1 cannot be made read-only: %2 Der Ordner %1 kann nicht schreibgeschützt werden: %2 + + + OCC::ProcessDirectoryJob @@ -4519,174 +4677,154 @@ Dies ist ein neuer, experimenteller Modus. Wenn Sie sich entscheiden, ihn zu ver Unbekannter Ausnahmefehler - - Error updating metadata: %1 - Fehler beim Aktualisieren der Metadaten: %1 + + %1 name contains at least one invalid character + %1 Der Name enthält mindestens ein ungültiges Zeichen - - File is currently in use - Datei ist aktuell in Benutzung + + %1 name is a reserved name on this file system. + %1 Der Name ist in diesem Dateisystem ein reservierter Name. - - - OCC::PropagateDownloadFile - - Could not get file %1 from local DB - Datei %1 konnte nicht aus der lokalen Datenbank abgerufen werden + + Cannot sync due to invalid modification time + Synchronisierung wegen ungültiger Änderungszeit nicht möglich - - could not get file %1 from local DB - Datei %1 konnte nicht aus der lokalen Datenbank abgerufen werden + + 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 %1 cannot be downloaded because encryption information is missing. - Die Datei %1 kann nicht heruntergeladen werden, da die Verschlüsselungsinformationen fehlen. + + Conflict when uploading a file. It's going to get removed! + Konflikt beim Hochladen einer Datei. Sie wird entfernt! - - - File has changed since discovery - Datei ist seit der Entdeckung geändert worden + + Conflict when uploading a folder. It's going to get cleared! + Konflikt beim Hochladen eines Ordners. Er wird gelöscht! - - - Could not delete file record %1 from local DB - Der Dateidatensatz %1 konnte nicht aus der lokalen Datenbank gelöscht werden + + Conflict: Server version downloaded, local copy renamed and not uploaded. + Konflikt: Serverversion heruntergeladen, lokale Kopie umbenannt und nicht hochgeladen. - - 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! + + Could not upload file, because it is open in "%1". + Datei konnte nicht hochgeladen werden, da sie in "%1" geöffnet ist. - - The download would reduce free local disk space below the limit - Das Herunterladen würde den lokalen freien Speicherplatz unter die Grenze reduzieren + + Error while deleting file record %1 from the database + Fehler beim Löschen des Dateisatzes %1 aus der Datenbank - - Free space on disk is less than %1 - Der freie Speicher auf der Festplatte ist weniger als %1 + + Error while reading the database + Fehler beim Lesen der Datenbank - - File was deleted from server - Die Datei wurde vom Server gelöscht + + File has extension reserved for virtual files. + Die Endung der Datei ist für virtuelle Dateien reserviert. - - The file could not be downloaded completely. - Die Datei konnte nicht vollständig heruntergeladen werden. + + file id + Datei-ID - - 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 is listed on the ignore list. + Die Datei ist in der Ignorierliste aufgeführt. - - - 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 name contains at least one invalid character + Der Dateiname enthält mindestens ein ungültiges Zeichen - - File %1 downloaded but it resulted in a local file name clash! - Datei %1 heruntergeladen, aber dies führte zu einem lokalen Dateinamenskonflikt! + + File names containing the character "%1" are not supported on this file system. + Dateinamen, welche das Zeichen "%1" enthalten, werden von diesem Dateisystem nicht unterstützt. - - Error updating metadata: %1 - Fehler beim Aktualisieren der Metadaten: %1 + + 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. - - The file %1 is currently in use - Die Datei %1 ist aktuell in Benutzung + + File/Folder is ignored because it's hidden. + Datei/Ordner wird ignoriert, weil sie unsichtbar ist. - - - OCC::PropagateItemJob - - ; Restoration Failed: %1 - ; Wiederherstellung fehlgeschlagen: %1 + + Filename is too long. + Der Dateiname ist zu lang. - - 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 + + Folder + Ordner - - - OCC::PropagateLocalMkdir - - could not delete file %1, error: %2 - Konnte Datei %1 nicht löschen. Fehler: %2 + + Ignored because of the "choose what to sync" blacklist + Ignoriert wegen der "Choose what to sync"-Blacklist - - 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! + + Moved to invalid target, restoring + Auf ungültiges Ziel verschoben, wiederherstellen. - - Could not create folder %1 - Ordner %1 konnte nicht erstellt werden + + 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 folder %1 cannot be made read-only: %2 - Der Ordner %1 kann nicht schreibgeschützt werden: %2 + + 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. - - unknown exception - Unbekannter Ausnahmefehler + + Not allowed to remove, restoring + Entfernen nicht erlaubt, wiederherstellen. - - Error updating metadata: %1 - Fehler beim Aktualisieren der Metadaten: %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. - - The file %1 is currently in use - Die Datei %1 ist aktuell in Benutzung + + permission + Berechtigung - - - OCC::PropagateLocalRemove - - Could not remove %1 because of a local file name clash - %1 kann aufgrund eines Konfliktes mit dem lokalen Dateinamen nicht gelöscht werden + + Reason: the entire filename is forbidden. + Grund: Der gesamte Dateiname ist unzulässig. - - Could not delete file record %1 from local DB - Der Dateidatensatz %1 konnte nicht aus der lokalen Datenbank gelöscht werden + + Reason: the file has a forbidden extension (.%1). + Grund: Die Datei hat eine unzulässige Erweiterung (.%1). - - - 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! + + Reason: the filename contains a forbidden character (%1). + Grund: Der Dateiname enthält ein unzulässiges Zeichen (%1). - - File %1 downloaded but it resulted in a local file name clash! - Datei %1 heruntergeladen, aber dies führte zu einem lokalen Dateinamenskonflikt! + + Reason: the filename has a forbidden base name (filename start). + Grund: Der Dateiname hat einen unzulässigen Basisnamen (Beginn des Dateinamens). @@ -4709,98 +4847,90 @@ Dies ist ein neuer, experimenteller Modus. Wenn Sie sich entscheiden, ihn zu ver Fehler beim Setzen des PIN-Status - - - Error updating metadata: %1 - Fehler beim Aktualisieren der Metadaten: %1 + + Stat failed. + Stat fehlgeschlagen. - - The file %1 is currently in use - Die Datei %1 ist aktuell in Benutzung + + Symbolic links are not supported in syncing. + Symbolische Verknüpfungen werden bei der Synchronisierung nicht unterstützt. - - - Could not delete file record %1 from local DB - Der Dateidatensatz %1 konnte nicht aus der lokalen Datenbank gelöscht werden + + The file name is a reserved name on this file system. + Der Dateiname ist ein reservierter Name in diesem Dateisystem. - - Failed to propagate directory rename in hierarchy - Die Umbenennung des Verzeichnisses in der Hierarchie konnte nicht weitergegeben werden + + The filename cannot be encoded on your file system. + Der Dateiname kann auf Ihrem Dateisystem nicht entschlüsselt werden. - - Failed to rename file - Konnte Datei nicht umbenennen + + The filename is blacklisted on the server. + Der Dateiname steht auf dem Server auf einer schwarzen Liste. - - - OCC::PropagateRemoteDelete + + + OCC::PropagateDirectory - - 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 %1 from local DB + Datei %1 konnte nicht aus lokaler Datenbank gelöscht werden - - Could not delete file record %1 from local DB - Der Dateidatensatz %1 konnte nicht aus der lokalen Datenbank gelöscht werden + + Could not delete file %1 from local DB + Datei %1 konnte nicht aus der lokalen Datenbank gelöscht werden - - - 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. + + Error updating metadata due to invalid modification time + Fehler beim Aktualisieren der Metadaten aufgrund einer ungültigen Änderungszeit - - - 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". + + File is currently in use + Datei ist aktuell in Benutzung - - Failed to encrypt a folder %1 - Ordner konnte nicht verschlüsselt werden %1 + + The folder %1 cannot be made read-only: %2 + Der Ordner %1 kann nicht schreibgeschützt werden: %2 - - Error writing metadata to the database: %1 - Fehler beim Schreiben der Metadaten in die Datenbank: %1 + + unknown exception + Unbekannter Ausnahmefehler + + + OCC::PropagateDownloadFile - - The file %1 is currently in use - Die Datei %1 ist aktuell in Benutzung + + Could not delete file record %1 from local DB + Der Dateidatensatz %1 konnte nicht aus der lokalen Datenbank gelöscht werden - - - OCC::PropagateRemoteMove - - Could not rename %1 to %2, error: %3 - Konnte %1 nicht nach %2 umbenennen. Fehler: %3 + + 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 + + Could not get file %1 from local DB + Datei %1 konnte nicht aus der lokalen Datenbank abgerufen werden - - The file %1 is currently in use - Die Datei %1 ist aktuell in Benutzung + + File %1 can not be downloaded because encryption information is missing. + - - 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". + + 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! @@ -4813,260 +4943,261 @@ Dies ist ein neuer, experimenteller Modus. Wenn Sie sich entscheiden, ihn zu ver 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 downloaded but it resulted in a local file name clash! + Datei %1 heruntergeladen, aber dies führte zu einem lokalen Dateinamenskonflikt! - - Error setting pin state - Fehler beim Setzen des PIN-Status + + 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. - - Error writing metadata to the database - Fehler beim Schreiben der Metadaten in die Datenbank + + File has changed since discovery + Datei ist seit der Entdeckung geändert worden - - - OCC::PropagateUploadFileCommon - - Failed to upload encrypted file. - Das Hochladen der verschlüsselten Datei ist fehlgeschlagen. + + File was deleted from server + Die Datei wurde vom Server gelöscht - - 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 + + Free space on disk is less than %1 + Der freie Speicher auf der Festplatte ist weniger als %1 - - - Upload of %1 exceeds the quota for the folder - Das Hochladen von %1 überschreitet das Speicherkontingent des Ordners + + 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 has invalid modification time. Do not upload to the server. - Die Datei %1 hat eine ungültige Änderungszeit. Nicht auf den Server hochladen. + + The downloaded file is empty despite that the server announced it should have been %1. + - - File Removed (start upload) %1 - Datei entfernt (starte Hochladen) %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. - - 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 could not be downloaded completely. + Die Datei konnte nicht vollständig heruntergeladen werden. + + + OCC::PropagateItemJob - - Local file changed during sync. - Eine lokale Datei wurde während der Synchronisierung geändert. + + ; Restoration Failed: %1 + ; Wiederherstellung fehlgeschlagen: %1 - - Failed to unlock encrypted folder. - Der verschlüsselte Ordner konnte nicht entsperrt werden. + + 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 + + + OCC::PropagateLocalMkdir - - Unable to upload an item with invalid characters - Ein Element mit ungültigen Zeichen kann nicht hochgeladen werden + + Attention, possible case sensitivity clash with %1 + - - Error updating metadata: %1 - Fehler beim Aktualisieren der Metadaten: %1 + + 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 + + could not delete file %1, error: %2 + Konnte Datei %1 nicht löschen. Fehler: %2 - - - OCC::PropagateUploadFileNG - - The local file was removed during sync. - Die lokale Datei wurde während der Synchronisierung gelöscht. + + 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! + + + OCC::PropagateLocalRemove - - Local file changed during sync. - Eine lokale Datei wurde während der Synchronisierung geändert. + + Could not remove %1 because of a local file name clash + %1 kann aufgrund eines Konfliktes mit dem lokalen Dateinamen nicht gelöscht werden - - Poll URL missing - Poll-URL fehlt + + Could not remove folder '%1' + - - Unexpected return code from server (%1) - Unerwarteter Rückgabe-Code Antwort vom Server (%1) + + Error removing '%1': %2; + + + + OCC::PropagateLocalRename - - Missing File ID from server - Fehlende Datei-ID vom Server + + Error setting pin state + Fehler beim Setzen des PIN-Status - - Missing ETag from server - Fehlender ETag vom Server + + Failed to propagate directory rename in hierarchy + Die Umbenennung des Verzeichnisses in der Hierarchie konnte nicht weitergegeben werden - - - OCC::PropagateUploadFileV1 - - Poll URL missing - Poll-URL fehlt + + Failed to rename file + Konnte Datei nicht umbenennen - - The local file was removed during sync. - Die lokale Datei wurde während der Synchronisierung gelöscht. + + File %1 can not be renamed to %2 because of a local file name clash + - - Local file changed during sync. - Eine lokale Datei wurde während der Synchronisierung geändert. + + 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::PropagateRemoteMkdir - - 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) + + Error writing metadata to the database: %1 + Fehler beim Schreiben der Metadaten in die Datenbank: %1 - - - OCC::ProxyAuthDialog - - Proxy authentication required - Proxy-Authentifzierung erforderlich + + Failed to encrypt a folder %1 + Ordner konnte nicht verschlüsselt werden %1 - - Username: - Benutzername: + + 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 - - Proxy: - Proxy: + + Could not rename %1 to %2, error: %3 + Konnte %1 nicht nach %2 umbenennen. Fehler: %3 + + + OCC::PropagateUploadFileCommon - - The proxy server needs a username and password. - Der Proxy-Server benötigt Benutzername und Passwort + + Failed to unlock encrypted folder. + Der verschlüsselte Ordner konnte nicht entsperrt werden. - - Password: - Passwort: + + Failed to upload encrypted file. + Das Hochladen der verschlüsselten Datei ist fehlgeschlagen. - - - OCC::SelectiveSyncDialog - - Choose What to Sync - Zu synchronisierende Elemente auswählen + + Unable to upload an item with invalid characters + Ein Element mit ungültigen Zeichen kann nicht hochgeladen werden - - - OCC::SelectiveSyncWidget - - Loading … - Lade … + + Upload of %1 exceeds the quota for the folder + Das Hochladen von %1 überschreitet das Speicherkontingent des Ordners + + + OCC::PropagateUploadFileNG - - Deselect remote folders you do not wish to synchronize. - Entfernte Ordner abwählen, die nicht synchronisiert werden sollen. + + Missing ETag from server + Fehlender ETag vom Server - - Name - Name + + Missing File ID from server + Fehlende Datei-ID vom Server - - Size - Größe + + Poll URL missing + Poll-URL fehlt - - - No subfolders currently on the server. - Aktuell befinden sich keine Unterordner auf dem Server. + + Unexpected return code from server (%1) + Unerwarteter Rückgabe-Code Antwort vom Server (%1) + + + OCC::PropagateUploadFileV1 - - An error occurred while loading the list of sub folders. - Es ist ein Fehler während des Ladens der Liste der Unterordner aufgetreten. + + 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) - - - OCC::ServerNotificationHandler + + + OCC::ProxyAuthDialog - - Reply - Antworten + + Password: + Passwort: - - Dismiss - Ablehnen + + Proxy authentication required + Proxy-Authentifzierung erforderlich - - - OCC::SettingsDialog - - Settings - Einstellungen + + Proxy: + Proxy: - - %1 Settings - This name refers to the application name e.g Nextcloud - %1-Einstellungen + + The proxy server needs a username and password. + Der Proxy-Server benötigt Benutzername und Passwort - - General - Allgemein + + Username: + Benutzername: + + + OCC::SelectiveSyncDialog - - Network - Netzwerk + + Choose What to Sync + Zu synchronisierende Elemente auswählen + + + OCC::SelectiveSyncWidget - - Account - Benutzerkonto + + An error occurred while loading the list of sub folders. + Es ist ein Fehler während des Ladens der Liste der Unterordner aufgetreten. - - - OCC::ShareManager Error Fehler - - - OCC::ShareModel %1 days @@ -5083,29 +5214,35 @@ Dies ist ein neuer, experimenteller Modus. Wenn Sie sich entscheiden, ihn zu ver Heute - - Secure file drop link - Sicherer Link zur Dateiablage + + Size + Größe + + + OCC::ServerNotificationHandler - - Share link - Freigabe-Link + + Reply + Antworten + + + OCC::SettingsDialog - - Link share - Link teilen + + %1 Settings + %1-Einstellungen - - Internal link - Interner Link + + Account + Benutzerkonto - - Secure file drop - Sichere Dateiablage + + General + Allgemein @@ -5113,123 +5250,117 @@ Dies ist ein neuer, experimenteller Modus. Wenn Sie sich entscheiden, ihn zu ver Lokaler Ordner für %1 nicht gefunden - - Enter a note for the recipient - Geben Sie eine Notiz für den Empfänger ein + + New Account + Neues Konto - - - OCC::ShareeModel + + + OCC::ShareDialog - - - Search globally - Global suchen + + %1 Sharing + - - No results found - Keine Ergebnisse gefunden + + Folder: %2 + - - Global search results - Globale Suchergebnisse + + Icon + - - %1 (%2) - sharee (shareWithAdditionalInfo) - %1 (%2) + + Nextcloud Path: + - - - OCC::SocketApi - - Failed to encrypt folder at "%1" - Fehler beim Verschlüsseln des Ordners unter "%1" + + The file can not be shared because it was shared without sharing permission. + + + + OCC::ShareLinkWidget - - 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. + + <p>Do you really want to delete the public link share <i>%1</i>?</p><p>Note: This action cannot be undone.</p> + - - Failed to encrypt folder - Ordner konnte nicht verschlüsselt werden + + Add note to recipient + - - 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 + + Allow Editing + - - Folder encrypted successfully - Ordner erfolgreich verschlüsselt + + Allow Upload && Editing + - - The following folder was encrypted successfully: "%1" - Der folgende Ordner wurde erfolgreich verschlüsselt: "%1" + + Confirm Link Share Deletion + - - Context menu share - Kontextmenü Freigabe + + Expiration Date + - - Select new location … - Neuen Ort auswählen … + + Public link + - - I shared something with you - Ich habe etwas mit Ihnen geteilt + + Read only + + + + OCC::ShareModel - - - Share options - Freigabeoptionen + + %1 days + %1 Tage - - - Activity - Aktivität + + 1 day + 1 Tag - - Copy private link to clipboard - Privater Link in die Zwischenablage kopiert + + Could not find local folder for %1 + Lokaler Ordner für %1 nicht gefunden - - Send private link by email … - Privaten Link als E-Mail verschicken … + Enter a note for the recipient + Geben Sie eine Notiz für den Empfänger ein - - Leave this share - Freigabe verlassen + + Internal link + Interner Link - - Resharing this file is not allowed - Weiterteilen dieser Datei ist nicht erlaubt + + Link share + Link teilen - - Resharing this folder is not allowed - Weiterteilen dieses Ordners ist nicht erlaubt + + Secure file drop + Sichere Dateiablage @@ -5237,11 +5368,13 @@ Server antwortete mit Fehler: %2 Link zur sicheren Dateiablage kopieren - - - Copy public link - Öffentlichen Link kopieren + + Today + Heute + + + OCC::ShareUserGroupWidget Copy internal link @@ -5253,30 +5386,31 @@ Server antwortete mit Fehler: %2 Link zur sicheren Dateiablage kopieren - - Encrypt - Verschlüsseln + + Share with users or groups … + + + + OCC::ShareUserLine - - Lock file - Datei sperren + + Can change + - - Unlock file - Datei entsperren + + Can create + - - Locked by %1 - Gesperrt von %1 + + Can delete + - - - Expires in %1 minutes - remaining time before lock expires - Läuft ab in %1 MinuteLäuft ab in %1 Minuten + + Can edit + Kann bearbeiten @@ -5294,448 +5428,448 @@ Server antwortete mit Fehler: %2 Konflikt lösen… - - Move and rename … - Verschieben und umbenennen … + Username + Benutzername + + + OCC::ShareeModel - - Move, rename and upload … - Verschieben, umbenennen und hochladen … + + Global search results + Globale Suchergebnisse - - Delete local changes - Lokale Änderungen löschen + + No results found + Keine Ergebnisse gefunden - - Move and upload … - Verschieben und hochladen … + + Search globally + Global suchen + + + OCC::ShibbolethCredentials - - Delete - Löschen + + Login Error + - - - OCC::SslButton - - <h3>Certificate Details</h3> - <h3>Zertifikatdetails</h3> + + You must sign in as user %1 + + + + OCC::ShibbolethWebView - - Common Name (CN): - Gemeinsamer Name (CN): + + %1 - Authenticate + - - Subject Alternative Names: - Subject Alternative Names: + + Reauthentication required + - - Organization (O): - Organisation (O): + + SSL Cipher Debug View + - - Organizational Unit (OU): - Organisationseinheit (OU): + + Your session has expired. You need to re-login to continue to use the client. + + + + OCC::SocketApi - - State/Province: - Staat/Provinz: + + Context menu share + Kontextmenü Freigabe - - Country: - Land: + + Copy internal link + Internen Link kopieren - - Serial: - Seriennummer: + + Copy private link to clipboard + Privater Link in die Zwischenablage kopiert - - <h3>Issuer</h3> - <h3>Aussteller</h3> + + Copy public link + Öffentlichen Link kopieren - - Issuer: - Aussteller: + + Copy secure file drop link + Link zur sicheren Dateiablage kopieren - - Issued on: - Ausgestellt am: + + Copy secure filedrop link + Link zur sicheren Dateiablage kopieren - - Expires on: - Ablaufdatum: + + 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 - - <h3>Fingerprints</h3> - <h3>Fingerabdrücke</h3> + + Delete local changes + Lokale Änderungen löschen - - SHA-256: - SHA-256: + + Edit + Bearbeiten + + + + Expires in %1 minutes + + + + Läuft in %1 Minuten ab + - - SHA-1: - SHA-1: + + Failed to encrypt folder + Ordner konnte nicht verschlüsselt werden - - <p><b>Note:</b> This certificate was manually approved</p> - <p><b>Hinweis:</b> Dieses Zertifikat wurde manuell bestätigt</p> + + Failed to encrypt folder at "%1" + Fehler beim Verschlüsseln des Ordners unter "%1" - - %1 (self-signed) - %1 (selbst signiert) + + Folder encrypted successfully + Ordner erfolgreich verschlüsselt - - %1 - %1 + + I shared something with you + Ich habe etwas mit Ihnen geteilt - - This connection is encrypted using %1 bit %2. - - Diese Verbindung ist verschlüsselt mit %1 Bit %2. - + + Leave this share + Freigabe verlassen - - This connection is NOT secure as it is not encrypted. - - Diese Verbindung ist NICHT sicher, da diese nicht verschlüsselt ist. - + + Lock file + Datei sperren - - Server version: %1 - Serverversion: %1 + + Locked by %1 + Gesperrt von %1 - - No support for SSL session tickets/identifiers - Keine Unterstützung für SSL session tickets + + Move and rename … + Verschieben und umbenennen … - - Certificate information: - Zertifikatsinformation: + + Move and upload … + Verschieben und hochladen … - - The connection is not secure - Die Verbindung ist nicht sicher + + Move, rename and upload … + Verschieben, umbenennen und hochladen … - - - OCC::SslErrorDialog - - Trust this certificate anyway - Diesem Zertifikat trotzdem vertrauen + + Open in browser + Im Browser öffnen - - Untrusted Certificate - Nicht vertrauenswürdiges Zertifikat + + Resharing this file is not allowed + Weiterteilen dieser Datei ist nicht erlaubt - - Cannot connect securely to <i>%1</i>: - Kann keine sichere Verbindung zu <i>%1</i> herstellen: + + Resharing this folder is not allowed + Weiterteilen dieses Ordners ist nicht erlaubt - - Additional errors: - Zusätzliche Fehler: + + Resolve conflict … + Konflikt lösen… - - with Certificate %1 - mit Zertifikat %1 + + Select new location … + Neuen Ort auswählen … - - - - &lt;not specified&gt; - &lt;nicht angegeben&gt; + + Send private link by email … + Privaten Link als E-Mail verschicken … - - - Organization: %1 - Organisation: %1 + + Share options + Freigabeoptionen - - - Unit: %1 - Einheit: %1 + + 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. - - - Country: %1 - Land: %1 + + The following folder was encrypted successfully: "%1" + Der folgende Ordner wurde erfolgreich verschlüsselt: "%1" - - Fingerprint (SHA1): <tt>%1</tt> - Fingerabdruck (SHA1): <tt>%1</tt> + + Unlock file + Datei entsperren + + + OCC::SslButton - - Fingerprint (SHA-256): <tt>%1</tt> - Fingerabdruck (SHA-256): <tt>%1</tt> + + %1 + %1 - - Fingerprint (SHA-512): <tt>%1</tt> - Fingerabdruck (SHA-512): <tt>%1</tt> + + %1 (self-signed) + %1 (selbst signiert) - - Effective Date: %1 - Datum des Inkrafttretens: %1 + + <h3>Certificate Details</h3> + <h3>Zertifikatdetails</h3> - - Expiration Date: %1 - Ablaufdatum: %1 + + <h3>Fingerprints</h3> + <h3>Fingerabdrücke</h3> - - Issuer: %1 - Aussteller: %1 + + <h3>Issuer</h3> + <h3>Aussteller</h3> - - - OCC::SyncEngine - - %1 (skipped due to earlier error, trying again in %2) - %1 (übersprungen aufgrund des früheren Fehlers, erneuter Versuch in %2) + + <p><b>Note:</b> This certificate was manually approved</p> + <p><b>Hinweis:</b> Dieses Zertifikat wurde manuell bestätigt</p> - - Could not update file: %1 - Datei konnte nicht aktualisiert werden: %1 + + Certificate information: + Zertifikatsinformation: - - Could not update virtual file metadata: %1 - Metadaten der virtuellen Datei konnten nicht aktualisiert werden: %1 + + Common Name (CN): + Gemeinsamer Name (CN): - - Could not update file metadata: %1 - Die Metadaten der Datei konnten nicht aktualisiert werden: %1 + + Country: + Land: - - Could not set file record to local DB: %1 - Dateidatensatz konnte nicht auf lokale DB gesetzt werden: %1 + + Expires on: + Ablaufdatum: - - Unresolved conflict. - Ungelöster Konflikt. + + Issued on: + Ausgestellt am: - - 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. + + Issuer: + Aussteller: - - 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. + + No support for SSL session tickets/identifiers + Keine Unterstützung für SSL session tickets - - Using virtual files with suffix, but suffix is not set - Virtuelle Dateien mit Endung verwenden, aber Endung ist nicht gesetzt. + + Organization (O): + Organisation (O): - - Unable to read the blacklist from the local database - Fehler beim Einlesen der Blacklist aus der lokalen Datenbank + + Organizational Unit (OU): + Organisationseinheit (OU): - - Unable to read from the sync journal. - Fehler beim Einlesen des Synchronisierungsprotokolls. + + Serial: + Seriennummer: - - Cannot open the sync journal - Synchronisierungsprotokoll kann nicht geöffnet werden + + Server version: %1 + Serverversion: %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. + + SHA-1: + SHA-1: - - There is insufficient space available on the server for some uploads. - Auf dem Server ist für einige Dateien zum Hochladen nicht genug Platz. + + SHA-256: + SHA-256: - - - OCC::SyncStatusSummary - - - Offline - Offline + + State/Province: + Staat/Provinz: - - - - All synced! - Alles synchronisiert! + + Subject Alternative Names: + Subject Alternative Names: - - Some files couldn't be synced! - Einige Dateien konnten nicht synchronisiert werden! + + The connection is not secure + Die Verbindung ist nicht sicher - - See below for errors - Warnungen siehe unten + + This connection is encrypted using %1 bit %2. + Diese Verbindung ist verschlüsselt mit %1 Bit %2. - - Checking folder changes - Prüfe Ordneränderungen + + This connection is NOT secure as it is not encrypted. + Diese Verbindung ist NICHT sicher, da diese nicht verschlüsselt ist. + + + OCC::SslErrorDialog - - Syncing changes - Synchronisiere Änderungen + + &lt;not specified&gt; + &lt;nicht angegeben&gt; - - Sync paused - Synchronisierung pausiert + + Additional errors: + Zusätzliche Fehler: - - Some files could not be synced! - Einige Dateien konnten nicht synchronisiert werden! + + Cannot connect securely to <i>%1</i>: + Kann keine sichere Verbindung zu <i>%1</i> herstellen: - - See below for warnings - Warnungen siehe unten + + Country: %1 + Land: %1 - - Syncing - Synchronisiere + + Effective Date: %1 + Datum des Inkrafttretens: %1 - - %1 of %2 · %3 left - %1 von %2 · %3 verbleiben + + Expiration Date: %1 + Ablaufdatum: %1 - - %1 of %2 - %1 von %2 + + Fingerprint (SHA-256): <tt>%1</tt> + Fingerabdruck (SHA-256): <tt>%1</tt> - - Syncing file %1 of %2 - Synchronisiere Datei %1 von %2 + + Fingerprint (SHA-512): <tt>%1</tt> + Fingerabdruck (SHA-512): <tt>%1</tt> - - - OCC::Systray - - Download - Herunterladen + + Fingerprint (SHA1): <tt>%1</tt> + Fingerabdruck (SHA1): <tt>%1</tt> - - Add account - Konto hinzufügen + + Issuer: %1 + Aussteller: %1 - - Open main dialog - Hauptfenster öffnen + + Organization: %1 + Organisation: %1 - - - Pause sync - Synchronisierung pausieren + + Trust this certificate anyway + Diesem Zertifikat trotzdem vertrauen - - - Resume sync - Synchronisierung fortsetzen + + Unit: %1 + Einheit: %1 - - Settings - Einstellungen + + Untrusted Certificate + Nicht vertrauenswürdiges Zertifikat - - Help - Hilfe + + with Certificate %1 + mit Zertifikat %1 + + + OCC::SyncEngine - - Exit %1 - %1 beenden + + %1 (skipped due to earlier error, trying again in %2) + %1 (übersprungen aufgrund des früheren Fehlers, erneuter Versuch in %2) - - Pause sync for all - Synchronisierung für alle pausieren + + A HTTP transmission error happened. + - - Resume sync for all - Synchronisierung für alle fortsetzen + + A network connection timeout happened. + - - %1: %2 - %1: %2 + + Access is forbidden + - - - OCC::Theme <p>%1 Desktop Client Version %2 (%3). For more information please click <a href='%4'>here</a>.</p> @@ -5749,77 +5883,65 @@ Server antwortete mit Fehler: %2 <p>%1 Desktop-Client</p> - - <p>%1 Desktop Client</p><p>Version %1. For more information please click <a href='%2'>here</a>.</p> - Example text: "<p>Nextcloud Desktop Client</p>" (%1 is the application name) - <p>%1 Desktop-Client</p><p>Version %1. Für weitere Informationen bitte <a href='%2'>hier</a> klicken.</p> + + An internal error number %1 occurred. + - - <p><small>Using virtual files plugin: %1</small></p> - <p><small>Plugin für virtuelle Dateien: %1</small></p> + + Cannot open the sync journal + Synchronisierungsprotokoll kann nicht geöffnet werden - - <p>%1 desktop client %2</p> - Example text: "<p>Nextcloud Desktop Client</p>" (%1 is the application name) - <p>%1 Desktop-Client %2</p> + + Could not set file record to local DB: %1 + Dateidatensatz konnte nicht auf lokale DB gesetzt werden: %1 - - - <p>Version %1. For more information please click <a href='%2'>here</a>.</p> - <p>Version %1. Für weitere Informationen klicken Sie bitte <a href='%2'>hier</a>.</p> + + Could not update file metadata: %1 + Die Metadaten der Datei konnten nicht aktualisiert werden: %1 - - <p>This release was supplied by %1.</p> - <p>Diese Version wird von %1 bereitgestellt</p>. + + Could not update file: %1 + Datei konnte nicht aktualisiert werden: %1 - - - OCC::UnifiedSearchResultsListModel - - Failed to fetch providers. - Anbieter konnten nicht abgerufen werden. + + Could not update virtual file metadata: %1 + Metadaten der virtuellen Datei konnten nicht aktualisiert werden: %1 - - Failed to fetch search providers for '%1'. Error: %2 - Konnte Suchanbieter für '%1' nicht abrufen. Fehler: %2 + + CSync unspecified error. + - - Search has failed for '%2'. - Suche nach '%2' fehlgeschlagen. + + Discovery step failed. + - - Search has failed for '%1'. Error: %2 - Suche nach '%1' fehlgeschlagen. Fehler: %2 + + 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. - - - OCC::UpdateE2eeFolderMetadataJob - - Failed to update folder metadata. - Fehler beim Aktualisieren der Ordner-Metadaten. + + Error while reading folder. + - - Failed to unlock encrypted folder. - Verschlüsselter Ordner konnte nicht entsperrt werden. + + Failed to load or create the journal file. Make sure you have read and write permissions in the local sync folder. + - - Failed to finalize item. - Fehler beim Fertigstellen des Elements. + + File names containing the character '%1' are not supported on this file system. + - - - OCC::UpdateE2eeFolderUsersMetadataJob @@ -5834,28 +5956,25 @@ Server antwortete mit Fehler: %2 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 + + Folder hierarchy is too deep + - - Could not find root encrypted folder for folder %1 - Verschlüsselter Stammordner für den Ordner %1 nicht gefunden + + Invalid characters, please rename "%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 + + Local files and share folder removed. + Failed to unlock a folder. Fehler beim Entsperren eines Ordners. - - - OCC::User End-to-end certificate needs to be migrated to a new one @@ -5872,15 +5991,14 @@ Server antwortete mit Fehler: %2 %1 Benachrichtigungen - - Retry all uploads - Alle Uploads neu starten + + No space on %1 server available. + - - - Resolve conflict - Konflikt lösen + + Not allowed because you don't have permission to add parent folder + @@ -5897,129 +6015,122 @@ Server antwortete mit Fehler: %2 Open Nextcloud Talk in browser Nextcloud-Talk im Browser öffnen - - - OCC::UserModel - - Confirm Account Removal - Kontenentfernung bestätigen + + the destination + - - <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> + + The mounted folder is temporarily not available on the server + - - Remove connection - Verbindung entfernen + + The service is temporarily unavailable + - - Cancel - Abbrechen + + the source + - - - 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. + + 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 fetch status. Make sure you are connected to the server. - Benutzerstatus konnte nicht abgerufen werden. Bitte sicherstellen, dass Sie mit dem Server verbunden sind. + + Tried to create a folder that already exists. + - - 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. + + 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. - - Emojis are not supported. Some status functionality may not work. - Emoji-Funktion wird nicht unterstützt. Einige Benutzerstatus-Funktionen funktionieren unter Umständen nicht. + + Unable to read from the sync journal. + Fehler beim Einlesen des Synchronisierungsprotokolls. - - 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. + + Unable to read the blacklist from the local database + Fehler beim Einlesen der Blacklist aus der lokalen Datenbank - - 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. + + Unresolved conflict. + Ungelöster Konflikt. - - - Don't clear - Nicht löschen + + Using virtual files with suffix, but suffix is not set + Virtuelle Dateien mit Endung verwenden, aber Endung ist nicht gesetzt. + + + OCC::SyncLogDialog - - 30 minutes - 30 Minuten + + Synchronisation Log + + + + OCC::SyncStatusSummary - - - 1 hour - 1 Stunde + + %1 of %2 + %1 von %2 - - 4 hours - 4 Stunden + + %1 of %2 · %3 left + %1 von %2 · %3 verbleiben - - - Today - Heute + + Checking folder changes + Prüfe Ordneränderungen - - - This week - Diese Woche + + Offline + Offline - - Less than a minute - Weniger als eine Minute + + Preparing sync + Synchronisierung wird vorbereitet - - 1 minute - 1 Minute + + See below for errors + Warnungen siehe unten - - %1 minutes - %1 Minuten + + See below for warnings + Warnungen siehe unten - - %1 hours - %1 Stunden + + Some files could not be synced! + Einige Dateien konnten nicht synchronisiert werden! - - 1 day - 1 Tag + + Some files couldn't be synced! + Einige Dateien konnten nicht synchronisiert werden! - - %1 days - %1 Tage + + Syncing changes + Synchronisiere Änderungen - - - OCC::Vfs Please choose a different location. %1 is a drive. It doesn't support virtual files. @@ -6030,6 +6141,9 @@ Server antwortete mit Fehler: %2 The Virtual filesystem feature requires a NTFS file system, %1 is using %2 Die Funktion "Virtuelles Dateisystem" erfordert ein NTFS-Dateisystem, %1 verwendet %2 + + + OCC::Systray Please choose a different location. %1 isn't a NTFS file system. It doesn't support virtual files. @@ -6044,139 +6158,132 @@ Server antwortete mit Fehler: %2 OCC::VfsDownloadErrorDialog - - Download error - Fehler beim Herunterladen + + Open main dialog + Hauptfenster öffnen + + + OCC::Theme - - Error downloading - Fehler beim Herunterladen + + <p>%1 %2</p> + <p>%1 %2</p> - - could not be downloaded - Konnte nicht heruntergeladen werden + + <p>%1 desktop client %2</p> + <p>%1 %2</p> - - > More details - > Weitere Details + <p>%1 Desktop Client</p> + <p>%1 Desktop-Client</p> - - More details - Weitere Details + + <p>%1 Desktop Client</p><p>Version %1. For more information please click <a href='%2'>here</a>.</p> + <p>%1 Desktop-Client</p><p>Version %1. Für weitere Informationen bitte <a href='%2'>hier</a> klicken.</p> - - Error downloading %1 - Fehler beim Herunterladen von %1 + + <p><small>Using virtual files plugin: %1</small></p> + <p><small>Plugin für virtuelle Dateien: %1</small></p> - - %1 could not be downloaded. - %1 konnte nicht heruntergeladen werden. + + <p>This release was supplied by %1.</p> + <p>Diese Version wird von %1 bereitgestellt</p>. - - - OCC::VfsSuffix - - - Error updating metadata due to invalid modification time - Fehler beim Aktualisieren der Metadaten aufgrund einer ungültigen Änderungszeit + + <p>This release was supplied by %1</p> + - - - OCC::VfsXAttr - - - Error updating metadata due to invalid modification time - Fehler beim Aktualisieren der Metadaten aufgrund einer ungültigen Änderungszeit + + <p>Version %1. For more information please click <a href='%2'>here</a>.</p> + <p>Version %1. Für weitere Informationen klicken Sie bitte <a href='%2'>hier</a>.</p> - - - OCC::WebEnginePage - - Invalid certificate detected - Ungültiges Zertifikat gefunden + + easy/0118 + easy/0108 + + + OCC::UnifiedSearchResultsListModel - - The host "%1" provided an invalid certificate. Continue? - Der Server "%1" hat ein ungültiges Zertifikat. Fortsetzen? + + Failed to fetch providers. + Anbieter konnten nicht abgerufen werden. - - - 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. + + Failed to fetch search providers for '%1'. Error: %2 + Konnte Suchanbieter für '%1' nicht abrufen. Fehler: %2 - - Please login with the account: %1 - Bitte mit folgendem Konto anmelden: %1 + + Search has failed for '%1'. Error: %2 + Suche nach '%1' fehlgeschlagen. Fehler: %2 - - - OCC::WelcomePage - - Form - Formular + + Search has failed for '%2'. + Suche nach '%2' fehlgeschlagen. + + + OCC::UpdateE2eeFolderMetadataJob - - Log in - Anmelden + + Failed to finalize item. + Fehler beim Fertigstellen des Elements. - - Sign up with provider - Mit Provider anmelden + + Failed to update folder metadata. + Fehler beim Aktualisieren der Ordner-Metadaten. + + + OCC::UpdateE2eeFolderUsersMetadataJob - - Keep your data secure and under your control - Halten Sie Ihre Daten sicher und unter Ihrer Kontrolle + Could not add or remove a folder user %1, for folder %2 + Ordner konnte nicht hinzugefügt oder entfernt werden. Benutzer %1 für Ordner %2 - - Secure collaboration & file exchange - Sichere Zusammenarbeit & Dateiaustausch + + Could not add or remove user %1 to access folder %2 + Benutzer %1 konnte nicht zum Zugriffsordner %2 hinzugefügt oder entfernt werden - - Easy-to-use web mail, calendaring & contacts - Einfach zu bedienende Webmail, Kalender & Kontakte + + Could not fetch public key for user %1 + Öffentlicher Schlüssel für den Benutzer %1 konnte nicht abgerufen werden - - Screensharing, online meetings & web conferences - Bildschirmfreigabe, Online-Meetings & Webkonferenzen + + Could not find root encrypted folder for folder %1 + Verschlüsselter Stammordner für den Ordner %1 nicht gefunden - - Host your own server - Eigenen Server betreiben + + Error updating metadata for a folder %1 + Fehler beim Aktualisieren der Metadaten für einen Ordner %1 - - - OCC::ownCloudGui - - Unsupported Server Version - Nicht unterstütze Server-Version + + Failed to unlock a folder. + Fehler beim Entsperren eines Ordners. + + + OCC::User - - 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. + + %1 notifications + %1 Benachrichtigungen @@ -6189,75 +6296,80 @@ Server antwortete mit Fehler: %2 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. - - Disconnected - Getrennt + + Resolve conflict + Konflikt lösen - - Disconnected from some accounts - Verbindungen zu einigen Konten getrennt + + Retry all uploads + Alle Uploads neu starten - - Disconnected from %1 - Von %1 getrennt + + You changed + - - Disconnected from accounts: - Verbindungen zu Konten getrennt: + + You created + - - Account %1: %2 - Konto %1: %2 + + You deleted + - - Please sign in - Bitte melden Sie sich an + + You renamed + + + + OCC::UserModel - - Signed out - Abgemeldet + + <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> - - Account synchronization is disabled - Konto-Synchronisierung ist deaktiviert + + Confirm Account Removal + Kontenentfernung bestätigen - - - Synchronization is paused - Synchronisierung ist pausiert + + Remove connection + Verbindung entfernen + + + OCC::UserStatusSelectorModel - - Folder %1: %2 - Ordner %1: %2 + + %1 hours + %1 Stunden - - Unresolved conflicts - Ungelöste Konflikte + + %1 minutes + %1 Minuten - - Up to date - Aktuell + + 1 hour + 1 Stunde - - Error during synchronization - Fehler bei der Synchronisierung + + 1 minute + 1 Minute - - No sync folders configured - Keine Ordner zur Synchronisierung konfiguriert + + 30 minutes + 30 Minuten @@ -6281,349 +6393,343 @@ Server antwortete mit Fehler: %2 macOS VFS für %1: Es ist ein Problem aufgetreten. - - There are no sync folders configured. - Es wurden keine Synchronisierungsordner konfiguriert. + + 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. - - Checking for changes in remote "%1" - Nach Änderungen in entfernten "%1" suchen + + Don't clear + Nicht löschen - - Checking for changes in local "%1" - Nach Änderungen in lokalem "%1" suchen + + Emojis are not supported. Some status functionality may not work. + Emoji-Funktion wird nicht unterstützt. Einige Benutzerstatus-Funktionen funktionieren unter Umständen nicht. - - Syncing %1 of %2 (%3 left) - Synchronisiere %1 von %2 (%3 übrig) + + Less than a minute + Weniger als eine Minute - - Syncing %1 of %2 - Synchronisiere %1 von %2 + + 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. - - Syncing %1 (%2 left) - Synchronisiere %1 (%2 übrig) + + This week + Diese Woche + + + OCC::Vfs - - Syncing %1 - Synchronisiere %1 + + The Virtual filesystem feature does not support a drive as sync root + Die Funktion „Virtuelles Dateisystem“ unterstützt kein Laufwerk als Synchronisierungsstamm - - %1 (%2, %3) - %1 (%2, %3) + + The Virtual filesystem feature is not supported on network drives + Die Funktion „Virtuelles Dateisystem“ wird auf Netzwerklaufwerken nicht unterstützt - - - OwncloudAdvancedSetupPage - - &Local Folder - &Lokaler Ordner + + The Virtual filesystem feature requires a NTFS file system, %1 is using %2 + Die Funktion "Virtuelles Dateisystem" erfordert ein NTFS-Dateisystem, %1 verwendet %2 + + + OCC::VfsDownloadErrorDialog - - Username - Benutzername + + %1 could not be downloaded. + %1 konnte nicht heruntergeladen werden. - - Local Folder - Lokaler Ordner + + > More details + > Weitere Details - - Choose different folder - Anderen Ordner wählen + + could not be downloaded + Konnte nicht heruntergeladen werden - - Server address - Serveradresse + + Download error + Fehler beim Herunterladen - - Sync Logo - Sync-Logo + + Error downloading + Fehler beim Herunterladen - - Synchronize everything from server - Alle Daten vom Server synchronisieren + + Error downloading %1 + Fehler beim Herunterladen von %1 - - Ask before syncing folders larger than - Fragen, bevor Ordner synchronisiert werden. Grenze: + + More details + Weitere Details + + + OCC::WebEnginePage - - MB - Trailing part of "Ask confirmation before syncing folder larger than" - MB + + Invalid certificate detected + Ungültiges Zertifikat gefunden - - Ask before syncing external storages - Fragen, bevor externe Speicher synchronisiert werden + + The host "%1" provided an invalid certificate. Continue? + Der Server "%1" hat ein ungültiges Zertifikat. Fortsetzen? + + + OCC::WebFlowCredentials - - Choose what to sync - Zu synchronisierende Elemente auswählen + + <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> - - Keep local data - Lokale Daten behalten + Please login with the account: %1 + Bitte mit folgendem Konto anmelden: %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> + + Please login with the user: %1 + - - Erase local folder and start a clean sync - Lokalen Ordner löschen und eine saubere Synchronisierung starten + + You have been logged out of %1 as user %2. Please login again + - - - OwncloudHttpCredsPage - - &Username - &Benutzername + 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 - - &Password - &Passwort + Easy-to-use web mail, calendaring & contacts + Einfach zu bedienende Webmail, Kalender & Kontakte - - - OwncloudSetupPage - - - TextLabel - TextLabel + + Form + Formular - - Logo - Logo + + Host your own server + Eigenen Server betreiben - - Server address - Serveradresse + + Keep your data secure and under your control + Halten Sie Ihre Daten sicher und unter Ihrer Kontrolle - - 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. + + Log in + Anmelden - - - QObject - - New folder - Neuer Ordner + Screensharing, online meetings & web conferences + Bildschirmfreigabe, Online-Meetings & Webkonferenzen - - Failed to create debug archive - Fehler beim Erstellen des Debug-Archivs + Secure collaboration & file exchange + Sichere Zusammenarbeit & Dateiaustausch - - Could not create debug archive in selected location! - Es konnte kein Debug-Archiv am ausgewählten Ort erstellt werden! + + Sign up with provider + Mit Provider anmelden + + + OCC::ownCloudGui - - You renamed %1 - Sie haben %1 umbenannt + + %1: %2 + %1: %2 - - You deleted %1 - Sie haben %1 gelöscht + + Account %1: %2 + Konto %1: %2 - - You created %1 - Sie haben %1 erstellt + + Account synchronization is disabled + Konto-Synchronisierung ist deaktiviert - - You changed %1 - Sie haben %1 geändert + + Disconnected from %1 + Von %1 getrennt - - Synced %1 - %1 synchronisiert + + Disconnected from accounts: + Verbindungen zu Konten getrennt: - - - %nd - delay in days after an activity - %nd%nd + + + Disconnected from some accounts + Verbindungen zu einigen Konten getrennt - - in the future - in der Zukunft + + Error during synchronization + Fehler bei der Synchronisierung - - - %nh - delay in hours after an activity - %nh%nh + + + Folder %1: %2 + Ordner %1: %2 - - now - jetzt + + macOS VFS for %1: A problem was encountered. + macOS VFS für %1: Es ist ein Problem aufgetreten. - - 1m - one minute after activity date and time - 1m + + macOS VFS for %1: Last sync was successful. + macOS VFS für %1: Letzte Synchronisierung war erfolgreich. - - - %nm - delay in minutes after an activity - %nm%nm + + + macOS VFS for %1: Sync is running. + macOS VFS für %1: Synchronisierung läuft. - - Some time ago - Vor einiger Zeit + + No sync folders configured + Keine Ordner zur Synchronisierung konfiguriert - - %1: %2 - this displays an error string (%2) for a file %1 - %1: %2 + + Please sign in + Bitte melden Sie sich an - - Paths beginning with '#' character are not supported in VFS mode. - Pfade, die mit dem Zeichen '#' beginnen, werden im VFS-Modus nicht unterstützt. + + Synchronization is paused + Synchronisierung ist pausiert - - - ResolveConflictsDialog - - Solve sync conflicts - Synchronisationskonflikte lösen + + Terms of service + Nutzungsbedingungen - - - %1 files in conflict - indicate the number of conflicts to resolve - %1 Dateikonflikt%1 Dateikonflikte + + + The server on account %1 runs an old and unsupported version %2. Using this client with unsupported server versions is untested and potentially dangerous. Proceed at your own risk. + - - 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. + + 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. - - All local versions - Alle lokalen Versionen + + There are no sync folders configured. + Es wurden keine Synchronisierungsordner konfiguriert. - - All server versions - Alle Serverversionen + + Unresolved conflicts + Ungelöste Konflikte - - Resolve conflicts - Konflikte lösen + + Unsupported Server Version + Nicht unterstütze Server-Version - - Cancel - Abbrechen + + Up to date + Aktuell - - - ShareDelegate - - Create a new share link - Neuen Freigabe-Link erstellen + + 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. + + + OCC::sesSnackBar - - Copied! - Kopiert! + + Success + Erfolg + + + OwncloudAdvancedSetupPage - - Share options - Freigabeoptionen + + &Keep local data + - - Copy share link location - Standort des Freigabelinks kopieren + + &Local Folder + &Lokaler Ordner - - - ShareDetailsPage - - An error occurred setting the share password. - Es ist ein Fehler beim Festlegen des Freigabekennworts aufgetreten. + + <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 dieses Kästchen markiert ist, + wird der vorhandene Inhalt im lokalen Ordner gelöscht, um eine saubere Synchronisierung + vom Server zu starten.</p><p>Klicken Sie dies nicht an, wenn der lokale Inhalt + in den Serverordner hochgeladen werden soll.</p></body></html> - - Edit share - Freigabe bearbeiten + <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> - - Dismiss - Verwerfen + + Ask before syncing external storages + Fragen bevor externe Speicher synchronisiert werden - - Share label - Freigabe-Label + + Ask before syncing folders larger than + Fragen bevor Ordner synchronisiert werden. Grenze: - - - Allow upload and editing - Hochladen und Bearbeiten erlauben + + Ask for confirmation before synchroni&zing folders larger than + - - View only - Nur anzeigen + + Ask for confirmation before synchronizing e&xternal storages + - - File drop (upload only) - Dateien ablegen (nur Hochladen) + + Choose different folder + Anderen Ordner wählen @@ -6631,9 +6737,9 @@ Server antwortete mit Fehler: %2 Weiterteilen erlauben - - Hide download - Download verbergen + + Keep local data + Lokale Daten behalten @@ -6646,14 +6752,14 @@ Server antwortete mit Fehler: %2 Passwortschutz - - Set expiration date - Ablaufdatum setzen + + S&ync everything from server + - - Note to recipient - Notiz an Empfänger + + Server + @@ -6666,462 +6772,533 @@ Server antwortete mit Fehler: %2 Freigabe aufheben - - Add another link - Weiteren Link hinzufügen + + Start a &clean sync (Erases the local folder!) + - - Share link copied! - Freigabelink kopiert! + + Sync Logo + Sync-Logo - - Copy share link - Freigabe-Link kopieren + + Synchronize everything from server + Alle Daten vom Server synchronisieren - - - ShareView + + + OwncloudHttpCredsPage - - Password required for new share - Passwort für neue Freigabe erforderlich + + &Password + &Passwort - - Share password - Freigabe-Passwort + + &Username + &Benutzername + + + OwncloudOAuthCredsPage - - Shared with you by %1 - Geteilt mit Ihnen von %1 + Copy link + Link kopieren - - Expires in %1 - Läuft ab in %1 + Please switch to your browser to proceed. + Bitte wechseln Sie zum Fortfahren in Ihren Browser. - - Sharing is disabled - Teilen ist deaktiviert + Re-open Browser + Browser erneut öffnen + + + OwncloudSetupPage - - This item cannot be shared. - Dieses Element kann nicht geteilt werden + + Register with a provider + - - Sharing is disabled. - Teilen ist deaktiviert. + + TextLabel + TextLabel - - - ShareeSearchField - - Search for users or groups… - Suche nach Benutzern oder Gruppen… + + 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. + + + OwncloudWizardResultPage Sharing is not available for this folder Teilen ist für diesen Ordner nicht verfügbar - - - SyncJournalDb + + + QObject + + + %n day ago + + + + + + + + + %n days ago + + + + + + + + + %n hour ago + + + + + + + + + %n hours ago + + + + + + + + + %n minute ago + + + + + + + + + %n minutes ago + + + + + + + + + %nd + + + + %nd + + + + + %nh + + + + %nh + + + + + %nm + + + + %nm + + - - Failed to connect database. - Fehler beim Verbinden mit der Datenbank. + + 1m + 1m - - - SyncStatus - - Sync now - Jetzt synchronisieren + + Could not create debug archive in selected location! + Es konnte kein Debug-Archiv am ausgewählten Ort erstellt werden! - - Resolve conflicts - Konflikte lösen + + Failed to create debug archive + Fehler beim Erstellen des Debug-Archivs - - - TalkReplyTextField - - Reply to … - Antworten an … + + in the future + in der Zukunft Send reply to chat message Antwort auf Chatnachricht senden - - - TrayWindowHeader - - Open local or group folders - Lokalen oder Gruppenordner öffnen + + New folder + Neuer Ordner - - More apps - Weitere Apps + + now + jetzt - - Open %1 in browser - %1 im Browser öffnen + + Paths beginning with '#' character are not supported in VFS mode. + Pfade, die mit dem Zeichen '#' beginnen, werden im VFS-Modus nicht unterstützt. - - - UnifiedSearchInputContainer - - Search files, messages, events … - Suche Dateien, Nachrichten und Termine … + + Some time ago + Vor einiger Zeit - - - UnifiedSearchPlaceholderView - - Start typing to search - Beginnen Sie mit der Eingabe, um zu suchen + + Synced %1 + %1 synchronisiert - - - UnifiedSearchResultFetchMoreTrigger - - Load more results - Weitere Ergebnisse laden + + 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. - - - UnifiedSearchResultItemSkeleton - - Search result skeleton. - Suchergebnis-Skelett. + + You changed %1 + Sie haben %1 geändert - - - UnifiedSearchResultListItem - - Load more results - Weitere Ergebnisse laden + + You created %1 + Sie haben %1 erstellt - - - UnifiedSearchResultNothingFound - - No results for - Keine Ergebnisse für + + You deleted %1 + Sie haben %1 gelöscht - - - UnifiedSearchResultSectionItem - - Search results section %1 - Suchergebnisse Abschnitt %1 + + You renamed %1 + Sie haben %1 umbenannt - - - UserLine - - - Switch to account - Zu Konto wechseln + + + ResolveConflictsDialog + + + %1 files in conflict + + %1 Datei im Konflikt + %1 Dateien im Konflikt + %1 Dateien im Konflikt + - - Current account status is online - Aktueller Kontostatus ist "Online" + + All local versions + Alle lokalen Versionen - - Current account status is do not disturb - Aktueller Kontostatus ist "Nicht stören" + + All server versions + Alle Serverversionen - - Account actions - Konto-Aktionen + + 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. - - Set status - Status setzen + + Resolve conflicts + Konflikte lösen - - - Log out - Abmelden + + Solve sync conflicts + Synchronisationskonflikte lösen + + + SesTrayHeader - - - Log in - Anmelden + + Open Nextcloud in browser + HiDrive Next im Browser öffnen - - Remove account - Konto löschen + + Website + Website - - - UserStatusSelector + + + ShareDelegate - - Online status - Online-Status + + Copied! + Kopiert! - - Online - Online + + Copy share link location + Standort des Freigabelinks kopieren - - Away - Abwesend + + Create a new share link + Neuen Freigabe-Link erstellen + + + ShareDetailsPage - - Do not disturb - Nicht stören + + Add another link + Weiteren Link hinzufügen - - Mute all notifications - Alle Benachrichtigungen stummschalten + + Allow resharing + Weiterteilen erlauben - - Invisible - Unsichtbar + + Allow upload and editing + Hochladen und Bearbeiten erlauben - - Appear offline - Offline erscheinen + + An error occurred setting the share password. + Es ist ein Fehler beim Festlegen des Freigabekennworts aufgetreten. - - Status message - Statusnachricht + + Copy share link + Freigabe-Link kopieren - - What is your status? - Wie ist Ihr Status? + + Custom Permissions + Benutzerdefinierte Berechtigungen - - Clear status message after - Statusnachricht löschen nach + Edit share + Freigabe bearbeiten - - Cancel - Abbrechen + + Enter the note to recipient + Geben Sie eine Notiz an den Empfänger ein - - Clear status message - Statusnachricht löschen + + File drop (upload only) + Dateien ablegen (nur Hochladen) - - Set status message - Statusnachricht setzen + + Hide download + Download verbergen - - - Utility - - %L1 B - %L1 B + + Note to recipient + Notiz an Empfänger - - %L1 TB - %L1 TB + + Password protect + Passwortschutz - - %L1 GB - %L1 GB + + Set expiration date + Ablaufdatum setzen - - %L1 MB - %L1 MB + Share label + Freigabe-Label - - %L1 KB - %L1 KB + + Share link copied! + Freigabelink kopiert! - - - %n year(s) - %n Jahr%n Jahre + + + Unshare + Freigabe aufheben - - - %n month(s) - %n Monat%n Monate + + + View only + Nur anzeigen - - - %n day(s) - %n Tag%n Tage + + + ShareView + + + Expires in %1 + Läuft ab in %1 - - - %n hour(s) - %n Stunde%n Stunden + + + Password required for new share + Passwort für neue Freigabe erforderlich - - - %n minute(s) - %n Minute%n Minuten + + + Share password + Freigabe-Passwort - - - %n second(s) - %n Sekunde%n Sekunden + + + Shared with you by %1 + Geteilt mit Ihnen von %1 - - %1 %2 - %1 %2 + + Sharing is disabled + Teilen ist deaktiviert - - - ValidateChecksumHeader - - The checksum header is malformed. - Der Prüfsummen-Header hat ein fehlerhaftes Format. + + Sharing is disabled. + Teilen ist deaktiviert. - - The checksum header contained an unknown checksum type "%1" - Der Prüfsummen-Header enthielt einen unbekannten Prüfsummentyp "%1" + + This item cannot be shared. + Dieses Element kann nicht geteilt werden + + + ShareeSearchField - - 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" + + Search for users or groups… + Suche nach Benutzern oder Gruppen… - - - main.cpp - - System Tray not available - Benachrichtigungsfeld (Taskleiste) ist nicht verfügbar. + + Sharing is not available for this folder + Teilen ist für diesen Ordner nicht verfügbar + + + SyncJournalDb %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() + + + SyncStatus - - <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> + + Sync now + Jetzt synchronisieren - - - progress + + + TalkReplyTextField - - Virtual file created - Virtuelle Datei erstellt + + Reply to … + Antworten an … - - Replaced by virtual file - Ersetzt durch virtuelle Datei + + Send reply to chat message + Antwort auf Chat-Nachricht senden + + + TestSetUserStatusDialog - - Downloaded - Heruntergeladen + + 7 days + 7 Tage + + + TrayFoldersMenuButton - - Uploaded - Hochgeladen + + Files + Dateien - - Server version downloaded, copied changed local file into conflict file - Serverversion heruntergeladen. Die bearbeitete lokale Datei wurde in eine Konfliktdatei kopiert. + Group folder button + Schaltfläche Gruppenordner - - Server version downloaded, copied changed local file into case conflict conflict file - Serverversion heruntergeladen, geänderte lokale Datei in Fallkonflikt-Konfliktdatei kopiert + + Open %1 in file explorer + "%1" im Dateiexplorer öffnen - - Deleted - Gelöscht + + Open group folder "%1" + Gruppenordner "%1" öffnen - - Moved to %1 - Verschoben nach %1 + + Open local folder + Lokalen Ordner öffnen - - Ignored - Ignoriert + + Open local folder "%1" + Lokalen Ordner "%1" öffnen - - Filesystem access error - Zugriffsfehler im Dateisystem + + Open local or group folders + Lokale- oder Gruppen-Ordner öffnen - - Error - Fehler + + User group and local folders menu + Menü für Benutzergruppen und lokale Ordner + + + TrayWindowHeader - - Updated local metadata - Lokale Metadaten aktualisiert + + More apps + Weitere Apps - - Updated local virtual files metadata - Metadaten für lokale virtuelle Dateien aktualisiert + + Open %1 in browser + %1 im Browser öffnen + + + UnifiedSearchInputContainer Updated end-to-end encryption metadata @@ -7133,35 +7310,50 @@ Server antwortete mit Fehler: %2 Unknown Unbekannt + + + UnifiedSearchPlaceholderView - - downloading - Lade herunter + + Start typing to search + Beginnen Sie mit der Eingabe, um zu suchen + + + UnifiedSearchResultFetchMoreTrigger uploading Lade hoch + + + UnifiedSearchResultNothingFound Downloading Lade herunter + + + UnifiedSearchResultSectionItem - - deleting - Lösche + + Search results section %1 + Suchergebnisse Abschnitt %1 + + + UserLine Uploading Lade hoch - - moving - Verschiebe + + Remove account + Konto löschen @@ -7169,19 +7361,22 @@ Server antwortete mit Fehler: %2 Lösche - - ignoring - Ignoriere + + Switch to account + Zu Konto wechseln + + + UserStatusSelector Moving Verschiebe - - error - Fehler + + Away + Abwesend @@ -7212,142 +7407,207 @@ Server antwortete mit Fehler: %2 theme - - Status undefined - Status undefiniert + + Invisible + Unsichtbar - - Waiting to start sync - Warte, um mit der Synchronisierung zu beginnen + + Mute all notifications + Alle Benachrichtigungen stummschalten - - Sync status is unknown - Synchronisierungsstatus ist unbekannt + + Online + Online - - Waiting to start syncing - Warte auf Beginn der Synchronisierung. + + Online status + Online-Status - - Sync is running - Synchronisierung läuft + + Set status message + Statusnachricht setzen - - Sync Success - Synchronisierung erfolgreich + + Status message + Statusnachricht - - Sync Success, some files were ignored. - Synchronisierung abgeschlossen, einige Dateien wurden ignoriert. + + What is your status? + Wie ist Ihr Status? + + + Utility - - Sync Error - Synchronisierungsfehler + + %L1 B + %L1 B - - Setup Error - Installationsfehler + + %L1 GB + %L1 GB - - Aborting … - Breche ab … + + %L1 KB + %L1 KB - - Sync was successful - Synchronisierung war erfolgreich + + %L1 MB + %L1 MB - - Sync was successful but some files were ignored - Synchronisierung war erfolgreich, aber einige Dateien wurden ignoriert + + %L1 TB + %L1 TB + + + + %n day(s) + + + + + + + + + %n hour(s) + + + + + + + + + %n minute(s) + + + + + + + + + %n month(s) + + + + + + + + + %n second(s) + + + + + + + + %n year(s) + + + + + + + + + ValidateChecksumHeader - - Error occurred during sync - Fehler beim Synchronisieren aufgetreten + + The checksum header contained an unknown checksum type '%1' + - - Error occurred during setup - Fehler bei der Einrichtung aufgetreten + + The checksum header contained an unknown checksum type "%1" + Der Prüfsummen-Header enthielt einen unbekannten Prüfsummentyp "%1" - - Preparing to sync - Synchronisierung wird vorbereitet + + The checksum header is malformed. + Der Prüfsummen-Header hat ein fehlerhaftes Format. - - Stopping sync - Beende Synchronisierung + + The downloaded file does not match the checksum, it will be resumed. + - - Sync is paused - Synchronisierung ist angehalten. + + 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" - - - utility + + + main.cpp - - Could not open browser - Konnte Browser nicht öffnen + + %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. + - - 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? + + %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. - - Could not open email client - Die E-Mail-Anwendung konnte nicht geöffnet werden + + System Tray not available + Benachrichtigungsfeld (Taskleiste) ist nicht verfügbar. + + + nextcloudTheme::about() - - 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? + <p><small>Built from Git revision <a href="%1">%2</a> on %3, %4 using Qt %5, %6</small></p> + <p><small>Gebaut von der git-Revision <a href="%1">%2</a> auf %3, %4 verwendet Qt %5, %6</small></p> + + + progress - - Always available locally - Immer lokal verfügbar + + Deleted + Gelöscht - - Currently available locally - Derzeit lokal verfügbar + + Deleting + Lösche - - Some available online only - Einige sind nur online abrufbar + + Downloaded + Heruntergeladen - - Available online only - Nur online verfügbar + + downloading + Herunterladen - - Make always available locally - Immer lokal verfügbar machen + + Downloading + Lade herunter - - Free up local space - Lokalen Speicherplatz freigeben + + error + Fehler @@ -7361,14 +7621,14 @@ Server antwortete mit Fehler: %2 OCC::AbstractPropagateRemoteDeleteEncrypted - - 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. + + Filesystem access error + Zugriffsfehler im Dateisystem - - "%1 Failed to unlock encrypted folder %2". - "%1 Der verschlüsselte Ordner %2 konnte nicht entsperrt werden". + + Ignored + Ignoriert @@ -7387,244 +7647,230 @@ Server antwortete mit Fehler: %2 OCC::OAuth - - Error returned from the server: <em>%1</em> - Fehler vom Server zurückgegeben: <em>%1</em> + + Ignoring + ignoriere - - There was an error accessing the "token" endpoint: <br><em>%1</em> - Fehler beim Zugriff auf den "Token"-Endpunkt: <br><em>%1</em> + + Moved to %1 + Verschoben nach %1 - - Empty JSON from OAuth2 redirect - Leeres JSON aus OAuth2-Redirect + + moving + Verschiebe - - Could not parse the JSON returned from the server: <br><em>%1</em> - Die JSON-Antwort des Servers konnte nicht geparst werden: <br><em>%1</em> + + Moving + Verschiebe - - The reply from the server did not contain all expected fields - Die Antwort des Servers hat nicht alle erwarteten Felder beinhaltet + + Replaced by virtual file + Ersetzt durch virtuelle Datei - - <h1>Login Error</h1><p>%1</p> - <h1>Anmeldefehler </h1><p>%1</p> + + Server version downloaded, copied changed local file into case conflict conflict file + Serverversion heruntergeladen, geänderte lokale Datei in Fallkonflikt-Konfliktdatei kopiert - - <h1>Wrong account</h1><p>You logged in with the account <em>%1</em>, but must log in with the account <em>%2</em>.<br>Please log out of %3 in another tab, then <a href='%4'>click here</a> and log in with %2.</p> - <h1>Falsches Konto</h1><p>Sie haben sich mit dem Konto <em>%1</em> angemeldet, müssen aber das Konto <em>%2</em> verwenden.<br>Bitte melden Sie sich von %3 in einem anderen Tab ab und <a href='%4'>klicken Sie hier</a>, um sich mit %2 anzumelden.</p> + + Server version downloaded, copied changed local file into conflict file + Serverversion heruntergeladen. Die bearbeitete lokale Datei wurde in eine Konfliktdatei kopiert. - - - OCC::OwncloudOAuthCredsPage - - Connect to %1 - Verbinden mit %1 + + Unknown + Unbekannt - - Login in your browser - In Ihrem Browser anmelden + + Updated local metadata + Lokale Metadaten aktualisiert - - - OCC::ShareUserLine - - Username - Benutzername + + Updated local virtual files metadata + Aktualisierte Metadaten für lokale virtuelle Dateien - - Can edit - Kann bearbeiten + + updating local metadata + Aktualisiere lokale Metadaten - - Note: - Notiz: + + Updating local metadata + Aktualisiere lokale Metadaten - - Password: - Passwort: + + Updating local virtual files metadata + Aktualisiere Metadaten für lokale virtuelle Dateien - - Expires: - Läuft ab: + + Uploaded + Hochgeladen - - - OwncloudOAuthCredsPage - - Please switch to your browser to proceed. - Bitte wechseln Sie zum Fortfahren in Ihren Browser. + + uploading + Lade hoch - - An error occurred while connecting. Please try again. - Es ist ein Fehler während des Verbindungsaufbaus aufgetreten. Bitte erneut versuchen. + + Uploading + Lade hoch - - Re-open Browser - Browser erneut öffnen + + Virtual file created + Virtuelle Datei erstellt + + + theme - - Copy link - Link kopieren + + Aborting … + Breche ab … - - - TrayFoldersMenuButton - - Open local or group folders - Lokale- oder Gruppen-Ordner öffnen + + Error occurred during setup + Fehler bei der Einrichtung aufgetreten - - Open local folder - Lokalen Ordner öffnen + + Error occurred during sync + Fehler beim Synchronisieren aufgetreten - - Connected - Verbunden + + Preparing to sync + Synchronisierung wird vorbereitet - - Disconnected - Getrennt + + Setup Error + Installationsfehler - - Group folder button - Schaltfläche Gruppenordner + + Status undefined + Status undefiniert - - Open local folder "%1" - Lokalen Ordner "%1" öffnen + + Stopping sync + Beende Synchronisierung - - Open group folder "%1" - Gruppenordner "%1" öffnen + + Sync Error + Synchronisierungsfehler - - Open %1 in file explorer - "%1" im Dateiexplorer öffnen + + Sync is paused + Synchronisierung ist angehalten. - - User group and local folders menu - Menü für Benutzergruppen und lokale Ordner + + Sync is running + Synchronisierung läuft - - - Window - - Nextcloud desktop main dialog - Nextcloud Desktop-Hauptdialog + + Sync status is unknown + Synchronisierungsstatus ist unbekannt - - Current account - Aktuelles Konto + + Sync Success + Synchronisierung erfolgreich - - - Resume sync for all - Synchronisierung für alle fortsetzen + + Sync Success, some files were ignored. + Synchronisierung abgeschlossen, einige Dateien wurden ignoriert. - - - Pause sync for all - Synchronisierung für alle pausieren + + Sync was successful + Synchronisierung war erfolgreich - - Add account - Konto hinzufügen + + Sync was successful but some files were ignored + Synchronisierung war erfolgreich, aber einige Dateien wurden ignoriert - - Add new account - Neues Konto hinzufügen + + Waiting to start sync + Warte, um mit der Synchronisierung zu beginnen - - Settings - Einstellungen + + Waiting to start syncing + Warte auf Beginn der Synchronisierung. + + + utility - - Exit - Beenden + + Always available locally + Immer lokal verfügbar - - Current account avatar - Avatar des aktuellen Kontos + + Available online only + Nur online verfügbar - - Current account status is online - Aktueller Kontostatus ist "Online" + + Could not open browser + Konnte Browser nicht öffnen - - Current account status is do not disturb - Aktueller Kontostatus ist "Nicht stören" + + Could not open email client + Die E-Mail-Anwendung konnte nicht geöffnet werden - - Account switcher and settings menu - Konto-Umschalter und Einstellungsmenü + + Currently available locally + Derzeit lokal verfügbar - - Open Nextcloud Talk in browser - Nextcloud Talk im Browser öffnen + + Free up local space + Lokalen Speicherplatz freigeben - - More apps - Weitere Apps + + Make always available locally + Immer lokal verfügbar machen - - Open %1 in browser - %1 im Browser öffnen + + Some available online only + Einige sind nur online abrufbar - - Unified search results list - Einheitliche Suchergebnisliste + + 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? - - - nextcloudTheme::about() - - <p><small>Built from Git revision <a href="%1">%2</a> on %3, %4 using Qt %5, %6</small></p> - <p><small>Gebaut von Git-Revision <a href="%1">%2</a> auf %3, %4 verwendet Qt %5, %6</small></p> + + 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? - - \ No newline at end of file + + diff --git a/translations/client_en.ts b/translations/client_en.ts index b19ed6c250080..20a5c3efcd333 100644 --- a/translations/client_en.ts +++ b/translations/client_en.ts @@ -1,4068 +1,7648 @@ - - - - + + + + + + &Launch on system startup + + + + + can edit + + + + + could not create folder %1 + + + + + Create debug archive + + + + + Create Folder + + + + + File Drop (Upload Only) + + + + + Last Sync was successful. + + + + + New %1 Update Ready + + + + + ok + + + + + Open %1 in Browser + + + + + Open Local Folder + + + + + Password Protect + + + + + Server Address + + + + + Setup Error. + + + + + share label + + + + + Show call notifications + + + + + Show server &notifications + + + + + There was an invalid response to an authenticated webdav request + + + + + timeout + + + + + Undefined State. + + + + + updating local virtual files metadata + Updating local virtual files metadata + + + + Use &monochrome icons + + + + + ActivityItem + + + In %1 + In %1 + + + + Open %1 locally + Open %1 locally + + + + ActivityItemContent + + + Dismiss + Dismiss + + + + Open file details + Open file details + + + + ActivityList + + + Activity list + Activity list + + + + No activities yet + No activities yet + + + + BasicComboBox + + + Clear status message menu + Delete status message menu + + + + CallNotificationDialog + + + Answer Talk call notification + + + + + Decline + Decline + + + + Decline Talk call notification + Decline Talk call notification + + + + Talk notification caller avatar + Talk notification caller avatar + + + CloudProviderWrapper - - %1 (%2, %3) - + + %1 (%2, %3) + %1 (%2, %3) + + + + Checking for changes in '%1' + + + + + Checking for changes in "%1" + Checking for changes in "%1" + + + + Help + Help + + + + Log out + Log out + + + + No recently changed files + + + + + Open website + Open website + + + + Pause synchronization + + + + + Quit sync client + + + + + Recently changed + + + + + Settings + Settings + + + + Sync paused + Sync paused + + + + Syncing + Syncing + + + + Syncing %1 + + + + + Syncing %1 (%2 left) + + + + + Syncing %1 of %2 + + + + + Syncing %1 of %2 (%3 left) + + + + + ConflictDelegate + + + Local version + + + + + Server version + + + + + CrashReporter + + + <html><head/><body><p><br/></p></body></html> + + + + + Abort + Abort + + + + Don't send + + + + + Gathering debug information... + Gathering debug information... + + + + Ready to send debug information (<a href="%1">view backtrace</a>). + + + + + Send this report + + + + + Sent! <b>Many thanks</b>. Please refer to crash <b>%1</b> in bug reports. + + + + + Tomahawk Crash Reporter + + + + + Uploaded %L1 of %L2 KB. + + + + + We cannot gather useful debug information on your system. + + + + + You can disable sending crash reports in the configuration dialog. + + + + + CurrentAccountHeaderButton + + + Account switcher and settings menu + + + + + Add account + - - Checking for changes in '%1' - + Add new account + Add new account - - Syncing %1 of %2 (%3 left) - + + Current account + - - Syncing %1 of %2 - + + Current account avatar + - - Syncing %1 (%2 left) - + + Current account status is do not disturb + - - Syncing %1 - + + Current account status is online + - - - No recently changed files - + + Exit + - - Sync paused - + + Pause sync for all + - - Syncing - + + Resume sync for all + + + + EditFileLocallyLoadingDialog - - Open website - + + Opening file for local editing + + + + EmojiPicker - - Recently changed - + + No recent emojis + + + + ErrorBox - - Pause synchronization - + + Error + Error + + + FakeHangingReply - - Help - + + Operation canceled + Operation canceled + + + FileDetailsPage - - Settings - + Activity + - - Log out - + Sharing + Sharing + + + FileDetailsWindow - - Quit sync client - + + 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 + + + Advanced + + + + + Enable virtual files + + + + + General settings + + + + + Signal file provider domain + + + + + Virtual files settings + + + + + FileProviderStorageInfo + + + %1 GB of %2 GB remote files synced + + + + + Evict local copies... + Evict local copies... + + + + Local storage use + + + + + FileProviderSyncStatus + + + All synced! + All synced! + + + FileSystem - - Could not make directories in trash - + Could not make directories in trash + Could not make directories in trash + + + + Could not move '%1' to '%2' + - - - Could not move '%1' to '%2' - + Could not move "%1" to "%2" + Could not move "%1" to "%2" - - Moving to the trash is not implemented on this platform - + + Could not remove folder "%1" + - - + + + Error removing "%1": %2 + + + + Moving to the trash is not implemented on this platform + Moving to the trash is not implemented on this platform + + + Flow2AuthWidget - - Browser Authentication - + + An error occurred while connecting. Please try again. + + + + + Browser Authentication + + + + + Logo + Logo + + + + Switch to your browser to connect your account + + + + + FolderWizardSelectiveSync + + + Add Folder Sync + Add Folder Sync + + + + Step 3 of 3: Selektive Synchronisation + Step 3 of 3: Selektive Synchronisation + + + + FolderWizardSourcePage + + + &Choose + &Choose + + + &Choose … + &Choose … + + + 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 + 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 + + + + 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 + + + Select a remote destination folder + Select a remote destination folder + + + + Step 2 of 3: Directory in your %1 + Step 2 of 3: Directory in your %1 + + + + KMessageWidget + + + &Close + &Close + + + + Close message + + + + + MainWindow + + + New activities + + + + + Nextcloud desktop main dialog + + + + + Unified search results list + + + + + OCC::AbstractNetworkJob + + + Connection timed out + + + + + Server replied "%1 %2" to "%3 %4" + + + + + Unknown error: network reply was deleted + + + + + OCC::AbstractPropagateRemoteDeleteEncrypted + + "%1 Failed to unlock encrypted folder %2". + + + + Wrong HTTP code returned by server. Expected 204, but received "%1 %2". + + + + + 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 + + + + + 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? + + + + An existing configuration from a legacy desktop client was detected. +Should an account import be attempted? + An existing configuration from a legacy desktop client was detected. +Should an account import be attempted? + + + + Could not import accounts from legacy client configuration. + + + + + End to end encryption mnemonic + + + + + Import + + + + + Legacy import + + + + + Skip + Skip + + + Successfully imported account from legacy client: %1 + + + + + OCC::AccountSettings + + + (experimental) + + + + + %1 (%3%) of %2 in use. Some folders, including network mounted or shared folders, might have different limits. + + + + + %1 as %2 + + + + + %1 as <i>%2</i> + + + + + %1 in use + + + + + %1 of %2 in use + + + + + <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 encryption + + + + + Enable virtual file support %1 … + + + + + Encrypt + + + + + Encrypt folder + + + + + Encryption failed + + + + + End-to-end Encryption + + + + + 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 + + + + + End-to-end Encryption with Virtual Files + + + + + Expand Memory + Expand Memory + + + + Folder creation failed + + + + + Force sync now + + + + + https://wl.hidrive.com/easy/0057 + https://wl.hidrive.com/easy/0077 + + + + No %1 connection configured. + + + + + No account configured. + + + + No connection to %1 at %2. + No connection to %1 at %2. + + + Obtaining authorization from the browser. <a href='%1'>Click here</a> to re-open the browser. + Obtaining authorization from the browser. <a href='%1'>Click here</a> to re-open the browser. + + + + 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 old and 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? + + + + + 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 synchronized because they are too big or external storages: + + + + + There are folders that were not synchronized 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. + +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> + + + + 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). + + + + + 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 + + + + + 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 + + + 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 + + + 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 + + + + + OCC::ActivityListModel + + + Fetching activities … + + + + + Files from the ignore list as well as symbolic links are not synced. + + + + + Files from the ignore list as well as symbolic links are not synced. This includes: + + + + + For more activities please open the Activity app. + + + + + Network error occurred: client will retry syncing. + + + + + OCC::AddCertificateDialog + + + An encrypted pkcs12 bundle is strongly recommended as a copy will be stored in the configuration file. + + + + + Browse … + + + + + Certificate & Key (pkcs12) : + + + + + Certificate & Key (pkcs12): + + + + + Certificate files (*.p12 *.pfx) + + + + + Certificate password : + + + + + Certificate password: + + + + + Select a certificate + + + + + SSL client certificate authentication + + + + + This server probably requires a SSL client certificate. + + + + + OCC::Application + + + %1 accounts + + + + + %1 folders + + + + + 1 account + + + + + 1 folder + + + + + Continue + + + + + deleting + + + + + Error accessing the configuration file + + + + + ignoring + + + + + Imported %1 and %2 from a legacy desktop client. +%3 + + + + + newer + + + + + older + + + + + Quit + + + + + Quit %1 + + + + + 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 user. + + + + + OCC::AuthenticationDialog + + + &Password: + + + + + &User: + + + + + &Username: + + + + + Authentication Required + + + + + Enter username and password for '%1' at %2. + + + + + Enter username and password for "%1" at %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 + + + + + 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. + + + + + 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. + + + + + OCC::CaseClashFilenameDialog + + + %1 does not support equal file names with only letter casing differences. + + + + + 0 byte + + + + + Case Clash Conflict + + + + + Case clashing file + + + + + Existing file + + + + + file A + + + + + file B + + + + + Filename contains illegal characters: %1 + + + + + New filename + + + + + Open clashing file + + + + + Open existing file + + + + + 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. + + + + + The file could not be synced because it generates a case clash conflict with an existing file on this system. + + + + + today + + + + + Use invalid name + + + + + OCC::CleanupPollsJob + + + Error writing metadata to the database + + + + + OCC::ClientSideEncryption + + + Enter E2E passphrase + + + + + Please enter your end to end encryption passphrase:<br><br>User: %2<br>Account: %3<br> + + + + + Please enter your end-to-end encryption passphrase:<br><br>Username: %2<br>Account: %3<br> + + + + + OCC::ConflictDialog + + + <a href="%1">Open local version</a> + + + + + <a href="%1">Open server version</a> + + + + + Click to open the file + + + + + Conflicting versions of %1. + + + + + Keep both versions + + + + + Keep local version + + + + + Keep selected version + + + + + Keep server version + + + + + Open local version + + + + + Open 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. + + + + + 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? + + + + + Moving file failed: + +%1 + + + + + OCC::ConnectionValidator + + + Authentication error: Either username or password are wrong. + + + + + Connection issue + + + + + 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 + + + + + OCC::DiscoveryMainThread + + + Aborted by the user + + + + + OCC::DiscoveryPhase + + + Error while canceling deletion of %1 + + + + + Error while canceling deletion of a file + + + + + 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! + + + + + Server error: PROPFIND reply is not XML formatted! + + + + + The server file discovery reply is missing data. + + + + + 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 + + + + + OCC::EditLocallyJob + + + An error occurred during data retrieval. + + + + + An error occurred during setup. + + + + + An error occurred trying to synchronise the file to edit locally. + + + + + An error occurred trying to verify the request 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 find an account for local editing. + + + + + Could not open %1 + + + + + Could not start editing locally. + + + + + Could not validate the request to open a file from server. + + + + + File %1 already locked. + + + + + File %1 could not be locked. + + + + + File %1 now locked. + + + + + Invalid file path was provided. + + + + + Invalid local file path. + + + + + Invalid token received. + + + + + Lock will last for %1 minutes. You can also unlock this file manually once you are finished editing. + + + + + Please try again. + + + + + OCC::EncryptFolderJob + + + Could not generate the metadata for encryption, Unlocking the folder. +This can be an issue with your OpenSSL libraries. + + + + + OCC::EncryptedFolderMetadataHandler + + + Error fetching encrypted folder ID. + + + + + Error fetching metadata. + + + + + Error locking folder. + + + + + Error parsing or decrypting metadata. + + + + + Failed to upload metadata + + + + + OCC::FileDetails + + + %1 day(s) ago + + + + %1 day(s) ago + + + + + %1 hour(s) ago + + + + %1 hour(s) ago + + + + + %1 minute(s) ago + + + + %1 minute(s) ago + + + + + %1 month(s) ago + + + + %1 month(s) ago + + + + + %1 second(s) ago + + + + %1 second(s) ago + + + + + %1 year(s) ago + + + + %1 year(s) ago + + + + + Locked by %1 - Expires in %2 minute(s) + + + + Locked by %1 - Expires in %2 minute(s) + + + + + 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> + + + + + There was an error accessing the "token" endpoint: <br><em>%1</em> + + + + + OCC::Flow2AuthCredsPage + + + Login in your browser (Login Flow v2) + + + + + OCC::Flow2AuthWidget + + + Copy Link + Copy Link + + + + Link copied to clipboard. + + + + + Open Browser + Open Browser + + + + Polling for authorization + + + + + Reopen Browser + Reopen Browser + + + + Starting authorization + + + + + Unable to open the Browser, please copy the link to your Browser. + + + + + Waiting for authorization + + + + + OCC::Folder + + + %1 and %n other file(s) are currently locked. + + + + + + + + + %1 and %n other file(s) could not be synced due to errors. See the log for details. + + + + + + + + + %1 and %n other file(s) have been added. + + + + + + + + + %1 and %n other file(s) have been downloaded. + + + + + + + + + %1 and %n other file(s) have been removed. + + + + + + + + + %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 been added. + + + + + %1 has been downloaded. + + + + + %1 has been moved to %2 and %n other file(s) have been moved. + + + + + + + + + %1 has been moved to %2. + + + + + %1 has been removed. + + + + + %1 has been renamed to %2 and %n other file(s) have been renamed. + + + + + + + + + %1 has been renamed to %2. + + + + + %1 has been updated. + + + + + %1 is currently locked. + + + + + %1 is not readable. + + + + + %1 should be a folder but is not. + + + + + 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. + A large number of files on 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. + 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. + + + + + All files got deleted from your local sync folder '%1'. +These files will be deleted from the server and will not be available on your other devices if they will not be restored. +If this action was unintended you can restore the lost data now. + + + + All files in the local folder "%1" were deleted. + +If you restore the files, they will be downloaded again from the server. + All files in the local folder "%1" were deleted. + +If you restore the files, they will be downloaded again from the server. + + + All files in the server folder "%1" were deleted. + +If you restore the files, they will be uploaded again to the server. + All files in the server folder "%1" were deleted. + +If you restore the files, they will be uploaded again to the server. + + + + All files in the sync folder '%1' were deleted on the server. +These deletes will be synchronized to your local sync folder, making such files unavailable unless you have a right to restore. +If you decide to restore the files, they will be re-synced with the server if you have rights to do so. +If you decide to delete the files, they will be unavailable to you, unless you are the owner. + + + + All files in the sync folder "%1" folder were deleted on the server. +These deletes will be synchronized to your local sync folder, making such files unavailable unless you have a right to restore. +If you decide to restore the files, they will be re-synced with the server if you have rights to do so. +If you decide to delete the files, they will be unavailable to you, unless you are the owner. + All files in the sync folder "%1" folder were deleted on the server. +These deletes will be synchronized to your local sync folder, making such files unavailable unless you have a right to restore. +If you decide to restore the files, they will be re-synced with the server if you have rights to do so. +If you decide to delete the files, they will be unavailable to you, unless you are the owner. + + + All files in the sync folder "%1" folder were deleted on the server. +These deletes will be synchronized to your local sync folder, making such files unavailable unless you have a right to restore. +If you decide to restore the files, they will be re-synced with the server if you have rights to do so. +If you decide to delete the files, they will be unavailable to you, unless you are the owner. + All files in the sync folder "%1" folder were deleted on the server. +These deletes will be synchronized to your local sync folder, making such files unavailable unless you have a right to restore. +If you decide to restore the files, they will be re-synced with the server if you have rights to do so. +If you decide to delete the files, they will be unavailable to you, unless you are the owner. + + + All the files in your local sync folder "%1" were deleted. These deletes will be synchronized with your server, making such files unavailable unless restored. +Are you sure you want to sync those actions with the server? +If this was an accident and you decide to keep your files, they will be re-synced from the server. + All the files in your local sync folder "%1" were deleted. These deletes will be synchronized with your server, making such files unavailable unless restored. +Are you sure you want to sync those actions with the server? +If this was an accident and you decide to keep your files, they will be re-synced from the server. + + + + Backup detected + + + + + 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). + +%1 + + + + + Could not read system exclude file + + + + + Delete all files + + + + + Delete all files? + + + + Keep files + Keep files + + + + Keep Local Files as Conflict + + + + + Keep syncing + + + + + Local folder %1 does not exist. + + + + + Normal Synchronisation + + + + + Please go in the settings to select it if you wish to download it. + + + + Proceed to remove all files + Proceed to remove all files + + + + Proceed with Deletion + Proceed with deletion + + + Remove all files + Remove all files + + + + Remove all files? + Remove all files? + + + Remove All Files? + Remove All Files? + + + + Restore deleted files + + + + Restore files + Restore 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. + + + + + This sync would reset the files to an earlier time in the sync folder '%1'. +This might be because a backup was restored on the server. +Continuing the sync as normal will cause all your files to be overwritten by an older file in an earlier state. Do you want to keep your local most recent files as conflict files? + + + + + Virtual file download failed with code "%1", status "%2" and error message "%3" + + + + + Would you like to stop syncing this folder? + + + + + OCC::FolderCreationDialog + + + %1 Create new folder + %1 Create new folder + + + + Could not create a folder! Check your write permissions. + + + + + Enter folder name + + + + + Folder already exists + + + + + OCC::FolderMan + + + (backup %1) + + + + + (backup) + + + + + %1 (Sync is paused) + + + + + 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 + + + + + Last sync was successful. + + + + + No valid folder selected! + + + + + Preparing for sync. + + + + + Setup error. + + + + + Sync finished with unresolved conflicts. + + + + + Sync is paused. + + + + + Sync is running. + + + + + Sync request was cancelled. + + + + + Sync was successful, unresolved conflicts. + + + + + Syncing %1 (A few seconds left) + + + + + 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. +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. + + + + + The folder %1 is used in a folder sync connection! + + + + + The local folder %1 already contains a folder used in a folder sync connection. Please pick another one! + + + + + The local folder %1 is already contained in a folder used in a folder sync connection. Please pick another one! + + + + + The selected path does not exist! + + + + + The selected path is not a folder! + + + + + There is already a sync from the server to this local folder. Please pick another local folder! + + + + + Undefined state. + + + + + User Abort. + + + + + Waiting to start syncing. + + + + + You have no permission to write to the selected folder! + + + + + OCC::FolderStatusDelegate + + Add Folder Sync Connection + + + + + Add live backup + Add Folder Sync Connection + + + + File + + + + + Synchronize any other local folder with your %1 + Synchronize any other local folder with your %1 + + + + Synchronized with local folder (%1) + + + + + OCC::FolderStatusModel + + + , + + + + + , '%1' + + + + + '%1' + + + + + %1 (%2) + + + + + %1 %2 + + + + + %1 %2 … + + + + + %1 %2 (%3 of %4) + + + + + %1 of %2, file %3 of %4 + + + + + %5 left, %1 of %2, file %3 of %4 + + + + + ↑ %1/s + + + + + ↓ %1/s + + + + + A few seconds left, %1 of %2, file %3 of %4 + + + + + 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. + + + + + Could not decrypt! + + + + + download %1/s + + + + + Download %1/s + + + + + Error while loading the list of folders from the server. + + + + + Fetching folder list from server … + + + + + file %1 of %2 + + + + + File %1 of %2 + + + + + Preparing to sync … + + + + + Reconciling changes + + + + + Synchronizing files in local folder + + + + + Synchronizing virtual files in local folder + + + + + Synchronizing VirtualFiles with local folder + + + + + Synchronizing with local folder + + + + + Syncing local and remote changes + + + + + There are unresolved conflicts. Click for details. + + + + + upload %1/s + + + + + Upload %1/s + + + + + Virtual file support is enabled. + + + + + Waiting … + + + + + Waiting for %n other folder(s) … + + + + + + + + + You need to be connected to add a folder + + + + + 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 Sync Connection + + + + + OCC::FolderWizardLocalPath + + + Choose + Choose + + + + Click to select a local folder to sync. + + + + + Enter the path to the local folder. + + + + + Select the source folder + + + + + OCC::FolderWizardRemotePath + + + Authentication failed accessing %1 + + + + + Choose this to sync the entire account + + + + + 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": + + + + + Failed to create the folder on %1. Please check manually. + + + + + Failed to list a folder. Error: %1 + + + + + Folder was successfully created on %1. + + + + + This folder is already being synced. + + + + + You are already syncing <i>%1</i>, which is a parent folder of <i>%2</i>. + + + + + You are already syncing <i>%1</i>, which is a subfolder of <i>%2</i>. + + + + + OCC::FolderWizardSelectiveSync + + + Use virtual files instead of downloading content immediately %1 + + + + + Virtual files are not available for the selected folder + + + + + Virtual files are not supported for Windows partition roots as local folder. Please choose a valid subfolder under drive letter. + + + + + OCC::FormatWarningsWizardPage + + <b>Warning:</b> + <b>Warning:</b> + + + <b>Warning:</b> %1 + <b>Warning:</b> %1 + + + + 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. + + + + + 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. + + + + + - enterprise: contains stable versions for customers. + +Downgrading versions is not possible immediately: changing from stable to enterprise means waiting for the new enterprise version. + + + + + &Analysis data collection for needs-based design + &Analysis data collection for needs-based design + + + &Automatically check for Updates + &Automatically check for Updates + + + + &Automatically check for updates + + + + &Channel + &Channel + + + &Check for Update now + &Check for Update now + + + &Launch on System Startup + &Launch on System Startup + + + + &Restart && Update + + + + About + About + + + + Ask for confirmation before + synchronizing new folders larger than + Ask for confirmation before synchronizing new folders larger than + + + + Ask for confirmation before synchronizing + external storages + Ask for confirmation before synchronizing external storages + + + Ask for confirmation before synchronizing external storages + Ask for confirmation before synchronizing external storages + + + Ask for confirmation before synchronizing folders larger than + Ask for confirmation before synchronizing 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 + + + Automatically disable synchronisation of folders that overcome limit + + + + + beta + + + + + Change update channel + + + + + Change update channel? + + + + + Changing update channel? + + + + + Check Now + + + + + Create Debug Archive + + + + + daily + + + + + Data Protection + Data Protection + + + + Debug Archive Created + + + + + Debug archive is created at %1 + + + + + Desktop client x.x.x + + + + + Edit &Ignored Files + + + + + enterprise + + + + + For System Tray + + + + + General Settings + + + + Info + + + + Legal notice + + + + + Legal Notice + + + + MB + MB + + + + More Information + More Information + + + + Move removed files to trash + + + + + Notify when synchronised folders grow + larger than specified limit + 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 + + + + S&how crash reporter + + + + + Server notifications that require attention. + + + + + Show call notification dialogs. + + + + Show Call Notifications + + + + + Show chat notification dialogs. + + + + + Show Chat Notifications + + + + Show Server &Notifications + Show Server &Notifications + + + + Show sync folders in &Explorer's navigation + pane + Show sync folders in &Explorer's navigation pane + + + Show sync folders in &Explorer's Navigation Pane + Show sync folders in &Explorer's Navigation Pane + + + Show sync folders in &Explorer's navigation pane + + + + + stable + + + + + The channel determines which upgrades will be offered to install: +- stable: contains tested versions considered reliable + + + + + The update channel determines which client updates will be offered for installation. The "stable" channel contains only upgrades that are considered reliable, while the versions in the "beta" channel may contain newer features and bugfixes, but have not yet been tested thoroughly. + +Note that this selects only what pool upgrades are taken from, and that there are no downgrades: So going back from the beta channel to the stable channel usually cannot be done immediately and means waiting for a stable version that is newer than the currently installed beta version. + + + + + Update channel + + + + + Updates + + + + + Usage Documentation + + + + Use &Monochrome Icons + Use &Monochrome Icons + + + + You cannot disable autostart because system-wide autostart is enabled. + + + + + Zip Archives + + + + + 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 + + + + + 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>User: %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 + + + 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. + + + + + 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: + + + Add Ignore Pattern + Add Ignore Pattern + + + + Add New Ignore Pattern + Add New Ignore Pattern + + + + Allow Deletion + + + + + Cannot write changes to '%1'. + + + + + 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. + 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 that match this pattern will not be synchronized. + +Objects that are allowed to be deleted will be deleted if they would prevent a folder from being deleted. This is useful for metadata. + Files or folders that match this pattern will not be synchronized. + +Objects that are allowed to be deleted will be deleted if they would prevent a folder from being deleted. This is useful for metadata. + + + + Ignore Pattern + Ignore Pattern + + + + Pattern + + + + + Remove + + + + + Remove all + + + + + 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 local file. %1 + + + + + Invalid filename + + + + + 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 the server. + + + + + 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 following basenames are not allowed: %1 + + + + + The following characters are not allowed on the system: * " | & ? , ; : \ / ~ < > leading/trailing spaces + + + + + The following characters are not allowed: %1 + + + + + The following file extensions are not allowed: %1 + + + + + The following filenames are not allowed: %1 + + + + + OCC::LegalNotice + + + <p>Copyright 2017-2020 Nextcloud GmbH<br />Copyright 2012-2018 ownCloud GmbH</p> + - - Please switch to your browser to proceed. - + + <p>Copyright 2017-2023 Nextcloud GmbH<br />Copyright 2012-2023 ownCloud GmbH</p> + - - An error occurred while connecting. Please try again. - + + <p>Licensed under the GNU General Public License (GPL) Version 2.0 or any later version.</p> + - - Re-open Browser - + + Close + + + + OCC::LogBrowser - - Copy link - + + &Capture debug messages + - - - FolderWizardSourcePage - - Pick a local folder on your computer to sync - + + &Find + - - &Choose … - + + &Search: + - - - FolderWizardTargetPage - - Select a remote destination folder - + + Clear + - - Create Folder - + + Clear the log display. + - - Refresh - + + Could not write to log file %1 + - - Folders - + + Enable logging to temporary folder + - - - OCC::AbstractNetworkJob - - Connection timed out - + + Log Output + - - Unknown error: network reply was deleted - + + Permanently save logs + - - Server replied "%1 %2" to "%3 %4" - + + S&ave + - - - OCC::AccountManager - - End to end encryption mnemonic - + + Save log file + - - 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). - + + Save the log file to a file on disk for debugging. + - - - OCC::AccountSettings - - Unchecked folders will be <b>removed</b> from your local file system and will not be synchronized to this computer anymore - + + 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 + - - Synchronize all - + + This setting persists across client restarts. +Note that using any logging command line options will override this setting. + - - Synchronize none - + + When this option is enabled and no other logging is configured, logs will be written to a temporary folder and expire after a few hours. This setting persists across client restarts. + +Logs will be written to %1 + + + + OCC::Logger - - Apply manual changes - + + <nobr>File '%1'<br/>cannot be opened for writing.<br/><br/>The log output can <b>not</b> be saved!</nobr> + - - Apply - + + <nobr>File "%1"<br/>cannot be opened for writing.<br/><br/>The log output <b>cannot</b> be saved!</nobr> + + + + OCC::Mac::FileProviderEditLocallyJob - - Storage space: … - + + Could not find a file for local editing.Make sure its path is valid and it is synced locally. + - - - - Cancel - + + Could not get file ID. + - - Connected with <server> as <user> - + + Could not get file identifier. + - - No account configured. - + + The file identifier is empty. + + + + OCC::NSISUpdater - - This account supports end-to-end encryption - + + <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> + - - Enable encryption - + + <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> + - - Encrypt - + + Ask again later + - - - Edit Ignored Files - + + Get update + - - Choose what to sync - + + New Version Available + - - Force sync now - + + Restart and update + - - Restart sync - + + Skip this time + - - Remove folder sync connection - + + Skip this version + - - Folder creation failed - + + Update Failed + - - Confirm Folder Sync Connection Removal - + + Update manually + + + + OCC::NetworkSettings - - Remove Folder Sync Connection - + + : + - - Sync Running - + + Download Bandwidth + - - The syncing operation is running.<br/>Do you want to terminate it? - + + Host + - - %1 in use - + + Hostname of proxy server + - - %1 as <i>%2</i> - + + HTTP(S) proxy + - - The server version %1 is old and unsupported! Proceed at your own risk. - + + KBytes/s + - - Connected to %1. - + + Limit automatically + - - Server %1 is temporarily unavailable. - + + Limit to + - - Server %1 is currently in maintenance mode. - + + Limit to 3/4 of estimated bandwidth + - - Signed out from %1. - + + Manually specify proxy + - - Obtaining authorization from the browser. <a href='%1'>Click here</a> to re-open the browser. - + + No limit + - - No connection to %1 at %2. - + No Proxy + No Proxy - - There are folders that were not synchronized because they are too big: - + + No proxy + - - There are folders that were not synchronized because they are external storages: - + + Note: proxy settings have no effects for accounts on localhost + - - There are folders that were not synchronized because they are too big or external storages: - + + Password for proxy server + - - Confirm Account Removal - + + Proxy server requires authentication + - - <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> - + + Proxy Settings + - - Remove connection - + + SOCKS5 proxy + - - - Open folder - + Specify proxy manually as + Specify proxy manually as - - Resume sync - + + Upload Bandwidth + - - Pause sync - + + Use global settings + - - <p>Could not create local folder <i>%1</i>.</p> - + + Use system proxy + - - <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> - + + Username for proxy server + + + + OCC::OAuth - - %1 (%3%) of %2 in use. Some folders, including network mounted or shared folders, might have different limits. - + <h1>Login Error</h1><p>%1</p> + <h1>Login Error</h1><p>%1</p> - - %1 of %2 in use - + <h1>Wrong account</h1><p>You logged in with the account <em>%1</em>, but must log in with the account <em>%2</em>.<br>Please log out of %3 in another tab, then <a href='%4'>click here</a> and log in with %2.</p> + - - Currently there is no storage usage information available. - + + <h1>Wrong user</h1><p>You logged-in with user <em>%1</em>, but must login with user <em>%2</em>.<br>Please log out of %3 in another tab, then <a href='%4'>click here</a> and log in as user %2</p> + - - Connecting to %1 … - + Empty JSON from OAuth2 redirect + Empty JSON from OAuth2 redirect + + + OCC::OCUpdater - - No %1 connection configured. - + + %1 available. Restart application to start the update. + - - - OCC::AccountState - - Signed out - + + %1 version %2 available. Restart application to start the update. + - - Disconnected - + + A new update for %1 is about to be installed. The updater may ask +for additional privileges during the process. + - - Connected - + + 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. + - - Service unavailable - + + Checking update server … + - - Maintenance mode - + + Could not check for new updates. + - - Network error - + + Could not download update. Please click <a href='%1'>here</a> to download the update manually. + - - Configuration error - + + Could not download update. Please open %1 to download the update manually. + - - Asking Credentials - + + Could not download update. Please open <a href='%1'>%1</a> to download the update manually. + - - Unknown account state - + + Downloading %1 … + - - - OCC::ActivityListModel - - Files from the ignore list as well as symbolic links are not synced. This includes: - + + Downloading %1. Please wait … + - - For more activities please open the Activity app. - + + Downloading version %1. Please wait … + - - - OCC::AddCertificateDialog - - SSL client certificate authentication - + + New %1 is available. Please open %2 to download the update. + - - This server probably requires a SSL client certificate. - + + New %1 is available. Please open <a href='%2'>%2</a> to download the update. + - - Certificate & Key (pkcs12) : - + + New %1 update ready + - - Browse … - + + New %1 version %2 is available. Please click <a href='%3'>here</a> to download the update. + - - Certificate password : - + + No updates available. Your installation is at the latest version. + - - Select a certificate - + + Update Check + - - Certificate files (*.p12 *.pfx) - + + Update status is unknown: Did not check for new updates. + - - - OCC::Application + + + OCC::OwncloudAdvancedSetupPage - - Error accessing the configuration file - + + (%1) + - - There was an error while accessing the configuration file at %1. Please make sure the file can be accessed by your user. - + + %1 folder '%2' is synced to local folder '%3' + - - Quit %1 - + + %1 folder "%2" is synced to local folder "%3" + - - - OCC::AuthenticationDialog - - Authentication Required - + + %1 free space + - - Enter username and password for '%1' at %2. - + + <p><small><strong>Warning:</strong> The local folder is not empty. Pick a resolution!</small></p> + - - &User: - + + Connect + - - &Password: - + + Connect … + - - - OCC::CleanupPollsJob - - Error writing metadata to the database - + + Free space: %1 + - - - OCC::ClientSideEncryption - - Please enter your end to end encryption passphrase:<br><br>User: %2<br>Account: %3<br> - + + Local Sync Folder + - - Enter E2E passphrase - + + Setup local folder options + - - - OCC::ConnectionValidator - - The configured server for this client is too old - + + Sync the folder '%1' + - - Please update to the latest server and restart the client. - + + Sync the folder "%1" + - - Authentication error: Either username or password are wrong. - + + There isn't enough free space in the local folder! + - - No Nextcloud account configured - + + Use &virtual files instead of downloading content immediately %1 + - - timeout - + + Warning: The local folder is not empty. Pick a resolution! + + + + OCC::OwncloudConnectionMethodDialog - - The provided credentials are not correct - + + <html><head/><body><p>Failed to connect to the secure server address <em>%1</em>. How do you wish to proceed?</p></body></html> + - - - OCC::DiscoveryMainThread - - Aborted by the user - + + <html><head/><body><p>Failed to connect to the secure server address specified. How do you wish to proceed?</p></body></html> + - - - OCC::DiscoverySingleDirectoryJob - - The server file discovery reply is missing data. - + + Configure client-side TLS certificate + - - - OCC::Flow2Auth - - - Error returned from the server: <em>%1</em> - + + Connection failed + - - - There was an error accessing the 'token' endpoint: <br><em>%1</em> - + + Retry unencrypted over HTTP (insecure) + - - - Could not parse the JSON returned from the server: <br><em>%1</em> - + + Select a different URL + + + + OCC::OwncloudHttpCredsPage - - - The reply from the server did not contain all expected fields - + + &Email + - - - OCC::Flow2AuthCredsPage - - Connect to %1 - + + Connect to %1 + - - Login in your browser (Login Flow v2) - + + Enter user credentials + - - - OCC::Flow2AuthWidget + + + OCC::OwncloudOAuthCredsPage - - Unable to open the Browser, please copy the link to your Browser. - + Login in your browser + Login in your browser + + + OCC::OwncloudPropagator - - Waiting for authorization - + Error with the metadata. Getting unexpected metadata format. + - - Polling for authorization - + + Impossible to get modification time for file in conflict %1 + + + + OCC::OwncloudSetupPage - - Starting authorization - + + &Next > + - - Link copied to clipboard. - + + Could not load certificate. Maybe wrong password? + - - - OCC::Folder - - Local folder %1 does not exist. - + + Server address does not seem to be valid + - - %1 should be a folder but is not. - + + Setup %1 server + - - %1 is not readable. - + + The link to your %1 web interface when you open it in the browser. + - - %1 has been removed. - %1 names a file. - + + This URL is NOT secure as it is not encrypted. +It is not advisable to use it. + - - %1 has been downloaded. - %1 names a file. - + + This URL is secure. You can use it. + + + + OCC::OwncloudSetupWizard - - %1 has been updated. - %1 names a file. - + + <font color="green"><b>Local sync folder %1 successfully created!</b></font> + - - %1 has been renamed to %2. - %1 and %2 name files. - + + <font color="green">Successfully connected to %1: %2 version %3 (%4)</font><br/><br/> + - - %1 has been moved to %2. - - - - - %1 and %n other file(s) have been removed. - - - - - - - - %1 and %n other file(s) have been downloaded. - - - - - - - - %1 and %n other file(s) have been updated. - - - - - - - - %1 has been renamed to %2 and %n other file(s) have been renamed. - - - - - - - - %1 has been moved to %2 and %n other file(s) have been moved. - - - - - - - - %1 has and %n other file(s) have sync conflicts. - - - - + + <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> + - - %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. - - - - + + A sync connection from %1 to remote directory %2 was set up. + - - %1 could not be synced due to an error. See the log for details. - - - - - %1 and %n other file(s) are currently locked. - - - - + + Can't 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. + - - %1 is currently locked. - + + 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. + - - Sync Activity - + + Connection to %1 could not be established. Please check again. + - - Could not read system exclude file - + + Could not create local folder %1 + - - A new folder larger than %1 MB has been added: %2. - - + + creating folder on Nextcloud: %1 + - - A folder from an external storage has been added. - - + + Creating local sync folder %1 … + - - Please go in the settings to select it if you wish to download it. - + + Error: %1 + - - The folder %1 was created but was excluded from synchronization previously. Data inside it will not be synchronized. - + + Failed to connect to %1 at %2:<br/>%3 + - - The file %1 was created but was excluded from synchronization previously. It will not be synchronized. - + + failed. + - - 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). - -%1 - + + Folder rename failed + - - All files in the sync folder '%1' were deleted on the server. -These deletes will be synchronized to your local sync folder, making such files unavailable unless you have a right to restore. -If you decide to restore the files, they will be re-synced with the server if you have rights to do so. -If you decide to delete the files, they will be unavailable to you, unless you are the owner. - + + Invalid URL + - - All files got deleted from your local sync folder '%1'. -These files will be deleted from the server and will not be available on your other devices if they will not be restored. -If this action was unintended you can restore the lost data now. - + + Local sync folder %1 already exists, setting it up for sync.<br/><br/> + - - Delete all files? - + + No remote folder specified! + - - Delete all files - + + OK + - - Restore deleted files - + + Remote folder %1 created successfully. + - - This sync would reset the files to an earlier time in the sync folder '%1'. -This might be because a backup was restored on the server. -Continuing the sync as normal will cause all your files to be overwritten by an older file in an earlier state. Do you want to keep your local most recent files as conflict files? - + + Remote folder %1 creation failed with error <tt>%2</tt>. + - - Backup detected - + + Successfully connected to %1! + - - Normal Synchronisation - + + The authenticated request to the server was redirected to '%1'. The URL is bad, the server is misconfigured. + - - Keep Local Files as Conflict - + + The folder creation resulted in HTTP error code %1 + - - - OCC::FolderMan - - Could not reset folder state - + + The remote folder %1 already exists. Connecting it for syncing. + - - An old sync journal '%1' was found, but could not be removed. Please make sure that no application is currently using it. - + + The remote folder creation failed because the provided credentials are wrong!<br/>Please go back and check your credentials.</p> + - - (backup) - + + The server reported the following error: + - - (backup %1) - + + Timeout while trying to connect to %1 at %2. + - - Undefined State. - + + Trying to connect to %1 at %2 … + + + + OCC::OwncloudWizard - - Waiting to start syncing. - + + %1 Connection Wizard + - - Preparing for sync. - + + Add %1 account + - - Sync is running. - + + Enable experimental feature? + - - Sync was successful, unresolved conflicts. - + + Enable experimental placeholder mode + - - Last Sync was successful. - + + Skip folders configuration + - - Setup Error. - + + Stay safe + - - User Abort. - + + 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. + +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::OwncloudWizardResultPage - - Sync is paused. - + + Everything set up! + + + + OCC::PasswordInputDialog - - %1 (Sync is paused) - + + Please enter a password for your share: + + + + OCC::PollJob - - No valid folder selected! - + + Invalid JSON reply from the poll URL + + + + OCC::ProcessDirectoryJob - - The selected path is not a folder! - + + %1 name containing the character "%2" is not supported on this file system. + - - You have no permission to write to the selected folder! - + + %1 name contains at least one invalid character + - - There is already a sync from the server to this local folder. Please pick another local folder! - + + %1 name is a reserved name on this file system. + - - The local folder %1 already contains a folder used in a folder sync connection. Please pick another one! - + + Cannot sync due to invalid modification time + - - The local folder %1 is already contained in a folder used in a folder sync connection. Please pick another one! - + + Case Clash Conflict: Server file downloaded and renamed to avoid clash. + - - - OCC::FolderStatusDelegate - - Add Folder Sync Connection - + + Conflict when uploading a file. It's going to get removed! + - - Synchronized with local folder (%1) - + + Conflict when uploading a folder. It's going to get cleared! + - - File - + + Conflict: Server version downloaded, local copy renamed and not uploaded. + - - - OCC::FolderStatusModel - - You need to be connected to add a folder - + + Could not upload file, because it is open in "%1". + - - Click this button to add a folder to synchronize. - + + Error while deleting file record %1 from the database + - - - %1 (%2) - Example text: "File.txt (23KB)" - + + Error while reading the database + - - Error while loading the list of folders from the server. - + + File has extension reserved for virtual files. + - - Signed out - + + file id + - - There are unresolved conflicts. Click for details. - + + File is listed on the ignore list. + - - Reconciling changes - + + File name contains at least one invalid character + - - , '%1' - Build a list of file names - + + File names containing the character "%1" are not supported on this file system. + - - '%1' - Argument is a file name - + + File names ending with a period are not supported on this file system. + - - Syncing %1 - Example text: "Syncing 'foo.txt', 'bar.txt'" - + + File/Folder is ignored because it's hidden. + - - - , - + + Filename is too long. + - - download %1/s - Example text: "download 24Kb/s" (%1 is replaced by 24Kb (translated)) - + + Folder + - - upload %1/s - Example text: "upload 24Kb/s" (%1 is replaced by 24Kb (translated)) - + + Ignored because of the "choose what to sync" blacklist + - - Checking for changes in remote '%1' - + + Moved to invalid target, restoring + - - Fetching folder list from server … - + + Not allowed because you don't have permission to add files in that folder + - - Checking for changes in local '%1' - + + Not allowed because you don't have permission to add subfolders to that folder + - - ↓ %1/s - + + Not allowed to remove, restoring + - - ↑ %1/s - + + Not allowed to upload this file because it is read-only on the server, restoring + - - %1 %2 (%3 of %4) - Example text: "uploading foobar.png (2MB of 2MB)" - + + permission + - - %1 %2 - Example text: "uploading foobar.png" - + + Reason: the entire filename is forbidden. + - - %5 left, %1 of %2, file %3 of %4 - Example text: "5 minutes left, 12 MB of 345 MB, file 6 of 7" - + + Reason: the file has a forbidden extension (.%1). + - - %1 of %2, file %3 of %4 - Example text: "12 MB of 345 MB, file 6 of 7" - + + Reason: the filename contains a forbidden character (%1). + - - file %1 of %2 - + + Reason: the filename has a forbidden base name (filename start). + - - Waiting … - + + Server replied with an error while reading directory "%1" : %2 + - - - Waiting for %n other folder(s) … - - - - + + + Server reported no %1 + - - Preparing to sync … - + + size + - - - OCC::FolderWatcherPrivate - - This problem usually happens when the inotify watches are exhausted. Check the FAQ for details. - + + Stat failed. + - - - OCC::FolderWizard - - Add Folder Sync Connection - + + Symbolic links are not supported in syncing. + - - Add Sync Connection - + + The file name is a reserved name on this file system. + - - - OCC::FolderWizardLocalPath - - Click to select a local folder to sync. - + + The filename cannot be encoded on your file system. + - - Enter the path to the local folder. - + + The filename is blacklisted on the server. + + + + OCC::PropagateDirectory - - Select the source folder - + + could not delete file %1 from local DB + - - - OCC::FolderWizardRemotePath - - Create Remote Folder - + + Could not delete file %1 from local DB + - - Enter the name of the new folder to be created below '%1': - + + Error updating metadata due to invalid modification time + - - Folder was successfully created on %1. - + + File is currently in use + - - Authentication failed accessing %1 - + + The folder %1 cannot be made read-only: %2 + - - Failed to create the folder on %1. Please check manually. - + + unknown exception + + + + OCC::PropagateDownloadFile - - Failed to list a folder. Error: %1 - + + Could not delete file record %1 from local DB + - - Choose this to sync the entire account - + + could not get file %1 from local DB + - - This folder is already being synced. - + + Could not get file %1 from local DB + - - You are already syncing <i>%1</i>, which is a parent folder of <i>%2</i>. - + + File %1 can not be downloaded because encryption information is missing. + - - - OCC::FormatWarningsWizardPage - - <b>Warning:</b> %1 - + + File %1 can not be downloaded because of a local file name clash! + - - <b>Warning:</b> - + + File %1 cannot be downloaded because encryption information is missing. + - - - OCC::GETFileJob - - No E-Tag received from server, check Proxy/Gateway - + + File %1 cannot be saved because of a local file name clash! + - - We received a different E-Tag for resuming. Retrying next time. - + + File %1 downloaded but it resulted in a local file name clash! + - - Server returned wrong content-range - + + File %1 has invalid modified time reported by server. Do not save it. + - - Connection Timeout - + + File has changed since discovery + - - - OCC::GeneralSettings - - Legal notice - + + File was deleted from server + - - General Settings - + + Free space on disk is less than %1 + - - For System Tray - + + The download would reduce free local disk space below the limit + - - Show Server &Notifications - + + The downloaded file is empty despite that the server announced it should have been %1. + - - Advanced - + + The downloaded file is empty, but the server said it should have been %1. + - - Ask for confirmation before synchronizing folders larger than - + + The file could not be downloaded completely. + + + + OCC::PropagateItemJob - - MB - Trailing part of "Ask confirmation before syncing folder larger than" - + + ; Restoration Failed: %1 + - - Ask for confirmation before synchronizing external storages - + + A file or folder was removed from a read only share, but restoring failed: %1 + + + + OCC::PropagateLocalMkdir - - &Launch on System Startup - + + Attention, possible case sensitivity clash with %1 + - - Use &Monochrome Icons - + + Could not create folder %1 + - - Edit &Ignored Files - + + could not delete file %1, error: %2 + - - Show sync folders in &Explorer's Navigation Pane - + + Folder %1 cannot be created because of a local file or folder name clash! + + + + OCC::PropagateLocalRemove - - S&how crash reporter - + + Could not remove %1 because of a local file name clash + - - - About - + + Could not remove folder '%1' + - - Updates - + + Error removing '%1': %2; + + + + OCC::PropagateLocalRename - - &Restart && Update - + + Error setting pin state + - - Server notifications that require attention. - + + Failed to propagate directory rename in hierarchy + - - - OCC::GetOrCreatePublicLinkShare - - Password for share required - + + Failed to rename file + - - Please enter a password for your link share: - + + File %1 can not be renamed to %2 because of a local file name clash + - - Sharing error - + + 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::PropagateRemoteMkdir - - Could not retrieve or create the public link share. Error: - -%1 - + + Error writing metadata to the database: %1 + - - - OCC::HttpCredentialsGui - - Please enter %1 password:<br><br>User: %2<br>Account: %3<br> - + + Failed to encrypt a folder %1 + - - Reading from keychain failed with error: '%1' - + + Wrong HTTP code returned by server. Expected 201, but received "%1 %2". + + + + OCC::PropagateRemoteMove - - Enter Password - + + Could not rename %1 to %2, error: %3 + + + + OCC::PropagateUploadFileCommon - - <a href="%1">Click here</a> to request an app password from the web interface. - + + Failed to unlock encrypted folder. + - - - OCC::IgnoreListEditor - - Ignored Files Editor - + + Failed to upload encrypted file. + - - Global Ignore Settings - + + Unable to upload an item with invalid characters + - - Sync hidden files - + + Upload of %1 exceeds the quota for the folder + + + + OCC::PropagateUploadFileNG - - Files Ignored by Patterns - + + Missing ETag from server + - - This entry is provided by the system at '%1' and cannot be modified in this view. - + + Missing File ID from server + - - - OCC::IgnoreListTableWidget - - Pattern - + + Poll URL missing + - - Allow Deletion - + + Unexpected return code from server (%1) + + + + OCC::PropagateUploadFileV1 - - Add - + + The server did not acknowledge the last chunk. (No e-tag was present) + + + + OCC::ProxyAuthDialog - - Remove - + + Password: + - - Remove all - + + Proxy authentication required + - - 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. - + + Proxy: + - - Could not open file - + + The proxy server needs a username and password. + - - Cannot write changes to '%1'. - + + Username: + + + + OCC::SelectiveSyncDialog - - Add Ignore Pattern - + + Choose What to Sync + + + + OCC::SelectiveSyncWidget - - Add a new ignore pattern: - + + An error occurred while loading the list of sub folders. + - - - OCC::LegalNotice - - Legal notice - + + Deselect remote folders you do not wish to synchronize. + - - Close - + + Loading … + - - <p>Copyright 2017-2020 Nextcloud GmbH<br />Copyright 2012-2018 ownCloud GmbH</p> - + + Name + - - <p>Licensed under the GNU General Public License (GPL) Version 2.0 or any later version.</p> - + + No subfolders currently on the server. + - - - OCC::LogBrowser - - Log Output - + + Size + + + + OCC::ServerNotificationHandler - - &Search: - + + Reply + + + + OCC::SettingsDialog - - &Find - + + %1 Settings + - - &Capture debug messages - + + Account + - - Permanently save logs - + + General + - - When this option is enabled and no other logging is configured, logs will be written to a temporary folder and expire after a few hours. This setting persists across client restarts. - -Logs will be written to %1 - + Network + Network - - Clear - + + New Account + New Account + + + OCC::ShareDialog - - Clear the log display. - + + %1 Sharing + - - S&ave - + + Folder: %2 + - - Save the log file to a file on disk for debugging. - + + Icon + - - Save log file - + + Nextcloud Path: + - - Error - + + The file can not be shared because it was shared without sharing permission. + + + + OCC::ShareLinkWidget - - Could not write to log file %1 - + + <p>Do you really want to delete the public link share <i>%1</i>?</p><p>Note: This action cannot be undone.</p> + - - - OCC::Logger - - Error - + + Add note to recipient + - - <nobr>File '%1'<br/>cannot be opened for writing.<br/><br/>The log output can <b>not</b> be saved!</nobr> - + + Allow Editing + - - - OCC::NSISUpdater - - New Version Available - + + Allow Upload && Editing + - - <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> - + + Confirm Link Share Deletion + - - Skip this version - + + Expiration Date + - - Skip this time - + + Public link + - - Get update - + + Read only + - - - OCC::NetworkSettings + + + OCC::ShareModel - - Proxy Settings - + + %1 days + - - No Proxy - + + 1 day + - - Use system proxy - + + Could not find local folder for %1 + - - Specify proxy manually as - + Enter a note for the recipient + - - Host - + + Internal link + - - : - + + Link share + - - Proxy server requires authentication - + + Secure file drop + - - Download Bandwidth - + + Secure file drop link + - - - Limit to - + + Share link + - - - KBytes/s - + + Today + + + + OCC::ShareUserGroupWidget - - - No limit - + + No results for '%1' + - - - Limit to 3/4 of estimated bandwidth - + + Share with users or groups … + + + + OCC::ShareUserLine - - Upload Bandwidth - + + Can change + - - - Limit automatically - + + Can create + - - Hostname of proxy server - + + Can delete + - - Username for proxy server - + Can edit + Can edit - - Password for proxy server - + + Can reshare + - - HTTP(S) proxy - + Expires: + Expires: - - SOCKS5 proxy - + Note: + Note: - - - OCC::OAuth - - Error returned from the server: <em>%1</em> - + Username + + + + OCC::ShareeModel - - There was an error accessing the 'token' endpoint: <br><em>%1</em> - + + Global search results + - - Could not parse the JSON returned from the server: <br><em>%1</em> - + + No results found + - - The reply from the server did not contain all expected fields - + + Search globally + + + + OCC::ShibbolethCredentials - - <h1>Login Error</h1><p>%1</p> - + + Login Error + - - <h1>Wrong user</h1><p>You logged-in with user <em>%1</em>, but must login with user <em>%2</em>.<br>Please log out of %3 in another tab, then <a href='%4'>click here</a> and log in as user %2</p> - + + You must sign in as user %1 + - - - OCC::OCUpdater + + + OCC::ShibbolethWebView - - New %1 Update Ready - + + %1 - Authenticate + - - A new update for %1 is about to be installed. The updater may ask -for additional privileges during the process. - + + Reauthentication required + - - Downloading version %1. Please wait … - + + SSL Cipher Debug View + - - Could not download update. Please click <a href='%1'>here</a> to download the update manually. - + + Your session has expired. You need to re-login to continue to use the client. + + + + OCC::SocketApi - - Could not check for new updates. - + + Context menu share + - - New %1 version %2 is available. Please click <a href='%3'>here</a> to download the update. - + + Copy internal link + - - Checking update server … - + + Copy private link to clipboard + - - %1 version %2 available. Restart application to start the update. - + + Copy public link + - - Update status is unknown: Did not check for new updates. - + + Copy secure file drop link + - - No updates available. Your installation is at the latest version. - + + Copy secure filedrop link + - - Update Check - + + Could not encrypt the following folder: "%1". + +Server replied with error: %2 + - - - OCC::OwncloudAdvancedSetupPage - - Connect to %1 - + + Delete local changes + - - Setup local folder options - + + Edit + + + + + Expires in %1 minutes + + + + Expires in %1 minutes + - - Connect … - + + Failed to encrypt folder + - - %1 folder '%2' is synced to local folder '%3' - + + Failed to encrypt folder at "%1" + - - Sync the folder '%1' - + + Folder encrypted successfully + - - <p><small><strong>Warning:</strong> The local folder is not empty. Pick a resolution!</small></p> - + + I shared something with you + - - Free space: %1 - + + Leave this share + - - Local Sync Folder - + + Lock file + - - - (%1) - + + Locked by %1 + - - There isn't enough free space in the local folder! - + + Move and rename … + - - - OCC::OwncloudConnectionMethodDialog - - Connection failed - + + Move and upload … + - - <html><head/><body><p>Failed to connect to the secure server address specified. How do you wish to proceed?</p></body></html> - + + Move, rename and upload … + - - Select a different URL - + + Open in browser + - - Retry unencrypted over HTTP (insecure) - + + Resharing this file is not allowed + - - Configure client-side TLS certificate - + + Resharing this folder is not allowed + - - <html><head/><body><p>Failed to connect to the secure server address <em>%1</em>. How do you wish to proceed?</p></body></html> - + + Resolve conflict … + - - - OCC::OwncloudHttpCredsPage - - &Email - + + Select new location … + - - Connect to %1 - + + Send private link by email … + - - Enter user credentials - + + Share options + - - - OCC::OwncloudOAuthCredsPage - - Connect to %1 - + + The account %1 does not have end-to-end encryption configured. Please configure this in your account settings to enable folder encryption. + - - Login in your browser - + + The following folder was encrypted successfully: "%1" + - - - OCC::OwncloudSetupPage - - Connect to %1 - + + Unlock file + + + + OCC::SslButton - - Setup %1 server - + + %1 + - - Keep your data secure and under your control - + + %1 (self-signed) + - - Secure collaboration & file exchange - + + <h3>Certificate Details</h3> + - - Easy-to-use web mail, calendaring & contacts - + + <h3>Fingerprints</h3> + - - Screensharing, online meetings & web conferences - + + <h3>Issuer</h3> + - - This URL is NOT secure as it is not encrypted. -It is not advisable to use it. - + + <p><b>Note:</b> This certificate was manually approved</p> + - - This URL is secure. You can use it. - + + Certificate information: + - - &Next > - + + Common Name (CN): + - - Invalid URL - + + Country: + - - Could not load certificate. Maybe wrong password? - + + Expires on: + - - - OCC::OwncloudSetupWizard - - <font color="green">Successfully connected to %1: %2 version %3 (%4)</font><br/><br/> - + + Issued on: + - - Failed to connect to %1 at %2:<br/>%3 - + + Issuer: + - - Timeout while trying to connect to %1 at %2. - + + No support for SSL session tickets/identifiers + - - The authenticated request to the server was redirected to '%1'. The URL is bad, the server is misconfigured. - + + Organization (O): + - - There was an invalid response to an authenticated webdav request - + + Organizational Unit (OU): + - - Access forbidden by server. To verify that you have proper access, <a href="%1">click here</a> to access the service with your browser. - + + Serial: + - - Invalid URL - + + Server version: %1 + - - The server reported the following error: - + + SHA-1: + - - Trying to connect to %1 at %2 … - + + SHA-256: + - - Local sync folder %1 already exists, setting it up for sync.<br/><br/> - + + State/Province: + - - Creating local sync folder %1 … - + + Subject Alternative Names: + - - ok - + + The connection is not secure + - - failed. - + + This connection is encrypted using %1 bit %2. + - - Could not create local folder %1 - + + This connection is NOT secure as it is not encrypted. + + + + OCC::SslErrorDialog - - No remote folder specified! - + + &lt;not specified&gt; + - - Error: %1 - + + Additional errors: + - - creating folder on Nextcloud: %1 - + + Cannot connect securely to <i>%1</i>: + - - Remote folder %1 created successfully. - + + Country: %1 + - - The remote folder %1 already exists. Connecting it for syncing. - + + Effective Date: %1 + - - - The folder creation resulted in HTTP error code %1 - + + Expiration Date: %1 + - - The remote folder creation failed because the provided credentials are wrong!<br/>Please go back and check your credentials.</p> - + + Fingerprint (SHA-256): <tt>%1</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> - + + Fingerprint (SHA-512): <tt>%1</tt> + - - - Remote folder %1 creation failed with error <tt>%2</tt>. - + + Fingerprint (SHA1): <tt>%1</tt> + - - A sync connection from %1 to remote directory %2 was set up. - + + Issuer: %1 + - - Successfully connected to %1! - + + Organization: %1 + - - Connection to %1 could not be established. Please check again. - + + Trust this certificate anyway + - - Folder rename failed - + + Unit: %1 + - - Can't 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. - + + Untrusted Certificate + - - <font color="green"><b>Local sync folder %1 successfully created!</b></font> - + + with Certificate %1 + - - - OCC::OwncloudWizard + + + OCC::SyncEngine - - %1 Connection Wizard - + + %1 (skipped due to earlier error, trying again in %2) + - - Skip folders configuration - + + A HTTP transmission error happened. + - - - OCC::OwncloudWizardResultPage - - Everything set up! - + + A network connection timeout happened. + - - Open Local Folder - + + Access is forbidden + - - Open %1 in Browser - + + An error occurred while opening a folder + - - - OCC::PollJob - - Invalid JSON reply from the poll URL - + + An internal error number %1 occurred. + - - - OCC::PropagateDirectory - - Error writing metadata to the database - + + Cannot open the sync journal + - - - OCC::PropagateDownloadFile - - File %1 can not be downloaded because encryption information is missing. - + + Could not set file record to local DB: %1 + - - File %1 can not be downloaded because of a local file name clash! - + + Could not update file metadata: %1 + - - The download would reduce free local disk space below the limit - + + Could not update file: %1 + - - Free space on disk is less than %1 - + + Could not update virtual file metadata: %1 + - - File was deleted from server - + + CSync unspecified error. + - - The file could not be downloaded completely. - + + Discovery step failed. + - - The downloaded file is empty despite that the server announced it should have been %1. - + + Disk space is low: Downloads that would reduce free space below %1 were skipped. + - - File %1 cannot be saved because of a local file name clash! - + + Error while reading folder. + - - File has changed since discovery - + + Failed to load or create the journal file. Make sure you have read and write permissions in the local sync folder. + - - Error writing metadata to the database - + + File names containing the character '%1' are not supported on this file system. + - - - OCC::PropagateItemJob - - ; Restoration Failed: %1 - + + File or directory not found: + - - A file or folder was removed from a read only share, but restoring failed: %1 - + + Folder hierarchy is too deep + - - - OCC::PropagateLocalMkdir - - could not delete file %1, error: %2 - + + Invalid characters, please rename "%1" + - - Attention, possible case sensitivity clash with %1 - + + Local files and share folder removed. + - - could not create folder %1 - + + Move not allowed because %1 is read-only + - - Error writing metadata to the database - + + Move not allowed, item restored + - - - OCC::PropagateLocalRemove - - Error removing '%1': %2; - + + No space on %1 server available. + - - Could not remove folder '%1' - + + Not allowed because you don't have permission to add parent folder + - - Could not remove %1 because of a local file name clash - + + Only %1 are available, need at least %2 to start + - - - OCC::PropagateLocalRename - - File %1 can not be renamed to %2 because of a local file name clash - + + Permission denied. + - - - Error writing metadata to the database - + + Success. + - - - OCC::PropagateRemoteDelete - - Wrong HTTP code returned by server. Expected 204, but received "%1 %2". - + + the destination + - - - OCC::PropagateRemoteMkdir - - Wrong HTTP code returned by server. Expected 201, but received "%1 %2". - + + The mounted folder is temporarily not available on the server + - - Error writing metadata to the database - + + The service is temporarily unavailable + - - - OCC::PropagateRemoteMove - - Wrong HTTP code returned by server. Expected 201, but received "%1 %2". - + + the source + - - - Error writing metadata to the database - + + There is insufficient space available on the server for some uploads. + - - - OCC::PropagateUploadFileCommon - - File %1 cannot be uploaded because another file with the same name, differing only in case, exists - + + Tried to create a folder that already exists. + - - Local file changed during syncing. It will be resumed. - + + Unable to open or create the local sync database. Make sure you have write access in the sync folder. + - - Local file changed during sync. - + + Unable to read from the sync journal. + - - - Upload of %1 exceeds the quota for the folder - + + Unable to read the blacklist from the local database + - - File Removed (start upload) %1 - + + Unresolved conflict. + - - Error writing metadata to the database - + + Using virtual files with suffix, but suffix is not set + - - - OCC::PropagateUploadFileNG + + + OCC::SyncLogDialog - - The local file was removed during sync. - + + Synchronisation Log + + + + OCC::SyncStatusSummary - - Local file changed during sync. - + + %1 of %2 + - - Unexpected return code from server (%1) - + + %1 of %2 · %3 left + - - Missing File ID from server - + + Checking folder changes + - - Missing ETag from server - + + Offline + - - - OCC::PropagateUploadFileV1 - - Poll URL missing - + + Preparing sync + - - The local file was removed during sync. - + + See below for errors + - - Local file changed during sync. - + + See below for warnings + - - The server did not acknowledge the last chunk. (No e-tag was present) - + + Some files could not be synced! + - - - OCC::ProxyAuthDialog - - Proxy authentication required - + + Some files couldn't be synced! + - - Username: - + + Syncing changes + - - Proxy: - + + Syncing file %1 of %2 + + + + OCC::Systray - - The proxy server needs a username and password. - + + Download + - - Password: - + + Exit %1 + - - - OCC::SelectiveSyncDialog - - Choose What to Sync - + + Open main dialog + - - - OCC::SelectiveSyncWidget + + + OCC::Theme - - Loading … - + + <p>%1 %2</p> + <p>%1 %2</p> - - Deselect remote folders you do not wish to synchronize. - + + <p>%1 desktop client %2</p> + - - Name - + <p>%1 Desktop Client</p> + <p>%1 Desktop Client</p> - - Size - + + <p>%1 Desktop Client</p><p>Version %1. For more information please click <a href='%2'>here</a>.</p> + - - - No subfolders currently on the server. - + + <p><small>Using virtual files plugin: %1</small></p> + - - An error occurred while loading the list of sub folders. - + + <p>This release was supplied by %1.</p> + - - - OCC::ServerNotificationHandler - - Dismiss - + + <p>This release was supplied by %1</p> + - - - OCC::SettingsDialog - - Settings - + + <p>Version %1. For more information please click <a href='%2'>here</a>.</p> + - - General - + + easy/0118 + easy/0118 + + + OCC::UnifiedSearchResultsListModel - - Network - + + Failed to fetch providers. + - - Account - + + Failed to fetch search providers for '%1'. Error: %2 + - - - OCC::ShareDialog - - %1 Sharing - + + Search has failed for '%1'. Error: %2 + - - %1 - + + Search has failed for '%2'. + + + + OCC::UpdateE2eeFolderMetadataJob - - Folder: %2 - + + Failed to finalize item. + - - The file can not be shared because it was shared without sharing permission. - + + Failed to update folder metadata. + + + + OCC::UpdateE2eeFolderUsersMetadataJob - - Password for share required - + Could not add or remove a folder user %1, for folder %2 + - - Please enter a password for your link share: - + + Could not add or remove user %1 to access folder %2 + Could not add or remove user %1 to access folder %2 - - share label - + + Could not fetch public key for user %1 + - - Nextcloud Path: - + + Could not find root encrypted folder for folder %1 + - - Icon - + + Error updating metadata for a folder %1 + - - - OCC::ShareLinkWidget - - Share link - + + Failed to unlock a folder. + + + + OCC::User - - Note: - + + %1 notifications + %1 notifications - - Password: - + + Open Nextcloud Assistant in browser + - - Expires: - + + Open Nextcloud Talk in browser + - - Delete - + + Resolve conflict + - - Allow Editing - + + Retry all uploads + - - Read only - + + You changed + - - Allow Upload && Editing - + + You created + - - File Drop (Upload Only) - + + You deleted + - - Add note to recipient - + + You renamed + + + + OCC::UserModel - - Password Protect - + + <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> + - - Expiration Date - + + Confirm Account Removal + - - Unshare - + + Remove connection + + + + OCC::UserStatusSelectorModel - - Add another link - + + %1 hours + - - Confirm Link Share Deletion - + + %1 minutes + - - <p>Do you really want to delete the public link share <i>%1</i>?</p><p>Note: This action cannot be undone.</p> - + + 1 hour + - - Cancel - + + 1 minute + - - Public link - + + 30 minutes + - - - OCC::ShareUserGroupWidget - - Copy link - + + 4 hours + - - No results for '%1' - + + Could not clear status message. Make sure you are connected to the server. + - - I shared something with you - + + Could not fetch predefined statuses. Make sure you are connected to the server. + - - Share with users or groups … - + + Could not fetch status. Make sure you are connected to the server. + - - - OCC::ShareUserLine - - Username - + + Could not set status. Make sure you are connected to the server. + - - can edit - + + Don't clear + - - Can reshare - + + Emojis are not supported. Some status functionality may not work. + - - Unshare - + + Less than a minute + - - Can create - + + Status feature is not supported. You will not be able to set your status. + - - Can change - + + This week + + + + OCC::Vfs - - Can delete - + + The Virtual filesystem feature does not support a drive as sync root + - - - OCC::ShibbolethCredentials - - Login Error - + + The Virtual filesystem feature is not supported on network drives + - - You must sign in as user %1 - + + The Virtual filesystem feature requires a NTFS file system, %1 is using %2 + - - - OCC::ShibbolethWebView + + + OCC::VfsDownloadErrorDialog - - %1 - Authenticate - + + %1 could not be downloaded. + - - SSL Cipher Debug View - + + > More details + - - Reauthentication required - + + could not be downloaded + - - Your session has expired. You need to re-login to continue to use the client. - + + Download error + - - - OCC::SocketApi - - Context menu share - + + Error downloading + - - I shared something with you - + + Error downloading %1 + - - - Share options - + + More details + + + + OCC::WebEnginePage - - Send private link by email … - + + Invalid certificate detected + - - Copy private link to clipboard - + + The host "%1" provided an invalid certificate. Continue? + + + + OCC::WebFlowCredentials - - Resharing this file is not allowed - + + <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> - - - Copy public link - + Please login with the account: %1 + - - Copy internal link - + + Please login with the user: %1 + - - Edit - + + You have been logged out of %1 as user %2. Please login again + - - Open in browser - + You have been logged out of your account %1 at %2. Please login again. + - - - OCC::SslButton + + + OCC::WelcomePage - - <h3>Certificate Details</h3> - + Easy-to-use web mail, calendaring & contacts + Easy-to-use web mail, calendaring & contacts - - Common Name (CN): - + + Form + - - Subject Alternative Names: - + + Host your own server + - - Organization (O): - + + Keep your data secure and under your control + - - Organizational Unit (OU): - + + Log in + - - State/Province: - + Screensharing, online meetings & web conferences + Screensharing, online meetings & web conferences - - Country: - + Secure collaboration & file exchange + Secure collaboration & file exchange - - Serial: - + + Sign up with provider + + + + OCC::ownCloudGui - - <h3>Issuer</h3> - + + %1: %2 + - - Issuer: - + + Account %1: %2 + - - Issued on: - + + Account synchronization is disabled + - - Expires on: - + + Disconnected from %1 + - - <h3>Fingerprints</h3> - + + Disconnected from accounts: + - - SHA-256: - + + Disconnected from some accounts + - - SHA-1: - + + Error during synchronization + - - <p><b>Note:</b> This certificate was manually approved</p> - + + Folder %1: %2 + - - %1 (self-signed) - + + macOS VFS for %1: A problem was encountered. + - - %1 - + + macOS VFS for %1: Last sync was successful. + - - This connection is encrypted using %1 bit %2. - - + + macOS VFS for %1: Sync is running. + - - Server version: %1 - + + No sync folders configured + - - No support for SSL session tickets/identifiers - + + Please sign in + - - Certificate information: - + + Synchronization is paused + - - The connection is not secure - + + Terms of service + - - This connection is NOT secure as it is not encrypted. - - + + The server on account %1 runs an old and unsupported version %2. Using this client with unsupported server versions is untested and potentially dangerous. Proceed at your own risk. + - - - OCC::SslErrorDialog - - Trust this certificate anyway - + + 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. + - - Untrusted Certificate - + + There are no sync folders configured. + - - Cannot connect securely to <i>%1</i>: - + + Unresolved conflicts + - - with Certificate %1 - + + Unsupported Server Version + - - - - &lt;not specified&gt; - + + Up to date + - - - Organization: %1 - + + 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. + + + + OCC::sesSnackBar - - - Unit: %1 - + + Success + Success + + + OwncloudAdvancedSetupPage - - - Country: %1 - + + &Keep local data + - - Fingerprint (SHA1): <tt>%1</tt> - + + &Local Folder + - - Fingerprint (SHA-256): <tt>%1</tt> - + + <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> - - Fingerprint (SHA-512): <tt>%1</tt> - + <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> - - Effective Date: %1 - + + Ask before syncing external storages + - - Expiration Date: %1 - + + Ask before syncing folders larger than + - - Issuer: %1 - + + Ask for confirmation before synchroni&zing folders larger than + - - - OCC::SyncEngine - - Success. - + + Ask for confirmation before synchronizing e&xternal storages + - - A network connection timeout happened. - + + Choose different folder + - - A HTTP transmission error happened. - + + Erase local folder and start a clean sync + - - The mounted folder is temporarily not available on the server - + + Keep local data + - - An error occurred while opening a folder - + + Local Folder + - - Error while reading folder. - + + S&ync everything from server + - - %1 (skipped due to earlier error, trying again in %2) - + + Server + - - File/Folder is ignored because it's hidden. - + + Server address + - - Folder hierarchy is too deep - + + Start a &clean sync (Erases the local folder!) + - - Conflict: Server version downloaded, local copy renamed and not uploaded. - + + Sync Logo + - - Only %1 are available, need at least %2 to start - Placeholders are postfixed with file sizes using Utility::octetsToString() - + + Synchronize everything from server + + + + OwncloudHttpCredsPage - - Unable to open or create the local sync database. Make sure you have write access in the sync folder. - + + &Password + - - Not allowed because you don't have permission to add parent folder - + + &Username + + + + OwncloudOAuthCredsPage - - Not allowed because you don't have permission to add files in that folder - + Copy link + Copy link - - Disk space is low: Downloads that would reduce free space below %1 were skipped. - + Please switch to your browser to proceed. + Please switch to your browser to proceed. - - There is insufficient space available on the server for some uploads. - + Re-open Browser + Re-open Browser + + + OwncloudSetupPage - - CSync unspecified error. - + + Register with a provider + - - Aborted by the user - + + TextLabel + - - Failed to load or create the journal file. Make sure you have read and write permissions in the local sync folder. - + + This is the link to your %1 web interface when you open it in the browser. + + + + OwncloudWizardResultPage - - Discovery step failed. - + + Your entire account is synced to the local folder + + + + + QObject + + + %n day ago + + + + + + + + + %n days ago + + + + + + + + + %n hour ago + + + + + + + + + %n hours ago + + + + + + + + + %n minute ago + + + + + + + + + %n minutes ago + + + + + + + + + %nd + + + + %nd + + + + + %nh + + + + %nh + + + + + %nm + + + + %nm + - - Permission denied. - + + 1m + - - File or directory not found: - + + Could not create debug archive in selected location! + Could not create debug archive in selected location! - - Tried to create a folder that already exists. - + + Failed to create debug archive + Failed to create debug archive - - No space on %1 server available. - + + in the future + - - The service is temporarily unavailable - + + Less than a minute ago + - - Access is forbidden - + + New folder + - - An internal error number %1 occurred. - + + now + - - Symbolic links are not supported in syncing. - + + Paths beginning with '#' character are not supported in VFS mode. + - - File is listed on the ignore list. - + + Some time ago + - - File names ending with a period are not supported on this file system. - + + Synced %1 + - - File names containing the character '%1' are not supported on this file system. - + + 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. - - The file name is a reserved name on this file system. - + + You changed %1 + - - Filename contains trailing spaces. - + + You created %1 + - - Filename is too long. - + + You deleted %1 + - - The filename cannot be encoded on your file system. - + + You renamed %1 + + + + + ResolveConflictsDialog + + + %1 files in conflict + + %1 file in conflict + %1 files in conflict + %1 files in conflict + - - Unresolved conflict. - + + All local versions + - - Stat failed. - + + All server versions + - - Filename encoding is not valid - + + 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. + - - Invalid characters, please rename "%1" - + + Resolve conflicts + - - Unable to read the blacklist from the local database - + + Solve sync conflicts + + + + SesTrayHeader - - Unable to read from the sync journal. - + + Open Nextcloud in browser + Open HiDrive Next in browser - - Cannot open the sync journal - + + Website + Website + + + ShareDelegate - - File name contains at least one invalid character - + + Copied! + - - - Ignored because of the "choose what to sync" blacklist - + + Copy share link location + - - Not allowed because you don't have permission to add subfolders to that folder - + + Create a new share link + + + + ShareDetailsPage - - Not allowed to upload this file because it is read-only on the server, restoring - + + Add another link + - - - Not allowed to remove, restoring - + + Allow resharing + - - Local files and share folder removed. - + + Allow upload and editing + - - Move not allowed, item restored - + + An error occurred setting the share password. + - - Move not allowed because %1 is read-only - + + Copy share link + - - the destination - + + Custom Permissions + Custom Permissions - - the source - + Edit share + - - - OCC::SyncLogDialog - - Synchronisation Log - + + Enter the note to recipient + Enter the note to recipient - - - OCC::Systray - - %1: %2 - + + File drop (upload only) + - - - OCC::Theme - - <p>Version %1. For more information please click <a href='%2'>here</a>.</p> - + + Hide download + - - <p>This release was supplied by %1</p> - + + Note to recipient + - - - OCC::User - - Retry all uploads - + + Password protect + - - You renamed - + + Set expiration date + - - You deleted - + Share label + - - You created - + + Share link copied! + - - You changed - + + Unshare + - - - OCC::UserModel - - Confirm Account Removal - + + View only + + + + ShareView - - <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> - + + Expires in %1 + - - Remove connection - + + Password required for new share + - - Cancel - + + Share password + - - - OCC::WebEnginePage - - Invalid certificate detected - + + Shared with you by %1 + - - The host "%1" provided an invalid certificate. Continue? - + + Sharing is disabled + - - - OCC::WebFlowCredentials - - You have been logged out of %1 as user %2. Please login again - + + Sharing is disabled. + - - Please login with the user: %1 - + + This item cannot be shared. + - - - OCC::WebFlowCredentialsDialog + + + ShareeSearchField - - Log in - + + Search for users or groups… + - - - OCC::ownCloudGui - - Please sign in - + + Sharing is not available for this folder + + + + SyncJournalDb - - Folder %1: %2 - + + Failed to connect database. + + + + SyncStatus - - There are no sync folders configured. - + + Sync now + + + + TalkReplyTextField - - Disconnected from %1 - + + Reply to … + - - Unsupported Server Version - + + Send reply to chat message + + + + TestSetUserStatusDialog - - The server on account %1 runs an old and unsupported version %2. Using this client with unsupported server versions is untested and potentially dangerous. Proceed at your own risk. - + + 7 days + 7 days + + + TrayFoldersMenuButton - - Disconnected - + + Files + Files - - Disconnected from some accounts - + Group folder button + - - Disconnected from accounts: - + + Open %1 in file explorer + - - Account %1: %2 - + + Open group folder "%1" + - - Signed out - + + Open local folder + - - Account synchronization is disabled - + + Open local folder "%1" + - - - Synchronization is paused - + + Open local or group folders + - - Unresolved conflicts - + + User group and local folders menu + + + + TrayWindowHeader - - Error during synchronization - + + More apps + - - No sync folders configured - + + Open %1 in browser + + + + UnifiedSearchInputContainer - - Syncing %1 of %2 (%3 left) - + + Search files, messages, events … + + + + UnifiedSearchPlaceholderView - - Syncing %1 of %2 - + + Start typing to search + + + + UnifiedSearchResultFetchMoreTrigger - - Syncing %1 (%2 left) - + + Load more results + + + + UnifiedSearchResultItemSkeleton - - Syncing %1 - + + Search result skeleton. + + + + UnifiedSearchResultNothingFound - - %1 (%2, %3) - + + No results for + + + + UnifiedSearchResultSectionItem - - Up to date - + + Search results section %1 + - - - OwncloudAdvancedSetupPage + + + UserLine - - Server - + + Account actions + - - <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> - + + Remove account + - - Start a &clean sync (Erases the local folder!) - + + Set status + - - Ask for confirmation before synchroni&zing folders larger than - + + Switch to account + + + + UserStatusSelector - - MB - Trailing part of "Ask confirmation before syncing folder larger than" - + + Appear offline + - - Ask for confirmation before synchronizing e&xternal storages - + + Away + - - Choose what to sync - + + Clear status message + - - &Local Folder - + + Clear status message after + - - &Keep local data - + + Do not disturb + - - S&ync everything from server - + + Invisible + - - - OwncloudHttpCredsPage - - &Username - + + Mute all notifications + - - &Password - + + Online + - - - OwncloudOAuthCredsPage - - Please switch to your browser to proceed. - + + Online status + - - An error occurred while connecting. Please try again. - + + Set status message + - - Re-open Browser - + + Status message + - - Copy link - + + What is your status? + - - - OwncloudSetupPage + + + Utility - - Register with a provider - + + %L1 B + - - Log in - + + %L1 GB + - - Server Address - + + %L1 KB + - - - OwncloudWizardResultPage - - Your entire account is synced to the local folder - + + %L1 MB + - - - QObject - - in the future - + + %L1 TB + + + + + %n day(s) + + + + + + + + + %n hour(s) + + + + + - - %n day ago - - - - + + %n minute(s) + + + + + - - %n days ago - - - - + + %n month(s) + + + + + - - %n hour ago - - - - + + %n second(s) + + + + + - - %n hours ago - - - - + + %n year(s) + + + + + + + + + ValidateChecksumHeader + + + The checksum header contained an unknown checksum type '%1' + - - now - + + The checksum header contained an unknown checksum type "%1" + - - Less than a minute ago - + + The checksum header is malformed. + - - - %n minute ago - - - - + + + The downloaded file does not match the checksum, it will be resumed. + - - - %n minutes ago - - - - + + + The downloaded file does not match the checksum, it will be resumed. "%1" != "%2" + + + + main.cpp - - Some time ago - + + %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: %2 - this displays an error string (%2) for a file %1 - + + %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. + - - - Utility - - %L1 GB - + + System Tray not available + + + + nextcloudTheme::about() - - %L1 MB - + <p><small>Built from Git revision <a href="%1">%2</a> on %3, %4 using Qt %5, %6</small></p> + + + + progress - - %L1 KB - + + Deleted + - - %L1 B - + + Deleting + - - - %n year(s) - - - - + + + Downloaded + - - - %n month(s) - - - - + + + downloading + - - - %n day(s) - - - - + + + Downloading + - - - %n hour(s) - - - - + + + error + - - - %n minute(s) - - - - + + + Filesystem access error + - - - %n second(s) - - - - + + + Ignored + - - %1 %2 - + + Ignoring + - - - ValidateChecksumHeader - - The checksum header is malformed. - + + Moved to %1 + - - The checksum header contained an unknown checksum type '%1' - + + moving + - - The downloaded file does not match the checksum, it will be resumed. - + + Moving + - - - main.cpp - - System Tray not available - + + Replaced by virtual file + - - %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. - + + Server version downloaded, copied changed local file into case conflict conflict file + - - - nextcloudTheme::about() - - <p><small>Built from Git revision <a href="%1">%2</a> on %3, %4 using Qt %5, %6</small></p> - + + Server version downloaded, copied changed local file into conflict file + - - - progress - - Downloaded - + + Unknown + - - Uploaded - + + Updated local metadata + - - Server version downloaded, copied changed local file into conflict file - + + Updated local virtual files metadata + Updated local virtual files metadata - - Deleted - + + updating local metadata + - - Moved to %1 - + + Updating local metadata + - - Ignored - + + Updating local virtual files metadata + - - Filesystem access error - + + Uploaded + - - Error - + + uploading + - - Updated local metadata - + + Uploading + - - - Unknown - + + Virtual file created + + + + theme - - downloading - + + Aborting … + - - uploading - + + Error occurred during setup + - - deleting - + + Error occurred during sync + - - moving - + + Preparing to sync + - - ignoring - + + Setup Error + - - - error - + + Status undefined + - - updating local metadata - + + Stopping sync + - - - theme - - Status undefined - + + Sync Error + - - Waiting to start sync - + + Sync is paused + - - Sync is running - + + Sync is running + - - Sync Success - + + Sync status is unknown + - - Sync Success, some files were ignored. - + + Sync Success + - - Sync Error - + + Sync Success, some files were ignored. + - - Setup Error - + + Sync was successful + - - Preparing to sync - + + Sync was successful but some files were ignored + - - Aborting … - + + Waiting to start sync + - - Sync is paused - + + Waiting to start syncing + - - + + utility - - Could not open browser - + + 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 + - - There was an error when launching the browser to go to URL %1. Maybe no default browser is configured? - + + Some available online only + - - Could not open email client - + + 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? + - + diff --git a/translations/client_es.ts b/translations/client_es.ts index 5b13a57f88493..ef7cfa776aff9 100644 --- a/translations/client_es.ts +++ b/translations/client_es.ts @@ -1,36 +1,149 @@ - - + + + + + + &Launch on system startup + &Lanzar al iniciar el sistema + + + + can edit + + + + + could not create folder %1 + + + + + Create debug archive + Crear archivo de depuración + + + + Create Folder + + + + + File Drop (Upload Only) + + + + + Last Sync was successful. + + + + + New %1 Update Ready + + + + + ok + + + + + Open %1 in Browser + + + + + Open Local Folder + + + + + Password Protect + + + + + Server Address + + + + + Setup Error. + + + + + share label + + + + + Show call notifications + Mostrar notificaciones de llamadas + + + + Show server &notifications + Mostrar &notificaciones del servidor + + + + There was an invalid response to an authenticated webdav request + + + + + timeout + + + + + Undefined State. + + + + + updating local virtual files metadata + Actualización de los metadatos de los archivos virtuales locales + + + + Use &monochrome icons + Usar iconos &monocromáticos + + + ActivityItem - - Open %1 locally - Abrir %1 localmente + + In %1 + En %1 - - In %1 - En %1 + + Open %1 locally + Abrir %1 localmente - - + + ActivityItemContent - - Open file details - Abrir detalles del archivo + + Dismiss + Descartar - - Dismiss - Descartar + + Open file details + Abrir detalles del archivo - - + + ActivityList - - Activity list - Lista de actividad + + Activity list + Lista de actividad @@ -46,129 +159,133 @@ CallNotificationDialog - - Talk notification caller avatar - Avatar de la notificación de llamada + + Answer Talk call notification + Aviso de llamada de Answer Talk - - Answer Talk call notification - Aviso de llamada de Answer Talk + + Decline + Rechazar - - Decline - Rechazar + + Decline Talk call notification + Rechazar la notificación de llamadas de 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 - - %1 (%2, %3) - %1 (%2, %3) + + %1 (%2, %3) + %1 (%2, %3) - - Checking for changes in "%1" - Buscando cambios en "%1" + + Checking for changes in '%1' + - - Syncing %1 of %2 (%3 left) - Sincronizando %1 de %2 (%3 restantes) + + Checking for changes in "%1" + Buscando cambios en "%1" - - Syncing %1 of %2 - Sincronizando %1 de %2 + + Help + Ayuda - - Syncing %1 (%2 left) - Sincronizando %1 (quedan %2) + + Log out + Cerrar sesión - - Syncing %1 - Sincronizando %1 + + No recently changed files + No hay archivos modificados recientemente - - - No recently changed files - No hay archivos modificados recientemente + + Open website + Abrir página web - - Sync paused - Sincronización pausada + + Pause synchronization + Pausar sincronización - - Syncing - Sincronizando + + Quit sync client + Cerrar cliente de sincronización - - Open website - Abrir página web + + Recently changed + Cambiado recientemente - - Recently changed - Cambiado recientemente + + Settings + Configuración - - Pause synchronization - Pausar sincronización + + Sync paused + Sincronización pausada - - Help - Ayuda + + Syncing + Sincronizando - - Settings - Configuración + + Syncing %1 + Sincronizando %1 - - Log out - Cerrar sesión + + Syncing %1 (%2 left) + Sincronizando %1 (quedan %2) - - Quit sync client - Cerrar cliente de sincronización + + Syncing %1 of %2 + Sincronizando %1 de %2 - - + + + Syncing %1 of %2 (%3 left) + Sincronizando %1 de %2 (%3 restantes) + + + ConflictDelegate - - Local version - Versión local + + Local version + Versión local - - Server version - Versión del servidor + + Server version + Versión del servidor - - + + CurrentAccountHeaderButton - - Current account - + + Account switcher and settings menu + Cambiador de cuentas y menú de configuración @@ -183,14 +300,14 @@ - - Add account - + + Current account + Cuenta actual - - Add new account - + + Current account avatar + Avatar del usuario actual @@ -226,17 +343,17 @@ EditFileLocallyLoadingDialog - - Opening file for local editing - Abriendo archivo para editarlo en local + + Opening file for local editing + Abriendo archivo para editarlo en local - - + + EmojiPicker - - No recent emojis - No hay emojis recientes + + No recent emojis + No hay emojis recientes @@ -273,38 +390,39 @@ ErrorBox - - Error - Error + + Error + Error - - - FileDetailsPage + + + FakeHangingReply - - Dismiss - Descartar + + Operation canceled + Operación cancelada + + + FileDetailsPage - - Activity - Actividad + Activity + Actividad - - Sharing - Compartir + Sharing + Compartir - - + + FileDetailsWindow - - File details of %1 · %2 - Detalles del archivo de %1 · %2 + + File details of %1 · %2 + Detalles del archivo de %1 · %2 - - + + FileProviderEvictionDialog @@ -321,176 +439,212 @@ Reload Recargar - - + + FileProviderFastEnumerationSettings - - Enable fast sync - Habilitar sincronización rápida + + 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. + + 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 + + Delete + Borrar - - + + FileProviderSettings - - Virtual files settings - Configuración de archivos virtuales + + Advanced + Avanzado - - General settings - Configuración general + + Enable virtual files + Activar archivos virtuales - - Enable virtual files - Activar archivos virtuales + + General settings + Configuración general - - Advanced - Avanzado + + Signal file provider domain + Dominio 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 - - + + 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 - - %1 GB of %2 GB remote files synced - %1 GB de %2 GB de archivos remotos sincronizados + + Evict local copies... + Desalojar las copias locales... - - Evict local copies... - Desalojar las copias locales... + + Local storage use + Uso de almacenamiento local - - + + FileProviderSyncStatus - - Syncing - Sincronizando + + All synced! + ¡Todo está sincronizado! + + + FileSystem - - All synced! - ¡Todo está sincronizado! + Could not make directories in trash + No se pueden crear directorios en la papelera - - - FileSystem - - Error removing "%1": %2 - Error al eliminar "%1": %2 + + Could not move '%1' to '%2' + - - Could not remove folder "%1" - No se ha podido eliminar la carpeta "%1" + Could not move "%1" to "%2" + No se pudo mover "%1" a "%2" - - Could not make directories in trash - No se pueden crear carpetas en la papelera + + Could not remove folder "%1" + No se ha podido eliminar la carpeta "%1" - - - Could not move "%1" to "%2" - No se ha podido mover "%1" a "%2" + + Error removing "%1": %2 + Error al eliminar "%1": %2 - - Moving to the trash is not implemented on this platform - Mover a la papelera no está implementado en esta plataforma + Moving to the trash is not implemented on this platform + Mover a la papelera no está implementado en esta plataforma - - + + Flow2AuthWidget - - Browser Authentication - Autentificación del navegador + + An error occurred while connecting. Please try again. + Se ha producido un error al conectarse. Por favor, inténtelo de nuevo. - - Logo - Logo + + Browser Authentication + Autentificación del navegador - - Switch to your browser to connect your account - Cambiar al navegador para conectar con tu cuenta + + Logo + Logo - - An error occurred while connecting. Please try again. - Se ha producido un error al conectarse. Por favor, inténtelo de nuevo. + + Switch to your browser to connect your account + Cambiar al navegador para conectar con tu cuenta - - + + + FolderWizardSelectiveSync + + + Add Folder Sync + Añadir sincronización de carpetas + + + + Step 3 of 3: Selektive Synchronisation + Paso 3 de 3: Sincronización selectiva + + + FolderWizardSourcePage - - Pick a local folder on your computer to sync - Seleccione una carpeta local en su equipo para sincronizar + + &Choose + &Elegir - - &Choose … - &Seleccionar … + &Choose … + &Elige ... - - + + Pick a local folder on your computer to sync + Elige una carpeta local de tu ordenador para sincronizarla + + + + 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 - - Select a remote destination folder - Seleccionar una carpeta remota de destino + + 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 + + Create folder + Crear carpeta - - Refresh - Actualizar + + Folders + Carpetas - - 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 + + + Select a remote destination folder + Seleccione una carpeta de destino remota + + + + Step 2 of 3: Directory in your %1 + Paso 2 de 3: Directorio en su %1 + + + MainWindow @@ -507,44 +661,55 @@ New activities Nuevas actividades - - + + OCC::AbstractNetworkJob - - Connection timed out - Tiempo de conexión agotado + + 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" - - 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::AbstractPropagateRemoteDeleteEncrypted + + "%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::Account - - File %1 is already locked by %2. - El archivo %1 ya está bloqueado por %2. + + 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. + + 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. + + Unlock operation on %1 failed with error %2 + La operación de desbloqueo en %1 ha fallado con el error %2. - - + + OCC::AccountManager @@ -558,22 +723,21 @@ Should an account import be attempted? %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? 1 account was detected from a legacy desktop client. Should the account be imported? - 1 cuenta se detectó desde un cliente de escritorio antiguo. + 1 cuenta se detectó desde un cliente de escritorio antiguo. ¿Debe importarse esta cuenta? - - - - Legacy import - Importación antigua + An existing configuration from a legacy desktop client was detected. +Should an account import be attempted? + Se ha reconocido una configuración existente de un cliente de escritorio anterior. +Se debe intentar importar una cuenta? @@ -586,94 +750,91 @@ Should the account be imported? Saltar - - Successfully imported account from legacy client: %1 - Se ha importado satisfactoriamente desde el cliente antiguo la cuenta: %1 + + Import + Importar - - Could not import accounts from legacy client configuration. - No se pudieron importar las cuentas desde la configuración del cliente antiguo. + + Legacy import + Importación antigua - - - OCC::AccountSettings - - Storage space: … - Espacio de almacenamiento: ... + + Skip + Saltar - - 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 + Successfully imported account from legacy client: %1 + Se ha importado satisfactoriamente desde el cliente antiguo la cuenta: %1 + + + OCC::AccountSettings - - - - Cancel - Cancelar + + (experimental) + (experimental) - - Apply - Aplicar + + %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. - - Connected with <server> as <user> - Conectado a <server> como <user> + + %1 as %2 + %1 como %2 - - Synchronize all - Sincronizar todo + + %1 as <i>%2</i> + - - 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 + + <p>Could not create local folder <i>%1</i>.</p> + <p>No pudo crear la carpeta local <i>%1</i>.</p> - - Virtual file sync - Sincronización de archivos virtual + + <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> - - Connection settings - Configuración de conexión + + Apply + Aplicar - - End-to-end Encryption with Virtual Files - Cifrado de extremo a extremo con Archivos Virtuales + + Apply manual changes + Aplicar cambios manuales - - 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". + + Availability + Disponibilidad - - Do not encrypt folder - No cifrar carpeta + + Cancel + Cancelar - - Encrypt folder - Cifrar carpeta + + Choose what to sync + Elija qué sincronizar @@ -688,29 +849,29 @@ Should the account be imported? <b>Este proceso no es reversible. ¿Seguro que quiere continuar?</b> - - No account configured. - No se ha configurado ninguna cuenta. + + Connected with <server> as <user> + Conectado a <server> como <user> - - Disable encryption - Deshabilitar cifrado + + Connecting to %1 … + Conectando a %1 ... - - Display mnemonic - Mostrar regla mnemotécnica + + Connection settings + Configuración de conexión - - End-to-end encryption has been enabled for this account - El cifrado de extremo a extremo a sido habilitado para esta cuenta + + Could not encrypt folder because the folder does not exist anymore + No es posible cifrar la carpeta porque ya no existe - - Warning - Aviso + + Create new folder + Crear nueva carpeta @@ -728,255 +889,239 @@ Should the account be imported? La carpeta tiene un problema de sincronización. El cifrado de esta carpeta será posible cuando se haya sincronizado correctamente. - - 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ás cifrar esta carpeta. -¿Deseas configurar el cifrado de extremo a extremo? + + Disable end-to-end encryption for %1? + Deshabilitar cifrado de extremo a extremo para %1? - - 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. + + Disable support + Desactivar soporte - - Encryption failed - Ha fallado el cifrado + + Disable virtual file support … + Desactivar soporte para archivos virtuales … - - Could not encrypt folder because the folder does not exist anymore - No es posible cifrar la carpeta porque ya no existe + + Disable virtual file support? + ¿Desactivar soporte para archivos virtuales? - - - Open folder - Abrir carpeta + + Display mnemonic + Mostrar regla mnemotécnica - - Encrypt - Cifrar + + Do not encrypt folder + No cifrar carpeta - - - Edit Ignored Files - Editar archivos ignorados + + Edit Ignored Files + Editar archivos ignorados - - - Create new folder - Crear nueva carpeta + + Enable encryption + - - - Availability - Disponibilidad + + Enable virtual file support %1 … + Activar soporte para archivos virtuales %1 ... - - Choose what to sync - Elija qué sincronizar + + Encrypt + Cifrar - - Force sync now - Forzar la sincronización ahora + + Encrypt folder + Cifrar carpeta - - Restart sync - Reiniciar sync + + Encryption failed + Ha fallado el cifrado - - Resume sync - Continuar sincronización + + End-to-end Encryption + Cifrado de extremo a extremo - - Pause sync - Pausar sincronización + + End-to-end encryption has been enabled for this account + El cifrado de extremo a extremo a sido habilitado para esta cuenta - - Remove folder sync connection - Eliminar la sincronización de carpetas conectadas + + 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 - - 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ás cifrar esta carpeta. +¿Deseas configurar el cifrado de extremo a extremo? - - Enable virtual file support %1 … - Activar soporte para archivos virtuales %1 ... + + End-to-end encryption mnemonic + Mnemónico para cifrado de extremo a extremo - - (experimental) - (experimental) + + End-to-end Encryption with Virtual Files + Cifrado de extremo a extremo con Archivos Virtuales - - Folder creation failed - Ha fallado la creación de la carpeta + + Expand Memory + Ampliar la memoria - - <p>Could not create local folder <i>%1</i>.</p> - <p>No pudo crear la carpeta local <i>%1</i>.</p> + + 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 + + Force sync now + Forzar la sincronización ahora - - <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> + + https://wl.hidrive.com/easy/0057 + https://wl.hidrive.com/easy/0087 - - Remove Folder Sync Connection - Eliminar carpeta de sincronización conectada + + No %1 connection configured. + No hay ninguna conexión de %1 configurada. - - Disable virtual file support? - ¿Desactivar soporte para archivos virtuales? + + No account configured. + No se ha configurado ninguna cuenta. - - 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 connection to %1 at %2. + No hay conexión con %1 en %2. - - Disable support - Desactivar soporte + Obtaining authorization from the browser. <a href='%1'>Click here</a> to re-open the browser. + Obtener autorización del navegador. <a href='%1'>Haga clic aquí</a> para volver a abrir el navegador. - - End-to-end encryption mnemonic - Mnemónico para cifrado de extremo a extremo + + Open folder + Abrir carpeta - - 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). + + Pause sync + Pausar sincronización - - Disable end-to-end encryption - Deshabilitar cifrado de extremo a extremo + + 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 end-to-end encryption for %1? - Deshabilitar cifrado de extremo a extremo para %1? + + 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 encriptados.<br>Los archivos encriptados se mantendrán en el servidor. + + Remove Folder Sync Connection + Eliminar carpeta de sincronización conectada - - Sync Running - Sincronización en curso + + 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 encriptados.<br>Los archivos encriptados se mantendrán en el servidor. - - The syncing operation is running.<br/>Do you want to terminate it? - La sincronización está en curso.<br/>¿Desea interrumpirla? + + Restart sync + Reiniciar sync - - %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. + + Resume sync + Continuar sincronización - - %1 of %2 in use - %1 de %2 en uso + + Server %1 is currently being redirected, or your connection is behind a captive portal. + El servidor %1 está siendo redirigido actualmente o tu conexión está detrás de un portal cautivo. - - Currently there is no storage usage information available. - Actualmente no hay información disponible sobre el uso de almacenamiento. + + Server %1 is currently in maintenance mode. + El servidor %1 se encuentra en modo mantenimiento. - - %1 in use - %1 en uso + + Server %1 is temporarily unavailable. + Servidor %1 no está disponible temporalmente. - - %1 as %2 - %1 como %2 + + Server configuration error: %1 at %2. + Error de configuración del servidor: %1 en %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. + + Set up encryption + Configurar cifrado - - Connected to %1. - Conectado a %1. + + Signed out from %1. + Cerró sesión desde %1. - - Server %1 is temporarily unavailable. - Servidor %1 no está disponible temporalmente. + + Standard file sync + Sincronización de archivos estándar - - Server %1 is currently in maintenance mode. - El servidor %1 se encuentra en modo mantenimiento. + + Storage space %1% occupied + Espacio de almacenamiento %1% ocupado - - Server %1 is currently being redirected, or your connection is behind a captive portal. - El servidor %1 está siendo redirigido actualmente o tu conexión está detrás de un portal cautivo. + + Storage space: … + Espacio de almacenamiento: ... - - Signed out from %1. - Cerró sesión desde %1. + + Sync Running + Sincronización en curso - - Obtaining authorization from the browser. <a href='%1'>Click here</a> to re-open the browser. - Obteniendo autorización desde el navegador. <a href='%1'>Haga clic aquí</a> para re-abrir el navegador. + + Synchronize all + Sincronizar todo - - Connecting to %1 … - Conectando a %1 ... + + Synchronize none + No sincronizar nada - - No connection to %1 at %2. - Sin conexión a %1 en %2. + + 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. @@ -984,9 +1129,9 @@ Además, esta acción interrumpirá cualquier sincronización en curso.No es posible conectarse con %1. - - Server configuration error: %1 at %2. - Error de configuración del servidor: %1 en %2, + + The server version %1 is old and unsupported! Proceed at your own risk. + @@ -994,9 +1139,9 @@ Además, esta acción interrumpirá cualquier sincronización en curso.Tienes que aceptar los términos de servicio - - No %1 connection configured. - No hay ninguna conexión de %1 configurada. + + The syncing operation is running.<br/>Do you want to terminate it? + La sincronización está en curso.<br/>¿Desea interrumpirla? @@ -1009,14 +1154,14 @@ Además, esta acción interrumpirá cualquier sincronización en curso.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 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 or external storages: + Hay carpetas que no se han sincronizado porque son demasiado grandes o están en el almacenamiento externo: @@ -1024,201 +1169,209 @@ Además, esta acción interrumpirá cualquier sincronización en curso.Existen carpetas que han aumentado de tamaño más alla de %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. - 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 + Esta cuenta soporta cifrado punto a punto - - 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. + +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. - - Set up encryption - Configurar cifrado + 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 encriptará tu carpeta y todos los archivos que contenga. Estos archivos ya no serán accesibles sin tu clave mnemotécnica de encriptación. +<b>Este proceso no es reversible. ¿Está seguro de que desea continuar?</b> - - - 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. + + 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> - - 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. + + 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). - - There was an invalid response to an authenticated WebDAV request - Ha habido una respuesta no válida a una solicitud autenticada de WebDAV + + Unable to connect to %1. + No es posible conectarse con %1. - - - OCC::AccountState - - Signed out - Cerrar sesión + + 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 - - Disconnected - Desconectado + + Virtual file sync + Sincronización de archivos virtual - - Connected - Conectado + + Warning + Aviso - - Service unavailable - Servicio no disponible + + 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. - - Maintenance mode - Modo mantenimiento + + You need to accept the terms of service + Tienes que aceptar los términos de servicio - - Redirect detected - Redirección detectada + + 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 tienes 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úrate de que la carpeta cifrada está marcada con "Hacer que esté siempre disponible localmente". + + + OCC::AccountSetupFromCommandLineJob - - Network error - Error en la red + + 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. - - Configuration error - Error en la configuración + + 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. - - Asking Credentials - Solicitando credenciales + + There was an invalid response to an authenticated WebDAV request + Ha habido una respuesta no válida a una solicitud autenticada de WebDAV + + + OCC::AccountState - - Need the user to accept the terms of service - Necesita el usuario aceptar los términos de servicio + + Asking Credentials + Solicitando credenciales - - Unknown account state - Estado de cuenta desconocido + + Configuration error + Error en la configuración - - - OCC::ActivityListModel - - For more activities please open the Activity app. - Para más detalles, por favor, abre la app Actividades. + + Connected + Conectado - - Fetching activities … - Actividades de búsqueda … + + Disconnected + Desconectado - - Network error occurred: client will retry syncing. - Ha ocurrido un error de red: el cliente reintentará la sincronización. + + Maintenance mode + Modo mantenimiento - - Files from the ignore list as well as symbolic links are not synced. - Los archivos de la lista de ignorados así como los enlace simbólicos no estarán sincronizados. + + Need the user to accept the terms of service + Necesita el usuario aceptar los términos de servicio - - - OCC::AddCertificateDialog - - SSL client certificate authentication - Certificado de autentificación SSL del cliente + + Network error + Error en la red - - This server probably requires a SSL client certificate. - Probablemente este servidor requiera un certificado SSL del cliente. + + Redirect detected + Redirección detectada - - Certificate & Key (pkcs12): - Certificado & Key (pkcs12): + + Service unavailable + Servicio no disponible - - Browse … - Explorar ... + + Signed out + Cerrar sesión - - Certificate password: - Contraseña del certificado: + + Unknown account state + Estado de cuenta desconocido + + + OCC::ActivityListModel - - 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. + + Fetching activities … + Actividades de búsqueda … - - Select a certificate - Seleccione un certificado + + Files from the ignore list as well as symbolic links are not synced. + Los archivos de la lista de ignorados así como los enlace simbólicos no estarán sincronizados. - - Certificate files (*.p12 *.pfx) - Archivos de certificado (*.p12 *.pfx) + + Files from the ignore list as well as symbolic links are not synced. This includes: + - - - 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 fue respaldado a <i>%3</i>. + + For more activities please open the Activity app. + Para más detalles, por favor, abre la app Actividades. - - newer - newer software version - recientes + + Network error occurred: client will retry syncing. + Ha ocurrido un error de red: el cliente reintentará la sincronización. + + + OCC::AddCertificateDialog - - older - older software version - antiguos + + 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. - - ignoring - ignorando + + Browse … + Explorar ... - - deleting - eliminando + + Certificate & Key (pkcs12) : + - - Quit - Salir + + Certificate & Key (pkcs12): + Certificado & Key (pkcs12): - - Continue - Continuar + + Certificate files (*.p12 *.pfx) + Archivos de certificado (*.p12 *.pfx) @@ -1252,6 +1405,9 @@ Además, esta acción interrumpirá cualquier sincronización en curso.Legacy import Importación legada + + + OCC::Application Imported %1 and %2 from a legacy desktop client. @@ -1261,271 +1417,262 @@ Además, esta acción interrumpirá cualquier sincronización en curso. - - Error accessing the configuration file - Error al acceder al archivo de configuración + + %1 folders + %1 carpetas - - 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. + + 1 account + 1 cuenta OCC::AuthenticationDialog - - Authentication Required - Se requiere autenticación + + Continue + Continuar - - Enter username and password for "%1" at %2. - Introduce usuario y contraseña para "%1" en %2. + + deleting + eliminando - - &Username: - &Username: + + Error accessing the configuration file + Error al acceder al archivo de configuración - - &Password: - &Contraseña: + + ignoring + ignorando - - - OCC::BasePropagateRemoteDeleteEncrypted - - "%1 Failed to unlock encrypted folder %2". - "%1 Fallo al desbloquear la carpeta cifrada %2". + + Imported %1 and %2 from a legacy desktop client. +%3 + Se importaron %1 y %2 desde un cliente de escritorio legado. +%3 - - 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". + + newer + recientes - - - 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 + + older + antiguos - - 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. + + Quit + Salir - - File Removed (start upload) %1 - Archivo eliminado (comenzar subida) %1 + + Quit %1 + Salir %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. + + 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 fue respaldado a <i>%3</i>. - - Local file changed during syncing. It will be resumed. - Un archivo local ha cambiado durante la sincronización. Será subido. + + 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. - - - Local file changed during sync. - Un archivo local ha cambiado durante la sincronización. + + There was an error while accessing the configuration file at %1. Please make sure the file can be accessed by your user. + + + + OCC::AuthenticationDialog - - Network error: %1 - Error de red: %1 + + &Password: + &Contraseña: - - Error updating metadata: %1 - Error al actualizar los metadatos: %1 + + &User: + - - The file %1 is currently in use - El archivo %1 se encuentra en uso + + &Username: + &Username: - - The local file was removed during sync. - El archivo local ha sido eliminado durante la sincronización. + + Authentication Required + Se requiere autenticación - - Restoration failed: %1 - Fallo al restaurar: %1 + + Enter username and password for '%1' at %2. + - - - 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. + + Enter username and password for "%1" at %2. + Introduce usuario y contraseña para "%1" en %2. + + + OCC::BulkPropagatorJob - - 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. + + Error updating metadata: %1 + Error al actualizar los metadatos: %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. + + 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 - - Failed to fetch permissions with error %1 - Fallo en la obtención de permisos con error %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. - - Filename contains leading and trailing spaces. - El nombre del archivo contiene espacios iniciales y finales. + + 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. - - Filename contains leading spaces. - El nombre del archivo contiene espacios al inicio. + + File Removed (start upload) %1 + Archivo eliminado (comenzar subida) %1 - - Filename contains trailing spaces. - El nombre del archivo contiene espacios al final. + + Local file changed during sync. + Un archivo local ha cambiado durante la sincronización. - - - OCC::CaseClashFilenameDialog - - Case Clash Conflict - Conflicto de capitalización + + Local file changed during syncing. It will be resumed. + Un archivo local ha cambiado durante la sincronización. Será subido. - - 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. + + Network error: %1 + Error de red: %1 - - Error - Error + + Restoration failed: %1 + Fallo al restaurar: %1 - - Existing file - Archivo existente + + The file %1 is currently in use + El archivo %1 se encuentra en uso - - file A - Archivo A + + The local file was removed during sync. + El archivo local ha sido eliminado durante la sincronización. + + + OCC::CaseClashConflictSolver - - - today - hoy + + 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. - - - 0 byte - 0 bytes + + 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. - - - Open existing file - Abrir archivo existente + + Failed to fetch permissions with error %1 + Fallo en la obtención de permisos con error %1 - - Case clashing file - Archivo con conflicto de capitalización + + Filename contains leading and trailing spaces. + El nombre del archivo contiene espacios iniciales y finales. - - file B - Archivo B + + Filename contains leading spaces. + El nombre del archivo contiene espacios al inicio. - - - Open clashing file - Abrir archivo con problema de capitalización + + Filename contains trailing spaces. + El nombre del archivo contiene espacios al final. - - Please enter a new name for the clashing file: - Por favor ingrese un nombre nuevo para el archivo con el problema de capitalización: + + 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::CaseClashFilenameDialog - - New filename - Nuevo nombre de archivo + + %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. - - Rename file - Renombrar archivo + + 0 byte + 0 bytes - - 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. + + Case Clash Conflict + Conflicto de capitalización - - %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. + + Case clashing file + Archivo con conflicto de capitalización - - Filename contains leading and trailing spaces. - El nombre del archivo contiene espacios iniciales y finales. + + Existing file + Archivo existente - - Filename contains leading spaces. - El nombre del archivo contiene espacios al inicio. + + file A + Archivo A - - Filename contains trailing spaces. - El nombre del archivo contiene espacios al final. + + file B + Archivo B - - Use invalid name - Usar nombre inválido + + Filename contains illegal characters: %1 + El nombre del archivo contiene caracteres ilegales: %1 - - Filename contains illegal characters: %1 - El nombre del archivo contiene caracteres ilegales: %1 + + New filename + Nuevo nombre de archivo - - - OCC::CleanupPollsJob - - Error writing metadata to the database - Error al escribir los metadatos en la base de datos + + Open clashing file + Abrir archivo con problema de capitalización - - - OCC::ClientSideEncryption PIN needed to login to token @@ -1552,186 +1699,178 @@ Además, esta acción interrumpirá cualquier sincronización en curso.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 + + Please enter a new name for the clashing file: + Por favor ingrese un nombre nuevo para el archivo con el problema de capitalización: - - - OCC::ConflictDialog - - Sync Conflict - Conflicto de sincronización + + Rename file + Renombrar archivo - - - Conflicting versions of %1. - Versión conflictiva de %1. + + 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. - - 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 + + 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. - - Local version - Versión local + + today + hoy - - - Click to open the file - Clic para abrir el archivo + + Use invalid name + Usar nombre inválido + + + OCC::CleanupPollsJob - - - today - hoy + + Error writing metadata to the database + Error al escribir los metadatos en la base de datos + + + OCC::ClientSideEncryption - - - 0 byte - 0 byte + + Enter E2E passphrase + Introduce la frase de acceso E2E - - <a href="%1">Open local version</a> - <a href="%1">Abrir versión local</a> + + Please enter your end to end encryption passphrase:<br><br>User: %2<br>Account: %3<br> + - - Server version - Versión del servidor + + 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 - - <a href="%1">Open server version</a> - <a href="%1">Abrir versión en servidor</a> + + <a href="%1">Open local version</a> + <a href="%1">Abrir versión local</a> - - - Keep selected version - Mantener la versión seleccionada + + <a href="%1">Open server version</a> + <a href="%1">Abrir versión en servidor</a> - - Open local version - Abrir la versión local + + Click to open the file + Clic para abrir el archivo - - Open server version - Abrir la versión en servidor + + Conflicting versions of %1. + Versión conflictiva de %1. - - Keep both versions - Mantener ambas versiones + + Keep both versions + Mantener ambas versiones - - Keep local version - Mantener versión local + + Keep local version + Mantener versión local - - Keep server version - Mantener la versión del servidor + + Keep selected version + Mantener la versión seleccionada - - - OCC::ConflictSolver - - 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? + + Keep server version + Mantener la versión del servidor - - Do you want to delete the file <i>%1</i> permanently? - ¿Quieres eliminar el archivo <i>%1</i> permanentemente? + + Open local version + Abrir la versión local - - Confirm deletion - Confirmar borrado + + Open server version + Abrir la versión en servidor - - - Error - Error + + Sync Conflict + Conflicto de sincronización - - - Moving file failed: - -%1 - Fallo al mover el archivo: - -%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 - - - OCC::ConnectionValidator + + + OCC::ConflictSolver - - No Nextcloud account configured - La cuenta Nextcloud no está configurada + + Confirm deletion + Confirmar borrado - - Authentication error: Either username or password are wrong. - Error de autenticación: El usuario o la contraseña son incorrectos + + 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? - - Timeout - Tiempo de espera superado + + Do you want to delete the file <i>%1</i> permanently? + ¿Quieres eliminar el archivo <i>%1</i> permanentemente? - - The provided credentials are not correct - Las credenciales proporcionadas no son correctas + + Moving file failed: + +%1 + Fallo al mover el archivo: + +%1 + + + OCC::ConnectionValidator - - The configured server for this client is too old - La configuración del servidor para este cliente es demasiado antigua + + Authentication error: Either username or password are wrong. + Error de autenticación: El usuario o la contraseña son incorrectos - - Please update to the latest server and restart the client. - Por favor, actualice a la última versión del servidor y reinicie el cliente. + + Connection issue + Problema en la conexión - - - OCC::DiscoveryPhase - - Error while canceling deletion of a file - Error al cancelar la eliminación de un archivo + + No Nextcloud account configured + La cuenta Nextcloud no está configurada - - Error while canceling deletion of %1 - Error al cancelar la eliminación de %1 + + Please update to the latest server and restart the client. + Por favor, actualice a la última versión del servidor y reinicie el cliente. - - - OCC::DiscoverySingleDirectoryJob - - - Server error: PROPFIND reply is not XML formatted! - Error del servidor: ¡la respuesta de PROPFIND no tiene formato XML! + + The configured server for this client is too old + La configuración del servidor para este cliente es demasiado antigua @@ -1744,365 +1883,348 @@ 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 signatura inical del servidor está vacía. - - - OCC::DiscoverySingleLocalDirectoryJob + + + OCC::DiscoveryMainThread - - Error while opening directory %1 - Error al abrir el directorio %1 + + Aborted by the user + + + + OCC::DiscoveryPhase - - Directory not accessible on client, permission denied - Directorio no accesible en el cliente, permiso denegado + + Error while canceling deletion of %1 + Error al cancelar la eliminación de %1 - - Directory not found: %1 - Directorio no encontrado: %1 + + Error while canceling deletion of a file + Error al cancelar la eliminación de un archivo + + + OCC::DiscoverySingleDirectoryJob - - Filename encoding is not valid - La codificación del nombre del archivo no es válida + + 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. - - Error while reading directory %1 - Error al leer el directorio %1 + + Encrypted metadata setup error! + ¡Hubo un error al configurar los metadatos cifrados! - - - OCC::EditLocallyJob - - - - - - - - - Could not start editing locally. - No se pudo iniciar la edición local. + + Server error: PROPFIND reply is not XML formatted! + Error del servidor: ¡la respuesta de PROPFIND no tiene formato XML! - - An error occurred during setup. - Ocurrió un error mientras se hacía la configuración. + + The server file discovery reply is missing data. + + + + OCC::DiscoverySingleLocalDirectoryJob - - - 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 este se encuentra sincronizado localmente. + + Directory not accessible on client, permission denied + Directorio no accesible en el cliente, permiso denegado - - Invalid token received. - Se recibió un token inválido. + + Directory not found: %1 + Directorio no encontrado: %1 - - - - - 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. + + Error while opening directory %1 + Error al abrir el directorio %1 - - Invalid file path was provided. - Se proporcionó una ruta al archivo inválida. + + Error while reading directory %1 + Error al leer el directorio %1 - - Could not find an account for local editing. - No fue posible encontrar una cuenta para edición local + + Filename encoding is not valid + La codificación del nombre del archivo no es válida + + + OCC::EditLocallyJob - - An error occurred trying to verify the request to edit locally. - Ocurrió un error intentando verificar la solicitud de edición local. + + An error occurred during data retrieval. + Ocurrió un error mientras se recababan los datos. - - - - An error occurred during data retrieval. - Ocurrió un error mientras se recababan los datos. + + An error occurred during setup. + Ocurrió un error mientras se hacía la configuración. - - - Could not validate the request to open a file from server. - No se pudo validar la solicitud de apertura de archivo desde el servidor. + + An error occurred trying to synchronise the file to edit locally. + Ocurrió un error mientras se intentaba sincronizar el archivo para edición local. - - - An error occurred trying to synchronise the file to edit locally. - Ocurrió un error mientras se intentaba sincronizar el archivo para edición local. + + An error occurred trying to verify the request to edit locally. + Ocurrió un error intentando verificar la solicitud de 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 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 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 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 este se encuentra sincronizado localmente. - - Invalid local file path. - Ruta al archivo local inválida. + + 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 find an account for local editing. + No fue posible encontrar una cuenta para edición local - - - - - - - Please try again. - Por favor intente de nuevo. + + Could not open %1 + No fue posible abrir %1 - - File %1 already locked. - El archivo %1 ya está bloqueado. + + Could not start editing locally. + No se pudo iniciar la edición local. - - - 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. + + Could not validate the request to open a file from server. + No se pudo validar la solicitud de apertura de archivo desde el servidor. - - File %1 now locked. - El archivo %1 ahora está bloqueado. + + 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 could not be locked. + El archivo %1 no pudo ser bloqueado. - - - 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. + + File %1 now locked. + El archivo %1 ahora está bloqueado. - - Please try again. - Por favor, inténtelo de nuevo. + + Invalid file path was provided. + Se proporcionó una ruta al archivo inválida. - - - OCC::EditLocallyVerificationJob - - Invalid token received. - Recibido token inválido. + + Invalid local file path. + Ruta al archivo local inválida. - - - - Please try again. - Por favor, vuelve a intentarlo. + + Invalid token received. + Se recibió un token inválido. - - Invalid file path was provided. - Se ha dado una ruta de archivos no vá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. - - Could not find an account for local editing. - No se ha podido encontrar una cuenta para edición local. + + Please try again. + Por favor intente de nuevo. + + + OCC::EncryptFolderJob - - Could not start editing locally. - No se ha podido empezar a editar en local. + + 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 - - - An error occurred trying to verify the request to edit locally. - Ha ocurrido un error intentando verificar la petición para editar en local. - - - - 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::EncryptedFolderMetadataHandler - - - - - - - Error fetching metadata. - Error al obtener los metadatos. + + Error fetching encrypted folder ID. + Error al obtener el ID de la carpeta cifrada. - - - - Error locking folder. - Error al bloquear la carpeta. + + Error fetching metadata. + Error al obtener los metadatos. - - Error fetching encrypted folder ID. - Error al obtener el ID de la carpeta cifrada. + + Error locking folder. + Error al bloquear la carpeta. - - Error parsing or decrypting metadata. - Error al analizar o descifrar los metadatos. + + Error parsing or decrypting metadata. + Error al analizar o descifrar los metadatos. - - Failed to upload metadata - Fallo al subir los metadatos + + Failed to upload metadata + Fallo al subir los metadatos - - + + OCC::FileDetails - - %1 second(s) ago - seconds elapsed since file last modified - Hace %1 segundo(s)Hace %1 segundo(s)Hace %1 segundo(s) + + %1 day(s) ago + + + + hace %1 día(s) + - - %1 minute(s) ago - minutes elapsed since file last modified - Hace %1 minuto(s)Hace %1 minuto(s)Hace %1 minuto(s) + + %1 hour(s) ago + + + + hace %1 hora(s) + - - %1 hour(s) ago - hours elapsed since file last modified - Hace %1 hora(s)Hace %1 hora(s)Hace %1 hora(s) + + %1 minute(s) ago + + + + Hace %1 minuto(s) + - - %1 day(s) ago - days elapsed since file last modified - Hace %1 día(s)Hace %1 día(s)Hace %1 día(s) + + %1 month(s) ago + + + + hace %1 mes(es) + - - %1 month(s) ago - months elapsed since file last modified - Hace %1 mes(es)Hace %1 mes(es)Hace %1 mes(es) + + %1 second(s) ago + + + + Hace %1 segundo(s) + - - %1 year(s) ago - years elapsed since file last modified - Hace %1 año(s)Hace %1 año(s)Hace %1 año(s) + + %1 year(s) ago + + + + hace %1 año(s) + - - Locked by %1 - Expires in %2 minute(s) - remaining time before lock expires - Bloqueado por %1 - Expira en %2 minuto(s)Bloqueado por %1 - Expira en %2 minuto(s)Bloqueado por %1 - Expira en %2 minuto(s) - - - + + Locked by %1 - Expires in %2 minute(s) + + + + Bloqueado por %1 - Expira en %2 minuto(s) + + + + OCC::Flow2Auth - - 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. + + 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> + + Error returned from the server: <em>%1</em> + Error devuelto por el servidor: <em>%1</em> - - - There was an error accessing the "token" endpoint: <br><em>%1</em> - Hubo un error accediendo al "token" endpoint: <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. + 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. - - - 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 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 - 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. - - 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> + - - - 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. + + There was an error accessing the "token" endpoint: <br><em>%1</em> + Hubo un error accediendo al "token" endpoint: <br><em>%1</em> + + + OCC::Flow2AuthCredsPage - - Waiting for authorization - Esperando autorización + + Login in your browser (Login Flow v2) + + + + OCC::Flow2AuthWidget - - Polling for authorization - Pidiendo autorización + + Copy Link + Copiar Link - - Starting authorization - Iniciando autorización + + Link copied to clipboard. + Enlace copiado al portapapeles. - - Link copied to clipboard. - Enlace copiado al portapapeles. + + Open Browser + Abrir en el navegador - - Reopen Browser - Reabrir el navegador + + Polling for authorization + Pidiendo autorización @@ -2114,23 +2236,20 @@ Esto podría ser un problema con tu librería OpenSSL Copy Link Copiar Link - - - OCC::Folder - - Local folder %1 does not exist. - La carpeta local %1 no existe. + + Starting authorization + Iniciando autorización - - %1 should be a folder but is not. - %1 debería ser una carpeta, pero no lo es. + + 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. - - %1 is not readable. - %1 es ilegible. + + Waiting for authorization + Esperando autorización @@ -2148,153 +2267,182 @@ Esto podría ser un problema con tu librería OpenSSL - - %1 and %n other file(s) have been removed. - %1 y otro archivo han sido borrados.%1 y otros %n archivos han sido borrados.%1 y otros %n archivos han sido borrados. - - - - %1 has been removed. - %1 names a file. - %1 ha sido eliminado. + + %1 and %n other file(s) are currently locked. + + + + + - - %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 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 ha sido añadido. + + + %1 and %n other file(s) have been added. + + + + + - - %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 and %n other file(s) have been downloaded. + + + + + - - - %1 has been updated. - %1 names a file. - %1 ha sido actualizado. + + + %1 and %n other file(s) have been removed. + + + + + - - %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 and %n other file(s) have been updated. + + + + + - - %1 has been renamed to %2. - %1 and %2 name files. - %1 ha sido renombrado a %2. - - - - %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 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 been moved to %2. - %1 ha sido movido a %2. + + %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.%1 y otros %n archivos han tenido conflictos al sincronizar.%1 y otros %n archivos han tenido conflictos al sincronizar. + + %1 has and %n other file(s) have sync conflicts. + + + + + + + + + %1 has been added. + %1 ha sido añadido. - - %1 has a sync conflict. Please check the conflict file! - Conflicto al sincronizar %1. ¡Por favor compruebe el archivo! + + %1 has been downloaded. + - - %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 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 no se ha podido sincronizar debido a un error. Para más detalles, vea el registro. + + %1 has been moved to %2. + %1 ha sido movido a %2. + + + + %1 has been removed. + %1 ha sido eliminado. - - %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 has been renamed to %2 and %n other file(s) have been renamed. + + + + + - - %1 is currently locked. - %1 está actualmente bloqueado. + + %1 has been renamed to %2. + %1 ha sido renombrado a %2. - - Sync Activity - Actividad de la sincronización + + %1 has been updated. + %1 ha sido actualizado. - - Could not read system exclude file - No se ha podido leer el archivo de exclusión del sistema + + %1 is currently locked. + %1 está actualmente bloqueado. - - A new folder larger than %1 MB has been added: %2. - - Una carpeta mayor de %1 MB ha sido añadida: %2. - + + %1 is not readable. + %1 es ilegible. - - A folder from an external storage has been added. - - Una carpeta de almacenamiento externo ha sido añadida. - + + %1 should be a folder but is not. + %1 debería ser una carpeta, pero no lo es. - - 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 from an external storage has been added. + Una carpeta de almacenamiento externo ha sido añadida. - - All files in the sync folder "%1" folder were deleted on the server. -These deletes will be synchronized to your local sync folder, making such files unavailable unless you have a right to restore. -If you decide to restore the files, they will be re-synced with the server if you have rights to do so. -If you decide to delete the files, they will be unavailable to you, unless you are the owner. - Todos los archivos en la carpeta de sincronización "%1" han sido eliminados del servidor. -Esta eliminación se sincronizará con tu carpeta local, haciendo que esos archivos ya no estén disponibles a no ser que tengas derecho a restaurarlos. -Si decides restaurar los archivos, volverán a sincronizarse con el servidor si tienes derecho a hacer esto. -Si decides eliminar los archivos, ya no los tendrás disponibles, a no ser que seas el propietario. + + 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 - - All the files in your local sync folder "%1" were deleted. These deletes will be synchronized with your server, making such files unavailable unless restored. -Are you sure you want to sync those actions with the server? -If this was an accident and you decide to keep your files, they will be re-synced from the server. - Todos los archivos en la carpeta de sincronización "%1" serán eliminados. -Esta eliminación será sincronizada con tu servidor, haciendo que esos archivos no estén disponibles a no ser que sean restaurados. -¿Estás seguro de que deseas sincronizar esta acción con el servidor? -Si esto ha sido un accidente, y decides mantener tus archivos, serán re-sincronizados desde el servidor. + + 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. - - Remove All Files? - ¿Eliminar todos los archivos? + + 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. + 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. - - Remove all files - Eliminar todos los archivos + + A new folder larger than %1 MB has been added: %2. + Una carpeta mayor de %1 MB ha sido añadida: %2. - - Keep files - Mantener archivos + + All files got deleted from your local sync folder '%1'. +These files will be deleted from the server and will not be available on your other devices if they will not be restored. +If this action was unintended you can restore the lost data now. + @@ -2324,23 +2472,26 @@ Si esto ha sido un accidente, y decides mantener tus archivos, serán re-sincron ¿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. + All the files in your local sync folder "%1" were deleted. These deletes will be synchronized with your server, making such files unavailable unless restored. +Are you sure you want to sync those actions with the server? +If this was an accident and you decide to keep your files, they will be re-synced from the server. + Se han borrado todos los archivos de su carpeta de sincronización local "%1". Estos borrados se sincronizarán con tu servidor, haciendo que dichos archivos no estén disponibles a menos que se restauren. +¿Estás seguro de que quieres sincronizar esas acciones con el servidor? +Si ha sido un accidente y decides conservar tus archivos, se volverán a sincronizar desde el 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á. + + Backup detected + - - Changes in synchronized folders could not be tracked reliably. + + 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). %1 - Los cambios en las carpetas sincronizadas no se han podido rastrear de manera fiable. + Los cambios en las carpetas sincronizadas no se han podido rastrear de manera fiable. Esto significa que el cliente de sincronización podría no subir inmediatamente los cambios de las carpetas locales, y en lugar de eso solo escaneará buscando cambios locales y los subirá ocasionalmente (cada dos horas por defecto). @@ -2389,71 +2540,61 @@ Alternativamente, puedes restaurar todos los archivos borrados descargándolos d Restore Files from Server Restaurar los archivos desde el servidor - - - OCC::FolderCreationDialog - - Create new folder - Crear nueva carpeta + + Normal Synchronisation + - - Enter folder name - Escriba el nombre de la carpeta + + 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. - - Folder already exists - Ya existe la carpeta + Proceed to remove all files + Proceda a eliminar todos los archivos - - Error - Error + + Proceed with Deletion + Proceder a la supresión - - Could not create a folder! Check your write permissions. - ¡No se pudo crear la carpeta! Comprueba los permisos de escritura. + Remove all files + Eliminar todos los archivos - - - OCC::FolderMan - - Could not reset folder state - No se ha podido restablecer el estado de la carpeta + + Remove all files? + ¿Eliminar todos los archivos? - - 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. + Remove All Files? + ¿Eliminar todos los archivos? - - (backup) - (copia de seguridad) + + Restore deleted files + - - (backup %1) - (copia de seguridad %1) + Restore files + Restaurar archivos - - Undefined state. - Estado no definido. + + Restore Files from Server + Restaurar archivos del servidor - - Waiting to start syncing. - Esperando para comenzar la sincronización. + + Restore Files to Server + Restaurar archivos en el servidor - - Preparing for sync. - Preparándose para sincronizar. + + Stop syncing + Detener sincronización @@ -2486,44 +2627,50 @@ Alternativamente, puedes restaurar todos los archivos borrados descargándolos d Sincronizando %1 - - Sync is running. - Sincronización en funcionamiento. + + Would you like to stop syncing this folder? + ¿Desea detener la sincronización de esta carpeta? + + + OCC::FolderCreationDialog - - Sync finished with unresolved conflicts. - La sincronización finalizó pero con conflictos sin resolver. + + %1 Create new folder + %1 Crear nueva carpeta - - Last sync was successful. - La última sincronización se ha realizado con éxito. + + Could not create a folder! Check your write permissions. + ¡No se pudo crear la carpeta! Comprueba los permisos de escritura. - - Setup error. - Error de configuración. + + Enter folder name + Escriba el nombre de la carpeta - - Sync request was cancelled. - La solicitud de sincronización fue cancelada. + + Folder already exists + Ya existe la carpeta + + + OCC::FolderMan - - Sync is paused. - La sincronización está en pausa. + + (backup %1) + (copia de seguridad %1) - - %1 (Sync is paused) - %1 (Sincronización en pausa) + + (backup) + (copia de seguridad) - - No valid folder selected! - ¡La carpeta seleccionada no es válida! + + %1 (Sync is paused) + %1 (Sincronización en pausa) @@ -2531,9 +2678,9 @@ Alternativamente, puedes restaurar todos los archivos borrados descargándolos d ¡La ruta seleccionada no existe! - - The selected path is not a folder! - ¡La ruta seleccionada no es una carpeta! + + Could not reset folder state + No se ha podido restablecer el estado de la carpeta @@ -2602,103 +2749,102 @@ 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. - - - OCC::FolderStatusDelegate - - Add Folder Sync Connection - Añadir conexión para el directorio de sincronización + + Sync is paused. + La sincronización está en pausa. - - File - Archivo + + Sync is running. + Sincronización en funcionamiento. - - - OCC::FolderStatusModel - - You need to be connected to add a folder - Necesita estar conectado para añadir una carpeta + + Sync request was cancelled. + La solicitud de sincronización fue cancelada. - - Click this button to add a folder to synchronize. - Haga clic en este botón para añadir una carpeta a sincronizar + + Sync was successful, unresolved conflicts. + - - Could not decrypt! - ¡No fue posible desencriptar! + + Syncing %1 (A few seconds left) + Sincronizando %1 (Quedan unos segundos) - - - %1 (%2) - %1 (%2) + + Syncing %1 of %2 (%3 left) + Sincronizando %1 de %2 (quedan %3) - - Error while loading the list of folders from the server. - Error mientras se cargaba la lista de carpetas desde el servidor. + + Syncing %1 of %2 (A few seconds left) + Sincronizando %1 de %2 (quedan unos segundos) - - Fetching folder list from server … - Obteniendo la lista de carpetas del servidor ... + + 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. + - - There are unresolved conflicts. Click for details. - Hay conflictos sin resolver. Haz clic para más detalles. + + The folder %1 is used in a folder sync connection! + - - Virtual file support is enabled. - El soporte para archivos virtuales está activado. + + The local folder %1 already contains a folder used in a folder sync connection. Please pick another one! + El directorio local %1 ya contiene un directorio usado en una conexión de sincronización de directorios. Por favor, elija otro. - - Signed out - Cerrar sesión + + The local folder %1 is already contained in a folder used in a folder sync connection. Please pick another one! + El directorio local %1 está dentro de un directorio usado en una conexión de sincronización de directorios. Por favor, elija otro. - - Synchronizing VirtualFiles with local folder - Sincronizando archivos virtuales con carpeta local + + The selected path does not exist! + ¡La ruta seleccionada no existe! - - Synchronizing with local folder - Sincronizando con carpeta local + + The selected path is not a folder! + ¡La ruta seleccionada no es una carpeta! - - Synchronizing virtual files in local folder - Sincronizando archivos virtuales en carpeta local + + There is already a sync from the server to this local folder. Please pick another local folder! + Ya existe una tarea de sincronización entre el servidor y esta carpeta. Por favor elija otra carpeta local. - - Synchronizing files in local folder - Sincronizando archivos en carpeta local + + Undefined state. + Estado no definido. - - Checking for changes in remote "%1" - Buscando cambios en carpeta remota "%1" + + User Abort. + - - Checking for changes in local "%1" - Buscando cambios en carpeta local "%1" + + Waiting to start syncing. + Esperando para comenzar la sincronización. - - Reconciling changes - Reconciliando cambios + + You have no permission to write to the selected folder! + ¡No tiene permiso para escribir en la carpeta seleccionada! + + + OCC::FolderStatusDelegate Syncing local and remote changes @@ -2711,16 +2857,14 @@ For advanced users: this issue might be related to multiple sync database files %1 %2 … - - Syncing %1 - Example text: "Syncing 'foo.txt', 'bar.txt'" - Sincronizando %1 + + File + Archivo - - - , - , + + Synchronize any other local folder with your %1 + Sincroniza cualquier otra carpeta local con tu %1 @@ -2728,16 +2872,18 @@ For advanced users: this issue might be related to multiple sync database files Example text: "Download 24Kb/s" (%1 is replaced by 24Kb (translated)) Descargando %1/s + + + OCC::FolderStatusModel - - download %1/s - Example text: "download 24Kb/s" (%1 is replaced by 24Kb (translated)) - descargando: %1/s + + , + , - - ↓ %1/s - ↓ %1/s + + , '%1' + @@ -2746,49 +2892,44 @@ For advanced users: this issue might be related to multiple sync database files Subiendo %1 /s - - upload %1/s - Example text: "upload 24Kb/s" (%1 is replaced by 24Kb (translated)) - cargar %1/s + + %1 (%2) + %1 (%2) - - ↑ %1/s - ↑ %1/s + + %1 %2 + %1 %2 - - %1 %2 (%3 of %4) - Example text: "uploading foobar.png (2MB of 2MB)" - %1 %2 (%3 de %4) + + %1 %2 … + %1 %2 … - - %1 %2 - Example text: "uploading foobar.png" - %1 %2 + + %1 %2 (%3 of %4) + %1 %2 (%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 + + %1 of %2, file %3 of %4 + %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 + + %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 + + ↑ %1/s + ↑ %1/s - - file %1 of %2 - archivo %1 de %2 + + ↓ %1/s + ↓ %1/s @@ -2800,105 +2941,90 @@ For advanced users: this issue might be related to multiple sync database files About to start syncing A punto de empezar a sincronizar - - - Waiting for %n other folder(s) … - Esperando a otra %n carpeta ...Esperando a %n carpeta(s)…Esperando a %n carpeta(s)… + + + Checking for changes in local '%1' + - - Waiting … - Esperando ... + + Checking for changes in local "%1" + Buscando cambios en carpeta local "%1" - - Preparing to sync … - Preparando la sincronización ... + + Checking for changes in remote '%1' + - - - OCC::FolderWatcher - - The watcher did not receive a test notification. - El vigilante no recibió una notificación de prueba. + + Checking for changes in remote "%1" + Buscando cambios en carpeta remota "%1" - - - 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. + + Click this button to add a folder to synchronize. + Haga clic en este botón para añadir una carpeta a sincronizar - - - OCC::FolderWizard - - Add Folder Sync Connection - Añadir conexión para el directorio de sincronización + + Could not decrypt! + ¡No fue posible desencriptar! - - Add Sync Connection - Añadir conexión de sincronización + + download %1/s + descargando: %1/s - - - OCC::FolderWizardLocalPath - - Click to select a local folder to sync. - Haga clic para seleccionar una carpeta local que sincronizar. + + Download %1/s + Descargando %1/s - - Enter the path to the local folder. - Introduzca la ubicación de la carpeta local. + + Error while loading the list of folders from the server. + Error mientras se cargaba la lista de carpetas desde el servidor. - - Select the source folder - Seleccione la carpeta de origen + + Fetching folder list from server … + Obteniendo la lista de carpetas del servidor ... - - - OCC::FolderWizardRemotePath - - Create Remote Folder - Crear carpeta remota + + file %1 of %2 + archivo %1 de %2 - - 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": + + File %1 of %2 + Archivo %1 de %2 - - Folder was successfully created on %1. - La carpeta ha sido creada con éxito en %1. + + Preparing to sync … + Preparando la sincronización ... - - Authentication failed accessing %1 - Fallo de autenticación al acceder a %1 + + Reconciling changes + Reconciliando cambios - - Failed to create the folder on %1. Please check manually. - Fallo al crear la carpeta %1. Por favor, revíselo manualmente. + + Synchronizing files in local folder + Sincronizando archivos en carpeta local - - Failed to list a folder. Error: %1 - Fallo al listar una carpeta. Error: %1 + + Synchronizing virtual files in local folder + Sincronizando archivos virtuales en carpeta local - - Choose this to sync the entire account - Elija esto para sincronizar la cuenta entera + + Synchronizing VirtualFiles with local folder + Sincronizando archivos virtuales con carpeta local @@ -2913,39 +3039,34 @@ For advanced users: this issue might be related to multiple sync database files Esta carpeta ya se ha sincronizado. - - You are already syncing <i>%1</i>, which is a parent folder of <i>%2</i>. - Ya ha sincronizado <i>%1</i>, el cual es la carpeta de <i>%2</i>. + + Syncing local and remote changes + Sincronizando cambios locales y remotos - - You are already syncing <i>%1</i>, which is a subfolder of <i>%2</i>. - Ya estás sincronizando <i>%1</i>, que es una subcarpeta de <i>%2</i>. + + There are unresolved conflicts. Click for details. + Hay conflictos sin resolver. Haz clic para más detalles. - - - OCC::FolderWizardSelectiveSync - - - Use virtual files instead of downloading content immediately %1 - Usa archivos virtuales en vez de descargar el contenido inmediatamente %1 + + upload %1/s + cargar %1/s - - - (experimental) - (experimental) + + Upload %1/s + Subiendo %1 /s - - 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 file support is enabled. + El soporte para archivos virtuales está activado. - - Virtual files are not available for the selected folder - Los archivos virtuales no están disponibles para la carpeta seleccionada + + Waiting … + Esperando ... @@ -2956,210 +3077,229 @@ 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 se ha recibido ninguna E-Tag del servidor, revise el proxy/puerta de enlace + + 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. + + + OCC::FolderWizard - - We received a different E-Tag for resuming. Retrying next time. - Se ha recibido una E-Tag distinta para reanudar. Se volverá a intentar. + + Add Sync Connection + Añadir conexión de sincronización + + + OCC::FolderWizardLocalPath - - We received an unexpected download Content-Length. - Hemos recibido una longitud inesperada de contenido de la descarga. + + Choose + Seleccione - - Server returned wrong content-range - El servidor ha devuelto un content-range erróneo + + Click to select a local folder to sync. + Haga clic para seleccionar una carpeta local que sincronizar. - - Connection Timeout - Tiempo de espera de conexión agotado + + Enter the path to the local folder. + Introduzca la ubicación de la carpeta local. - - - OCC::GeneralSettings - - General Settings - Ajustes generales + + Select the source folder + Seleccione la carpeta de origen + + + OCC::FolderWizardRemotePath - - - About - Acerca de + + Authentication failed accessing %1 + Fallo de autenticación al acceder a %1 - - &Launch on System Startup - &Ejecutar al iniciar el sistema + + Choose this to sync the entire account + Elija esto para sincronizar la cuenta entera - - Show Call Notifications - Mostrar notificaciones de llamadas + + Create Remote Folder + Crear carpeta remota - - For System Tray - A la bandeja del sistema + + Enter the name of the new folder to be created below '%1': + - - Legal notice - Aviso legal + + 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": - - Use &Monochrome Icons - Usar iconos &monocromáticos + + Failed to create the folder on %1. Please check manually. + Fallo al crear la carpeta %1. Por favor, revíselo manualmente. - - Show Chat Notifications - + + Failed to list a folder. Error: %1 + Fallo al listar una carpeta. Error: %1 - - Show Server &Notifications - Mostrar servidor y notificaciones + + Folder was successfully created on %1. + La carpeta ha sido creada con éxito en %1. - - Advanced - Avanzado + + This folder is already being synced. + Esta carpeta ya se ha sincronizado. - - Ask for confirmation before synchronizing new folders larger than - Pedir confirmación antes de sincronizar carpetas nuevas mayores a + + You are already syncing <i>%1</i>, which is a parent folder of <i>%2</i>. + Ya ha sincronizado <i>%1</i>, el cual es la carpeta de <i>%2</i>. - - Updates - Actualizaciones + + You are already syncing <i>%1</i>, which is a subfolder of <i>%2</i>. + Ya estás sincronizando <i>%1</i>, que es una subcarpeta de <i>%2</i>. + + + OCC::FolderWizardSelectiveSync - - &Automatically check for Updates - &Comprobar actualizaciones automáticamente + + Use virtual files instead of downloading content immediately %1 + Usa archivos virtuales en vez de descargar el contenido inmediatamente %1 - - MB - Trailing part of "Ask confirmation before syncing folder larger than" - MB + + Virtual files are not available for the selected folder + Los archivos virtuales no están disponibles para la carpeta seleccionada - - &Channel - &Channel + + 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::FormatWarningsWizardPage - - 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 + <b>Warning:</b> + <b>Advertencia:</b> - - Automatically disable synchronisation of folders that overcome limit - Deshabilitar sincronización de manera automática para las carpetas que sobrepasen el límite + <b>Warning:</b> %1 + <b>Atención:</b> %1 + + + OCC::GETFileJob - - Ask for confirmation before synchronizing external storages - Preguntar si se desea sincronizar carpetas de almacenamiento externo + + Connection Timeout + Tiempo de espera de conexión agotado - - Move removed files to trash - Mover archivos eliminados a la papelera + + No E-Tag received from server, check Proxy/Gateway + No se ha recibido ninguna E-Tag del servidor, revise el proxy/puerta de enlace - - &Check for Update now - &Comprobar ahora las actualizaciones + + Server returned wrong content-range + El servidor ha devuelto un content-range erróneo - - Show sync folders in &Explorer's navigation pane - Mostrar carpetas sincronizadas en el panel de navegación del &Explorador + + We received a different E-Tag for resuming. Retrying next time. + Se ha recibido una E-Tag distinta para reanudar. Se volverá a intentar. - - S&how crash reporter - M&ostrar el informe de fallos + + We received an unexpected download Content-Length. + Hemos recibido una longitud inesperada de contenido de la descarga. + + + OCC::GeneralSettings - - Ask for confirmation before synchronizing folders larger than - Preguntar si se desea sincronizar carpetas mayores de + + - 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. + - beta: contiene versiones con nuevas características que pueden no haberse probado exhaustivamente. +- diaria: contiene versiones creadas diariamente solo para pruebas y desarrollo. + +Bajar de versión no es inmediatamente posible: cambiar de beta a estable significa esperar a la siguiente ersión estable. - - Edit &Ignored Files - Editar archivos &ignorados + + - enterprise: contains stable versions for customers. + +Downgrading versions is not possible immediately: changing from stable to enterprise means waiting for the new enterprise version. + -empresarial: contiene versiones estables para clientes. + +Bajar de versión no es inmediatamente posible: cambiar de estable a empresarial significa esperar a la nueva versión empresarial. - - - Create Debug Archive - Crear archivo de depuración + + &Analysis data collection for needs-based design + &Recogida de datos de análisis para un diseño basado en las necesidades - - Info - Información + &Automatically check for Updates + Comprobación automática de actualizaciones - - Desktop client x.x.x - Cliente de escritorio x.x.x + + &Automatically check for updates + Comprobar &actualizaciones automáticamente - - Show sync folders in &Explorer's Navigation Pane - Mostrar carpetas sincronizadas en el panel de navegación del explorador + &Channel + &Canal - - Update channel - Canal de actualización + &Check for Update now + &Compruebe la actualización ahora - - &Restart && Update - &Reiniciar && Actualizar + &Launch on System Startup + &Launch al iniciar el sistema - - &Automatically check for updates - Comprobar &actualizaciones automáticamente + + &Restart && Update + &Reiniciar && Actualizar - - Check Now - Comprobar ahora + About + Acerca de - - Usage Documentation - Documentación de uso + + Ask for confirmation before + synchronizing new folders larger than + Pide confirmación antes de sincronizar nuevas carpetas de más de - - Legal Notice - Aviso Legal + + Ask for confirmation before synchronizing + external storages + Pide confirmación antes de sincronizar almacenamientos externos - - Server notifications that require attention. - Notificaciones del servidor que requieren atención. + Ask for confirmation before synchronizing external storages + Pide confirmación antes de sincronizar almacenamientos externos @@ -3167,40 +3307,33 @@ For advanced users: this issue might be related to multiple sync database files - - Show call notification dialogs. - Mostrar diálogos de notificación de llamadas. + Ask for confirmation before synchronizing new folders larger than + Pedir confirmación antes de sincronizar carpetas nuevas mayores a - - 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. + + Automatically disable synchronisation of + folders that overcome limit + Desactivar automáticamente la sincronización de carpetas que superen el límite - - - stable - stable + Automatically disable synchronisation of folders that overcome limit + Deshabilitar sincronización de manera automática para las carpetas que sobrepasen el límite - - - beta - beta + + beta + beta - - Change update channel? - ¿Cambiar el canal de actualización? + + Change update channel + Cambiar canal de actualización - - The update channel determines which client updates will be offered for installation. The "stable" channel contains only upgrades that are considered reliable, while the versions in the "beta" channel may contain newer features and bugfixes, but have not yet been tested thoroughly. - -Note that this selects only what pool upgrades are taken from, and that there are no downgrades: So going back from the beta channel to the stable channel usually cannot be done immediately and means waiting for a stable version that is newer than the currently installed beta version. - El canal de actualización determina qué actualizaciones del cliente se ofrecerán para su instalación. El canal "estable" sólo contiene actualizaciones que se consideran fiables, mientras que las versiones del canal "beta" pueden contener nuevas características y correcciones de errores, pero aún no se han probado a fondo. - -Tenga en cuenta que esto sólo selecciona de qué grupo se tomarán las actualizaciones, y que no hay vuelta atrás: Por lo tanto volver del canal "beta" al canal "estable" normalmente no puede hacerse inmediatamente y significa esperar a una versión estable que sea más reciente que la versión beta instalada actualmente. + + Change update channel? + ¿Cambiar el canal de actualización? @@ -3250,301 +3383,312 @@ Bajar de versión no es inmediatamente posible: cambiar de estable a empresarial - - Change update channel - Cambiar canal de actualización + + Debug archive is created at %1 + El archivo de depuración se ha creado en %1 - - Cancel - Cancelar + + Desktop client x.x.x + Cliente de escritorio x.x.x - - Zip Archives - Archivos Zip + + Edit &Ignored Files + Editar archivos &ignorados - - Debug Archive Created - Archivo de depuración creado + + enterprise + empresarial - - Debug archive is created at %1 - El archivo de depuración se ha creado en %1 + + For System Tray + A la bandeja del sistema - - - OCC::GetOrCreatePublicLinkShare - - Password for share required - Se requiere contraseña para compartir + + General Settings + Ajustes generales - - Please enter a password for your link share: - Por favor, introduce una contraseña para tu enlace compartido: + Info + Información - - Sharing error - Error al compartir + Legal notice + Aviso legal - - Could not retrieve or create the public link share. Error: - -%1 - No se ha podido recuperar o crear el enlace público compartido. Error: - -%1 + + Legal Notice + Aviso Legal - - - 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> + MB + MB - - Reading from keychain failed with error: "%1" - La lectura del keychain falló con el error "%1" + + More Information + Más información - - Enter Password - Introduzca la contraseña + + Move removed files to trash + Mover archivos eliminados a la papelera - - <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. + + Notify when synchronised folders grow + larger than specified limit + Notificar cuando las carpetas sincronizadas superan el límite especificado. - - - OCC::IgnoreListEditor - - Ignored Files Editor - Editor de archivos ignorados + 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 - - Global Ignore Settings - Ajustes de Ignorar de modo global + + Open Source Software + Software de código abierto - - Sync hidden files - Sincronizar archivos ocultos + + Privacy Policy + Política de privacidad - - Files Ignored by Patterns - Archivos ignorados por patrones + + S&how crash reporter + M&ostrar el informe de fallos - - 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. + + Server notifications that require attention. + Notificaciones del servidor que requieren atención. + + + + Show call notification dialogs. + Mostrar diálogos de notificación de llamadas. + + + Show Call Notifications + Mostrar notificaciones de llamadas + + + + Show chat notification dialogs. + + + + + Show Chat Notifications + + + + Show Server &Notifications + Mostrar servidor &notificaciones - - - OCC::IgnoreListTableWidget - - Pattern - Patrón + + Show sync folders in &Explorer's navigation + pane + Mostrar carpetas de sincronización en el panel de navegación de &Explorer - - Allow Deletion - Permitir borrado + Show sync folders in &Explorer's navigation pane + Mostrar carpetas sincronizadas en el panel de navegación del &Explorador - - Add - Añadir + Show sync folders in &Explorer's Navigation Pane + Mostrar carpetas de sincronización en el panel de navegación de &Explorer - - Remove - Eliminar + + stable + stable - - Remove all - Eliminar todos + + The channel determines which upgrades will be offered to install: +- stable: contains tested versions considered reliable + El canal determina qué actualizaciones se ofrecerán para instalar: +- estable: contiene versiones probadas consideradas fiables. - - Files or folders matching a pattern will not be synchronized. + + The update channel determines which client updates will be offered for installation. The "stable" channel contains only upgrades that are considered reliable, while the versions in the "beta" channel may contain newer features and bugfixes, but have not yet been tested thoroughly. -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. +Note that this selects only what pool upgrades are taken from, and that there are no downgrades: So going back from the beta channel to the stable channel usually cannot be done immediately and means waiting for a stable version that is newer than the currently installed beta version. + El canal de actualización determina qué actualizaciones del cliente se ofrecerán para su instalación. El canal "estable" sólo contiene actualizaciones que se consideran fiables, mientras que las versiones del canal "beta" pueden contener nuevas características y correcciones de errores, pero aún no se han probado a fondo. -Los elementos que se permite su borrado se eliminarán si impiden que un directorio se elimine. Esto es útil para los metadatos. +Tenga en cuenta que esto sólo selecciona de qué grupo se tomarán las actualizaciones, y que no hay vuelta atrás: Por lo tanto volver del canal "beta" al canal "estable" normalmente no puede hacerse inmediatamente y significa esperar a una versión estable que sea más reciente que la versión beta instalada actualmente. - - Could not open file - No se ha podido abrir el archivo + + Update channel + Canal de actualización - - Cannot write changes to "%1". - No se pudo escribir los cambios a "%1". + + Updates + Actualizaciones - - Add Ignore Pattern - Añadir patrón de ignorados + + Usage Documentation + Documentación de uso - - Add a new ignore pattern: - Añadir un nuevo patrón de archivos ignorados: + Use &Monochrome Icons + Utilizar &Iconos monocromos - - - OCC::InvalidFilenameDialog - - Invalid filename - Nombre de archivo no válido + + 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. - - 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. + + Zip Archives + Archivos Zip + + + OCC::GetOrCreatePublicLinkShare - - Error - Error + + Could not retrieve or create the public link share. Error: + +%1 + No se ha podido recuperar o crear el enlace público compartido. Error: + +%1 - - Please enter a new name for the file: - Por favor, escribe un nuevo nombre para el archivo: + + Password for share required + Se requiere contraseña para compartir - - New filename - Nuevo nombre de archivo + + Please enter a password for your link share: + Por favor, introduce una contraseña para tu enlace compartido: - - Rename file - Renombrar archivo + + Sharing error + Error al compartir + + + OCC::HttpCredentialsGui - - 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. + + <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. - - The following characters are not allowed on the system: * " | & ? , ; : \ / ~ < > leading/trailing spaces - Los siguientes caracteres no se permiten en el sistema: * " | & ? , ; : \ / ~ < > espacios de entrada/salida + + Enter Password + Introduzca la contraseña - - 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 no permitidos en e lservidor. + + Please enter %1 password:<br><br>User: %2<br>Account: %3<br> + - - The following characters are not allowed: %1 - Los siguientes caracteres no están permitidos: %1 + + 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> - - The following basenames are not allowed: %1 - Los siguientes basenames no están permitidos: %1 + + Reading from keychain failed with error: '%1' + - - The following filenames are not allowed: %1 - Los siguientes nombres de archivo no están permitidos: %1 + + Reading from keychain failed with error: "%1" + La lectura del keychain falló con el error "%1" + + + OCC::IgnoreListEditor - - The following file extensions are not allowed: %1 - Las siguients extensiones de archivo no están permitidas: %1 + + Files Ignored by Patterns + Archivos ignorados por patrones - - Checking rename permissions … - Comprobando los permisos de renombramiento ... + + Global Ignore Settings + Ajustes de Ignorar de modo global - - 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. + + Ignored Files Editor + Editor de archivos ignorados - - Failed to fetch permissions with error %1 - Fallo en la obtención de permisos con error %1 + + Sync hidden files + Sincronizar archivos ocultos - - Filename contains leading and trailing spaces. - El nombre del archivo contiene espacios iniciales y finales. + + This entry is provided by the system at '%1' and cannot be modified in this view. + - - Filename contains leading spaces. - El nombre del archivo contiene espacios iniciales. + + 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 - - Filename contains trailing spaces. - El nombre del archivo contiene espacios finales. + + Add + Añadir - - Use invalid name - Nombre no válido + Add a new ignore pattern: + Añadir un nuevo patrón de ignorar: - - Filename contains illegal characters: %1 - El nombre del archivo contiene caracteres ilegales: %1 + Add Ignore Pattern + Añadir patrón de ignorar - - 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. + + Add New Ignore Pattern + Añadir nuevo patrón de ignorar - - 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. + + Allow Deletion + Permitir borrado - - Could not rename local file. %1 - No se ha podido renombrar el archivo local. %1 + + Cannot write changes to '%1'. + - - - OCC::LegalNotice - - - Legal notice - Aviso legal + + Cannot write changes to "%1". + No se pudo escribir los cambios a "%1". - - Close - Cerrar + + Could not open file + No se ha podido abrir el archivo @@ -3557,381 +3701,376 @@ Los elementos que se permite su borrado se eliminarán si impiden que un directo <p>Copyright 2017-2023 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> + + Files or folders that match this pattern will not be synchronized. + +Objects that are allowed to be deleted will be deleted if they would prevent a folder from being deleted. This is useful for metadata. + 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. - - - OCC::LogBrowser - - Log Output - Salida del registro + + Ignore Pattern + Ignorar patrón - - 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 - El cliente puede escribir registros de depuración a una carpeta temporal. Estos registros son muy útiles para diagnosticar problemas. -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 + + Pattern + Patrón - - Enable logging to temporary folder - Activar la escritura de registros a una carpeta temporal + + Remove + Eliminar - - 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. + + Remove all + Eliminar todos + + + OCC::InvalidFilenameDialog - - Open folder - Abrir carpeta + + 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. - - - OCC::Logger - - Error - Error + + Checking rename permissions … + Comprobando los permisos de renombramiento ... - - <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> + + Could not rename local file. %1 + No se ha podido renombrar el archivo local. %1 - - - OCC::Mac::FileProviderEditLocallyJob - - Could not start editing locally. - No se ha podido empezar a editar localmente. + + Invalid filename + Nombre de archivo no válido - - An error occurred during setup. - Ha ocurrido un error durante la configuración. + + Please enter a new name for the file: + Por favor, escribe un nuevo nombre para el archivo: - - Could not find a file for local editing.Make sure its path is valid and it is synced locally. - No se ha podido encontrar un archivo para edición local. Asegúrate de que su ruta sea válida y esté sincronizado localmente. + + 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 no permitidos en e lservidor. - - Could not get file ID. - No se ha podido obtener la ID del 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. - - Could not get file identifier. - No se pudo obtener el identificador del 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. - - The file identifier is empty. - El identificador del archivo está vacío. + + The following basenames are not allowed: %1 + Los siguientes basenames no están permitidos: %1 - - - OCC::NSISUpdater - - New Version Available - Nueva versión disponible + + The following characters are not allowed on the system: * " | & ? , ; : \ / ~ < > leading/trailing spaces + Los siguientes caracteres no se permiten en el sistema: * " | & ? , ; : \ / ~ < > espacios de entrada/salida - - <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> + + The following characters are not allowed: %1 + Los siguientes caracteres no están permitidos: %1 - - Skip this time - Omitir esta vez + + The following file extensions are not allowed: %1 + Las siguients extensiones de archivo no están permitidas: %1 - - Get update - Actualizar + + The following filenames are not allowed: %1 + Los siguientes nombres de archivo no están permitidos: %1 + + + OCC::LegalNotice - - Update Failed - La actualización falló + + <p>Copyright 2017-2020 Nextcloud GmbH<br />Copyright 2012-2018 ownCloud GmbH</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>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>Copyright 2017-2023 Nextcloud GmbH<br />Copyright 2012-2023 ownCloud GmbH</p> + <p>Copyright 2017-2023 Nextcloud GmbH<br />Copyright 2012-2023 ownCloud GmbH</p> - - Ask again later - Preguntar de nuevo más tarde + + <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> - - Restart and update - Reiniciar y actualizar + + Close + Cerrar + + + OCC::LogBrowser - - Update manually - Actualizar manualmente + + &Capture debug messages + - - - OCC::NetworkSettings - - Proxy Settings - Configuración del proxy + + &Find + - - No Proxy - Sin proxy + + &Search: + - - Use system proxy - Usar proxy del sistema + + Clear + - - Specify proxy manually as - Especificar manualmente un proxy como + + Clear the log display. + - - Host - Servidor + + Could not write to log file %1 + - - Proxy server requires authentication - El servidor proxy requiere autenticación + + Enable logging to temporary folder + Activar la escritura de registros a una carpeta temporal - - Note: proxy settings have no effects for accounts on localhost - Nota: los ajustes de proxy no tienen efecto para cuentas en el sistema local. + + Log Output + Salida del registro - - Manually specify proxy - Proxy especificado manualmente + + Permanently save logs + - - No proxy - Sin proxy + + S&ave + - - - - Use global settings - Usar la configuración global + + Save log file + - - Download Bandwidth - Velocidad de descarga + + Save the log file to a file on disk for debugging. + - - - No limit - Ilimitado + + 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 + El cliente puede escribir registros de depuración a una carpeta temporal. Estos registros son muy útiles para diagnosticar problemas. +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 - - - KBytes/s - KBytes/s + + 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. - - - Limit to - Limitar a + + When this option is enabled and no other logging is configured, logs will be written to a temporary folder and expire after a few hours. This setting persists across client restarts. + +Logs will be written to %1 + + + + OCC::Logger - - - Limit to 3/4 of estimated bandwidth - Limitar a 3/4 de la velocidad estimada + + <nobr>File '%1'<br/>cannot be opened for writing.<br/><br/>The log output can <b>not</b> be saved!</nobr> + - - - Limit automatically - Limitar automáticamente + + <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> + + + OCC::Mac::FileProviderEditLocallyJob - - Upload Bandwidth - Velocidad de subida + + Could not find a file for local editing.Make sure its path is valid and it is synced locally. + No se ha podido encontrar un archivo para edición local. Asegúrate de que su ruta sea válida y esté sincronizado localmente. - - Hostname of proxy server - Nombre del host para servidor proxy + + Could not get file ID. + No se ha podido obtener la ID del archivo. - - Username for proxy server - Nombre de usuario para el servidor proxy + + Could not get file identifier. + No se pudo obtener el identificador del archivo. - - Password for proxy server - Contraseña para el servidor proxy + + The file identifier is empty. + El identificador del archivo está vacío. + + + OCC::NSISUpdater - - HTTP(S) proxy - Proxy HTTP(S) + + <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. - - SOCKS5 proxy - Proxy SOCKS5 + + <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> - - - OCC::OCUpdater - - New %1 update ready - La nueva %1 actualización está lista + + Ask again later + Preguntar de nuevo más tarde - - 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. + + Get update + Actualizar - - Downloading %1 … - Descarganod %1… + + New Version Available + Nueva versión disponible - - Downloading %1. Please wait … - Descargando %1. Por favor, espere … + + Restart and update + Reiniciar y actualizar - - %1 available. Restart application to start the update. - %1 disponible. Reinicia la aplicación para empezar la actualización. + + Skip this time + Omitir esta vez - - 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. + + Skip this version + - - 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. + + Update Failed + La actualización falló - - Could not check for new updates. - No se puede comprobar si hay actualizaciones. + + Update manually + Actualizar manualmente + + + OCC::NetworkSettings - - 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. + + Download Bandwidth + Velocidad de descarga - - Checking update server … - Consultando al servidor de actualizaciones ... + + Host + Servidor - - Update status is unknown: Did not check for new updates. - Estado de actualización desconocido: no se buscaron nuevas actualizaciones. + + Hostname of proxy server + Nombre del host para servidor proxy - - No updates available. Your installation is at the latest version. - No hay actualizaciones disponibles. Tiene la última versión. + + HTTP(S) proxy + Proxy HTTP(S) - - Update Check - Comprobar si hay actualizaciones + + KBytes/s + KBytes/s - - - OCC::OwncloudAdvancedSetupPage - - Connect - Conectar + + Limit automatically + Limitar automáticamente - - - Use &virtual files instead of downloading content immediately %1 - Usa &archivos virtuales en vez de descargar el contenido inmediatamente %1 + + Limit to + Limitar a - - - (experimental) - (experimental) + + Limit to 3/4 of estimated bandwidth + Limitar a 3/4 de la velocidad estimada - - 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. + + Manually specify proxy + Proxy especificado manualmente - - %1 folder "%2" is synced to local folder "%3" - %1 carpeta "%2" está sincronizada con la carpeta local "%3" + + No limit + Ilimitado - - Sync the folder "%1" - Sincronizar la carpeta "%1" + No Proxy + No Proxy - - Warning: The local folder is not empty. Pick a resolution! - Advertencia: La carpeta local no está vacía. ¡Elija una solución! + + No proxy + Sin proxy - - %1 free space - %1 gets replaced with the size and a matching unit. Example: 3 MB or 5 GB - %1 espacio libre + + Note: proxy settings have no effects for accounts on localhost + Nota: los ajustes de proxy no tienen efecto para cuentas en el sistema local. - - Virtual files are not available for the selected folder - Los archivos virtuales no están disponiblespara la carpeta seleccionada + + Password for proxy server + Contraseña para el servidor proxy @@ -3944,353 +4083,328 @@ Nótese que usar cualquier opción de toma de registros a través de línea de c Carpeta local de sincronización - - - (%1) - (%1) + + Proxy Settings + Configuración del proxy - - There isn't enough free space in the local folder! - ¡No hay suficiente espacio libre en la carpeta local! + + SOCKS5 proxy + Proxy SOCKS5 - - - OCC::OwncloudConnectionMethodDialog - - Connection failed - La conexión ha fallado + Specify proxy manually as + Especifique el proxy manualmente como - - <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> + + Upload Bandwidth + Velocidad de subida - - Select a different URL - Seleccionar una URL diferente + + Use global settings + Usar la configuración global - - Retry unencrypted over HTTP (insecure) - Reintentar sin cifrado sobre HTTP (inseguro) + + Use system proxy + Usar proxy del sistema - - Configure client-side TLS certificate - Configurar certificado TLS del cliente + + Username for proxy server + Nombre de usuario para el servidor proxy + + + OCC::OAuth - - <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> + <h1>Login Error</h1><p>%1</p> + <h1>Error al iniciar sesión</h1><p>%1</p> - - - OCC::OwncloudHttpCredsPage - - &Email - &Correo electrónico + <h1>Wrong account</h1><p>You logged in with the account <em>%1</em>, but must log in with the account <em>%2</em>.<br>Please log out of %3 in another tab, then <a href='%4'>click here</a> and log in with %2.</p> + <h1>Usuario incorrecto</h1><p>Se ha intentado iniciar sesión con el usuario: <em>%1</em>, pero debe iniciar sesión con el usuario: <em>%2</em>.<br>Por favor, cierre la sesión de %3 en otra pestaña, haga<a href='%4'>clic aquí</a> e inicie sesión como el usuario %2</p> - - Connect to %1 - Conectarse a %1 + + <h1>Wrong user</h1><p>You logged-in with user <em>%1</em>, but must login with user <em>%2</em>.<br>Please log out of %3 in another tab, then <a href='%4'>click here</a> and log in as user %2</p> + - - Enter user credentials - Introduzca las credenciales de usuario + Empty JSON from OAuth2 redirect + Vaciar JSON de la redirección OAuth2 - - - OCC::OwncloudPropagator + + + OCC::OCUpdater - - Error with the metadata. Getting unexpected metadata format. - Error con los metadatos. Se está obteniendo un formato inesperado de los metadatos. + + %1 available. Restart application to start the update. + %1 disponible. Reinicia la aplicación para empezar la actualización. - - - Impossible to get modification time for file in conflict %1 - Es imposible leer la hora de modificación del archivo en conflicto %1 + + %1 version %2 available. Restart application to start the update. + - - - 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. + + A new update for %1 is about to be installed. The updater may ask +for additional privileges during the process. + - - &Next > - &Siguiente > + + 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. - - Server address does not seem to be valid - La dirección del servidor no es válida + + Checking update server … + Consultando al servidor de actualizaciones ... - - Could not load certificate. Maybe wrong password? - No se ha podido guardar el certificado. ¿Quizás la contraseña sea incorrecta? + + Could not check for new updates. + No se puede comprobar si hay actualizaciones. - - - 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/> + + Could not download update. Please click <a href='%1'>here</a> to download the update manually. + - - Invalid URL - URL no válida. + + 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. - - Failed to connect to %1 at %2:<br/>%3 - Fallo al conectar %1 a %2:<br/>%3 + + 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. - - Timeout while trying to connect to %1 at %2. - Tiempo de espera agotado mientras se intentaba conectar a %1 en %2 + + Downloading %1 … + Descarganod %1… - - Trying to connect to %1 at %2 … - Intentando conectar a %1 desde %2 ... + + Downloading %1. Please wait … + Descargando %1. Por favor, espere … - - 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. + + Downloading version %1. Please wait … + - - 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. + + 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. - - There was an invalid response to an authenticated WebDAV request - Ha habido una respuesta no válida a una solicitud autenticada de WebDAV + + 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. - - 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/> + + New %1 update ready + La nueva %1 actualización está lista - - Creating local sync folder %1 … - Creando carpeta de sincronización local %1 ... + + New %1 version %2 is available. Please click <a href='%3'>here</a> to download the update. + - - OK - OK + + No updates available. Your installation is at the latest version. + No hay actualizaciones disponibles. Tiene la última versión. - - failed. - ha fallado. + + Update Check + Comprobar si hay actualizaciones - - Could not create local folder %1 - No se ha podido crear la carpeta local %1 + + Update status is unknown: Did not check for new updates. + Estado de actualización desconocido: no se buscaron nuevas actualizaciones. + + + OCC::OwncloudAdvancedSetupPage - - No remote folder specified! - ¡No se ha especificado ninguna carpeta remota! + + (%1) + (%1) - - Error: %1 - Error: %1 + + %1 folder '%2' is synced to local folder '%3' + - - creating folder on Nextcloud: %1 - Creando carpeta en Nextcloud: %1 + + %1 folder "%2" is synced to local folder "%3" + %1 carpeta "%2" está sincronizada con la carpeta local "%3" - - Remote folder %1 created successfully. - Carpeta remota %1 creado correctamente. + + %1 free space + %1 espacio libre - - The remote folder %1 already exists. Connecting it for syncing. - La carpeta remota %1 ya existe. Conectándola para sincronizacion. + + <p><small><strong>Warning:</strong> The local folder is not empty. Pick a resolution!</small></p> + - - - The folder creation resulted in HTTP error code %1 - La creación de la carpeta ha producido el código de error HTTP %1 + + Connect + Conectar - - 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> + + Connect … + - - <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> + + Free space: %1 + - - - Remote folder %1 creation failed with error <tt>%2</tt>. - Creación %1 de carpeta remota ha fallado con el error <tt>%2</tt>. + + Local Sync Folder + Carpeta local de sincronización - - 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 + + Setup local folder options + - - Successfully connected to %1! - ¡Conectado con éxito a %1! + + Sync the folder '%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. + + Sync the folder "%1" + Sincronizar la carpeta "%1" - - Folder rename failed - Error al renombrar la carpeta + + There isn't enough free space in the local folder! + ¡No hay suficiente espacio libre en la carpeta local! - - 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. + + Use &virtual files instead of downloading content immediately %1 + Usa &archivos virtuales en vez de descargar el contenido inmediatamente %1 - - <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> + + Warning: The local folder is not empty. Pick a resolution! + Advertencia: La carpeta local no está vacía. ¡Elija una solución! - - - OCC::OwncloudWizard + + + OCC::OwncloudConnectionMethodDialog - - Add %1 account - Añadir %1 cuenta + + <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> - - Skip folders configuration - Omitir la configuración de carpetas + + <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> - - Cancel - Cancelar + + Configure client-side TLS certificate + Configurar certificado TLS del cliente - - Enable experimental feature? - ¿Activar característica experimental? + + Connection failed + La conexión ha fallado - - 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. - -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. - Cuando el modo de «archivos virtuales» está activado, ningún archivo será descargado de entrada. Por el contrario, un pequeño archivo «%1» será creado para cada archivo que existe en el servidor. Los contenidos pueden ser descargados ejecutando esos archivos, o usando el menú contextual. - -El modo de archivos virtuales es incompatible con la sincronización selectiva. Si se activa, las carpetas no sincronizadas serán transformadas en carpetas de acceso solo en línea, y los ajustes de sincronización selectiva serán eliminados. - -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. + + Retry unencrypted over HTTP (insecure) + Reintentar sin cifrado sobre HTTP (inseguro) - - Enable experimental placeholder mode - Activar modo experimental de marcador de posición + + Select a different URL + Seleccionar una URL diferente + + + OCC::OwncloudHttpCredsPage - - Stay safe - Mantente a salvo + + &Email + &Correo electrónico - - - OCC::PasswordInputDialog - - Password for share required - Se requiere la contraseña para el recurso compartido + + Connect to %1 + Conectarse a %1 - - Please enter a password for your share: - Por favor, introduce una contraseña para tu recurso compartido: + + Enter user credentials + Introduzca las credenciales de usuario - - - OCC::PollJob + + + OCC::OwncloudOAuthCredsPage - - Invalid JSON reply from the poll URL - Respuesta JSON invalida de la poll URL + Login in your browser + Inicie sesión en su navegador - - - OCC::ProcessDirectoryJob + + + OCC::OwncloudPropagator - - Symbolic links are not supported in syncing. - Los enlaces simbólicos no están soportados en la sincronización. + Error with the metadata. Getting unexpected metadata format. + Error con los metadatos. Se está obteniendo un formato inesperado de los metadatos. - - File is listed on the ignore list. - El archivo está en la lista de ignorados. + + Impossible to get modification time for file in conflict %1 + Es imposible leer la hora de modificación del archivo en conflicto %1 + + + OCC::OwncloudSetupPage - - 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. + + &Next > + &Siguiente > - - File names containing the character "%1" are not supported on this file system. - Los nombres de archivo que contienen el carácter "%1" no son compatibles con este sistema de archivos. + + Could not load certificate. Maybe wrong password? + No se ha podido guardar el certificado. ¿Quizás la contraseña sea incorrecta? - - File name contains at least one invalid character - El nombre del archivo contiene al menos un carácter no válido + + Server address does not seem to be valid + La dirección del servidor no es válida - - The file name is a reserved name on this file system. - El nombre del archivo es una palabra reservada del sistema de archivos. + + Setup %1 server + @@ -4310,6 +4424,9 @@ Esta es un modo nuevo y experimental. Si decides usarlo, por favor, informa de c 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. + + + OCC::OwncloudSetupWizard %1 name contains at least one invalid character @@ -4321,54 +4438,54 @@ Esta es un modo nuevo y experimental. Si decides usarlo, por favor, informa de c El nombre %1 es un nombre reservado en este sistema de archivos. - - Filename contains trailing spaces. - El nombre del archivo contiene espacios finales. + + <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> - - Filename contains leading spaces. - El nombre del archivo contiene espacios iniciales. + + 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 - - Filename contains leading and trailing spaces. - El nombre del archivo contiene espacios iniciales y finales. + + Can't 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. + - - Filename is too long. - El nombre del archivo es demasiado largo. + + 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. - - File/Folder is ignored because it's hidden. - El archivo o carpeta es ignorado porque está oculto. + + 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. - - Stat failed. - Stat ha fallado. + + Could not create local folder %1 + No se ha podido crear la carpeta local %1 - - 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. + + creating folder on Nextcloud: %1 + Creando carpeta en Nextcloud: %1 - - 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. + + Creating local sync folder %1 … + Creando carpeta de sincronización local %1 ... - - The filename cannot be encoded on your file system. - El nombre de archivo no se puede codificar en tu sistema de archivos. + + Error: %1 + Error: %1 - - The filename is blacklisted on the server. - El nombre del archivo está prohibido en el servidor. + + Failed to connect to %1 at %2:<br/>%3 + Fallo al conectar %1 a %2:<br/>%3 @@ -4391,34 +4508,34 @@ Esta es un modo nuevo y experimental. Si decides usarlo, por favor, informa de c Motivo: el nombre del archivo contiene un carácter prohibido (%1). - - File has extension reserved for virtual files. - El archivo tiene una extensión reservada para archivos virtuales. + + No remote folder specified! + ¡No se ha especificado ninguna carpeta remota! - - size - tamaño + + OK + OK - - permission - permisos + + Remote folder %1 created successfully. + Carpeta remota %1 creado correctamente. - - file id - identificador de archivo + + Remote folder %1 creation failed with error <tt>%2</tt>. + Creación %1 de carpeta remota ha fallado con el error <tt>%2</tt>. - - Server reported no %1 - El servidor informó de no %1 + + Successfully connected to %1! + ¡Conectado con éxito a %1! - - Cannot sync due to invalid modification time - No se puede sincronizar debido a una hora de modificación no válida + + The authenticated request to the server was redirected to '%1'. The URL is bad, the server is misconfigured. + @@ -4426,24 +4543,24 @@ Esta es un modo nuevo y experimental. Si decides usarlo, por favor, informa de c 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 + + The remote folder %1 already exists. Connecting it for syncing. + La carpeta remota %1 ya existe. Conectándola para sincronizacion. - - Conflict when uploading a folder. It's going to get cleared! - Se ha producido un conflicto al subir una carpeta. ¡Se eliminará! + + 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> - - Conflict when uploading a file. It's going to get removed! - Se ha producido un conflicto al subir un archivo. ¡Se eliminará! + + The server reported the following error: + - - Moved to invalid target, restoring - Movido a un lugar no válido, restaurando + + Timeout while trying to connect to %1 at %2. + Tiempo de espera agotado mientras se intentaba conectar a %1 en %2 @@ -4455,44 +4572,47 @@ Esta es un modo nuevo y experimental. Si decides usarlo, por favor, informa de c Ignored because of the "choose what to sync" blacklist Ignorado porque se encuentra en la lista negra de «elija qué va a sincronizar» + + + OCC::OwncloudWizard - - 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. + + %1 Connection Wizard + - - 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. + + Add %1 account + Añadir %1 cuenta - - 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. + + Enable experimental feature? + ¿Activar característica experimental? - - Not allowed to remove, restoring - No está permitido borrar, restaurando + + Enable experimental placeholder mode + Activar modo experimental de marcador de posición - - Error while reading the database - Error mientras se leía la base de datos + + Skip folders configuration + Omitir la configuración de carpetas - - Server replied with an error while reading directory "%1" : %2 - El servidor contestó con un error al leer el directorio "%1" : %2 + + Stay safe + Mantente a salvo - - - OCC::PropagateDirectory could not delete file %1 from local DB no fue posible borrar el archivo %1 de la base de datos local + + + OCC::PasswordInputDialog Could not delete file %1 from local DB @@ -4503,6 +4623,9 @@ 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 + + + OCC::PollJob @@ -4513,6 +4636,9 @@ Esta es un modo nuevo y experimental. Si decides usarlo, por favor, informa de c The folder %1 cannot be made read-only: %2 La carpeta %1 no se puede hacer de sólo lectura: %2 + + + OCC::ProcessDirectoryJob @@ -4520,174 +4646,154 @@ 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 + + %1 name contains at least one invalid character + El nombre %1 contiene al menos un carácter inválido - - File is currently in use - El archivo se encuentra en uso + + %1 name is a reserved name on this file system. + El nombre %1 es un nombre reservado en este sistema de archivos. - - - OCC::PropagateDownloadFile - - Could not get file %1 from local DB - + + Cannot sync due to invalid modification time + No se puede sincronizar debido a una hora de modificación no válida - - could not get file %1 from local DB - no fue posible obtener el archivo %1 de la base de datos local + + 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 %1 cannot be downloaded because encryption information is missing. - El archivo %1 no puede ser descargado porque falta la información de cifrado, + + Conflict when uploading a file. It's going to get removed! + Se ha producido un conflicto al subir un archivo. ¡Se eliminará! - - - File has changed since discovery - El archivo ha cambiado desde que fue descubierto + + Conflict when uploading a folder. It's going to get cleared! + Se ha producido un conflicto al subir una carpeta. ¡Se eliminará! - - - Could not delete file record %1 from local DB - No fue posible borrar el registro del archivo %1 de la base de datos local + + 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 %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! + + Could not upload file, because it is open in "%1". + No es posible subir el archivo, porque está abierto en "%1". - - The download would reduce free local disk space below the limit - La descarga reducirá el espacio libre local por debajo del límite. + + Error while deleting file record %1 from the database + Error mientras se borraba el registro de archivo %1 de la base de datos - - Free space on disk is less than %1 - El espacio libre en el disco es inferior a %1 + + Error while reading the database + Error mientras se leía la base de datos - - File was deleted from server - Se ha eliminado el archivo del servidor + + File has extension reserved for virtual files. + El archivo tiene una extensión reservada para archivos virtuales. - - The file could not be downloaded completely. - No se ha podido descargar el archivo completamente. + + file id + identificador de archivo - - 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 is listed on the ignore list. + El archivo está en la lista de ignorados. - - - 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 name contains at least one invalid character + El nombre del archivo contiene al menos un carácter no válido - - 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 names containing the character "%1" are not supported on this file system. + Los nombres de archivo que contienen el carácter "%1" no son compatibles con este sistema de archivos. - - Error updating metadata: %1 - Error al actualizar los metadatos: %1 + + 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. - - The file %1 is currently in use - El archivo %1 se encuentra en uso + + File/Folder is ignored because it's hidden. + El archivo o carpeta es ignorado porque está oculto. - - - OCC::PropagateItemJob - - ; Restoration Failed: %1 - ; Fallo al restaurar: %1 + + Filename is too long. + El nombre del archivo es demasiado largo. - - 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 + + Folder + Carpeta - - - OCC::PropagateLocalMkdir - - could not delete file %1, error: %2 - no se ha podido borrar el archivo %1, error: %2 + + Ignored because of the "choose what to sync" blacklist + Ignorado porque se encuentra en la lista negra de «elija qué va a sincronizar» - - 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! + + Moved to invalid target, restoring + Movido a un lugar no válido, restaurando - - Could not create folder %1 - No se pudo crear la carpeta %1 + + 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 folder %1 cannot be made read-only: %2 - La carpeta %1 no se puede hacer de sólo lectura: %2 + + 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. - - unknown exception - + + Not allowed to remove, restoring + No está permitido borrar, restaurando - - Error updating metadata: %1 - Error al actualizar los metadatos: %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. - - The file %1 is currently in use - El archivo %1 se encuentra en uso + + permission + permisos - - - 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 + + Reason: the entire filename is forbidden. + Motivo: el nombre de archivo completo está prohibido. - - Could not delete file record %1 from local DB - No fue posible borrar el registro del archivo %1 de la base de datos local + + Reason: the file has a forbidden extension (.%1). + Motivo: el archivo tiene una extensión prohibida (%1). - - - 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! + + Reason: the filename contains a forbidden character (%1). + Motivo: el nombre del archivo contiene un carácter prohibido (%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! + + Reason: the filename has a forbidden base name (filename start). + Motivo: el nombre de archivo tiene un basename (inicio del nombre del archivo) prohibido. @@ -4710,98 +4816,90 @@ Esta es un modo nuevo y experimental. Si decides usarlo, por favor, informa de c Error al configurar el estado fijado - - - Error updating metadata: %1 - Error al actualizar los metadatos: %1 + + Stat failed. + Stat ha fallado. - - The file %1 is currently in use - El archivo %1 se encuentra en uso + + Symbolic links are not supported in syncing. + Los enlaces simbólicos no están soportados en la sincronización. - - - Could not delete file record %1 from local DB - No fue posible borrar el registro del archivo %1 de la base de datos local + + The file name is a reserved name on this file system. + El nombre del archivo es una palabra reservada del sistema de archivos. - - Failed to propagate directory rename in hierarchy - Fallo al propagar el renombrado de carpeta en la jerarquía + + The filename cannot be encoded on your file system. + El nombre de archivo no se puede codificar en tu sistema de archivos. - - Failed to rename file - Fallo al renombrar el archivo + + The filename is blacklisted on the server. + El nombre del archivo está prohibido en el servidor. - - - OCC::PropagateRemoteDelete + + + OCC::PropagateDirectory - - 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 %1 from local DB + no fue posible borrar el archivo %1 de la base de datos 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 delete file %1 from local DB + - - - 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". + + Error updating metadata due to invalid modification time + Error al actualizar los metadatos debido a una hora de modificación no válida - - - 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". + + File is currently in use + El archivo se encuentra en uso - - Failed to encrypt a folder %1 - Fallo al cifrar una carpeta %1 + + The folder %1 cannot be made read-only: %2 + La carpeta %1 no se puede hacer de sólo lectura: %2 - - Error writing metadata to the database: %1 - Error al escribir los metadatos en la base de datos: %1 + + unknown exception + + + + OCC::PropagateDownloadFile - - The file %1 is currently in use - El archivo %1 se encuentra en uso + + 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::PropagateRemoteMove - - Could not rename %1 to %2, error: %3 - No se puede renombrar %1 a %2, error: %3 + + could not get file %1 from local DB + no fue posible obtener el archivo %1 de la base de datos local - - Error updating metadata: %1 - Error al actualizar los metadatos: %1 + + Could not get file %1 from local DB + - - The file %1 is currently in use - El archivo %1 se encuentra en uso + + File %1 can not be downloaded because encryption information is missing. + - - 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". + + 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! @@ -4819,255 +4917,256 @@ Esta es un modo nuevo y experimental. Si decides usarlo, por favor, informa de c 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 + + 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. - - Error writing metadata to the database - Error al escribir los metadatos en la base de datos + + File has changed since discovery + El archivo ha cambiado desde que fue descubierto - - - OCC::PropagateUploadFileCommon - - Failed to upload encrypted file. - Fallo al subir el archivo cifrado. + + File was deleted from server + Se ha eliminado el archivo del servidor - - 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 + + Free space on disk is less than %1 + El espacio libre en el disco es inferior a %1 - - - Upload of %1 exceeds the quota for the folder - La subida %1 excede el límite de tamaño de la carpeta + + 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 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. + + The downloaded file is empty despite that the server announced it should have been %1. + - - File Removed (start upload) %1 - Archivo eliminado (comenzar subida) %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. - - Local file changed during syncing. It will be resumed. - Un archivo local ha cambiado durante la sincronización. Se reanudará. + + The file could not be downloaded completely. + No se ha podido descargar el archivo completamente. + + + OCC::PropagateItemJob - - Local file changed during sync. - Un archivo local ha sido modificado durante la sincronización. + + ; Restoration Failed: %1 + ; Fallo al restaurar: %1 - - Failed to unlock encrypted folder. - Fallo al desbloquear la carpeta cifrada. + + 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 + + + OCC::PropagateLocalMkdir - - Unable to upload an item with invalid characters - No se puede subir un elemento con caracteres no válidos + + Attention, possible case sensitivity clash with %1 + - - Error updating metadata: %1 - Error al actualizar los metadatos: %1 + + 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 + + could not delete file %1, error: %2 + no se ha podido borrar el archivo %1, error: %2 - - - OCC::PropagateUploadFileNG - - The local file was removed during sync. - El archivo local ha sido eliminado durante la sincronización. + + 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! + + + OCC::PropagateLocalRemove - - Local file changed during sync. - Un archivo local fue modificado durante la sincronización. + + 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 - - Poll URL missing - Falta la URL de la encuesta + + Could not remove folder '%1' + - - Unexpected return code from server (%1) - Respuesta inesperada del servidor (%1) + + Error removing '%1': %2; + + + + OCC::PropagateLocalRename - - Missing File ID from server - ID perdido del archivo del servidor + + Error setting pin state + Error al configurar el estado fijado - - Missing ETag from server - Perdido ETag del servidor + + Failed to propagate directory rename in hierarchy + Fallo al propagar el renombrado de carpeta en la jerarquía - - - OCC::PropagateUploadFileV1 - - Poll URL missing - Falta la URL de la encuesta + + Failed to rename file + Fallo al renombrar el archivo - - The local file was removed during sync. - El archivo local ha sido eliminado durante la sincronización. + + File %1 can not be renamed to %2 because of a local file name clash + - - Local file changed during sync. - Un archivo local ha sido modificado durante la sincronización. + + 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::PropagateRemoteMkdir - - 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) + + Error writing metadata to the database: %1 + Error al escribir los metadatos en la base de datos: %1 - - - OCC::ProxyAuthDialog - - Proxy authentication required - Autenticación de proxy necesaria + + Failed to encrypt a folder %1 + Fallo al cifrar una carpeta %1 - - Username: - Nombre de usuario: + + 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 - - Proxy: - Proxy: + + Could not rename %1 to %2, error: %3 + No se puede renombrar %1 a %2, error: %3 + + + OCC::PropagateUploadFileCommon - - The proxy server needs a username and password. - El servidor de proxy necesita de un usuario y contraseña. + + Failed to unlock encrypted folder. + Fallo al desbloquear la carpeta cifrada. - - Password: - Contraseña: + + Failed to upload encrypted file. + Fallo al subir el archivo cifrado. - - - OCC::SelectiveSyncDialog - - Choose What to Sync - Escoja qué sincronizar + + Unable to upload an item with invalid characters + No se puede subir un elemento con caracteres no válidos - - - OCC::SelectiveSyncWidget - - Loading … - Cargando ... + + Upload of %1 exceeds the quota for the folder + La subida %1 excede el límite de tamaño de la carpeta + + + OCC::PropagateUploadFileNG - - Deselect remote folders you do not wish to synchronize. - Deseleccione las carpetas remotas que no desea sincronizar. + + Missing ETag from server + Perdido ETag del servidor - - Name - Nombre + + Missing File ID from server + ID perdido del archivo del servidor - - Size - Tamaño + + Poll URL missing + Falta la URL de la encuesta - - - No subfolders currently on the server. - No hay subcarpetas actualmente en el servidor. + + Unexpected return code from server (%1) + Respuesta inesperada del servidor (%1) + + + OCC::PropagateUploadFileV1 - - An error occurred while loading the list of sub folders. - Se ha producido un error al cargar la lista de carpetas. + + 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) - - - OCC::ServerNotificationHandler + + + OCC::ProxyAuthDialog - - Reply - Responder + + Password: + Contraseña: - - Dismiss - Descartar + + Proxy authentication required + Autenticación de proxy necesaria - - - OCC::SettingsDialog - - Settings - Ajustes + + Proxy: + Proxy: - - %1 Settings - This name refers to the application name e.g Nextcloud - %1 Configuración + + The proxy server needs a username and password. + El servidor de proxy necesita de un usuario y contraseña. - - General - General + + Username: + Nombre de usuario: + + + OCC::SelectiveSyncDialog - - Network - Red + + Choose What to Sync + Escoja qué sincronizar + + + OCC::SelectiveSyncWidget - - Account - Cuenta + + An error occurred while loading the list of sub folders. + Se ha producido un error al cargar la lista de carpetas. - - - OCC::ShareManager Error Error - - - OCC::ShareModel %1 days @@ -5084,29 +5183,35 @@ Esta es un modo nuevo y experimental. Si decides usarlo, por favor, informa de c - - Secure file drop link - Enlace para entrega de archivos segura + + Size + Tamaño + + + OCC::ServerNotificationHandler - - Share link - Compartir enlace + + Reply + Responder + + + OCC::SettingsDialog - - Link share - Compartición de enlace + + %1 Settings + %1 Configuración - - Internal link - Enlace interno + + Account + Cuenta - - Secure file drop - Entrega de archivos segura + + General + General @@ -5114,123 +5219,117 @@ Esta es un modo nuevo y experimental. Si decides usarlo, por favor, informa de c No se ha podido encontrar una carpeta local para %1 - - Enter a note for the recipient - Ingrese una nota para el destinatario + + New Account + Nueva cuenta - - - OCC::ShareeModel + + + OCC::ShareDialog - - - Search globally - Buscar globalmente + + %1 Sharing + - - No results found - No se encontraron resultados + + Folder: %2 + - - Global search results - Resultados de búsqueda global + + Icon + - - %1 (%2) - sharee (shareWithAdditionalInfo) - %1 (%2) + + Nextcloud Path: + - - - OCC::SocketApi - - Failed to encrypt folder at "%1" - No se pudo cifrar carpeta en "%1" + + The file can not be shared because it was shared without sharing permission. + + + + OCC::ShareLinkWidget - - 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. + + <p>Do you really want to delete the public link share <i>%1</i>?</p><p>Note: This action cannot be undone.</p> + - - Failed to encrypt folder - Fallo al cifrar la carpeta + + Add note to recipient + - - 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 + + Allow Editing + - - Folder encrypted successfully - Se cifró la carpeta exitosamente + + Allow Upload && Editing + - - The following folder was encrypted successfully: "%1" - La siguiente carpeta se cifró con éxito: "%1" + + Confirm Link Share Deletion + - - Context menu share - Compartir en menú contextual + + Expiration Date + - - Select new location … - Seleccione nueva ubicación … + + Public link + - - I shared something with you - He compartido algo contigo + + Read only + + + + OCC::ShareModel - - - Share options - Opciones de compartir + + %1 days + %1 días - - - Activity - Actividad + + 1 day + 1 día - - Copy private link to clipboard - Copiar enlace privado al portapapeles + + Could not find local folder for %1 + No se ha podido encontrar una carpeta local para %1 - - Send private link by email … - Enviar enlace privado por correo electrónico ... + Enter a note for the recipient + Ingrese una nota para el destinatario - - Leave this share - Salir de este compartido + + Internal link + Enlace interno - - Resharing this file is not allowed - No está permitido compartir de nuevo + + Link share + Compartición de enlace - - Resharing this folder is not allowed - No está permitido compartir de nuevo esta carpeta + + Secure file drop + Entrega de archivos segura @@ -5238,11 +5337,13 @@ El servidor respondió con el error: %2 Copiar enlace para entrega de archivos segura - - - Copy public link - Copiar enlace público + + Today + Hoy + + + OCC::ShareUserGroupWidget Copy internal link @@ -5254,30 +5355,31 @@ El servidor respondió con el error: %2 Copiar enlace para entrega de archivos segura - - Encrypt - Cifrar + + Share with users or groups … + + + + OCC::ShareUserLine - - Lock file - Bloquear archivo + + Can change + - - Unlock file - Desbloquear archivo + + Can create + - - Locked by %1 - Bloqueado por %1 + + Can delete + - - - Expires in %1 minutes - remaining time before lock expires - Expira en %1 minutoExpira en %1 minutosExpira en %1 minutos + + Can edit + Puede editar @@ -5295,448 +5397,448 @@ El servidor respondió con el error: %2 Resolver conflicto … - - Move and rename … - Mover y renombrar … + Username + Usuario + + + OCC::ShareeModel - - Move, rename and upload … - Mover, renombrar y subir … + + Global search results + Resultados de búsqueda global - - Delete local changes - Borra cambios en local + + No results found + No se encontraron resultados - - Move and upload … - Mover y subir … + + Search globally + Buscar globalmente + + + OCC::ShibbolethCredentials - - Delete - Eliminar + + Login Error + - - - OCC::SslButton - - <h3>Certificate Details</h3> - <h3>Detalles del certificado</h3> + + You must sign in as user %1 + + + + OCC::ShibbolethWebView - - Common Name (CN): - Nombre común (NC): + + %1 - Authenticate + - - Subject Alternative Names: - Nombres alternativos del sujeto: + + Reauthentication required + - - Organization (O): - Organización (O): + + SSL Cipher Debug View + - - Organizational Unit (OU): - Unidad organizativa (UO): + + Your session has expired. You need to re-login to continue to use the client. + + + + OCC::SocketApi - - State/Province: - Estado/Provincia: + + Context menu share + Compartir en menú contextual - - Country: - País: + + Copy internal link + Copiar enlace interno - - Serial: - Nº de serie: + + Copy private link to clipboard + Copiar enlace privado al portapapeles - - <h3>Issuer</h3> - <h3>Emisor</h3> + + Copy public link + Copiar enlace público - - Issuer: - Emisor: + + Copy secure file drop link + Copiar enlace para entrega de archivos segura - - Issued on: - Emitido en: + + Copy secure filedrop link + Copiar enlace para entrega de archivos segura - - Expires on: - Caduca el: + + 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 - - <h3>Fingerprints</h3> - <h3>Firma</h3> + + Delete local changes + Borra cambios en local - - SHA-256: - SHA-256: + + Edit + Editar + + + + Expires in %1 minutes + + + + Expira en %1 minutos + - - SHA-1: - SHA-1: + + Failed to encrypt folder + Fallo al cifrar la carpeta - - <p><b>Note:</b> This certificate was manually approved</p> - <p><b>Notificación:</b> Este certificado fue aprobado manualmente</p> + + Failed to encrypt folder at "%1" + No se pudo cifrar carpeta en "%1" - - %1 (self-signed) - %1 (autofirmado) + + Folder encrypted successfully + Se cifró la carpeta exitosamente - - %1 - %1 + + I shared something with you + He compartido algo contigo - - This connection is encrypted using %1 bit %2. - - Esta conexión está cifrada con %1 bit %2. - + + Leave this share + Salir de este compartido - - This connection is NOT secure as it is not encrypted. - - Esta conexión NO ES SEGURA, pues no está cifrada. - + + Lock file + Bloquear archivo - - Server version: %1 - Versión del servidor: %1 + + Locked by %1 + Bloqueado por %1 - - No support for SSL session tickets/identifiers - No admite tickets de sesión/identificadores SSL + + Move and rename … + Mover y renombrar … - - Certificate information: - Información del certificado: + + Move and upload … + Mover y subir … - - The connection is not secure - La conexión no es segura + + Move, rename and upload … + Mover, renombrar y subir … - - - OCC::SslErrorDialog - - Trust this certificate anyway - Confiar en este certificado de todas maneras + + Open in browser + Abrir en navegador - - Untrusted Certificate - Certificado sin verificar + + Resharing this file is not allowed + No está permitido compartir de nuevo - - Cannot connect securely to <i>%1</i>: - No puedo conectar de forma segura a <i>%1</i>: + + Resharing this folder is not allowed + No está permitido compartir de nuevo esta carpeta - - Additional errors: - Errores adicionales: + + Resolve conflict … + Resolver conflicto … - - with Certificate %1 - con certificado %1 + + Select new location … + Seleccione nueva ubicación … - - - - &lt;not specified&gt; - &lt;no especificado&gt; + + Send private link by email … + Enviar enlace privado por correo electrónico ... - - - Organization: %1 - Organización: %1 + + Share options + Opciones de compartir - - - Unit: %1 - Unidad: %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. - - - Country: %1 - País: %1 + + The following folder was encrypted successfully: "%1" + La siguiente carpeta se cifró con éxito: "%1" - - Fingerprint (SHA1): <tt>%1</tt> - Huella dactilar (SHA1): <tt>%1</tt> + + Unlock file + Desbloquear archivo + + + OCC::SslButton - - Fingerprint (SHA-256): <tt>%1</tt> - Huella digital (SHA-256):<tt>%1</tt> + + %1 + %1 - - Fingerprint (SHA-512): <tt>%1</tt> - Huella digital (SHA-512): <tt>%1</tt> + + %1 (self-signed) + %1 (autofirmado) - - Effective Date: %1 - Fecha de vigencia: %1 + + <h3>Certificate Details</h3> + <h3>Detalles del certificado</h3> - - Expiration Date: %1 - Fecha de caducidad: %1 + + <h3>Fingerprints</h3> + <h3>Firma</h3> - - Issuer: %1 - Emisor: %1 + + <h3>Issuer</h3> + <h3>Emisor</h3> - - - OCC::SyncEngine - - %1 (skipped due to earlier error, trying again in %2) - %1 (no realizado por el error anterior, intente de nuevo %2) + + <p><b>Note:</b> This certificate was manually approved</p> + <p><b>Notificación:</b> Este certificado fue aprobado manualmente</p> - - Could not update file: %1 - No se pudo actualizar el archivo: %1 + + Certificate information: + Información del certificado: - - Could not update virtual file metadata: %1 - No se ha podido actualizar los metadatos del archivo virtual: %1 + + Common Name (CN): + Nombre común (NC): - - Could not update file metadata: %1 - No se pudo actualizar los metadatos del archivo: %1 + + Country: + País: - - Could not set file record to local DB: %1 - No fue posible establecer el registro del archivo a la base de datos local: %1 + + Expires on: + Caduca el: - - Unresolved conflict. - Conflicto sin resolver. + + Issued on: + Emitido en: - - 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 + + Issuer: + Emisor: - - 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. + + No support for SSL session tickets/identifiers + No admite tickets de sesión/identificadores SSL - - Using virtual files with suffix, but suffix is not set - Usando archivos virtuales con sufijo, pero el sufijo no está establecido + + Organization (O): + Organización (O): - - Unable to read the blacklist from the local database - No se pudo leer la lista de bloqueo de la base de datos local + + Organizational Unit (OU): + Unidad organizativa (UO): - - Unable to read from the sync journal. - No se ha podido leer desde el registro de sincronización + + Serial: + Nº de serie: - - Cannot open the sync journal - No es posible abrir el diario de sincronización + + Server version: %1 + Versión del servidor: %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. + + SHA-1: + SHA-1: - - There is insufficient space available on the server for some uploads. - No hay suficiente espacio libre en el servidor para algunas subidas. + + SHA-256: + SHA-256: - - - OCC::SyncStatusSummary - - - Offline - No conectado + + State/Province: + Estado/Provincia: - - - - All synced! - ¡Todo está sincronizado! + + Subject Alternative Names: + Nombres alternativos del sujeto: - - Some files couldn't be synced! - ¡Algunos archivos no han podido ser sincronizados! + + The connection is not secure + La conexión no es segura - - See below for errors - Comprueba abajo los errores + + This connection is encrypted using %1 bit %2. + Esta conexión está cifrada con %1 bit %2. - - Checking folder changes - Comprobando cambios en la carpeta + + This connection is NOT secure as it is not encrypted. + Esta conexión NO ES SEGURA, pues no está cifrada. + + + OCC::SslErrorDialog - - Syncing changes - Sincronizando cambios + + &lt;not specified&gt; + &lt;no especificado&gt; - - Sync paused - Sincronización pausada + + Additional errors: + Errores adicionales: - - Some files could not be synced! - ¡Algunos archivos no pueden ser sincronizados! + + Cannot connect securely to <i>%1</i>: + No puedo conectar de forma segura a <i>%1</i>: - - See below for warnings - Comprueba abajo los avisos + + Country: %1 + País: %1 - - Syncing - Sincronizando + + Effective Date: %1 + Fecha de vigencia: %1 - - %1 of %2 · %3 left - %1 de %2 · quedan %3 + + Expiration Date: %1 + Fecha de caducidad: %1 - - %1 of %2 - %1 de %2 + + Fingerprint (SHA-256): <tt>%1</tt> + Huella digital (SHA-256):<tt>%1</tt> - - Syncing file %1 of %2 - Sincronizando archivo %1 de %2 + + Fingerprint (SHA-512): <tt>%1</tt> + Huella digital (SHA-512): <tt>%1</tt> - - - OCC::Systray - - Download - Descargar + + Fingerprint (SHA1): <tt>%1</tt> + Huella dactilar (SHA1): <tt>%1</tt> - - Add account - Agregar cuenta + + Issuer: %1 + Emisor: %1 - - Open main dialog - Abrir diálogo principal + + Organization: %1 + Organización: %1 - - - Pause sync - Pausar sincronización + + Trust this certificate anyway + Confiar en este certificado de todas maneras - - - Resume sync - Continuar sincronización + + Unit: %1 + Unidad: %1 - - Settings - Ajustes + + Untrusted Certificate + Certificado sin verificar - - Help - Ayuda + + with Certificate %1 + con certificado %1 + + + OCC::SyncEngine - - Exit %1 - Salir %1 + + %1 (skipped due to earlier error, trying again in %2) + %1 (no realizado por el error anterior, intente de nuevo %2) - - Pause sync for all - Pausar sincronización para todo + + A HTTP transmission error happened. + - - Resume sync for all - Continuar sincronización a todos + + A network connection timeout happened. + - - %1: %2 - %1: %2 + + Access is forbidden + - - - OCC::Theme <p>%1 Desktop Client Version %2 (%3). For more information please click <a href='%4'>here</a>.</p> @@ -5750,77 +5852,65 @@ El servidor respondió con el error: %2 <p>%1 - Cliente de escritorio</p> - - <p>%1 Desktop Client</p><p>Version %1. For more information please click <a href='%2'>here</a>.</p> - Example text: "<p>Nextcloud Desktop Client</p>" (%1 is the application name) - <p>%1 Cliente de Escritorio</p><p>Versión %1. Para más información, por favor pulsa <a href='%2'>aquí</a>.</p> + + An internal error number %1 occurred. + - - <p><small>Using virtual files plugin: %1</small></p> - <p><small>Usando el plugin de archivos virtuales: %1</small></p> + + Cannot open the sync journal + No es posible abrir el diario de sincronización - - <p>%1 desktop client %2</p> - Example text: "<p>Nextcloud Desktop Client</p>" (%1 is the application name) - <p>%1 cliente de escritorio %2</p> + + Could not set file record to local DB: %1 + No fue posible establecer el registro del archivo a la base de datos local: %1 - - - <p>Version %1. For more information please click <a href='%2'>here</a>.</p> - <p>Versión %1. Para obtener más información, haga clic <a href='%2'> aquí </a>.</p> + + Could not update file metadata: %1 + No se pudo actualizar los metadatos del archivo: %1 - - <p>This release was supplied by %1.</p> - <p>Esta versión ha sido suministrada por %1.</p> + + Could not update file: %1 + No se pudo actualizar el archivo: %1 - - - OCC::UnifiedSearchResultsListModel - - Failed to fetch providers. - Fallo al recuperar los proveedores. + + Could not update virtual file metadata: %1 + No se ha podido actualizar los metadatos del archivo virtual: %1 - - Failed to fetch search providers for '%1'. Error: %2 - Fallo al recuperar los proveedores de búsqueda para '%1'. Error: %2 + + CSync unspecified error. + - - Search has failed for '%2'. - La búsqueda ha fallado para '%2'. + + Discovery step failed. + - - Search has failed for '%1'. Error: %2 - La búsqueda ha fallado para '%1'. Error: %2 + + 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. - - - OCC::UpdateE2eeFolderMetadataJob - - Failed to update folder metadata. - Fallo al actualizar los metadatos de la carpeta. + + Error while reading folder. + - - Failed to unlock encrypted folder. - Fallo al desbloquear carpeta cifrada. + + Failed to load or create the journal file. Make sure you have read and write permissions in the local sync folder. + - - Failed to finalize item. - Fallo al finalizar ítem. + + File names containing the character '%1' are not supported on this file system. + - - - OCC::UpdateE2eeFolderUsersMetadataJob @@ -5835,28 +5925,25 @@ El servidor respondió con el error: %2 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 + + Folder hierarchy is too deep + - - Could not find root encrypted folder for folder %1 - No se ha podido encontrar la carpeta cifrada para la carpeta %1 + + Invalid characters, please rename "%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 + + Local files and share folder removed. + Failed to unlock a folder. Fallo al desbloquear una carpeta. - - - OCC::User End-to-end certificate needs to be migrated to a new one @@ -5873,15 +5960,14 @@ El servidor respondió con el error: %2 %1notificaciones - - Retry all uploads - Reintentar todas las subidas + + No space on %1 server available. + - - - Resolve conflict - Resolver conflicto + + Not allowed because you don't have permission to add parent folder + @@ -5898,129 +5984,122 @@ El servidor respondió con el error: %2 Open Nextcloud Talk in browser Abrir Nextcloud Talk en el navegador - - - OCC::UserModel - - Confirm Account Removal - Confirma la eliminación de cuenta + + the destination + - - <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> + + The mounted folder is temporarily not available on the server + - - Remove connection - Eliminar vinculación + + The service is temporarily unavailable + - - Cancel - Cancelar + + the source + - - - 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. + + There is insufficient space available on the server for some uploads. + No hay suficiente espacio libre en el servidor para algunas subidas. - - 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. + + Tried to create a folder that already exists. + - - Status feature is not supported. You will not be able to set your status. - La función de estado no es compatible. No podrás establecer tu estado. + + 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. - - Emojis are not supported. Some status functionality may not work. - La función de emojis no es compatible. Es posible que algunas funciones de estado del usuario no funcionen. + + Unable to read from the sync journal. + No se ha podido leer desde el registro de sincronización - - Could not set status. Make sure you are connected to the server. - No se ha podido obtener el estado. Asegúrese de que está conectado al servidor. + + Unable to read the blacklist from the local database + No se pudo leer la lista de bloqueo de la base de datos local - - 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. + + Unresolved conflict. + Conflicto sin resolver. - - - Don't clear - No borrar + + Using virtual files with suffix, but suffix is not set + Usando archivos virtuales con sufijo, pero el sufijo no está establecido + + + OCC::SyncLogDialog - - 30 minutes - 30 minutos + + Synchronisation Log + + + + OCC::SyncStatusSummary - - - 1 hour - 1 hora + + %1 of %2 + %1 de %2 - - 4 hours - 4 horas + + %1 of %2 · %3 left + %1 de %2 · quedan %3 - - - Today - Hoy + + Checking folder changes + Comprobando cambios en la carpeta - - - This week - Esta semana + + Offline + No conectado - - Less than a minute - Hace menos de un minuto + + Preparing sync + Preparando sincronización - - 1 minute - 1 minuto + + See below for errors + Comprueba abajo los errores - - %1 minutes - %1 minutos + + See below for warnings + Comprueba abajo los avisos - - %1 hours - %1 horas + + Some files could not be synced! + ¡Algunos archivos no pueden ser sincronizados! - - 1 day - 1 día + + Some files couldn't be synced! + ¡Algunos archivos no han podido ser sincronizados! - - %1 days - %1 días + + Syncing changes + Sincronizando cambios - - - OCC::Vfs Please choose a different location. %1 is a drive. It doesn't support virtual files. @@ -6031,6 +6110,9 @@ El servidor respondió con el error: %2 The Virtual filesystem feature requires a NTFS file system, %1 is using %2 La característica de archivos virtuales necesita un sistema de archivos NTFS, %1 está usando %2 + + + OCC::Systray Please choose a different location. %1 isn't a NTFS file system. It doesn't support virtual files. @@ -6045,139 +6127,132 @@ El servidor respondió con el error: %2 OCC::VfsDownloadErrorDialog - - Download error - Error de descarga + + Open main dialog + Abrir diálogo principal + + + OCC::Theme - - Error downloading - Error al descargar + + <p>%1 %2</p> + <p>%1 %2</p> - - could not be downloaded - no pudo ser descargado + + <p>%1 desktop client %2</p> + <p>%1 %2</p> - - > More details - > Más detalles + <p>%1 Desktop Client</p> + <p>%1 Cliente de escritorio</p> - - More details - Más detalles + + <p>%1 Desktop Client</p><p>Version %1. For more information please click <a href='%2'>here</a>.</p> + <p>%1 Cliente de Escritorio</p><p>Versión %1. Para más información, por favor pulsa <a href='%2'>aquí</a>.</p> - - Error downloading %1 - Error descargando %1 + + <p><small>Using virtual files plugin: %1</small></p> + <p><small>Usando el plugin de archivos virtuales: %1</small></p> - - %1 could not be downloaded. - %1 no pudo ser descargado. + + <p>This release was supplied by %1.</p> + <p>Esta versión ha sido suministrada por %1.</p> - - - 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. + + <p>This release was supplied by %1</p> + - - - 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. + + <p>Version %1. For more information please click <a href='%2'>here</a>.</p> + <p>Versión %1. Para obtener más información, haga clic <a href='%2'> aquí </a>.</p> - - - OCC::WebEnginePage - - Invalid certificate detected - Certificado inválido detectado + + easy/0118 + easy/0138 + + + OCC::UnifiedSearchResultsListModel - - The host "%1" provided an invalid certificate. Continue? - El host "%1" ha entregado un certificado no válido. ¿Continuar? + + Failed to fetch providers. + Fallo al recuperar los proveedores. - - - OCC::WebFlowCredentials - - You have been logged out of your account %1 at %2. Please login again. - Ha sido cerrada la sesión de %1 como usuario %2. Por favor, inicie sesión de nuevo. + + Failed to fetch search providers for '%1'. Error: %2 + Fallo al recuperar los proveedores de búsqueda para '%1'. Error: %2 - - Please login with the account: %1 - Por favor, entra con el usuario: %1 + + Search has failed for '%1'. Error: %2 + La búsqueda ha fallado para '%1'. Error: %2 - - - OCC::WelcomePage - - Form - Formulario + + Search has failed for '%2'. + La búsqueda ha fallado para '%2'. + + + OCC::UpdateE2eeFolderMetadataJob - - Log in - Entrar + + Failed to finalize item. + Fallo al finalizar ítem. - - Sign up with provider - Registrarse con un proveedor + + Failed to update folder metadata. + Fallo al actualizar los metadatos de la carpeta. + + + OCC::UpdateE2eeFolderUsersMetadataJob - - Keep your data secure and under your control - Mantén tus datos seguros y bajo tu control + Could not add or remove a folder user %1, for folder %2 + - - Secure collaboration & file exchange - Colaboración segura e intercambio de archivos + + 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 - - Easy-to-use web mail, calendaring & contacts - Correo web, calendario y contactos fáciles de usar + + Could not fetch public key for user %1 + No se pudo obtener la llave pública para el usuario %1 - - Screensharing, online meetings & web conferences - Compartir pantalla, reuniones online y conferencias web + + Could not find root encrypted folder for folder %1 + No se ha podido encontrar la carpeta cifrada para la carpeta %1 - - Host your own server - Aloja tu propio servidor + + Error updating metadata for a folder %1 + Error al actualizar los metadatos de una carpeta %1 - - - OCC::ownCloudGui - - Unsupported Server Version - Versión del servidor no soportada + + Failed to unlock a folder. + Fallo al desbloquear una carpeta. + + + OCC::User - - 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. + + %1 notifications + %1 notificaciones @@ -6190,75 +6265,80 @@ El servidor respondió con el error: %2 Tu cuenta %1 requiere que aceptes los términos del servicio del servidor. Vas a ser redirigido a %2 para señalar que los has leído y estás de acuerdo. - - Disconnected - Desconectado + + Resolve conflict + Resolver conflicto - - Disconnected from some accounts - Desconectado desde varias cuentas + + Retry all uploads + Reintentar todas las subidas - - Disconnected from %1 - Desconectado de %1 + + You changed + - - Disconnected from accounts: - Desconectado desde cuentas: + + You created + - - Account %1: %2 - Cuenta %1: %2 + + You deleted + - - Please sign in - Por favor, inicie sesión + + You renamed + + + + OCC::UserModel - - Signed out - Cerrar sesión + + <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> - - Account synchronization is disabled - La sincronización está deshabilitada + + Confirm Account Removal + Confirma la eliminación de cuenta - - - Synchronization is paused - La sincronización se ha detenido + + Remove connection + Eliminar vinculación + + + OCC::UserStatusSelectorModel - - Folder %1: %2 - Archivo %1: %2 + + %1 hours + %1 horas - - Unresolved conflicts - Conflictos sin resolver + + %1 minutes + %1 minutos - - Up to date - Actualizado + + 1 hour + 1 hora - - Error during synchronization - Error durante la sincronización + + 1 minute + 1 minuto - - No sync folders configured - No hay carpetas sincronizado configuradas + + 30 minutes + 30 minutos @@ -6282,349 +6362,343 @@ El servidor respondió con el error: %2 macOS VFS para %1: Se ha encontrado un error. - - There are no sync folders configured. - No hay carpetas configuradas para sincronizar. + + Could not set status. Make sure you are connected to the server. + No se ha podido obtener el estado. Asegúrese de que está conectado al servidor. - - Checking for changes in remote "%1" - Buscando cambios en carpeta remota "%1" + + Don't clear + No borrar - - Checking for changes in local "%1" - Buscando cambios en carpeta local "%1" + + Emojis are not supported. Some status functionality may not work. + La función de emojis no es compatible. Es posible que algunas funciones de estado del usuario no funcionen. - - Syncing %1 of %2 (%3 left) - Sincronizando %1 de %2 (quedan %3) + + Less than a minute + Hace menos de un minuto - - Syncing %1 of %2 - Sincronizando %1 de %2 + + Status feature is not supported. You will not be able to set your status. + La función de estado no es compatible. No podrás establecer tu estado. - - Syncing %1 (%2 left) - Sincronizando %1 (quedan %2) + + This week + Esta semana + + + OCC::Vfs - - Syncing %1 - Sincronizando %1 + + The Virtual filesystem feature does not support a drive as sync root + - - %1 (%2, %3) - %1 (%2, %3) + + The Virtual filesystem feature is not supported on network drives + - - - OwncloudAdvancedSetupPage - - &Local Folder - Carpeta &local + + The Virtual filesystem feature requires a NTFS file system, %1 is using %2 + La característica de archivos virtuales necesita un sistema de archivos NTFS, %1 está usando %2 + + + OCC::VfsDownloadErrorDialog - - Username - Usuario + + %1 could not be downloaded. + %1 no pudo ser descargado. - - Local Folder - Carpeta Local + + > More details + > Más detalles - - Choose different folder - Elegir una carpeta distinta + + could not be downloaded + no pudo ser descargado - - Server address - Nombre del servidor + + Download error + Error de descarga - - Sync Logo - Sync Logo + + Error downloading + Error al descargar - - Synchronize everything from server - Sincronizar todo desde el servidor + + Error downloading %1 + Error descargando %1 - - Ask before syncing folders larger than - Preguntar antes sincronizar carpetas mayores de + + More details + Más detalles + + + OCC::WebEnginePage - - MB - Trailing part of "Ask confirmation before syncing folder larger than" - MB + + Invalid certificate detected + Certificado inválido detectado - - Ask before syncing external storages - Preguntar antes sincronizar almacenamientos externos + + The host "%1" provided an invalid certificate. Continue? + El host "%1" ha entregado un certificado no válido. ¿Continuar? + + + OCC::WebFlowCredentials - - Choose what to sync - Elija qué sincronizar + + <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> - - Keep local data - Mantener datos locales + Please login with the account: %1 + Por favor, entra con el usuario: %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> + + Please login with the user: %1 + - - Erase local folder and start a clean sync - Borrar carpeta local e iniciar una sincronización limpia + + You have been logged out of %1 as user %2. Please login again + - - - OwncloudHttpCredsPage - - &Username - &Nombre de usuario + You have been logged out of your account %1 at %2. Please login again. + Ha sido cerrada la sesión de %1 como usuario %2. Por favor, inicie sesión de nuevo. + + + OCC::WelcomePage - - &Password - &Contraseña + Easy-to-use web mail, calendaring & contacts + Correo web, calendario y contactos fáciles de usar - - - OwncloudSetupPage - - - TextLabel - TextLabel + + Form + Formulario - - Logo - Logo + + Host your own server + Aloja tu propio servidor - - Server address - Nombre del servidor + + Keep your data secure and under your control + Mantén tus datos seguros y bajo tu control - - 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. + + Log in + Entrar - - - QObject - - New folder - Nueva carpeta + Screensharing, online meetings & web conferences + Compartir pantalla, reuniones en línea y conferencias web - - Failed to create debug archive - Fallo al crear archivo de depuración + Secure collaboration & file exchange + Colaboración e intercambio de archivos seguros - - Could not create debug archive in selected location! - ¡No se pudo crear el archivo de depuración en la ubicación seleccionada! + + Sign up with provider + Registrarse con un proveedor + + + OCC::ownCloudGui - - You renamed %1 - Has renombrado %1 + + %1: %2 + %1: %2 - - You deleted %1 - Has borrado %1 + + Account %1: %2 + Cuenta %1: %2 - - You created %1 - Has creado %1 + + Account synchronization is disabled + La sincronización está deshabilitada - - You changed %1 - Has cambiado %1 + + Disconnected from %1 + Desconectado de %1 - - Synced %1 - Sincronizado %1 + + Disconnected from accounts: + Desconectado desde cuentas: - - - %nd - delay in days after an activity - %nd%nd%nd + + + Disconnected from some accounts + Desconectado desde varias cuentas - - in the future - en el futuro + + Error during synchronization + Error durante la sincronización - - - %nh - delay in hours after an activity - %nh%nh%nh + + + Folder %1: %2 + Archivo %1: %2 - - now - ahora + + macOS VFS for %1: A problem was encountered. + macOS VFS para %1: Se ha encontrado un error. - - 1m - one minute after activity date and time - 1min + + macOS VFS for %1: Last sync was successful. + macOS VFS para %1: la última sincronización fue correcta. - - - %nm - delay in minutes after an activity - %nmin%nmin%nmin + + + macOS VFS for %1: Sync is running. + macOS VFS para %1: Sincronización en progreso. - - Some time ago - Hace tiempo + + No sync folders configured + No hay carpetas sincronizado configuradas - - %1: %2 - this displays an error string (%2) for a file %1 - %1: %2 + + Please sign in + Por favor, inicie sesión - - Paths beginning with '#' character are not supported in VFS mode. - Las rutas que empiecen con el carácter '#' no son compatibles con el modo VFS. + + Synchronization is paused + La sincronización se ha detenido - - - ResolveConflictsDialog - - Solve sync conflicts - Resolver conflictos de sincronización + + Terms of service + Términos del servicio - - - %1 files in conflict - indicate the number of conflicts to resolve - %1 archivo en conflicto%1 archivos en conflicto%1 archivos en conflicto + + + The server on account %1 runs an old and unsupported version %2. Using this client with unsupported server versions is untested and potentially dangerous. Proceed at your own risk. + - - 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. - Escoja 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. + + 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. - - All local versions - Todas las versiones locales + + There are no sync folders configured. + No hay carpetas configuradas para sincronizar. - - All server versions - Todas las versiones del servidor + + Unresolved conflicts + Conflictos sin resolver - - Resolve conflicts - Resolver conflictos + + Unsupported Server Version + Versión del servidor no soportada - - Cancel - Cancelar + + Up to date + Actualizado - - - ShareDelegate - - Create a new share link - Crear un nuevo enlace de recurso compartido + + 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. + Tu cuenta %1 requiere que aceptes los términos del servicio del servidor. Vas a ser redirigido a %2 para señalar que los has leído y estás de acuerdo. + + + OCC::sesSnackBar - - Copied! - ¡Copiado! + + Success + Éxito + + + OwncloudAdvancedSetupPage - - Share options - Opciones del recurso compartido + + &Keep local data + - - Copy share link location - Copiar dirección del recurso compartido + + &Local Folder + Carpeta &local - - - ShareDetailsPage - - An error occurred setting the share password. - Ocurrió un error al establecer la contraseña del recurso compartido + + <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. + desde el servidor.</p><p>No marque esta casilla si el contenido local + debe cargarse en la carpeta del servidor.</p></body></html> - - Edit share - Editar recurso compartido + <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>. - - Dismiss - Descartar + + Ask before syncing external storages + Preguntar antes sincronizar almacenamientos externos - - Share label - Etiqueta del recurso compartido + + Ask before syncing folders larger than + Preguntar antes sincronizar carpetas mayores de - - - Allow upload and editing - Permitir la subida y edición + + Ask for confirmation before synchroni&zing folders larger than + - - View only - Solo lectura + + Ask for confirmation before synchronizing e&xternal storages + - - File drop (upload only) - Soltar archivo (solo carga) + + Choose different folder + Elegir una carpeta distinta @@ -6632,9 +6706,9 @@ El servidor respondió con el error: %2 Permitir que los otros compartan - - Hide download - Ocultar descarga + + Keep local data + Mantener datos locales @@ -6647,14 +6721,14 @@ El servidor respondió con el error: %2 Proteger con contraseña - - Set expiration date - Fijar fecha de caducidad + + S&ync everything from server + - - Note to recipient - Nota para el destinatario + + Server + @@ -6667,462 +6741,533 @@ El servidor respondió con el error: %2 Dejar de compartir - - Add another link - Añadir otro enlace + + Start a &clean sync (Erases the local folder!) + - - Share link copied! - ¡Enlace compartido copiado! + + Sync Logo + Sync Logo - - Copy share link - Copiar enlace de recurso compartido + + Synchronize everything from server + Sincronizar todo desde el servidor - - - ShareView + + + OwncloudHttpCredsPage - - Password required for new share - Se requiere una contraseña para la nueva compartición + + &Password + &Contraseña - - Share password - Contraseña de la compartición + + &Username + &Nombre de usuario + + + OwncloudOAuthCredsPage - - Shared with you by %1 - + Copy link + Copiar enlace - - Expires in %1 - + Please switch to your browser to proceed. + Por favor, cambie a su navegador para continuar. - - Sharing is disabled - Compartir está deshabilitado + Re-open Browser + Volver a abrir el navegador + + + OwncloudSetupPage - - This item cannot be shared. - Este ítem no puede ser compartido. + + Register with a provider + - - Sharing is disabled. - Compartir está deshabilitado. + + TextLabel + TextLabel - - - ShareeSearchField - - Search for users or groups… - Buscar usuarios o grupos... + + 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. + + + OwncloudWizardResultPage Sharing is not available for this folder Compartir no está disponible para esta carpeta - - - SyncJournalDb - - - Failed to connect database. - Fallo en la conexión a la base de datos. + + + QObject + + + %n day ago + + + + + + + + + %n days ago + + + + + + + + + %n hour ago + + + + + + + + + %n hours ago + + + + + + + + + %n minute ago + + + + + + + + + %n minutes ago + + + + + + + + + %nd + + + + %y + + + + + %nh + + + + %nh + + + + + %nm + + + + %nm + - - - SyncStatus - - Sync now - Sincronizar ahora + + 1m + 1min - - Resolve conflicts - Resolver conflictos + + Could not create debug archive in selected location! + No se ha podido crear el archivo de depuración en la ubicación seleccionada. - - - TalkReplyTextField - - Reply to … - Responder a ... + + Failed to create debug archive + Error al crear el archivo de depuración - - Send reply to chat message - Enviar respuesta al mensaje de chat + + in the future + en el futuro - - - TrayWindowHeader - - Open local or group folders - + + Less than a minute ago + - - More apps - + + New folder + Nueva carpeta - - Open %1 in browser - + + now + ahora - - - UnifiedSearchInputContainer - - Search files, messages, events … - Buscando archivos, mensajes, eventos … + + Paths beginning with '#' character are not supported in VFS mode. + Las rutas que empiecen con el carácter '#' no son compatibles con el modo VFS. - - - UnifiedSearchPlaceholderView - - Start typing to search - + + Some time ago + Hace tiempo - - - UnifiedSearchResultFetchMoreTrigger - - Load more results - Cargar más resultados + + Synced %1 + Sincronizado %1 - - - UnifiedSearchResultItemSkeleton - - Search result skeleton. - Árbol de resultados de la búsqueda + + 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. - - - UnifiedSearchResultListItem - - Load more results - Cargar más resultados + + You changed %1 + Has cambiado %1 - - - UnifiedSearchResultNothingFound - - No results for - No se encontraron resultados para + + You created %1 + Has creado %1 - - - UnifiedSearchResultSectionItem - - Search results section %1 - Sección %1 de resultados de búsqueda + + You deleted %1 + Has borrado %1 - - - UserLine - - Switch to account - Cambiar a la cuenta + + You renamed %1 + Has renombrado %1 + + + + ResolveConflictsDialog + + + %1 files in conflict + + %1 fichero en conflicto + %1 ficheros en conflicto + %1 ficheros en conflicto + - - Current account status is online - El estado actual del usuario es en línea + + All local versions + Todas las versiones locales - - Current account status is do not disturb - El estado actual del usuario es no molestar + + All server versions + Todas las versiones del servidor - - Account actions - Acciones de la cuenta + + 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. + Escoja 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. - - Set status - Establecer estado + + Resolve conflicts + Resolver conflictos - - - Log out - Cerrar sesión + + Solve sync conflicts + Resolver conflictos de sincronización + + + SesTrayHeader - - - Log in - Iniciar sesión + + Open Nextcloud in browser + Abrir HiDrive Next en el navegador - - Remove account - Eliminar cuenta + + Website + Sitio web - - - UserStatusSelector + + + ShareDelegate - - Online status - Estado en línea + + Copied! + ¡Copiado! - - Online - En línea + + Copy share link location + Copiar dirección del recurso compartido - - Away - Ausente + + Create a new share link + Crear un nuevo enlace de recurso compartido + + + ShareDetailsPage - - Do not disturb - No molestar + + Add another link + Añadir otro enlace - - Mute all notifications - Silenciar todas las notificaciones + + Allow resharing + Permitir que los otros compartan - - Invisible - Invisible + + Allow upload and editing + Permitir la subida y edición - - Appear offline - Mostrar como fuera de línea + + An error occurred setting the share password. + Ocurrió un error al establecer la contraseña del recurso compartido - - Status message - Mensaje de estado + + Copy share link + Copiar enlace de recurso compartido - - What is your status? - ¿Cuál es su estado? + + Custom Permissions + Permisos personalizados - - Clear status message after - Borrar el mensaje de estado después de + Edit share + Editar recurso compartido - - Cancel - Cancelar + + Enter the note to recipient + Introducir la nota al destinatario - - Clear status message - Borrar el mensaje de estado + + File drop (upload only) + Soltar archivo (solo carga) - - Set status message - Establecer un mensaje de estado + + Hide download + Ocultar descarga - - - Utility - - %L1 B - %L1 B + + Note to recipient + Nota para el destinatario - - %L1 TB - %L1 TB + + Password protect + Proteger con contraseña - - %L1 GB - %L1 GB + + Set expiration date + Fijar fecha de caducidad - - %L1 MB - %L1 MB + Share label + Etiqueta del recurso compartido - - %L1 KB - %L1 KB + + Share link copied! + ¡Enlace compartido copiado! - - - %n year(s) - %n año%n año(s)%n año(s) + + + Unshare + Dejar de compartir - - - %n month(s) - %n Mes%n Mese(s)%n Mese(s) + + + View only + Solo lectura - - - %n day(s) - %n dia%n dia(s)%n dia(s) + + + ShareView + + + Expires in %1 + - - - %n hour(s) - %n hora%n hora(s)%n hora(s) + + + Password required for new share + Se requiere una contraseña para la nueva compartición - - - %n minute(s) - %n minuto%n minuto(s)%n minuto(s) + + + Share password + Contraseña de la compartición - - - %n second(s) - %n segundo%n segundo(s)%n segundo(s) + + + Shared with you by %1 + - - %1 %2 - %1 %2 + + Sharing is disabled + Compartir está deshabilitado - - - ValidateChecksumHeader - - The checksum header is malformed. - El encabezado de checksum está malformado. + + Sharing is disabled. + Compartir está deshabilitado. - - The checksum header contained an unknown checksum type "%1" - El encabezado del checksum contenía un tipo de comprobación desconocido: "%1" + + This item cannot be shared. + Este ítem no puede ser compartido. + + + ShareeSearchField - - 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" + + Search for users or groups… + Buscar usuarios o grupos... - - - main.cpp - - System Tray not available - La bandeja del sistema no está disponible + + Sharing is not available for this folder + Compartir no está disponible para esta carpeta + + + SyncJournalDb - - %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. + + Failed to connect database. + Fallo en la conexión a la base de datos. - - - nextcloudTheme::aboutInfo() + + + SyncStatus - - <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 con Qt %5, %6</small></p> + + Sync now + Sincronizar ahora - - - progress + + + TalkReplyTextField - - Virtual file created - Archivo virtual creado + + Reply to … + Responder a ... - - Replaced by virtual file - Reemplazado por un archivo virtual + + Send reply to chat message + Enviar respuesta al mensaje de chat + + + TestSetUserStatusDialog - - Downloaded - Descargado + + 7 days + 7 días + + + TrayFoldersMenuButton - - Uploaded - Subido + + Files + Archivos - - 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 + Group folder button + Botón de carpeta de grupo - - 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 + + Open %1 in file explorer + Abrir "%1" en el explorador de archivos - - Deleted - Eliminado + + Open group folder "%1" + Abrir carpeta de grupo "%1" - - Moved to %1 - Movido a %1 + + Open local folder + Abrir carpeta local - - Ignored - Ignorado + + Open local folder "%1" + Abrir carpeta local "%1" - - Filesystem access error - Error de acceso al sistema de archivos + + Open local or group folders + Abrir carpetas locales de de grupo - - Error - Error + + User group and local folders menu + Menú de usuario de carpetas de grupo o locales + + + TrayWindowHeader - - Updated local metadata - Actualizados metadatos locales + + More apps + Más aplicaciones - - Updated local virtual files metadata - Se han actualizado los metadatos para los archivos virtuales + + Open %1 in browser + Abrir %1 en el navegador + + + UnifiedSearchInputContainer Updated end-to-end encryption metadata @@ -7134,35 +7279,50 @@ El servidor respondió con el error: %2 Unknown Desconocido + + + UnifiedSearchPlaceholderView - - downloading - descargando + + Start typing to search + + + + UnifiedSearchResultFetchMoreTrigger uploading subiendo + + + UnifiedSearchResultNothingFound Downloading Descargando + + + UnifiedSearchResultSectionItem - - deleting - eliminando + + Search results section %1 + Sección %1 de resultados de búsqueda + + + UserLine Uploading Subiendo - - moving - moviendo + + Remove account + Eliminar cuenta @@ -7170,19 +7330,22 @@ El servidor respondió con el error: %2 Eliminando - - ignoring - ignorando + + Switch to account + Cambiar a la cuenta + + + UserStatusSelector Moving Moviendo - - error - error + + Away + Ausente @@ -7213,142 +7376,207 @@ El servidor respondió con el error: %2 theme - - Status undefined - Estado indefinido + + Invisible + Invisible - - Waiting to start sync - Esperando para comenzar la sincronización + + Mute all notifications + Silenciar todas las notificaciones - - Sync status is unknown - Estado de sincronización desconocido + + Online + En línea - - Waiting to start syncing - Esperando para empezar la sincronización + + Online status + Estado en línea - - Sync is running - Sincronizado en proceso + + Set status message + Establecer un mensaje de estado - - Sync Success - Sincronizado con éxito + + Status message + Mensaje de estado - - Sync Success, some files were ignored. - Sincronizado con éxito, algunos archivos han sido ignorados. + + What is your status? + ¿Cuál es su estado? + + + Utility - - Sync Error - Error de sincronización. + + %L1 B + %L1 B - - Setup Error - Error en la instalación + + %L1 GB + %L1 GB - - Aborting … - Cancelando ... + + %L1 KB + %L1 KB - - Sync was successful - La sincronización ha tenido éxito + + %L1 MB + %L1 MB - - Sync was successful but some files were ignored - La sincronización ha tenido éxito pero se han ignorado algunos archivos + + %L1 TB + %L1 TB + + + + %n day(s) + + + + + + + + %n hour(s) + + + + + + + + + %n minute(s) + + + + + + + + + %n month(s) + + + + + + + + + %n second(s) + + + + + + + + + %n year(s) + + + + + + + + + ValidateChecksumHeader - - Error occurred during sync - Ha ocurrido un error durante la sincronización + + The checksum header contained an unknown checksum type '%1' + - - Error occurred during setup - Ha ocurrido un error durante la configuración + + The checksum header contained an unknown checksum type "%1" + El encabezado del checksum contenía un tipo de comprobación desconocido: "%1" - - Preparing to sync - Preparando para sincronizar + + The checksum header is malformed. + El encabezado de checksum está malformado. - - Stopping sync - Deteniendo la sincronización + + The downloaded file does not match the checksum, it will be resumed. + - - Sync is paused - La sincronización está en pausa. + + 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" - - - utility + + + main.cpp - - Could not open browser - No se ha podido abrir el navegador + + %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. + - - 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? + + %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. - - Could not open email client - No se ha podido abrir el cliente de correo electrónico + + System Tray not available + La bandeja del sistema no está disponible + + + nextcloudTheme::about() - - 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? + <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 con Qt %5, %6</small></p> + + + progress - - Always available locally - Siempre disponible localmente + + Deleted + Eliminado - - Currently available locally - Disponible localmente ahora + + Deleting + Eliminando - - Some available online only - Algunos solo disponibles en línea + + Downloaded + Descargado - - Available online only - Disponible solo en línea + + downloading + descargando - - Make always available locally - Hacer que esté siempre localmente disponible + + Downloading + Descargando - - Free up local space - Liberar espacio local + + error + error @@ -7362,14 +7590,14 @@ El servidor respondió con el error: %2 OCC::AbstractPropagateRemoteDeleteEncrypted - - 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 recibido "%1 %2". + + Filesystem access error + Error de acceso al sistema de archivos - - "%1 Failed to unlock encrypted folder %2". - "%1 Falló al desbloquear la carpeta cifrada %2". + + Ignored + Ignorado @@ -7388,244 +7616,230 @@ El servidor respondió con el error: %2 OCC::OAuth - - Error returned from the server: <em>%1</em> - Error devuelto desde el servidor: <em>%1</em> + + Ignoring + Ignorando - - There was an error accessing the "token" endpoint: <br><em>%1</em> - Hubo un error accediendo al "token" endpoint: <br><em>%1</em> + + Moved to %1 + Movido a %1 - - Empty JSON from OAuth2 redirect - JSON vacío de la redirección de OAuth2 + + moving + moviendo - - Could not parse the JSON returned from the server: <br><em>%1</em> - No se puede procesar el código JSON recibido del servidor: <br><em>%1</em> + + Moving + Moviendo - - The reply from the server did not contain all expected fields - La respuesta del servidor no contiene todos los campos esperados + + Replaced by virtual file + Reemplazado por un archivo virtual - - <h1>Login Error</h1><p>%1</p> - <h1>Error al iniciar sesión</h1><p>%1</p> + + 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 - - <h1>Wrong account</h1><p>You logged in with the account <em>%1</em>, but must log in with the account <em>%2</em>.<br>Please log out of %3 in another tab, then <a href='%4'>click here</a> and log in with %2.</p> - <h1>Usuario incorrecto</h1><p>Se ha intentado iniciar sesión con el usuario: <em>%1</em>, pero debe iniciar sesión con el usuario: <em>%2</em>.<br>Por favor, cierre la sesión de %3 en otra pestaña, haga<a href='%4'>clic aquí</a> e inicie sesión como el usuario %2</p> + + 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 - - - OCC::OwncloudOAuthCredsPage - - Connect to %1 - Conectarse a %1 + + Unknown + Desconocido - - Login in your browser - Inicia sesión en tu navegador Web + + Updated local metadata + Actualizados metadatos locales - - - OCC::ShareUserLine - - Username - Usuario + + Updated local virtual files metadata + Actualizados los metadatos de los archivos virtuales locales - - Can edit - Puede editar + + updating local metadata + actualizando metadatos locales - - Note: - Nota: + + Updating local metadata + Actualizando los metadatos locales - - Password: - Contraseña: + + Updating local virtual files metadata + Actualizando los metadatos locales de los archivos virtuales - - Expires: - Caduca: + + Uploaded + Subido - - - OwncloudOAuthCredsPage - - Please switch to your browser to proceed. - Por favor vaya a su navegador para proceder. + + uploading + subiendo - - An error occurred while connecting. Please try again. - Ha ocurrido un error al conectarse. Por favor, vuelve a intentarlo. + + Uploading + Subiendo - - Re-open Browser - Reabra el navegador + + Virtual file created + Archivo virtual creado + + + theme - - Copy link - Copiar enlace + + Aborting … + Cancelando ... - - - TrayFoldersMenuButton - - Open local or group folders - Abrir carpetas locales de de grupo + + Error occurred during setup + Ha ocurrido un error durante la configuración - - Open local folder - Abrir carpeta local + + Error occurred during sync + Ha ocurrido un error durante la sincronización - - Connected - Conectado + + Preparing to sync + Preparando para sincronizar - - Disconnected - Desconectado + + Setup Error + Error en la instalación - - Group folder button - Botón de carpeta de grupo + + Status undefined + Estado indefinido - - Open local folder "%1" - Abrir carpeta local "%1" + + Stopping sync + Deteniendo la sincronización - - Open group folder "%1" - Abrir carpeta de grupo "%1" + + Sync Error + Error de sincronización. - - Open %1 in file explorer - Abrir "%1" en el explorador de archivos + + Sync is paused + La sincronización está en pausa. - - User group and local folders menu - Menú de usuario de carpetas de grupo o locales + + Sync is running + Sincronizado en proceso - - - Window - - Nextcloud desktop main dialog - Cuadro de diálogo principal de escritorio de Nextcloud + + Sync status is unknown + Estado de sincronización desconocido - - Current account - Cuenta actual + + Sync Success + Sincronizado con éxito - - - Resume sync for all - Continuar sincronización para todos + + Sync Success, some files were ignored. + Sincronizado con éxito, algunos archivos han sido ignorados. - - - Pause sync for all - Pausar sincronización para todo + + Sync was successful + La sincronización ha tenido éxito - - Add account - Agregar cuenta + + Sync was successful but some files were ignored + La sincronización ha tenido éxito pero se han ignorado algunos archivos - - Add new account - Añadir cuenta nueva + + Waiting to start sync + Esperando para comenzar la sincronización - - Settings - Ajustes + + Waiting to start syncing + Esperando para empezar la sincronización + + + utility - - Exit - Salir + + Always available locally + Siempre disponible localmente - - Current account avatar - Avatar del usuario actual + + Available online only + Disponible solo en línea - - Current account status is online - El estado actual del usuario es en línea + + Could not open browser + No se ha podido abrir el navegador - - Current account status is do not disturb - El estado actual del usuario es no molestar + + Could not open email client + No se ha podido abrir el cliente de correo electrónico - - Account switcher and settings menu - Cambiador de cuentas y menú de configuración + + Currently available locally + Disponible localmente ahora - - Open Nextcloud Talk in browser - Abrir Nextcloud Talk en el navegador + + Free up local space + Liberar espacio local - - More apps - Más aplicaciones + + Make always available locally + Hacer que esté siempre localmente disponible - - Open %1 in browser - Abrir %1 en el navegador + + Some available online only + Algunos solo disponibles en línea - - Unified search results list - Unificar la lista de resultados de la búsqueda + + 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? - - - nextcloudTheme::about() - - <p><small>Built from Git revision <a href="%1">%2</a> on %3, %4 using Qt %5, %6</small></p> - <p><small>Construido desde la revisión Git <a href="%1">%2</a> en %3, %4, usando Qt %5, %6</small></p> + + 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? - - \ No newline at end of file + + diff --git a/translations/client_fr.ts b/translations/client_fr.ts index 26e9000efa36c..c8711ca55ca1d 100644 --- a/translations/client_fr.ts +++ b/translations/client_fr.ts @@ -1,36 +1,149 @@ - - + + + + + + &Launch on system startup + &Lancer au démarrage du système + + + + can edit + + + + + could not create folder %1 + + + + + Create debug archive + Créer l'archive de débogage + + + + Create Folder + + + + + File Drop (Upload Only) + + + + + Last Sync was successful. + + + + + New %1 Update Ready + + + + + ok + + + + + Open %1 in Browser + + + + + Open Local Folder + + + + + Password Protect + + + + + Server Address + + + + + Setup Error. + + + + + share label + + + + + Show call notifications + Afficher les notifications des appels + + + + Show server &notifications + Afficher les &notifications serveur + + + + There was an invalid response to an authenticated webdav request + + + + + timeout + + + + + Undefined State. + + + + + updating local virtual files metadata + Mise à jour des métadonnées des fichiers virtuels locaux + + + + Use &monochrome icons + Utiliser les icônes &monochromes + + + ActivityItem - - Open %1 locally - Ouvrir %1 localement + + In %1 + Dans %1 - - In %1 - Dans %1 + + Open %1 locally + Ouvrir %1 localement - - + + ActivityItemContent - - Open file details - Ouvrir les détails du fichier + + Dismiss + Rejeter - - Dismiss - Rejeter + + Open file details + Ouvrir les détails du fichier - - + + ActivityList - - Activity list - Liste des activités + + Activity list + Liste des activités @@ -46,129 +159,133 @@ 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 - - Answer Talk call notification - Répondre à la notification d'appel de Talk + + Decline + Décliner - - Decline - Décliner + + Decline Talk call notification + Décliner 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 - - %1 (%2, %3) - %1 (%2, %3) + + %1 (%2, %3) + %1 (%2, %3) - - Checking for changes in "%1" - Vérification des modifications dans "%1" + + Checking for changes in '%1' + - - Syncing %1 of %2 (%3 left) - Synchronisation de %1 sur %2 (%3 restant) + + Checking for changes in "%1" + Vérification des modifications dans "%1" - - Syncing %1 of %2 - Synchronisation de %1 sur %2 + + Help + Aide - - Syncing %1 (%2 left) - Synchronisation de %1 (%2 restant) + + Log out + Se déconnecter - - Syncing %1 - Synchronisation de %1 + + No recently changed files + Aucun fichier modifié récemment - - - No recently changed files - Aucun fichier modifié récemment + + Open website + Consulter le site web - - Sync paused - Synchronisation en pause + + Pause synchronization + Suspendre la synchronisation - - Syncing - Synchronisation en cours + + Quit sync client + Quitter le client de synchro - - Open website - Consulter le site web + + Recently changed + Modifié récemment - - Recently changed - Modifié récemment + + Settings + Paramètres - - Pause synchronization - Suspendre la synchronisation + + Sync paused + Synchronisation en pause - - Help - Aide + + Syncing + Synchronisation en cours - - Settings - Paramètres + + Syncing %1 + Synchronisation de %1 - - Log out - Se déconnecter + + Syncing %1 (%2 left) + Synchronisation de %1 (%2 restant) - - Quit sync client - Quitter le client de synchro + + Syncing %1 of %2 + Synchronisation de %1 sur %2 - - + + + Syncing %1 of %2 (%3 left) + Synchronisation de %1 sur %2 (%3 restant) + + + ConflictDelegate - - Local version - Version locale + + Local version + Version locale - - Server version - Version serveur + + Server version + Version du serveur - - + + CurrentAccountHeaderButton - - Current account - Compte actuel + + Account switcher and settings menu + Sélecteur de compte et menu des paramètres @@ -183,14 +300,14 @@ Mettre en pause la synchronisation pour tous - - Add account - Ajouter un compte + + Current account + Compte actuel - - Add new account - Ajouter un nouveau compte + + Current account avatar + Avatar actuel du compte @@ -226,17 +343,17 @@ EditFileLocallyLoadingDialog - - Opening file for local editing - Ouverture du fichier pour édition locale + + Opening file for local editing + Ouverture du fichier pour édition locale - - + + EmojiPicker - - No recent emojis - Pas d'émojis récents + + No recent emojis + Pas d'émojis récents @@ -273,38 +390,39 @@ ErrorBox - - Error - Erreur + + Error + Erreur - - - FileDetailsPage + + + FakeHangingReply - - Dismiss - Rejeter + + Operation canceled + Opération annulée + + + FileDetailsPage - - Activity - Activité + Activity + Activité - - Sharing - Partage + Sharing + Partage - - + + FileDetailsWindow - - File details of %1 · %2 - Détails du fichier de %1 · %2 + + File details of %1 · %2 + Détails du fichier de %1 · %2 - - + + FileProviderEvictionDialog @@ -321,176 +439,212 @@ Reload Recharger - - + + FileProviderFastEnumerationSettings - - Enable fast sync - Activer la sync. rapide + + 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. + 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 + + Delete + Supprimer - - + + FileProviderSettings - - Virtual files settings - Paramètres des fichiers virtuels + + Advanced + Avancés - - General settings - Paramètres généraux + + Enable virtual files + Activer les fichiers virtuels - - Enable virtual files - Activer les fichiers virtuels + + General settings + Paramètres généraux - - Advanced - Avancés + + Signal file provider domain + Indiquer le domaine du fournisseur de fichiers - - Signal file provider domain - Fichier de signal domaine du fournisseur + + 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 - - %1 GB of %2 GB remote files synced - %1 Go sur %2 Go de fichiers distants synchronisés + + Evict local copies... + Supprimer les copies locales - - Evict local copies... - Supprimer les copies locales + + Local storage use + Utilisation du stockage local - - + + FileProviderSyncStatus - - Syncing - Synchronisation + + All synced! + Tout est synchronisé ! + + + FileSystem - - All synced! - Tout est synchronisé ! + Could not make directories in trash + Impossible de créer des dossiers dans la corbeille - - - FileSystem - - Error removing "%1": %2 - Erreur lors de la suppression de "%1" : %2 + + Could not move '%1' to '%2' + - - Could not remove folder "%1" - Impossible de supprimer le dossier "%1" + Could not move "%1" to "%2" + Impossible de déplacer "%1" vers "%2" - - Could not make directories in trash - Impossible de créer des dossiers dans la corbeille + + Could not remove folder "%1" + Impossible de supprimer le dossier "%1" - - - Could not move "%1" to "%2" - Impossible de déplacer "%1" vers "%2" + + Error removing "%1": %2 + Erreur lors de la suppression de "%1" : %2 - - Moving to the trash is not implemented on this platform - Mettre à la corbeille n'est pas disponible sur cette plateforme + Moving to the trash is not implemented on this platform + Mettre à la corbeille n'est pas disponible sur cette plateforme - - + + Flow2AuthWidget - - Browser Authentication - Authentification avec le navigateur Internet + + An error occurred while connecting. Please try again. + Une erreur s'est produite pendant la connexion. Veuillez ré-essayer. - - Logo - Logo + + Browser Authentication + Authentification avec le navigateur Internet - - Switch to your browser to connect your account - Basculez sur votre navigateur pour connecter votre compte + + Logo + Logo - - An error occurred while connecting. Please try again. - Une erreur s'est produite pendant la connexion. Veuillez ré-essayer. + + Switch to your browser to connect your account + Basculez sur votre navigateur pour connecter votre compte - - + + + FolderWizardSelectiveSync + + + Add Folder Sync + Ajouter une synchronisation de dossiers + + + + Step 3 of 3: Selektive Synchronisation + Étape 3 sur 3 : synchronisation sélective + + + FolderWizardSourcePage - - Pick a local folder on your computer to sync - Sélectionnez un dossier local de votre ordinateur à synchroniser + + &Choose + &Choisir - - &Choose … - &Sélectionner … + &Choose … + &Sélectionner … - - + + 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 + 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 - - Select a remote destination folder - Veuillez sélectionner un dossier distant + + 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 + + Create folder + Créer un dossier - - Refresh - Rafraîchir + + Folders + Dossiers - - 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 + + + Select a remote destination folder + Veuillez sélectionner un dossier distant + + + + Step 2 of 3: Directory in your %1 + Étape 2 sur 3 : répertoire dans votre %1 + + + MainWindow @@ -507,44 +661,55 @@ New activities Nouvelles activités - - + + OCC::AbstractNetworkJob - - Connection timed out - Délai de connexion dépassé + + 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" - - 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::AbstractPropagateRemoteDeleteEncrypted + + "%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::Account - - File %1 is already locked by %2. - Le fichier %1 est déjà verrouillé par %2. + + 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 + + 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 + + Unlock operation on %1 failed with error %2 + L'opération de déverrouillage de %1 a échoué avec l'erreur %2 - - + + OCC::AccountManager @@ -557,22 +722,21 @@ Faut-il tenter d'importer un compte ? %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 ? 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. + 1 compte a été détecté à partir d'un ancien client de bureau. Le compte doit-il être importé ? - - - - Legacy import - Importation de l'héritage + An existing configuration from a legacy desktop client was detected. +Should an account import be attempted? + Un configuration existante du client d'origine a été détectée +Est-ce qu'une tentative d'importation du compte doit être lancée ? @@ -585,94 +749,91 @@ Le compte doit-il être importé ? Ignorer - - Successfully imported account from legacy client: %1 - Importation réussie du compte de l'ancien client : %1 + + Import + Importer - - Could not import accounts from legacy client configuration. - Impossible d'importer des comptes à partir de l'ancienne configuration client. + + Legacy import + Importation de l'héritage - - - OCC::AccountSettings - - Storage space: … - Espace de stockage : ... + + Skip + Ignorer - - 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. + Successfully imported account from legacy client: %1 + Importation réussie du compte de l'ancien client : %1 + + + OCC::AccountSettings - - - - Cancel - Annuler + + (experimental) + (expérimental) - - Apply - Appliquer + + %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. - - Connected with <server> as <user> - Connecté au serveur <server> avec le compte <user> + + %1 as %2 + %1 avec le compte %2 - - Synchronize all - Tout synchroniser + + %1 as <i>%2</i> + - - 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 + + <p>Could not create local folder <i>%1</i>.</p> + <p>Impossible de créer le dossier local <i>%1</i>.</p> - - Virtual file sync - Synchronisation de fichiers virtuels + + <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> - - Connection settings - Paramètres de connexion + + Apply + Appliquer - - End-to-end Encryption with Virtual Files - Chiffrement de bout en bout avec fichiers virtuels + + Apply manual changes + Appliquer les changements manuels - - 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". + + Availability + Disponibilités - - Do not encrypt folder - Ne pas chiffrer le dossier + + Cancel + Annuler - - Encrypt folder - Chiffrer le dossier + + Choose what to sync + Sélectionner le contenu à synchroniser @@ -687,29 +848,29 @@ Le compte doit-il être importé ? <b>Ce processus n'est pas réversible. Êtes-vous sûr de vouloir le faire ?</b> - - No account configured. - Aucun compte configuré. + + Connected with <server> as <user> + Connecté au serveur <server> avec le compte <user> - - Disable encryption - Désactiver le chiffrement + + Connecting to %1 … + Connexion à %1 ... - - Display mnemonic - Afficher la phrase secrète + + Connection settings + Paramètres de connexion - - End-to-end encryption has been enabled for this account - Le chiffrement de bout en bout a été activé sur ce compte + + Could not encrypt folder because the folder does not exist anymore + Impossible de chiffrer le dossier car il n'existe plus - - Warning - Attention + + Create new folder + Créer un nouveau dossier @@ -727,253 +888,239 @@ Le compte doit-il être importé ? Le dossier a une erreur de synchronisation. Le chiffrement de ce dossier sera possible quand la synchronisation aura réussi. - - 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 ? + + Disable end-to-end encryption for %1? + Désactiver le chiffrement de bout en bout pour %1 ? - - 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. + + Disable support + Désactiver le support - - Encryption failed - Le chiffrement a échoué + + Disable virtual file support … + Désactiver la prise en charge du fichier virtuel… - - Could not encrypt folder because the folder does not exist anymore - Impossible de chiffrer le dossier car il n'existe plus + + Disable virtual file support? + Désactiver le support des fichiers virtuels ? - - - Open folder - Ouvrir le dossier + + Display mnemonic + Afficher la phrase secrète - - Encrypt - Chiffrer + + Do not encrypt folder + Ne pas chiffrer le dossier - - - Edit Ignored Files - Modifier les fichiers exclus + + Edit Ignored Files + Modifier les fichiers ignorés - - - Create new folder - Créer un nouveau dossier + + Enable encryption + - - - Availability - Disponibilités + + Enable virtual file support %1 … + Activer la prise en charge du fichier virtuel %1 … - - Choose what to sync - Sélectionner le contenu à synchroniser + + Encrypt + Chiffrer - - Force sync now - Forcer la synchronisation maintenant + + Encrypt folder + Chiffrer le dossier - - Restart sync - Redémarrer la synchronisation + + Encryption failed + Le chiffrement a échoué - - Resume sync - Reprendre la synchronisation + + End-to-end Encryption + Chiffrement de bout en bout - - Pause sync - Mettre en pause la synchronisation + + End-to-end encryption has been enabled for this account + Le chiffrement de bout en bout a été activé sur ce compte - - Remove folder sync connection - Retirer la connexion de synchronisation de dossier + + 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. - - Disable virtual file support … - Désactiver la prise en charge du fichier virtuel… + + 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 ? - - Enable virtual file support %1 … - Activer la prise en charge du fichier virtuel %1 … + + End-to-end encryption mnemonic + Phrase secrète du chiffrement de bout en bout - - (experimental) - (expérimental) + + End-to-end Encryption with Virtual Files + Chiffrement de bout en bout avec fichiers virtuels - - Folder creation failed - Échec de la création du dossier + + Expand Memory + Augmenter la mémoire - - <p>Could not create local folder <i>%1</i>.</p> - <p>Impossible de créer le dossier local <i>%1</i>.</p> + + Folder creation failed + Échec de la création du dossier - - Confirm Folder Sync Connection Removal - Confirmer le retrait de la synchronisation de dossier + + Force sync now + Forcer la synchronisation maintenant - - <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> + + https://wl.hidrive.com/easy/0057 + https://wl.hidrive.com/easy/0057 - - Remove Folder Sync Connection - Retirer la synchronisation de ce dossier + + No %1 connection configured. + Aucune connexion à %1 configurée - - Disable virtual file support? - Désactiver le support des fichiers virtuels ? + + No account configured. + Aucun compte configuré. - - 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 connection to %1 at %2. + Aucune connexion au serveur %1 à l'adresse %2. - - Disable support - Désactiver le support + Obtaining authorization from the browser. <a href='%1'>Click here</a> to re-open the browser. + En attente d'autorisation du navigateur. <a href='%1'>Cliquer ici</a> pour recharger le navigateur. - - End-to-end encryption mnemonic - Phrase secrète du chiffrement de bout en bout + + Open folder + Ouvrir le dossier - - 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). + + Pause sync + Mettre en pause la synchronisation - - Disable end-to-end encryption - Désactiver le chiffrement de bout en bout + + 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 end-to-end encryption for %1? - Désactiver le chiffrement de bout en bout pour %1 ? + + 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. + + Remove Folder Sync Connection + Retirer la synchronisation de ce dossier - - Sync Running - Synchronisation en cours + + 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. - - The syncing operation is running.<br/>Do you want to terminate it? - La synchronisation est en cours.<br/>Voulez-vous l'arrêter ? + + Restart sync + Redémarrer la synchronisation - - %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. + + Resume sync + Reprendre la synchronisation - - %1 of %2 in use - %1 utilisés sur %2 + + 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. - - Currently there is no storage usage information available. - Actuellement aucune information d'utilisation de stockage n'est disponible. + + Server %1 is currently in maintenance mode. + Le serveur %1 est en cours de maintenance. - - %1 in use - %1 utilisé(s) + + Server %1 is temporarily unavailable. + Le serveur %1 est temporairement indisponible. - - %1 as %2 - %1 avec le compte %2 + + Server configuration error: %1 at %2. + Erreur de configuration serveur : %1 à %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. + + Set up encryption + Configurer le chiffrement - - Connected to %1. - Connecté au serveur %1. + + Signed out from %1. + Session sur %1 fermée. - - Server %1 is temporarily unavailable. - Le serveur %1 est temporairement indisponible. + + Standard file sync + Synchronisation de fichiers standards - - Server %1 is currently in maintenance mode. - Le serveur %1 est en cours de maintenance. + + Storage space %1% occupied + Espace de stockage %1% occupé - - 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. + + Storage space: … + Espace de stockage : ... - - Signed out from %1. - Session sur %1 fermée. + + Sync Running + Synchronisation en cours - - Obtaining authorization from the browser. <a href='%1'>Click here</a> to re-open the browser. - En attente d'autorisation du navigateur. <a href='%1'>Cliquer ici</a> pour recharger le navigateur. + + Synchronize all + Tout synchroniser - - Connecting to %1 … - Connexion à %1 ... + + Synchronize none + Ne rien synchroniser - - No connection to %1 at %2. - Aucune connexion au serveur %1 à l'adresse %2. + + 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. @@ -981,9 +1128,9 @@ Vous prenez vos propres risques. Impossible de se connecter à %1. - - Server configuration error: %1 at %2. - Erreur de configuration serveur : %1 à %2. + + The server version %1 is old and unsupported! Proceed at your own risk. + @@ -991,9 +1138,9 @@ Vous prenez vos propres risques. Vous devez accepter les conditions générales d'utilisation - - No %1 connection configured. - Aucune connexion à %1 configurée + + The syncing operation is running.<br/>Do you want to terminate it? + La synchronisation est en cours.<br/>Voulez-vous l'arrêter ? @@ -1006,14 +1153,14 @@ Vous prenez vos propres risques. 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 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 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 : @@ -1021,201 +1168,206 @@ Vous prenez vos propres risques. Il y a des dossiers qui ont augmenté de taille au-delà de %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. - 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 + Ce compte prend en charge le chiffrement de bout en bout. - - 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. + +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. - - Set up encryption - Configurer le chiffrement + 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> - - - 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é. + + 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 ? - - 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. + + 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). - - There was an invalid response to an authenticated WebDAV request - Réponse invalide reçue suite à une requête WebDav authentifiée. + + Unable to connect to %1. + Impossible de se connecter à %1. - - - OCC::AccountState - - Signed out - Session fermée + + 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 système de fichiers local et ne seront plus synchronisés sur cet ordinateur - - Disconnected - Déconnecté + + Virtual file sync + Synchronisation de fichiers virtuels - - Connected - Connecté + + Warning + Attention - - Service unavailable - Service indisponible + + 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. - - Maintenance mode - mode maintenance + + You need to accept the terms of service + Vous devez accepter les conditions générales d'utilisation - - Redirect detected - Redirection détecté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 - - Network error - Erreur réseau + + 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. - - Configuration error - Erreur de configuration + + 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é. - - Asking Credentials - informations d'identification demandées + + There was an invalid response to an authenticated WebDAV request + Réponse invalide reçue suite à une requête WebDav authentifiée. + + + OCC::AccountState - - Need the user to accept the terms of service - Besoin que l'utilisateur accepte les conditions générales d'utilisation + + Asking Credentials + informations d'identification demandées - - Unknown account state - État du compte inconnu + + Configuration error + Erreur de configuration - - - OCC::ActivityListModel - - For more activities please open the Activity app. - Pour plus d'activités veuillez lancer l'application Activité. + + Connected + Connecté - - Fetching activities … - Récupération des activités... + + Disconnected + Déconnecté - - Network error occurred: client will retry syncing. - Une erreur de réseau est survenue : le client va réessayer la synchronisation. + + Maintenance mode + mode maintenance - - Files from the ignore list as well as symbolic links are not synced. - Les fichiers présents dans la liste d'exclusion ainsi que les liens symboliques ne sont pas synchronisés. + + Need the user to accept the terms of service + Besoin que l'utilisateur accepte les conditions générales d'utilisation - - - OCC::AddCertificateDialog - - SSL client certificate authentication - Authentification par certificat SSL client + + Network error + Erreur réseau - - This server probably requires a SSL client certificate. - Ce serveur requiert probablement un certificat SSL client. + + Redirect detected + Redirection détectée - - Certificate & Key (pkcs12): - Certificat & clé (pkcs12) : + + Service unavailable + Service indisponible - - Browse … - Parcourir … + + Signed out + Session fermée - - Certificate password: - Mot de passe du certificat : + + Unknown account state + État du compte inconnu + + + OCC::ActivityListModel - - 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. + + Fetching activities … + Récupération des activités... - - Select a certificate - Sélectionner un certificat + + Files from the ignore list as well as symbolic links are not synced. + Les fichiers présents dans la liste d'exclusion ainsi que les liens symboliques ne sont pas synchronisés. - - Certificate files (*.p12 *.pfx) - Fichiers de certificats (*.p12 *.pfx) + + Files from the ignore list as well as symbolic links are not synced. This includes: + - - - 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>. + + For more activities please open the Activity app. + Pour plus d'activités veuillez lancer l'application Activité. - - newer - newer software version - ultérieures + + Network error occurred: client will retry syncing. + Une erreur de réseau est survenue : le client va réessayer la synchronisation. + + + OCC::AddCertificateDialog - - older - older software version - antérieures + + 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. - - ignoring - ignorés + + Browse … + Parcourir … - - deleting - supprimés + + Certificate & Key (pkcs12) : + - - Quit - Quitter + + Certificate & Key (pkcs12): + Certificat & clé (pkcs12) : - - Continue - Continuer + + Certificate files (*.p12 *.pfx) + Fichiers de certificats (*.p12 *.pfx) @@ -1249,6 +1401,9 @@ Vous prenez vos propres risques. Legacy import Importation héritée + + + OCC::Application Imported %1 and %2 from a legacy desktop client. @@ -1258,271 +1413,262 @@ Vous prenez vos propres risques. %3 - - Error accessing the configuration file - Erreur lors de l'accès au fichier de configuration + + %1 folders + %1 dossiers - - 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. + + 1 account + 1 compte OCC::AuthenticationDialog - - Authentication Required - Authentification requise + + Continue + Continuer - - Enter username and password for "%1" at %2. - Saisir le nom d’utilisateur et le mot de passe pour « %1 » sur %2. + + deleting + supprimés - - &Username: - &Username: + + Error accessing the configuration file + Erreur lors de l'accès au fichier de configuration - - &Password: - &Password: + + ignoring + ignorés - - - OCC::BasePropagateRemoteDeleteEncrypted - - "%1 Failed to unlock encrypted folder %2". - « %1 Impossible de déverrouiller le dossier chiffré %2 ». + + Imported %1 and %2 from a legacy desktop client. +%3 + Import de %1 et %2 à partir d'un ancien client de bureau. +%3 - - 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 ». + + newer + ultérieures - - - 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 + + older + antérieures - - 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. + + Quit + Quitter - - File Removed (start upload) %1 - Fichier retiré (début du téléversement) %1 + + Quit %1 + Quitter %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. + + 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>. - - Local file changed during syncing. It will be resumed. - Fichier local modifié pendant la synchronisation. La synchronisation sera reprise. + + 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. - - - Local file changed during sync. - Fichier local modifié pendant la synchronisation. + + There was an error while accessing the configuration file at %1. Please make sure the file can be accessed by your user. + + + + OCC::AuthenticationDialog - - Network error: %1 - Erreur réseau : %1 + + &Password: + &Password: - - Error updating metadata: %1 - Erreur à la mise à jour des méta-données : %1 + + &User: + - - The file %1 is currently in use - Le fichier %1 est en cours d'utilisation + + &Username: + &Username: - - The local file was removed during sync. - Le fichier local a été supprimé pendant la synchronisation. + + Authentication Required + Authentification requise - - Restoration failed: %1 - Échec de la restauration : %1 + + Enter username and password for '%1' at %2. + - - - 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. + + Enter username and password for "%1" at %2. + Saisir le nom d’utilisateur et le mot de passe pour « %1 » sur %2. + + + OCC::BulkPropagatorJob - - 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. + + Error updating metadata: %1 + Erreur à la mise à jour des méta-données : %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 les permissions de renommer ce fichier. Veuillez demander à son auteur de le renommer. + + 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 - - Failed to fetch permissions with error %1 - Échec de récupération de permissions avec l'erreur %1 + + File %1 has invalid modification time. Do not upload to the server. + Le fichier %1 présente une date de modification invalide. Envoi au serveur impossible. - - Filename contains leading and trailing spaces. - Le nom de fichier contient des espaces de début et de fin. + + File %1 has invalid modified time. Do not upload to the server. + Le fichier %1 présente une date de modification invalide. Envoi au serveur impossible. - - Filename contains leading spaces. - Le nom de fichier contient des espaces de début. + + File Removed (start upload) %1 + Fichier supprimé (démarrer l'envoi) %1 - - Filename contains trailing spaces. - Le nom de fichier contient des espaces de fin. + + Local file changed during sync. + Fichier local modifié pendant la synchronisation. - - - OCC::CaseClashFilenameDialog - - Case Clash Conflict - Conflit de casse + + Local file changed during syncing. It will be resumed. + Fichier local modifié pendant la synchronisation. La synchronisation sera reprise. - - 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. + + Network error: %1 + Erreur réseau : %1 - - Error - Erreur + + Restoration failed: %1 + Échec de la restauration : %1 - - Existing file - Fichier existant + + The file %1 is currently in use + Le fichier %1 est en cours d'utilisation - - file A - fichier A + + The local file was removed during sync. + Le fichier local a été supprimé pendant la synchronisation. + + + OCC::CaseClashConflictSolver - - - today - aujourd'hui + + 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. - - - 0 byte - 0 octets + + 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. - - - Open existing file - Ouvrir un fichier existant + + Failed to fetch permissions with error %1 + Échec de récupération de permissions avec l'erreur %1 - - Case clashing file - Fichier avec conflit de casse + + Filename contains leading and trailing spaces. + Le nom de fichier contient des espaces de début et de fin. - - file B - fichier B + + Filename contains leading spaces. + Le nom de fichier contient des espaces de début. - - - Open clashing file - Ouvrir le fichier conflictuel + + Filename contains trailing spaces. + Le nom de fichier contient des espaces de fin. - - Please enter a new name for the clashing file: - Veuillez saisir un nouveau nom pour le fichier conflictuel : + + 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 - - New filename - Nouveau nom de fichier + + %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. - - Rename file - Renomer le fichier + + 0 byte + 0 octets - - 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. + + Case Clash Conflict + Case Clash Conflict - - %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. + + Case clashing file + Fichier avec conflit de casse - - Filename contains leading and trailing spaces. - Le nom de fichier contient des espaces de début et de fin. + + Existing file + Dossier existant - - Filename contains leading spaces. - Le nom de fichier contient des espaces de début. + + file A + fichier A - - Filename contains trailing spaces. - Le nom de fichier contient des espaces de fin. + + file B + fichier B - - Use invalid name - Nom invalide + + Filename contains illegal characters: %1 + Le nom du fichier contient des caractères illégaux : %1 - - Filename contains illegal characters: %1 - Le nom du fichier contient des caractères illégaux : %1 + + New filename + Nouveau nom de fichier - - - OCC::CleanupPollsJob - - Error writing metadata to the database - Erreur à l'écriture des métadonnées dans la base de données + + Open clashing file + Ouvrir le fichier conflictuel - - - OCC::ClientSideEncryption PIN needed to login to token @@ -1549,186 +1695,178 @@ Vous prenez vos propres risques. 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 + + Please enter a new name for the clashing file: + Veuillez saisir un nouveau nom pour le fichier conflictuel : - - - OCC::ConflictDialog - - Sync Conflict - Conflit de synchronisation + + Rename file + Renomer le fichier - - - Conflicting versions of %1. - Versions en conflit de %1. + + 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. - - 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. + + 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. - - Local version - Version locale + + today + aujourd'hui - - - Click to open the file - Cliquez pour ouvrir le fichier + + Use invalid name + Nom invalide + + + OCC::CleanupPollsJob - - - today - aujourd'hui + + Error writing metadata to the database + Erreur à l'écriture des métadonnées dans la base de données + + + OCC::ClientSideEncryption - - - 0 byte - 0 octet + + Enter E2E passphrase + Entrez la phrase secrète E2E - - <a href="%1">Open local version</a> - <a href="%1">Ouvrir la version locale</a> + + Please enter your end to end encryption passphrase:<br><br>User: %2<br>Account: %3<br> + - - Server version - Version du serveur + + 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 - - <a href="%1">Open server version</a> - <a href="%1">Ouvrir la version serveur</a> + + <a href="%1">Open local version</a> + <a href="%1">Ouvrir la version locale</a> - - - Keep selected version - Conserver la version sélectionnée + + <a href="%1">Open server version</a> + <a href="%1">Ouvrir la version serveur</a> - - Open local version - Ouvrir la version locale + + Click to open the file + Cliquez pour ouvrir le fichier - - Open server version - Ouvrir la version serveur + + Conflicting versions of %1. + Versions en conflit de %1. - - Keep both versions - Conserver les deux versions + + Keep both versions + Conserver les deux versions - - Keep local version - Conserver la version locale + + Keep local version + Conserver la version locale - - Keep server version - Conserver la version serveur + + Keep selected version + Conserver la version sélectionnée - - - OCC::ConflictSolver - - 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 ? + + Keep server version + Conserver la version serveur - - Do you want to delete the file <i>%1</i> permanently? - Voulez-vous supprimer le fichier <i>%1</i> définitivement ? + + Open local version + Ouvrir la version locale - - Confirm deletion - Confirmer la suppression + + Open server version + Ouvrir la version serveur - - - Error - Erreur + + Sync Conflict + Conflit de synchronisation - - - Moving file failed: - -%1 - Déplacement du fichier échoué - -%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. - - - OCC::ConnectionValidator + + + OCC::ConflictSolver - - No Nextcloud account configured - Aucun compte Nextcloud n'est paramétré + + Confirm deletion + Confirmer la suppression - - Authentication error: Either username or password are wrong. - Erreur d'authentification : nom d’utilisateur et/ou mot de passe incorrect(s). + + 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 ? - - Timeout - Délai d'attente + + Do you want to delete the file <i>%1</i> permanently? + Voulez-vous supprimer le fichier <i>%1</i> définitivement ? - - The provided credentials are not correct - Les informations d'identification fournies ne sont pas correctes + + Moving file failed: + +%1 + Déplacement du fichier échoué + +%1 + + + OCC::ConnectionValidator - - The configured server for this client is too old - Le serveur configuré pour ce client est trop vieux + + Authentication error: Either username or password are wrong. + Erreur d'authentification : nom d’utilisateur et/ou mot de passe incorrect(s). - - 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. + + Connection issue + Problème de connexion - - - OCC::DiscoveryPhase - - Error while canceling deletion of a file - Erreur lors de l'annulation de la suppression d'un fichier + + No Nextcloud account configured + Aucun compte Nextcloud n'est paramétré - - Error while canceling deletion of %1 - Erreur lors de l'annulation de la suppression de %1 + + 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. - - - OCC::DiscoverySingleDirectoryJob - - - Server error: PROPFIND reply is not XML formatted! - Erreur du serveur : La réponse PROPFIND n'est pas au format XML ! + + The configured server for this client is too old + Le serveur configuré pour ce client est trop vieux @@ -1741,365 +1879,348 @@ 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. - - - 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 - + + + OCC::DiscoveryMainThread - - Directory not found: %1 - Dossier non trouvé : %1 + + Aborted by the user + + + + OCC::DiscoveryPhase - - Filename encoding is not valid - L’encodage du nom de fichier n’est pas valide + + Error while canceling deletion of %1 + Erreur lors de l'annulation de la suppression de %1 - - Error while reading directory %1 - Erreur de lecture du dossier %1 + + Error while canceling deletion of a file + Erreur lors de l'annulation de la suppression d'un fichier - - - OCC::EditLocallyJob + + + OCC::DiscoverySingleDirectoryJob - - - - - - - - - Could not start editing locally. - Impossible de démarrer l'édition localement. + + 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. - - An error occurred during setup. - Une erreur est survenue pendant l'installation + + Encrypted metadata setup error! + Erreur de configuration des métadonnées chiffrées ! - - - 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. + + Server error: PROPFIND reply is not XML formatted! + Erreur du serveur : La réponse PROPFIND n'est pas au format XML ! - - Invalid token received. - Jeton invalide reçu. + + The server file discovery reply is missing data. + + + + OCC::DiscoverySingleLocalDirectoryJob - - - - - 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. + + Directory not accessible on client, permission denied + Dossier non accessible au client, permission refusée - - Invalid file path was provided. - Un chemin d'accès au fichier invalide a été fourni. + + Directory not found: %1 + Dossier non trouvé : %1 - - Could not find an account for local editing. - Impossible de trouver un compte pour l'édition locale. + + Error while opening directory %1 + Erreur à l’ouverture du dossier %1 - - An error occurred trying to verify the request to edit locally. - Une erreur est survenue pendant la vérification de la requête d'édition locale. + + Error while reading directory %1 + Erreur de lecture du dossier %1 - - - - An error occurred during data retrieval. - Une erreur est survenue pendant le rapatriement des données. + + Filename encoding is not valid + L’encodage du nom de fichier n’est pas valide + + + OCC::EditLocallyJob - - - Could not validate the request to open a file from server. - Impossible de valider la requête pour ouvrir un fichier du serveur. + + 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. + + An error occurred during setup. + Une erreur est survenue pendant la configuration. - - Server error: PROPFIND reply is not XML formatted! - Erreur de serveur : La réponse de PROPFIND n'est pas formatée en XML ! + + 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 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. + + An error occurred trying to verify the request to edit locally. + Une erreur est survenue pendant la vérification de la requête d'édition locale. - - Invalid local file path. - Chemin d'accès au fichier local non valide. + + 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 open %1 - Impossible d'ouvrir %1 + + 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. - - - - - - - Please try again. - Merci de réessayer. + + 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. - - File %1 already locked. - Fichier %1 déjà verrouillé. + + Could not find an account for local editing. + Impossible de trouver un compte pour l'édition locale. - - - 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. + + Could not open %1 + Impossible d'ouvrir %1 - - File %1 now locked. - Fichier %1 désormais verrouillé. + + Could not start editing locally. + Impossible de démarrer l'édition localement. - - File %1 could not be locked. - Impossible de verrouiller le fichier %1. + + Could not validate the request to open a file from server. + Impossible de valider la requête pour ouvrir un fichier du serveur. - - - 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. + + File %1 already locked. + Fichier %1 déjà verrouillé. - - Please try again. - Merci de réessayer. + + File %1 could not be locked. + Impossible de verrouiller le fichier %1. - - - OCC::EditLocallyVerificationJob - - Invalid token received. - Le jeton reçu est invalide. + + File %1 now locked. + Fichier %1 désormais verrouillé. - - - - Please try again. - Merci de réessayer. + + Invalid file path was provided. + Un chemin d'accès au fichier invalide a été fourni. - - Invalid file path was provided. - Un chemin d'accès au fichier invalide a été fourni. + + Invalid local file path. + Chemin d'accès au fichier local non valide. - - Could not find an account for local editing. - Impossible de trouver un compte pour l'édition locale. + + Invalid token received. + Jeton invalide reçu. - - Could not start editing locally. - Impossible de démarrer l'édition locale. + + 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. - - 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. + + Please try again. + Merci de réessayer. - - + + OCC::EncryptFolderJob - - Could not generate the metadata for encryption, Unlocking the folder. + + 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. + 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::EncryptedFolderMetadataHandler - - - - - - - Error fetching metadata. - Erreur à la récupération des méta-données. + + Error fetching encrypted folder ID. + Erreur dans la récupération de l’ID du dossier chiffré. - - - - Error locking folder. - Erreur de verrouillage du dossier. + + Error fetching metadata. + Erreur à la récupération des méta-données. - - Error fetching encrypted folder ID. - Erreur dans la récupération de l’ID du dossier chiffré. + + 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. + + 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 + + Failed to upload metadata + Échec du téléversement des métadonnées - - + + 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) + + %1 day(s) ago + + + + Il y a 1 jour(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) + + %1 hour(s) ago + + + + Il y a %1 heure(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) + + %1 minute(s) ago + + + + Il y a %1 minute(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) + + %1 month(s) ago + + + + Il y a 1 mois + - - %1 month(s) ago - months elapsed since file last modified - Il y a %1 moisIl y a %1 moisIl y a %1 mois + + %1 second(s) ago + + + + Il y a %1 seconde(s) + - - %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) + + %1 year(s) ago + + + + Il y a 1 année(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) - - - + + Locked by %1 - Expires in %2 minute(s) + + + + Verrouillé par %1 - Expire dans %2 minute(s) + + + + OCC::Flow2Auth - - 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. + + 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> + + Error returned from the server: <em>%1</em> + Erreur renvoyée par le serveur : <em>%1</em> - - - 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 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. - - - 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 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 - 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. - - 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> + - - - 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. + + 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::Flow2AuthCredsPage - - Waiting for authorization - En attente de l'autorisation + + Login in your browser (Login Flow v2) + + + + OCC::Flow2AuthWidget - - Polling for authorization - En attente de l'autorisation + + Copy Link + Copier le lien - - Starting authorization - Démarrage de l'autorisation + + Link copied to clipboard. + Lien copié dans le presse-papier - - Link copied to clipboard. - Lien copié dans le presse-papier + + Open Browser + Ouvrir le navigateur - - Reopen Browser - Rouvrir le navigateur + + Polling for authorization + En attente de l'autorisation @@ -2111,23 +2232,20 @@ Cela peut être un problème avec vos bibliothèques OpenSSL. Copy Link Copier le lien - - - OCC::Folder - - Local folder %1 does not exist. - Le dossier local %1 n'existe pas. + + Starting authorization + Démarrage de l'autorisation - - %1 should be a folder but is not. - %1 devrait être un dossier mais ne l'est pas. + + 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. - - %1 is not readable. - %1 ne peut pas être lu. + + Waiting for authorization + En attente de l'autorisation @@ -2145,153 +2263,257 @@ Cela peut être un problème avec vos bibliothèques OpenSSL. Veuillez choisir un emplacement différent. %1 n'est pas un dossier lisible. - - %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 autres fichiers ont été supprimés. + + %1 and %n other file(s) are currently locked. + + + + + - - - %1 has been removed. - %1 names a file. - %1 a été supprimé. + + + %1 and %n other file(s) could not be synced due to errors. See the log for details. + + + + + - - %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 and %n other file(s) have been added. + + + + + - - - %1 has been added. - %1 names a file. - %1 a été ajouté. + + + %1 and %n other file(s) have been downloaded. + + + + + + + + + %1 and %n other file(s) have been removed. + + + + + - - %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 and %n other file(s) have been updated. + + + + + + + + + %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 updated. - %1 names a file. - %1 a été mis à jour. + + %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 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 has and %n other file(s) have sync conflicts. + + + + + + + + + %1 has been added. + %1 a été ajouté. - - %1 has been renamed to %2. - %1 and %2 name files. - %1 a été renommé en %2. + + %1 has been downloaded. + - - %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 has been moved to %2 and %n other file(s) have been moved. + + + + + + + + + %1 has been moved to %2. + %1 a été déplacé vers %2. - - %1 has been moved to %2. - %1 a été déplacé vers %2. + + %1 has been removed. + %1 a été supprimé. - - %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 has been renamed to %2 and %n other file(s) have been renamed. + + + + + - - %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 renamed to %2. + %1 a été renommé en %2. - - - %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 has been updated. + %1 a été mis à jour. - - %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 is currently locked. + %1 est actuellement verrouillé. - - - %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 is not readable. + %1 ne peut pas être lu. - - %1 is currently locked. - %1 est actuellement verrouillé. + + %1 should be a folder but is not. + %1 devrait être un dossier mais ne l'est pas. - - Sync Activity - Activité de synchronisation + + A folder from an external storage has been added. + Un nouveau dossier localisé sur un stockage externe a été ajouté. - - Could not read system exclude file - Impossible de lire le fichier d'exclusion du système + + A folder has surpassed the set folder size limit of %1MB: %2. +%3 + Un dossier a dépassé la taille limite fixée de %1MB: %2. +%3 - - 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 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 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 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. + + + + A new folder larger than %1 MB has been added: %2. + Un nouveau dossier de taille supérieure à %1 Mo a été ajouté : %2. + + + + All files got deleted from your local sync folder '%1'. +These files will be deleted from the server and will not be available on your other devices if they will not be restored. +If this action was unintended you can restore the lost data now. + + + + All files in the local folder "%1" were deleted. - +If you restore the files, they will be downloaded again from the server. + "Tous les fichiers du dossier local "%1" ont été supprimés. + +Si vous restaurez les fichiers, ils seront à nouveau téléchargés depuis le serveur. " - - 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. + All files in the server folder "%1" were deleted. + +If you restore the files, they will be uploaded again to the server. + "Tous les fichiers du dossier "%1" du serveur ont été supprimés. + +Si vous restaurez les fichiers, ils seront à nouveau téléchargés sur le serveur." - - All files in the sync folder "%1" folder were deleted on the server. + + All files in the sync folder '%1' were deleted on the server. These deletes will be synchronized to your local sync folder, making such files unavailable unless you have a right to restore. If you decide to restore the files, they will be re-synced with the server if you have rights to do so. If you decide to delete the files, they will be unavailable to you, unless you are the owner. - Tous les fichiers du dossier de synchronisation "%1" ont été supprimés sur le serveur. + + + + All files in the sync folder "%1" folder were deleted on the server. +These deletes will be synchronized to your local sync folder, making such files unavailable unless you have a right to restore. +If you decide to restore the files, they will be re-synced with the server if you have rights to do so. +If you decide to delete the files, they will be unavailable to you, unless you are the owner. + Tous les fichiers du dossier de synchronisation "%1" ont été supprimés sur le serveur. Ces suppressions seront synchronisées avec votre dossier local, ce qui rendra les fichiers non disponibles à moins que vous ayez les droits de les restaurer. Si vous décidez de garder ces fichiers, ils seront resynchronisés avec le serveur si vous avez les droits pour le faire. Si vous décidez de supprimer ces fichiers, ils ne vous seront plus accessibles à moins que vous en soyez le propriétaire. - - All the files in your local sync folder "%1" were deleted. These deletes will be synchronized with your server, making such files unavailable unless restored. + All files in the sync folder "%1" folder were deleted on the server. +These deletes will be synchronized to your local sync folder, making such files unavailable unless you have a right to restore. +If you decide to restore the files, they will be re-synced with the server if you have rights to do so. +If you decide to delete the files, they will be unavailable to you, unless you are the owner. + Tous les fichiers du dossier de synchronisation "%1" ont été supprimés sur le serveur. +Ces suppressions seront synchronisées avec votre dossier de synchronisation local, ce qui rendra ces fichiers indisponibles à moins que vous n'ayez le droit de les restaurer. +Si vous décidez de restaurer les fichiers, ils seront resynchronisés avec le serveur si vous en avez le droit. +Si vous décidez de supprimer les fichiers, ils seront indisponibles pour vous, à moins que vous n'en soyez le propriétaire. + + + All the files in your local sync folder "%1" were deleted. These deletes will be synchronized with your server, making such files unavailable unless restored. Are you sure you want to sync those actions with the server? If this was an accident and you decide to keep your files, they will be re-synced from the server. - Tous les fichiers contenus dans le dossier synchronisé "%1" ont été supprimés. Ces suppressions seront synchronisées avec votre serveur, rendant ces fichiers inaccessibles sauf s'ils sont restaurés ultérieurement. + Tous les fichiers contenus dans le dossier synchronisé "%1" ont été supprimés. Ces suppressions seront synchronisées avec votre serveur, rendant ces fichiers inaccessibles sauf s'ils sont restaurés ultérieurement. Êtes-vous sûr de vouloir synchroniser ces actions avec le serveur ? -S'il s'agissait d'un accident et que vous choisissiez de conserver vos fichiers, ils seront synchronisés à nouveau depuis le serveur. +S'il s'agissait d'un accident et que vous choisissiez de conserver vos fichiers, ils seront synchronisés à nouveau depuis le serveur. - - Remove All Files? - Retirer tous les fichiers ? + + Backup detected + - - Remove all files - Retirer tous les fichiers + + 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). + +%1 + Les modifications apportées aux dossiers synchronisés ne peuvent pas être suivies de manière fiable. + +Cela signifie que le client de synchronisation ne va pas téléverser immédiatement les modifications locales, mais va à la place rechercher et téléverser les modifications locales qu'occasionnellement (toutes les deux heures par défaut). + +%1 - - Keep files - Conserver les fichiers + + Could not read system exclude file + Impossible de lire le fichier d'exclusion du système @@ -2321,27 +2543,19 @@ S'il s'agissait d'un accident et que vous choisissiez de conserve 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. + + Local folder %1 does not exist. + Le dossier local %1 n'existe pas. - - 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é. + + Normal Synchronisation + - - 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). - -%1 - Les modifications apportées aux dossiers synchronisés ne peuvent pas être suivies de manière fiable. - -Cela signifie que le client de synchronisation ne va pas téléverser immédiatement les modifications locales, mais va à la place rechercher et téléverser les modifications locales qu'occasionnellement (toutes les deux heures par défaut). - -%1 + + 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. @@ -2386,71 +2600,70 @@ Vous pouvez également restaurer tous les fichiers supprimés en les télécharg Restore Files from Server Restaurer des fichiers à partir du serveur - - - OCC::FolderCreationDialog - - Create new folder - Créer un nouveau dossier + + Restore Files from Server + Restaurer des fichiers à partir du serveur - - Enter folder name - Saisissez le nom du dossier + + Restore Files to Server + Restaurer les fichiers sur le serveur - - Folder already exists - Le dossier existe déjà + + Stop syncing + Arrêter la synchronisation - - Error - Erreur + + Sync Activity + Activité de synchronisation - - Could not create a folder! Check your write permissions. - Impossible de créer le dossier ! Veuillez vérifier vos permissions d’écriture. + + 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é. - - - OCC::FolderMan - - Could not reset folder state - Impossible de réinitialiser l'état du dossier + + The folder %1 has surpassed the set folder size limit of %2MB. + Le dossier %1 a dépassé la taille limite fixée de %2MB. - - 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. + + 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. - - (backup) - (sauvegarde) + + This sync would reset the files to an earlier time in the sync folder '%1'. +This might be because a backup was restored on the server. +Continuing the sync as normal will cause all your files to be overwritten by an older file in an earlier state. Do you want to keep your local most recent files as conflict files? + - - (backup %1) - (sauvegarde %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 » - - Undefined state. - Statut indéfini. + + Would you like to stop syncing this folder? + Voulez vous arrêter la synchronisation de ce dossier ? + + + OCC::FolderCreationDialog - - Waiting to start syncing. - En attente de synchronisation. + + %1 Create new folder + %1 Créer un nouveau dossier - - Preparing for sync. - Préparation de la synchronisation. + + Could not create a folder! Check your write permissions. + Impossible de créer le dossier ! Veuillez vérifier vos permissions d’écriture. @@ -2462,6 +2675,9 @@ Vous pouvez également restaurer tous les fichiers supprimés en les télécharg Syncing %1 of %2 (%3 left) Synchronisation de %1 sur %2 (%3 restant⸱s) + + + OCC::FolderMan Syncing %1 of %2 @@ -2483,44 +2699,44 @@ Vous pouvez également restaurer tous les fichiers supprimés en les télécharg Synchronisation de %1 - - Sync is running. - Synchronisation en cours + + 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. - - Sync finished with unresolved conflicts. - Synchronisation terminée avec des conflits non résolus. + + Could not reset folder state + Impossible de réinitialiser l'état du dossier - - Last sync was successful. - Synchronisation terminée avec succès + + Last sync was successful. + Synchronisation terminée avec succès - - Setup error. - Erreur de paramétrage. + + No valid folder selected! + Aucun dossier valable sélectionné ! - - Sync request was cancelled. - La requête de synchronisation a été annulée. + + Preparing for sync. + Préparation de la synchronisation. - - Sync is paused. - La synchronisation est en pause. + + Setup error. + Erreur de paramétrage. - - %1 (Sync is paused) - %1 (Synchronisation en pause) + + Sync finished with unresolved conflicts. + Synchronisation terminée avec des conflits non résolus. - - No valid folder selected! - Aucun dossier valable sélectionné ! + + Sync is paused. + La synchronisation est en pause. @@ -2528,9 +2744,9 @@ Vous pouvez également restaurer tous les fichiers supprimés en les télécharg Le chemin sélectionné n'existe pas ! - - The selected path is not a folder! - Le chemin sélectionné n'est pas un dossier ! + + Sync was successful, unresolved conflicts. + @@ -2602,102 +2818,100 @@ Cette configuration peut provoquer une perte de données et n'est plus supp Pour résoudre ce problème: veuillez enlever %1 d'un des comptes et créer un nouveau dossier de synchronisation. 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. - - - OCC::FolderStatusDelegate - - Add Folder Sync Connection - Ajouter une synchronisation de dossier + + The folder %1 is used in a folder sync connection! + - - File - Fichier + + The local folder %1 already contains a folder used in a folder sync connection. Please pick another one! + Le dossier local %1 contient un dossier déjà utilisé pour une synchronisation de dossiers. Veuillez en choisir un autre ! - - - OCC::FolderStatusModel - - You need to be connected to add a folder - Vous devez être connecté pour ajouter un dossier + + The local folder %1 is already contained in a folder used in a folder sync connection. Please pick another one! + Le dossier local %1 se trouve dans un dossier déjà configuré pour une synchronisation de dossier. Veuillez en choisir un autre ! - - Click this button to add a folder to synchronize. - Cliquez sur ce bouton pour ajouter un dossier à synchroniser. + + The selected path does not exist! + Le chemin sélectionné n'existe pas ! - - Could not decrypt! - Déchiffrage impossible ! + + The selected path is not a folder! + Le chemin sélectionné n'est pas un dossier ! - - - %1 (%2) - %1 (%2) + + There is already a sync from the server to this local folder. Please pick another local folder! + Il y a déjà une synchronisation depuis le serveur vers ce dossier local. Merci de choisir un autre dossier local ! - - 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. + + Undefined state. + Statut indéfini. - - Fetching folder list from server … - Récupération de la liste des dossiers depuis le serveur... + + User Abort. + - - There are unresolved conflicts. Click for details. - Il y a des conflits non résolus. Cliquez pour plus de détails. + + Waiting to start syncing. + En attente de synchronisation. - - Virtual file support is enabled. - Support des fichiers virtuels activé. + + You have no permission to write to the selected folder! + Vous n'avez pas la permission d'écrire dans le dossier sélectionné ! + + + OCC::FolderStatusDelegate - - Signed out - Session fermée + Add Folder Sync Connection + Ajouter une synchronisation de dossier - - Synchronizing VirtualFiles with local folder - Synchronisation des fichiers virtuels avec le dossier local + + Add live backup + Ajouter une sauvegarde en temps réel - - Synchronizing with local folder - Synchronisation avec le dossier local + + File + Fichier - - Synchronizing virtual files in local folder - Synchronisation des fichiers virtuels dans le dossier local + + Synchronize any other local folder with your %1 + Synchronisez n’importe quel autre dossier local avec votre %1 - - Synchronizing files in local folder - Synchronisation des fichiers dans le dossier local + + Synchronized with local folder (%1) + + + + OCC::FolderStatusModel - - 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 + + , '%1' + - - Reconciling changes - Rapprochement des modifications + + '%1' + @@ -2711,16 +2925,14 @@ Pour les utilisateurs avancés: ce problème peut aussi venir de plusieurs fichi %1 %2 … - - Syncing %1 - Example text: "Syncing 'foo.txt', 'bar.txt'" - Synchronisation de %1 + + %1 %2 … + %1 %2 … - - - , - , + + %1 %2 (%3 of %4) + %1 %2 (%3 sur %4) @@ -2729,15 +2941,14 @@ Pour les utilisateurs avancés: ce problème peut aussi venir de plusieurs fichi Télécharger %1/s - - download %1/s - Example text: "download 24Kb/s" (%1 is replaced by 24Kb (translated)) - réception %1/s + + %5 left, %1 of %2, file %3 of %4 + %5 restantes, %1 sur %2, fichier %3 sur %4 - - ↓ %1/s - ↓ %1/s + + ↑ %1/s + ↑ %1/s @@ -2746,49 +2957,44 @@ Pour les utilisateurs avancés: ce problème peut aussi venir de plusieurs fichi Téléverser %1/s - - upload %1/s - Example text: "upload 24Kb/s" (%1 is replaced by 24Kb (translated)) - téléversement %1/s + + A few seconds left, %1 of %2, file %3 of %4 + Quelques secondes restantes, %1 de %2, fichier %3 parmi %4 - - ↑ %1/s - ↑ %1/s + + About to start syncing + Sur le point de démarrer la synchronisation - - %1 %2 (%3 of %4) - Example text: "uploading foobar.png (2MB of 2MB)" - %1 %2 (%3 sur %4) + + Checking for changes in local '%1' + - - %1 %2 - Example text: "uploading foobar.png" - %1 %2 + + Checking for changes in local "%1" + Vérification des modifications dans "%1" 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' + - - %5 left, %1 of %2, file %3 of %4 - %5 restantes, %1 sur %2, fichier %3 sur %4 + + Checking for changes in remote "%1" + Vérification des modifications dans "%1" distant - - %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 + + Click this button to add a folder to synchronize. + Cliquez ce bouton pour ajouter un dossier à synchroniser. - - file %1 of %2 - fichier %1 sur %2 + + Could not decrypt! + Déchiffrage impossible ! @@ -2800,106 +3006,103 @@ 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 - - - Waiting for %n other folder(s) … - En attente de %n autre dossier ...En attente de %n autres dossiers ...En attente de %n autres dossiers ... + + + 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. - - Waiting … - En attente ... + + Fetching folder list from server … + Récupération de la liste des dossiers depuis le serveur... - - Preparing to sync … - Préparation de la synchronisation ... + + file %1 of %2 + fichier %1 sur %2 - - - OCC::FolderWatcher - - The watcher did not receive a test notification. - L'observateur n'a pas reçu de notification de test. + + File %1 of %2 + Fichier %1 sur %2 - - - 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. + + Preparing to sync … + Préparation de la synchronisation ... - - - OCC::FolderWizard - - Add Folder Sync Connection - Ajouter une connexion de synchronisation de dossiers + + Reconciling changes + Rapprochement des modifications - - Add Sync Connection - Ajouter la synchronisation + + Synchronizing files in local folder + Synchronisation des fichiers dans le dossier local - - - OCC::FolderWizardLocalPath - - Click to select a local folder to sync. - Cliquez pour choisir un dossier local à synchroniser. + + Synchronizing virtual files in local folder + Synchronisation des fichiers virtuels dans le dossier local - - Enter the path to the local folder. - Entrez le chemin du dossier local. + + Synchronizing VirtualFiles with local folder + Synchronisation des fichiers virtuels avec le dossier local - - Select the source folder - Sélectionnez le dossier source + + Synchronizing with local folder + Synchronisation avec le dossier local - - - OCC::FolderWizardRemotePath - - Create Remote Folder - Créer un dossier distant + + Syncing local and remote changes + Synchronisation des changements locaux et distants - - Enter the name of the new folder to be created below "%1": - Entrez le nom du nouveau dossier à créer dans "%1" : + + There are unresolved conflicts. Click for details. + Il y a des conflits non résolus. Cliquez pour plus de détails. - - Folder was successfully created on %1. - Le dossier a été créé sur %1 + + upload %1/s + Envoi %1/s - - Authentication failed accessing %1 - Erreur d'authentification lors de l'accès à %1 + + Upload %1/s + Téléverser %1/s - - Failed to create the folder on %1. Please check manually. - Échec à la création du dossier sur %1. Veuillez vérifier manuellement. + + Virtual file support is enabled. + Support des fichiers virtuels activé. - - Failed to list a folder. Error: %1 - Impossible de lister un dossier. Erreur : %1 + + Waiting … + En attente ... + + + + Waiting for %n other folder(s) … + + + + + - - Choose this to sync the entire account - Sélectionnez ceci pour synchroniser l'ensemble du compte + + You need to be connected to add a folder + Vous devez être connecté pour ajouter un dossier + + + OCC::FolderWatcher @@ -2912,40 +3115,44 @@ Pour les utilisateurs avancés: ce problème peut aussi venir de plusieurs fichi This folder is already being synced. Ce dossier est déjà en cours de synchronisation. + + + OCC::FolderWatcherPrivate - - You are already syncing <i>%1</i>, which is a parent folder of <i>%2</i>. - Vous synchronisez déjà <i>%1</i> qui est un dossier parent de <i>%2</i>. + + 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. + + + OCC::FolderWizard - - You are already syncing <i>%1</i>, which is a subfolder of <i>%2</i>. - Vous synchronisez déjà <i>%1</i> qui est un sous-dossier de <i>%2</i>. + + Add Sync Connection + Ajouter la synchronisation - - - OCC::FolderWizardSelectiveSync + + + OCC::FolderWizardLocalPath - - - Use virtual files instead of downloading content immediately %1 - Utiliser les fichiers virtuels au lieu de télécharger le contenu immédiatement %1 + + Choose + Choisissez - - - (experimental) - (expérimental) + + Click to select a local folder to sync. + Cliquez pour choisir un dossier local à synchroniser. - - 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. + + Enter the path to the local folder. + Entrez le chemin du dossier local. - - Virtual files are not available for the selected folder - Les fichiers virtuels ne sont pas disponibles pour le dossier sélectionné + + Select the source folder + Sélectionnez le dossier source @@ -2956,210 +3163,218 @@ 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 + + Create Remote Folder + Créer un dossier distant - - 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. + + Enter the name of the new folder to be created below '%1': + - - We received an unexpected download Content-Length. - Nous avons reçu un téléchargement de Contenu-Longeur inattendu + + Enter the name of the new folder to be created below "%1": + Entrez le nom du nouveau dossier à créer dans "%1" : - - Server returned wrong content-range - Le serveur a retourné une gamme de contenu erronée + + Failed to create the folder on %1. Please check manually. + Échec à la création du dossier sur %1. Veuillez vérifier manuellement. - - Connection Timeout - Délai d'attente de connexion dépassé + + Failed to list a folder. Error: %1 + Impossible de lister un dossier. Erreur : %1 - - - OCC::GeneralSettings - - General Settings - Paramètres généraux + + Folder was successfully created on %1. + Le dossier a été créé sur %1 - - - About - À propos + + This folder is already being synced. + Ce dossier est déjà en cours de synchronisation. - - &Launch on System Startup - &Lancer au démarrage du système + + You are already syncing <i>%1</i>, which is a parent folder of <i>%2</i>. + Vous synchronisez déjà <i>%1</i> qui est un dossier parent de <i>%2</i>. - - Show Call Notifications - Afficher les notifications d'appel + + You are already syncing <i>%1</i>, which is a subfolder of <i>%2</i>. + Vous synchronisez déjà <i>%1</i> qui est un sous-dossier de <i>%2</i>. + + + OCC::FolderWizardSelectiveSync - - For System Tray - Pour la zone de notification système + + Use virtual files instead of downloading content immediately %1 + Utiliser les fichiers virtuels - - Legal notice - Notice légale + + Virtual files are not available for the selected folder + Les fichiers virtuels ne sont pas disponibles pour le dossier sélectionné - - Use &Monochrome Icons - Utiliser les icônes &monochromes + + 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::FormatWarningsWizardPage - - Show Chat Notifications - Afficher les notifications de discussion + <b>Warning:</b> + <b>Avertissement :</b> - - Show Server &Notifications - Afficher les &notifications serveur + <b>Warning:</b> %1 + <b>Avertissement :</b> %1 + + + OCC::GETFileJob - - Advanced - Avancés + + Connection Timeout + Délai d'attente de connexion dépassé - - Ask for confirmation before synchronizing new folders larger than - Demander confirmation avant de synchroniser les dossiers plus grands que + + No E-Tag received from server, check Proxy/Gateway + Aucun E-Tag reçu du serveur, vérifiez le proxy / la passerelle - - Updates - Mises à jour + + Server returned wrong content-range + Le serveur a retourné une gamme de contenu erronée - - &Automatically check for Updates - &Vérifier automatiquement les mises à jour + + 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. - - MB - Trailing part of "Ask confirmation before syncing folder larger than" - Mo + + We received an unexpected download Content-Length. + Nous avons reçu un téléchargement de Contenu-Longeur inattendu + + + OCC::GeneralSettings - - &Channel - Canal + + - 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. + - 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. - - Notify when synchronised folders grow larger than specified limit - Notifier lorsque les dossiers synchronisés dépassent la limite spécifiée + + - enterprise: contains stable versions for customers. + +Downgrading versions is not possible immediately: changing from stable to enterprise means waiting for the new enterprise version. + - 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. - - Automatically disable synchronisation of folders that overcome limit - Désactiver automatiquement la synchronisation des dossiers qui dépassent la limite fixée + + &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 - Demander confirmation avant de synchroniser des stockages externes + &Automatically check for Updates + &Vérifier automatiquement la présence de nouvelles mises à jour - - Move removed files to trash - Déplacer les fichiers supprimés vers la corbeille + + &Automatically check for updates + &Vérifier automatiquement les nouvelles mises à jour - - &Check for Update now - &Vérifier la présence de mises à jour maintenant + &Channel + &Canal - - Show sync folders in &Explorer's navigation pane - Afficher les dossiers synchronisés dans le panneau de navigation de l'&Explorateur de fichiers + &Check for Update now + &Vérifier la présence de mises à jour maintenant - - S&how crash reporter - Affic&her le rapport d'incident + &Launch on System Startup + &Lancer au démarrage du système - - Ask for confirmation before synchronizing folders larger than - Demander confirmation avant de synchroniser les dossiers de taille supérieure à + + &Restart && Update + Redémarrer et Mettre à jour - - Edit &Ignored Files - Modifier les fichiers exclus + About + À propos - - - Create Debug Archive - Créer une archive de débogage + + Ask for confirmation before + synchronizing new folders larger than + Demander une confirmation avant de synchroniser de nouveaux dossiers plus volumineux que - - Info - Informations + + Ask for confirmation before synchronizing + external storages + Demander une confirmation avant de synchroniser des fichiers externes - - Desktop client x.x.x - Client de bureau x.x.x + Ask for confirmation before synchronizing external storages + Confirmation avant de synchroniser des stockages externes - - Show sync folders in &Explorer's Navigation Pane - Afficher les dossiers synchronisés dans le panneau de navigation de l'&Explorateur de fichiers + Ask for confirmation before synchronizing folders larger than + Demander confirmation avant de synchroniser les dossiers de taille supérieure à - - Update channel - Canal de mise à jour + Ask for confirmation before synchronizing new folders larger than + Demander la confirmation avant de synchroniser les dossiers plus grands que - - &Restart && Update - Redémarrer et Mettre à jour + + Automatically disable synchronisation of + folders that overcome limit + Désactiver automatiquement la synchronisation des dossiers qui dépassent la limite fixée - - &Automatically check for updates - &Vérifier automatiquement les mises à jour + Automatically disable synchronisation of folders that overcome limit + Désactiver automatiquement la synchronisation des dossiers qui dépassent la limite - - Check Now - Vérifier maintenant + + beta + bêta - - Usage Documentation - Documentation d'utilisation + + Change update channel + Changer de canal de mise à jour - - Legal Notice - Mentions légales + + Change update channel? + Changer de canal de mise à jour ? - - Server notifications that require attention. - Notifications du serveur requérant votre attention. + + Changing update channel? + Changement du canal de mise à jour ? @@ -3167,40 +3382,34 @@ Pour les utilisateurs avancés: ce problème peut aussi venir de plusieurs fichi Afficher les boîtes de dialogue de notification de chat. - - Show call notification dialogs. - Montre les fenêtres de notification d'appel. + + Create Debug Archive + Créer l’archive de débogage - - 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é. + + daily + quotidien - - - stable - stable + + Data Protection + Protection des données - - - beta - bêta + + Debug Archive Created + Archive de déboggage créée - - Change update channel? - Changer de canal de mise à jour ? + + Debug archive is created at %1 + Archive de déboggage créée à %1 - - The update channel determines which client updates will be offered for installation. The "stable" channel contains only upgrades that are considered reliable, while the versions in the "beta" channel may contain newer features and bugfixes, but have not yet been tested thoroughly. - -Note that this selects only what pool upgrades are taken from, and that there are no downgrades: So going back from the beta channel to the stable channel usually cannot be done immediately and means waiting for a stable version that is newer than the currently installed beta version. - Le canal de mise à jour détermine quelles mises à jour du client seront proposées pour l'installation. Le canal "stable" ne contient que les mises à jour considérées comme fiables, tandis que les versions du canal "bêta" peuvent contenir des fonctionnalités plus récentes et des corrections de bogues, mais n'ont pas encore été testées de manière approfondie. - -Notez que cela ne permet seulement que de sélectionner où sont récupérées les mises à jour et qu'il n'y a pas de possibilité de rétrograder : ainsi, le retour du canal "bêta" au canal "stable" ne peut généralement pas être fait immédiatement, et implique d'attendre une version stable plus récente que la version bêta actuellement installée. + + Desktop client x.x.x + Client de bureau x.x.x @@ -3250,300 +3459,295 @@ La rétrogradation des versions n'est pas possible immédiatement: passer d - - Change update channel - Changer de canal de mise à jour + + Legal Notice + Mentions légales - - Cancel - Annuler + MB + Mo - - Zip Archives - Archives Zip + + More Information + Plus d’informations - - Debug Archive Created - Archive de débogage créée + + Move removed files to trash + Déplacer les fichiers supprimés vers la corbeille - - Debug archive is created at %1 - Archive de débogage créée à %1 + + Notify when synchronised folders grow + larger than specified limit + Notifier lorsque les dossiers synchronisés dépassent la limite spécifiée. - - - OCC::GetOrCreatePublicLinkShare - - Password for share required - Mot de passe requis + Notify when synchronised folders grow larger than specified limit + Notifier quand des dossiers synchronisés deviennent plus grand que la limite spécifiée - - Please enter a password for your link share: - Veuillez saisir un mot de passe pour votre lien partagé : + + Open Source Software + Logiciel libre - - Sharing error - Erreur de partage + + Privacy Policy + Politique de confidentialité - - Could not retrieve or create the public link share. Error: - -%1 - Impossible de récupérer ou de créer le lien public pour le partage. - -%1 + + S&how crash reporter + Affic&her le rapport d'incident - - - 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> + + Server notifications that require attention. + Les notifications du serveur requérant votre attention. - - Reading from keychain failed with error: "%1" - La lecture à partir du trousseau a échoué avec l'erreur : "%1" + + Show call notification dialogs. + Montre les fenêtres de notification d'appel. - - Enter Password - Saisissez le mot de passe + Show Call Notifications + Afficher les notifications des appels - - <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. + + Show chat notification dialogs. + Afficher les boîtes de dialogue de notification de chat. - - - OCC::IgnoreListEditor - - Ignored Files Editor - Éditeur d'exclusion de fichiers + + Show Chat Notifications + Afficher les notifications de discussion - - Global Ignore Settings - Paramètres globaux d'exclusion + Show Server &Notifications + Afficher les &notifications serveur - - Sync hidden files - Synchroniser les fichiers cachés + + Show sync folders in &Explorer's navigation + pane + Afficher les dossiers de synchronisation dans le volet de navigation de &Explorer - - Files Ignored by Patterns - Fichiers ignorés par modèles + Show sync folders in &Explorer's navigation pane + Afficher les dossiers synchronisés dans le panneau de navigation de l'&Explorateur de fichiers - - 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. + Show sync folders in &Explorer's Navigation Pane + Afficher les dossiers synchronisés dans le panneau de navigation de l'&Explorateur de fichiers - - - OCC::IgnoreListTableWidget - - Pattern - Modèle + + stable + stable - - Allow Deletion - Autoriser la suppression + + The channel determines which upgrades will be offered to install: +- stable: contains tested versions considered reliable + Le canal détermine quelles mises à niveau seront proposées à l'installation: + - stable: contient des versions testées et considérées comme fiables - - Add - Ajouter + + The update channel determines which client updates will be offered for installation. The "stable" channel contains only upgrades that are considered reliable, while the versions in the "beta" channel may contain newer features and bugfixes, but have not yet been tested thoroughly. + +Note that this selects only what pool upgrades are taken from, and that there are no downgrades: So going back from the beta channel to the stable channel usually cannot be done immediately and means waiting for a stable version that is newer than the currently installed beta version. + Le canal de mise à jour détermine quelles mises à jour du client seront proposées pour l'installation. Le canal "stable" ne contient que les mises à jour considérées comme fiables, tandis que les versions du canal "bêta" peuvent contenir des fonctionnalités plus récentes et des corrections de bogues, mais n'ont pas encore été testées de manière approfondie. + +Notez que cela ne permet seulement que de sélectionner où sont récupérées les mises à jour et qu'il n'y a pas de possibilité de rétrograder : ainsi, le retour du canal "bêta" au canal "stable" ne peut généralement pas être fait immédiatement, et implique d'attendre une version stable plus récente que la version bêta actuellement installée. - - Remove - Retirer + + Update channel + Canal de mise à jour - - Remove all - Tout retirer + + Updates + Mises à jour - - 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. + + Usage Documentation + Documentation d'utilisation - - Could not open file - Impossible d'ouvrir le fichier + Use &Monochrome Icons + Utiliser les icônes &monochromes - - Cannot write changes to "%1". - Impossible d'écrire les modifications sur "%1". + + 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é. - - Add Ignore Pattern - Ajouter un modèle d'exclusion + + Zip Archives + Archives Zip + + + OCC::GetOrCreatePublicLinkShare - - Add a new ignore pattern: - Ajouter un nouveau modèle d'exclusion : + + Could not retrieve or create the public link share. Error: + +%1 + Impossible de récupérer ou de créer le lien public pour le partage. + +%1 - - - OCC::InvalidFilenameDialog - - Invalid filename - Nom de fichier invalide + + Password for share required + Mot de passe requis - - 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. + + Please enter a password for your link share: + Veuillez saisir un mot de passe pour votre lien partagé : - - Error - Erreur + + Sharing error + Erreur de partage + + + OCC::HttpCredentialsGui - - Please enter a new name for the file: - Veuillez saisir le nouveau nom du fichier : + + <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. - - New filename - Nouveau nom de fichier + + Enter Password + Saisissez le mot de passe - - Rename file - Renommer le fichier + + Please enter %1 password:<br><br>User: %2<br>Account: %3<br> + - - 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. + + 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> - - The following characters are not allowed on the system: * " | & ? , ; : \ / ~ < > leading/trailing spaces - Les caractères suivants ne sont pas autorisés dans les noms de fichier sur ce système : * " | & ? , ; : \ / ~ < > espaces en début et fin de chaîne + + Reading from keychain failed with error: '%1' + - - 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. + + Reading from keychain failed with error: "%1" + La lecture à partir du trousseau a échoué avec l'erreur : "%1" + + + OCC::IgnoreListEditor - - The following characters are not allowed: %1 - Les caractères suivants ne sont pas autorisés : %1 + + Files Ignored by Patterns + Fichiers exclus sur motif de nom - - The following basenames are not allowed: %1 - Les noms de base suivants de fichiers ne sont pas autorisés : %1 + + Global Ignore Settings + Paramètres globaux d'exclusion - - The following filenames are not allowed: %1 - Les noms de fichiers suivants ne sont pas autorisés : %1 + + Ignored Files Editor + Éditeur d'exclusion de fichiers - - The following file extensions are not allowed: %1 - Les extensions de fichiers suivantes ne sont pas autorisées : %1 + + Sync hidden files + Synchroniser les fichiers masqués - - Checking rename permissions … - Vérification des permissions de renommage... + + This entry is provided by the system at '%1' and cannot be modified in this view. + - - 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. + + 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 - - Failed to fetch permissions with error %1 - Erreur à la récupération des permissions : %1 + + Add + Ajouter - - Filename contains leading and trailing spaces. - Le nom de fichier contient des espaces en début ou en fin de chaîne. + Add a new ignore pattern: + Ajouter un nouveau motif d'exclusion : - - Filename contains leading spaces. - Le nom du fichier contient des espaces au début. + Add Ignore Pattern + Ajouter un motif d'exclusion - - Filename contains trailing spaces. - Le nom de fichier contient des espaces à la fin. + + Add New Ignore Pattern + Ajouter nouveau Ignorer le modèle - - Use invalid name - Nom invalide + + Allow Deletion + Autoriser la suppression - - Filename contains illegal characters: %1 - Le nom du fichier contiens des caractères illégaux: %1 + + Cannot write changes to '%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 write changes to "%1". + Impossible d'écrire les modifications sur "%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. + + Could not open file + Impossible d'ouvrir le fichier - - Could not rename local file. %1 - Impossible de renommer le dossier local %1 + 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 motif ne seront pas synchronisés. +Les éléments ayant l'option « Autoriser la suppression » pourront être supprimés pour ne pas bloquer la suppression d'un dossier. Utile pour les méta-données. - - - OCC::LegalNotice - - - Legal notice - Notice légale + + Files or folders that match this pattern will not be synchronized. + +Objects that are allowed to be deleted will be deleted if they would prevent a folder from being deleted. This is useful for metadata. + 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. - - Close - Fermer + + Ignore Pattern + Ignorer le modèle @@ -3556,381 +3760,372 @@ Les éléments dont la suppression est autorisée seront supprimés s'ils e <p>Copyright 2017-2023 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> + + Remove + Supprimer - - - OCC::LogBrowser - - Log Output - Consigner la sortie dans des fichiers de log + + Remove all + Supprimer tout + + + OCC::InvalidFilenameDialog - - 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 - Le client peut écrire des fichiers de log pour le déboguage dans un dossier temporaire. Ces logs sont très utiles pour diagnostiquer les problèmes. -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 + + 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. - - Enable logging to temporary folder - Activer la journalisation dans le dossier temporaire + + Checking rename permissions … + Vérification des permissions de renommage... - - 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. + + Could not rename local file. %1 + Impossible de renommer le dossier local %1 - - Open folder - Ouvrir le dossier + + Invalid filename + Nom de fichier invalide - - - OCC::Logger - - Error - Erreur + + Please enter a new name for the file: + Veuillez saisir le nouveau nom du fichier : - - <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> + + 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. - - - OCC::Mac::FileProviderEditLocallyJob - - Could not start editing locally. - Impossible de démarrer l'édition locale. + + 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. - - An error occurred during setup. - Une erreur est survenue pendant l'installation + + 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. - - Could not find a file for local editing.Make sure its path is valid and it is synced locally. - Impossible de trouver un fichier pour l'édition locale. Vérifier que son chemin d'accès est valide et qu'il est synchronisé localement. + + The following basenames are not allowed: %1 + Les noms de base suivants de fichiers ne sont pas autorisés : %1 - - Could not get file ID. - Impossible d'obtenir l'identifiant du fichier. + + The following characters are not allowed on the system: * " | & ? , ; : \ / ~ < > leading/trailing spaces + Les caractères suivants ne sont pas autorisés dans les noms de fichier sur ce système : * " | & ? , ; : \ / ~ < > espaces en début et fin de chaîne - - Could not get file identifier. - Impossible d'obtenir l'identifiant du fichier. + + The following characters are not allowed: %1 + Les caractères suivants ne sont pas autorisés : %1 - - The file identifier is empty. - L'identifiant du fichier est vide. + + The following file extensions are not allowed: %1 + Les extensions de fichiers suivantes ne sont pas autorisées : %1 - - - OCC::NSISUpdater - - New Version Available - Nouvelle version disponible + + The following filenames are not allowed: %1 + Les noms de fichiers suivants ne sont pas autorisés : %1 + + + OCC::LegalNotice - - <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> + + <p>Copyright 2017-2020 Nextcloud GmbH<br />Copyright 2012-2018 ownCloud GmbH</p> + - - Skip this time - Ignorer pour cette fois + + <p>Copyright 2017-2023 Nextcloud GmbH<br />Copyright 2012-2023 ownCloud GmbH</p> + <p>Copyright 2017-2023 Nextcloud GmbH<br />Copyright 2012-2023 ownCloud GmbH</p> - - Get update - Télécharger la version + + <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> - - Update Failed - Échec de mise à jour + + Close + Fermer + + + OCC::LogBrowser - - <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> + + &Capture debug messages + - - Ask again later - Demander plus tard + + &Find + - - Restart and update - Redémarrer et mettre à jour + + &Search: + - - Update manually - Mettre à jour manuellement + + Clear + - - - OCC::NetworkSettings - - Proxy Settings - Paramètres de serveur proxy + + Clear the log display. + - - No Proxy - Aucun serveur proxy + + Could not write to log file %1 + - - Use system proxy - Utiliser les paramètres du système + + Enable logging to temporary folder + Activer la journalisation dans le dossier temporaire - - Specify proxy manually as - Indiquer un proxy manuellement + + Log Output + Consigner la sortie dans des fichiers de log - - Host - Hôte + + Permanently save logs + - - Proxy server requires authentication - Le serveur proxy requiert une authentification + + S&ave + - - 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 + + Save log file + - - Manually specify proxy - Spécifier manuellement le serveur proxy + + Save the log file to a file on disk for debugging. + - - No proxy - Aucun serveur proxy + + 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 + Le client peut écrire des fichiers de log pour le déboguage dans un dossier temporaire. Ces logs sont très utiles pour diagnostiquer les problèmes. +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 - - - - Use global settings - Utiliser les paramètres globaux + + 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. - - Download Bandwidth - Bande passante de réception + + When this option is enabled and no other logging is configured, logs will be written to a temporary folder and expire after a few hours. This setting persists across client restarts. + +Logs will be written to %1 + + + + OCC::Logger - - - No limit - Aucune limite + + <nobr>File '%1'<br/>cannot be opened for writing.<br/><br/>The log output can <b>not</b> be saved!</nobr> + - - - KBytes/s - Ko/s + + <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> + + + OCC::Mac::FileProviderEditLocallyJob - - - Limit to - Limiter à + + Could not find a file for local editing.Make sure its path is valid and it is synced locally. + Impossible de trouver un fichier pour l'édition locale. Vérifier que son chemin d'accès est valide et qu'il est synchronisé localement. - - - Limit to 3/4 of estimated bandwidth - Limiter aux 3/4 de la bande passante estimée + + Could not get file ID. + Impossible d'obtenir l'identifiant du fichier. - - - Limit automatically - Limiter automatiquement + + Could not get file identifier. + Impossible d'obtenir l'identifiant du fichier. - - Upload Bandwidth - Bande passante d'émission + + The file identifier is empty. + L'identifiant du fichier est vide. + + + OCC::NSISUpdater - - Hostname of proxy server - Nom d'hôte du serveur proxy + + <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> - - Username for proxy server - Nom d’utilisateur pour le serveur proxy + + <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> - - Password for proxy server - Mot de passe pour le serveur proxy + + Ask again later + Demander plus tard - - HTTP(S) proxy - Proxy HTTP(S) + + Get update + Télécharger la version - - SOCKS5 proxy - Proxy SOCKS5 + + New Version Available + Nouvelle version disponible - - - OCC::OCUpdater - - New %1 update ready - Une nouvelle mise à jour de %1 est disponible + + Restart and update + Redémarrer et mettre à 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. + + Skip this time + Ignorer pour cette fois - - Downloading %1 … - Téléchargement de %1 … + + Skip this version + - - Downloading %1. Please wait … - Réception en cours de %1. Veuillez patienter... + + Update Failed + Échec de mise à jour - - %1 available. Restart application to start the update. - %1 disponible. Redémarrez l'application pour effectuer la mise à jour. + + Update manually + Mettre à jour manuellement + + + OCC::NetworkSettings - - 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. + + Download Bandwidth + Bande passante de réception - - Could not check for new updates. - Impossible de vérifier la présence de nouvelles mises à jour. + + Host + Hôte - - 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. + + Hostname of proxy server + Nom d'hôte du serveur proxy - - 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. + + HTTP(S) proxy + Proxy HTTP(S) - - Checking update server … - Vérification du serveur de mises à jour ... + + KBytes/s + Ko/s - - 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. + + Limit automatically + Limiter automatiquement - - No updates available. Your installation is at the latest version. - Aucune mise à jour disponible. Votre installation est à jour. + + Limit to + Limiter à - - Update Check - Recherche de mise à jour + + Limit to 3/4 of estimated bandwidth + Limiter aux 3/4 de la bande passante estimée - - - OCC::OwncloudAdvancedSetupPage - - Connect - Connexion + + Manually specify proxy + Spécifier manuellement le serveur proxy - - - 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 + + No limit + Aucune limite - - - (experimental) - (expérimental) + No Proxy + Aucun serveur proxy - - 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. + + No proxy + Aucun serveur proxy - - %1 folder "%2" is synced to local folder "%3" - Le dossier %1 "%2" est synchronisé avec le dossier local "%3". + + 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 - - Sync the folder "%1" - Synchroniser le dossier "%1" + + Password for proxy server + Mot de passe pour le serveur proxy - - Warning: The local folder is not empty. Pick a resolution! - Avertissement : Le dossier local n'est pas vide. Choisissez une option. + + Proxy server requires authentication + Le serveur proxy requiert une authentification - - %1 free space - %1 gets replaced with the size and a matching unit. Example: 3 MB or 5 GB - espace libre %1 + + Proxy Settings + Paramètres de serveur proxy - - Virtual files are not available for the selected folder - Les fichiers virtuels ne sont pas disponibles pour le dossier sélectionné + + SOCKS5 proxy + Proxy SOCKS5 @@ -3943,354 +4138,334 @@ Notez que l'utilisation de toute option de ligne de commande de journalisat Dossier de synchronisation local - - - (%1) - (%1) + + Upload Bandwidth + Bande passante d'émission - - There isn't enough free space in the local folder! - L'espace libre dans le dossier local est insuffisant ! + + Use global settings + Utiliser les paramètres globaux - - - OCC::OwncloudConnectionMethodDialog - - Connection failed - Échec de la connexion + + Use system proxy + Utiliser les paramètres du système - - <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> + + Username for proxy server + Nom d’utilisateur pour le serveur proxy + + + OCC::OAuth - - Select a different URL - Choisir une URL différente + <h1>Login Error</h1><p>%1</p> + <h1>Erreur de connexion</h1><p>%1</p> - - Retry unencrypted over HTTP (insecure) - Essayer en clair sur HTTP (non sécurisé) + <h1>Wrong account</h1><p>You logged in with the account <em>%1</em>, but must log in with the account <em>%2</em>.<br>Please log out of %3 in another tab, then <a href='%4'>click here</a> and log in with %2.</p> + <h1>Erreur de compte</h1><p>Vous êtes connecté(e) avec le compte <em>%1</em>, mais devez vous connecter avec le compte <em>%2</em>.<br>Merci de vous déconnecter de %3 dans un autre onglet, puis <a href='%4'>cliquez ici</a> et connectez-vous avec %2.</p> - - Configure client-side TLS certificate - Configurer le certificat TLS client + + <h1>Wrong user</h1><p>You logged-in with user <em>%1</em>, but must login with user <em>%2</em>.<br>Please log out of %3 in another tab, then <a href='%4'>click here</a> and log in as user %2</p> + - - <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> + Empty JSON from OAuth2 redirect + Vider le JSON de la redirection OAuth2 - - - OCC::OwncloudHttpCredsPage + + + OCC::OCUpdater - - &Email - &Adresse mail + + %1 available. Restart application to start the update. + %1 disponible. Redémarrez l'application pour effectuer la mise à jour. - - Connect to %1 - Connexion à %1 + + %1 version %2 available. Restart application to start the update. + - - Enter user credentials - Saisissez les identifiants de connexion de l'utilisateur + + A new update for %1 is about to be installed. The updater may ask +for additional privileges during the process. + - - - OCC::OwncloudPropagator - - Error with the metadata. Getting unexpected metadata format. - Erreur avec la métadonnée. Le format de la métadonnée est inattendu. + + 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. - - - Impossible to get modification time for file in conflict %1 - Impossible de récupérer la date de modification du fichier en conflit %1 + + Checking update server … + Vérification du serveur de mises à jour ... - - - 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. + + Could not check for new updates. + Impossible de vérifier la présence de nouvelles mises à jour. - - &Next > - &Suivant > + + Could not download update. Please click <a href='%1'>here</a> to download the update manually. + - - Server address does not seem to be valid - L'adresse du serveur ne semble pas être valide + + 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 load certificate. Maybe wrong password? - Impossible de charger le certificat. Vérifiez le mot de passe saisi. + + 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. - - - 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/> + + Downloading %1 … + Téléchargement de %1 … - - Invalid URL - URL invalide + + Downloading %1. Please wait … + Réception en cours de %1. Veuillez patienter... - - Failed to connect to %1 at %2:<br/>%3 - Échec de la connexion à %1 sur %2 :<br/>%3 + + Downloading version %1. Please wait … + - - Timeout while trying to connect to %1 at %2. - Délai d'attente dépassé lors de la connexion à %1 sur %2. + + 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. - - Trying to connect to %1 at %2 … - Tentative de connexion à %1 sur %2 ... + + 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. - - 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é. + + New %1 update ready + Une nouvelle mise à jour de %1 est disponible - - 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. + + New %1 version %2 is available. Please click <a href='%3'>here</a> to download the update. + - - There was an invalid response to an authenticated WebDAV request - Il y a eu une réponse invalide à une demande WebDAV authentifiée + + No updates available. Your installation is at the latest version. + Aucune mise à jour disponible. Votre installation est à jour. - - 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/> + + Update Check + Recherche de mise à jour - - Creating local sync folder %1 … - Création du dossier local de synchronisation %1 ... + + 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 - - OK - OK + + (%1) + (%1) - - failed. - échoué. + + %1 folder '%2' is synced to local folder '%3' + - - Could not create local folder %1 - Impossible de créer le dossier local %1 + + %1 folder "%2" is synced to local folder "%3" + Le dossier %1 "%2" est synchronisé avec le dossier local "%3". - - No remote folder specified! - Aucun dossier distant spécifié ! + + %1 free space + espace libre %1 - - Error: %1 - Erreur : %1 + + <p><small><strong>Warning:</strong> The local folder is not empty. Pick a resolution!</small></p> + - - creating folder on Nextcloud: %1 - Création du dossier sur Nextcloud : %1 + + Connect + Connexion - - Remote folder %1 created successfully. - Le dossier distant %1 a été créé avec succès. + + Connect … + - - The remote folder %1 already exists. Connecting it for syncing. - Le dossier distant %1 existe déjà. Connexion. + + Free space: %1 + - - - The folder creation resulted in HTTP error code %1 - La création du dossier a généré le code d'erreur HTTP %1 + + Local Sync Folder + Dossier de synchronisation local - - 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> + + Setup local folder options + - - <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> + + Sync the folder '%1' + - - - 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>. + + Sync the folder "%1" + Synchroniser le dossier "%1" - - 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. + + There isn't enough free space in the local folder! + L'espace libre dans le dossier local est insuffisant ! - - Successfully connected to %1! - Connecté avec succès à %1 ! + + Use &virtual files instead of downloading content immediately %1 + Utiliser les fichiers virtuels %1 - - Connection to %1 could not be established. Please check again. - La connexion à %1 n'a pu être établie. Veuillez réessayer. + + Warning: The local folder is not empty. Pick a resolution! + Avertissement : Le dossier local n'est pas vide. Choisissez une option. + + + OCC::OwncloudConnectionMethodDialog - - Folder rename failed - Echec du renommage du dossier + + <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> - - 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. + + <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> - - <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> + + Configure client-side TLS certificate + Configurer le certificat TLS client - - - OCC::OwncloudWizard - - Add %1 account - Ajout du compte %1 + + Connection failed + Échec de la connexion - - Skip folders configuration - Ignorer la configuration des dossiers + + Retry unencrypted over HTTP (insecure) + Essayer en clair sur HTTP (non sécurisé) - - Cancel - Annuler + + Select a different URL + Choisir une URL différente + + + OCC::OwncloudHttpCredsPage - - Enable experimental feature? - Activer la fonction expérimentale ? + + &Email + &Adresse mail - - 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. - -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. - Lorsque le mode « fichiers virtuels » est activé, aucun fichier ne sera téléchargé initialement. Au lieu de cela, un petit fichier "%1" sera créé pour chaque fichier existant sur le serveur. Le contenu peut être téléchargé en exécutant ces fichiers ou en utilisant leur menu contextuel. - -Le mode fichiers virtuels est mutuellement exclusif avec synchronisation sélective. Les dossiers actuellement non sélectionnés seront convertis en dossiers en ligne uniquement et vos paramètres de synchronisation sélective seront réinitialisés. - -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. + + Connect to %1 + Connexion à %1 - - Enable experimental placeholder mode - Activer la fonction expérimentale de fichiers virtuels ? + + Enter user credentials + Saisissez les identifiants de connexion de l'utilisateur + + + OCC::OwncloudOAuthCredsPage - - Stay safe - Restez en sécurité + Login in your browser + Connectez vous sur votre navigateur - - - OCC::PasswordInputDialog + + + OCC::OwncloudPropagator - - Password for share required - Mot de passe requis pour le partage + Error with the metadata. Getting unexpected metadata format. + Erreur avec la métadonnée. Le format de la métadonnée est inattendu. - - Please enter a password for your share: - Veuillez saisir un mot de passe pour votre partage : + + Impossible to get modification time for file in conflict %1 + Impossible de récupérer la date de modification du fichier en conflit %1 - - - OCC::PollJob + + + OCC::OwncloudSetupPage - - Invalid JSON reply from the poll URL - L'URL de sondage a renvoyé une réponse JSON non valide + + &Next > + &Suivant > - - - OCC::ProcessDirectoryJob - - Symbolic links are not supported in syncing. - Les liens symboliques ne sont pas pris en charge par la synchronisation. + + Could not load certificate. Maybe wrong password? + Impossible de charger le certificat. Vérifiez le mot de passe saisi. - - File is listed on the ignore list. - Le fichier est présent dans la liste des fichiers exclus. + + Server address does not seem to be valid + L'adresse du serveur ne semble pas être valide - - 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. + + Setup %1 server + - - File names containing the character "%1" are not supported on this file system. - Les noms de fichiers contenant le caractère "%1" ne sont pas pris en charge par ce système de fichiers. + + The link to your %1 web interface when you open it in the browser. + Adresse URL visible dans la barre d'adresse de votre navigateur Web lorsque vous êtes connecté à %1. - - File name contains at least one invalid character - Le nom du fichier contient au moins un caractère interdit + + This URL is NOT secure as it is not encrypted. +It is not advisable to use it. + - - The file name is a reserved name on this file system. - Le nom du fichier est un nom réservé dans le système de fichier + + This URL is secure. You can use it. + + + + OCC::OwncloudSetupWizard Folder @@ -4320,54 +4495,54 @@ Il s'agit d'un nouveau mode expérimental. Si vous décidez de l' Le nom %1 est un nom réservé sur ce système de fichiers. - - Filename contains trailing spaces. - Le nom du fichier finit par des espaces. + + 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. - - Filename contains leading spaces. - Nom de fichier contenant des espaces au début. + + Connection to %1 could not be established. Please check again. + La connexion à %1 n'a pu être établie. Veuillez réessayer. - - Filename contains leading and trailing spaces. - Nom de fichier contenant des espaces au début et à la fin. + + Could not create local folder %1 + Impossible de créer le dossier local %1 - - Filename is too long. - Le nom du fichier est trop long. + + creating folder on Nextcloud: %1 + Création du dossier sur Nextcloud : %1 - - File/Folder is ignored because it's hidden. - Le fichier/dossier est exclu, car il est caché. + + Creating local sync folder %1 … + Création du dossier local de synchronisation %1 ... - - Stat failed. - Stat échoué. + + Error: %1 + Erreur : %1 - - 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. + + Failed to connect to %1 at %2:<br/>%3 + Échec de la connexion à %1 sur %2 :<br/>%3 - - 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. + + failed. + échoué. - - The filename cannot be encoded on your file system. - Le nom de fichier ne peut pas être encodé sur votre système de fichiers. + + Folder rename failed + Echec du renommage du dossier - - The filename is blacklisted on the server. - Le nom du fichier est sur la liste noire du serveur. + + Invalid URL + URL invalide @@ -4390,34 +4565,34 @@ Il s'agit d'un nouveau mode expérimental. Si vous décidez de l' 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. + + 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>. - - size - taille + + Successfully connected to %1! + Connecté avec succès à %1 ! - - permission - permission + + The authenticated request to the server was redirected to '%1'. The URL is bad, the server is misconfigured. + - - file id - ID du fichier + + The folder creation resulted in HTTP error code %1 + La création du dossier a généré le code d'erreur HTTP %1 - - Server reported no %1 - Le serveur n'a signalé aucun %1 + + The remote folder %1 already exists. Connecting it for syncing. + Le dossier distant %1 existe déjà. Connexion. - - Cannot sync due to invalid modification time - Impossible de synchroniser à cause d'une date de modification invalide + + 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> @@ -4425,24 +4600,27 @@ Il s'agit d'un nouveau mode expérimental. Si vous décidez de l' 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 + + Timeout while trying to connect to %1 at %2. + Délai d'attente dépassé lors de la connexion à %1 sur %2. - - Conflict when uploading a folder. It's going to get cleared! - Conflit lors du téléversement d'un dossier. Il va être vidé ! + + Trying to connect to %1 at %2 … + Tentative de connexion à %1 sur %2 ... + + + OCC::OwncloudWizard - - Conflict when uploading a file. It's going to get removed! - Conflit lors du téléversement d'un fichier. Il va être supprimé ! + + %1 Connection Wizard + - - Moved to invalid target, restoring - Déplacé vers une cible invalide, restauration + + Add %1 account + Ajout du compte %1 @@ -4455,52 +4633,73 @@ Il s'agit d'un nouveau mode expérimental. Si vous décidez de l' 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 + + Enable experimental placeholder mode + Activer la fonction expérimentale de fichiers virtuels ? - - 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 + + Skip folders configuration + Ignorer la configuration des dossiers - - 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 + + Stay safe + Restez en sécurité - - Not allowed to remove, restoring - Suppression non autorisée, restauration en cours + + 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. + +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. + Lorsque le mode « fichiers virtuels » est activé, aucun fichier ne sera téléchargé initialement. Au lieu de cela, un petit fichier "%1" sera créé pour chaque fichier existant sur le serveur. Le contenu peut être téléchargé en exécutant ces fichiers ou en utilisant leur menu contextuel. + +Le mode fichiers virtuels est mutuellement exclusif avec synchronisation sélective. Les dossiers actuellement non sélectionnés seront convertis en dossiers en ligne uniquement et vos paramètres de synchronisation sélective seront réinitialisés. + +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::OwncloudWizardResultPage - - Error while reading the database - Erreur de lecture de la base de données + + Everything set up! + + + + OCC::PasswordInputDialog - - 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 + + Please enter a password for your share: + Veuillez saisir un mot de passe pour votre partage : - - - OCC::PropagateDirectory + + + OCC::PollJob could not delete file %1 from local DB Impossible de supprimer le fichier %1 de la base de données locale + + + OCC::ProcessDirectoryJob 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 + + %1 name contains at least one invalid character + Le nom %1 contient au moins un caractère invalide @@ -4519,133 +4718,119 @@ Il s'agit d'un nouveau mode expérimental. Si vous décidez de l' Exception inconnue - - Error updating metadata: %1 - Erreur lors de la mise à jour des métadonnées : %1 + + 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 is currently in use - Le fichier est actuellement en cours d'utilisation + + Conflict when uploading a file. It's going to get removed! + Conflit lors de l'envoi d'un fichier. Il va être supprimé ! - - - 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 + + Conflict when uploading a folder. It's going to get cleared! + Conflit lors de l'envoi d'un dossier. Il va être supprimé ! - - could not get file %1 from local DB - Impossible de récupérer le fichier %1 depuis la base de données locale + + Conflict: Server version downloaded, local copy renamed and not uploaded. + Conflit : la version du serveur a été téléchargée, la version locale renommée et non téléversée. - - 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 upload file, because it is open in "%1". + Impossible de téléverser le fichier, car il est ouvert dans « %1 ». - - - File has changed since discovery - Le fichier a changé depuis sa découverte + + Error while deleting file record %1 from the database + Erreur à la suppression de l'enregistrement du fichier %1 de la base de données - - - 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 while reading the database + Erreur de lecture de la base de données - - 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 has extension reserved for virtual files. + Le fichier a une extension réservée pour les fichiers virtuels. - - 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 id + ID du fichier - - Free space on disk is less than %1 - Il y a moins de %1 d'espace libre sur le disque + + File is listed on the ignore list. + Le fichier est présent dans la liste des fichiers ignorés. - - File was deleted from server - Le fichier a été supprimé du serveur + + File name contains at least one invalid character + Le nom du fichier contient au moins un caractère interdit - - The file could not be downloaded completely. - Le fichier n'a pas pu être téléchargé intégralement. + + File names containing the character "%1" are not supported on this file system. + Les noms de fichiers contenant le caractère "%1" ne sont pas pris en charge par ce système de fichiers. - - 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 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 %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/Folder is ignored because it's hidden. + Le fichier ou dossier a été ignoré car il est masqué. - - 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 ! + + Filename is too long. + Le nom du fichier est trop long. - - Error updating metadata: %1 - Erreur lors de la mise à jour des métadonnées : %1 + + Folder + Dossier - - The file %1 is currently in use - Le fichier %1 est en cours d'utilisation + + Ignored because of the "choose what to sync" blacklist + Ignoré en raison de la liste noire "Sélectionner le contenu à synchroniser". - - - OCC::PropagateItemJob - - ; Restoration Failed: %1 - ; Échec de la restauration : %1 + + Moved to invalid target, restoring + Déplacé vers une cible invalide, restauration - - 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 + + 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 - - - OCC::PropagateLocalMkdir - - could not delete file %1, error: %2 - impossible de supprimer le fichier %1. Erreur : %2 + + 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 - - 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 ! + + Not allowed to remove, restoring + Suppression non autorisée, restauration en cours - - Could not create folder %1 - Impossible de créer le dossier %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 - - - - The folder %1 cannot be made read-only: %2 - Le dossier %1 ne peut être rendu en lecture seule : %2 + + permission + permission @@ -4653,40 +4838,34 @@ Il s'agit d'un nouveau mode expérimental. Si vous décidez de l' Exception inconnue - - Error updating metadata: %1 - Erreur lors de la mise à jour des métadonnées : %1 + + Reason: the file has a forbidden extension (.%1). + Motif : le fichier a une extension interdite (.%1). - - The file %1 is currently in use - Le fichier %1 est en cours d'utilisation + + Reason: the filename contains a forbidden character (%1). + Motif : le nom du fichier contient un caractère interdit (%1). - - - 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 + + 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). - - Could not delete file record %1 from local DB - Impossible de supprimer l'enregistrement du fichier %1 depuis la base de données locale + + 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 - - - 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 ! + + Server reported no %1 + Le serveur n'a signalé aucun %1 - - 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 ! + + size + taille @@ -4709,98 +4888,90 @@ Il s'agit d'un nouveau mode expérimental. Si vous décidez de l' 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 filename cannot be encoded on your file system. + Le nom de fichier ne peut pas être encodé sur votre système de fichiers. - - The file %1 is currently in use - Le fichier %1 est en cours d'utilisation + + The filename is blacklisted on the server. + Le nom du fichier est sur la liste noire du serveur. + + + OCC::PropagateDirectory - - - 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 delete file %1 from local DB + Impossible de supprimer le fichier %1 de la base de données locale - - Failed to propagate directory rename in hierarchy - Impossible de propager le renommage du dossier dans la hiérarchie + + Could not delete file %1 from local DB + Impossible de supprimer le fichier %1 de la base de données locale - - Failed to rename file - Échec lors du changement de nom du fichier + + Error updating metadata due to invalid modification time + Erreur de mise à jour des métadonnées à cause d'une date de modification invalide - - - 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". + + File is currently in use + Le fichier est actuellement en cours d'utilisation - - Could not delete file record %1 from local DB - Impossible de récupérer le fichier %1 depuis la base de données locale + + The folder %1 cannot be made read-only: %2 + Le dossier %1 ne peut être rendu en lecture seule : %2 - - - 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". + + unknown exception + - - - OCC::PropagateRemoteMkdir + + + OCC::PropagateDownloadFile - - 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 delete file record %1 from local DB + Impossible de supprimer l'enregistrement du fichier %1 depuis la base de données locale - - Failed to encrypt a folder %1 - Échec du chiffrement d'un dossier %1 + + could not get file %1 from local DB + Impossible de récupérer le fichier %1 depuis la base de données locale - - Error writing metadata to the database: %1 - Erreur d'écriture des métadonnées dans la base de données : %1 + + Could not get file %1 from local DB + Impossible de récupérer le fichier %1 depuis la base de données locale - - The file %1 is currently in use - Le fichier %1 est en cours d'utilisation + + File %1 can not be downloaded because encryption information is missing. + - - - OCC::PropagateRemoteMove - - Could not rename %1 to %2, error: %3 - Impossible de renommer %1 en %2, erreur: %3 + + 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. - - Error updating metadata: %1 - Erreur lors de la mise à jour des métadonnées : %1 + + 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. - - The file %1 is currently in use - Le fichier %1 est en cours d'utilisation + + File %1 cannot be saved because of a local file name clash! + - - 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". + + 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 ! @@ -4813,299 +4984,308 @@ Il s'agit d'un nouveau mode expérimental. Si vous décidez de l' 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 + + File was deleted from server + Le fichier a été supprimé du serveur - - Error setting pin state - Erreur lors de la modification de l'état du fichier + + Free space on disk is less than %1 + Il y a moins de %1 d'espace libre sur le disque - - Error writing metadata to the database - Erreur à l'écriture des métadonnées dans la base de données + + 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 - - - OCC::PropagateUploadFileCommon - - Failed to upload encrypted file. - Échec de téléversement du fichier chiffré. + + The downloaded file is empty despite that the server announced it should have been %1. + - - 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. + + 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. - - - Upload of %1 exceeds the quota for the folder - Le téléversement de %1 provoque un dépassement du quota du dossier + + The file could not be downloaded completely. + Le fichier n'a pas pu être téléchargé intégralement. + + + OCC::PropagateItemJob - - - - 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. + + ; Restoration Failed: %1 + ; Échec de la restauration : %1 - - File Removed (start upload) %1 - Fichier supprimé (début du téléversement) %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 + + + OCC::PropagateLocalMkdir - - Local file changed during syncing. It will be resumed. - Fichier local modifié pendant la synchronisation. Elle va reprendre. + + Attention, possible case sensitivity clash with %1 + - - Local file changed during sync. - Fichier local modifié pendant la synchronisation. + + Could not create folder %1 + Impossible de créer le dossier %1 - - Failed to unlock encrypted folder. - Impossible de déverrouiller le dossier chiffré. + + could not delete file %1, error: %2 + impossible de supprimer le fichier %1. Erreur : %2 - - Unable to upload an item with invalid characters - Impossible de téléverser un élément contenant des caractères non valides + + 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 ! + + + OCC::PropagateLocalRemove - - Error updating metadata: %1 - Erreur lors de la mise à jour des métadonnées : %1 + + 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 - - The file %1 is currently in use - Le fichier %1 est en cours d'utilisation + + Could not remove folder '%1' + - - - OCC::PropagateUploadFileNG - - The local file was removed during sync. - Fichier local supprimé pendant la synchronisation. + + Error removing '%1': %2; + + + + OCC::PropagateLocalRename - - Local file changed during sync. - Fichier local modifié pendant la synchronisation. + + Error setting pin state + Erreur lors de la modification de l'état du fichier - - Poll URL missing - URL du sondage manquante + + Failed to propagate directory rename in hierarchy + Impossible de propager le renommage du dossier dans la hiérarchie - - Unexpected return code from server (%1) - Le serveur a retourné un code inattendu (%1) + + Failed to rename file + Échec lors du changement de nom du fichier - - Missing File ID from server - L'identifiant de fichier est manquant sur le serveur + + File %1 can not be renamed to %2 because of a local file name clash + - - Missing ETag from server - L'information Etag de modification de fichier est manquante sur le serveur + + 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::PropagateUploadFileV1 + + + OCC::PropagateRemoteMkdir - - Poll URL missing - URL de sondage manquante + + Error writing metadata to the database: %1 + Erreur d'écriture des métadonnées dans la base de données : %1 - - The local file was removed during sync. - Fichier local supprimé pendant la synchronisation. + + Failed to encrypt a folder %1 + Échec du chiffrement d'un dossier %1 - - Local file changed during sync. - Fichier local modifié pendant la synchronisation. + + 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 - - 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). + + Could not rename %1 to %2, error: %3 + Impossible de renommer %1 en %2, erreur: %3 - - - OCC::ProxyAuthDialog + + + OCC::PropagateUploadFileCommon - - Proxy authentication required - Authentification requise sur le proxy + + Failed to unlock encrypted folder. + Impossible de déverrouiller le dossier chiffré. - - Username: - Nom d’utilisateur : + + Failed to upload encrypted file. + Échec d'envoi du fichier chiffré. - - Proxy: - Proxy : + + Unable to upload an item with invalid characters + Impossible de téléverser un élément contenant des caractères non valides - - The proxy server needs a username and password. - Le serveur proxy requiert un identifiant et un mot de passe. + + Upload of %1 exceeds the quota for the folder + L'envoi de %1 amène un dépassement de quota pour le dossier + + + OCC::PropagateUploadFileNG - - Password: - Mot de passe : + + Missing ETag from server + L'information Etag de modification de fichier est manquante sur le serveur - - - OCC::SelectiveSyncDialog - - Choose What to Sync - Sélectionner le contenu à synchroniser + + Missing File ID from server + L'identifiant de fichier est manquant sur le serveur - - - OCC::SelectiveSyncWidget - - Loading … - Chargement… + + Poll URL missing + URL du sondage manquante - - Deselect remote folders you do not wish to synchronize. - Désélectionnez les sous-dossiers distants que vous ne souhaitez pas synchroniser. + + Unexpected return code from server (%1) + Le serveur a retourné un code inattendu (%1) + + + OCC::PropagateUploadFileV1 - - Name - Nom + + 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). + + + OCC::ProxyAuthDialog - - Size - Taille + + Password: + Mot de passe : - - - No subfolders currently on the server. - Aucun sous-dossier sur le serveur. + + Proxy authentication required + Authentification requise sur le proxy - - An error occurred while loading the list of sub folders. - Une erreur est survenue lors du chargement de la liste des sous-dossiers. + + Proxy: + Proxy : - - - OCC::ServerNotificationHandler - - Reply - Répondre + + The proxy server needs a username and password. + Le serveur proxy requiert un identifiant et un mot de passe. - - Dismiss - Ignorer + + Username: + Nom d’utilisateur : - - - OCC::SettingsDialog + + + OCC::SelectiveSyncDialog - - Settings - Paramètres + + Choose What to Sync + Sélectionner le contenu à synchroniser + + + OCC::SelectiveSyncWidget - - %1 Settings - This name refers to the application name e.g Nextcloud - Paramètres %1 + + An error occurred while loading the list of sub folders. + Une erreur est survenue lors du chargement de la liste des sous-dossiers. - - General - Général + + Deselect remote folders you do not wish to synchronize. + Désélectionnez les sous-dossiers distants que vous ne souhaitez pas synchroniser. - - Network - Réseau + + Loading … + Chargement… - - Account - Compte + + Name + Nom - - - OCC::ShareManager Error Erreur - - - OCC::ShareModel %1 days %1 jours + + + OCC::ServerNotificationHandler 1 day 1 jour + + + OCC::SettingsDialog Today Aujourd'hui - - Secure file drop link - Lien de dépôt sécurisé de fichier + + Account + Compte - - Share link - Partager un lien + + General + Paramètres - - Link share - Lien de partage + Network + Réseau - - Internal link - Lien interne + + New Account + Nouveau compte + + + OCC::ShareDialog - - Secure file drop - Dépôt de fichier sécurisé + + %1 Sharing + @@ -5113,134 +5293,130 @@ Il s'agit d'un nouveau mode expérimental. Si vous décidez de l' Impossible de trouver le dossier local pour %1 - - Enter a note for the recipient - Saisissez un commentaire pour le destinataire + + Icon + - - - OCC::ShareeModel - - - Search globally - Rechercher globalement + + Nextcloud Path: + - - No results found - Aucun résultat trouvé + + The file can not be shared because it was shared without sharing permission. + + + + OCC::ShareLinkWidget - - Global search results - Résultats de la recherche globale + + <p>Do you really want to delete the public link share <i>%1</i>?</p><p>Note: This action cannot be undone.</p> + - - %1 (%2) - sharee (shareWithAdditionalInfo) - %1 (%2) + + Add note to recipient + - - - OCC::SocketApi - - Failed to encrypt folder at "%1" - Échec du chiffrement du dossier à "%1" + + Allow Editing + - - 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. + + Allow Upload && Editing + - - Failed to encrypt folder - Échec du chiffrement du dossier + + Confirm Link Share Deletion + - - 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 + + Expiration Date + - - Folder encrypted successfully - Dossier chiffré avec succès + + Public link + - - The following folder was encrypted successfully: "%1" - Le dossier suivant a été chiffré avec succès : "%1" + + Read only + + + + OCC::ShareModel - - Context menu share - Partage du menu contextuel + + %1 days + %1 jours - - Select new location … - Sélectionnez le nouvel emplacement ... + + 1 day + 1 jour - - I shared something with you - J'ai partagé quelque chose avec vous + + Could not find local folder for %1 + Impossible de trouver le dossier local pour %1 - - - Share options - Options de partage + Enter a note for the recipient + Saisissez un commentaire pour le destinataire - - - Activity - Activité + + Internal link + Lien interne - - Copy private link to clipboard - Copier le lien privé dans le presse-papier + + Link share + Lien de partage - - Send private link by email … - Envoyer le lien privé par e-mail ... + + Secure file drop + Dépôt de fichier sécurisé - - Leave this share - Quitter ce partage + + Secure file drop link + Lien de dépôt sécurisé de fichier - - Resharing this file is not allowed - Repartager ce fichier est interdit + + Share link + Partager un lien - - Resharing this folder is not allowed - Repartager ce dossier est interdit + + Today + Aujourd'hui + + + OCC::ShareUserGroupWidget Copy secure file drop link Copier le lien de dépôt sécurisé de fichier + + + OCC::ShareUserLine - - - Copy public link - Copier le lien public + + Can change + @@ -5253,30 +5429,26 @@ Le serveur a répondu avec l'erreur : %2 Copier le lien de dépôt de fichier sécurisé - - Encrypt - Chiffrer + + Can delete + - - Lock file - Verrouiller le fichier + Can edit + Peut modifier - - Unlock file - Déverrouiller le fichier + + Can reshare + - - Locked by %1 - Verrouillé par %1 + Expires: + Expire le : - - - Expires in %1 minutes - remaining time before lock expires - Expire dans %1 minuteExpire dans %1 minutesExpire dans %1 minutes + + Note: + Note : @@ -5294,448 +5466,446 @@ Le serveur a répondu avec l'erreur : %2 Résoudre le conflit… - - Move and rename … - Déplacer et renommer... + + Search globally + Rechercher globalement + + + OCC::ShibbolethCredentials - - Move, rename and upload … - Déplacer, renommer et téléverser… + + Login Error + - - Delete local changes - Supprimer les modifications locales + + You must sign in as user %1 + + + + OCC::ShibbolethWebView - - Move and upload … - Déplacer et téléverser… + + %1 - Authenticate + - - Delete - Supprimer + + Reauthentication required + - - - OCC::SslButton - - <h3>Certificate Details</h3> - <h3>Détails du certificat</h3> + + SSL Cipher Debug View + - - Common Name (CN): - Nom commun (CN) : + + Your session has expired. You need to re-login to continue to use the client. + + + + OCC::SocketApi - - Subject Alternative Names: - Noms alternatifs du sujet : + + Context menu share + Partage du menu contextuel - - Organization (O): - Organisation (O) : + + Copy internal link + Copier le lien interne - - Organizational Unit (OU): - Unité d'organisation (OU) : + + Copy private link to clipboard + Copier le lien privé dans le presse-papier - - State/Province: - État/Région : + + Copy public link + Copier le lien public - - Country: - Pays : + + Copy secure file drop link + Copier le lien de dépôt sécurisé de fichier - - Serial: - Numéro de série : + + Copy secure filedrop link + Copier le lien de dépôt de fichier sécurisé - - <h3>Issuer</h3> - <h3>Émetteur</h3> + + 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 - - Issuer: - Émetteur : + + Delete local changes + Supprimer les modifications locales - - Issued on: - Émis le : + + Edit + Éditer + + + + Expires in %1 minutes + + + + Expire dans %1 minutes + - - Expires on: - Expire le : + + Failed to encrypt folder + Échec du chiffrement du dossier - - <h3>Fingerprints</h3> - <h3>Empreintes numériques</h3> + + Failed to encrypt folder at "%1" + Échec du chiffrement du dossier à "%1" - - SHA-256: - SHA-256 : + + Folder encrypted successfully + Dossier chiffré avec succès - - SHA-1: - SHA-1 : + + I shared something with you + J'ai partagé quelque chose avec vous - - <p><b>Note:</b> This certificate was manually approved</p> - <p><b>Note :</b> Ce certificat a été approuvé manuellement</p> + + Leave this share + Quitter ce partage - - %1 (self-signed) - %1 (auto-signé) + + Lock file + Verrouiller le fichier - - %1 - %1 + + Locked by %1 + Verrouillé par %1 - - This connection is encrypted using %1 bit %2. - - Cette connexion est chiffrée en utilisant %1 bit %2. - + + Move and rename … + Déplacer et renommer... - - 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. - + + Move and upload … + Déplacer et téléverser… - - Server version: %1 - Version du serveur : %1 + + Move, rename and upload … + Déplacer, renommer et téléverser… - - No support for SSL session tickets/identifiers - Identifiants/tickets de sessions SSL non pris en charge + + Open in browser + Ouvrir dans le navigateur - - Certificate information: - Informations du certificat : + + Resharing this file is not allowed + Repartager ce fichier est interdit - - The connection is not secure - La connexion n'est pas sécurisée + + Resharing this folder is not allowed + Repartager ce dossier est interdit - - - OCC::SslErrorDialog - - Trust this certificate anyway - Faire confiance à ce certificat malgré tout + + Resolve conflict … + Résoudre le conflit… - - Untrusted Certificate - Certificat non fiable + + Select new location … + Sélectionnez le nouvel emplacement ... - - Cannot connect securely to <i>%1</i>: - Impossible de se connecter de manière sécurisée à <i>%1</i> : + + Send private link by email … + Envoyer le lien privé par e-mail ... - - Additional errors: - Erreurs supplémentaires : + + Share options + Options de partage - - with Certificate %1 - avec certificat %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. - - - - &lt;not specified&gt; - &lt;non spécifié&gt; + + The following folder was encrypted successfully: "%1" + Le dossier suivant a été chiffré avec succès : "%1" - - - Organization: %1 - Organisation : %1 + + Unlock file + Déverrouiller le fichier + + + OCC::SslButton - - - Unit: %1 - Unité : %1 + + %1 + %1 - - - Country: %1 - Pays : %1 + + %1 (self-signed) + %1 (auto-signé) - - Fingerprint (SHA1): <tt>%1</tt> - Empreinte (SHA1) : <tt>%1</tt> + + <h3>Certificate Details</h3> + <h3>Détails du certificat</h3> - - Fingerprint (SHA-256): <tt>%1</tt> - Empreinte (SHA-256): <tt>%1</tt> + + <h3>Fingerprints</h3> + <h3>Empreintes numériques</h3> - - Fingerprint (SHA-512): <tt>%1</tt> - Empreinte (SHA-512): <tt>%1</tt> + + <h3>Issuer</h3> + <h3>Émetteur</h3> - - Effective Date: %1 - Date de début de validité : %1 + + <p><b>Note:</b> This certificate was manually approved</p> + <p><b>Note :</b> Ce certificat a été approuvé manuellement</p> - - Expiration Date: %1 - Date d'expiration : %1 + + Certificate information: + Informations du certificat : - - Issuer: %1 - Émetteur : %1 + + Common Name (CN): + Nom commun (CN) : - - - 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) + + Country: + Pays : - - Could not update file: %1 - Impossible de mettre à jour le fichier : %1 + + Expires on: + Expire le : - - Could not update virtual file metadata: %1 - Impossible de mettre à jour les métadonnées du fichier virutel : %1 + + Issued on: + Émis le : - - Could not update file metadata: %1 - Impossible de mettre à jour les métadonnées du fichier : %1 + + Issuer: + Émetteur : - - 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 + + No support for SSL session tickets/identifiers + Identifiants/tickets de sessions SSL non pris en charge - - Unresolved conflict. - conflit non résolu. + + Organization (O): + Organisation (O) : - - 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 + + Organizational Unit (OU): + Unité d'organisation (OU) : - - 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. + + Serial: + Numéro de série : - - Using virtual files with suffix, but suffix is not set - Utilisation de fichiers virtuels avec suffixe, mais le suffixe n'est pas défini + + Server version: %1 + Version du serveur : %1 - - Unable to read the blacklist from the local database - Impossible de lire la liste noire de la base de données locale + + SHA-1: + SHA-1 : - - Unable to read from the sync journal. - Impossible de lire le journal de synchronisation. + + SHA-256: + SHA-256 : - - Cannot open the sync journal - Impossible d'ouvrir le journal de synchronisation + + State/Province: + État/Région : - - 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. + + Subject Alternative Names: + Noms alternatifs du sujet : - - 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. + + The connection is not secure + La connexion n'est pas sécurisée - - - OCC::SyncStatusSummary - - - Offline - Hors ligne + + This connection is encrypted using %1 bit %2. + Cette connexion est chiffrée en utilisant %1 bit %2. - - - - All synced! - Tout est synchronisé ! + + 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::SslErrorDialog - - Some files couldn't be synced! - Certains fichiers n’ont pas pu être synchronisés ! + + &lt;not specified&gt; + &lt;non spécifié&gt; - - See below for errors - Voir ci-dessous pour les erreurs + + Additional errors: + Erreurs supplémentaires : - - Checking folder changes - Vérification des modifications du dossier + + Cannot connect securely to <i>%1</i>: + Impossible de se connecter de manière sécurisée à <i>%1</i> : - - Syncing changes - Synchronisation des modifications + + Country: %1 + Pays : %1 - - Sync paused - Synchronisation mise en pause + + Effective Date: %1 + Date de début de validité : %1 - - Some files could not be synced! - Certains fichiers n’ont pas pu être synchronisés ! + + Expiration Date: %1 + Date d'expiration : %1 - - See below for warnings - Voir ci-dessous pour les avertissements + + Fingerprint (SHA-256): <tt>%1</tt> + Empreinte (SHA-256): <tt>%1</tt> - - Syncing - Synchronisation + + Fingerprint (SHA-512): <tt>%1</tt> + Empreinte (SHA-512): <tt>%1</tt> - - %1 of %2 · %3 left - %1 sur %2 · %3 restants + + Fingerprint (SHA1): <tt>%1</tt> + Empreinte (SHA1) : <tt>%1</tt> - - %1 of %2 - %1 sur 2% + + Issuer: %1 + Émetteur : %1 - - Syncing file %1 of %2 - Synchronisation du fichier %1 sur %2 + + Organization: %1 + Organisation : %1 - - - OCC::Systray - - Download - Télécharger + + Trust this certificate anyway + Faire confiance à ce certificat malgré tout - - Add account - Ajouter un compte + + Unit: %1 + Unité : %1 - - Open main dialog - Ouvrir la boîte de dialogue principale + + Untrusted Certificate + Certificat non fiable - - - Pause sync - Suspendre la synchronisation + + with Certificate %1 + avec certificat %1 + + + OCC::SyncEngine - - - Resume sync - Relancer la synchro + + %1 (skipped due to earlier error, trying again in %2) + %1 (ignoré à cause d'une précédente erreur, nouvel essai dans %2) - - Settings - Paramètres + + A HTTP transmission error happened. + - - Help - Aide + + A network connection timeout happened. + - - Exit %1 - Quitter %1 + + Access is forbidden + - - Pause sync for all - Suspendre toutes les synchros + + An error occurred while opening a folder + - - Resume sync for all - Relancer toutes les synchros + + An internal error number %1 occurred. + - - %1: %2 - %1 : %2 + + Cannot open the sync journal + Impossible d'ouvrir le journal de synchronisation - - - OCC::Theme <p>%1 Desktop Client Version %2 (%3). For more information please click <a href='%4'>here</a>.</p> @@ -5749,77 +5919,65 @@ Le serveur a répondu avec l'erreur : %2 <p>Client de bureau %1</p> - - <p>%1 Desktop Client</p><p>Version %1. For more information please click <a href='%2'>here</a>.</p> - Example text: "<p>Nextcloud Desktop Client</p>" (%1 is the application name) - <p>Client de bureau %1</p> <p>Version %1. Pour plus d'informations, cliquez <a href='%2'>ici</a>.</p> + + Could not update file metadata: %1 + Impossible de mettre à jour les métadonnées du fichier : %1 - - <p><small>Using virtual files plugin: %1</small></p> - <p><small>Utilise l'extension de fichiers virtuels : %1</small></p> + + Could not update file: %1 + Impossible de mettre à jour le fichier : %1 - - <p>%1 desktop client %2</p> - Example text: "<p>Nextcloud Desktop Client</p>" (%1 is the application name) - <p>Client de bureau %1 %2</p> + + Could not update virtual file metadata: %1 + Impossible de mettre à jour les métadonnées du fichier virutel : %1 - - - <p>Version %1. For more information please click <a href='%2'>here</a>.</p> - <p>Version %1. Pour plus d’informations, veuillez cliquer <a href='%2'>ici</a>.</p> + + CSync unspecified error. + - - <p>This release was supplied by %1.</p> - <p>Cette version a été fournie par %1.</p> + + Discovery step failed. + - - - OCC::UnifiedSearchResultsListModel - - Failed to fetch providers. - Échec de la récupération des fournisseurs. + + 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. - - Failed to fetch search providers for '%1'. Error: %2 - Échec de la récupération des fournisseurs de recherche pour '%1'. Erreur : %2 + + Error while reading folder. + - - Search has failed for '%2'. - La recherche de '%2' a échoué. + + Failed to load or create the journal file. Make sure you have read and write permissions in the local sync folder. + - - Search has failed for '%1'. Error: %2 - La recherche de '%1' a échoué. Erreur: %2 + + File names containing the character '%1' are not supported on this file system. + - - - OCC::UpdateE2eeFolderMetadataJob - - Failed to update folder metadata. - Échec du téléversement du dossier des métadonnées. + + File or directory not found: + - - Failed to unlock encrypted folder. - Échec du déverrouillage du dossier chiffré. + + Folder hierarchy is too deep + - - Failed to finalize item. - Impossible de finaliser l'item. + + Invalid characters, please rename "%1" + - - - OCC::UpdateE2eeFolderUsersMetadataJob @@ -5834,28 +5992,25 @@ Le serveur a répondu avec l'erreur : %2 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 + + Move not allowed because %1 is read-only + - - Could not find root encrypted folder for folder %1 - Impossible de trouver le dossier racine chiffré pour le dossier %1 + + Move not allowed, item restored + - - 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 + + No space on %1 server available. + Failed to unlock a folder. Échec du déverrouillage d’un dossier. - - - OCC::User End-to-end certificate needs to be migrated to a new one @@ -5872,15 +6027,14 @@ Le serveur a répondu avec l'erreur : %2 %1 notifications - - Retry all uploads - Réessayer tous les téléversements + + Permission denied. + - - - Resolve conflict - Résoudre le conflit + + Success. + @@ -5897,129 +6051,125 @@ Le serveur a répondu avec l'erreur : %2 Open Nextcloud Talk in browser Ouvrir Nextcloud Discussion dans le navigateur - - - OCC::UserModel - - Confirm Account Removal - Confirmer le retrait du compte + + the source + - - <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> + + 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 envois. - - Remove connection - Supprimer la connexion + + Tried to create a folder that already exists. + - - Cancel - Annuler + + 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. - - - 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. + + Unable to read from the sync journal. + Impossible de lire le journal de synchronisation. - - 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. + + Unable to read the blacklist from the local database + Impossible de lire la liste noire de la base de données locale - - 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. + + Unresolved conflict. + conflit non résolu. - - 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. + + 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::SyncLogDialog - - 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. + + Synchronisation Log + + + + OCC::SyncStatusSummary - - 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. + + %1 of %2 + %1 sur 2% - - - Don't clear - Ne pas effacer + + %1 of %2 · %3 left + %1 sur %2 · %3 restants - - 30 minutes - 30 minutes + + Checking folder changes + Vérification des modifications du dossier - - - 1 hour - 1 heure + + Offline + Hors ligne - - 4 hours - 4 heures + + Preparing sync + Préparation de la synchronisation - - - Today - Aujourd'hui + + See below for errors + Voir ci-dessous pour les erreurs - - - This week - Cette semaine + + See below for warnings + Voir ci-dessous pour les avertissements - - Less than a minute - Il y a moins d'une minute + + Some files could not be synced! + Certains fichiers n’ont pas pu être synchronisés ! - - 1 minute - 1 minute + + Some files couldn't be synced! + Certains fichiers n’ont pas pu être synchronisés ! - - %1 minutes - %1 minutes + + Syncing changes + Synchronisation des modifications - - %1 hours - %1 heures + + Syncing file %1 of %2 + Synchronisation du fichier %1 sur %2 + + + OCC::Systray - - 1 day - 1 jour + + Download + Télécharger - - %1 days - %1 jours + + Exit %1 + Quitter %1 - - - OCC::Vfs Please choose a different location. %1 is a drive. It doesn't support virtual files. @@ -6035,6 +6185,9 @@ Le serveur a répondu avec l'erreur : %2 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::Theme Please choose a different location. %1 is a network drive. It doesn't support virtual files. @@ -6044,139 +6197,129 @@ Le serveur a répondu avec l'erreur : %2 OCC::VfsDownloadErrorDialog - - Download error - Erreur de téléchargement + <p>%1 Desktop Client</p> + <p>Client de bureau %1</p> - - Error downloading - Erreur au téléchargement + + <p>%1 Desktop Client</p><p>Version %1. For more information please click <a href='%2'>here</a>.</p> + <p>Client de bureau %1</p> <p>Version %1. Pour plus d'informations, cliquez <a href='%2'>ici</a>.</p> - - could not be downloaded - ne peut pas être téléchargé + + <p><small>Using virtual files plugin: %1</small></p> + <p><small>Utilise l'extension de fichiers virtuels : %1</small></p> - - > More details - > Plus de détails + + <p>This release was supplied by %1.</p> + <p>Cette version a été fournie par %1.</p> - - More details - Plus de détails + + <p>This release was supplied by %1</p> + - - Error downloading %1 - Erreur au téléchargement %1 + + <p>Version %1. For more information please click <a href='%2'>here</a>.</p> + <p>Version %1. Pour plus d’informations, veuillez cliquer <a href='%2'>ici</a>.</p> - - %1 could not be downloaded. - %1 ne peut pas être téléchargé. + + easy/0118 + easy/0128 - - - OCC::VfsSuffix + + + OCC::UnifiedSearchResultsListModel - - - Error updating metadata due to invalid modification time - Erreur de mise à jour des métadonnées à cause d'une date de modification invalide + + Failed to fetch providers. + Échec de la récupération des fournisseurs. - - - 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 + + Failed to fetch search providers for '%1'. Error: %2 + Échec de la récupération des fournisseurs de recherche pour '%1'. Erreur : %2 - - - OCC::WebEnginePage - - Invalid certificate detected - Certificat invalide + + Search has failed for '%1'. Error: %2 + La recherche de '%1' a échoué. Erreur: %2 - - The host "%1" provided an invalid certificate. Continue? - L’hôte "%1" utilise un certificat invalide. Continuer ? + + Search has failed for '%2'. + La recherche de '%2' a échoué. - - - OCC::WebFlowCredentials + + + OCC::UpdateE2eeFolderMetadataJob - - 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. + + Failed to finalize item. + Échec de finalisation de l’élément. - - Please login with the account: %1 - Veuillez vous connecter avec le compte : %1 + + Failed to update folder metadata. + Échec du téléversement du dossier des métadonnées. - - - OCC::WelcomePage + + + OCC::UpdateE2eeFolderUsersMetadataJob - - Form - Formulaire + Could not add or remove a folder user %1, for folder %2 + Impossible d'ajouter ou de supprimer un dossier utilisateur %1, pour le dossier %2. - - Log in - Se connecter + + 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 - - Sign up with provider - S'inscrire auprès d'un fournisseur + + Could not fetch public key for user %1 + Impossible de récupérer la clé publique pour l'utilisateur %1 - - Keep your data secure and under your control - Gardez vos données en sécurité et sous votre contrôle + + Could not find root encrypted folder for folder %1 + Impossible de trouver le dossier racine chiffré pour le dossier %1 - - Secure collaboration & file exchange - Collaboration et échange de fichiers sécurisés + + Error updating metadata for a folder %1 + Erreur lors de la mise à jour des métadonnées pour un dossier %1 - - Easy-to-use web mail, calendaring & contacts - E-mail, agenda et contacts en ligne faciles à utiliser + + Failed to unlock a folder. + Échec du déverrouillage d’un dossier. + + + OCC::User - - Screensharing, online meetings & web conferences - Partage d'écran, réunions en ligne et conférences Web + + %1 notifications + %1 notifications - - Host your own server - Hébergez votre propre serveur + + Open Nextcloud Assistant in browser + Ouvrir l'assistant Nextcloud dans le navigateur - - - OCC::ownCloudGui - - Unsupported Server Version - Version du Serveur non prise en charge + + Open Nextcloud Talk in browser + Ouvrez Nextcloud Talk dans le navigateur - - 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. + + Resolve conflict + Résoudre le conflit @@ -6189,75 +6332,80 @@ Le serveur a répondu avec l'erreur : %2 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. - - Disconnected - Déconnecté + + You created + - - Disconnected from some accounts - Déconnecté de certains comptes + + You deleted + - - Disconnected from %1 - Déconnecté de %1 + + You renamed + + + + OCC::UserModel - - Disconnected from accounts: - Déconnecté des comptes : + + <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> - - Account %1: %2 - Compte %1 : %2 + + Confirm Account Removal + Confirmer le retrait du compte - - Please sign in - Veuillez vous connecter + + Remove connection + Supprimer la connexion + + + OCC::UserStatusSelectorModel - - Signed out - Session fermée + + %1 hours + %1 heures - - Account synchronization is disabled - La synchronisation est en pause + + %1 minutes + %1 minutes - - - Synchronization is paused - La synchronisation est en pause + + 1 hour + 1 heure - - Folder %1: %2 - Dossier %1 : %2 + + 1 minute + 1 minute - - Unresolved conflicts - Conflits non résolus + + 30 minutes + 30 minutes - - Up to date - À jour + + 4 hours + 4 heures - - Error during synchronization - Erreur durant la synchronisation + + 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. - - No sync folders configured - Aucun dossier de synchronisation configuré + + 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. @@ -6281,349 +6429,340 @@ Le serveur a répondu avec l'erreur : %2 macOS VFS pour %1: Une erreur est survenue. - - There are no sync folders configured. - Aucun dossier à synchroniser n'est configuré + + Less than a minute + Il y a moins d'une minute - - Checking for changes in remote "%1" - Vérification des modifications dans "%1" distant + + 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. - - Checking for changes in local "%1" - Vérification des modifications dans "%1" local + + This week + Cette semaine + + + OCC::Vfs - - Syncing %1 of %2 (%3 left) - Synchronisation de %1 sur %2 (%3 restants) + + The Virtual filesystem feature does not support a drive as sync root + - - Syncing %1 of %2 - Synchronisation %1 sur %2 + + The Virtual filesystem feature is not supported on network drives + - - Syncing %1 (%2 left) - Synchronisation de %1 (%2 restants) + + The Virtual filesystem feature requires a NTFS file system, %1 is using %2 + La fonctionnalité système de fichiers virtuels requiert un système de fichiers de type NTFS alors que %1 utilise %2. + + + OCC::VfsDownloadErrorDialog - - Syncing %1 - Synchronisation de %1 + + %1 could not be downloaded. + %1 ne peut pas être téléchargé. - - %1 (%2, %3) - %1 (%2, %3) + + > More details + > Plus de détails - - - OwncloudAdvancedSetupPage - - &Local Folder - &Dossier local + + could not be downloaded + ne peut pas être téléchargé - - Username - Nom d’utilisateur + + Download error + Erreur de téléchargement - - Local Folder - Dossier local + + Error downloading + Erreur au téléchargement - - Choose different folder - Choisir un autre dossier + + Error downloading %1 + Erreur au téléchargement %1 - - Server address - Adresse du serveur + + More details + Plus de détails + + + OCC::WebEnginePage - - Sync Logo - Logo de synchronisation + + Invalid certificate detected + Certificat invalide - - Synchronize everything from server - Tout synchroniser depuis le serveur + + The host "%1" provided an invalid certificate. Continue? + L’hôte "%1" utilise un certificat invalide. Continuer ? + + + OCC::WebFlowCredentials - - Ask before syncing folders larger than - Demander confirmation avant de synchroniser les dossiers de taille supérieure à + + <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> - - MB - Trailing part of "Ask confirmation before syncing folder larger than" - Mo + Please login with the account: %1 + Veuillez vous connecter avec le compte : %1 - - Ask before syncing external storages - Demander confirmation avant de synchroniser des stockages externes + + Please login with the user: %1 + - - Choose what to sync - Sélectionner le contenu à synchroniser + + You have been logged out of %1 as user %2. Please login again + - - Keep local data - Conserver les données locales + 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 - - <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> + Easy-to-use web mail, calendaring & contacts + Courrier électronique, calendrier et contacts en ligne faciles à utiliser - - Erase local folder and start a clean sync - Effacer le dossier local et démarrer une synchronisation complète + + Form + Formulaire - - - OwncloudHttpCredsPage - - &Username - &Nom d’utilisateur + + Host your own server + Hébergez votre propre serveur - - &Password - &Mot de passe + + Keep your data secure and under your control + Gardez vos données en sécurité et sous votre contrôle - - - OwncloudSetupPage - - - TextLabel - Étiquette de texte + + Log in + Se connecter - - Logo - Logo + Screensharing, online meetings & web conferences + Partage d'écran, réunions en ligne et conférences Web - - Server address - Adresse du serveur + Secure collaboration & file exchange + Collaboration et échange de fichiers sécurisés - - 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. + + Sign up with provider + Se connecter avec un fournisseur - - - QObject + + + OCC::ownCloudGui - - New folder - Nouveau dossier + + %1: %2 + %1 : %2 - - Failed to create debug archive - Échec lors de la création de l'archive de déboguage + + Account %1: %2 + Compte %1 : %2 - - Could not create debug archive in selected location! - Impossible de créer l'archive de débogage à l'emplacement indiqué ! + + Account synchronization is disabled + La synchronisation est en pause - - You renamed %1 - Vous avez renommé %1 + + Disconnected from %1 + Déconnecté de %1 - - You deleted %1 - Vous avez supprimé %1 + + Disconnected from accounts: + Déconnecté des comptes : - - You created %1 - Vous avez créé %1 + + Disconnected from some accounts + Déconnecté de certains comptes - - You changed %1 - Vous avez modifié %1 + + Error during synchronization + Erreur durant la synchronisation - - Synced %1 - %1 a été synchronisé + + Folder %1: %2 + Dossier %1 : %2 - - - %nd - delay in days after an activity - %nj.%njrs%njrs + + + macOS VFS for %1: A problem was encountered. + macOS VFS pour %1: Une erreur est survenue. - - in the future - Dans le futur + + macOS VFS for %1: Last sync was successful. + macOS VFS pour %1: La dernière synchronisation a réussi. - - - %nh - delay in hours after an activity - %nh%nh%nh + + + macOS VFS for %1: Sync is running. + macOS VFS pour %1: Synchronisation en cours. - - now - A l'instant + + No sync folders configured + Aucun dossier de synchronisation configuré - - 1m - one minute after activity date and time - 1m + + Please sign in + Veuillez vous connecter - - - %nm - delay in minutes after an activity - %nmin%nmin%nmin + + + Synchronization is paused + La synchronisation est en pause - - Some time ago - Il y a quelque temps + + Terms of service + Conditions d'utilisation - - %1: %2 - this displays an error string (%2) for a file %1 - %1 : %2 + + The server on account %1 runs an old and unsupported version %2. Using this client with unsupported server versions is untested and potentially dangerous. Proceed at your own risk. + - - 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. + + 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. - - - ResolveConflictsDialog - - Solve sync conflicts - Résoudre les conflits de synchronisation + + There are no sync folders configured. + Aucun dossier à synchroniser n'est configuré - - - %1 files in conflict - indicate the number of conflicts to resolve - %1 fichier en conflit%1 fichiers en conflit%1 fichiers en conflit + + + Unresolved conflicts + Conflits non résolus - - 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. + + Unsupported Server Version + Version du Serveur non prise en charge - - All local versions - Toutes les versions locales + + Up to date + À jour - - All server versions - Toutes les versions serveur + + 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. + + + OCC::sesSnackBar - - Resolve conflicts - Résoudre les conflits + + Success + Réussite + + + OwncloudAdvancedSetupPage - - Cancel - Annuler + + &Keep local data + - - - ShareDelegate - - Create a new share link - Créer un nouveau lien de partage + + &Local Folder + &Dossier local - - Copied! - Copié ! + + <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 dans le dossier local sera effacé pour commencer une synchronisation propre à partir du serveur.</p><p>Ne cochez pas cette case si le contenu local doit être téléchargé dans le dossier du serveur..</p></body></html> - - Share options - Options de partage + <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> - - Copy share link location - Copier le lien de partage + + Ask before syncing external storages + Confirmation avant de synchroniser des stockages externes - - - ShareDetailsPage - - An error occurred setting the share password. - Une erreur est survenue lors de la configuration du mot de passe de partage. + + Ask before syncing folders larger than + Demander confirmation avant de synchroniser les dossiers de taille supérieure à - - Edit share - Modifier le partage + + Ask for confirmation before synchroni&zing folders larger than + - - Dismiss - Révoquer + + Ask for confirmation before synchronizing e&xternal storages + - - Share label - Libellé du partage + + Choose different folder + Choisir un autre dossier - - - Allow upload and editing - Autoriser le téléversement et l'édition + + Erase local folder and start a clean sync + Effacer le dossier local et démarrer une synchronisation complète - - View only - Afficher seulement + + Keep local data + Conserver les données locales - - File drop (upload only) - Dépôt de fichiers (téléversement seulement) + + Local Folder + Dossier local @@ -6631,9 +6770,9 @@ Le serveur a répondu avec l'erreur : %2 Permettre le repartage - - Hide download - Masquer le téléchargement + + Server + @@ -6646,14 +6785,14 @@ Le serveur a répondu avec l'erreur : %2 Protéger par mot de passe - - Set expiration date - Définir une date d'expiration + + Start a &clean sync (Erases the local folder!) + - - Note to recipient - Note au destinataire + + Sync Logo + Logo de synchronisation @@ -6665,463 +6804,519 @@ Le serveur a répondu avec l'erreur : %2 Unshare Cesser le partage + + + OwncloudHttpCredsPage - - Add another link - Ajouter un autre lien + + &Password + &Mot de passe - - Share link copied! - Lien de partage copié ! + + &Username + &Nom d’utilisateur + + + OwncloudOAuthCredsPage - - Copy share link - Copier le lien de partage + Copy link + Copier le lien - - - ShareView - - Password required for new share - Mot de passe requis pour le nouveau partage + Please switch to your browser to proceed. + Merci de basculer vers votre navigateur pour terminer. - - Share password - Mot de passe du partage + Re-open Browser + Redémarrez votre navigateur + + + OwncloudSetupPage - - Shared with you by %1 - Partagé avec vous par %1 + + Register with a provider + - - Expires in %1 - Expire dans %1 + + TextLabel + Étiquette de texte - - Sharing is disabled - Le partage est désactivté + + 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. + + + OwncloudWizardResultPage - - This item cannot be shared. - L'élément ne peut pas être partagé. + + Your entire account is synced to the local folder + + + + + QObject + + + %n day ago + + + + + + + + + %n days ago + + + + + + + + + %n hour ago + + + + + + + + + %n hours ago + + + + + + + + + %n minute ago + + + + + + + + + %n minutes ago + + + + + + + + + %nd + + + + %nd + + + + + %nh + + + + %nh + + + + + %nm + + + + %nm + - - Sharing is disabled. - Le partage est désactivé. + + 1m + 1m - - - ShareeSearchField - - Search for users or groups… - Rechercher des utilisateurs ou des groupes... + + Could not create debug archive in selected location! + Impossible de créer une archive de débogage à l’emplacement sélectionné ! Sharing is not available for this folder Le partage n'est pas disponible pour ce dossier - - - SyncJournalDb - - Failed to connect database. - Impossible de connecter la base de données. + + in the future + Dans le futur - - - SyncStatus - - Sync now - Synchroniser maintenant + + Less than a minute ago + - - Resolve conflicts - Résoudre les conflits + + New folder + Nouveau dossier - - - TalkReplyTextField - - Reply to … - Répondre à... + + now + A l'instant - - Send reply to chat message - Envoyer la réponse dans la discussion + + 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. - - - TrayWindowHeader - - Open local or group folders - Ouvrir des dossiers locaux ou de groupe + + Some time ago + Il y a quelque temps - - More apps - Plus d'applications + + Synced %1 + %1 a été synchronisé - - Open %1 in browser - Ouvrir %1 dans le navigateur + + 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. - - - UnifiedSearchInputContainer - - Search files, messages, events … - Rechercher des fichiers, des messages, des événements … + + You changed %1 + Vous avez modifié %1 - - - UnifiedSearchPlaceholderView - - Start typing to search - Commencez à écrire pour rechercher + + You created %1 + Vous avez créé %1 - - - UnifiedSearchResultFetchMoreTrigger - - Load more results - Charger plus de résultats + + You deleted %1 + Vous avez supprimé %1 - - - UnifiedSearchResultItemSkeleton - - Search result skeleton. - Squelette de résultat de recherche. + + You renamed %1 + Vous avez renommé %1 - - - UnifiedSearchResultListItem - - - Load more results - Charger plus de résultats + + + ResolveConflictsDialog + + + %1 files in conflict + + %1 fichier in conflict + %1 files in conflict + %1 fichiers en conflit + - - - UnifiedSearchResultNothingFound - - No results for - Aucun résultat pour + + All local versions + Toutes les versions locales - - - UnifiedSearchResultSectionItem - - Search results section %1 - Section de résultats de recherche %1 + + All server versions + Toutes les versions serveur - - - UserLine - - Switch to account - Utiliser ce compte + + 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. - - Current account status is online - Le statut actuel du compte est "en ligne" + + Resolve conflicts + Résoudre les conflits - - Current account status is do not disturb - Le statut actuel du compte est "ne pas déranger" + + Solve sync conflicts + Résoudre les conflits de synchronisation + + + SesTrayHeader - - Account actions - Actions du compte + + Open Nextcloud in browser + Ouvrir HiDrive Next dans le navigateur - - Set status - Définir le statut + + Website + Site Web + + + ShareDelegate - - - Log out - Se déconnecter + + Copied! + Copié ! - - - Log in - Se connecter + + Copy share link location + Copier le lien de partage - - Remove account - Retirer le compte + + Create a new share link + Créer un nouveau lien de partage - - - UserStatusSelector + + + ShareDetailsPage - - Online status - Statut en ligne + + Add another link + Ajouter un autre lien - - Online - En ligne + + Allow resharing + Permettre le repartage - - Away - Absent(e) + + Allow upload and editing + Autoriser le téléversement et l'édition - - Do not disturb - Ne pas déranger + + An error occurred setting the share password. + Une erreur est survenue lors de la configuration du mot de passe de partage. - - Mute all notifications - Désactiver toutes les notifications + + Copy share link + Copier le lien - - Invisible - Invisible + + Custom Permissions + Autorisations personnalisées - - Appear offline - Apparaitre hors ligne + Edit share + Modifier le partage - - Status message - Message de statut + + Enter the note to recipient + Saisir la remarque à l’attention du destinataire - - What is your status? - Quel est votre statut ? + + File drop (upload only) + Dépôt de fichiers (envoi uniquement) - - Clear status message after - Effacer le message de statut après + + Hide download + Masquer le téléchargement - - Cancel - Annuler + + Note to recipient + Note au destinataire - - Clear status message - Effacer le message de statut + + Password protect + Protéger par mot de passe - - Set status message - Définir le message de statut + + Set expiration date + Définir une date d'expiration - - - Utility - - %L1 B - %L1 octets + Share label + Libellé du partage - - %L1 TB - %L1 To + + Share link copied! + Lien copié ! - - %L1 GB - %L1 Go + + Unshare + Cesser le partage - - %L1 MB - %L1 Mo + + View only + Afficher seulement + + + ShareView - - %L1 KB - %L1 Ko + + Expires in %1 + Expire dans %1 - - - %n year(s) - %n an%n ans%n ans - - - - %n month(s) - %n mois%n mois%n mois - - - - %n day(s) - %n jour%n jours%n jours - - - - %n hour(s) - %n heure%n heures%n heures + + + Password required for new share + Mot de passe requis pour le nouveau partage - - - %n minute(s) - %n minute%n minutes%n minutes + + + Share password + Mot de passe du partage - - - %n second(s) - %n seconde%n secondes%n secondes + + + Shared with you by %1 + Partagé avec vous par %1 - - %1 %2 - %1 %2 + + Sharing is disabled + Le partage est désactivté - - - ValidateChecksumHeader - - The checksum header is malformed. - L’en-tête de la somme de contrôle est mal formé. + + Sharing is disabled. + Le partage est désactivé. - - 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 » + + This item cannot be shared. + L'élément ne peut pas être partagé. + + + ShareeSearchField - - 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" + + Search for users or groups… + Rechercher des utilisateurs ou des groupes... - - - main.cpp - - System Tray not available - Zone de notification système non disponible + + Sharing is not available for this folder + Le partage n'est pas disponible pour ce dossier + + + SyncJournalDb - - %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. + + Failed to connect database. + Impossible de connecter la base de données. - - - nextcloudTheme::aboutInfo() + + + SyncStatus - - <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> + + Sync now + Synchroniser maintenant - - - progress + + + TalkReplyTextField - - Virtual file created - Fichier virtuel créé + + Reply to … + Répondre à... - - Replaced by virtual file - Remplacé par un fichier virtuel + + Send reply to chat message + Envoyer la réponse dans la discussion + + + TestSetUserStatusDialog - - Downloaded - Reçu + + 7 days + 7 jours + + + TrayFoldersMenuButton - - Uploaded - Téléversé + + Files + Fichiers - - 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. + Group folder button + Bouton du dossier de groupes - - 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. + + Open %1 in file explorer + Ouvrir %1 dans l'explorateur de fichiers - - Deleted - Supprimé + + Open group folder "%1" + Ouvrir le dossier de groupes "%1" - - Moved to %1 - Déplacé vers %1 + + Open local folder + Ouvrir le dossier local - - Ignored - Exclu + + Open local folder "%1" + Ouvrir le dossier local « %1 » - - Filesystem access error - Erreur d'accès au système de fichiers + + Open local or group folders + Ouvrir des dossiers locaux ou de groupe - - Error - Erreur + + User group and local folders menu + Menu de groupe d'utilisateurs et dossiers locaux + + + TrayWindowHeader - - Updated local metadata - Métadonnées locales mises à jour + + More apps + Plus d’applications - - Updated local virtual files metadata - Fichiers locaux virtuels de métadonnées mis à jour + + Open %1 in browser + Ouvrir %1 dans le navigateur + + + UnifiedSearchInputContainer Updated end-to-end encryption metadata @@ -7133,35 +7328,50 @@ Le serveur a répondu avec l'erreur : %2 Unknown Inconnu + + + UnifiedSearchPlaceholderView - - downloading - téléchargement de + + Start typing to search + Commencez à écrire pour rechercher + + + UnifiedSearchResultFetchMoreTrigger uploading téléversement en cours + + + UnifiedSearchResultNothingFound Downloading Téléchargement + + + UnifiedSearchResultSectionItem - - deleting - suppression + + Search results section %1 + Section de résultats de recherche %1 + + + UserLine Uploading Téléversement - - moving - déplacement + + Remove account + Retirer le compte @@ -7169,19 +7379,22 @@ Le serveur a répondu avec l'erreur : %2 Suppression - - ignoring - Ignore + + Switch to account + Utiliser ce compte + + + UserStatusSelector Moving Déplacement - - error - erreur + + Away + Absent(e) @@ -7212,142 +7425,207 @@ Le serveur a répondu avec l'erreur : %2 theme - - Status undefined - Statut indéfini + + Invisible + Invisible - - Waiting to start sync - Synchronisation en attente + + Mute all notifications + Désactiver toutes les notifications - - Sync status is unknown - Le statut de synchronisations est inconnu + + Online + En ligne - - Waiting to start syncing - En attente du démarrage de la synchronisation + + Online status + Statut en ligne - - Sync is running - Synchronisation en cours + + Set status message + Définir le message de statut - - Sync Success - Synchronisation réussie + + Status message + Message de statut - - Sync Success, some files were ignored. - Synchronisation terminée avec succès, certains fichiers ont été exclus. + + What is your status? + Quel est votre statut ? + + + Utility - - Sync Error - Erreur de synchronisation + + %L1 B + %L1 octets - - Setup Error - Erreur de configuration + + %L1 GB + %L1 Go - - Aborting … - Annulation... + + %L1 KB + %L1 Ko - - Sync was successful - Synchronisation réussie + + %L1 MB + %L1 Mo - - Sync was successful but some files were ignored - La syncronisation a réussi mais certains fichiers ont été ignorés + + %L1 TB + %L1 To + + + %n day(s) + + + + + + + + + %n hour(s) + + + + + + + + + %n minute(s) + + + + + + + + + %n month(s) + + + + + + + + + %n second(s) + + + + + + + + + %n year(s) + + + + + + + + + ValidateChecksumHeader - - Error occurred during sync - Une erreur est survenue pendant la synchronisation + + The checksum header contained an unknown checksum type '%1' + - - Error occurred during setup - Une erreur est survenue pendant l'installation + + The checksum header contained an unknown checksum type "%1" + L’en-tête de la somme de contrôle contenait un type de somme de contrôle inconnu « "%1" » - - Preparing to sync - Préparation à la synchronisation + + The checksum header is malformed. + L’en-tête de la somme de contrôle est mal formé. - - Stopping sync - Arrêt de la synchronisation + + The downloaded file does not match the checksum, it will be resumed. + - - Sync is paused - La synchronisation est en pause + + 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" - - - utility + + + main.cpp - - Could not open browser - Impossible de démarrer le navigateur + + %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. + - - 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é. + + %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. - - Could not open email client - Impossible d'ouvrir le client de messagerie + + System Tray not available + Zone de notification système non disponible + + + nextcloudTheme::about() - - 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é ? + <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 - - Always available locally - Toujours disponible localement + + Deleted + Supprimé - - Currently available locally - Actuellement disponible en local + + Deleting + Suppression - - Some available online only - Certains sont disponibles en ligne seulement + + Downloaded + Reçu - - Available online only - Disponible seulement en ligne + + downloading + téléchargement de - - Make always available locally - Toujours rendre disponible localement + + Downloading + Téléchargement - - Free up local space - Libérer de l'espace local + + error + erreur @@ -7361,14 +7639,14 @@ Le serveur a répondu avec l'erreur : %2 OCC::AbstractPropagateRemoteDeleteEncrypted - - 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". + + Filesystem access error + Erreur d'accès au système de fichiers - - "%1 Failed to unlock encrypted folder %2". - "%1 Impossible de déverrouiller le dossier chiffré %2". + + Ignored + Ignoré @@ -7387,244 +7665,230 @@ Le serveur a répondu avec l'erreur : %2 OCC::OAuth - - Error returned from the server: <em>%1</em> - Erreur renvoyée par le serveur: <em>%1</em> + + Ignoring + Ignoré - - 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> + + Moved to %1 + Déplacé vers %1 - - Empty JSON from OAuth2 redirect - Vider le JSON de la redirection OAuth2 + + moving + déplacement - - 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> + + Moving + Déplacement - - The reply from the server did not contain all expected fields - La réponse du serveur ne contient pas tous les champs attendus + + Replaced by virtual file + Remplacé par un fichier virtuel - - <h1>Login Error</h1><p>%1</p> - <h1>Erreur de connexion</h1><p>%1</p> + + 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. - - <h1>Wrong account</h1><p>You logged in with the account <em>%1</em>, but must log in with the account <em>%2</em>.<br>Please log out of %3 in another tab, then <a href='%4'>click here</a> and log in with %2.</p> - <h1>Erreur de compte</h1><p>Vous êtes connecté(e) avec le compte <em>%1</em>, mais devez vous connecter avec le compte <em>%2</em>.<br>Merci de vous déconnecter de %3 dans un autre onglet, puis <a href='%4'>cliquez ici</a> et connectez-vous avec %2.</p> + + 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. - - - OCC::OwncloudOAuthCredsPage - - Connect to %1 - Connexion à %1 + + Unknown + Inconnu - - Login in your browser - Connectez vous sur votre navigateur + + Updated local metadata + Métadonnées locales mises à jour - - - OCC::ShareUserLine - - Username - Nom d’utilisateur + + Updated local virtual files metadata + Métadonnées des fichiers virtuels locaux mises à jour - - Can edit - Peut modifier + + updating local metadata + Mise à jour des métadonnées locales - - Note: - Note : + + Updating local metadata + Mise à jour des méta-données locales - - Password: - Mot de passe : + + Updating local virtual files metadata + Mise à jour des méta-données des fichiers virtuels - - Expires: - Expire le : + + Uploaded + Envoyé - - - OwncloudOAuthCredsPage - - Please switch to your browser to proceed. - Merci de basculer vers votre navigateur pour terminer. + + uploading + envoi - - An error occurred while connecting. Please try again. - Une erreur s'est produite lors de la connexion. Veuillez ré-essayer. + + Uploading + Téléversement - - Re-open Browser - Redémarrez votre navigateur + + Virtual file created + Fichier virtuel créé + + + theme - - Copy link - Copier le lien + + Aborting … + Annulation... - - - TrayFoldersMenuButton - - Open local or group folders - Ouvrir des dossiers locaux ou de groupe + + Error occurred during setup + Une erreur est survenue pendant l'installation - - Open local folder - Ouvrir le dossier local + + Error occurred during sync + Une erreur est survenue pendant la synchronisation - - Connected - Connecté + + Preparing to sync + Préparation à la synchronisation - - Disconnected - Déconnecté + + Setup Error + Erreur de configuration - - Group folder button - Bouton du dossier de groupes + + Status undefined + Statut indéfini - - Open local folder "%1" - Ouvrir le dossier local « %1 » + + Stopping sync + Arrêt de la synchronisation - - Open group folder "%1" - Ouvrir le dossier de groupes "%1" + + Sync Error + Erreur de synchronisation - - Open %1 in file explorer - Ouvrir %1 dans l'explorateur de fichiers + + Sync is paused + La synchronisation est en pause - - User group and local folders menu - Menu de groupe d'utilisateurs et dossiers locaux + + Sync is running + Synchronisation en cours - - - Window - - Nextcloud desktop main dialog - Boîte de dialogue principale du bureau Nextcloud + + Sync status is unknown + Le statut de synchronisations est inconnu - - Current account - Compte actuel + + Sync Success + Synchronisation réussie - - - Resume sync for all - Relancer toutes les synchronisations + + Sync Success, some files were ignored. + Synchronisation terminée avec succès, certains fichiers ont été ignorés. - - - Pause sync for all - Suspendre toutes les synchros + + Sync was successful + Synchronisation réussie - - Add account - Ajouter un compte + + Sync was successful but some files were ignored + La syncronisation a réussi mais certains fichiers ont été ignorés - - Add new account - Ajouter un nouveau compte + + Waiting to start sync + Synchronisation en attente - - Settings - Paramètres + + Waiting to start syncing + En attente du démarrage de la synchronisation + + + utility - - Exit - Quitter + + Always available locally + Toujours disponible localement - - Current account avatar - Avatar actuel du compte + + Available online only + Disponible seulement en ligne - - Current account status is online - Le statut actuel du compte est "en ligne" + + Could not open browser + Impossible de démarrer le navigateur - - Current account status is do not disturb - Le statut actuel du compte est "ne pas déranger" + + Could not open email client + Impossible d'ouvrir le client de messagerie - - Account switcher and settings menu - Sélecteur de compte et menu des paramètres + + Currently available locally + Actuellement disponible en local - - Open Nextcloud Talk in browser - Ouvrez Nextcloud Talk dans le navigateur + + Free up local space + Libérer de l'espace local - - More apps - Plus d'applications + + Make always available locally + Toujours rendre disponible localement - - Open %1 in browser - Ouvrir %1 dans le navigateur + + Some available online only + Certains sont disponibles en ligne seulement - - Unified search results list - Liste de résultats de recherche unifiée + + 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é. - - - nextcloudTheme::about() - - <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> + + 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é ? - - \ No newline at end of file + + diff --git a/translations/client_nl.ts b/translations/client_nl.ts index a2e763e2b7891..44580b580379b 100644 --- a/translations/client_nl.ts +++ b/translations/client_nl.ts @@ -1,36 +1,149 @@ - - + + + + + + &Launch on system startup + + + + + can edit + + + + + could not create folder %1 + + + + + Create debug archive + + + + + Create Folder + + + + + File Drop (Upload Only) + + + + + Last Sync was successful. + + + + + New %1 Update Ready + + + + + ok + + + + + Open %1 in Browser + + + + + Open Local Folder + + + + + Password Protect + + + + + Server Address + + + + + Setup Error. + + + + + share label + + + + + Show call notifications + + + + + Show server &notifications + + + + + There was an invalid response to an authenticated webdav request + + + + + timeout + + + + + Undefined State. + + + + + updating local virtual files metadata + Metagegevens van lokale virtuele bestanden bijwerken + + + + Use &monochrome icons + + + + ActivityItem - - Open %1 locally - %1 lokaal openen + + In %1 + In %1 - - In %1 - In %1 + + Open %1 locally + %1 lokaal openen - - + + ActivityItemContent - - Open file details - Bestandsdetails openen + + Dismiss + Negeren - - Dismiss - Negeren + + Open file details + Bestandsdetails openen - - + + ActivityList - - Activity list - Activiteitenlijst + + Activity list + Activiteitenlijst @@ -46,129 +159,133 @@ CallNotificationDialog - - Talk notification caller avatar - Talk notificatie beller avatar + + Answer Talk call notification + Beantwoord Talk oproepmelding - - Answer Talk call notification - Beantwoord Talk oproepmelding + + Decline + Afwijzen - - Decline - Afwijzen + + Decline Talk call notification + Afwijzingsmelding voor gesprek - - Decline Talk call notification - Wijs Talk oproepmelding af + + Talk notification caller avatar + Spraakmelding beller avatar - - + + CloudProviderWrapper - - %1 (%2, %3) - %1 (%2, %3) + + %1 (%2, %3) + %1 (%2, %3) - - Checking for changes in "%1" - Controleren op wijzigingen in '%1' + + Checking for changes in '%1' + - - Syncing %1 of %2 (%3 left) - Synchroniseer %1 van %2 (%3 over) + + Checking for changes in "%1" + Controleren op wijzigingen in '%1' - - Syncing %1 of %2 - Synchroniseren %1 van %2 + + Help + Help - - Syncing %1 (%2 left) - Synchroniseren %1 (%2 over) + + Log out + Uitloggen - - Syncing %1 - Synchroniseren %1 + + No recently changed files + Geen recent gewijzigde bestanden - - - No recently changed files - Geen recent gewijzigde bestanden + + Open website + Openen website - - Sync paused - Synchroniseren gepauzeerd + + Pause synchronization + Pauzeer synchronisatie - - Syncing - Synchroniseren + + Quit sync client + Afsluiten synchronisatieclient - - Open website - Openen website + + Recently changed + Recent gewijzigd - - Recently changed - Recent gewijzigd + + Settings + Instellingen - - Pause synchronization - Pauzeer synchronisatie + + Sync paused + Synchroniseren gepauzeerd - - Help - Help + + Syncing + Synchroniseren - - Settings - Instellingen + + Syncing %1 + Synchroniseren %1 - - Log out - Uitloggen + + Syncing %1 (%2 left) + Synchroniseren %1 (%2 over) - - Quit sync client - Afsluiten synchronisatieclient + + Syncing %1 of %2 + Synchroniseren %1 van %2 - - + + + Syncing %1 of %2 (%3 left) + Synchroniseer %1 van %2 (%3 over) + + + ConflictDelegate - - Local version - Lokale versie + + Local version + Lokale versie - - Server version - Server versie + + Server version + Serverversie - - + + CurrentAccountHeaderButton - - Current account - + + Account switcher and settings menu + Accountswitcher en instellingenmenu @@ -183,14 +300,14 @@ - - Add account - + + Current account + Huidige account - - Add new account - + + Current account avatar + Huidige gebruikersavatar @@ -226,17 +343,17 @@ EditFileLocallyLoadingDialog - - Opening file for local editing - Bestand openen voor lokaal bewerken + + Opening file for local editing + Bestand openen voor lokaal bewerken - - + + EmojiPicker - - No recent emojis - Geen recente emojis + + No recent emojis + Geen recente emojis @@ -273,38 +390,39 @@ ErrorBox - - Error - Fout + + Error + Fout - - - FileDetailsPage + + + FakeHangingReply - - Dismiss - Negeren + + Operation canceled + Operatie geannuleerd + + + FileDetailsPage - - Activity - Activiteit + Activity + Activiteit - - Sharing - Delen + Sharing + Delen - - + + FileDetailsWindow - - File details of %1 · %2 - Bestandseigenschappen van %1 · %2 + + File details of %1 · %2 + Bestandseigenschappen van %1 · %2 - - + + FileProviderEvictionDialog @@ -321,176 +439,212 @@ Reload Herlaad - - + + FileProviderFastEnumerationSettings - - Enable fast sync - Snelle sync inschakelen + + 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. + 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 + + Delete + Verwijderen - - + + FileProviderSettings - - Virtual files settings - Virtuele bestandsinstellingen + + Advanced + Geavanceerd - - General settings - Algemene instellingen + + Enable virtual files + Virtuele bestanden inschakelen - - Enable virtual files - Virtuele bestanden inschakelen + + General settings + Algemene instellingen - - Advanced - Geavanceerd + + Signal file provider domain + - - Signal file provider domain - + + 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 - - %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... - Verwijder lokale kopieën... + + Local storage use + Gebruik lokale opslag - - + + FileProviderSyncStatus - - Syncing - Synchroniseren + + All synced! + Alles gesynchroniseerd! + + + FileSystem - - All synced! - Alles gesynchroniseerd! + Could not make directories in trash + Kan geen mappen maken in de prullenbak - - - FileSystem - - Error removing "%1": %2 - Fout bij verwijderen '%1': %2 + + Could not move '%1' to '%2' + - - Could not remove folder "%1" - Kan map "%1" niet verwijderen + Could not move "%1" to "%2" + Kan "%1" niet verplaatsen naar "%2" - - Could not make directories in trash - Kan geen mappen maken in de prullenbak + + Could not remove folder "%1" + Kan map "%1" niet verwijderen - - - Could not move "%1" to "%2" - Kan "%1" niet verplaatsen naar "%2" + + Error removing "%1": %2 + Fout bij verwijderen '%1': %2 - - Moving to the trash is not implemented on this platform - Verplaatsen naar de prullenbak wordt niet ondersteund op dit platform + Moving to the trash is not implemented on this platform + Verplaatsen naar de prullenbak wordt niet ondersteund op dit platform - - + + Flow2AuthWidget - - Browser Authentication - Browserauthenticatie + + An error occurred while connecting. Please try again. + Er is een fout opgetreden tijdens het verbinden. Probeer het opnieuw. - - Logo - Logo + + Browser Authentication + Browserauthenticatie - - Switch to your browser to connect your account - Schakel over naar je browser om je account te verbinden + + Logo + Logo - - An error occurred while connecting. Please try again. - Er is een fout opgetreden tijdens het verbinden. Probeer het opnieuw. + + Switch to your browser to connect your account + Schakel over naar je browser om je account te verbinden - - + + + FolderWizardSelectiveSync + + + Add Folder Sync + Mapsynchronisatie toevoegen + + + + Step 3 of 3: Selektive Synchronisation + Stap 3 van 3: Selektieve synchronisatie + + + FolderWizardSourcePage - - Pick a local folder on your computer to sync - Kies een map op je computer om te synchroniseren + + &Choose + &Kiezen - - &Choose … - &Kies ... + &Choose … + &Kies ... - - + + 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 + 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 - - Select a remote destination folder - Kies een externe doelmap + + 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 + + Create folder + Maak map - - Refresh - Vernieuwen + + Folders + Mappen - - 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 + + + Select a remote destination folder + Kies een externe doelmap + + + + Step 2 of 3: Directory in your %1 + Stap 2 van 3: Directory in uw %1 + + + MainWindow @@ -507,44 +661,55 @@ New activities - - + + OCC::AbstractNetworkJob - - Connection timed out - De verbindingstijd is verstreken + + 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" - - 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::AbstractPropagateRemoteDeleteEncrypted + + "%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::Account - - File %1 is already locked by %2. - Bestand %1 is al vergrendeld door %2. + + 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 + + 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 + + Unlock operation on %1 failed with error %2 + Ontgrendeling van %1 mislukt met fout %2 - - + + OCC::AccountManager @@ -556,20 +721,20 @@ Should an account import be attempted? %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. Should the account be imported? - 1 account van een eerdere desktop cliënt is gevonden. Moet dit account geïmporteerd worden? + 1 account van een eerdere desktop cliënt is gevonden. Moet dit account geïmporteerd worden? - - - - Legacy import - Legacy import + An existing configuration from a legacy desktop client was detected. +Should an account import be attempted? + Een bestaande configuratie van een vorige desktopclient werd herkend. +Moet er worden geprobeerd een account te importeren? @@ -582,94 +747,91 @@ Should the account be imported? Overslaan - - Successfully imported account from legacy client: %1 - Account import van eerdere cliënt %1 geslaagd + + Import + Import - - Could not import accounts from legacy client configuration. - Kon geen accounts importeren van legacy client configuratie. + + Legacy import + Legacy import - - - OCC::AccountSettings - - Storage space: … - Opslagruimte: ... + + Skip + skip - - 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 + Successfully imported account from legacy client: %1 + Account import van eerdere cliënt %1 geslaagd + + + OCC::AccountSettings - - - - Cancel - Annuleren + + (experimental) + (experimenteel) - - Apply - Toepassen + + %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. - - Connected with <server> as <user> - Verbonden met <server> als <user> + + %1 as %2 + %1 als %2 - - Synchronize all - Alles synchroniseren + + %1 as <i>%2</i> + - - 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 + + <p>Could not create local folder <i>%1</i>.</p> + <p>Kan lokale map <i>%1</i> niet maken.</p> - - Virtual file sync - Virtuele bestandssynchronisatie + + <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> - - Connection settings - Verbindingsinstellingen + + Apply + Toepassen - - End-to-end Encryption with Virtual Files - End-to-end versleuteling met virtuele bestanden + + Apply manual changes + Handmatige wijzigingen toepassen - - 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". + + Availability + Beschikbaarheid - - Do not encrypt folder - Map niet versleutelen + + Cancel + Annuleren - - Encrypt folder - Versleutel map + + Choose what to sync + Kies wat je wilt synchroniseren @@ -684,29 +846,29 @@ Should the account be imported? <b>Deze actie is onomkeerbaar. Weet je het zeker?</b> - - No account configured. - Geen account ingesteld. + + Connected with <server> as <user> + Verbonden met <server> als <user> - - Disable encryption - Encryptie deactiveren + + Connecting to %1 … + Verbinden met %1 ... - - Display mnemonic - Geheugensteun weergeven + + Connection settings + Verbindingsinstellingen - - End-to-end encryption has been enabled for this account - Begin-tot-eind versleuteling is ingeschakeld voor dit account + + Could not encrypt folder because the folder does not exist anymore + Kon map niet versleutelen omdat de map niet meer bestaat - - Warning - Waarschuwing + + Create new folder + Maak nieuwe map aan @@ -724,254 +886,239 @@ Should the account be imported? De map heeft een synchronisatiefout. Versleuteling van de map is mogelijk als de synchronisatie gelukt is. - - 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? + + Disable end-to-end encryption for %1? + Begin-tot-eind versleuteling uitzetten voor %1? - - 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. + + Disable support + Ondersteuning uitschakelen - - Encryption failed - Versleuteling mislukt + + Disable virtual file support … + Ondersteuning voor virtuele bestanden uitschakelen... - - Could not encrypt folder because the folder does not exist anymore - Kon map niet versleutelen omdat de map niet meer bestaat + + Disable virtual file support? + Ondersteuning voor virtuele bestanden uitschakelen? - - - Open folder - Map openen + + Display mnemonic + Geheugensteun weergeven - - Encrypt - Versleutelen + + Do not encrypt folder + Map niet versleutelen - - - Edit Ignored Files - Genegeerde bestanden bewerken + + Edit Ignored Files + Genegeerde bestanden bewerken - - - Create new folder - Maak nieuwe map aan + + Enable encryption + - - - Availability - Beschikbaarheid + + Enable virtual file support %1 … + Virtuele bestandsondersteuning inschakelen %1... - - Choose what to sync - Kies wat je wilt synchroniseren + + Encrypt + Versleutelen - - Force sync now - Synchronisatie nu forceren + + Encrypt folder + Versleutel map - - Restart sync - Synchronisatie herstarten + + Encryption failed + Versleuteling mislukt - - Resume sync - Synchronisatie hervatten + + End-to-end Encryption + Begin-tot-eind versleuteling - - Pause sync - Synchronisatie pauzeren + + End-to-end encryption has been enabled for this account + Begin-tot-eind versleuteling is ingeschakeld voor dit account - - Remove folder sync connection - Verwijder verbinding voor mapsynchronisatie + + 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. - - 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? - - Enable virtual file support %1 … - Virtuele bestandsondersteuning inschakelen %1... + + End-to-end encryption mnemonic + Geheugensteun voor begin-tot-eind versleuteling - - (experimental) - (experimenteel) + + End-to-end Encryption with Virtual Files + End-to-end versleuteling met virtuele bestanden - - Folder creation failed - Map maken mislukt + + Expand Memory + Geheugen uitbreiden - - <p>Could not create local folder <i>%1</i>.</p> - <p>Kan lokale map <i>%1</i> niet maken.</p> + + Folder creation failed + Map maken mislukt - - Confirm Folder Sync Connection Removal - Bevestig het verwijderen van de verbinding voor mapsynchronisatie + + Force sync now + Synchronisatie nu forceren - - <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> + + https://wl.hidrive.com/easy/0057 + https://wl.hidrive.com/easy/0097 - - Remove Folder Sync Connection - Verwijder verbinding voor mapsynchronisatie + + No %1 connection configured. + Geen %1 connectie geconfigureerd. - - Disable virtual file support? - Ondersteuning voor virtuele bestanden uitschakelen? + + No account configured. + Geen account ingesteld. - - 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 connection to %1 at %2. + Geen verbinding met %1 op %2. - - Disable support - Ondersteuning uitschakelen + Obtaining authorization from the browser. <a href='%1'>Click here</a> to re-open the browser. + Autorisatie van de browser wordt verkregen. <a href='%1'>Klik hier</a> om de browser te heropenen. - - End-to-end encryption mnemonic - Geheugensteun voor begin-tot-eind versleuteling + + Open folder + Map openen - - 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). + + Pause sync + Synchronisatie pauzeren - - Disable end-to-end encryption - Begin-tot-eind versleuteling uitzetten + + Please wait for the folder to sync before trying to encrypt it. + Wacht tot de map gesynchroniseerd is alvorens deze te versleutelen. - - Disable end-to-end encryption for %1? - Begin-tot-eind versleuteling uitzetten voor %1? + + 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. + + Remove Folder Sync Connection + Verwijder verbinding voor mapsynchronisatie - - Sync Running - Bezig met synchroniseren + + 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. - - The syncing operation is running.<br/>Do you want to terminate it? - Bezig met synchroniseren.<br/>Wil je stoppen met synchroniseren? + + Restart sync + Synchronisatie herstarten - - %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. + + Resume sync + Synchronisatie hervatten - - %1 of %2 in use - %1 van %2 in gebruik + + 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'. - - Currently there is no storage usage information available. - Er is nu geen informatie over het gebruik van de opslagruimte beschikbaar. + + Server %1 is currently in maintenance mode. + Server %1 is momenteel in onderhoudsmodus. - - %1 in use - %1 in gebruik + + Server %1 is temporarily unavailable. + Server %1 is tijdelijk niet beschikbaar. - - %1 as %2 - %1 als %2 + + Server configuration error: %1 at %2. + Serverconfiguratiefout: %1 op %2. - - The server version %1 is unsupported! Proceed at your own risk. - De serverversie %1 wordt niet ondersteund! Verdergaan is op eigen risico. + + Set up encryption + Versleuteling instellen - - Connected to %1. - Verbonden met %1. + + Signed out from %1. + Uitgelogd van %1. - - Server %1 is temporarily unavailable. - Server %1 is tijdelijk niet beschikbaar. + + Standard file sync + Standaard bestandssynchronisatie - - Server %1 is currently in maintenance mode. - Server %1 is momenteel in onderhoudsmodus. + + Storage space %1% occupied + Opslagruimte %1% bezet - - 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'. + + Storage space: … + Opslagruimte: ... - - Signed out from %1. - Uitgelogd van %1. + + Sync Running + Bezig met synchroniseren - - Obtaining authorization from the browser. <a href='%1'>Click here</a> to re-open the browser. - Autorisatie van de browser wordt verkregen. <a href='%1'>Klik hier</a> om de browser te heropenen. + + Synchronize all + Alles synchroniseren - - Connecting to %1 … - Verbinden met %1 ... + + Synchronize none + Niets synchroniseren - - No connection to %1 at %2. - Geen verbinding met %1 op %2. + + 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. @@ -979,9 +1126,9 @@ Dit zal alle synchronisaties, die op dit moment bezig zijn, afbreken.Kan niet verbinden met %1. - - Server configuration error: %1 at %2. - Serverconfiguratiefout: %1 op %2. + + The server version %1 is old and unsupported! Proceed at your own risk. + @@ -989,9 +1136,9 @@ Dit zal alle synchronisaties, die op dit moment bezig zijn, afbreken. - - No %1 connection configured. - Geen %1 connectie geconfigureerd. + + The syncing operation is running.<br/>Do you want to terminate it? + Bezig met synchroniseren.<br/>Wil je stoppen met synchroniseren? @@ -1004,14 +1151,14 @@ Dit zal alle synchronisaties, die op dit moment bezig zijn, afbreken.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 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 or external storages: + Er zijn mappen die niet gesynchroniseerd zijn, omdat ze te groot zijn of op externe opslag staan: @@ -1019,201 +1166,208 @@ Dit zal alle synchronisaties, die op dit moment bezig zijn, afbreken.Er zijn bestanden die groter zijn geworden dan %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. - 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 + Dit account ondersteunt end-to-end-versleuteling - - 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. + +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. - - Set up encryption - Versleuteling instellen + 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? - - - 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. + + 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? - - 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. + + 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). - - There was an invalid response to an authenticated WebDAV request - Er is een ongeldig antwoord ontvangen op een geverifieerde WebDAV aanvraag + + Unable to connect to %1. + Kan niet verbinden met %1. - - - OCC::AccountState - - Signed out - Afgemeld + + 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 - - Disconnected - Niet verbonden + + Virtual file sync + Virtuele bestandssynchronisatie - - Connected - Verbonden + + Warning + Waarschuwing - - Service unavailable - Dienst niet beschikbaar + + 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. - - Maintenance mode - Onderhoudsmodus + + You need to accept the terms of service + - - Redirect detected - Redirect waargenomen + + 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 - - Network error - Netwerkfout + + 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. - - Configuration error - Configuratiefout + + 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. - - Asking Credentials - Vragen naar inloggegevens + + There was an invalid response to an authenticated WebDAV request + Er is een ongeldig antwoord ontvangen op een geauthenticeerde WebDAV opvraging + + + OCC::AccountState - - Need the user to accept the terms of service - + + Asking Credentials + Vragen naar inloggegevens - - Unknown account state - Onbekende account-status + + Configuration error + Configuratiefout - - - OCC::ActivityListModel - - For more activities please open the Activity app. - Voor meer activiteiten open de Activiteit app. + + Connected + Verbonden - - Fetching activities … - Ophalen activiteiten... + + Disconnected + Niet verbonden - - Network error occurred: client will retry syncing. - Netwerkfout opgetreden: cliënt probeert synchronisatie opnieuw. + + Maintenance mode + Onderhoudsmodus - - Files from the ignore list as well as symbolic links are not synced. - Bestanden op de negeerlijst en symbolische links worden niet gesynchroniseerd. + + Need the user to accept the terms of service + - - - OCC::AddCertificateDialog - - SSL client certificate authentication - SSL client certificaat authenticatie + + Network error + Netwerkfout - - This server probably requires a SSL client certificate. - De server vereist vermoedelijk een SSL client certificaat. + + Redirect detected + Redirect waargenomen - - Certificate & Key (pkcs12): - Certificaat & Sleutel (pkcs12): + + Service unavailable + Dienst niet beschikbaar - - Browse … - Bladeren ... + + Signed out + Afgemeld - - Certificate password: - Wachtwoord certificaat: + + Unknown account state + Onbekende account-status + + + OCC::ActivityListModel - - 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. + + Fetching activities … + Ophalen activiteiten... - - Select a certificate - Selecteer een certificaat + + Files from the ignore list as well as symbolic links are not synced. + Bestanden op de negeerlijst en symbolische links worden niet gesynchroniseerd. - - Certificate files (*.p12 *.pfx) - Certificaat bestanden (*.p12 *.pfx) + + Files from the ignore list as well as symbolic links are not synced. This includes: + - - - 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>. + + For more activities please open the Activity app. + Voor meer activiteiten open de Activiteit app. - - newer - newer software version - recenter + + Network error occurred: client will retry syncing. + Netwerkfout opgetreden: cliënt probeert synchronisatie opnieuw. + + + OCC::AddCertificateDialog - - older - older software version - ouder + + 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. - - ignoring - negeren + + Browse … + Bladeren ... - - deleting - verwijderen + + Certificate & Key (pkcs12) : + - - Quit - Stoppen + + Certificate & Key (pkcs12): + Certificaat & Sleutel (pkcs12): - - Continue - Doorgaan + + Certificate files (*.p12 *.pfx) + Certificaat bestanden (*.p12 *.pfx) @@ -1247,6 +1401,9 @@ Dit zal alle synchronisaties, die op dit moment bezig zijn, afbreken.Legacy import Legacy import + + + OCC::Application Imported %1 and %2 from a legacy desktop client. @@ -1256,271 +1413,262 @@ Dit zal alle synchronisaties, die op dit moment bezig zijn, afbreken. - - Error accessing the configuration file - Fout bij benaderen configuratiebestand + + %1 folders + %1 mappen - - 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. + + 1 account + 1 account OCC::AuthenticationDialog - - Authentication Required - Authenticatie vereist + + Continue + Doorgaan - - Enter username and password for "%1" at %2. - Geef gebruikersnaam en wachtwoord op voor "%1" bij %2. + + deleting + verwijderen - - &Username: - &Gebruikersnaam: + + Error accessing the configuration file + Fout bij benaderen configuratiebestand - - &Password: - &Wachtwoord: + + ignoring + negerend - - - OCC::BasePropagateRemoteDeleteEncrypted - - "%1 Failed to unlock encrypted folder %2". - "%1 kon versleutelde map %2" niet ontgrendelen. + + Imported %1 and %2 from a legacy desktop client. +%3 + %1 and %2 geïmporteerd van een legacy desktop client. +%3 - - 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". + + newer + recenter - - - 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 + + older + ouder - - File %1 has invalid modified time. Do not upload to the server. - Bestand %1 heeft een ongeldige wijzigingstijd. Niet uploaden naar de server. + + Quit + Stoppen - - File Removed (start upload) %1 - Bestand verwijderd (start upload) %1 + + Quit %1 + Afsluiten %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. + + 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>. - - Local file changed during syncing. It will be resumed. - Lokaal bestand gewijzigd gedurende synchronisatie. Wordt opnieuw meegenomen. + + 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. - - - Local file changed during sync. - Lokaal bestand gewijzigd tijdens synchronisatie. + + There was an error while accessing the configuration file at %1. Please make sure the file can be accessed by your user. + + + + OCC::AuthenticationDialog - - Network error: %1 - Netwerkfout: %1 + + &Password: + &Wachtwoord: - - Error updating metadata: %1 - Fout bij bijwerken metadata: %1 + + &User: + - - The file %1 is currently in use - Bestand %1 is momenteel in gebruik + + &Username: + &Gebruikersnaam: - - The local file was removed during sync. - Het lokale bestand werd verwijderd tijdens synchronisatie. + + Authentication Required + Authenticatie vereist - - Restoration failed: %1 - Herstellen mislukt: %1 + + Enter username and password for '%1' at %2. + - - - 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. + + Enter username and password for "%1" at %2. + Geef gebruikersnaam en wachtwoord op voor "%1" bij %2. + + + OCC::BulkPropagatorJob - - 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. + + Error updating metadata: %1 + Fout bij bijwerken metadata: %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. + + 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 - - Failed to fetch permissions with error %1 - Ophalen van machtigingen mislukt met fout %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. - - Filename contains leading and trailing spaces. - De bestandsnaam bevat spaties vooraan en achteraan. + + File %1 has invalid modified time. Do not upload to the server. + Bestand %1 heeft een ongeldige wijzigingstijd. Niet uploaden naar de server. - - Filename contains leading spaces. - De bestandsnaam bevat spaties vooraan. + + File Removed (start upload) %1 + Bestand verwijderd (start upload) %1 - - Filename contains trailing spaces. - De bestandsnaam bevat spaties achteraan. + + Local file changed during sync. + Lokaal bestand gewijzigd tijdens synchronisatie. - - - OCC::CaseClashFilenameDialog - - Case Clash Conflict - Conflict in hoofdlettergebruik + + Local file changed during syncing. It will be resumed. + Lokaal bestand gewijzigd gedurende synchronisatie. Wordt opnieuw meegenomen. - - 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. + + Network error: %1 + Netwerkfout: %1 - - Error - Fout + + Restoration failed: %1 + Herstellen mislukt: %1 - - Existing file - Bestaand bestand + + The file %1 is currently in use + Bestand %1 is momenteel in gebruik - - file A - bestand A + + The local file was removed during sync. + Het lokale bestand werd verwijderd tijdens synchronisatie. + + + OCC::CaseClashConflictSolver - - - today - vandaag + + 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. - - - 0 byte - 0 bytes + + 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. - - - Open existing file - Open bestaand bestand + + Failed to fetch permissions with error %1 + Ophalen van machtigingen mislukt met fout %1 - - Case clashing file - Bestand met conflict in hoofdlettergebruik + + Filename contains leading and trailing spaces. + De bestandsnaam bevat spaties vooraan en achteraan. - - file B - bestand B + + Filename contains leading spaces. + De bestandsnaam bevat spaties vooraan. - - - Open clashing file - Open bestand met conflict + + Filename contains trailing spaces. + De bestandsnaam bevat spaties achteraan. - - Please enter a new name for the clashing file: - Voer alsjeblieft een nieuwe naam in voor het bestand met het conflict: + + 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 - - New filename - Nieuwe bestandsnaam + + %1 does not support equal file names with only letter casing differences. + %1 ondersteund geen overeenkomstige bestandsnamen met verschil in hoofdlettergebruik. - - Rename file - Bestand hernoemen + + 0 byte + 0 bytes - - 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. + + Case Clash Conflict + Conflict in hoofdlettergebruik - - %1 does not support equal file names with only letter casing differences. - %1 ondersteund geen overeenkomstige bestandsnamen met verschil in hoofdlettergebruik. + + Case clashing file + Bestand met conflict in hoofdlettergebruik - - Filename contains leading and trailing spaces. - De bestandsnaam bevat spaties vooraan en achteraan. + + Existing file + Bestaand bestand - - Filename contains leading spaces. - De bestandsnaam bevat spaties vooraan. + + file A + bestand A - - Filename contains trailing spaces. - De bestandsnaam bevat spaties achteraan. + + file B + bestand B - - Use invalid name - Gebruik ongeldige naam + + Filename contains illegal characters: %1 + Bestandsnaam bevat ongeldige tekens: %1 - - Filename contains illegal characters: %1 - Bestandsnaam bevat ongeldige tekens: %1 + + New filename + Nieuwe bestandsnaam - - - OCC::CleanupPollsJob - - Error writing metadata to the database - Fout bij schrijven van metadata naar de database + + Open clashing file + Open bestand met conflict - - - OCC::ClientSideEncryption PIN needed to login to token @@ -1547,186 +1695,178 @@ Dit zal alle synchronisaties, die op dit moment bezig zijn, afbreken.Voer je begin-tot-eind versleutelingswachtwoord in: <br><br>Gebruiker: %2<br>Account: %3<br> - - Enter E2E passphrase - Invoeren E2E wachtwoord + + Please enter a new name for the clashing file: + Voer alsjeblieft een nieuwe naam in voor het bestand met het conflict: - - - OCC::ConflictDialog - - Sync Conflict - Synchronisatieconflict + + Rename file + Bestand hernoemen - - - Conflicting versions of %1. - Conflicterende versies van %1. + + 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. - - 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. + + 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. - - Local version - Lokale versie + + today + vandaag - - - Click to open the file - Klik om het bestand te openen + + Use invalid name + Gebruik ongeldige naam + + + OCC::CleanupPollsJob - - - today - vandaag + + Error writing metadata to the database + Fout bij schrijven van metadata naar de database + + + OCC::ClientSideEncryption - - - 0 byte - 0 bytes + + Enter E2E passphrase + Invoeren E2E wachtwoord - - <a href="%1">Open local version</a> - <a href="%1">Open lokale versie</a> + + Please enter your end to end encryption passphrase:<br><br>User: %2<br>Account: %3<br> + - - Server version - Serverversie + + 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 - - <a href="%1">Open server version</a> - <a href="%1">Open serverversie</a> + + <a href="%1">Open local version</a> + <a href="%1">Open lokale versie</a> - - - Keep selected version - Bewaar geselecteerde versie + + <a href="%1">Open server version</a> + <a href="%1">Open serverversie</a> - - Open local version - Open lokale versie + + Click to open the file + Klik om het bestand te openen - - Open server version - Open serverversie + + Conflicting versions of %1. + Conflicterende versies van %1. - - Keep both versions - Bewaar beide versies + + Keep both versions + Bewaar beide versies - - Keep local version - Bewaar lokale versie + + Keep local version + Bewaar lokale versie - - Keep server version - Bewaar serverversie + + Keep selected version + Bewaar geselecteerde versie - - - OCC::ConflictSolver - - 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? + + Keep server version + Bewaar serverversie - - Do you want to delete the file <i>%1</i> permanently? - Wil je het bestand <i>%1</i>permanent verwijderen? + + Open local version + Open lokale versie - - Confirm deletion - Bevestig verwijderen + + Open server version + Open serverversie - - - Error - Fout + + Sync Conflict + Synchronisatieconflict - - - Moving file failed: - -%1 - Bestand verplaatsen mislukt: - -%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. - - - OCC::ConnectionValidator + + + OCC::ConflictSolver - - No Nextcloud account configured - Geen Nextcloud-account geconfigureerd + + Confirm deletion + Bevestig verwijderen - - Authentication error: Either username or password are wrong. - Authenticatiefout: Gebruikersnaam of wachtwoord onjuist. + + 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? - - Timeout - Time-out + + Do you want to delete the file <i>%1</i> permanently? + Wil je het bestand <i>%1</i>permanent verwijderen? - - The provided credentials are not correct - De verstrekte inloggegevens zijn niet juist + + Moving file failed: + +%1 + Bestand verplaatsen mislukt: + +%1 + + + OCC::ConnectionValidator - - The configured server for this client is too old - De voor dit programma ingestelde server is te oud + + Authentication error: Either username or password are wrong. + Authenticatiefout: Gebruikersnaam of wachtwoord onjuist. - - Please update to the latest server and restart the client. - Werk de server bij naar de nieuwste versie en herstart het programma. + + Connection issue + - - - OCC::DiscoveryPhase - - Error while canceling deletion of a file - Fout bij het annuleren van verwijdering van een bestand + + No Nextcloud account configured + Geen Nextcloud-account geconfigureerd - - Error while canceling deletion of %1 - Fout bij annuleren verwijderen van %1 + + Please update to the latest server and restart the client. + Werk de server bij naar de nieuwste versie en herstart het programma. - - - OCC::DiscoverySingleDirectoryJob - - - Server error: PROPFIND reply is not XML formatted! - Serverfout: PROPFIND-antwoord heeft geen XML-opmaak! + + The configured server for this client is too old + De voor dit programma ingestelde server is te oud @@ -1739,365 +1879,348 @@ Dit zal alle synchronisaties, die op dit moment bezig zijn, afbreken.Encrypted metadata setup error: initial signature from server is empty. - - - OCC::DiscoverySingleLocalDirectoryJob + + + OCC::DiscoveryMainThread - - Error while opening directory %1 - Fout bij het openen van map %1 + + Aborted by the user + + + + OCC::DiscoveryPhase - - Directory not accessible on client, permission denied - Map niet toegankelijk op client, toegang geweigerd + + Error while canceling deletion of %1 + Fout bij annuleren verwijderen van %1 - - Directory not found: %1 - Map niet gevonden: %1 + + Error while canceling deletion of a file + Fout bij het annuleren van verwijdering van een bestand + + + OCC::DiscoverySingleDirectoryJob - - Filename encoding is not valid - Bestandsnaamcodering is niet geldig + + Encrypted metadata setup error: initial signature from server is empty. + Fout bij opzetten versleutelde metagegevens: initiële handtekening van server is leeg. - - Error while reading directory %1 - Fout tijdens lezen van map %1 + + Encrypted metadata setup error! + Fout bij instellen versleutelde metadata! - - - OCC::EditLocallyJob - - - - - - - - - Could not start editing locally. - Kon lokaal bewerken niet starten. + + Server error: PROPFIND reply is not XML formatted! + Serverfout: PROPFIND-antwoord heeft geen XML-opmaak! - - An error occurred during setup. - Er trad een fout op bij het instellen. + + The server file discovery reply is missing data. + + + + OCC::DiscoverySingleLocalDirectoryJob - - - 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. + + Directory not accessible on client, permission denied + Map niet toegankelijk op client, toegang geweigerd - - Invalid token received. - Ongeldig token ontvangen. + + Directory not found: %1 + Map niet gevonden: %1 - - - - - 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. + + Error while opening directory %1 + Fout bij het openen van map %1 - - Invalid file path was provided. - Ongeldig pad was ingegeven. + + Error while reading directory %1 + Fout tijdens lezen van map %1 - - Could not find an account for local editing. - Kon geen account vinden voor lokaal bewerken. + + Filename encoding is not valid + Bestandsnaamcodering is niet geldig + + + OCC::EditLocallyJob - - An error occurred trying to verify the request to edit locally. - Er trad een fout op bij de aanvraag voor lokaal bewerken. + + An error occurred during data retrieval. + Er trad een fout op tijdens het ophalen van data. - - - - 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 validate the request to open a file from server. - Kon de aanvraag niet valideren voor het openen van een bestand op de server. + + 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. - - - 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. + + An error occurred trying to verify the request to edit locally. + Er trad een fout op bij de aanvraag voor lokaal bewerken. - - Server error: PROPFIND reply is not XML formatted! - Serverfout: PROPFIND-antwoord heeft geen XML-opmaak! + + 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 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 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. - - Invalid local file path. - Ongeldig lokaal bestandspad. + + 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 find an account for local editing. + Kon geen account vinden voor lokaal bewerken. - - - - - - - Please try again. - Probeer a.u.b opnieuw + + Could not open %1 + Kon %1 niet openen - - File %1 already locked. - Bestand %1 is al vergrendeld. + + Could not start editing locally. + Kon lokaal bewerken niet starten. - - - 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. + + 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. - - File %1 now locked. - Bestand %1 is nu vergrendeld. + + File %1 already locked. + Bestand %1 is al vergrendeld. - - File %1 could not be locked. - Bestand %1 kon niet vergrendeld worden. + + File %1 could not be locked. + Bestand %1 kon niet vergrendeld worden. - - - 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. + + File %1 now locked. + Bestand %1 is nu vergrendeld. - - Please try again. - Probeer a.u.b opnieuw + + Invalid file path was provided. + Ongeldig pad was ingegeven. - - - OCC::EditLocallyVerificationJob - - Invalid token received. - Ongeldig token ontvangen. + + Invalid local file path. + Ongeldig lokaal bestandspad. - - - - Please try again. - Probeer a.u.b opnieuw + + Invalid token received. + Ongeldig token ontvangen. - - Invalid file path was provided. - Ongeldig pad opgegeven. + + 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. - - Could not find an account for local editing. - Kon geen account vinden voor lokaal bewerken. + + Please try again. + Probeer a.u.b opnieuw + + + OCC::EncryptFolderJob - - Could not start editing locally. - Kon lokaal bewerken niet starten. + + 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::EncryptedFolderMetadataHandler - - An error occurred trying to verify the request to edit locally. - Er trad een fout op bij de aanvraag voor lokaal bewerken. - - - - 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::EncryptedFolderMetadataHandler - - - - - - - - Error fetching metadata. - Fout bij ophalen metadata: %1 + + Error fetching encrypted folder ID. + Fout bij ophalen ID van versleutelde map. - - - - Error locking folder. - Fout bij vergrendelen map. + + Error fetching metadata. + Fout bij ophalen metadata: %1 - - Error fetching encrypted folder ID. - Fout bij ophalen ID van versleutelde map. + + Error locking folder. + Fout bij vergrendelen map. - - Error parsing or decrypting metadata. - Fout bij verwerken of ontsleutelen metadata. + + Error parsing or decrypting metadata. + Fout bij verwerken of ontsleutelen metadata. - - Failed to upload metadata - Kon metadata niet uploaden. + + Failed to upload metadata + Kon metadata niet uploaden. - - + + OCC::FileDetails - - %1 second(s) ago - seconds elapsed since file last modified - + + %1 day(s) ago + + + + %1 dag(en) geleden + - - %1 minute(s) ago - minutes elapsed since file last modified - + + %1 hour(s) ago + + + + %1 uur(en) geleden + - - %1 hour(s) ago - hours elapsed since file last modified - + + %1 minute(s) ago + + + + %1 minuut(en) geleden + - - %1 day(s) ago - days elapsed since file last modified - + + %1 month(s) ago + + + + %1 maand(en) geleden + - - %1 month(s) ago - months elapsed since file last modified - + + %1 second(s) ago + + + + %1 seconde(n) geleden + - - %1 year(s) ago - years elapsed since file last modified - + + %1 year(s) ago + + + + %1 jaar(en) geleden + - - Locked by %1 - Expires in %2 minute(s) - remaining time before lock expires - - - - + + Locked by %1 - Expires in %2 minute(s) + + + + Vergrendeld door %1 - Verloopt in %2 minuut(pen) + + + + OCC::Flow2Auth - - 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. + + 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> + + Error returned from the server: <em>%1</em> + Fout gemeld door de server: <em>%1</em> - - - 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 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. - - - 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 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 - 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. - - 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> + - - - 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. + + 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::Flow2AuthCredsPage - - Waiting for authorization - Wachten op autorisatie + + Login in your browser (Login Flow v2) + + + + OCC::Flow2AuthWidget - - Polling for authorization - Controleren op autorisatie + + Copy Link + Kopiëren link - - Starting authorization - Starten autorisatie + + Link copied to clipboard. + Link gekopieerd naar het klembord. - - Link copied to clipboard. - Link gekopieerd naar het klembord. + + Open Browser + Browser openen - - Reopen Browser - Heropen browser + + Polling for authorization + Controleren op autorisatie @@ -2109,23 +2232,20 @@ Dit kan een probleem zijn met je OpenSSL-bibliotheken. Copy Link Kopiëren link - - - OCC::Folder - - Local folder %1 does not exist. - Lokale map %1 bestaat niet. + + Starting authorization + Starten autorisatie - - %1 should be a folder but is not. - %1 zou een map moeten zijn, maar is dat niet. + + Unable to open the Browser, please copy the link to your Browser. + Kan de browser niet openen, kopieer de link naar je browser. - - %1 is not readable. - %1 is niet leesbaar. + + Waiting for authorization + Wachten op autorisatie @@ -2143,151 +2263,256 @@ Dit kan een probleem zijn met je OpenSSL-bibliotheken. - - %1 and %n other file(s) have been removed. - %1 en %n ander bestand(en) zijn verwijderd.%1 en %n andere bestand(en) zijn verwijderd. + + %1 and %n other file(s) are currently locked. + + + + + - - - %1 has been removed. - %1 names a file. - %1 is verwijderd. + + + %1 and %n other file(s) could not be synced due to errors. See the log for details. + + + + + - - %1 and %n other file(s) have been added. - %1 en %n andere bestand zijn toegevoegd.%1 en %n andere bestanden zijn toegevoegd. + + %1 and %n other file(s) have been added. + + + + + - - - %1 has been added. - %1 names a file. - %1 is toegevoegd. + + + %1 and %n other file(s) have been downloaded. + + + + + + + + + %1 and %n other file(s) have been removed. + + + + + - - %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 and %n other file(s) have been updated. + + + + + + + + + %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 updated. - %1 names a file. - %1 is bijgewerkt. + + %1 has a sync conflict. Please check the conflict file! + %1 heeft een synchronisatie-conflict. Controleer het conflictbestand! - - %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 has and %n other file(s) have sync conflicts. + + + + + + + + + %1 has been added. + %1 is toegevoegd. - - %1 has been renamed to %2. - %1 and %2 name files. - %1 is hernoemd naar %2. + + %1 has been downloaded. + - - %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 been moved to %2 and %n other file(s) have been moved. + + + + + + + + + %1 has been moved to %2. + %1 is verplaatst naar %2. - - %1 has been moved to %2. - %1 is verplaatst naar %2. + + %1 has been removed. + %1 is verwijderd. - - %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 has been renamed to %2 and %n other file(s) have been renamed. + + + + + - - %1 has a sync conflict. Please check the conflict file! - %1 heeft een synchronisatie-conflict. Controleer het conflictbestand! + + %1 has been renamed to %2. + %1 is hernoemd naar %2. - - - %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 has been updated. + %1 is bijgewerkt. - - %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 is currently locked. + %1 is momenteel op slot. - - - %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 is not readable. + %1 is niet leesbaar. + + + + %1 should be a folder but is not. + %1 zou een map moeten zijn, maar is dat niet. - - %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. - - Sync Activity - Synchronisatie-activiteit + + 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 - - 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. + 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 new folder larger than %1 MB has been added: %2. - - Er is een nieuwe map groter dan %1 MB toegevoegd: %2. - + + 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 folder from an external storage has been added. - - Er is een map op externe opslag toegevoegd. - + + A new folder larger than %1 MB has been added: %2. + Er is een nieuwe map groter dan %1 MB toegevoegd: %2. - - 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. + + All files got deleted from your local sync folder '%1'. +These files will be deleted from the server and will not be available on your other devices if they will not be restored. +If this action was unintended you can restore the lost data now. + + + + All files in the local folder "%1" were deleted. + +If you restore the files, they will be downloaded again from the server. + Alle bestanden in de lokale map "%1" zijn verwijderd. + +Als u de bestanden terugzet, worden ze opnieuw gedownload van de server. + + + All files in the server folder "%1" were deleted. + +If you restore the files, they will be uploaded again to the server. + Alle bestanden in de servermap "%1" zijn verwijderd. + +Als u de bestanden terugzet, worden ze opnieuw geüpload naar de server. + + + + All files in the sync folder '%1' were deleted on the server. +These deletes will be synchronized to your local sync folder, making such files unavailable unless you have a right to restore. +If you decide to restore the files, they will be re-synced with the server if you have rights to do so. +If you decide to delete the files, they will be unavailable to you, unless you are the owner. + + + + All files in the sync folder "%1" folder were deleted on the server. +These deletes will be synchronized to your local sync folder, making such files unavailable unless you have a right to restore. +If you decide to restore the files, they will be re-synced with the server if you have rights to do so. +If you decide to delete the files, they will be unavailable to you, unless you are the owner. + Alle bestanden in de syncmap"'%1" map werden verwijderd van de server. +Deze verwijderingen worden gesynchroniseerd naar je lokale syncmap, waardoor deze bestanden niet meer beschikbaar zijn, tenzij je het recht hebt om ze te herstellen. +Als je de bestanden wilt behouden, worden ze opnieuw gesynchroniseerd met de server als je die autorisatie hebt. +Als je de bestanden wilt verwijderen, worden ze niet beschikbaar, tenzij je de eigenaar bent. - - All files in the sync folder "%1" folder were deleted on the server. + All files in the sync folder "%1" folder were deleted on the server. These deletes will be synchronized to your local sync folder, making such files unavailable unless you have a right to restore. If you decide to restore the files, they will be re-synced with the server if you have rights to do so. If you decide to delete the files, they will be unavailable to you, unless you are the owner. - Alle bestanden in de syncmap"'%1" map werden verwijderd van de server. + Alle bestanden in de syncmap"'%1" map werden verwijderd van de server. Deze verwijderingen worden gesynchroniseerd naar je lokale syncmap, waardoor deze bestanden niet meer beschikbaar zijn, tenzij je het recht hebt om ze te herstellen. Als je de bestanden wilt behouden, worden ze opnieuw gesynchroniseerd met de server als je die autorisatie hebt. Als je de bestanden wilt verwijderen, worden ze niet beschikbaar, tenzij je de eigenaar bent. - - All the files in your local sync folder "%1" were deleted. These deletes will be synchronized with your server, making such files unavailable unless restored. + All the files in your local sync folder "%1" were deleted. These deletes will be synchronized with your server, making such files unavailable unless restored. Are you sure you want to sync those actions with the server? If this was an accident and you decide to keep your files, they will be re-synced from the server. - Alle bestanden in je lokale syncmap "%1" werden verwijderd. Deze verwijderingen worden gesynchroniseerd naar je server, waardoor de bestanden niet beschikbaar zijn, tenzij ze worden teruggezet. Weet je zeker dat je deze acties wilt synchroniseren met de server? + Alle bestanden in je lokale syncmap "%1" werden verwijderd. Deze verwijderingen worden gesynchroniseerd naar je server, waardoor de bestanden niet beschikbaar zijn, tenzij ze worden teruggezet. Weet je zeker dat je deze acties wilt synchroniseren met de server? Als dit een ongelukje was en je de bestanden wilt behouden, worden ze opnieuw gesynchroniseerd met de server. - - Remove All Files? - Alle bestanden verwijderen? + + Backup detected + - - Remove all files - Alle bestanden verwijderen + + 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). + +%1 + Wijzigingen in gesynchroniseerde mappen konden niet betrouwbaar worden getraceerd. + +Dit betekent dat de synchronisatieclient misschien niet meteen lokale wijzigingen uploadt maar slechts periodiek scant op lokale wijzigingen en die uploadt (standaard eens per twee uur). + +%1 - - Keep files - Bestanden bewaren + + Could not read system exclude file + Kon het systeem-uitsluitingsbestand niet lezen @@ -2317,27 +2542,19 @@ Als dit een ongelukje was en je de bestanden wilt behouden, worden ze opnieuw ge 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. + + Local folder %1 does not exist. + Lokale map %1 bestaat niet. - - 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. + + Normal Synchronisation + - - 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). - -%1 - Wijzigingen in gesynchroniseerde mappen konden niet betrouwbaar worden getraceerd. - -Dit betekent dat de synchronisatieclient misschien niet meteen lokale wijzigingen uploadt maar slechts periodiek scant op lokale wijzigingen en die uploadt (standaard eens per twee uur). - -%1 + + 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. @@ -2378,71 +2595,70 @@ Alternatively, you can restore all deleted files by downloading them from the se Restore Files from Server - - - OCC::FolderCreationDialog - - Create new folder - Maak nieuwe map aan + + Restore Files from Server + Bestanden terugzetten van server - - Enter folder name - Geef mapnaam op + + Restore Files to Server + Bestanden terugzetten naar server - - Folder already exists - Map bestaat al + + Stop syncing + Stop synchronisatie - - Error - Fout + + Sync Activity + Synchronisatie-activiteit - - Could not create a folder! Check your write permissions. - Kan map niet aanmaken! Controleer je schrijfmachtiging. + + 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. - - - OCC::FolderMan - - Could not reset folder state - Kan de beginstaat van de map niet terugzetten + + The folder %1 has surpassed the set folder size limit of %2MB. + De map %1 is groter geworden dan de ingestelde limiet van %2MB - - 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. + + 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. - - (backup) - (backup) + + This sync would reset the files to an earlier time in the sync folder '%1'. +This might be because a backup was restored on the server. +Continuing the sync as normal will cause all your files to be overwritten by an older file in an earlier state. Do you want to keep your local most recent files as conflict files? + - - (backup %1) - (backup %1) + + Virtual file download failed with code "%1", status "%2" and error message "%3" + - - Undefined state. - Ongedefinieerde status. + + Would you like to stop syncing this folder? + Wil je stoppen met het synchroniseren van deze map? + + + OCC::FolderCreationDialog - - Waiting to start syncing. - In afwachting van synchronisatie. + + %1 Create new folder + %1 Nieuwe map maken - - Preparing for sync. - Synchronisatie wordt voorbereid + + Could not create a folder! Check your write permissions. + Kan map niet aanmaken! Controleer je schrijfmachtiging. @@ -2454,6 +2670,9 @@ Alternatively, you can restore all deleted files by downloading them from the se Syncing %1 of %2 (%3 left) + + + OCC::FolderMan Syncing %1 of %2 @@ -2475,44 +2694,44 @@ Alternatively, you can restore all deleted files by downloading them from the se - - Sync is running. - Bezig met synchroniseren. + + 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. - - Sync finished with unresolved conflicts. - Synchronisatie beëindigd met niet opgeloste conflicten. + + Could not reset folder state + Kan de beginstaat van de map niet terugzetten - - Last sync was successful. - Laatste synchronisatie was geslaagd. + + Last sync was successful. + Laatste synchronisatie was geslaagd. - - Setup error. - Installatiefout. + + No valid folder selected! + Geen geldige map geselecteerd! - - Sync request was cancelled. - Synchronisatieaanvraag werd geannuleerd. + + Preparing for sync. + Synchronisatie wordt voorbereid - - Sync is paused. - Synchronisatie gepauzeerd. + + Setup error. + Installatiefout. - - %1 (Sync is paused) - %1 (Synchronisatie onderbroken) + + Sync finished with unresolved conflicts. + Synchronisatie beëindigd met niet opgeloste conflicten. - - No valid folder selected! - Geen geldige map geselecteerd! + + Sync is paused. + Synchronisatie gepauzeerd. @@ -2520,9 +2739,9 @@ Alternatively, you can restore all deleted files by downloading them from the se Het geselecteerde pad bestaat niet! - - The selected path is not a folder! - Het geselecteerde pad is geen map! + + Sync was successful, unresolved conflicts. + @@ -2589,105 +2808,102 @@ Alternatively, you can restore all deleted files by downloading them from the se 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. - + - - - OCC::FolderStatusDelegate - - Add Folder Sync Connection - Toevoegen mapsynchronisatie verbinding + + The folder %1 is used in a folder sync connection! + - - File - Bestand + + The local folder %1 already contains a folder used in a folder sync connection. Please pick another one! + Lokale map %1 bevat al een map die wordt gebruikt voor een mapsync verbinding. Kies een andere! - - - OCC::FolderStatusModel - - You need to be connected to add a folder - U moet verbonden zijn om een map toe te voegen + + The local folder %1 is already contained in a folder used in a folder sync connection. Please pick another one! + Lokale map %1 zit al in een map die wordt gebruikt voor een mapsync verbinding. Kies een andere! - - Click this button to add a folder to synchronize. - Klik op deze knop om een te synchroniseren map toe te voegen. + + The selected path does not exist! + Het geselecteerde pad bestaat niet! - - Could not decrypt! - Kon niet ontsleutelen! + + The selected path is not a folder! + Het geselecteerde pad is geen map! - - - %1 (%2) - -%1 (%2) + + There is already a sync from the server to this local folder. Please pick another local folder! + Er wordt vanaf de server al naar deze lokale map gesynchroniseerd. Kies een andere lokale map! - - Error while loading the list of folders from the server. - Fout bij ophalen mappenlijst van de server. + + Undefined state. + Ongedefinieerde status. - - Fetching folder list from server … - Mappenlijst ophalen van de server ... + + User Abort. + - - There are unresolved conflicts. Click for details. - Er zijn nog niet-opgehelderde conflicten. Klik voor details. + + Waiting to start syncing. + In afwachting van synchronisatie. - - Virtual file support is enabled. - Virtuele bestandsondersteuning is ingeschakeld. + + You have no permission to write to the selected folder! + U heeft geen machtiging om te schrijven naar de geselecteerde map! + + + OCC::FolderStatusDelegate - - Signed out - Afgemeld + Add Folder Sync Connection + Toevoegen mapsynchronisatie verbinding - - Synchronizing VirtualFiles with local folder - Synchroniseren VirtualFiles met lokale map + + Add live backup + Map-synchronisatieverbinding toevoegen - - Synchronizing with local folder - Synchroniseren met lokale map + + File + Bestand - - Synchronizing virtual files in local folder - Synchroniseren virtuele bestanden in lokale map + + Synchronize any other local folder with your %1 + Synchroniseer een andere lokale map met uw %1 - - Synchronizing files in local folder - Synchroniseren bestanden in lokale map + + Synchronized with local folder (%1) + + + + OCC::FolderStatusModel - - Checking for changes in remote "%1" - Controleren op wijzigingen in externe "%1" + + , + , - - Checking for changes in local "%1" - Controleren op wijzigingen in lokale "%1" + + , '%1' + - - Reconciling changes - Wijzigingen in overeenstemming brengen + + '%1' + @@ -2701,16 +2917,14 @@ For advanced users: this issue might be related to multiple sync database files %1 %2 ... - - Syncing %1 - Example text: "Syncing 'foo.txt', 'bar.txt'" - Synchroniseren %1 + + %1 %2 … + %1 %2 ... - - - , - , + + %1 %2 (%3 of %4) + %1 %2 (%3 van %4) @@ -2719,15 +2933,14 @@ For advanced users: this issue might be related to multiple sync database files Download %1/s - - download %1/s - Example text: "download 24Kb/s" (%1 is replaced by 24Kb (translated)) - download %1/s + + %5 left, %1 of %2, file %3 of %4 + %5 over, %1 van %2, bestand %3 van %4 - - ↓ %1/s - ↓ %1/s + + ↑ %1/s + ↑ %1/s @@ -2736,49 +2949,44 @@ For advanced users: this issue might be related to multiple sync database files Upload %1/s - - upload %1/s - Example text: "upload 24Kb/s" (%1 is replaced by 24Kb (translated)) - upload %1/s + + A few seconds left, %1 of %2, file %3 of %4 + Een paar seconden over, %1 van %2, bestand %3 van %4 - - ↑ %1/s - ↑ %1/s + + About to start syncing + In afwachting van synchronisatie - - %1 %2 (%3 of %4) - Example text: "uploading foobar.png (2MB of 2MB)" - %1 %2 (%3 van %4) + + Checking for changes in local '%1' + - - %1 %2 - Example text: "uploading foobar.png" - %1 %2 + + Checking for changes in local "%1" + Controleren op wijzigingen in lokale "%1" - - 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' + - - %5 left, %1 of %2, file %3 of %4 - %5 over, %1 van %2, bestand %3 van %4 + + Checking for changes in remote "%1" + Controleren op wijzigingen in externe "%1" - - %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 + + Click this button to add a folder to synchronize. + Klik op deze knop om een te synchroniseren map toe te voegen. - - file %1 of %2 - bestand %1 van %2 + + Could not decrypt! + Kon niet ontsleutelen! @@ -2790,105 +2998,85 @@ For advanced users: this issue might be related to multiple sync database files About to start syncing In afwachting van synchronisatie - - - Waiting for %n other folder(s) … - Wacht op %n andere map ...Wacht op %n andere mappen ... - - - Waiting … - Wachten ... + + Error while loading the list of folders from the server. + Fout bij ophalen mappenlijst van de server. - - Preparing to sync … - Voorbereiden synchronisatie ... + + Fetching folder list from server … + Mappenlijst ophalen van de server ... - - - OCC::FolderWatcher - - The watcher did not receive a test notification. - De kijker ontving geen testmelding. + + file %1 of %2 + bestand %1 van %2 - - - 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. + + File %1 of %2 + Bestand %1 van %2 - - - OCC::FolderWizard - - Add Folder Sync Connection - Toevoegen mapsynchronisatie verbinding + + Preparing to sync … + Voorbereiden synchronisatie ... - - Add Sync Connection - Toevoegen Sync verbinding + + Reconciling changes + Wijzigingen in overeenstemming brengen - - - OCC::FolderWizardLocalPath - - Click to select a local folder to sync. - Klikken om een lokale map te selecteren voor synchronisatie + + Synchronizing files in local folder + Synchroniseren bestanden in lokale map - - Enter the path to the local folder. - Geef het pad op naar de lokale map. + + Synchronizing virtual files in local folder + Synchroniseren virtuele bestanden in lokale map - - Select the source folder - Selecteer de bronmap + + Synchronizing VirtualFiles with local folder + Synchroniseren VirtualFiles met lokale map - - - OCC::FolderWizardRemotePath - - Create Remote Folder - Externe map aanmaken + + Synchronizing with local folder + Synchroniseren met lokale 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": + + Syncing local and remote changes + Synchroniseren lokale en remote aanpassingen - - Folder was successfully created on %1. - Map is succesvol aangemaakt op %1. + + There are unresolved conflicts. Click for details. + Er zijn nog niet-opgehelderde conflicten. Klik voor details. - - Authentication failed accessing %1 - Authenticatie mislukt bij benaderen %1 + + upload %1/s + upload %1/s - - Failed to create the folder on %1. Please check manually. - Aanmaken van de map op %1 mislukt. Controleer handmatig. + + Upload %1/s + Upload %1/s - - Failed to list a folder. Error: %1 - Tonen mappenlijst mislukt. Fout: %1 + + Virtual file support is enabled. + Virtuele bestandsondersteuning is ingeschakeld. - - Choose this to sync the entire account - Kies dit om je volledige account te synchroniseren + + Waiting … + Wachten ... @@ -2903,39 +3091,46 @@ For advanced users: this issue might be related to multiple sync database files Deze map is al gesynchroniseerd. - - You are already syncing <i>%1</i>, which is a parent folder of <i>%2</i>. - U synchroniseert <i>%1</i> al, dat is de bovenliggende map van <i>%2</i>. + + You need to be connected to add a folder + U moet verbonden zijn om een map toe te voegen + + + OCC::FolderWatcher - - You are already syncing <i>%1</i>, which is a subfolder of <i>%2</i>. - Je synchroniseert <i>%1</i> al, dat is de bovenliggende map van <i>%2</i>. + + The watcher did not receive a test notification. + De kijker ontving geen testmelding. - - - OCC::FolderWizardSelectiveSync + + + OCC::FolderWatcherPrivate - - - Use virtual files instead of downloading content immediately %1 - Gebruik virtuele bestanden in plaats van de content direct te downloaden %1 + + 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. + + + OCC::FolderWizard - - - (experimental) - (experimenteel) + + Add Sync Connection + Toevoegen Sync verbinding + + + OCC::FolderWizardLocalPath - - 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. + + Choose + Kies - - Virtual files are not available for the selected folder - Virtuele bestanden zijn niet beschikbaar voor de geselecteerde map + + Click to select a local folder to sync. + Klikken om een lokale map te selecteren voor synchronisatie @@ -2946,210 +3141,213 @@ For advanced users: this issue might be related to multiple sync database files OCC::GETFileJob - - No E-Tag received from server, check Proxy/Gateway - Geen E-Tag ontvangen van de server, controleer Proxy/Gateway + + Authentication failed accessing %1 + Authenticatie mislukt bij benaderen %1 - - 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. + + Choose this to sync the entire account + Kies dit om je volledige account te synchroniseren - - We received an unexpected download Content-Length. - We ontvingen een onverwachte download Content-Lengte. + + Create Remote Folder + Externe map aanmaken - - Server returned wrong content-range - Server retourneerde verkeerde content-bandbreedte + + Enter the name of the new folder to be created below '%1': + - - Connection Timeout - Verbindingstime-out + + 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::GeneralSettings - - General Settings - Algemene instellingen + + Failed to create the folder on %1. Please check manually. + Aanmaken van de map op %1 mislukt. Controleer handmatig. - - - About - Over + + Failed to list a folder. Error: %1 + Tonen mappenlijst mislukt. Fout: %1 - - &Launch on System Startup - &Starten bij systeemstart + + Folder was successfully created on %1. + Map is succesvol aangemaakt op %1. - - Show Call Notifications - Toon oproepmeldingen + + This folder is already being synced. + Deze map is al gesynchroniseerd. - - For System Tray - Voor systeemvak + + You are already syncing <i>%1</i>, which is a parent folder of <i>%2</i>. + U synchroniseert <i>%1</i> al, dat is de bovenliggende map van <i>%2</i>. - - Legal notice - Juridische bepalingen + + You are already syncing <i>%1</i>, which is a subfolder of <i>%2</i>. + Je synchroniseert <i>%1</i> al, dat is de bovenliggende map van <i>%2</i>. + + + OCC::FolderWizardSelectiveSync - - Use &Monochrome Icons - Gebruik &monochrome pictogrammen + + Use virtual files instead of downloading content immediately %1 + Gebruik virtuele bestanden in plaats van de content direct te downloaden %1 - - Show Chat Notifications - + + Virtual files are not available for the selected folder + Virtuele bestanden zijn niet beschikbaar voor de geselecteerde map - - Show Server &Notifications - Tonen server&meldingen + + 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::FormatWarningsWizardPage - - Advanced - Geavanceerd + <b>Warning:</b> + <b>Waarschuwing:</b> - - Ask for confirmation before synchronizing new folders larger than - Vraag bevestiging voordat mappen worden gesynchroniseerd groter dan + <b>Warning:</b> %1 + <b>Waarschuwing:</b> %1 + + + OCC::GETFileJob - - Updates - Updates + + Connection Timeout + Verbindingstime-out - - &Automatically check for Updates - &Controleer automatisch op updates + + No E-Tag received from server, check Proxy/Gateway + Geen E-Tag ontvangen van de server, controleer Proxy/Gateway - - MB - Trailing part of "Ask confirmation before syncing folder larger than" - MB + + Server returned wrong content-range + Server retourneerde verkeerde content-bandbreedte - - &Channel - &Kanaal + + 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. - - Notify when synchronised folders grow larger than specified limit - Melding als gesynchroniseerde mappen groter worden dan de opgegeven limiet + + We received an unexpected download Content-Length. + We ontvingen een onverwachte download Content-Lengte. + + + OCC::GeneralSettings - - Automatically disable synchronisation of folders that overcome limit - Synchronisatie automatisch uitschakelen van mappen die de limiet overschrijden + + - 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. + - - Ask for confirmation before synchronizing external storages - Vraag bevestiging voor synchronisatie van mappen op externe opslag + + - enterprise: contains stable versions for customers. + +Downgrading versions is not possible immediately: changing from stable to enterprise means waiting for the new enterprise version. + - - Move removed files to trash - Verplaats verwijderde bestanden naar de prullenbak + + &Analysis data collection for needs-based design + &Analyse van gegevensverzameling voor een op behoeften gebaseerd ontwerp - - &Check for Update now - &Controleer nu op update + &Automatically check for Updates + &Controleer automatisch op updates - - Show sync folders in &Explorer's navigation pane - Toon synchronisatiemappen in &Verkennen navigatievenster + + &Automatically check for updates + &Controleer automatisch op updates - - S&how crash reporter - T&onen crash reporter + &Channel + &Kanaal - - Ask for confirmation before synchronizing folders larger than - Vraag bevestiging voordat mappen worden gedownload groter dan + &Check for Update now + &Controleer nu op update - - Edit &Ignored Files - Bewerken &genegeerde bestanden + &Launch on System Startup + &Starten bij systeemstart - - - Create Debug Archive - Debugarchief maken + + &Restart && Update + &Herstarten && Bijwerken - - Info - Info + About + Over - - Desktop client x.x.x - Desktop cliënt x.x.x + + Ask for confirmation before + synchronizing new folders larger than + Vraag om bevestiging voordat u nieuwe mappen synchroniseert die groter zijn dan - - Show sync folders in &Explorer's Navigation Pane - Toon sync-mappen in het &Verkenner navigatievenster + + Ask for confirmation before synchronizing + external storages + Vraag om bevestiging voordat je externe opslag synchroniseert - - Update channel - Bijwerkkanaal + Ask for confirmation before synchronizing external storages + Vraag bevestiging voor synchronisatie van mappen op externe opslag - - &Restart && Update - &Herstarten && Bijwerken + Ask for confirmation before synchronizing folders larger than + Vraag bevestiging voordat mappen worden gedownload groter dan - - &Automatically check for updates - &Controleer automatisch op updates + Ask for confirmation before synchronizing new folders larger than + Vraag bevestiging voordat mappen worden gesynchroniseerd groter dan - - Check Now - Controleer nu + + Automatically disable synchronisation of + folders that overcome limit + Automatisch synchronisatie uitschakelen van mappen die limiet overschrijden - - Usage Documentation - Gebruiksdocumentatie + Automatically disable synchronisation of folders that overcome limit + Synchronisatie automatisch uitschakelen van mappen die de limiet overschrijden - - Legal Notice - Juridische bepalingen + + beta + beta - - Server notifications that require attention. - Servermeldingen die aandacht nodig hebben. + + Change update channel + Wijzigen bijwerkkanaal @@ -3157,40 +3355,34 @@ For advanced users: this issue might be related to multiple sync database files - - Show call notification dialogs. - Toon oproepmeldingenvensters. + + Changing update channel? + Wijzigen bijwerkkanaal? - - You cannot disable autostart because system-wide autostart is enabled. - Je kunt autostart niet uitschakelen omdat systeem-brede autostart is ingeschakeld. + + Check Now + Controleer nu - - - stable - stabiel + + Create Debug Archive + Debugarchief maken - - - beta - beta + + daily + dagelijks - - Change update channel? - Wijzigen bijwerkkanaal? + + Data Protection + Gegevensbescherming - - The update channel determines which client updates will be offered for installation. The "stable" channel contains only upgrades that are considered reliable, while the versions in the "beta" channel may contain newer features and bugfixes, but have not yet been tested thoroughly. - -Note that this selects only what pool upgrades are taken from, and that there are no downgrades: So going back from the beta channel to the stable channel usually cannot be done immediately and means waiting for a stable version that is newer than the currently installed beta version. - Het updatekanaal bepaalt welke clientupdates worden aangeboden voor installatie. Het "stabiele" kanaal bevat alleen upgrades die als betrouwbaar worden beschouwd, terwijl de versies in het "betakanaal" mogelijk nieuwere functies en bugfixes bevatten, die nog niet grondig zijn getest. - -Merk op dat dit alleen selecteert van welke pool upgrades worden overgenomen en dat er geen downgrades zijn: teruggaan van het betakanaal naar het stabiele kanaal kan meestal niet onmiddellijk worden gedaan en dat betekent wachten op een stabiele versie die nieuwer is dan de momenteel geïnstalleerde betaversie. + + Debug Archive Created + Debugarchief Aangemaakt @@ -3233,301 +3425,281 @@ Downgrading versions is not possible immediately: changing from stable to enterp - - Change update channel - Wijzigen bijwerkkanaal + Info + Info - - Cancel - Annuleren - - - - Zip Archives - Zip Archieven + Legal notice + Juridische bepalingen - - Debug Archive Created - Debugarchief Aangemaakt + + Legal Notice + Juridische bepalingen - - Debug archive is created at %1 - Debugarchief is gemaakt op %1 + MB + MB - - - OCC::GetOrCreatePublicLinkShare - - Password for share required - Wachtwoord voor deellink vereist + + More Information + Meer informatie - - Please enter a password for your link share: - Voer het wachtwoord in voor je deellink: + + Move removed files to trash + Verplaats verwijderde bestanden naar de prullenbak - - Sharing error - Fout bij delen + + Notify when synchronised folders grow + larger than specified limit + Waarschuwing wanneer gesynchroniseerde mappen groter worden dan de opgegeven limiet. - - Could not retrieve or create the public link share. Error: - -%1 - Kan de openbare deellink niet ophalen of creëren. Fout: - -%1 + Notify when synchronised folders grow larger than specified limit + Melding als gesynchroniseerde mappen groter worden dan de opgegeven limiet - - - 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> + + Open Source Software + Open source software - - Reading from keychain failed with error: "%1" - Het lezen van de sleutelketen is mislukt met fout: "%1" + + Privacy Policy + Privacybeleid - - Enter Password - Vul het wachtwoord in + + S&how crash reporter + T&onen crash reporter - - <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. + + Server notifications that require attention. + Servermeldingen die aandacht nodig hebben. - - - OCC::IgnoreListEditor - - Ignored Files Editor - Genegeerde bestanden-editor + + Show call notification dialogs. + Toon oproepmeldingenvensters. - - Global Ignore Settings - Algemene negeer-instellingen + Show Call Notifications + Toon oproepmeldingen - - Sync hidden files - Synchroniseer verborgen bestanden + + Show chat notification dialogs. + - - Files Ignored by Patterns - Bestanden volgens patroon genegeerd + + Show Chat Notifications + - - 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. + Show Server &Notifications + Tonen server&meldingen - - - OCC::IgnoreListTableWidget - - Pattern - Patroon + + Show sync folders in &Explorer's navigation + pane + Sync-mappen weergeven in het navigatiedeelvenster van &Explorer - - Allow Deletion - Verwijderen toestaan + Show sync folders in &Explorer's navigation pane + Toon synchronisatiemappen in &Verkennen navigatievenster - - Add - Toevoegen + Show sync folders in &Explorer's Navigation Pane + Toon sync-mappen in het &Verkenner navigatievenster - - Remove - Verwijderen + + stable + stabiel - - Remove all - Alles verwijderen + + The channel determines which upgrades will be offered to install: +- stable: contains tested versions considered reliable + - - Files or folders matching a pattern will not be synchronized. + + The update channel determines which client updates will be offered for installation. The "stable" channel contains only upgrades that are considered reliable, while the versions in the "beta" channel may contain newer features and bugfixes, but have not yet been tested thoroughly. -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. +Note that this selects only what pool upgrades are taken from, and that there are no downgrades: So going back from the beta channel to the stable channel usually cannot be done immediately and means waiting for a stable version that is newer than the currently installed beta version. + Het updatekanaal bepaalt welke clientupdates worden aangeboden voor installatie. Het "stabiele" kanaal bevat alleen upgrades die als betrouwbaar worden beschouwd, terwijl de versies in het "betakanaal" mogelijk nieuwere functies en bugfixes bevatten, die nog niet grondig zijn getest. -Onderdelen die gewist mogen worden, worden verwijderd als ze verhinderen dat een map verdwijnt. Dit is nuttig voor metadata. +Merk op dat dit alleen selecteert van welke pool upgrades worden overgenomen en dat er geen downgrades zijn: teruggaan van het betakanaal naar het stabiele kanaal kan meestal niet onmiddellijk worden gedaan en dat betekent wachten op een stabiele versie die nieuwer is dan de momenteel geïnstalleerde betaversie. - - Could not open file - Kan het bestand niet openen + + Update channel + Bijwerkkanaal - - Cannot write changes to "%1". - Kan geen wijzigingen wegschrijven naar "%1". + + Updates + Updates - - Add Ignore Pattern - Toevoegen negeerpatroon + + Usage Documentation + Gebruiksdocumentatie - - Add a new ignore pattern: - Voeg nieuw negeerpatroon toe: + Use &Monochrome Icons + Gebruik &monochrome pictogrammen - - - OCC::InvalidFilenameDialog - - Invalid filename - Ongeldige bestandsnaam + + You cannot disable autostart because system-wide autostart is enabled. + Je kunt autostart niet uitschakelen omdat systeem-brede autostart is ingeschakeld. - - 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. + + Zip Archives + Zip Archieven + + + OCC::GetOrCreatePublicLinkShare - - Error - Fout + + Could not retrieve or create the public link share. Error: + +%1 + Kan de openbare deellink niet ophalen of creëren. Fout: + +%1 - - Please enter a new name for the file: - Voer alsjeblieft een nieuwe naam voor dit bestand in: + + Password for share required + Wachtwoord voor deellink vereist - - New filename - Nieuwe bestandsnaam + + Please enter a password for your link share: + Voer het wachtwoord in voor je deellink: - - Rename file - Bestand hernoemen + + Sharing error + Fout bij delen + + + OCC::HttpCredentialsGui - - 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. + + <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. - - The following characters are not allowed on the system: * " | & ? , ; : \ / ~ < > leading/trailing spaces - De volgende tekens zijn niet toegestaan op dit systeem: * " | & ? , ; : \ / ~ < > spaties aan begin/eind + + Enter Password + Vul het wachtwoord in - - 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. + + Please enter %1 password:<br><br>User: %2<br>Account: %3<br> + - - The following characters are not allowed: %1 - De volgende tekens zijn niet toegestaan: %1 + + Please enter %1 password:<br><br>Username: %2<br>Account: %3<br> + Voer %1 wachtwoord in:<br><br>Gebruiker: %2<br>Account: %3<br> - - The following basenames are not allowed: %1 - De volgende basisnamen zijn niet toegestaan: %1 + + Reading from keychain failed with error: '%1' + - - The following filenames are not allowed: %1 - De volgende bestandsnamen zijn niet toegestaan: %1 + + Reading from keychain failed with error: "%1" + Het lezen van de sleutelketen is mislukt met fout: "%1" + + + OCC::IgnoreListEditor - - The following file extensions are not allowed: %1 - De volgende bestandsextensies zijn niet toegestaan: %1 + + Files Ignored by Patterns + Bestanden volgens patroon genegeerd - - Checking rename permissions … - Hernoem machtigingen controleren ... + + Global Ignore Settings + Algemene negeer-instellingen - - 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. + + Ignored Files Editor + Genegeerde bestanden-editor - - Failed to fetch permissions with error %1 - Ophalen van machtigingen mislukt met fout %1 + + Sync hidden files + Synchroniseer verborgen bestanden - - Filename contains leading and trailing spaces. - De bestandsnaam bevat spaties vooraan en achteraan. + + This entry is provided by the system at '%1' and cannot be modified in this view. + - - Filename contains leading spaces. - De bestandsnaam bevat spaties vooraan. + + 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 - - Filename contains trailing spaces. - De bestandsnaam bevat spaties achteraan. + + Add + Toevoegen - - Use invalid name - Gebruik ongeldige naam + Add a new ignore pattern: + Voeg nieuw negeerpatroon toe: - - Filename contains illegal characters: %1 - Bestandsnaam bevat ongeldige tekens: %1 + Add Ignore Pattern + Toevoegen negeerpatroon - - 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. + + Add New Ignore Pattern + Nieuw negeerpatroon toevoegen - - 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. + + Allow Deletion + Verwijderen toestaan - - Could not rename local file. %1 - Kan lokaal bestand niet hernoemen. %1 + + Cannot write changes to '%1'. + - - - OCC::LegalNotice - - - Legal notice - Juridische bepalingen + + Cannot write changes to "%1". + Kan geen wijzigingen wegschrijven naar "%1". - - Close - Sluiten + + Could not open file + Kan het bestand niet openen @@ -3540,381 +3712,376 @@ Onderdelen die gewist mogen worden, worden verwijderd als ze verhinderen dat een <p>Copyright 2017-2023 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> + + Files or folders that match this pattern will not be synchronized. + +Objects that are allowed to be deleted will be deleted if they would prevent a folder from being deleted. This is useful for metadata. + 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. - - - OCC::LogBrowser - - Log Output - Log Output + + Ignore Pattern + Patroon negeren - - 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 - De client kan debug-logboeken naar een tijdelijke map schrijven. Deze logboeken zijn erg handig bij het diagnosticeren van problemen. -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 + + Pattern + Patroon - - Enable logging to temporary folder - Inschakelen logging naar tijdelijke map + + Remove + Verwijderen - - 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. + + Remove all + Alles verwijderen + + + OCC::InvalidFilenameDialog - - Open folder - Openen map + + 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. - - - OCC::Logger - - Error - Fout + + Checking rename permissions … + Hernoem machtigingen controleren ... - - <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> + + Could not rename local file. %1 + Kan lokaal bestand niet hernoemen. %1 - - - OCC::Mac::FileProviderEditLocallyJob - - Could not start editing locally. - Kon lokaal bewerken niet starten. + + Invalid filename + Ongeldige bestandsnaam - - An error occurred during setup. - Er trad een fout op bij het instellen. + + Please enter a new name for the file: + Voer alsjeblieft een nieuwe naam voor dit bestand in: - - 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. + + 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. - - Could not get file ID. - Kon het bestands-ID niet ophalen. + + 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. - - Could not get file identifier. - Kon het bestands-ID niet ophalen. + + 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 file identifier is empty. - Het bestands-ID is leeg. + + The following basenames are not allowed: %1 + De volgende basisnamen zijn niet toegestaan: %1 - - - OCC::NSISUpdater - - New Version Available - Nieuwe versie beschikbaar + + The following characters are not allowed on the system: * " | & ? , ; : \ / ~ < > leading/trailing spaces + De volgende tekens zijn niet toegestaan op dit systeem: * " | & ? , ; : \ / ~ < > spaties aan begin/eind - - <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> + + The following characters are not allowed: %1 + De volgende tekens zijn niet toegestaan: %1 - - Skip this time - Deze keer overslaan + + The following file extensions are not allowed: %1 + De volgende bestandsextensies zijn niet toegestaan: %1 - - Get update - Ophalen update + + The following filenames are not allowed: %1 + De volgende bestandsnamen zijn niet toegestaan: %1 + + + OCC::LegalNotice - - Update Failed - Bijwerken mislukt + + <p>Copyright 2017-2020 Nextcloud GmbH<br />Copyright 2012-2018 ownCloud GmbH</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>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>Copyright 2017-2023 Nextcloud GmbH<br />Copyright 2012-2023 ownCloud GmbH</p> + <p>Copyright 2017-2023 Nextcloud GmbH<br />Copyright 2012-2023 ownCloud GmbH</p> - - Ask again later - Vraag later nogmaals + + <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> - - Restart and update - Herstarten en bijwerken + + Close + Sluiten + + + OCC::LogBrowser - - Update manually - Handmatig bijwerken + + &Capture debug messages + - - - OCC::NetworkSettings - - Proxy Settings - Proxy Instellingen + + &Find + - - No Proxy - Geen Proxy + + &Search: + - - Use system proxy - Gebruik systeem proxy + + Clear + - - Specify proxy manually as - Specificeer proxy handmatig als + + Clear the log display. + - - Host - Server + + Could not write to log file %1 + - - Proxy server requires authentication - Proxyserver heeft verificatie nodig + + Enable logging to temporary folder + Inschakelen logging naar tijdelijke map - - Note: proxy settings have no effects for accounts on localhost - Let op: proxy-instellingen hebben geen effect voor accounts op localhost + + Log Output + Log Output - - Manually specify proxy - Specificeer proxy handmatig + + Permanently save logs + - - No proxy - Geen proxy + + S&ave + - - - - Use global settings - Gebruik globale instellingen + + Save log file + - - Download Bandwidth - Download bandbreedte + + Save the log file to a file on disk for debugging. + - - - No limit - Geen beperking + + 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 + De client kan debug-logboeken naar een tijdelijke map schrijven. Deze logboeken zijn erg handig bij het diagnosticeren van problemen. +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 - - - KBytes/s - KBytes/s + + 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. - - - Limit to - Beperkt tot + + When this option is enabled and no other logging is configured, logs will be written to a temporary folder and expire after a few hours. This setting persists across client restarts. + +Logs will be written to %1 + + + + OCC::Logger - - - Limit to 3/4 of estimated bandwidth - Beperk tot 3/4 van de geschatte bandbreedte + + <nobr>File '%1'<br/>cannot be opened for writing.<br/><br/>The log output can <b>not</b> be saved!</nobr> + - - - Limit automatically - Beperk automatisch + + <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> + + + OCC::Mac::FileProviderEditLocallyJob - - Upload Bandwidth - Upload bandbreedte + + 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. - - Hostname of proxy server - Hostnaam van proxyserver + + Could not get file ID. + Kon het bestands-ID niet ophalen. - - Username for proxy server - Gebruikersnaam voor proxyserver + + Could not get file identifier. + Kon het bestands-ID niet ophalen. - - Password for proxy server - Wachtwoord voor proxyserver + + The file identifier is empty. + Het bestands-ID is leeg. + + + OCC::NSISUpdater - - HTTP(S) proxy - HTTP(S) proxy + + <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> - - SOCKS5 proxy - SOCKS5 proxy + + <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::OCUpdater - - New %1 update ready - Nieuwe %1 update is klaar + + Ask again later + Vraag later nogmaals - - 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. + + Get update + Ophalen update - - Downloading %1 … - Downloaden %1 … + + New Version Available + Nieuwe versie beschikbaar - - Downloading %1. Please wait … - Downloaden %1. Even geduld … + + Restart and update + Herstarten en bijwerken - - %1 available. Restart application to start the update. - %1 beschikbaar. Herstart de applicatie om de update te starten. + + Skip this time + Deze keer overslaan - - 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. + + Skip this version + - - 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. + + Update Failed + Bijwerken mislukt - - Could not check for new updates. - Kan niet controleren op nieuwe updates. + + Update manually + Handmatig bijwerken + + + OCC::NetworkSettings - - 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. + + Download Bandwidth + Download bandbreedte - - Checking update server … - Controleren updateserver ... + + Host + Server - - Update status is unknown: Did not check for new updates. - Update status is onbekend: niet gecontroleerd op nieuwe updates. + + Hostname of proxy server + Hostnaam van proxyserver - - No updates available. Your installation is at the latest version. - Geen updates beschikbaar. Je installatie is al van de laatste versie. + + HTTP(S) proxy + HTTP(S) proxy - - Update Check - Controle update + + KBytes/s + KBytes/s - - - OCC::OwncloudAdvancedSetupPage - - Connect - Verbinden + + Limit automatically + Beperk automatisch - - - Use &virtual files instead of downloading content immediately %1 - Gebruik &virtuele bestanden in plaats van direct downloaden content%1 + + Limit to + Beperkt tot - - - (experimental) - (experimenteel) + + Limit to 3/4 of estimated bandwidth + Beperk tot 3/4 van de geschatte bandbreedte - - 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. + + Manually specify proxy + Specificeer proxy handmatig - - %1 folder "%2" is synced to local folder "%3" - %1 map "%2" is gesynchroniseerd naar de lokale map "%3" + + No limit + Geen beperking - - Sync the folder "%1" - Synchroniseer de map "%1" + No Proxy + Geen Proxy - - Warning: The local folder is not empty. Pick a resolution! - Waarschuwing: De lokale map is niet leeg. Maak een keuze! + + No proxy + Geen proxy - - %1 free space - %1 gets replaced with the size and a matching unit. Example: 3 MB or 5 GB - %1 vrije ruimte + + Note: proxy settings have no effects for accounts on localhost + Let op: proxy-instellingen hebben geen effect voor accounts op localhost - - Virtual files are not available for the selected folder - Virtuele bestanden zijn niet beschikbaar voor de geselecteerde map + + Password for proxy server + Wachtwoord voor proxyserver @@ -3927,353 +4094,328 @@ Merk op dat het gebruik van logging-opdrachtregel opties deze instelling zal ove Lokale synchronisatiemap - - - (%1) - (%1) + + Proxy Settings + Proxy Instellingen - - There isn't enough free space in the local folder! - Er is niet genoeg ruimte beschikbaar in de lokale map! + + SOCKS5 proxy + SOCKS5 proxy - - - OCC::OwncloudConnectionMethodDialog - - Connection failed - Verbinding mislukt + Specify proxy manually as + Specificeer proxy handmatig als - - <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> + + Upload Bandwidth + Upload bandbreedte - - Select a different URL - Selecteer een andere URL + + Use global settings + Gebruik globale instellingen - - Retry unencrypted over HTTP (insecure) - Probeer onversleuteld over HTTP (onbeveiligd) + + Use system proxy + Gebruik systeem proxy - - Configure client-side TLS certificate - Configureer het client-side TLS-certificaat + + Username for proxy server + Gebruikersnaam voor proxyserver + + + OCC::OAuth - - <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> + <h1>Login Error</h1><p>%1</p> + <h1>Inlog fout<p>%1</p> - - - OCC::OwncloudHttpCredsPage - - &Email - &E-mail + <h1>Wrong account</h1><p>You logged in with the account <em>%1</em>, but must log in with the account <em>%2</em>.<br>Please log out of %3 in another tab, then <a href='%4'>click here</a> and log in with %2.</p> + <h1>Verkeerde account</h1><p>Je bent ingelogd met account <em>%1</em>, maar moest inloggen met account <em>%2</em>.<br>Log uit van %3 in een andere tab en dan <a href='%4'>klik hier</a> en log in met %2</p> - - Connect to %1 - Verbinden met %1 + + <h1>Wrong user</h1><p>You logged-in with user <em>%1</em>, but must login with user <em>%2</em>.<br>Please log out of %3 in another tab, then <a href='%4'>click here</a> and log in as user %2</p> + - - Enter user credentials - Vul uw inloggegevens in + Empty JSON from OAuth2 redirect + Lege JSON van OAuth2 redirect - - - OCC::OwncloudPropagator + + + OCC::OCUpdater - - Error with the metadata. Getting unexpected metadata format. - Fout met de metadata. Onverwacht metadata format ontvangen. + + %1 available. Restart application to start the update. + %1 beschikbaar. Herstart de applicatie om de update te starten. - - - Impossible to get modification time for file in conflict %1 - Onmogelijk om wijzigingstijd te krijgen voor bestand in conflict %1) + + %1 version %2 available. Restart application to start the update. + - - - 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. + + A new update for %1 is about to be installed. The updater may ask +for additional privileges during the process. + - - &Next > - &Volgende > + + 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. - - Server address does not seem to be valid - Het serveradres lijkt niet geldig + + Checking update server … + Controleren updateserver ... - - Could not load certificate. Maybe wrong password? - Kan certificaat niet laden. Misschien is het wachtwoord onjuist? + + Could not check for new updates. + Kan niet controleren op nieuwe updates. - - - 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/> + + Could not download update. Please click <a href='%1'>here</a> to download the update manually. + - - Invalid URL - Ongeldige URL + + 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. - - Failed to connect to %1 at %2:<br/>%3 - Kon geen verbinding maken met %1 op %2:<br/>%3 + + 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. - - Timeout while trying to connect to %1 at %2. - Time-out bij verbinden met %1 op %2. + + Downloading %1 … + Downloaden %1 … - - Trying to connect to %1 at %2 … - Probeer te verbinden met %1 om %2 ... + + Downloading %1. Please wait … + Downloaden %1. Even geduld … - - 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. + + Downloading version %1. Please wait … + - - 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. + + New %1 is available. Please open %2 to download the update. + Nieuwe %1 beschikbaar. Open %2 om de update te downloaden. - - There was an invalid response to an authenticated WebDAV request - Er is een ongeldig antwoord ontvangen op een geauthenticeerde WebDAV opvraging + + 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. - - 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/> + + New %1 update ready + Nieuwe %1 update is klaar - - Creating local sync folder %1 … - Creëren lokale synchronisatie map %1 ... + + New %1 version %2 is available. Please click <a href='%3'>here</a> to download the update. + - - OK - OK + + No updates available. Your installation is at the latest version. + Geen updates beschikbaar. Je installatie is al van de laatste versie. - - failed. - mislukt. + + Update Check + Controle update - - Could not create local folder %1 - Kan lokale map %1 niet aanmaken + + Update status is unknown: Did not check for new updates. + Update status is onbekend: niet gecontroleerd op nieuwe updates. + + + OCC::OwncloudAdvancedSetupPage - - No remote folder specified! - Geen externe map opgegeven! + + (%1) + (%1) - - Error: %1 - Fout: %1 + + %1 folder '%2' is synced to local folder '%3' + - - creating folder on Nextcloud: %1 - aanmaken map op Nextcloud: %1 + + %1 folder "%2" is synced to local folder "%3" + %1 map "%2" is gesynchroniseerd naar de lokale map "%3" - - Remote folder %1 created successfully. - Externe map %1 succesvol gecreëerd. + + %1 free space + %1 vrije ruimte - - The remote folder %1 already exists. Connecting it for syncing. - De externe map %1 bestaat al. Verbinden voor synchroniseren. + + <p><small><strong>Warning:</strong> The local folder is not empty. Pick a resolution!</small></p> + - - - The folder creation resulted in HTTP error code %1 - Het aanmaken van de map resulteerde in HTTP foutcode %1 + + Connect + Verbinden - - 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> + + Connect … + - - <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> + + Free space: %1 + - - - Remote folder %1 creation failed with error <tt>%2</tt>. - Aanmaken van externe map %1 mislukt met fout <tt>%2</tt>. + + Local Sync Folder + Lokale synchronisatiemap - - A sync connection from %1 to remote directory %2 was set up. - Er is een synchronisatie verbinding van %1 naar externe map %2 opgezet. + + Setup local folder options + - - Successfully connected to %1! - Succesvol verbonden met %1! + + Sync the folder '%1' + - - Connection to %1 could not be established. Please check again. - Er kan geen verbinding worden gemaakt met %1. Probeer het nog eens. + + Sync the folder "%1" + Synchroniseer de map "%1" - - Folder rename failed - Hernoemen map mislukt + + There isn't enough free space in the local folder! + Er is niet genoeg ruimte beschikbaar in de lokale map! - - 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. + + Use &virtual files instead of downloading content immediately %1 + Gebruik &virtuele bestanden in plaats van direct downloaden content%1 - - <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> + + Warning: The local folder is not empty. Pick a resolution! + Waarschuwing: De lokale map is niet leeg. Maak een keuze! - - - OCC::OwncloudWizard + + + OCC::OwncloudConnectionMethodDialog - - Add %1 account - Toevoegen %1 account + + <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> - - Skip folders configuration - Sla configuratie van mappen over + + <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> - - Cancel - Annuleren + + Configure client-side TLS certificate + Configureer het client-side TLS-certificaat - - Enable experimental feature? - Inschakelen experimentele functies? + + Connection failed + Verbinding mislukt - - 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. - -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. - Als de "virtuele bestanden" modus is ingeschakeld, worden aanvankelijk geen bestanden gedownload. In plaats daarvan wordt een klein "% 1" -bestand gemaakt voor elk bestand dat op de server staat. De inhoud kan worden gedownload door deze bestanden uit te voeren of door hun contextmenu te gebruiken. - -De modus voor virtuele bestanden is wederzijds exclusief met selectieve synchronisatie. De op dit moment niet-geselecteerde mappen worden vertaald naar mappen die alleen online zijn en je instellingen voor selectieve synchronisatie worden opnieuw ingesteld. - -Als je naar deze modus overschakelt, wordt elke momenteel lopende synchronisatie afgebroken. - -Dit is een nieuwe, experimentele modus. Als je besluit het te gebruiken, vragen we je om eventuele problemen te melden. + + Retry unencrypted over HTTP (insecure) + Probeer onversleuteld over HTTP (onbeveiligd) - - Enable experimental placeholder mode - Inschakelen experimentele aanduider modus + + Select a different URL + Selecteer een andere URL + + + OCC::OwncloudHttpCredsPage - - Stay safe - Blijf veilig + + &Email + &E-mail - - - OCC::PasswordInputDialog - - Password for share required - Wachtwoord voor delen vereist + + Connect to %1 + Verbinden met %1 - - Please enter a password for your share: - Voer het wachtwoord in voor je deellink: + + Enter user credentials + Vul uw inloggegevens in - - - OCC::PollJob + + + OCC::OwncloudOAuthCredsPage - - Invalid JSON reply from the poll URL - Ongeldig JSON antwoord van de opgegeven URL + Login in your browser + Login in je browser - - - OCC::ProcessDirectoryJob + + + OCC::OwncloudPropagator - - Symbolic links are not supported in syncing. - Symbolische links worden niet ondersteund bij het synchroniseren. + Error with the metadata. Getting unexpected metadata format. + Fout met de metadata. Onverwacht metadata format ontvangen. - - File is listed on the ignore list. - Het bestand is opgenomen op de negeerlijst. + + Impossible to get modification time for file in conflict %1 + Onmogelijk om wijzigingstijd te krijgen voor bestand in conflict %1) + + + OCC::OwncloudSetupPage - - 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. + + &Next > + &Volgende > - - File names containing the character "%1" are not supported on this file system. - Bestandsnamen met een "%1" symbool worden niet ondersteund door het bestandssysteem. + + Could not load certificate. Maybe wrong password? + Kan certificaat niet laden. Misschien is het wachtwoord onjuist? - - File name contains at least one invalid character - De bestandsnaam bevat ten minste één ongeldig teken + + Server address does not seem to be valid + Het serveradres lijkt niet geldig - - The file name is a reserved name on this file system. - De bestandsnaam is een gereserveerde naam op dit bestandssysteem. + + Setup %1 server + @@ -4293,6 +4435,9 @@ Dit is een nieuwe, experimentele modus. Als je besluit het te gebruiken, vragen 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. + + + OCC::OwncloudSetupWizard %1 name contains at least one invalid character @@ -4304,54 +4449,54 @@ Dit is een nieuwe, experimentele modus. Als je besluit het te gebruiken, vragen %1 naam is een gereserveerde naam op dit bestandssysteem. - - Filename contains trailing spaces. - De bestandsnaam bevat spaties achteraan. + + <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> - - Filename contains leading spaces. - De bestandsnaam bevat spaties vooraan. + + A sync connection from %1 to remote directory %2 was set up. + Er is een synchronisatie verbinding van %1 naar externe map %2 opgezet. - - Filename contains leading and trailing spaces. - De bestandsnaam bevat spaties vooraan en achteraan. + + Can't 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. + - - Filename is too long. - De bestandsnaam is te lang. + + 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. - - File/Folder is ignored because it's hidden. - Bestand/Map is genegeerd omdat het verborgen is. + + Connection to %1 could not be established. Please check again. + Er kan geen verbinding worden gemaakt met %1. Probeer het nog eens. - - Stat failed. - Stat mislukt. + + Could not create local folder %1 + Kan lokale map %1 niet aanmaken - - Conflict: Server version downloaded, local copy renamed and not uploaded. - Bestandsconflict: serverversie is gedownload, de lokale kopie is hernoemd en niet geüpload + + creating folder on Nextcloud: %1 + aanmaken map op Nextcloud: %1 - - Case Clash Conflict: Server file downloaded and renamed to avoid clash. - + + Creating local sync folder %1 … + Creëren lokale synchronisatie map %1 ... - - The filename cannot be encoded on your file system. - De bestandsnaam kan op je bestandssysteem niet worden gecodeerd. + + Error: %1 + Fout: %1 - - The filename is blacklisted on the server. - De bestandsnaam staat op de negeerlijst van de server. + + Failed to connect to %1 at %2:<br/>%3 + Kon geen verbinding maken met %1 op %2:<br/>%3 @@ -4374,34 +4519,34 @@ Dit is een nieuwe, experimentele modus. Als je besluit het te gebruiken, vragen - - File has extension reserved for virtual files. - Bestand heeft een extensie gereserveerd voor virtuele bestanden. + + No remote folder specified! + Geen externe map opgegeven! - - size - omvang + + OK + OK - - permission - machtiging + + Remote folder %1 created successfully. + Externe map %1 succesvol gecreëerd. - - file id - bestand id + + Remote folder %1 creation failed with error <tt>%2</tt>. + Aanmaken van externe map %1 mislukt met fout <tt>%2</tt>. - - Server reported no %1 - Server rapporteerde nr %1 + + Successfully connected to %1! + Succesvol verbonden met %1! - - Cannot sync due to invalid modification time - Kan niet synchroniseren door ongeldig wijzigingstijdstip + + The authenticated request to the server was redirected to '%1'. The URL is bad, the server is misconfigured. + @@ -4409,24 +4554,24 @@ Dit is een nieuwe, experimentele modus. Als je besluit het te gebruiken, vragen 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 + + The remote folder %1 already exists. Connecting it for syncing. + De externe map %1 bestaat al. Verbinden voor synchroniseren. - - Conflict when uploading a folder. It's going to get cleared! - Conflict bij het uploaden van een map. Het wordt opgeruimd! + + 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> - - Conflict when uploading a file. It's going to get removed! - Conflict bij het uploaden van een bestand. Het wordt verwijderd! + + The server reported the following error: + - - Moved to invalid target, restoring - Verplaatst naar ongeldig doel, herstellen + + Timeout while trying to connect to %1 at %2. + Time-out bij verbinden met %1 op %2. @@ -4438,44 +4583,47 @@ Dit is een nieuwe, experimentele modus. Als je besluit het te gebruiken, vragen Ignored because of the "choose what to sync" blacklist Genegeerd vanwege de "wat synchroniseren" negeerlijst + + + OCC::OwncloudWizard - - 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 + + %1 Connection Wizard + - - 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 + + Add %1 account + Toevoegen %1 account - - 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 + + Enable experimental feature? + Inschakelen experimentele functies? - - Not allowed to remove, restoring - Niet toegestaan om te verwijderen, herstellen + + Enable experimental placeholder mode + Inschakelen experimentele aanduider modus - - Error while reading the database - Fout bij lezen database + + Skip folders configuration + Sla configuratie van mappen over - - Server replied with an error while reading directory "%1" : %2 - Server gaf een foutmelding bij lezen directory "%1'": %2 + + Stay safe + Blijf veilig - - - OCC::PropagateDirectory could not delete file %1 from local DB kon bestand %1 niet verwijderen uit de lokale DB + + + OCC::PasswordInputDialog Could not delete file %1 from local DB @@ -4486,6 +4634,9 @@ Dit is een nieuwe, experimentele modus. Als je besluit het te gebruiken, vragen Error updating metadata due to invalid modification time Fout bij bijwerken metadata door ongeldige laatste wijziging datum + + + OCC::PollJob @@ -4496,6 +4647,9 @@ Dit is een nieuwe, experimentele modus. Als je besluit het te gebruiken, vragen The folder %1 cannot be made read-only: %2 Map %1 kon niet alleen-lezen gemaakt worden: %2 + + + OCC::ProcessDirectoryJob @@ -4503,174 +4657,154 @@ Dit is een nieuwe, experimentele modus. Als je besluit het te gebruiken, vragen - - Error updating metadata: %1 - Fout bij bijwerken metadata: %1 + + %1 name contains at least one invalid character + %1 naam bevat op z'n minst één ongeldig teken - - File is currently in use - Bestand is al in gebruik + + %1 name is a reserved name on this file system. + %1 naam is een gereserveerde naam op dit bestandssysteem. - - - OCC::PropagateDownloadFile - - Could not get file %1 from local DB - + + Cannot sync due to invalid modification time + Kan niet synchroniseren door ongeldig wijzigingstijdstip - - could not get file %1 from local DB - kon bestand %1 niet ophalen uit de lokale DB + + Case Clash Conflict: Server file downloaded and renamed to avoid clash. + - - File %1 cannot be downloaded because encryption information is missing. - Bestand %1 kan niet worden gedownload, omdat crypto informatie ontbreekt. + + Conflict when uploading a file. It's going to get removed! + Conflict bij het uploaden van een bestand. Het wordt verwijderd! - - - File has changed since discovery - Het bestand is gewijzigd sinds het is gevonden + + Conflict when uploading a folder. It's going to get cleared! + Conflict bij het uploaden van een map. Het wordt opgeruimd! - - - Could not delete file record %1 from local DB - Kon bestandsrecord %1 niet verwijderen uit de lokale DB + + Conflict: Server version downloaded, local copy renamed and not uploaded. + Bestandsconflict: serverversie is gedownload, de lokale kopie is hernoemd en niet geüpload - - 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 + + Could not upload file, because it is open in "%1". + Kan bestand niet uploaden, omdat het geopend is in "%1". - - The download would reduce free local disk space below the limit - De download zou de vrije lokale schijfruimte beperken tot onder de limiet + + Error while deleting file record %1 from the database + Fout tijdens verwijderen bestandsrecord %1 uit de database - - Free space on disk is less than %1 - Vrije schijfruimte is minder dan %1 + + Error while reading the database + Fout bij lezen database - - File was deleted from server - Bestand was verwijderd van de server + + File has extension reserved for virtual files. + Bestand heeft een extensie gereserveerd voor virtuele bestanden. - - The file could not be downloaded completely. - Het bestand kon niet volledig worden gedownload. + + file id + bestand id - - 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 is listed on the ignore list. + Het bestand is opgenomen op de negeerlijst. - - - 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 name contains at least one invalid character + De bestandsnaam bevat ten minste één ongeldig teken - - File %1 downloaded but it resulted in a local file name clash! - Bestand %1 gedownload maar het resulteerde in een lokaal bestandsnaam conflict! + + File names containing the character "%1" are not supported on this file system. + Bestandsnamen met een "%1" symbool worden niet ondersteund door het bestandssysteem. - - Error updating metadata: %1 - Fout bij bijwerken metadata: %1 + + 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. - - The file %1 is currently in use - Bestand %1 is al in gebruik + + File/Folder is ignored because it's hidden. + Bestand/Map is genegeerd omdat het verborgen is. - - - OCC::PropagateItemJob - - ; Restoration Failed: %1 - ; Herstellen mislukt: %1 + + Filename is too long. + De bestandsnaam is te lang. - - 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 + + Folder + Map - - - OCC::PropagateLocalMkdir - - could not delete file %1, error: %2 - kon bestand file %1 niet verwijderen, fout: %2 + + Ignored because of the "choose what to sync" blacklist + Genegeerd vanwege de "wat synchroniseren" negeerlijst - - 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! + + Moved to invalid target, restoring + Verplaatst naar ongeldig doel, herstellen - - Could not create folder %1 - Kon map %1 niet maken + + 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 - - - - The folder %1 cannot be made read-only: %2 - Map %1 kon niet alleen-lezen gemaakt worden: %2 + + 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 - - unknown exception - + + Not allowed to remove, restoring + Niet toegestaan om te verwijderen, herstellen - - Error updating metadata: %1 - Fout bij bijwerken metadata: %1 + + 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 - - The file %1 is currently in use - Bestand %1 is al in gebruik + + permission + machtiging - - - 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 + + Reason: the entire filename is forbidden. + - - Could not delete file record %1 from local DB - Kon bestandsrecord %1 niet verwijderen uit de lokale DB + + Reason: the file has a forbidden extension (.%1). + - - - 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! + + Reason: the filename contains a forbidden character (%1). + - - File %1 downloaded but it resulted in a local file name clash! - Bestand %1 gedownload maar het resulteerde in een lokaal bestandsnaam conflict! + + Reason: the filename has a forbidden base name (filename start). + @@ -4693,98 +4827,90 @@ Dit is een nieuwe, experimentele modus. Als je besluit het te gebruiken, vragen Fout bij instellen pin status - - - Error updating metadata: %1 - Fout bij bijwerken metadata: %1 + + Stat failed. + Stat mislukt. - - The file %1 is currently in use - Bestand %1 is al in gebruik + + Symbolic links are not supported in syncing. + Symbolische links worden niet ondersteund bij het synchroniseren. - - - Could not delete file record %1 from local DB - Kon bestandsrecord %1 niet verwijderen uit de lokale DB + + The file name is a reserved name on this file system. + De bestandsnaam is een gereserveerde naam op dit bestandssysteem. - - Failed to propagate directory rename in hierarchy - + + The filename cannot be encoded on your file system. + De bestandsnaam kan op je bestandssysteem niet worden gecodeerd. - - Failed to rename file - Kon bestand niet hernoemen + + The filename is blacklisted on the server. + De bestandsnaam staat op de negeerlijst van de server. - - - OCC::PropagateRemoteDelete + + + OCC::PropagateDirectory - - 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 %1 from local DB + kon bestand %1 niet verwijderen uit de lokale DB - - Could not delete file record %1 from local DB - Kon bestandsrecord %1 niet verwijderen uit de lokale DB + + Could not delete file %1 from local DB + - - - 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". + + Error updating metadata due to invalid modification time + Fout bij bijwerken metadata door ongeldige laatste wijziging datum - - - 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". + + File is currently in use + Bestand is al in gebruik - - Failed to encrypt a folder %1 - Kon een map %1 niet versleutelen + + The folder %1 cannot be made read-only: %2 + Map %1 kon niet alleen-lezen gemaakt worden: %2 - - Error writing metadata to the database: %1 - Fout bij schrijven van metadata naar de database: %1 + + unknown exception + + + + OCC::PropagateDownloadFile - - The file %1 is currently in use - Bestand %1 is al in gebruik + + Could not delete file record %1 from local DB + Kon bestandsrecord %1 niet verwijderen uit de lokale DB - - - OCC::PropagateRemoteMove - - Could not rename %1 to %2, error: %3 - Kon niet %1 hernoemen naar %2, fout: %3 + + could not get file %1 from local DB + kon bestand %1 niet ophalen uit de lokale DB - - Error updating metadata: %1 - Fout bij bijwerken metadata: %1 + + Could not get file %1 from local DB + - - The file %1 is currently in use - Bestand %1 is al in gebruik + + File %1 can not be downloaded because encryption information is missing. + - - 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". + + 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 @@ -4802,255 +4928,256 @@ Dit is een nieuwe, experimentele modus. Als je besluit het te gebruiken, vragen Kon bestandsrecord %1 niet verwijderen uit de lokale DB - - Error setting pin state - Fout bij instellen pin status + + 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. - - Error writing metadata to the database - Fout bij schrijven van Metadata naar de database + + File has changed since discovery + Het bestand is gewijzigd sinds het is gevonden - - - OCC::PropagateUploadFileCommon - - Failed to upload encrypted file. - Kon versleuteld bestand niet uploaden. + + File was deleted from server + Bestand was verwijderd van de server - - 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 + + Free space on disk is less than %1 + Vrije schijfruimte is minder dan %1 - - - Upload of %1 exceeds the quota for the folder - Upload van %1 overschrijdt het quotum voor de map + + 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 has invalid modification time. Do not upload to the server. - Bestand %1 heeft een ongeldige laatste wijziging datum. Upload niet naar de server. + + The downloaded file is empty despite that the server announced it should have been %1. + - - File Removed (start upload) %1 - Bestand verwijderd (start upload) %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. - - Local file changed during syncing. It will be resumed. - Lokaal bestand gewijzigd gedurende sync. Wordt opnieuw meegenomen. + + The file could not be downloaded completely. + Het bestand kon niet volledig worden gedownload. + + + OCC::PropagateItemJob - - Local file changed during sync. - Lokaal bestand gewijzigd tijdens sync. + + ; Restoration Failed: %1 + ; Herstellen mislukt: %1 - - Failed to unlock encrypted folder. - Kon versleutelde map niet ontgrendelen. + + 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 + + + OCC::PropagateLocalMkdir - - Unable to upload an item with invalid characters - Kon een item met onjuiste tekens niet uploaden + + Attention, possible case sensitivity clash with %1 + - - Error updating metadata: %1 - Fout bij bijwerken metadata: %1 + + Could not create folder %1 + Kon map %1 niet maken - - The file %1 is currently in use - Bestand %1 is al in gebruik + + could not delete file %1, error: %2 + kon bestand file %1 niet verwijderen, fout: %2 - - - OCC::PropagateUploadFileNG - - The local file was removed during sync. - Het lokale bestand werd verwijderd tijdens sync. + + 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! + + + OCC::PropagateLocalRemove - - Local file changed during sync. - Lokaal bestand gewijzigd tijdens sync. + + 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 - - Poll URL missing - Peilingen-URL ontbreekt + + Could not remove folder '%1' + - - Unexpected return code from server (%1) - Onverwachte reactie van server (%1) + + Error removing '%1': %2; + + + + OCC::PropagateLocalRename - - Missing File ID from server - Ontbrekende File ID van de server + + Error setting pin state + Fout bij instellen pin status - - Missing ETag from server - Ontbrekende ETag van de server + + Failed to propagate directory rename in hierarchy + - - - OCC::PropagateUploadFileV1 - - Poll URL missing - URL opvraag ontbreekt + + Failed to rename file + Kon bestand niet hernoemen - - The local file was removed during sync. - Het lokale bestand werd verwijderd tijdens sync. + + File %1 can not be renamed to %2 because of a local file name clash + - - Local file changed during sync. - Lokaal bestand gewijzigd tijdens sync. + + 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::PropagateRemoteMkdir - - 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) + + Error writing metadata to the database: %1 + Fout bij schrijven van metadata naar de database: %1 - - - OCC::ProxyAuthDialog - - Proxy authentication required - Proxy-authenticatie vereist + + Failed to encrypt a folder %1 + Kon een map %1 niet versleutelen - - Username: - Gebruikersnaam: + + 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 - - Proxy: - Proxy: + + Could not rename %1 to %2, error: %3 + Kon niet %1 hernoemen naar %2, fout: %3 + + + OCC::PropagateUploadFileCommon - - The proxy server needs a username and password. - De proxyserver heeft een gebruikersnaam en wachtwoord nodig + + Failed to unlock encrypted folder. + Kon versleutelde map niet ontgrendelen. - - Password: - Wachtwoord: + + Failed to upload encrypted file. + Kon versleuteld bestand niet uploaden. - - - OCC::SelectiveSyncDialog - - Choose What to Sync - Kies wat te synchroniseren + + Unable to upload an item with invalid characters + Kon een item met onjuiste tekens niet uploaden - - - OCC::SelectiveSyncWidget - - Loading … - Laden ... + + Upload of %1 exceeds the quota for the folder + Upload van %1 overschrijdt het quotum voor de map + + + OCC::PropagateUploadFileNG - - Deselect remote folders you do not wish to synchronize. - Deselecteer de externe mappen die u niet wenst te synchroniseren. + + Missing ETag from server + Ontbrekende ETag van de server - - Name - Naam + + Missing File ID from server + Ontbrekende File ID van de server - - Size - Grootte + + Poll URL missing + Peilingen-URL ontbreekt - - - No subfolders currently on the server. - Momenteel geen submappen op de server. + + Unexpected return code from server (%1) + Onverwachte reactie van server (%1) + + + OCC::PropagateUploadFileV1 - - An error occurred while loading the list of sub folders. - Er trad een fout op bij het laden van de lijst met submappen. + + 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) - - - OCC::ServerNotificationHandler + + + OCC::ProxyAuthDialog - - Reply - Antwoord + + Password: + Wachtwoord: - - Dismiss - Terzijde leggen + + Proxy authentication required + Proxy-authenticatie vereist - - - OCC::SettingsDialog - - Settings - Instellingen + + Proxy: + Proxy: - - %1 Settings - This name refers to the application name e.g Nextcloud - %1 Instellingen + + The proxy server needs a username and password. + De proxyserver heeft een gebruikersnaam en wachtwoord nodig - - General - Algemeen + + Username: + Gebruikersnaam: + + + OCC::SelectiveSyncDialog - - Network - Netwerk + + Choose What to Sync + Kies wat te synchroniseren + + + OCC::SelectiveSyncWidget - - Account - Account + + An error occurred while loading the list of sub folders. + Er trad een fout op bij het laden van de lijst met submappen. - - - OCC::ShareManager Error Fout - - - OCC::ShareModel %1 days @@ -5067,29 +5194,35 @@ Dit is een nieuwe, experimentele modus. Als je besluit het te gebruiken, vragen - - Secure file drop link - Beveiligde bestands-drop link + + Size + Grootte + + + OCC::ServerNotificationHandler - - Share link - Deellink + + Reply + Antwoord + + + OCC::SettingsDialog - - Link share - + + %1 Settings + %1 Instellingen - - Internal link - Interne link + + Account + Account - - Secure file drop - Beveiligde bestands-drop + + General + Algemeen @@ -5097,123 +5230,117 @@ Dit is een nieuwe, experimentele modus. Als je besluit het te gebruiken, vragen Kan lokale map niet vinden voor %1 - - Enter a note for the recipient - Geef een notitie op voor de ontvanger + + New Account + Nieuw account - - - OCC::ShareeModel + + + OCC::ShareDialog - - - Search globally - Zoek door alles + + %1 Sharing + - - No results found - Geen resultaten gevonden + + Folder: %2 + - - Global search results - Zoekresultaten (global) + + Icon + - - %1 (%2) - sharee (shareWithAdditionalInfo) - %1 (%2) + + Nextcloud Path: + - - - OCC::SocketApi - - Failed to encrypt folder at "%1" - Kon een map niet versleutelen in %1 + + The file can not be shared because it was shared without sharing permission. + + + + OCC::ShareLinkWidget - - 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. + + <p>Do you really want to delete the public link share <i>%1</i>?</p><p>Note: This action cannot be undone.</p> + - - Failed to encrypt folder - Kon de map niet versleutelen + + Add note to recipient + - - Could not encrypt the following folder: "%1". - -Server replied with error: %2 - Kon de volgende map niet versleutelen: "%1". - -Server antwoordde met fout: %2 + + Allow Editing + - - Folder encrypted successfully - Map succesvol versleuteld + + Allow Upload && Editing + - - The following folder was encrypted successfully: "%1" - De volgende map was succesvol versleuteld: "%1" + + Confirm Link Share Deletion + - - Context menu share - Contextmenu delen + + Expiration Date + - - Select new location … - Selecteer nieuwe locatie ... + + Public link + - - I shared something with you - Ik deelde iets met u + + Read only + + + + OCC::ShareModel - - - Share options - Deelopties + + %1 days + %1 dagen - - - Activity - Activiteit + + 1 day + 1 dag - - Copy private link to clipboard - Kopieer privé-link naar klembord + + Could not find local folder for %1 + Kan lokale map niet vinden voor %1 - - Send private link by email … - Verstuur privélink per e-mail --- + Enter a note for the recipient + Geef een notitie op voor de ontvanger - - Leave this share - Verlaat deze gedeelde locatie + + Internal link + Interne link - - Resharing this file is not allowed - Verder delen van dit bestand is niet toegestaan + + Link share + - - Resharing this folder is not allowed - Verder delen van deze map is niet toegestaan + + Secure file drop + Beveiligde bestands-drop @@ -5221,11 +5348,13 @@ Server antwoordde met fout: %2 Kopieer beveiligde bestands-drop link - - - Copy public link - Kopieer openbare link + + Today + Vandaag + + + OCC::ShareUserGroupWidget Copy internal link @@ -5237,30 +5366,31 @@ Server antwoordde met fout: %2 Kopieer beveiligde bestands-drop link - - Encrypt - Versleutel + + Share with users or groups … + + + + OCC::ShareUserLine - - Lock file - Vergrendel bestand + + Can change + - - Unlock file - Ontgrendel bestand + + Can create + - - Locked by %1 - Vergrendeld door %1 + + Can delete + - - - Expires in %1 minutes - remaining time before lock expires - Vervalt over %n maandenVervalt over %1 minuut/minuten + + Can edit + Kan bewerken @@ -5278,448 +5408,448 @@ Server antwoordde met fout: %2 Oplossen conflict ... - - Move and rename … - Verplaatsen en hernoemen ... + Username + Gebruikersnaam + + + OCC::ShareeModel - - Move, rename and upload … - Verplaatsen, hernoemen en uploaden ... + + Global search results + Zoekresultaten (global) - - Delete local changes - Verwijder lokale aanpassingen + + No results found + Geen resultaten gevonden - - Move and upload … - Verplaatsen en uploaden ... + + Search globally + Zoek door alles + + + OCC::ShibbolethCredentials - - Delete - Verwijderen + + Login Error + - - - OCC::SslButton - - <h3>Certificate Details</h3> - <h3>Certificaat details</h3> + + You must sign in as user %1 + + + + OCC::ShibbolethWebView - - Common Name (CN): - Common Name (CN): + + %1 - Authenticate + - - Subject Alternative Names: - Alternatieve subject namen: + + Reauthentication required + - - Organization (O): - Organisatie (O): + + SSL Cipher Debug View + - - Organizational Unit (OU): - Organisatie unit (OU): + + Your session has expired. You need to re-login to continue to use the client. + + + + OCC::SocketApi - - State/Province: - Land/Provincie: + + Context menu share + Contextmenu delen - - Country: - Land: + + Copy internal link + Kopieer interne link - - Serial: - Serienummer: + + Copy private link to clipboard + Kopieer privé-link naar klembord - - <h3>Issuer</h3> - <h3>Uitgever</h3> + + Copy public link + Kopieer openbare link - - Issuer: - Uitgever: + + Copy secure file drop link + Kopieer beveiligde bestands-drop link - - Issued on: - Uitgegeven op: + + Copy secure filedrop link + Kopieer beveiligde bestands-drop link - - Expires on: - Vervalt op: + + Could not encrypt the following folder: "%1". + +Server replied with error: %2 + Kon de volgende map niet versleutelen: "%1". + +Server antwoordde met fout: %2 - - <h3>Fingerprints</h3> - <h3>Vingerafdrukken</h3> + + Delete local changes + Verwijder lokale aanpassingen - - SHA-256: - SHA-256: + + Edit + Bewerken + + + + Expires in %1 minutes + + + + Verloopt in %1 minuten + - - SHA-1: - SHA-1: + + Failed to encrypt folder + Kon de map niet versleutelen - - <p><b>Note:</b> This certificate was manually approved</p> - <p><b>Let op:</b> Dit certificaat werd handmatig goedgekeurd</p> + + Failed to encrypt folder at "%1" + Kon een map niet versleutelen in %1 - - %1 (self-signed) - %1 (zelf ondertekend) + + Folder encrypted successfully + Map succesvol versleuteld - - %1 - %1 + + I shared something with you + Ik deelde iets met u - - This connection is encrypted using %1 bit %2. - - Deze verbinding is versleuteld via %1 bit %2. - + + Leave this share + Verlaat deze gedeelde locatie - - This connection is NOT secure as it is not encrypted. - - Deze verbinding is NIET veilig, omdat deze niet versleuteld is. - + + Lock file + Vergrendel bestand - - Server version: %1 - Serverversie: %1 + + Locked by %1 + Vergrendeld door %1 - - No support for SSL session tickets/identifiers - Geen ondersteuning voor SSL-sessie tickets/identifiers + + Move and rename … + Verplaatsen en hernoemen ... - - Certificate information: - Certificaat informatie: + + Move and upload … + Verplaatsen en uploaden ... - - The connection is not secure - De verbinding is niet veilig + + Move, rename and upload … + Verplaatsen, hernoemen en uploaden ... - - - OCC::SslErrorDialog - - Trust this certificate anyway - Vertrouw dit certificaat alsnog + + Open in browser + Openen in browser - - Untrusted Certificate - Niet vertrouwd certificaat + + Resharing this file is not allowed + Verder delen van dit bestand is niet toegestaan - - Cannot connect securely to <i>%1</i>: - Kan niet beveiligd verbinden met <i>%1</i>: + + Resharing this folder is not allowed + Verder delen van deze map is niet toegestaan - - Additional errors: - Additionele fouten: + + Resolve conflict … + Oplossen conflict ... - - with Certificate %1 - met certificaat %1 + + Select new location … + Selecteer nieuwe locatie ... - - - - &lt;not specified&gt; - &lt;niet gespecificeerd&gt; + + Send private link by email … + Verstuur privélink per e-mail --- - - - Organization: %1 - Organisatie: %1 + + Share options + Deelopties - - - Unit: %1 - Unit: %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. - - - Country: %1 - Land: %1 + + The following folder was encrypted successfully: "%1" + De volgende map was succesvol versleuteld: "%1" - - Fingerprint (SHA1): <tt>%1</tt> - Fingerprint (SHA1): <tt>%1</tt> + + Unlock file + Ontgrendel bestand + + + OCC::SslButton - - Fingerprint (SHA-256): <tt>%1</tt> - Fingerprint (SHA-256): <tt>%1</tt> + + %1 + %1 - - Fingerprint (SHA-512): <tt>%1</tt> - Fingerprint (SHA-512): <tt>%1</tt> + + %1 (self-signed) + %1 (zelf ondertekend) - - Effective Date: %1 - Ingangsdatum: %1 + + <h3>Certificate Details</h3> + <h3>Certificaat details</h3> - - Expiration Date: %1 - Vervaldatum: %1 + + <h3>Fingerprints</h3> + <h3>Vingerafdrukken</h3> - - Issuer: %1 - Uitgever: %1 + + <h3>Issuer</h3> + <h3>Uitgever</h3> - - - OCC::SyncEngine - - %1 (skipped due to earlier error, trying again in %2) - %1 (overgeslagen wegens een eerdere fout, probeer opnieuw over %2) + + <p><b>Note:</b> This certificate was manually approved</p> + <p><b>Let op:</b> Dit certificaat werd handmatig goedgekeurd</p> - - Could not update file: %1 - Kon bestand niet bijwerken: %1 + + Certificate information: + Certificaat informatie: - - Could not update virtual file metadata: %1 - Kon virtuele bestand metadata niet bijwerken: %1 + + Common Name (CN): + Common Name (CN): - - Could not update file metadata: %1 - Kon bestand metadata niet bijwerken: %1 + + Country: + Land: - - Could not set file record to local DB: %1 - Kon bestandsrecord %1 niet instellen op de lokale DB: %1 + + Expires on: + Vervalt op: - - Unresolved conflict. - Bestandsconflict + + Issued on: + Uitgegeven op: - - 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 + + Issuer: + Uitgever: - - 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 + + No support for SSL session tickets/identifiers + Geen ondersteuning voor SSL-sessie tickets/identifiers - - Using virtual files with suffix, but suffix is not set - gebruik maken van virtuele bestanden met achtervoegsel, maar achtervoegsel niet ingesteld + + Organization (O): + Organisatie (O): - - Unable to read the blacklist from the local database - Kan de blacklist niet lezen uit de lokale database + + Organizational Unit (OU): + Organisatie unit (OU): - - Unable to read from the sync journal. - Niet mogelijk om te lezen uit het synchronisatie verslag. + + Serial: + Serienummer: - - Cannot open the sync journal - Kan het sync transactielog niet openen + + Server version: %1 + Serverversie: %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. + + SHA-1: + SHA-1: - - There is insufficient space available on the server for some uploads. - Onvoldoende schijfruimte op de server voor sommige uploads. + + SHA-256: + SHA-256: - - - OCC::SyncStatusSummary - - - Offline - Offline + + State/Province: + Land/Provincie: - - - - All synced! - Alles gesynchroniseerd! + + Subject Alternative Names: + Alternatieve subject namen: - - Some files couldn't be synced! - Sommige bestanden konden niet gesynchroniseerd worden! + + The connection is not secure + De verbinding is niet veilig - - See below for errors - Zie hieronder voor fouten + + This connection is encrypted using %1 bit %2. + Deze verbinding is versleuteld via %1 bit %2. - - Checking folder changes - Controleren op wijzigingen map + + This connection is NOT secure as it is not encrypted. + Deze verbinding is NIET veilig, omdat deze niet versleuteld is. + + + OCC::SslErrorDialog - - Syncing changes - Synchroniseren wijzigingen + + &lt;not specified&gt; + &lt;niet gespecificeerd&gt; - - Sync paused - Synchronisatie gepauzeerd + + Additional errors: + Additionele fouten: - - Some files could not be synced! - Sommige bestanden konden niet gesynchroniseerd worden! + + Cannot connect securely to <i>%1</i>: + Kan niet beveiligd verbinden met <i>%1</i>: - - See below for warnings - Zie hieronder voor waarschuwingen + + Country: %1 + Land: %1 - - Syncing - Synchroniseren + + Effective Date: %1 + Ingangsdatum: %1 - - %1 of %2 · %3 left - %1 van %2 · %3 resterend + + Expiration Date: %1 + Vervaldatum: %1 - - %1 of %2 - %1 van %2 + + Fingerprint (SHA-256): <tt>%1</tt> + Fingerprint (SHA-256): <tt>%1</tt> - - Syncing file %1 of %2 - Bestand %1 van %2 synchroniseren + + Fingerprint (SHA-512): <tt>%1</tt> + Fingerprint (SHA-512): <tt>%1</tt> - - - OCC::Systray - - Download - Download + + Fingerprint (SHA1): <tt>%1</tt> + Fingerprint (SHA1): <tt>%1</tt> - - Add account - Account toevoegen + + Issuer: %1 + Uitgever: %1 - - Open main dialog - Open het hoofdvenster + + Organization: %1 + Organisatie: %1 - - - Pause sync - Pauzeer sync + + Trust this certificate anyway + Vertrouw dit certificaat alsnog - - - Resume sync - Vervolg sync + + Unit: %1 + Unit: %1 - - Settings - Instellingen + + Untrusted Certificate + Niet vertrouwd certificaat - - Help - Help + + with Certificate %1 + met certificaat %1 + + + OCC::SyncEngine - - Exit %1 - %1 afsluiten + + %1 (skipped due to earlier error, trying again in %2) + %1 (overgeslagen wegens een eerdere fout, probeer opnieuw over %2) - - Pause sync for all - Pauzeer sync voor iedereen + + A HTTP transmission error happened. + - - Resume sync for all - Vervolg sync voor iedereen + + A network connection timeout happened. + - - %1: %2 - %1: %2 + + Access is forbidden + - - - OCC::Theme <p>%1 Desktop Client Version %2 (%3). For more information please click <a href='%4'>here</a>.</p> @@ -5733,77 +5863,65 @@ Server antwoordde met fout: %2 <p>%1 Desktop Client</p> - - <p>%1 Desktop Client</p><p>Version %1. For more information please click <a href='%2'>here</a>.</p> - Example text: "<p>Nextcloud Desktop Client</p>" (%1 is the application name) - <p>%1 Desktop Client</p><p>Version %1. Voor meer informatie klik <a href='%2'>hier</a>.</p> + + An internal error number %1 occurred. + - - <p><small>Using virtual files plugin: %1</small></p> - <p><small>Gebruik makend van virtuele bestanden plugin: %1</small></p> + + Cannot open the sync journal + Kan het sync transactielog niet openen - - <p>%1 desktop client %2</p> - Example text: "<p>Nextcloud Desktop Client</p>" (%1 is the application name) - <p>%1 desktop cliënt %2</p> + + Could not set file record to local DB: %1 + Kon bestandsrecord %1 niet instellen op de lokale DB: %1 - - - <p>Version %1. For more information please click <a href='%2'>here</a>.</p> - <p>Versie %1. Voor meer informatie klik <a href='%2'>hier</a>.</p> + + Could not update file metadata: %1 + Kon bestand metadata niet bijwerken: %1 - - <p>This release was supplied by %1.</p> - <p>Deze release is geleverd door %1</p> + + Could not update file: %1 + Kon bestand niet bijwerken: %1 - - - OCC::UnifiedSearchResultsListModel - - Failed to fetch providers. - Fout bij het laden van providers. + + Could not update virtual file metadata: %1 + Kon virtuele bestand metadata niet bijwerken: %1 - - Failed to fetch search providers for '%1'. Error: %2 - Fout bij het zoeken van providers voor '%1'. Error: %2 + + CSync unspecified error. + - - Search has failed for '%2'. - Fout bij het zoeken naar '%2'. + + Discovery step failed. + - - Search has failed for '%1'. Error: %2 - Fout bij het zoeken naar '%1'. Error: %2 + + 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. - - - OCC::UpdateE2eeFolderMetadataJob - - Failed to update folder metadata. - Kon metadata niet uploaden. + + Error while reading folder. + - - Failed to unlock encrypted folder. - Kon versleutelde map niet ontgrendelen. + + Failed to load or create the journal file. Make sure you have read and write permissions in the local sync folder. + - - Failed to finalize item. - Kon item niet afronden. + + File names containing the character '%1' are not supported on this file system. + - - - OCC::UpdateE2eeFolderUsersMetadataJob @@ -5818,28 +5936,25 @@ Server antwoordde met fout: %2 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 + + Folder hierarchy is too deep + - - Could not find root encrypted folder for folder %1 - Kon de versleutelde basismap voor map %1 niet vinden + + Invalid characters, please rename "%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 + + Local files and share folder removed. + Failed to unlock a folder. Kon een map niet ontgrendelen. - - - OCC::User End-to-end certificate needs to be migrated to a new one @@ -5856,15 +5971,14 @@ Server antwoordde met fout: %2 %1 meldingen - - Retry all uploads - Probeer alle uploads opnieuw + + No space on %1 server available. + - - - Resolve conflict - Conflict oplossen... + + Not allowed because you don't have permission to add parent folder + @@ -5881,129 +5995,122 @@ Server antwoordde met fout: %2 Open Nextcloud Talk in browser Open Nextcloud Talk in browser - - - OCC::UserModel - - Confirm Account Removal - Bevestig verwijderen account + + the destination + - - <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> + + The mounted folder is temporarily not available on the server + - - Remove connection - Verwijderen verbinding + + The service is temporarily unavailable + - - Cancel - Annuleren + + the source + - - - 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. + + There is insufficient space available on the server for some uploads. + Onvoldoende schijfruimte op de server voor sommige uploads. - - 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. + + Tried to create a folder that already exists. + - - 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. + + 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 - - Emojis are not supported. Some status functionality may not work. - Emoji's worden niet ondersteund. Sommige gebruikersstatusfuncties werken mogelijk niet. + + Unable to read from the sync journal. + Niet mogelijk om te lezen uit het synchronisatie verslag. - - 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. + + Unable to read the blacklist from the local database + Kan de blacklist niet lezen uit de lokale database - - 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. + + Unresolved conflict. + Bestandsconflict - - - Don't clear - Niet wissen + + Using virtual files with suffix, but suffix is not set + gebruik maken van virtuele bestanden met achtervoegsel, maar achtervoegsel niet ingesteld + + + OCC::SyncLogDialog - - 30 minutes - 30 minuten + + Synchronisation Log + + + + OCC::SyncStatusSummary - - - 1 hour - 1 uur + + %1 of %2 + %1 van %2 - - 4 hours - 4 uren + + %1 of %2 · %3 left + %1 van %2 · %3 resterend - - - Today - Vandaag + + Checking folder changes + Controleren op wijzigingen map - - - This week - Deze week + + Offline + Offline - - Less than a minute - Minder dan een minuut + + Preparing sync + - - 1 minute - 1 minuut + + See below for errors + Zie hieronder voor fouten - - %1 minutes - %1 minuten + + See below for warnings + Zie hieronder voor waarschuwingen - - %1 hours - %1 uren + + Some files could not be synced! + Sommige bestanden konden niet gesynchroniseerd worden! - - 1 day - 1 dag + + Some files couldn't be synced! + Sommige bestanden konden niet gesynchroniseerd worden! - - %1 days - %1 dagen + + Syncing changes + Synchroniseren wijzigingen - - - OCC::Vfs Please choose a different location. %1 is a drive. It doesn't support virtual files. @@ -6014,6 +6121,9 @@ Server antwoordde met fout: %2 The Virtual filesystem feature requires a NTFS file system, %1 is using %2 De Virtuele bestandssysteemfunctie vereist een NTFS bestandssysteem, %1 gebruikt %2 + + + OCC::Systray Please choose a different location. %1 isn't a NTFS file system. It doesn't support virtual files. @@ -6028,139 +6138,132 @@ Server antwoordde met fout: %2 OCC::VfsDownloadErrorDialog - - Download error - Downloadfout + + Open main dialog + Open het hoofdvenster + + + OCC::Theme - - Error downloading - Fout bij downloaden + + <p>%1 %2</p> + <p>%1 %2</p> - - could not be downloaded - kon niet worden gedownload + + <p>%1 desktop client %2</p> + <p>%1 desktop cliënt %2</p> - - > More details - > Meer details + <p>%1 Desktop Client</p> + <p>%1 Desktop Client</p> - - More details - Meer details + + <p>%1 Desktop Client</p><p>Version %1. For more information please click <a href='%2'>here</a>.</p> + <p>%1 Desktop Client</p><p>Version %1. Voor meer informatie klik <a href='%2'>hier</a>.</p> - - Error downloading %1 - Fout bij downloaden %1 + + <p><small>Using virtual files plugin: %1</small></p> + <p><small>Gebruik makend van virtuele bestanden plugin: %1</small></p> - - %1 could not be downloaded. - %1 kon niet worden gedownload. + + <p>This release was supplied by %1.</p> + <p>Deze release is geleverd door %1</p> - - - OCC::VfsSuffix - - - Error updating metadata due to invalid modification time - Fout bij bijwerken metadata door ongeldige laatste wijziging datum + + <p>This release was supplied by %1</p> + - - - OCC::VfsXAttr - - - Error updating metadata due to invalid modification time - Fout bij bijwerken metadata door ongeldige laatste wijziging datum + + <p>Version %1. For more information please click <a href='%2'>here</a>.</p> + <p>Versie %1. Voor meer informatie klik <a href='%2'>hier</a>.</p> - - - OCC::WebEnginePage - - Invalid certificate detected - Ongeldig certificaat gedetecteerd + + easy/0118 + easy/0118 + + + OCC::UnifiedSearchResultsListModel - - The host "%1" provided an invalid certificate. Continue? - De server "%1" heeft een ongeldig certificaat . Wilt u doorgaan? + + Failed to fetch providers. + Fout bij het laden van providers. - - - 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. + + Failed to fetch search providers for '%1'. Error: %2 + Fout bij het zoeken van providers voor '%1'. Error: %2 - - Please login with the account: %1 - Meld aan met account: %1 + + Search has failed for '%1'. Error: %2 + Fout bij het zoeken naar '%1'. Error: %2 - - - OCC::WelcomePage - - Form - Formulier + + Search has failed for '%2'. + Fout bij het zoeken naar '%2'. + + + OCC::UpdateE2eeFolderMetadataJob - - Log in - Aanmelden + + Failed to finalize item. + Kon item niet afronden. - - Sign up with provider - Aanmelden bij provider + + Failed to update folder metadata. + Kon metadata niet uploaden. + + + OCC::UpdateE2eeFolderUsersMetadataJob - - Keep your data secure and under your control - Hou je gegevens veilig en in eigen beheer + Could not add or remove a folder user %1, for folder %2 + - - Secure collaboration & file exchange - Veilige samenwerking & bestandsuitwisseling + + Could not add or remove user %1 to access folder %2 + Kan gebruiker %1 niet toevoegen of verwijderen voor toegang tot map %2 - - Easy-to-use web mail, calendaring & contacts - Eenvoudig te gebruiken webmail, agenda & contacten + + Could not fetch public key for user %1 + Kon de publieke sleutel voor gebruiker %1 niet vinden - - Screensharing, online meetings & web conferences - Schermdelen, online afspraken & web conferenties + + Could not find root encrypted folder for folder %1 + Kon de versleutelde basismap voor map %1 niet vinden - - Host your own server - Host je eigen server + + Error updating metadata for a folder %1 + Fout bij bijwerken metadata voor een map: %1 - - - OCC::ownCloudGui - - Unsupported Server Version - Niet-ondersteunde server versie + + Failed to unlock a folder. + Kon een map niet ontgrendelen. + + + OCC::User - - 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. + + %1 notifications + %1 kennisgevingen @@ -6173,75 +6276,80 @@ Server antwoordde met fout: %2 - - Disconnected - Niet verbonden + + Resolve conflict + Conflict oplossen... - - Disconnected from some accounts - Niet verbonden met sommige accounts + + Retry all uploads + Probeer alle uploads opnieuw - - Disconnected from %1 - Losgekoppeld van %1 + + You changed + - - Disconnected from accounts: - Losgekoppeld van account: + + You created + - - Account %1: %2 - Account %1: %2 + + You deleted + - - Please sign in - Log alstublieft in + + You renamed + + + + OCC::UserModel - - Signed out - Afgemeld + + <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> - - Account synchronization is disabled - Account synchronisatie is uitgeschakeld + + Confirm Account Removal + Bevestig verwijderen account - - - Synchronization is paused - Synchronisatie is gepauzeerd + + Remove connection + Verwijderen verbinding + + + OCC::UserStatusSelectorModel - - Folder %1: %2 - Map %1: %2 + + %1 hours + %1 uren - - Unresolved conflicts - Niet opgeloste conflicten + + %1 minutes + %1 minuten - - Up to date - Bijgewerkt + + 1 hour + 1 uur - - Error during synchronization - Fout bij synchronisatie + + 1 minute + 1 minuut - - No sync folders configured - Geen syncmappen geconfigureerd + + 30 minutes + 30 minuten @@ -6265,349 +6373,343 @@ Server antwoordde met fout: %2 - - There are no sync folders configured. - Er zijn geen synchronisatie-mappen geconfigureerd. + + 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. - - Checking for changes in remote "%1" - Controleren op wijzigingen in externe "%1" + + Don't clear + Niet wissen - - Checking for changes in local "%1" - Controleren op wijzigingen in lokale "%1" + + Emojis are not supported. Some status functionality may not work. + Emoji's worden niet ondersteund. Sommige gebruikersstatusfuncties werken mogelijk niet. - - Syncing %1 of %2 (%3 left) - Sync %1 van %2 (%3 over) + + Less than a minute + Minder dan een minuut - - Syncing %1 of %2 - Synchroniseren %1 van %2 + + 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. - - Syncing %1 (%2 left) - Sync %1 (%2 over) + + This week + Deze week + + + OCC::Vfs - - Syncing %1 - Synchroniseren %1 + + The Virtual filesystem feature does not support a drive as sync root + - - %1 (%2, %3) - %1 (%2, %3) + + The Virtual filesystem feature is not supported on network drives + - - - OwncloudAdvancedSetupPage - - &Local Folder - &Lokale map + + The Virtual filesystem feature requires a NTFS file system, %1 is using %2 + De Virtuele bestandssysteemfunctie vereist een NTFS bestandssysteem, %1 gebruikt %2 + + + OCC::VfsDownloadErrorDialog - - Username - Gebruikersnaam + + %1 could not be downloaded. + %1 kon niet worden gedownload. - - Local Folder - Lokale map + + > More details + > Meer details - - Choose different folder - Kies een andere map + + could not be downloaded + kon niet worden gedownload - - Server address - Serveradres + + Download error + Downloadfout - - Sync Logo - Sync Logo + + Error downloading + Fout bij downloaden - - Synchronize everything from server - Synchroniseer alles vanaf de server + + Error downloading %1 + Fout bij downloaden %1 - - Ask before syncing folders larger than - Vraag bevestiging voor synchronisatie van mappen groter dan + + More details + Meer details + + + OCC::WebEnginePage - - MB - Trailing part of "Ask confirmation before syncing folder larger than" - MB + + Invalid certificate detected + Ongeldig certificaat gedetecteerd - - Ask before syncing external storages - Vraag bevestiging voor synchronisatie externe opslag + + The host "%1" provided an invalid certificate. Continue? + De server "%1" heeft een ongeldig certificaat . Wilt u doorgaan? + + + OCC::WebFlowCredentials - - Choose what to sync - Selectieve synchronisatie + + <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> - - Keep local data - Bewaar de lokale gegevens + Please login with the account: %1 + Meld aan met account: %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> + + Please login with the user: %1 + - - Erase local folder and start a clean sync - Wis de map op je computer en start een schone sync + + You have been logged out of %1 as user %2. Please login again + - - - OwncloudHttpCredsPage - - &Username - &Gebruikersnaam + 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 - - &Password - &Wachtwoord + Easy-to-use web mail, calendaring & contacts + Eenvoudig te gebruiken webmail, agenda & contacten - - - OwncloudSetupPage - - - TextLabel - TextLabel + + Form + Formulier - - Logo - Logo + + Host your own server + Host je eigen server - - Server address - Serveradres + + Keep your data secure and under your control + Hou je gegevens veilig en in eigen beheer - - 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. + + Log in + Meld u aan - - - QObject - - New folder - Nieuwe map + Screensharing, online meetings & web conferences + Schermdelen, online afspraken & web conferenties - - Failed to create debug archive - Kon debugarchief niet maken + Secure collaboration & file exchange + Veilige samenwerking & bestandsuitwisseling - - Could not create debug archive in selected location! - Kon debugarchief niet maken op de geselecteerde locatie! + + Sign up with provider + Aanmelden bij provider + + + OCC::ownCloudGui - - You renamed %1 - Je hernoemde %1 + + %1: %2 + %1: %2 - - You deleted %1 - Je verwijderde %1 + + Account %1: %2 + Account %1: %2 - - You created %1 - Je creëerde %1 + + Account synchronization is disabled + Account synchronisatie is uitgeschakeld - - You changed %1 - Je wijzigde %1 + + Disconnected from %1 + Losgekoppeld van %1 - - Synced %1 - Gesynchroniseerd %1 + + Disconnected from accounts: + Losgekoppeld van account: - - - %nd - delay in days after an activity - + + + Disconnected from some accounts + Niet verbonden met sommige accounts - - in the future - in de toekomst + + Error during synchronization + Fout bij synchronisatie - - - %nh - delay in hours after an activity - + + + Folder %1: %2 + Map %1: %2 - - now - nu + + macOS VFS for %1: A problem was encountered. + - - 1m - one minute after activity date and time - + + macOS VFS for %1: Last sync was successful. + - - - %nm - delay in minutes after an activity - + + + macOS VFS for %1: Sync is running. + - - Some time ago - Even geleden + + No sync folders configured + Geen syncmappen geconfigureerd - - %1: %2 - this displays an error string (%2) for a file %1 - %1: %2 + + Please sign in + Log alstublieft in - - Paths beginning with '#' character are not supported in VFS mode. - + + Synchronization is paused + Synchronisatie is gepauzeerd - - - ResolveConflictsDialog - - Solve sync conflicts - Los synchronisatieconflicten op + + Terms of service + - - - %1 files in conflict - indicate the number of conflicts to resolve - + + + The server on account %1 runs an old and unsupported version %2. Using this client with unsupported server versions is untested and potentially dangerous. Proceed at your own risk. + - - 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. + + 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. - - All local versions - Alle lokale versies + + There are no sync folders configured. + Er zijn geen synchronisatie-mappen geconfigureerd. - - All server versions - Alle server versies + + Unresolved conflicts + Niet opgeloste conflicten - - Resolve conflicts - Los conflicten op + + Unsupported Server Version + Niet-ondersteunde server versie - - Cancel - Annuleren + + Up to date + Bijgewerkt - - - ShareDelegate - - Create a new share link - Creëer een nieuwe deellink + + 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. + + + + OCC::sesSnackBar - - Copied! - Gekopieerd! + + Success + Succes + + + OwncloudAdvancedSetupPage - - Share options - Deelopties + + &Keep local data + - - Copy share link location - Kopieer deellinklocatie + + &Local Folder + &Lokale map - - - ShareDetailsPage - - An error occurred setting the share password. - Er trad een fout op bij het instellen van het wachtwoord voor de deellink + + <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 dit selectievakje is ingeschakeld, + wordt de bestaande inhoud in de lokale map gewist om een schone synchronisatie vanaf de server te starten. + vanaf de server.</p><p>Vink dit vakje niet aan als de lokale inhoud + moet worden geüpload naar de servermap.</p></body></html> - - Edit share - Bewerk deellink + <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> - - Dismiss - Afwijzen + + Ask before syncing external storages + Vraag bevestiging voor synchronisatie externe opslag - - Share label - Deel label + + Ask before syncing folders larger than + Vraag bevestiging voor synchronisatie van mappen groter dan - - - Allow upload and editing - Uploaden en bewerken toestaan + + Ask for confirmation before synchroni&zing folders larger than + - - View only - Alleen bekijken + + Ask for confirmation before synchronizing e&xternal storages + - - File drop (upload only) - Bestands-drop (alleen uploaden) + + Choose different folder + Kies een andere map @@ -6615,9 +6717,9 @@ Server antwoordde met fout: %2 Verder delen toestaan - - Hide download - Verberg download + + Keep local data + Bewaar de lokale gegevens @@ -6630,14 +6732,14 @@ Server antwoordde met fout: %2 Beveiligen met wachtwoord - - Set expiration date - Instellen vervaldatum + + S&ync everything from server + - - Note to recipient - Notitie voor ontvanger + + Server + @@ -6650,462 +6752,533 @@ Server antwoordde met fout: %2 Delen opheffen - - Add another link - Nog een link toevoegen + + Start a &clean sync (Erases the local folder!) + - - Share link copied! - Deellink gekopieerd! + + Sync Logo + Sync Logo - - Copy share link - Kopiëren deellink + + Synchronize everything from server + Synchroniseer alles vanaf de server - - - ShareView + + + OwncloudHttpCredsPage - - Password required for new share - Wachtwoord vereist voor delen + + &Password + &Wachtwoord - - Share password - Wachtwoord + + &Username + &Gebruikersnaam + + + OwncloudOAuthCredsPage - - Shared with you by %1 - + Copy link + Link kopiëren - - Expires in %1 - + Please switch to your browser to proceed. + Schakel om naar je browser om door te gaan. - - Sharing is disabled - Delen is uitgeschakeld + Re-open Browser + Heropen browser + + + OwncloudSetupPage - - This item cannot be shared. - Dit item kan niet worden gedeeld + + Register with a provider + - - Sharing is disabled. - Delen is uitgeschakeld. + + TextLabel + TextLabel - - - ShareeSearchField - - Search for users or groups… - Zoeken naar gebruikers of groepen ... + + 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. + + + OwncloudWizardResultPage Sharing is not available for this folder Delen is niet beschikbaar voor deze map - - - SyncJournalDb - - - Failed to connect database. - Kon niet verbinden met database. + + + QObject + + + %n day ago + + + + + + + + + %n days ago + + + + + + + + + %n hour ago + + + + + + + + + %n hours ago + + + + + + + + + %n minute ago + + + + + + + + + %n minutes ago + + + + + + + + + %nd + + + + %nd + + + + + %nh + + + + %nh + + + + + %nm + + + + %nm + - - - SyncStatus - - Sync now - Nu synchroniseren + + 1m + - - Resolve conflicts - Los conflicten op + + Could not create debug archive in selected location! + Kon geen debug-archief aanmaken op geselecteerde locatie! - - - TalkReplyTextField - - Reply to … - Antwoord aan ... + + Failed to create debug archive + Debug-archief is niet aangemaakt - - Send reply to chat message - Stuur antwoord op chatbericht + + in the future + in de toekomst - - - TrayWindowHeader - - Open local or group folders - + + Less than a minute ago + - - More apps - + + New folder + Nieuwe map - - Open %1 in browser - + + now + nu - - - UnifiedSearchInputContainer - - Search files, messages, events … - Zoek in bestanden, berichten, afspraak ... + + Paths beginning with '#' character are not supported in VFS mode. + - - - UnifiedSearchPlaceholderView - - Start typing to search - + + Some time ago + Even geleden - - - UnifiedSearchResultFetchMoreTrigger - - Load more results - Laad meer resultaten + + Synced %1 + Gesynchroniseerd %1 - - - UnifiedSearchResultItemSkeleton - - Search result skeleton. - Zoekresultaat skelet. + + 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. - - - UnifiedSearchResultListItem - - Load more results - Laad meer resultaten + + You changed %1 + Je wijzigde %1 - - - UnifiedSearchResultNothingFound - - No results for - Geen resultaten voor + + You created %1 + Je creëerde %1 - - - UnifiedSearchResultSectionItem - - Search results section %1 - Zoekresultaten sectie %1 + + You deleted %1 + Je verwijderde %1 - - - UserLine - - Switch to account - Omschakelen naar account + + You renamed %1 + Je hernoemde %1 + + + + ResolveConflictsDialog + + + %1 files in conflict + + %1 bestand in conflict + %1 bestanden in conflict + %1 bestanden in conflict + - - Current account status is online - Huidige gebruikersstatus is online + + All local versions + Alle lokale versies - - Current account status is do not disturb - Huidige gebruikersstatus is niet storen + + All server versions + Alle server versies - - Account actions - Accountacties + + 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. - - Set status - Status instellen + + Resolve conflicts + Los conflicten op - - - Log out - Afmelden + + Solve sync conflicts + Los synchronisatieconflicten op + + + SesTrayHeader - - - Log in - Meld u aan + + Open Nextcloud in browser + HiDrive Next in browser openen - - Remove account - Verwijder account + + Website + Website - - - UserStatusSelector + + + ShareDelegate - - Online status - Online status + + Copied! + Gekopieerd! - - Online - Online + + Copy share link location + Kopieer deellinklocatie - - Away - Afwezig + + Create a new share link + Creëer een nieuwe deellink + + + ShareDetailsPage - - Do not disturb - Niet storen + + Add another link + Nog een link toevoegen - - Mute all notifications - Demp alle meldingen + + Allow resharing + Verder delen toestaan - - Invisible - Onzichtbaar + + Allow upload and editing + Uploaden en bewerken toestaan - - Appear offline - Toon als afwezig + + An error occurred setting the share password. + Er trad een fout op bij het instellen van het wachtwoord voor de deellink - - Status message - Statusbericht + + Copy share link + Kopiëren deellink - - What is your status? - Wat is je status? + + Custom Permissions + Aangepaste machtigingen - - Clear status message after - Statusbericht wissen na + Edit share + Bewerk deellink - - Cancel - Annuleren + + Enter the note to recipient + Voer de notitie aan de ontvanger in - - Clear status message - Statusbericht wissen + + File drop (upload only) + Bestands-drop (alleen uploaden) - - Set status message - Statusbericht instellen + + Hide download + Verberg download - - - Utility - - %L1 B - %L1 B + + Note to recipient + Notitie voor ontvanger - - %L1 TB - %L1 TB + + Password protect + Beveiligen met wachtwoord - - %L1 GB - %L1 GB + + Set expiration date + Instellen vervaldatum - - %L1 MB - %L1 MB + Share label + Deel label - - %L1 KB - %L1 KB + + Share link copied! + Deellink gekopieerd! - - - %n year(s) - %n jaar%n jaar + + + Unshare + Delen opheffen - - - %n month(s) - %n maand%n maanden + + + View only + Alleen bekijken - - - %n day(s) - %n dag%n dagen + + + ShareView + + + Expires in %1 + - - - %n hour(s) - %n uur%n uur + + + Password required for new share + Wachtwoord vereist voor delen - - - %n minute(s) - %n minuut%n minuten + + + Share password + Wachtwoord - - - %n second(s) - %n seconde%n seconde(n) + + + Shared with you by %1 + - - %1 %2 - %1 %2 + + Sharing is disabled + Delen is uitgeschakeld - - - ValidateChecksumHeader - - The checksum header is malformed. - De header van het controlegetal is misvormd. + + Sharing is disabled. + Delen is uitgeschakeld. - - The checksum header contained an unknown checksum type "%1" - Het header controlegetal bevat een onbekend controlegetal type "%1" + + This item cannot be shared. + Dit item kan niet worden gedeeld + + + ShareeSearchField - - 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" + + Search for users or groups… + Zoeken naar gebruikers of groepen ... - - - main.cpp - - System Tray not available - Systeemvak niet beschikbaar + + Sharing is not available for this folder + Delen is niet beschikbaar voor deze map + + + SyncJournalDb - - %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. + + Failed to connect database. + Kon niet verbinden met database. - - - nextcloudTheme::aboutInfo() + + + SyncStatus - - <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> + + Sync now + Nu synchroniseren - - - progress + + + TalkReplyTextField - - Virtual file created - Virtueel bestand gecreëerd + + Reply to … + Antwoord aan ... - - Replaced by virtual file - Vervangen door virtueel bestand + + Send reply to chat message + Stuur antwoord op chatbericht + + + TestSetUserStatusDialog - - Downloaded - Gedownload + + 7 days + 7 dagen + + + TrayFoldersMenuButton - - Uploaded - Geüpload + + Files + Bestanden - - Server version downloaded, copied changed local file into conflict file - Serverversie gedownload, gewijzigde lokale bestand gekopieerd in conflictbestand + Group folder button + Knop groepsmap - - Server version downloaded, copied changed local file into case conflict conflict file - Serverversie gedownload, gewijzigde lokale bestand gekopieerd in conflictbestand + + Open %1 in file explorer + Open %1 in bestandsverkenner - - Deleted - Verwijderd + + Open group folder "%1" + Open groepsmap "%1" - - Moved to %1 - Verplaatst naar %1 + + Open local folder + Open lokale map - - Ignored - Genegeerd + + Open local folder "%1" + Open lokale map "%1" - - Filesystem access error - Toegangsfout van het bestandssysteem + + Open local or group folders + Open lokale of groepsmappen - - Error - Fout + + User group and local folders menu + Menu gebruikersgroep en lokale mappen + + + TrayWindowHeader - - Updated local metadata - Lokale metadata geüploaded + + More apps + Meer apps - - Updated local virtual files metadata - Lokale virtuele bestanden metadata geüploaded + + Open %1 in browser + Open %1 in browser + + + UnifiedSearchInputContainer Updated end-to-end encryption metadata @@ -7117,35 +7290,50 @@ Server antwoordde met fout: %2 Unknown Onbekend + + + UnifiedSearchPlaceholderView - - downloading - downloaden + + Start typing to search + + + + UnifiedSearchResultFetchMoreTrigger uploading uploaden + + + UnifiedSearchResultNothingFound Downloading Downloaden + + + UnifiedSearchResultSectionItem - - deleting - verwijderen + + Search results section %1 + Zoekresultaten sectie %1 + + + UserLine Uploading Uploaden - - moving - verplaatsen + + Remove account + Verwijder account @@ -7153,19 +7341,22 @@ Server antwoordde met fout: %2 Verwijderen - - ignoring - negerend + + Switch to account + Omschakelen naar account + + + UserStatusSelector Moving Verplaatsen - - error - fout + + Away + Afwezig @@ -7196,142 +7387,207 @@ Server antwoordde met fout: %2 theme - - Status undefined - Ongedefinieerde status + + Invisible + Onzichtbaar - - Waiting to start sync - In afwachting van synchronisatie + + Mute all notifications + Demp alle meldingen - - Sync status is unknown - Synchronisatiestatus is onbekend + + Online + Online - - Waiting to start syncing - In afwachting van synchronisatie + + Online status + Online status - - Sync is running - Bezig met synchroniseren + + Set status message + Statusbericht instellen - - Sync Success - Synchronisatie geslaagd + + Status message + Statusbericht - - Sync Success, some files were ignored. - Synchronisatie geslaagd, sommige bestanden werden genegeerd. + + What is your status? + Wat is je status? + + + Utility - - Sync Error - Synchronisatiefout + + %L1 B + %L1 B - - Setup Error - Installatiefout + + %L1 GB + %L1 GB - - Aborting … - Afbreken … + + %L1 KB + %L1 KB - - Sync was successful - Synchronisatie was geslaagd + + %L1 MB + %L1 MB - - Sync was successful but some files were ignored - Synchronisatie geslaagd, sommige bestanden werden genegeerd + + %L1 TB + %L1 TB + + + + %n day(s) + + + + + + + + + %n hour(s) + + + + + + + + + %n minute(s) + + + + + + + + + %n month(s) + + + + + + + + + %n second(s) + + + + + + + + %n year(s) + + + + + + + + + ValidateChecksumHeader - - Error occurred during sync - Er trad een fout op tijdens synchronisatie + + The checksum header contained an unknown checksum type '%1' + - - Error occurred during setup - Er trad een fout op bij het instellen + + The checksum header contained an unknown checksum type "%1" + Het header controlegetal bevat een onbekend controlegetal type "%1" - - Preparing to sync - Voorbereiden synchronisatie + + The checksum header is malformed. + De header van het controlegetal is misvormd. - - Stopping sync - Synchronisatie stoppen + + The downloaded file does not match the checksum, it will be resumed. + - - Sync is paused - Synchronisatie is gepauzeerd + + 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" - - - utility + + + main.cpp - - Could not open browser - Kon browser niet openen + + %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. + - - 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? + + %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. - - Could not open email client - Kon e-mailclient niet openen + + System Tray not available + Systeemvak niet beschikbaar + + + nextcloudTheme::about() - - 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? + <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 - - Always available locally - Altijd lokaal beschikbaar + + Deleted + Verwijderd - - Currently available locally - Momenteel lokaal beschikbaar + + Deleting + Verwijderen - - Some available online only - Sommige alleen online beschikbaar + + Downloaded + Gedownload - - Available online only - Alleen online beschikbaar + + downloading + downloaden - - Make always available locally - Maak altijd lokaal beschikbaar + + Downloading + Downloaden - - Free up local space - Lokale ruimte vrijmaken + + error + fout @@ -7345,14 +7601,14 @@ Server antwoordde met fout: %2 OCC::AbstractPropagateRemoteDeleteEncrypted - - 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". + + Filesystem access error + Toegangsfout van het bestandssysteem - - "%1 Failed to unlock encrypted folder %2". - "%1 kon versleutelde map %2" niet ontgrendelen. + + Ignored + Genegeerd @@ -7371,244 +7627,230 @@ Server antwoordde met fout: %2 OCC::OAuth - - Error returned from the server: <em>%1</em> - Fout gemeld door de server: <em>%1</em> + + Ignoring + Negeren - - There was an error accessing the "token" endpoint: <br><em>%1</em> - Er treedt een fout op bij het benaderen van het "token" endpoint: <br><em>%1</em> + + Moved to %1 + Verplaatst naar %1 - - Empty JSON from OAuth2 redirect - Lege JSON van OAuth2 redirect + + moving + verplaatsen - - Could not parse the JSON returned from the server: <br><em>%1</em> - Kon de van de server ontvangen JSON niet verwerken: <br><em>%1</em> + + Moving + Verplaatsen - - The reply from the server did not contain all expected fields - Het antwoord van de server bevat niet alle verwachte velden + + Replaced by virtual file + Vervangen door virtueel bestand - - <h1>Login Error</h1><p>%1</p> - <h1>Inlog fout<p>%1</p> + + Server version downloaded, copied changed local file into case conflict conflict file + Serverversie gedownload, gewijzigde lokale bestand gekopieerd in conflictbestand - - <h1>Wrong account</h1><p>You logged in with the account <em>%1</em>, but must log in with the account <em>%2</em>.<br>Please log out of %3 in another tab, then <a href='%4'>click here</a> and log in with %2.</p> - <h1>Verkeerde account</h1><p>Je bent ingelogd met account <em>%1</em>, maar moest inloggen met account <em>%2</em>.<br>Log uit van %3 in een andere tab en dan <a href='%4'>klik hier</a> en log in met %2</p> + + Server version downloaded, copied changed local file into conflict file + Serverversie gedownload, gewijzigde lokale bestand gekopieerd in conflictbestand - - - OCC::OwncloudOAuthCredsPage - - Connect to %1 - Verbinden met %1 + + Unknown + Onbekend - - Login in your browser - Login in je browser + + Updated local metadata + Lokale metadata geüploaded - - - OCC::ShareUserLine - - Username - Gebruikersnaam + + Updated local virtual files metadata + Metagegevens van lokale virtuele bestanden bijgewerkt - - Can edit - Kan bewerken + + updating local metadata + Bijwerken lokale metadata - - Note: - Opmerking: + + Updating local metadata + Bijwerken lokale metadata - - Password: - Wachtwoord: + + Updating local virtual files metadata + Bijwerken lokale virtuele bestanden metadata - - Expires: - Verloopt: + + Uploaded + Geüpload - - - OwncloudOAuthCredsPage - - Please switch to your browser to proceed. - Schakel om naar je browser om door te gaan. + + uploading + uploaden - - An error occurred while connecting. Please try again. - Er trad een verbindingsfout op. Probeer nogmaals. + + Uploading + Uploaden - - Re-open Browser - Heropen browser + + Virtual file created + Virtueel bestand gecreëerd + + + theme - - Copy link - Link kopiëren + + Aborting … + Afbreken … - - - TrayFoldersMenuButton - - Open local or group folders - Open lokale of groepsmappen + + Error occurred during setup + Er trad een fout op bij het instellen - - Open local folder - Open lokale map + + Error occurred during sync + Er trad een fout op tijdens synchronisatie - - Connected - Verbonden + + Preparing to sync + Voorbereiden synchronisatie - - Disconnected - Niet verbonden + + Setup Error + Installatiefout - - Group folder button - Knop groepsmap + + Status undefined + Ongedefinieerde status - - Open local folder "%1" - Open lokale map "%1" + + Stopping sync + Synchronisatie stoppen - - Open group folder "%1" - Open groepsmap "%1" + + Sync Error + Synchronisatiefout - - Open %1 in file explorer - Open %1 in bestandsverkenner + + Sync is paused + Synchronisatie is gepauzeerd - - User group and local folders menu - Menu gebruikersgroep en lokale mappen + + Sync is running + Bezig met synchroniseren - - - Window - - Nextcloud desktop main dialog - Nextcloud desktop hoofddialoog + + Sync status is unknown + Synchronisatiestatus is onbekend - - Current account - Huidige account + + Sync Success + Synchronisatie geslaagd - - - Resume sync for all - Hervat de synchronisatie voor iedereen + + Sync Success, some files were ignored. + Synchronisatie geslaagd, sommige bestanden werden genegeerd. - - - Pause sync for all - Synchronisatie voor iedereen onderbreken + + Sync was successful + Synchronisatie was geslaagd - - Add account - Account toevoegen + + Sync was successful but some files were ignored + Synchronisatie geslaagd, sommige bestanden werden genegeerd - - Add new account - Nieuw account toevoegen + + Waiting to start sync + In afwachting van synchronisatie - - Settings - Instellingen + + Waiting to start syncing + In afwachting van synchronisatie + + + utility - - Exit - Afsluiten + + Always available locally + Altijd lokaal beschikbaar - - Current account avatar - Huidige gebruikersavatar + + Available online only + Alleen online beschikbaar - - Current account status is online - Huidige gebruikersstatus is online + + Could not open browser + Kon browser niet openen - - Current account status is do not disturb - Huidige gebruikersstatus is niet storen + + Could not open email client + Kon e-mailclient niet openen - - Account switcher and settings menu - Accountswitcher en instellingenmenu + + Currently available locally + Momenteel lokaal beschikbaar - - Open Nextcloud Talk in browser - Open Nextcloud Talk in browser + + Free up local space + Lokale ruimte vrijmaken - - More apps - Meer apps + + Make always available locally + Maak altijd lokaal beschikbaar - - Open %1 in browser - Open %1 in browser + + Some available online only + Sommige alleen online beschikbaar - - Unified search results list - Samengevoegde zoekresultaten lijst + + 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? - - - nextcloudTheme::about() - - <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> + + 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? - - \ No newline at end of file + + From 75e13edfd250bbd55cdec4b1be1adeeb70c0c725 Mon Sep 17 00:00:00 2001 From: Emil Bohleber Date: Mon, 27 Jan 2025 15:08:30 +0100 Subject: [PATCH 083/139] SES-265 remove failing macOS code MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Christopher Hätty --- 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 72f0353662abd..4dc7d2066c302 100644 --- a/src/gui/generalsettings.cpp +++ b/src/gui/generalsettings.cpp @@ -742,8 +742,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 2e6fbf1ea803d369c5d5728b99f9f404b21c0cde 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 084/139] SES-296 Used BaseStyle explicit instead of default MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Christopher Hätty --- 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 76d6f2a9fec44806a994ac974c57cb5c6eda9cee Mon Sep 17 00:00:00 2001 From: Emil Bohleber Date: Thu, 30 Jan 2025 12:59:40 +0100 Subject: [PATCH 085/139] SES-293 hide connection tab MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit while hopefully still showing virtual files tab Signed-off-by: Christopher Hätty --- src/gui/accountsettings.cpp | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/src/gui/accountsettings.cpp b/src/gui/accountsettings.cpp index 088a20fc61228..944010b48631b 100644 --- a/src/gui/accountsettings.cpp +++ b/src/gui/accountsettings.cpp @@ -236,6 +236,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 5dfe4e73743c43cd3ba431baeab4e3b952e25401 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 086/139] SES-299 Removed obsolete Window.qml (replaced by MainWindow.qml)) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Christopher Hätty --- 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 aa157af13c530d840fbbd7569e7a485d1bdb098a 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 087/139] SES-299 Fixed double icon MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Christopher Hätty --- 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 8604ef9715d43..f4d4aa6b808ea 100644 --- a/src/gui/tray/TrayFoldersMenuButton.qml +++ b/src/gui/tray/TrayFoldersMenuButton.qml @@ -65,7 +65,7 @@ HeaderButton { } - Item { + contentItem: Item { id: rootContent Image { From 9b72f670ac302e8697818ffedacfbfc22b4a6246 Mon Sep 17 00:00:00 2001 From: Emil Bohleber Date: Thu, 30 Jan 2025 13:44:57 +0100 Subject: [PATCH 088/139] SES-293 remove quotes and prevent double escaped space MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Christopher Hätty --- 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 c410be35baa73..2ba1bde85bf3f 100644 --- a/src/gui/CMakeLists.txt +++ b/src/gui/CMakeLists.txt @@ -783,7 +783,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 dd3dc00ff4714fb375a2275fbf0a7f2dea19e054 Mon Sep 17 00:00:00 2001 From: Kevin Beraz Date: Thu, 30 Jan 2025 16:33:11 +0100 Subject: [PATCH 089/139] SES-291 increase margins and fontweight MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Christopher Hätty --- 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 4dc7d2066c302..89ed2022e73dd 100644 --- a/src/gui/generalsettings.cpp +++ b/src/gui/generalsettings.cpp @@ -711,7 +711,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 e12d0877c9cc50d80ca4580360f81e60c7558ab8 Mon Sep 17 00:00:00 2001 From: Emil Bohleber Date: Thu, 30 Jan 2025 17:32:50 +0100 Subject: [PATCH 090/139] SES-306 color tray resolve conflict button black MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Christopher Hätty --- 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 8d5fb4bf97e3269bc008d43892f95db64b61521a 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 091/139] SES-301 Fixed Menu sizes MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Christopher Hätty --- 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 9e9e85578f447435c2d695f636aad983e3256b73 Mon Sep 17 00:00:00 2001 From: Kevin Beraz Date: Fri, 31 Jan 2025 16:38:36 +0100 Subject: [PATCH 092/139] SES-297 apply font configuration for primary button also on windows MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Christopher Hätty --- 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 b26a78e6b8165..e48bb5cf8302a 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 15ded335ff9adff773242fa2fd1775c791123ec4 Mon Sep 17 00:00:00 2001 From: Emil Bohleber Date: Fri, 31 Jan 2025 17:15:36 +0100 Subject: [PATCH 093/139] SES-306 remove button color sets so all pill buttons look the same MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Christopher Hätty --- 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 0e98d833984de..1b01e3e9a8cff 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 ecc69f53f1a9f55cc05fd0c3fe8a371b31997a68 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 094/139] SES-302 Removed ColorOverlay and restored Caret - Arrow MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Christopher Hätty --- 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 943e7eab0e709165758056eec1b8757818758bd1 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 095/139] SES-302 Fixed Button Margin MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Christopher Hätty --- 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 717c4eeec2b9b80743068d4d0f7e08a9a223a9b8 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 096/139] SES-302 Fixed wrong Color MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Christopher Hätty --- 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 ea2ce525c0cfb1d9f56850a6211747a87a2e238e 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 097/139] SES-297 Fixed Scrollbar by using Palette MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Christopher Hätty --- 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 e48bb5cf8302a..81d1a95f2bc91 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 7de9ab2ffbaa1..ca09e856e65db 100644 --- a/src/gui/wizard/owncloudadvancedsetuppage.cpp +++ b/src/gui/wizard/owncloudadvancedsetuppage.cpp @@ -501,7 +501,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(); @@ -638,7 +637,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 5991a595235bbf361ee4b4c0abf93072ccb503ee 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 098/139] SES-297 Fixed Clipped border of TreeView MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Christopher Hätty --- 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 81d1a95f2bc91..3f68557592b4d 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 580e4101843321c8a600846856835676573602b4 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 099/139] SES-297 Fixed clipped text MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Switched to Label with automatic wordwrap and customized it Signed-off-by: Christopher Hätty --- src/gui/CMakeLists.txt | 1 + src/gui/clickablelabel.h | 28 +++++++++++++++++++++++ src/gui/folderwizard.cpp | 48 ++++++++++++++++++++++++++++++---------- src/gui/folderwizard.h | 6 +++++ src/libsync/ionostheme.h | 8 +++++++ 5 files changed, 79 insertions(+), 12 deletions(-) create mode 100644 src/gui/clickablelabel.h diff --git a/src/gui/CMakeLists.txt b/src/gui/CMakeLists.txt index 2ba1bde85bf3f..89802211a1f1f 100644 --- a/src/gui/CMakeLists.txt +++ b/src/gui/CMakeLists.txt @@ -99,6 +99,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 38f8e59afc093..f06daeb17b424 100644 --- a/src/gui/folderwizard.cpp +++ b/src/gui/folderwizard.cpp @@ -38,6 +38,7 @@ #include #include #include +#include #include #include #include @@ -768,8 +769,7 @@ FolderWizardSelectiveSync::FolderWizardSelectiveSync(const AccountPtr &account) layout->addWidget(_selectiveSync); if (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)"))); - + setupVirtualFilesCheckbox(); connect(_virtualFilesCheckBox, &QCheckBox::clicked, this, &FolderWizardSelectiveSync::virtualFilesCheckboxClicked); connect(_virtualFilesCheckBox, &QCheckBox::stateChanged, this, [this](int state) { _selectiveSync->setEnabled(state == Qt::Unchecked); @@ -777,13 +777,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 +807,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 +856,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 +997,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 99f7a90212d36a33b8f15408e54495937ddfb2ca 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 100/139] SES-308 Format document MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Christopher Hätty --- 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 8e9040e0643793d15bed1e3116ae6bd79edba3a2 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 101/139] SES-308 Fixed Button Size MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Remove MAximum Size to let Button adjust to Text, Added Horizontal Layout with Spacer to prohibit extending to much Signed-off-by: Christopher Hätty --- 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 05928e7023ed9ef25fd48c3c7d1bb05f40f376bd 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 102/139] SES-309 Increased Size to fixed clipped icon MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Christopher Hätty --- 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 987a0f36f3130013b9e3a2bd3ccd0f70ee8bda8e 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 103/139] SES-289 Modifed Q_LOGGING_CATEGORY MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Christopher Hätty --- 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, 168 insertions(+), 170 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 5787f2d26dd09..37f54738325ba 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 90dea280ff6ad..637f4762dc31c 100644 --- a/src/common/filesystembase.cpp +++ b/src/common/filesystembase.cpp @@ -39,7 +39,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 79e097b452911..5f6e304687694 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 8e1f088e8c978..6bb5a7d39ea2d 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[] = " WDNVCKRSMm"; 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 927e2dcc1affb..81549ac492491 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 f89085664ceda..5208e0f9d3c32 100644 --- a/src/gui/accountmanager.cpp +++ b/src/gui/accountmanager.cpp @@ -87,7 +87,7 @@ constexpr auto serverHasValidSubscriptionC = "serverHasValidSubscription"; 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 944010b48631b..4679f357bca2c 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 eeff0cfb00a31..6163b2b07254e 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 d167f76f87ec3..9c2b3a6f7462e 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 7b6a17c361831..d31c0473cda6f 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 780e4087b1dd4..2628183bcbabb 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 ebe1c1af525f6..2f02653845943 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 879b067062ccd..9d7df686575e9 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 f492a1ee4699d..86bd9c51d2b45 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 016ccd32a995f..d4ecc0e1ca3d9 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 6f84af9ad4f10..f733e691df74e 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 d67e6e747521e..fc2254ecdb55a 100644 --- a/src/gui/folderstatusmodel.cpp +++ b/src/gui/folderstatusmodel.cpp @@ -29,7 +29,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 fc7d05d685a45..47d75344ea5ef 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 d3edc23522416..0ef90276eb09d 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 ac40f3c1bc922..bb1671ab62430 100644 --- a/src/gui/macOS/fileproviderdomainmanager_mac.mm +++ b/src/gui/macOS/fileproviderdomainmanager_mac.mm @@ -131,7 +131,7 @@ inline QString accountIdFromDomain(NSFileProviderDomain * const domain) namespace OCC { -Q_LOGGING_CATEGORY(lcMacFileProviderDomainManager, "nextcloud.gui.macfileproviderdomainmanager", QtInfoMsg) +Q_LOGGING_CATEGORY(lcMacFileProviderDomainManager, "hidrivenext.gui.macfileproviderdomainmanager", QtInfoMsg) namespace Mac { diff --git a/src/gui/macOS/fileproviderdomainsyncstatus_mac.mm b/src/gui/macOS/fileproviderdomainsyncstatus_mac.mm index 03de3e97636fc..0ad45d0beeeb2 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 750a4f4333108..da5aaa9e6be9a 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 d8e64abb68832..155e769c0efd4 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 ec1dd2ce0c98b..de173b0454aba 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 9d083300c6b49..b6680ed157f01 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 b8d09abf8313b..84430b7f6086a 100644 --- a/src/gui/macOS/fileprovidersocketcontroller.cpp +++ b/src/gui/macOS/fileprovidersocketcontroller.cpp @@ -24,7 +24,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 60fe7c2a54f2a..b4ef4e319f9a9 100644 --- a/src/gui/macOS/fileproviderxpc_mac.mm +++ b/src/gui/macOS/fileproviderxpc_mac.mm @@ -28,7 +28,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 2451f7c9f3564..7bc6b3a200fc5 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 9196c1e211609..1044d44c6b40c 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 7a146ce1bab65..2d2d5681916ce 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 8065db43d79d3..8694de0921e8c 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 c54d0f527e1c1..23d25a6ff6ae2 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 b8c65e556c530..f783599d401fe 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 c8a9a3278ea98..3e3b889aa553d 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 bcb78544fc8fc..9721062a9b536 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 b2a9fc78b9b24..b33cad839f3c2 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 cd31daac96677..e5b718e10d3f7 100644 --- a/src/gui/tray/syncstatussummary.cpp +++ b/src/gui/tray/syncstatussummary.cpp @@ -42,7 +42,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 7a89f3a0ee5d4..259083b84d99e 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 18acab0c44e7f..d732c89a7e29a 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 9b5590fd2e1fb..5b43e2ad1283c 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 46d8559f7a596..dde02a9150bd0 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 c3c10e28b824c..6a2f22a5e9324 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 4baf8fa8cae61..9cfc13bc14357 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 2d06298fe1088..f5e82254b0e61 100644 --- a/src/libsync/bulkpropagatorjob.cpp +++ b/src/libsync/bulkpropagatorjob.cpp @@ -65,7 +65,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 55e63874aa7ff..d6fdf04e38dd9 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 48c277de626d1..6fcfc88390c2d 100644 --- a/src/libsync/clientproxy.cpp +++ b/src/libsync/clientproxy.cpp @@ -21,7 +21,7 @@ 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 c65c6639a8fbe..a279f3a53bda2 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 b27a4082910f6..1685ae481e19c 100644 --- a/src/libsync/configfile.cpp +++ b/src/libsync/configfile.cpp @@ -123,7 +123,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 f0e3bca10ca53..dd2a705c03355 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 ef1c4c5e8f7a8..4f6f5589da608 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 83666ba9f2939..87fb162058453 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, QObject *parent) : SimpleFileJob(account, path, parent) diff --git a/src/libsync/discovery.cpp b/src/libsync/discovery.cpp index 6da9d6732f129..6bee3b573c888 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 0114127ff7207..810d9f7859a70 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 e7740a85b6387..304789074a2ec 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 b5e31e9f2fe97..f6d477b4d25a7 100644 --- a/src/libsync/lockfilejobs.cpp +++ b/src/libsync/lockfilejobs.cpp @@ -23,7 +23,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 c01ab82e2b01d..ad18ce8c934e3 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 2cfbc9566e96f..82039cdf32085 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 9c6f1b579fe1a..4d19a39c6d1b7 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 708b0f2ed2a0a..2369bfd04dd8d 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 849e5f2b27e21..d4d6196ac31c5 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 868614e68f8f4..80b0a876fb0aa 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 34c172bd3d492..b910e75aac976 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 3fea412308222..beb8e7a57403e 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 99e69719dac23..5be2c4ff9803f 100644 --- a/src/libsync/propagatorjobs.cpp +++ b/src/libsync/propagatorjobs.cpp @@ -40,9 +40,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 46b15f8b58ffa..5e76c1b8849b5 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 2ac90bf1e8df3..d4260221fc5d3 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 6e4e809629b4f..1980615fc59ee 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 e52031b5540b0..a627a0f51665d 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 3a21fc68764a5f89c96cb7e0a9a0907ad88b9fc3 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 104/139] SES-307 Hide FileDrop Checkbox MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Christopher Hätty --- 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 f4f1f8b38ea54810fb8bb99334f6f850cda51866 Mon Sep 17 00:00:00 2001 From: Kevin Beraz Date: Fri, 24 Jan 2025 14:48:46 +0100 Subject: [PATCH 105/139] SES-282 remove External Storage checkbox from Setup Page MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Christopher Hätty --- 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 ca09e856e65db..32d1b8d3b9ca6 100644 --- a/src/gui/wizard/owncloudadvancedsetuppage.cpp +++ b/src/gui/wizard/owncloudadvancedsetuppage.cpp @@ -101,7 +101,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(); @@ -196,7 +196,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(); @@ -428,7 +428,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 { @@ -513,12 +513,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("/")) { @@ -562,12 +562,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); } @@ -581,12 +581,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() + // )); } @@ -635,7 +635,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 c309dba9983553c38a923db589f796e62a3033e7 Mon Sep 17 00:00:00 2001 From: Emil Bohleber Date: Mon, 27 Jan 2025 14:53:54 +0100 Subject: [PATCH 106/139] SES-282 add link to issue for commented out code MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Christopher Hätty --- 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 32d1b8d3b9ca6..622647fbf87b3 100644 --- a/src/gui/wizard/owncloudadvancedsetuppage.cpp +++ b/src/gui/wizard/owncloudadvancedsetuppage.cpp @@ -101,7 +101,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(); @@ -196,7 +196,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(); @@ -428,7 +428,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 { @@ -513,6 +513,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(), @@ -561,7 +562,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(), @@ -581,6 +582,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(), @@ -635,7 +637,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 30a886709bb18734fa688826edcd13f52a639846 Mon Sep 17 00:00:00 2001 From: EmilBohleber Date: Thu, 6 Feb 2025 16:19:25 +0100 Subject: [PATCH 107/139] SES-306 add primary and secondary pill button MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Christopher Hätty --- 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 f2e3795addf6e0a3067a48ca4c191b34d4e6a323 Mon Sep 17 00:00:00 2001 From: EmilBohleber Date: Thu, 6 Feb 2025 16:20:20 +0100 Subject: [PATCH 108/139] SES-306 reset ActivityItemAction button to NC style MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Christopher Hätty --- 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 8b51fbf6154cd74aa9af9258754a92c011551ed5 Mon Sep 17 00:00:00 2001 From: EmilBohleber Date: Thu, 6 Feb 2025 16:20:47 +0100 Subject: [PATCH 109/139] SES-306 replace button with primary pill button MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Christopher Hätty --- 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 e542b712c347bdc8a8427615d2dbc2631aa20a47 Mon Sep 17 00:00:00 2001 From: EmilBohleber Date: Thu, 6 Feb 2025 18:16:04 +0100 Subject: [PATCH 110/139] SES-306 add white icons for share details view MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Christopher Hätty --- 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 cd3997d45ca466356fa2e6924f82f003772f344d Mon Sep 17 00:00:00 2001 From: EmilBohleber Date: Thu, 6 Feb 2025 18:16:36 +0100 Subject: [PATCH 111/139] SES-306 remove animations from share details page MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Christopher Hätty --- 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 ab093fcd08533e80d71e03797a9f3a5a62c6e23f Mon Sep 17 00:00:00 2001 From: EmilBohleber Date: Thu, 6 Feb 2025 18:17:04 +0100 Subject: [PATCH 112/139] SES-306 use pill buttons on share details page MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Christopher Hätty --- 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 f15a98a8c6de25ce0c5dbdb81fed697247ea3d49 Mon Sep 17 00:00:00 2001 From: EmilBohleber Date: Thu, 6 Feb 2025 18:28:13 +0100 Subject: [PATCH 113/139] SES-306 set color for subtext in sync state MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Christopher Hätty --- 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 1b01e3e9a8cff..2bf899b008424 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 d5d5ae563d4e038a82efbda86a8d38b6d29cd3ea 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 114/139] SES-279 Fixed Sizeing and clipping of FolderCreationDialog MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Christopher Hätty --- 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 7b822fbb61c9c124f7cfe2425778886bfd350b50 Mon Sep 17 00:00:00 2001 From: EmilBohleber Date: Mon, 10 Feb 2025 15:36:35 +0100 Subject: [PATCH 115/139] SES-303 add standalone icon button MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Christopher Hätty --- 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 950ad7850cc8ed525451d234d9ea06d8abc11691 Mon Sep 17 00:00:00 2001 From: EmilBohleber Date: Mon, 10 Feb 2025 15:37:36 +0100 Subject: [PATCH 116/139] SES-303 use IconButton in activity view MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Christopher Hätty --- 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 22629aa2cb75f7ee58aaf53acdda503540574dc5 Mon Sep 17 00:00:00 2001 From: EmilBohleber Date: Mon, 10 Feb 2025 16:06:45 +0100 Subject: [PATCH 117/139] SES-303 add white version of icon MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Christopher Hätty --- 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 4840a5773e94c963e98020a56ac20c3e9f13f6f0 Mon Sep 17 00:00:00 2001 From: EmilBohleber Date: Mon, 10 Feb 2025 16:33:24 +0100 Subject: [PATCH 118/139] SES-303 configure button to match design MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Christopher Hätty --- 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 3a024faf07ec8298e03fb36e5a60a1af322879c9 Mon Sep 17 00:00:00 2001 From: EmilBohleber Date: Mon, 10 Feb 2025 16:42:35 +0100 Subject: [PATCH 119/139] SES-303 replace dismiss button in activity view MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Christopher Hätty --- 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 7e93e29aac5000ebb4d8fd48caaaa9d3e25c8070 Mon Sep 17 00:00:00 2001 From: EmilBohleber Date: Mon, 10 Feb 2025 16:59:33 +0100 Subject: [PATCH 120/139] SES-300 readd animations on hover to pill buttons MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Christopher Hätty --- 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 d51316116b9ce8fc9eb168c6aa3f03820a25512a Mon Sep 17 00:00:00 2001 From: EmilBohleber Date: Mon, 10 Feb 2025 17:00:01 +0100 Subject: [PATCH 121/139] SES-300 replace close button in share details page MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Christopher Hätty --- 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 adf16afc79b2871d0e61d5ebc962907bb2fdf933 Mon Sep 17 00:00:00 2001 From: EmilBohleber Date: Mon, 10 Feb 2025 18:03:31 +0100 Subject: [PATCH 122/139] SES-300 hide tooltip if there is none MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Christopher Hätty --- 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 1904420ef66dce70ae4986fe3faf982da17b4fe0 Mon Sep 17 00:00:00 2001 From: EmilBohleber Date: Mon, 10 Feb 2025 18:03:55 +0100 Subject: [PATCH 123/139] SES-300 replace close button on details page MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Christopher Hätty --- 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 89627d7ca44bcd84f7a0c7e04cfce01d583c5edd Mon Sep 17 00:00:00 2001 From: EmilBohleber Date: Mon, 10 Feb 2025 18:04:34 +0100 Subject: [PATCH 124/139] SES-300 replace add and more oprions buttons on share delegate page MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Christopher Hätty --- 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 1623fe88e6cc6a9dacc26d74eb87db47d3cc1f53 Mon Sep 17 00:00:00 2001 From: Kevin Beraz Date: Tue, 11 Feb 2025 09:58:25 +0100 Subject: [PATCH 125/139] Add ApplicationName to friendlyUserAgentString MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Christopher Hätty --- 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 db69b9788ece477c127a8e468012110f55d615a0 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 126/139] SES-316 Added CompilerFlag for IONOS-Builds MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit to remove certain code without using comments Signed-off-by: Christopher Hätty --- .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 4230fc6db02d7..882b6bd446eae 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 "11.0" CACHE STRING "Minimum OSX deployment version") endif() From e8e76d9a25385069d6558e566a039a618e11a69c 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 127/139] SES-316 switched some comments to #ifdef MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Christopher Hätty --- 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 4679f357bca2c..ef75a481ab485 100644 --- a/src/gui/accountsettings.cpp +++ b/src/gui/accountsettings.cpp @@ -1264,25 +1264,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 89ed2022e73dd..54e9f8645deba 100644 --- a/src/gui/generalsettings.cpp +++ b/src/gui/generalsettings.cpp @@ -746,11 +746,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 384763a88d2af..507fa637fc8c7 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 5942e6a18347de38ca222f3dadb1d3b4d6aef540 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 128/139] SES-316 Removed "Activity" Item from ContextMenu MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Christopher Hätty --- 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 7bdf87695112a6b555c0c822ed54429cf57c855d Mon Sep 17 00:00:00 2001 From: EmilBohleber Date: Tue, 11 Feb 2025 14:14:04 +0100 Subject: [PATCH 129/139] SES-300 replace copy link button with secondary pill button with animation MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Christopher Hätty --- 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 c7f24bbde95532d26752059d4c2faa5b9c2630b2 Mon Sep 17 00:00:00 2001 From: EmilBohleber Date: Tue, 11 Feb 2025 14:52:43 +0100 Subject: [PATCH 130/139] SES-300 replace other sescustombuttons with new buttons MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Christopher Hätty --- 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 2bf899b008424..e577bfc03c00a 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 53243bc1cea1fa8d3c64afc22516446557cb102f Mon Sep 17 00:00:00 2001 From: EmilBohleber Date: Tue, 11 Feb 2025 14:52:57 +0100 Subject: [PATCH 131/139] SES-300 remove sesCustomButton MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Christopher Hätty --- 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 718c4953c47404f7d9a1047d7784b25db0122632 Mon Sep 17 00:00:00 2001 From: EmilBohleber Date: Tue, 11 Feb 2025 14:54:22 +0100 Subject: [PATCH 132/139] SES-300 accept solution instead of reject MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Christopher Hätty --- 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 a87a8a39c188968a9022028d95183e822aec89a5 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 133/139] SES-307 Fixed Custom Permission Box MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Since one of the 2 (3) modes is alway selected, there is no case in which this checkbox should not be checked Signed-off-by: Christopher Hätty --- 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 1ba12c1c85bca5e8c2baa329e3c353cbe53b0e23 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 134/139] SES-307 Hide Checkbox for Filedrop only on "Internal Shares" MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit https://docs.nextcloud.com/server/latest/user_manual/en/files/sharing.html Signed-off-by: Christopher Hätty --- 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 ca380447e1b0c2ed42ea7da522502d045884e801 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 135/139] Reduced merge conflicts by using mostly additive changes MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Christopher Hätty --- 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 507fa637fc8c7..85f046c3584af 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 90a805ed27d5982f58db4b5f2905a2f88cef06dc 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 136/139] SES-209 Added path to fix pkg-config error MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Christopher Hätty --- .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 00a01cac78b8343ec322373e81ac6e841b379f7c 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 137/139] SES-209 Added Craft64 path to not break build on diffrent systems MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Christopher Hätty --- .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 138ef331886e427dcd9fdabd8617b5e95e73f001 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 138/139] SES-209 Fixed Logging Category related build errors MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Christopher Hätty --- 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 a279f3a53bda2..986747de47e5f 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 aaacbe8ab012dde7d2376610b9526d0b8a82d35c 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 139/139] SES-209 Fixed merge related errors in Style Context MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Christopher Hätty --- 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);